Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3217 - (hide annotations) (download) (as text)
Thu Aug 23 12:12:40 2018 UTC (5 years, 8 months ago) by niro
File MIME type: application/x-sh
File size: 9954 byte(s)
-added network scripts
1 niro 3217 #!/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