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