summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMingli Yu <mingli.yu@windriver.com>2020-04-02 14:26:08 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-04-02 08:27:19 +0100
commit27aec88c2ff4588acacadbe1cd61d7ce233fc817 (patch)
treede8e6212b0968d80b2b057fe1428be3419ec9ff0
parent69b3b093079c2ca2744d6c02747c5d1b5d3e7ecf (diff)
downloadopenembedded-core-27aec88c2ff4588acacadbe1cd61d7ce233fc817.tar.gz
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 <mingli.yu@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/recipes-connectivity/dhcp/files/dhclient-systemd-wrapper26
1 files changed, 25 insertions, 1 deletions
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