blob: 87c60fa95fe971697121419f457cdbf5643fd20d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
#!/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=""
exec 9<&0 < /proc/mounts
while read dev mtpt fstype rest; do
if test $mtpt = "/" ; then
case $fstype in
nfs | nfs4)
nfsroot=1
nfs_addr=`echo $rest | sed -e 's/^.*addr=\([0-9.]*\).*$/\1/'`
break
;;
*)
;;
esac
fi
done
exec 0<&9 9<&-
if [ $nfsroot -eq 0 ]; then
interfaces="$INTERFACES"
else
if [ -x /bin/ip -o -x /sbin/ip ] ; then
nfs_iface=`ip route get $nfs_addr | grep dev | sed -e 's/^.*dev \([-a-z0-9.]*\).*$/\1/'`
fi
for i in $INTERFACES; do
if test "x$i" = "x$nfs_iface"; then
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
done
fi
if test "x$interfaces" != "x"; then
/sbin/dhclient -d -cf /etc/dhcp/dhclient.conf -q -lf /var/lib/dhcp/dhclient.leases $interfaces
fi
|