]>
Commit | Line | Data |
---|---|---|
3b403b32 | 1 | #!/bin/sh |
7e9919b9 | 2 | |
a9d30a40 HH |
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 | # Huh? Interface configured? | |
12 | [ -f "/tmp/net.$netif.up" ] && exit 0 | |
13 | ||
7e9919b9 | 14 | setup_interface() { |
580bb541 PS |
15 | ip=$new_ip_address |
16 | mtu=$new_interface_mtu | |
17 | mask=$new_subnet_mask | |
18 | bcast=$new_broadcast_address | |
19 | gw=${new_routers%%,*} | |
20 | domain=$new_domain_name | |
b093aa2d | 21 | search=$(printf -- "$new_domain_search") |
580bb541 PS |
22 | namesrv=$new_domain_name_servers |
23 | hostname=$new_host_name | |
8d09f493 HH |
24 | [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time |
25 | [ -n "$new_max_life" ] && lease_time=$new_max_life | |
26 | preferred_lft=$lease_time | |
27 | [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life | |
580bb541 PS |
28 | |
29 | [ -f /tmp/net.$netif.override ] && . /tmp/net.$netif.override | |
30 | ||
d1dd6bb7 PS |
31 | # Taken from debian dhclient-script: |
32 | # The 576 MTU is only used for X.25 and dialup connections | |
33 | # where the admin wants low latency. Such a low MTU can cause | |
34 | # problems with UDP traffic, among other things. As such, | |
35 | # disallow MTUs from 576 and below by default, so that broken | |
36 | # MTUs are ignored, but higher stuff is allowed (1492, 1500, etc). | |
37 | if [ -n "$mtu" ] && [ $mtu -gt 576 ] ; then | |
c6c704fd HH |
38 | if ! ip link set $netif mtu $mtu ; then |
39 | ip link set $netif down | |
40 | ip link set $netif mtu $mtu | |
6cb77ea9 | 41 | linkup $netif |
c6c704fd HH |
42 | fi |
43 | fi | |
7e9919b9 | 44 | |
0f89ec31 HH |
45 | ip addr add $ip${mask:+/$mask} ${bcast:+broadcast $bcast} dev $netif \ |
46 | ${lease_time:+valid_lft $lease_time} \ | |
47 | ${preferred_lft:+preferred_lft ${preferred_lft}} | |
db815843 | 48 | |
99ccbc30 | 49 | if [ -n "$gw" ] ; then |
78362bc5 | 50 | if [ "$mask" = "255.255.255.255" ] ; then |
99ccbc30 GE |
51 | # point-to-point connection => set explicit route to gateway |
52 | echo ip route add $gw dev $netif > /tmp/net.$netif.gw | |
53 | fi | |
54 | echo ip route replace default via $gw dev $netif >> /tmp/net.$netif.gw | |
55 | fi | |
db815843 | 56 | |
df0bdd5a HH |
57 | if getargbool 1 rd.peerdns; then |
58 | [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net.$netif.resolv.conf | |
59 | if [ -n "$namesrv" ] ; then | |
60 | for s in $namesrv; do | |
61 | echo nameserver $s | |
62 | done | |
63 | fi >> /tmp/net.$netif.resolv.conf | |
64 | fi | |
da55af47 ID |
65 | # Note: hostname can be fqdn OR short hostname, so chop off any |
66 | # trailing domain name and explicity add any domain if set. | |
ffc68f35 | 67 | [ -n "$hostname" ] && echo "echo ${hostname%.$domain}${domain:+.$domain} > /proc/sys/kernel/hostname" > /tmp/net.$netif.hostname |
7e9919b9 DD |
68 | } |
69 | ||
2ac599dc HH |
70 | setup_interface6() { |
71 | domain=$new_domain_name | |
72 | search=$(printf -- "$new_domain_search") | |
73 | namesrv=$new_domain_name_servers | |
74 | hostname=$new_host_name | |
ebe74116 HH |
75 | [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time |
76 | [ -n "$new_max_life" ] && lease_time=$new_max_life | |
77 | preferred_lft=$lease_time | |
78 | [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life | |
2ac599dc HH |
79 | |
80 | [ -f /tmp/net.$netif.override ] && . /tmp/net.$netif.override | |
81 | ||
82 | ip -6 addr add ${new_ip6_address}/${new_ip6_prefixlen} \ | |
ebe74116 HH |
83 | dev ${netif} scope global \ |
84 | ${lease_time:+valid_lft $lease_time} \ | |
85 | ${preferred_lft:+preferred_lft ${preferred_lft}} | |
2ac599dc | 86 | |
df0bdd5a HH |
87 | if getargbool 1 rd.peerdns; then |
88 | [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net.$netif.resolv.conf | |
89 | if [ -n "$namesrv" ] ; then | |
90 | for s in $namesrv; do | |
91 | echo nameserver $s | |
92 | done | |
93 | fi >> /tmp/net.$netif.resolv.conf | |
94 | fi | |
2ac599dc HH |
95 | |
96 | # Note: hostname can be fqdn OR short hostname, so chop off any | |
97 | # trailing domain name and explicity add any domain if set. | |
98 | [ -n "$hostname" ] && echo "echo ${hostname%.$domain}${domain:+.$domain} > /proc/sys/kernel/hostname" > /tmp/net.$netif.hostname | |
99 | } | |
100 | ||
7e9919b9 DD |
101 | case $reason in |
102 | PREINIT) | |
cc02093d | 103 | echo "dhcp: PREINIT $netif up" |
6cb77ea9 | 104 | linkup $netif |
cc02093d | 105 | ;; |
2ac599dc | 106 | |
a9d30a40 | 107 | PREINIT6) |
7c5ec0f5 | 108 | echo "dhcp: PREINIT6 $netif up" |
a9d30a40 | 109 | linkup $netif |
7c5ec0f5 | 110 | wait_for_ipv6_dad $netif |
a9d30a40 HH |
111 | ;; |
112 | ||
7e9919b9 | 113 | BOUND) |
cc02093d | 114 | echo "dhcp: BOND setting $netif" |
8b88dc7f HH |
115 | unset layer2 |
116 | if [ -f /sys/class/net/$netif/device/layer2 ]; then | |
117 | read layer2 < /sys/class/net/$netif/device/layer2 | |
cc02093d | 118 | fi |
8b88dc7f | 119 | if [ "$layer2" != "0" ]; then |
4483fff8 | 120 | if ! arping -f -q -D -c 2 -I $netif $new_ip_address ; then |
8b88dc7f HH |
121 | warn "Duplicate address detected for $new_ip_address while doing dhcp. retrying" |
122 | exit 1 | |
123 | fi | |
124 | fi | |
125 | unset layer2 | |
3b403b32 | 126 | setup_interface |
6d58fa27 | 127 | set | while read line || [ -n "$line" ]; do |
cc02093d | 128 | [ "${line#new_}" = "$line" ] && continue |
3b403b32 | 129 | echo "$line" |
cc02093d | 130 | done >/tmp/dhclient.$netif.dhcpopts |
957bc5c9 | 131 | |
c6c704fd HH |
132 | { |
133 | echo '. /lib/net-lib.sh' | |
134 | echo "setup_net $netif" | |
135 | echo "source_hook initqueue/online $netif" | |
136 | [ -e /tmp/net.$netif.manualup ] || echo "/sbin/netroot $netif" | |
32bd2fbb | 137 | echo "rm -f -- $hookdir/initqueue/setup_net_$netif.sh" |
c6c704fd HH |
138 | } > $hookdir/initqueue/setup_net_$netif.sh |
139 | ||
43a85a73 | 140 | echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/dhclient-$netif.sh |
2ac599dc HH |
141 | >/tmp/net.$netif.up |
142 | ;; | |
143 | ||
cf627b20 HH |
144 | RENEW|REBIND) |
145 | unset lease_time | |
146 | [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time | |
147 | [ -n "$new_max_life" ] && lease_time=$new_max_life | |
148 | preferred_lft=$lease_time | |
149 | [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life | |
150 | ip -4 addr change ${new_ip_address}/${new_prefix} broadcast ${new_broadcast_address} dev ${interface} \ | |
151 | ${lease_time:+valid_lft $lease_time} ${preferred_lft:+preferred_lft ${preferred_lft}} \ | |
152 | >/dev/null 2>&1 | |
153 | ;; | |
154 | ||
2ac599dc HH |
155 | BOUND6) |
156 | echo "dhcp: BOND6 setting $netif" | |
157 | setup_interface6 | |
158 | ||
6d58fa27 | 159 | set | while read line || [ -n "$line" ]; do |
2ac599dc HH |
160 | [ "${line#new_}" = "$line" ] && continue |
161 | echo "$line" | |
162 | done >/tmp/dhclient.$netif.dhcpopts | |
163 | ||
164 | { | |
165 | echo '. /lib/net-lib.sh' | |
166 | echo "setup_net $netif" | |
167 | echo "source_hook initqueue/online $netif" | |
168 | [ -e /tmp/net.$netif.manualup ] || echo "/sbin/netroot $netif" | |
2ac599dc HH |
169 | echo "rm -f -- $hookdir/initqueue/setup_net_$netif.sh" |
170 | } > $hookdir/initqueue/setup_net_$netif.sh | |
171 | ||
43a85a73 | 172 | echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/dhclient-$netif.sh |
c6c704fd | 173 | >/tmp/net.$netif.up |
cc02093d | 174 | ;; |
cf627b20 HH |
175 | |
176 | RENEW6|REBIND6) | |
177 | unset lease_time | |
178 | [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time | |
179 | [ -n "$new_max_life" ] && lease_time=$new_max_life | |
180 | preferred_lft=$lease_time | |
181 | [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life | |
182 | ip -6 addr change ${new_ip6_address}/${new_ip6_prefixlen} dev ${interface} scope global \ | |
183 | ${lease_time:+valid_lft $lease_time} ${preferred_lft:+preferred_lft ${preferred_lft}} \ | |
184 | >/dev/null 2>&1 | |
185 | ;; | |
186 | ||
9ab14265 | 187 | *) echo "dhcp: $reason";; |
0ac9584d | 188 | esac |
7e9919b9 | 189 | |
7e9919b9 | 190 | exit 0 |