Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v2] set simple network setup via the system configuration submenu
@ 2014-10-20 14:14 Jérémy Rosen
  2014-10-20 21:29 ` André Erdmann
  2014-10-21  8:36 ` Thomas Petazzoni
  0 siblings, 2 replies; 10+ messages in thread
From: Jérémy Rosen @ 2014-10-20 14:14 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 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)

It can be made 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

When networkd is enabled, this option will be deactivated. Networkd support
is tricky to get right on first approximation. It can be added later if it
is deemed usefull
---

v1->v2 :
* moved to TARGET_FINALIZE
* removed support for lo. It should always be on.
* reworked default parameters
---
 support/scripts/generate-interfaces-ifconfig.sh | 70 +++++++++++++++++++++++++
 system/Config.in                                | 66 +++++++++++++++++++++++
 system/system.mk                                |  5 ++
 3 files changed, 141 insertions(+)
 create mode 100755 support/scripts/generate-interfaces-ifconfig.sh

diff --git a/support/scripts/generate-interfaces-ifconfig.sh b/support/scripts/generate-interfaces-ifconfig.sh
new file mode 100755
index 0000000..873e824
--- /dev/null
+++ b/support/scripts/generate-interfaces-ifconfig.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+
+#extract  our parameters from the config file
+# see comment in support/scripts/mkusers at to why we can't simply source
+for PARAM in \
+	BR2_SIMPLE_NETWORK \
+	BR2_SIMPLE_NETWORK_IPV4_DHCP \
+	BR2_SIMPLE_NETWORK_IPV4_MANUAL \
+	; do 
+TMP=$(sed -r -e "/^$PARAM=(.*)$/!d;" -e 's//\1/;' $BR2_CONFIG)
+	export $PARAM=$TMP
+done
+
+for PARAM in \
+	BR2_SIMPLE_NETWORK_NAME \
+	BR2_SIMPLE_NETWORK_IPV4_ADDRESS \
+	BR2_SIMPLE_NETWORK_IPV4_NETMASK \
+	BR2_SIMPLE_NETWORK_IPV4_BROADCAST \
+	BR2_SIMPLE_NETWORK_IPV4_GATEWAY \
+	; do 
+TMP=$(sed -r -e "/^$PARAM=\"(.*)\"$/!d;" -e 's//\1/;' $BR2_CONFIG)
+	export $PARAM=$TMP
+done
+
+
+function do_generate_interfaces
+{
+	echo "# interface file auto-generated by buildroot"
+	echo
+	echo "auto lo"
+	echo "iface lo inet loopback"
+	echo
+
+	if [ $BR2_SIMPLE_NETWORK ] ; then
+		if [ -z $BR2_SIMPLE_NETWORK_NAME ] ; then
+			echo ERROR no name specified for first network interface
+			exit 1
+		fi
+		echo "auto  $BR2_SIMPLE_NETWORK_NAME"
+		if [ $BR2_SIMPLE_NETWORK_IPV4_DHCP ] ; then
+			echo "iface $BR2_SIMPLE_NETWORK_NAME inet dhcp"
+		elif [ $BR2_SIMPLE_NETWORK_IPV4_MANUAL ] ; then
+			echo "iface $BR2_SIMPLE_NETWORK_NAME inet static"
+
+			if [ -z $BR2_SIMPLE_NETWORK_IPV4_ADDRESS ] ; then
+				echo ERROR BR2_SIMPLE_NETWORK_IPV4_ADDRESS not set 1>&2
+				exit 1
+			fi
+			echo "	address $BR2_SIMPLE_NETWORK_IPV4_ADDRESS"
+
+
+			if [ -z $BR2_SIMPLE_NETWORK_IPV4_NETMASK ] ; then
+				echo ERROR BR2_SIMPLE_NETWORK_IPV4_NETMASK not set 1>&2
+				exit 1
+			fi
+			echo "	netmask $BR2_SIMPLE_NETWORK_IPV4_NETMASK"
+
+			if [ $BR2_SIMPLE_NETWORK_IPV4_BROADCAST ] ; then
+				echo "	broadcast $BR2_SIMPLE_NETWORK_IPV4_BROADCAST"
+			fi
+			if [ $BR2_SIMPLE_NETWORK_IPV4_GATEWAY ] ; then
+				echo "	gateway $BR2_SIMPLE_NETWORK_IPV4_GATEWAY"
+			fi
+		fi
+	fi
+}
+
+mkdir -p $TARGET_DIR/etc/network/
+do_generate_interfaces > $TARGET_DIR/etc/network/interfaces
diff --git a/system/Config.in b/system/Config.in
index 2465f79..92ee705 100644
--- a/system/Config.in
+++ b/system/Config.in
@@ -324,6 +324,72 @@ config BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW
 
 endif # BR2_ROOTFS_SKELETON_DEFAULT
 
