From 27aec88c2ff4588acacadbe1cd61d7ce233fc817 Mon Sep 17 00:00:00 2001 From: Mingli Yu Date: Thu, 2 Apr 2020 14:26:08 +0800 Subject: 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 --- .../dhcp/files/dhclient-systemd-wrapper | 26 +++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) 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 -- cgit 1.2.3-korg