diff options
| -rw-r--r-- | meta/recipes-connectivity/dhcp/files/dhclient-systemd-wrapper | 26 |
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 @@ | |||
| 1 | #!/bin/sh | 1 | #!/bin/sh |
| 2 | 2 | ||
| 3 | # Add an initial /var/lib/dhcp/dhclient.leases to make | ||
| 4 | # sure the IP which dhclient try to renew is the same | ||
| 5 | # with the IP which kernel got from dhcp server during | ||
| 6 | # boot | ||
| 7 | update_dhclient_leases() | ||
| 8 | { | ||
| 9 | local addr=$1 | ||
| 10 | local interface=$2 | ||
| 11 | echo "lease {" >> /var/lib/dhcp/dhclient.leases | ||
| 12 | echo " interface \"${addr}\";" >> /var/lib/dhcp/dhclient.leases | ||
| 13 | echo " fixed-address ${interface:0:-3};" >> /var/lib/dhcp/dhclient.leases | ||
| 14 | echo "}" >> /var/lib/dhcp/dhclient.leases | ||
| 15 | } | ||
| 16 | |||
| 3 | # In case the interface is used for nfs, skip it. | 17 | # In case the interface is used for nfs, skip it. |
| 4 | nfsroot=0 | 18 | nfsroot=0 |
| 5 | interfaces="" | 19 | interfaces="" |
| @@ -19,6 +33,7 @@ while read dev mtpt fstype rest; do | |||
| 19 | done | 33 | done |
| 20 | exec 0<&9 9<&- | 34 | exec 0<&9 9<&- |
| 21 | 35 | ||
| 36 | |||
| 22 | if [ $nfsroot -eq 0 ]; then | 37 | if [ $nfsroot -eq 0 ]; then |
| 23 | interfaces="$INTERFACES" | 38 | interfaces="$INTERFACES" |
| 24 | else | 39 | else |
| @@ -27,7 +42,16 @@ else | |||
| 27 | fi | 42 | fi |
| 28 | for i in $INTERFACES; do | 43 | for i in $INTERFACES; do |
| 29 | if test "x$i" = "x$nfs_iface"; then | 44 | if test "x$i" = "x$nfs_iface"; then |
| 30 | echo "dhclient skipping nfsroot interface $i" | 45 | interface_addr=`ip -4 address show $nfs_iface | grep 'inet '|sed 's/.*inet \(\S\+\).*/\1/'` |
| 46 | if [ "x$interface_addr" != "x" ] && cat /proc/cmdline | grep "ip=dhcp" > /dev/null ; then | ||
| 47 | # use to renew lease if needed | ||
| 48 | interfaces="$interfaces $i" | ||
| 49 | # use to update /var/lib/dhcp/dhclient.leases if needed | ||
| 50 | # when the ip got by kernel, we need use dhclient to renew the ip | ||
| 51 | update_dhclient_leases $nfs_iface $interface_addr | ||
| 52 | else | ||
| 53 | echo "dhclient skipping nfsroot interface $i" | ||
| 54 | fi | ||
| 31 | else | 55 | else |
| 32 | interfaces="$interfaces $i" | 56 | interfaces="$interfaces $i" |
| 33 | fi | 57 | fi |
