Skip to contentSkip to conversation

Allow a single DHCP configuration via the system configuration submenu

PATCH Superseded Jérémy Rosen 2 participants 2 messages Jan 2, 2015

v2 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 Allow a single DHCP configuration via the system configuration submenu

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

---

v2 : - inline shell section instead of providing a script
- add one Config.in option instead of two

---
 system/Config.in                       | 18 ++++++++++++++++++
 system/skeleton/etc/network/interfaces |  4 ----
 system/system.mk                       | 17 +++++++++++++++++
 3 files changed, 35 insertions(+), 4 deletions(-)
 delete mode 100644 system/skeleton/etc/network/interfaces
system/Config.in +18 -0
index a3b7aff..71ba7ab 100644
@@ -324,6 +324,24 @@ config BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW
 
 endif # BR2_ROOTFS_SKELETON_DEFAULT
 
+
+config BR2_SIMPLE_DHCP
+	string "Name of the physical network interface to run DHCP on"
+	default ""
+	depends on !BR2_PACKAGE_SYSTEMD_NETWORKD
+	help
+	  The name of the network interface to configure automatically.
+	  A DHCP request will automatically happen on startup on the selected
+	  interface.
+
+	  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
+
 config BR2_TARGET_TZ_INFO
 	bool "Install timezone info"
 	# No timezone for musl; only for uClibc or (e)glibc.
system/skeleton/etc/network/interfaces deleted +0 -4
deleted file mode 100644
index 218b82c..0000000
@@ -1,4 +0,0 @@
-# Configure Loopback
-auto lo
-iface lo inet loopback
-
system/system.mk +17 -0
index e4a3160..b070919 100644
@@ -38,6 +38,23 @@ ifneq ($(TARGET_GENERIC_ROOT_PASSWD),)
 TARGETS += host-mkpasswd
 endif
 
+define SIMPLE_NETWORK
+	mkdir -p $(TARGET_DIR)/etc/network/
+
+	echo "# interface file auto-generated by buildroot" >  $(TARGET_DIR)/etc/network/interfaces
+	echo                                                >> $(TARGET_DIR)/etc/network/interfaces
+	echo "auto lo"                                      >> $(TARGET_DIR)/etc/network/interfaces
+	echo "iface lo inet loopback"                       >> $(TARGET_DIR)/etc/network/interfaces
+	echo                                                >> $(TARGET_DIR)/etc/network/interfaces
+
+	if [ -n "$(BR2_SIMPLE_DHCP)" ] ; then \
+		echo "auto $(BR2_SIMPLE_DHCP)"              >> $(TARGET_DIR)/etc/network/interfaces ; \
+		echo "iface $(BR2_SIMPLE_DHCP) inet dhcp"   >> $(TARGET_DIR)/etc/network/interfaces ; \
+	fi
+
+endef
+TARGET_FINALIZE_HOOKS += SIMPLE_NETWORK
+
 ifeq ($(BR2_ROOTFS_SKELETON_DEFAULT),y)
 
 define SYSTEM_ROOT_PASSWD
Signature · 1 line
2.1.4
#1 lore raw

PATCH v2 1/1 Allow a single DHCP configuration via the system configuration submenu

Dear J?r?my Rosen,

system/system.mk ifneq ($(TARGET_GENERIC_ROOT_PASSWD),) · line 53

Quoted 13 lines · J?r?my Rosen
system/system.mk +13 -0
+define SIMPLE_NETWORK
+	mkdir -p $(TARGET_DIR)/etc/network/
+
+	echo "# interface file auto-generated by buildroot" >  $(TARGET_DIR)/etc/network/interfaces
+	echo                                                >> $(TARGET_DIR)/etc/network/interfaces
+	echo "auto lo"                                      >> $(TARGET_DIR)/etc/network/interfaces
+	echo "iface lo inet loopback"                       >> $(TARGET_DIR)/etc/network/interfaces
+	echo                                                >> $(TARGET_DIR)/etc/network/interfaces
+
+	if [ -n "$(BR2_SIMPLE_DHCP)" ] ; then \
+		echo "auto $(BR2_SIMPLE_DHCP)"              >> $(TARGET_DIR)/etc/network/interfaces ; \
+		echo "iface $(BR2_SIMPLE_DHCP) inet dhcp"   >> $(TARGET_DIR)/etc/network/interfaces ; \
+	fi

Can we use make instead of the shell for this condition? Also, BR_SIMPLE_DHCP has some double quotes, so you probably want to use qstrip. Something like:

define SET_NETWORK_LOCALHOST

	echo "# interface file auto-generated by buildroot" >  $(TARGET_DIR)/etc/network/interfaces
	echo                                                >> $(TARGET_DIR)/etc/network/interfaces
	echo "auto lo"                                      >> $(TARGET_DIR)/etc/network/interfaces
	echo "iface lo inet loopback"                       >> $(TARGET_DIR)/etc/network/interfaces
	echo                                                >> $(TARGET_DIR)/etc/network/interfaces

endef

NETWORK_DHCP_IFACE = $(call qstrip,$(BR2_SIMPLE_DHCP))

ifneq ($(NETWORK_DHCP_IFACE),)
define SET_NETWORK_DHCP

	echo "auto $(NETWORK_DHCP_IFACE)" >> $(TARGET_DIR)/etc/network/interfaces
	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

It would be good to avoid the repeated redirects to $(TARGET_DIR)/etc/network/interfaces, but I don't immediately see an elegant way of doing that.

Thanks,

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com