]> git.ipfire.org Git - thirdparty/dracut.git/blame - modules.d/40network/dhclient-script.sh
network/ifup.sh: save return value of ifup
[thirdparty/dracut.git] / modules.d / 40network / dhclient-script.sh
CommitLineData
3b403b32 1#!/bin/sh
7e9919b9 2
a9d30a40
HH
3PATH=/usr/sbin:/usr/bin:/sbin:/bin
4
5type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
6type ip_to_var >/dev/null 2>&1 || . /lib/net-lib.sh
7
8# We already need a set netif here
9netif=$interface
10
11# Huh? Interface configured?
12[ -f "/tmp/net.$netif.up" ] && exit 0
13
7e9919b9 14setup_interface() {
580bb541
PS
15 ip=$new_ip_address
16 mtu=$new_interface_mtu
17 mask=$new_subnet_mask
18 bcast=$new_broadcast_address
19 gw=${new_routers%%,*}
20 domain=$new_domain_name
b093aa2d 21 search=$(printf -- "$new_domain_search")
580bb541
PS
22 namesrv=$new_domain_name_servers
23 hostname=$new_host_name
8d09f493
HH
24 [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
25 [ -n "$new_max_life" ] && lease_time=$new_max_life
26 preferred_lft=$lease_time
27 [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
580bb541
PS
28
29 [ -f /tmp/net.$netif.override ] && . /tmp/net.$netif.override
30
d1dd6bb7
PS
31 # Taken from debian dhclient-script:
32 # The 576 MTU is only used for X.25 and dialup connections
33 # where the admin wants low latency. Such a low MTU can cause
34 # problems with UDP traffic, among other things. As such,
35 # disallow MTUs from 576 and below by default, so that broken
36 # MTUs are ignored, but higher stuff is allowed (1492, 1500, etc).
37 if [ -n "$mtu" ] && [ $mtu -gt 576 ] ; then
c6c704fd
HH
38 if ! ip link set $netif mtu $mtu ; then
39 ip link set $netif down
40 ip link set $netif mtu $mtu
6cb77ea9 41 linkup $netif
c6c704fd
HH
42 fi
43 fi
7e9919b9 44
0f89ec31
HH
45 ip addr add $ip${mask:+/$mask} ${bcast:+broadcast $bcast} dev $netif \
46 ${lease_time:+valid_lft $lease_time} \
47 ${preferred_lft:+preferred_lft ${preferred_lft}}
db815843 48
99ccbc30 49 if [ -n "$gw" ] ; then
78362bc5 50 if [ "$mask" = "255.255.255.255" ] ; then
99ccbc30
GE
51 # point-to-point connection => set explicit route to gateway
52 echo ip route add $gw dev $netif > /tmp/net.$netif.gw
53 fi
54 echo ip route replace default via $gw dev $netif >> /tmp/net.$netif.gw
55 fi
db815843 56
df0bdd5a
HH
57 if getargbool 1 rd.peerdns; then
58 [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net.$netif.resolv.conf
59 if [ -n "$namesrv" ] ; then
60 for s in $namesrv; do
61 echo nameserver $s
62 done
63 fi >> /tmp/net.$netif.resolv.conf
64 fi
da55af47
ID
65 # Note: hostname can be fqdn OR short hostname, so chop off any
66 # trailing domain name and explicity add any domain if set.
ffc68f35 67 [ -n "$hostname" ] && echo "echo ${hostname%.$domain}${domain:+.$domain} > /proc/sys/kernel/hostname" > /tmp/net.$netif.hostname
7e9919b9
DD
68}
69
2ac599dc
HH
70setup_interface6() {
71 domain=$new_domain_name
72 search=$(printf -- "$new_domain_search")
73 namesrv=$new_domain_name_servers
74 hostname=$new_host_name
ebe74116
HH
75 [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
76 [ -n "$new_max_life" ] && lease_time=$new_max_life
77 preferred_lft=$lease_time
78 [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
2ac599dc
HH
79
80 [ -f /tmp/net.$netif.override ] && . /tmp/net.$netif.override
81
82 ip -6 addr add ${new_ip6_address}/${new_ip6_prefixlen} \
ebe74116
HH
83 dev ${netif} scope global \
84 ${lease_time:+valid_lft $lease_time} \
85 ${preferred_lft:+preferred_lft ${preferred_lft}}
2ac599dc 86
df0bdd5a
HH
87 if getargbool 1 rd.peerdns; then
88 [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net.$netif.resolv.conf
89 if [ -n "$namesrv" ] ; then
90 for s in $namesrv; do
91 echo nameserver $s
92 done
93 fi >> /tmp/net.$netif.resolv.conf
94 fi
2ac599dc
HH
95
96 # Note: hostname can be fqdn OR short hostname, so chop off any
97 # trailing domain name and explicity add any domain if set.
98 [ -n "$hostname" ] && echo "echo ${hostname%.$domain}${domain:+.$domain} > /proc/sys/kernel/hostname" > /tmp/net.$netif.hostname
99}
100
7e9919b9
DD
101case $reason in
102 PREINIT)
cc02093d 103 echo "dhcp: PREINIT $netif up"
6cb77ea9 104 linkup $netif
cc02093d 105 ;;
2ac599dc 106
a9d30a40 107 PREINIT6)
7c5ec0f5 108 echo "dhcp: PREINIT6 $netif up"
a9d30a40 109 linkup $netif
7c5ec0f5 110 wait_for_ipv6_dad $netif
a9d30a40
HH
111 ;;
112
7e9919b9 113 BOUND)
cc02093d 114 echo "dhcp: BOND setting $netif"
8b88dc7f
HH
115 unset layer2
116 if [ -f /sys/class/net/$netif/device/layer2 ]; then
117 read layer2 < /sys/class/net/$netif/device/layer2
cc02093d 118 fi
8b88dc7f 119 if [ "$layer2" != "0" ]; then
4483fff8 120 if ! arping -f -q -D -c 2 -I $netif $new_ip_address ; then
8b88dc7f
HH
121 warn "Duplicate address detected for $new_ip_address while doing dhcp. retrying"
122 exit 1
123 fi
124 fi
125 unset layer2
3b403b32 126 setup_interface
6d58fa27 127 set | while read line || [ -n "$line" ]; do
cc02093d 128 [ "${line#new_}" = "$line" ] && continue
3b403b32 129 echo "$line"
cc02093d 130 done >/tmp/dhclient.$netif.dhcpopts
957bc5c9 131
c6c704fd
HH
132 {
133 echo '. /lib/net-lib.sh'
134 echo "setup_net $netif"
135 echo "source_hook initqueue/online $netif"
136 [ -e /tmp/net.$netif.manualup ] || echo "/sbin/netroot $netif"
32bd2fbb 137 echo "rm -f -- $hookdir/initqueue/setup_net_$netif.sh"
c6c704fd
HH
138 } > $hookdir/initqueue/setup_net_$netif.sh
139
43a85a73 140 echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/dhclient-$netif.sh
2ac599dc
HH
141 >/tmp/net.$netif.up
142 ;;
143
cf627b20
HH
144 RENEW|REBIND)
145 unset lease_time
146 [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
147 [ -n "$new_max_life" ] && lease_time=$new_max_life
148 preferred_lft=$lease_time
149 [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
150 ip -4 addr change ${new_ip_address}/${new_prefix} broadcast ${new_broadcast_address} dev ${interface} \
151 ${lease_time:+valid_lft $lease_time} ${preferred_lft:+preferred_lft ${preferred_lft}} \
152 >/dev/null 2>&1
153 ;;
154
2ac599dc
HH
155 BOUND6)
156 echo "dhcp: BOND6 setting $netif"
157 setup_interface6
158
6d58fa27 159 set | while read line || [ -n "$line" ]; do
2ac599dc
HH
160 [ "${line#new_}" = "$line" ] && continue
161 echo "$line"
162 done >/tmp/dhclient.$netif.dhcpopts
163
164 {
165 echo '. /lib/net-lib.sh'
166 echo "setup_net $netif"
167 echo "source_hook initqueue/online $netif"
168 [ -e /tmp/net.$netif.manualup ] || echo "/sbin/netroot $netif"
2ac599dc
HH
169 echo "rm -f -- $hookdir/initqueue/setup_net_$netif.sh"
170 } > $hookdir/initqueue/setup_net_$netif.sh
171
43a85a73 172 echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/dhclient-$netif.sh
c6c704fd 173 >/tmp/net.$netif.up
cc02093d 174 ;;
cf627b20
HH
175
176 RENEW6|REBIND6)
177 unset lease_time
178 [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
179 [ -n "$new_max_life" ] && lease_time=$new_max_life
180 preferred_lft=$lease_time
181 [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
182 ip -6 addr change ${new_ip6_address}/${new_ip6_prefixlen} dev ${interface} scope global \
183 ${lease_time:+valid_lft $lease_time} ${preferred_lft:+preferred_lft ${preferred_lft}} \
184 >/dev/null 2>&1
185 ;;
186
9ab14265 187 *) echo "dhcp: $reason";;
0ac9584d 188esac
7e9919b9 189
7e9919b9 190exit 0