]> git.ipfire.org Git - thirdparty/dracut.git/blob - modules.d/35network-legacy/dhclient-script.sh
network: fix an error message
[thirdparty/dracut.git] / modules.d / 35network-legacy / dhclient-script.sh
1 #!/bin/sh
2
3 PATH=/usr/sbin:/usr/bin:/sbin:/bin
4
5 type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
6 type ip_to_var >/dev/null 2>&1 || . /lib/net-lib.sh
7
8 # We already need a set netif here
9 netif=$interface
10
11 setup_interface() {
12 ip=$new_ip_address
13 mtu=$new_interface_mtu
14 mask=$new_subnet_mask
15 bcast=$new_broadcast_address
16 gw=${new_routers%%,*}
17 domain=$new_domain_name
18 search=$(printf -- "$new_domain_search")
19 namesrv=$new_domain_name_servers
20 hostname=$new_host_name
21 [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
22 [ -n "$new_max_life" ] && lease_time=$new_max_life
23 preferred_lft=$lease_time
24 [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
25
26 [ -f /tmp/net.$netif.override ] && . /tmp/net.$netif.override
27
28 # Taken from debian dhclient-script:
29 # The 576 MTU is only used for X.25 and dialup connections
30 # where the admin wants low latency. Such a low MTU can cause
31 # problems with UDP traffic, among other things. As such,
32 # disallow MTUs from 576 and below by default, so that broken
33 # MTUs are ignored, but higher stuff is allowed (1492, 1500, etc).
34 if [ -n "$mtu" ] && [ $mtu -gt 576 ] ; then
35 if ! ip link set $netif mtu $mtu ; then
36 ip link set $netif down
37 ip link set $netif mtu $mtu
38 linkup $netif
39 fi
40 fi
41
42 ip addr add $ip${mask:+/$mask} ${bcast:+broadcast $bcast} dev $netif \
43 ${lease_time:+valid_lft $lease_time} \
44 ${preferred_lft:+preferred_lft ${preferred_lft}}
45
46 if [ -n "$gw" ] ; then
47 if [ "$mask" = "255.255.255.255" ] ; then
48 # point-to-point connection => set explicit route to gateway
49 echo ip route add $gw dev $netif > /tmp/net.$netif.gw
50 fi
51
52 echo "$gw" | {
53 IFS=' ' read -r main_gw other_gw
54 echo ip route replace default via $main_gw dev $netif >> /tmp/net.$netif.gw
55 if [ -n "$other_gw" ] ; then
56 for g in $other_gw; do
57 echo ip route add default via $g dev $netif >> /tmp/net.$netif.gw
58 done
59 fi
60 }
61 fi
62
63 if getargbool 1 rd.peerdns; then
64 [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net.$netif.resolv.conf
65 if [ -n "$namesrv" ] ; then
66 for s in $namesrv; do
67 echo nameserver $s
68 done
69 fi >> /tmp/net.$netif.resolv.conf
70 fi
71 # Note: hostname can be fqdn OR short hostname, so chop off any
72 # trailing domain name and explicity add any domain if set.
73 [ -n "$hostname" ] && echo "echo ${hostname%.$domain}${domain:+.$domain} > /proc/sys/kernel/hostname" > /tmp/net.$netif.hostname
74 }
75
76 setup_interface6() {
77 domain=$new_domain_name
78 search=$(printf -- "$new_domain_search")
79 namesrv=$new_domain_name_servers
80 hostname=$new_host_name
81 [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
82 [ -n "$new_max_life" ] && lease_time=$new_max_life
83 preferred_lft=$lease_time
84 [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
85
86 [ -f /tmp/net.$netif.override ] && . /tmp/net.$netif.override
87
88 ip -6 addr add ${new_ip6_address}/${new_ip6_prefixlen} \
89 dev ${netif} scope global \
90 ${lease_time:+valid_lft $lease_time} \
91 ${preferred_lft:+preferred_lft ${preferred_lft}}
92
93 if getargbool 1 rd.peerdns; then
94 [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net.$netif.resolv.conf
95 if [ -n "$namesrv" ] ; then
96 for s in $namesrv; do
97 echo nameserver $s
98 done
99 fi >> /tmp/net.$netif.resolv.conf
100 fi
101
102 # Note: hostname can be fqdn OR short hostname, so chop off any
103 # trailing domain name and explicity add any domain if set.
104 [ -n "$hostname" ] && echo "echo ${hostname%.$domain}${domain:+.$domain} > /proc/sys/kernel/hostname" > /tmp/net.$netif.hostname
105 }
106
107 parse_option_121() {
108 while [ $# -ne 0 ]; do
109 mask="$1"
110 shift
111
112 # Is the destination a multicast group?
113 if [ $1 -ge 224 -a $1 -lt 240 ]; then
114 multicast=1
115 else
116 multicast=0
117 fi
118
119 # Parse the arguments into a CIDR net/mask string
120 if [ $mask -gt 24 ]; then
121 destination="$1.$2.$3.$4/$mask"
122 shift; shift; shift; shift
123 elif [ $mask -gt 16 ]; then
124 destination="$1.$2.$3.0/$mask"
125 shift; shift; shift
126 elif [ $mask -gt 8 ]; then
127 destination="$1.$2.0.0/$mask"
128 shift; shift
129 else
130 destination="$1.0.0.0/$mask"
131 shift
132 fi
133
134 # Read the gateway
135 gateway="$1.$2.$3.$4"
136 shift; shift; shift; shift
137
138 # Multicast routing on Linux
139 # - If you set a next-hop address for a multicast group, this breaks with Cisco switches
140 # - If you simply leave it link-local and attach it to an interface, it works fine.
141 if [ $multicast -eq 1 ]; then
142 temp_result="$destination dev $interface"
143 else
144 temp_result="$destination via $gateway dev $interface"
145 fi
146
147 echo "/sbin/ip route add $temp_result"
148 done
149 }
150
151
152 case $reason in
153 PREINIT)
154 echo "dhcp: PREINIT $netif up"
155 linkup $netif
156 ;;
157
158 PREINIT6)
159 echo "dhcp: PREINIT6 $netif up"
160 linkup $netif
161 wait_for_ipv6_dad_link $netif
162 ;;
163
164 BOUND)
165 echo "dhcp: BOND setting $netif"
166 unset layer2
167 if [ -f /sys/class/net/$netif/device/layer2 ]; then
168 read layer2 < /sys/class/net/$netif/device/layer2
169 fi
170 if [ "$layer2" != "0" ]; then
171 if command -v arping2 >/dev/null; then
172 if arping2 -q -C 1 -c 2 -I $netif -0 $new_ip_address ; then
173 warn "Duplicate address detected for $new_ip_address while doing dhcp. retrying"
174 exit 1
175 fi
176 else
177 if ! arping -f -q -D -c 2 -I $netif $new_ip_address ; then
178 warn "Duplicate address detected for $new_ip_address while doing dhcp. retrying"
179 exit 1
180 fi
181 fi
182 fi
183 unset layer2
184 setup_interface
185 set | while read line || [ -n "$line" ]; do
186 [ "${line#new_}" = "$line" ] && continue
187 echo "$line"
188 done >/tmp/dhclient.$netif.dhcpopts
189
190 {
191 echo '. /lib/net-lib.sh'
192 echo "setup_net $netif"
193 if [ -n "$new_classless_static_routes" ]; then
194 OLDIFS="$IFS"
195 IFS=".$IFS"
196 parse_option_121 $new_classless_static_routes
197 IFS="$OLDIFS"
198 fi
199 echo "source_hook initqueue/online $netif"
200 [ -e /tmp/net.$netif.manualup ] || echo "/sbin/netroot $netif"
201 echo "rm -f -- $hookdir/initqueue/setup_net_$netif.sh"
202 } > $hookdir/initqueue/setup_net_$netif.sh
203
204 echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/dhclient-$netif.sh
205 >/tmp/net.$netif.up
206 if [ -e /sys/class/net/${netif}/address ]; then
207 > /tmp/net.$(cat /sys/class/net/${netif}/address).up
208 fi
209
210 ;;
211
212 RENEW|REBIND)
213 unset lease_time
214 [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
215 [ -n "$new_max_life" ] && lease_time=$new_max_life
216 preferred_lft=$lease_time
217 [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
218 ip -4 addr change ${new_ip_address}/${new_subnet_mask} broadcast ${new_broadcast_address} dev ${interface} \
219 ${lease_time:+valid_lft $lease_time} ${preferred_lft:+preferred_lft ${preferred_lft}} \
220 >/dev/null 2>&1
221 ;;
222
223 BOUND6)
224 echo "dhcp: BOND6 setting $netif"
225 setup_interface6
226
227 set | while read line || [ -n "$line" ]; do
228 [ "${line#new_}" = "$line" ] && continue
229 echo "$line"
230 done >/tmp/dhclient.$netif.dhcpopts
231
232 {
233 echo '. /lib/net-lib.sh'
234 echo "setup_net $netif"
235 echo "source_hook initqueue/online $netif"
236 [ -e /tmp/net.$netif.manualup ] || echo "/sbin/netroot $netif"
237 echo "rm -f -- $hookdir/initqueue/setup_net_$netif.sh"
238 } > $hookdir/initqueue/setup_net_$netif.sh
239
240 echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/dhclient-$netif.sh
241 >/tmp/net.$netif.up
242 if [ -e /sys/class/net/${netif}/address ]; then
243 > /tmp/net.$(cat /sys/class/net/${netif}/address).up
244 fi
245 ;;
246
247 RENEW6|REBIND6)
248 unset lease_time
249 [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
250 [ -n "$new_max_life" ] && lease_time=$new_max_life
251 preferred_lft=$lease_time
252 [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
253 ip -6 addr change ${new_ip6_address}/${new_ip6_prefixlen} dev ${interface} scope global \
254 ${lease_time:+valid_lft $lease_time} ${preferred_lft:+preferred_lft ${preferred_lft}} \
255 >/dev/null 2>&1
256 ;;
257
258 *) echo "dhcp: $reason";;
259 esac
260
261 exit 0