Magellan Linux

Annotation of /trunk/dracut/dhcpcd-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: 9260 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_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/dhcpcd.$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/dhcpcd-$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/dhcpcd.$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/dhcpcd-$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