Contents of /trunk/dracut/dhcpcd-script.sh
Parent Directory | Revision Log
Revision 3217 -
(show 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 | #!/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 |