Allow a single DHCP configuration via the system configuration submenu
authorJeremy Rosen <jeremy.rosen@openwide.fr>
Fri, 16 Jan 2015 13:08:39 +0000 (14:08 +0100)
committerPeter Korsgaard <peter@korsgaard.com>
Mon, 2 Feb 2015 20:42:47 +0000 (21:42 +0100)
This patch allows the setup of simple a single interface to be
automatically brought up and configured via DHCP on system startup.

The interface name can be set via a configuration option. This patch
does not support systemd-networkd, any complex network configuration should
be done via overlay of /etc/network/interfaces or the relevant networkd
configuration file

[Peter: rename to BR2_SYSTEM_DHCP, tweak help text & implementation]
Signed-off-by: Jérémy Rosen <jeremy.rosen@openwide.fr>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
system/Config.in
system/skeleton/etc/network/interfaces [deleted file]
system/system.mk

index e9f24285325820166db25533eb75e46e09f8cfa9..95e10ab8e998b0152178e1c6086d413e57a8309a 100644 (file)
@@ -326,6 +326,26 @@ config BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW
 
 endif # BR2_ROOTFS_SKELETON_DEFAULT
 
+
+config BR2_SYSTEM_DHCP
+       string "Network interface to configure through DHCP"
+       default ""
+       depends on !BR2_PACKAGE_SYSTEMD_NETWORKD && (BR2_PACKAGE_BUSYBOX || BR2_PACKAGE_IFUPDOWN)
+       help
+         Enter here the name of the network interface (E.G. eth0) to
+         automatically configure through DHCP at bootup.
+
+         If left empty, no automatic DHCP requests will take place.
+
+         For more complicated network setups use an overlay to overwrite
+         /etc/network/interfaces or add a networkd configuration file.
+
+comment "automatic network configuration via DHCP is not compatible with networkd"
+       depends on BR2_PACKAGE_SYSTEMD_NETWORKD
+
+comment "automatic network configuration via DHCP needs ifupdown or busybox"
+       depends on !(BR2_PACKAGE_BUSYBOX || BR2_PACKAGE_IFUPDOWN)
+
 config BR2_TARGET_TZ_INFO
        bool "Install timezone info"
        # No timezone for musl; only for uClibc or (e)glibc.
diff --git a/system/skeleton/etc/network/interfaces b/system/skeleton/etc/network/interfaces
deleted file mode 100644 (file)
index 218b82c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# Configure Loopback
-auto lo
-iface lo inet loopback
-
index e4a3160e5142e7e3bdb0ef8de1d7975d29099f68..4a1eb4a4a1ce6afcdc55e4b36bf614ee505e1e28 100644 (file)
@@ -38,6 +38,35 @@ ifneq ($(TARGET_GENERIC_ROOT_PASSWD),)
 TARGETS += host-mkpasswd
 endif
 
+define SET_NETWORK_LOCALHOST
+       ( \
+               echo "# interface file auto-generated by buildroot"; \
+               echo ;                                               \
+               echo "auto lo";                                      \
+               echo "iface lo inet loopback";                       \
+       ) > $(TARGET_DIR)/etc/network/interfaces
+endef
+
+NETWORK_DHCP_IFACE = $(call qstrip,$(BR2_SYSTEM_DHCP))
+
+ifneq ($(NETWORK_DHCP_IFACE),)
+define SET_NETWORK_DHCP
+       ( \
+               echo ;                                               \
+               echo "auto $(NETWORK_DHCP_IFACE)";                   \
+               echo "iface $(NETWORK_DHCP_IFACE) inet dhcp";        \
+       ) >> $(TARGET_DIR)/etc/network/interfaces
+endef
+endif
+
+define SET_NETWORK
+       mkdir -p $(TARGET_DIR)/etc/network/
+       $(SET_NETWORK_LOCALHOST)
+       $(SET_NETWORK_DHCP)
+endef
+
+TARGET_FINALIZE_HOOKS += SET_NETWORK
+
 ifeq ($(BR2_ROOTFS_SKELETON_DEFAULT),y)
 
 define SYSTEM_ROOT_PASSWD