Annotation of /trunk/dracut/dhcpcd-script.sh
Parent Directory | Revision Log
Revision 3217 -
(hide annotations)
(download)
(as text)
Thu Aug 23 12:12:40 2018 UTC (6 years, 1 month ago) by niro
File MIME type: application/x-sh
File size: 9260 byte(s)
Thu Aug 23 12:12:40 2018 UTC (6 years, 1 month 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 |