Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH] set simple network setup via the system configuration submenu
@ 2014-09-08 12:13 Jérémy Rosen
  2014-10-07 12:56 ` Jeremy Rosen
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Jérémy Rosen @ 2014-09-08 12:13 UTC (permalink / raw)
  To: buildroot

This patch allows the setup of simple /etc/network/interfaces via the
configuration menus instead of using an overlay

* supports the loopback interface
* supports one normal interface (renamable)
* supports manual ipv4 configuration
* supports dhcp configuration

Signed-off-by: J?r?my Rosen <jeremy.rosen@openwide.fr>

---

This patch is here to avoid having to do an overlay for the most common
cases (ipv4 with fixed IP or DHCP)

I can make it more complex (second network if, support ipv6) depending on
what people want/need, but I want to keep it simple. The point is to avoid
having to tweak overlays to change stuff that everybody needs to change for
prototyping

With regards to systemd, as far as I could figure it still uses
/etc/network/interfaces but with different names. AFAIU there is no sane
default to replace the "eth0" name so I did not put a different default
when systemd is used
---
 Makefile                               |  1 +
 support/scripts/generate-interfaces.sh | 75 ++++++++++++++++++++++++++++++++
 system/Config.in                       | 78 ++++++++++++++++++++++++++++++++++
 3 files changed, 154 insertions(+)
 create mode 100755 support/scripts/generate-interfaces.sh

diff --git a/Makefile b/Makefile
index e788f1b..71cad7d 100644
--- a/Makefile
+++ b/Makefile
@@ -477,6 +477,7 @@ $(BUILD_DIR)/.root:
 	@ln -snf lib $(TARGET_DIR)/$(LIB_SYMLINK)
 	@mkdir -p $(TARGET_DIR)/usr
 	@ln -snf lib $(TARGET_DIR)/usr/$(LIB_SYMLINK)
+	./support/scripts/generate-interfaces.sh $(TARGET_DIR)
 	touch $@
 
 $(TARGET_DIR): $(BUILD_DIR)/.root
diff --git a/support/scripts/generate-interfaces.sh b/support/scripts/generate-interfaces.sh
new file mode 100755
index 0000000..b685669
--- /dev/null
+++ b/support/scripts/generate-interfaces.sh
@@ -0,0 +1,75 @@
+#!/bin/sh
+
+
+#extract  our parameters from the config file
+for PARAM in \
+	BR2_SIMPLE_NETWORK_LO_ENABLE \
+	BR2_SIMPLE_NETWORK_LO_AUTO \
+	\
+	BR2_SIMPLE_NETWORK_1_ENABLE \
+	BR2_SIMPLE_NETWORK_1_AUTO \
+	BR2_SIMPLE_NETWORK_1_IPV4_DHCP \
+	BR2_SIMPLE_NETWORK_1_IPV4_MANUAL \
+	; do 
+TMP=$(sed -r -e "/^$PARAM=(.*)$/!d;" -e 's//\1/;' $BR2_CONFIG)
+	export $PARAM=$TMP
+done
+
+for PARAM in \
+	BR2_SIMPLE_NETWORK_1_NAME \
+	BR2_SIMPLE_NETWORK_1_IPV4_ADDRESS \
+	BR2_SIMPLE_NETWORK_1_IPV4_NETMASK \
+	BR2_SIMPLE_NETWORK_1_IPV4_BROADCAST \
+	BR2_SIMPLE_NETWORK_1_IPV4_GATEWAY \
+	; do 
+TMP=$(sed -r -e "/^$PARAM=\"(.*)\"$/!d;" -e 's//\1/;' $BR2_CONFIG)
+	export $PARAM=$TMP
+done
+
+
+
+IFACE_FILE=$TARGET_DIR/etc/network/interfaces
+echo -n > $IFACE_FILE # empty the file
+
+if [ $BR2_SIMPLE_NETWORK_LO_ENABLE ] ; then
+	if [ $BR2_SIMPLE_NETWORK_LO_AUTO ] ; then
+		echo "auto lo">> $IFACE_FILE
+	fi
+	echo "iface lo inet loopback">> $IFACE_FILE
+	echo >>$IFACE_FILE
+fi
+
+if [ $BR2_SIMPLE_NETWORK_1_ENABLE ] ; then
+	if [ -z $BR2_SIMPLE_NETWORK_1_NAME ] ; then
+		echo ERROR no name specified for first network interface
+		exit 1
+	fi
+	if [ $BR2_SIMPLE_NETWORK_1_AUTO ] ; then
+		echo "auto  $BR2_SIMPLE_NETWORK_1_NAME">> $IFACE_FILE
+	fi
+	if [ $BR2_SIMPLE_NETWORK_1_IPV4_DHCP ] ; then
+		echo "iface $BR2_SIMPLE_NETWORK_1_NAME inet dhcp">> $IFACE_FILE
+	elif [ $BR2_SIMPLE_NETWORK_1_IPV4_MANUAL ] ; then
+		for PARAM in \
+			BR2_SIMPLE_NETWORK_1_IPV4_ADDRESS \
+			BR2_SIMPLE_NETWORK_1_IPV4_NETMASK \
+			BR2_SIMPLE_NETWORK_1_IPV4_BROADCAST \
+			BR2_SIMPLE_NETWORK_1_IPV4_GATEWAY \
+			; do
+			eval VALUE=\$$PARAM
+			if [ -z $VALUE ] ; then
+				echo ERROR $PARAM not set
+				exit 1
+			fi
+		done
+		echo "iface $BR2_SIMPLE_NETWORK_1_NAME inet static">> $IFACE_FILE
+		echo "	address $BR2_SIMPLE_NETWORK_1_IPV4_ADDRESS">> $IFACE_FILE
+		echo "	netmask $BR2_SIMPLE_NETWORK_1_IPV4_NETMASK">> $IFACE_FILE
+		echo "	broadcast $BR2_SIMPLE_NETWORK_1_IPV4_BROADCAST">> $IFACE_FILE
+		echo "	gateway $BR2_SIMPLE_NETWORK_1_IPV4_GATEWAY">> $IFACE_FILE
+	else
+		echo Incorrect buildroot configuration
+		exit 1
+	fi
+	echo >>$IFACE_FILE
+fi
diff --git a/system/Config.in b/system/Config.in
index e7e146a..d5711bc 100644
--- a/system/Config.in
+++ b/system/Config.in
@@ -389,4 +389,82 @@ config BR2_ROOTFS_POST_SCRIPT_ARGS
 	  directory / images directory. The arguments in this option will be
 	  passed *after* those.
 
+menuconfig BR2_SIMPLE_NETWORK
+	bool "Generate simple network configuration"
+	default n
+	help
+	  Use buildroot to set network configuration during the build process
+
+if BR2_SIMPLE_NETWORK
+menuconfig BR2_SIMPLE_NETWORK_LO_ENABLE
+	bool "enable loopback device"
+	default y
+	help
+	   Enables the loopback interface at startup
+
+if BR2_SIMPLE_NETWORK_LO_ENABLE
+config BR2_SIMPLE_NETWORK_LO_AUTO
+	bool "enable loopback interface at startup"
+	default y
+	help 
+	   Should the loopback inteface be brought up automatically at startup
+	   
+endif
+
+menuconfig BR2_SIMPLE_NETWORK_1_ENABLE
+	bool "enable first network interface"
+	default y
+	help
+	   Enable the first network interface
+
+if BR2_SIMPLE_NETWORK_1_ENABLE
+config BR2_SIMPLE_NETWORK_1_AUTO
+	bool "enable first network interface at startup"
+	default y
+	help 
+	   Should the first network inteface be brought up automatically at startup
+
+config BR2_SIMPLE_NETWORK_1_NAME
+	string "name of the first physical network interface"
+	default "eth0"
+	help
+	   The name used to recognise the first network interface as reported by the kernel
+	
+choice 
+	prompt "Configuration type"
+	default BR2_SIMPLE_NETWORK_1_DHCP
+	help
+	   The type of configuration to use for the first physical interface
+
+config BR2_SIMPLE_NETWORK_1_IPV4_DHCP
+	bool "IPv4 with DHCP"
+	help
+	   Use DHCP to configure this interface
+	   using the IPv4 protocol
+
+config BR2_SIMPLE_NETWORK_1_IPV4_MANUAL
+	bool "IPv4 with parameters manually specified"
+	help
+	   Configure IPv4 by specifying each parameter separately
+endchoice
+
+if BR2_SIMPLE_NETWORK_1_IPV4_MANUAL
+config BR2_SIMPLE_NETWORK_1_IPV4_ADDRESS
+	string "IP Address of the first network interface"
+
+config BR2_SIMPLE_NETWORK_1_IPV4_NETMASK
+	string "Netmask of the first network interface"
+
+config BR2_SIMPLE_NETWORK_1_IPV4_BROADCAST
+	string "Broadcast Address of the first network interface"
+
+config BR2_SIMPLE_NETWORK_1_IPV4_GATEWAY
+	string "Address of the gateway for the first network interface"
+endif
+
+endif
+
+endif
+
+
 endmenu
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-10-16 15:24 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-09-08 12:13 [Buildroot] [PATCH] set simple network setup via the system configuration submenu Jérémy Rosen
2014-10-07 12:56 ` Jeremy Rosen
2014-10-12  9:08 ` Romain Naour
2014-10-13 15:34   ` Jeremy Rosen
2014-10-14 16:14     ` Romain Naour
2014-10-15 16:41 ` Arnout Vandecappelle
2014-10-16 15:24   ` Jeremy Rosen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox