From: Mingli Yu Date: Thu, 2 Apr 2020 06:26:08 +0000 (+0800) Subject: dhclient: not always skip the nfsroot interface X-Git-Tag: 2020-04-dunfell~34 X-Git-Url: https://code.ossystems.io/gitweb?a=commitdiff_plain;h=27aec88c2ff4588acacadbe1cd61d7ce233fc817;p=openembedded-core.git dhclient: not always skip the nfsroot interface Don't skip the nfsroot interface when use dhcp to get the address for nfsroot interface as the nfsroot interface may need dhclient to renew the lease. Signed-off-by: Mingli Yu Signed-off-by: Richard Purdie --- diff --git a/meta/recipes-connectivity/dhcp/files/dhclient-systemd-wrapper b/meta/recipes-connectivity/dhcp/files/dhclient-systemd-wrapper index 7d0e224a1d..87c60fa95f 100644 --- a/meta/recipes-connectivity/dhcp/files/dhclient-systemd-wrapper +++ b/meta/recipes-connectivity/dhcp/files/dhclient-systemd-wrapper @@ -1,5 +1,19 @@ #!/bin/sh +# Add an initial /var/lib/dhcp/dhclient.leases to make +# sure the IP which dhclient try to renew is the same +# with the IP which kernel got from dhcp server during +# boot +update_dhclient_leases() +{ + local addr=$1 + local interface=$2 + echo "lease {" >> /var/lib/dhcp/dhclient.leases + echo " interface \"${addr}\";" >> /var/lib/dhcp/dhclient.leases + echo " fixed-address ${interface:0:-3};" >> /var/lib/dhcp/dhclient.leases + echo "}" >> /var/lib/dhcp/dhclient.leases +} + # In case the interface is used for nfs, skip it. nfsroot=0 interfaces="" @@ -19,6 +33,7 @@ while read dev mtpt fstype rest; do done exec 0<&9 9<&- + if [ $nfsroot -eq 0 ]; then interfaces="$INTERFACES" else @@ -27,7 +42,16 @@ else fi for i in $INTERFACES; do if test "x$i" = "x$nfs_iface"; then - echo "dhclient skipping nfsroot interface $i" + interface_addr=`ip -4 address show $nfs_iface | grep 'inet '|sed 's/.*inet \(\S\+\).*/\1/'` + if [ "x$interface_addr" != "x" ] && cat /proc/cmdline | grep "ip=dhcp" > /dev/null ; then + # use to renew lease if needed + interfaces="$interfaces $i" + # use to update /var/lib/dhcp/dhclient.leases if needed + # when the ip got by kernel, we need use dhclient to renew the ip + update_dhclient_leases $nfs_iface $interface_addr + else + echo "dhclient skipping nfsroot interface $i" + fi else interfaces="$interfaces $i" fi