diff mbox

[24/24,v2] system: allow DHCP interface with systemd-networkd

Message ID f1c505051eef3830d3cea769967f7218bd70e7c9.1466622379.git.yann.morin.1998@free.fr
State Changes Requested
Headers show

Commit Message

Yann E. MORIN June 22, 2016, 7:07 p.m. UTC
It is pretty trivial to enable a DHCP interface with systemd-networkd, we
just need to provide a .network config file with just the name of the
interface to bring up and activate DHCP on it.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
 package/skeleton-systemd/skeleton-systemd.mk | 12 +++++++++++-
 system/Config.in                             |  9 +++------
 2 files changed, 14 insertions(+), 7 deletions(-)

Comments

Romain Naour July 3, 2016, 12:59 p.m. UTC | #1
Hi Yann,

Le 22/06/2016 à 21:07, Yann E. MORIN a écrit :
> It is pretty trivial to enable a DHCP interface with systemd-networkd, we
> just need to provide a .network config file with just the name of the
> interface to bring up and activate DHCP on it.
> 
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>


Reviewed-by: Romain Naour <romain.naour@gmail.com>

Best regards,
Romain


> ---
>  package/skeleton-systemd/skeleton-systemd.mk | 12 +++++++++++-
>  system/Config.in                             |  9 +++------
>  2 files changed, 14 insertions(+), 7 deletions(-)
> 
> diff --git a/package/skeleton-systemd/skeleton-systemd.mk b/package/skeleton-systemd/skeleton-systemd.mk
> index c7c2e26..cbaded2 100644
> --- a/package/skeleton-systemd/skeleton-systemd.mk
> +++ b/package/skeleton-systemd/skeleton-systemd.mk
> @@ -15,7 +15,17 @@ SKELETON_SYSTEMD_ADD_SKELETON_DEPENDENCY = NO
>  
>  # In case we're not using systemd-networkd, use the sysv-like network infra;
>  # otherwise, the necessary bits are installed by the systemd package.
> -ifeq ($(BR2_PACKAGE_SYSTEMD_NETWORKD),)
> +ifeq ($(BR2_PACKAGE_SYSTEMD_NETWORKD),y)
> +
> +define SKELETON_SYSTEMD_SET_NETWORK
> +	mkdir -p $(TARGET_DIR)/etc/systemd/network
> +	printf '[Match]\nName=%s\n[Network]\nDHCP=yes\n' \
> +		$(SKELETON_NETWORK_DHCP_IFACE) \
> +		>$(TARGET_DIR)/etc/systemd/network/$(SKELETON_NETWORK_DHCP_IFACE).network
> +endef
> +SKELETON_SYSTEMD_TARGET_FINALIZE_HOOKS += SKELETON_SYSTEMD_SET_NETWORK
> +
> +else # BR2_PACKAGE_SYSTEMD_NETWORKD is not set
>  
>  define SKELETON_SYSTEMD_RSYNC_NETWORK
>  	 $(call SKELETON_RSYNC,system/skeleton-net,$(TARGET_DIR))
> diff --git a/system/Config.in b/system/Config.in
> index 32d6542..c90866c 100644
> --- a/system/Config.in
> +++ b/system/Config.in
> @@ -362,7 +362,7 @@ config BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW
>  config BR2_SYSTEM_DHCP
>  	string "Network interface to configure through DHCP"
>  	default ""
> -	depends on !BR2_PACKAGE_SYSTEMD_NETWORKD && (BR2_PACKAGE_BUSYBOX || BR2_PACKAGE_IFUPDOWN)
> +	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.
> @@ -372,11 +372,8 @@ config BR2_SYSTEM_DHCP
>  	  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)
> +comment "automatic network configuration via DHCP needs systemd, busybox or ifupdown"
> +	depends on !(BR2_PACKAGE_SYSTEMD_NETWORKD || BR2_PACKAGE_BUSYBOX || BR2_PACKAGE_IFUPDOWN)
>  
>  endif # BR2_ROOTFS_SKELETON_DEFAULT
>  
>
diff mbox

Patch

diff --git a/package/skeleton-systemd/skeleton-systemd.mk b/package/skeleton-systemd/skeleton-systemd.mk
index c7c2e26..cbaded2 100644
--- a/package/skeleton-systemd/skeleton-systemd.mk
+++ b/package/skeleton-systemd/skeleton-systemd.mk
@@ -15,7 +15,17 @@  SKELETON_SYSTEMD_ADD_SKELETON_DEPENDENCY = NO
 
 # In case we're not using systemd-networkd, use the sysv-like network infra;
 # otherwise, the necessary bits are installed by the systemd package.
-ifeq ($(BR2_PACKAGE_SYSTEMD_NETWORKD),)
+ifeq ($(BR2_PACKAGE_SYSTEMD_NETWORKD),y)
+
+define SKELETON_SYSTEMD_SET_NETWORK
+	mkdir -p $(TARGET_DIR)/etc/systemd/network
+	printf '[Match]\nName=%s\n[Network]\nDHCP=yes\n' \
+		$(SKELETON_NETWORK_DHCP_IFACE) \
+		>$(TARGET_DIR)/etc/systemd/network/$(SKELETON_NETWORK_DHCP_IFACE).network
+endef
+SKELETON_SYSTEMD_TARGET_FINALIZE_HOOKS += SKELETON_SYSTEMD_SET_NETWORK
+
+else # BR2_PACKAGE_SYSTEMD_NETWORKD is not set
 
 define SKELETON_SYSTEMD_RSYNC_NETWORK
 	 $(call SKELETON_RSYNC,system/skeleton-net,$(TARGET_DIR))
diff --git a/system/Config.in b/system/Config.in
index 32d6542..c90866c 100644
--- a/system/Config.in
+++ b/system/Config.in
@@ -362,7 +362,7 @@  config BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW
 config BR2_SYSTEM_DHCP
 	string "Network interface to configure through DHCP"
 	default ""
-	depends on !BR2_PACKAGE_SYSTEMD_NETWORKD && (BR2_PACKAGE_BUSYBOX || BR2_PACKAGE_IFUPDOWN)
+	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.
@@ -372,11 +372,8 @@  config BR2_SYSTEM_DHCP
 	  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)
+comment "automatic network configuration via DHCP needs systemd, busybox or ifupdown"
+	depends on !(BR2_PACKAGE_SYSTEMD_NETWORKD || BR2_PACKAGE_BUSYBOX || BR2_PACKAGE_IFUPDOWN)
 
 endif # BR2_ROOTFS_SKELETON_DEFAULT