Magellan Linux

Contents of /trunk/dracut/udhcpc-script.sh

Parent Directory Parent Directory | Revision Log 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)
-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