+comment 'Simple network configuration is not supported with  networkd'
+	depends on BR2_PACKAGE_SYSTEMD_NETWORKD
+
+config BR2_SIMPLE_NETWORK
+	bool "Generate simple network configuration"
+	depends on !BR2_PACKAGE_SYSTEMD_NETWORKD
+	default n
+	help
+	  Let buildroot create a simple  network configuration for a network
+	  interface. This will generate the corresponding lines in 
+	  /etc/network/interfaces which is used by ifupdown.
+ 
+	  The simple network configuration only supports  a single network
+	  interface using a static or DHCP-allocated IPv4 address. If you
+	  need something more complicate, create your own configuration file
+	  in the BR2_ROOTFS_OVERLAY.
+
+
+if BR2_SIMPLE_NETWORK
+
+
+config BR2_SIMPLE_NETWORK_NAME
+	string "name of the physical network interface"
+	default "eth0"
+	help
+	  The name used to recognise the network interface as reported
+	  by the kernel
+	
+choice 
+	prompt "Configuration type"
+	default BR2_SIMPLE_NETWORK_DHCP
+	help
+	  The type of configuration to use for the physical interface
+
+config BR2_SIMPLE_NETWORK_IPV4_DHCP
+	bool "IPv4 with DHCP"
+	help
+	  Use DHCP to configure this interface using the IPv4 protocol
+
+config BR2_SIMPLE_NETWORK_IPV4_MANUAL
+	bool "IPv4 with static IP address"
+	help
+	  Configure IPv4 by specifying each parameter separately
+endchoice
+
+if BR2_SIMPLE_NETWORK_IPV4_MANUAL
+config BR2_SIMPLE_NETWORK_IPV4_ADDRESS
+	string "IP Address of the network interface"
+	default "0.0.0.0"
+
+config BR2_SIMPLE_NETWORK_IPV4_NETMASK
+	string "Netmask of the network interface"
+	default "255.255.255.255"
+
+config BR2_SIMPLE_NETWORK_IPV4_BROADCAST
+	string "Broadcast Address of the network interface"
+
+config BR2_SIMPLE_NETWORK_IPV4_GATEWAY
+	string "Address of the gateway for the network interface"
+
+endif # BR2_SIMPLE_NETWORK_IPV4_MANUAL
+
+endif # BR2_SIMPLE_NETWORK
+
+
+
 config BR2_TARGET_TZ_INFO
 	bool "Install timezone info"
 	# No timezone for musl; only for uClibc or (e)glibc.
diff --git a/system/system.mk b/system/system.mk
index 5802e2d..af2641c 100644
--- a/system/system.mk
+++ b/system/system.mk
@@ -38,6 +38,11 @@ ifneq ($(TARGET_GENERIC_ROOT_PASSWD),)
 TARGETS += host-mkpasswd
 endif
 
+define SIMPLE_NETWORK
+	$(TOPDIR)/support/scripts/generate-interfaces-ifconfig.sh $(TARGET_DIR)
+endef
+TARGET_FINALIZE_HOOKS += SIMPLE_NETWORK
+
 ifeq ($(BR2_ROOTFS_SKELETON_DEFAULT),y)
 
 define SYSTEM_ROOT_PASSWD
-- 
2.1.1

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

end of thread, other threads:[~2014-10-23 10:02 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-20 14:14 [Buildroot] [PATCH v2] set simple network setup via the system configuration submenu Jérémy Rosen
2014-10-20 21:29 ` André Erdmann
2014-10-21  8:23   ` Jeremy Rosen
2014-10-22 19:39     ` André Erdmann
2014-10-23 10:02       ` Jeremy Rosen
2014-10-21  8:36 ` Thomas Petazzoni
2014-10-21  8:50   ` Jeremy Rosen
2014-10-21 18:00     ` Yann E. MORIN
2014-10-22  7:21       ` Jeremy Rosen
2014-10-22 16:12   ` Arnout Vandecappelle

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