]>
Commit | Line | Data |
---|---|---|
6955eb97 | 1 | #!/bin/sh |
b0443108 | 2 | # |
b0443108 | 3 | # |
7742e157 AF |
4 | PATH=/sbin:/usr/sbin:/bin:/usr/bin |
5 | ||
f5446505 MM |
6 | run_pre_up() { :; } |
7 | ||
7e04fe0e | 8 | . /etc/sysconfig/network |
f3002e12 | 9 | . /etc/rc.d/init.d/functions |
f67ce454 | 10 | . /lib/rc-scripts/functions.network |
7742e157 | 11 | |
fa8aca70 | 12 | # Will be removed in the future |
3d7d555c ER |
13 | if is_yes "$NETWORKING"; then |
14 | if [ -z "$IPV4_NETWORKING" ]; then | |
5e6dfc29 JR |
15 | echo "NETWORKING is set to YES, but IPV4_NETWORKING is empty!" |
16 | echo "Please upgrade your config" | |
17 | echo "Assuming you want IPv4 networking" | |
18 | IPV4_NETWORKING=yes | |
19 | export IPV4_NETWORKING | |
20 | fi | |
fa8aca70 JR |
21 | fi |
22 | ||
7742e157 AF |
23 | need_hostname |
24 | ||
fa8aca70 | 25 | # device name must be ifcfg-somename |
111f7a0d | 26 | DEV=$1 |
7742e157 | 27 | |
111f7a0d | 28 | [ -z "$DEV" ] && { |
5e6dfc29 JR |
29 | nls "Usage: %s <device name>" "ifup" >&2 |
30 | exit 1 | |
7742e157 AF |
31 | } |
32 | ||
bf14fcab | 33 | if [ $(id -u) != 0 ]; then |
5e6dfc29 JR |
34 | if [ -x /sbin/usernetctl ]; then |
35 | exec /sbin/usernetctl $DEV up | |
36 | fi | |
37 | nls "Users cannot control this device." >&2 | |
38 | exit 1 | |
7742e157 AF |
39 | fi |
40 | ||
3d7d555c | 41 | if [ -f "/etc/sysconfig/interfaces/ifcfg-$DEV" ]; then |
5e6dfc29 | 42 | CONFIG="/etc/sysconfig/interfaces/ifcfg-$DEV" |
385dfd73 TP |
43 | elif [ -f "/etc/sysconfig/interfaces/$DEV" ]; then |
44 | CONFIG="/etc/sysconfig/interfaces/$DEV" | |
03f9cfee | 45 | else |
5e6dfc29 | 46 | CONFIG="$DEV" |
111f7a0d AF |
47 | fi |
48 | ||
7742e157 AF |
49 | source_config |
50 | ||
dd4a755f | 51 | if [ "foo$2" = "fooboot" ] && is_no "${ONBOOT}"; then |
5e6dfc29 | 52 | exit |
7742e157 AF |
53 | fi |
54 | ||
d06391de | 55 | if [ "foo$2" = "foohotplug" ] && ! is_yes "${HOTPLUG}"; then |
5e6dfc29 | 56 | exit |
9072bd26 AM |
57 | fi |
58 | ||
59 | if [ "foo$2" = "foopcmcia-hotplug" ] && ! is_yes "${PCMCIA_HOTPLUG}"; then | |
5e6dfc29 | 60 | exit |
5c096954 AF |
61 | fi |
62 | ||
7742e157 AF |
63 | IPSETUP=no |
64 | ||
fa8aca70 JR |
65 | # set all major variables |
66 | setup_ip_param | |
032ef40b | 67 | |
50fb3120 JK |
68 | SYSCTLDEVICE=$(echo ${DEVICE} | sed 's/\./\//g') |
69 | ||
f5446505 MM |
70 | # anything you need done first |
71 | run_pre_up | |
72 | ||
f67ce454 | 73 | OTHERSCRIPT="/lib/rc-scripts/ifup-${DEVICETYPE}" |
7742e157 | 74 | |
f70b001b | 75 | if [ -x "$OTHERSCRIPT" ]; then |
3d7d555c | 76 | if is_yes "$DEFAULTHANDLING"; then |
5e6dfc29 JR |
77 | HANDLING=1 |
78 | fi | |
79 | if [ "$HANDLING" = "0" ]; then | |
80 | exec $OTHERSCRIPT $CONFIG $2 | |
81 | elif [ "$HANDLING" = "1" ]; then | |
82 | $OTHERSCRIPT $CONFIG $2 | |
83 | fi | |
7742e157 AF |
84 | fi |
85 | ||
d9ce326a AM |
86 | if [ -n "$MACVLAN_DEV" -a -n "$MACVLAN_MACADDR" ]; then |
87 | ip link del link ${MACVLAN_DEV} ${DEVICE} type macvlan > /dev/null 2>&1 | |
3acb594f | 88 | ip link add link ${MACVLAN_DEV} address ${MACVLAN_MACADDR} name ${DEVICE} type macvlan |
d9ce326a AM |
89 | fi |
90 | ||
7742e157 | 91 | # is this device available? (this catches PCMCIA devices for us) |
17a5cf6b | 92 | if ! /sbin/ip link set multicast ${MULTICAST} dev ${DEVICE} > /dev/null 2>&1; then |
5e6dfc29 JR |
93 | nls "Delaying %s initialization" ${DEVICE} |
94 | exit 1 | |
7742e157 AF |
95 | fi |
96 | ||
026cd72c | 97 | if [ -n "$MACADDR" ]; then |
5e6dfc29 | 98 | ip link set ${DEVICE} address ${MACADDR} |
d29c401a | 99 | fi |
7742e157 | 100 | |
3d121e27 | 101 | ip link set ${DEVICE} multicast ${MULTICAST} ${ARP} down |
7742e157 | 102 | |
945790a2 | 103 | if [ -n "$MTU" ]; then |
5e6dfc29 | 104 | ip link set ${DEVICE} mtu ${MTU} |
945790a2 JR |
105 | fi |
106 | ||
fa8aca70 | 107 | if is_yes "${IPV6_NETWORKING}" && is_yes "${IPV6_DISABLE_AUTOCONF}"; then |
20be05d0 | 108 | run_cmd "Disabling IPv6 autoconfiguration" sysctl -w net.ipv6.conf.${SYSCTLDEVICE}.autoconf=0 |
fa8aca70 | 109 | fi |
a6c22d3d AM |
110 | |
111 | if is_wireless_device "${DEVICE}"; then | |
1c481055 | 112 | is_yes "${WLAN_UPEARLY}" && ip link set ${DEVICE} up |
5e6dfc29 | 113 | wireless_param ${DEVICE} |
43ed6f13 | 114 | fi |
115 | ||
116 | if is_yes "${WLAN_WPA}"; then | |
e5fcee11 | 117 | /usr/sbin/wpa_supplicant -D ${WLAN_WPA_DRIVER:-wext} -c ${WLAN_WPA_CONFIG:-/etc/wpa_supplicant.conf} -i ${DEVICE} ${WLAN_WPA_OPTIONS} -P "/var/run/wpa_supplicant-${DEVICE}.pid" -B |
399656f1 AM |
118 | [ -z "$WLAN_WPA_WAIT_TIMEOUT" ] && WLAN_WPA_WAIT_TIMEOUT=15 |
119 | # check_link_down sleeps for 0.5s | |
120 | check_link_down ${DEVICE} $(( $WLAN_WPA_WAIT_TIMEOUT * 2 )) | |
a6c22d3d | 121 | fi |
5e6dfc29 | 122 | |
8eae0d9c MM |
123 | if [ -n "$ETHTOOL_OPTS" ] ; then |
124 | /sbin/ethtool -s $DEVICE $ETHTOOL_OPTS | |
125 | fi | |
126 | ||
127 | if is_yes "$SLAVE" && [ -n "$MASTER" ] ; then | |
128 | nls "Enslaving %s to %s" "$DEVICE" "$MASTER" | |
129 | ip link set "$DEVICE" master "$MASTER" | |
130 | ip link set "$DEVICE" up | |
131 | ||
132 | exit 0 | |
133 | fi | |
134 | ||
fa8aca70 | 135 | if [ "$HANDLING" = "2" ]; then |
5e6dfc29 | 136 | exit 0 |
fa8aca70 | 137 | fi |
de1fc6ce | 138 | |
960d6d6e | 139 | if [ -n "$BOOTPROTO" -a "$BOOTPROTO" != "none" -a "$BOOTPROTO" != "static" ]; then |
5e6dfc29 | 140 | if is_yes "$IPV4_NETWORKING"; then |
f1dba8bc | 141 | set_dhcpclient |
5e6dfc29 JR |
142 | |
143 | DHCP_ARGS= | |
144 | if [ -n "$DHCP_CLIENT" ]; then | |
427abd56 | 145 | if [ -z "$DHCP_HOSTNAME" ]; then |
8e492792 ER |
146 | # set DHCP_HOSTNAME only basename |
147 | DHCP_HOSTNAME=${HOSTNAME%%.*} | |
427abd56 | 148 | fi |
3d7d555c | 149 | case ${DHCP_CLIENT##*/} in |
5e6dfc29 JR |
150 | pump) |
151 | [ -n "$DHCP_HOSTNAME" ] && DHCP_ARGS="-h $DHCP_HOSTNAME" | |
152 | DHCP_ARGS="$DHCP_ARGS -i $DEVICE" | |
153 | ;; | |
154 | dhcpcd) | |
155 | [ -n "$DHCP_HOSTNAME" ] && DHCP_ARGS="-h $DHCP_HOSTNAME" | |
156 | DHCP_ARGS="$DHCP_ARGS $DEVICE" | |
eca7ee0e AM |
157 | if is_no "$ZEROCONF"; then |
158 | DHCP_ARGS="$DHCP_ARGS --noipv4ll" | |
159 | fi | |
5e6dfc29 JR |
160 | ;; |
161 | dhcpxd) | |
162 | [ -n "$DHCP_HOSTNAME" ] && DHCP_ARGS="-H $DHCP_HOSTNAME" | |
163 | DHCP_ARGS="$DHCP_ARGS $DEVICE" | |
164 | ;; | |
165 | dhclient) | |
166 | # Can't specify a host with dhclient ? | |
1eb7d29d | 167 | DHCP_ARGS="$DEVICE -pf /var/run/dhclient.$DEVICE.pid -lf /var/lib/dhclient/dhclient.$DEVICE.leases" |
6fe8c6d3 JK |
168 | if [ -f /etc/dhclient.$DEVICE.conf ] ; then |
169 | DHCP_ARGS="$DHCP_ARGS -cf /etc/dhclient.$DEVICE.conf" | |
553fab01 | 170 | fi |
5e6dfc29 | 171 | ;; |
f3df266c JK |
172 | avahi-autoipd) |
173 | DHCP_ARGS="-D $DEVICE" | |
174 | ;; | |
5e6dfc29 JR |
175 | esac |
176 | fi | |
177 | DHCP_ARGS="$DHCP_OPTIONS $DHCP_ARGS" | |
178 | ||
179 | if check_link_down ${DEVICE}; then | |
b513cdf1 | 180 | run_cmd "$(nls 'Determining IP information for %s (%s)' "$DEVICE" "${DHCP_CLIENT##*/}")" /bin/false |
1b85f830 | 181 | nls '%s: Check cable/radio on-off switch?' "$DEVICE" |
5e6dfc29 JR |
182 | exit 1 |
183 | fi | |
184 | ||
3d7d555c | 185 | if ! run_cmd "$(nls 'Determining IP information for %s (%s)' "$DEVICE" "${DHCP_CLIENT##*/}")" $DHCP_CLIENT $DHCP_ARGS; then |
5e6dfc29 JR |
186 | exit 1 |
187 | fi | |
188 | ||
189 | # give time for determining IP information | |
190 | check_device_down && sleep 1 && check_device_down && sleep 3 | |
191 | check_device_down && ip link set ${DEVICE} up | |
fa8aca70 | 192 | fi |
fa8aca70 | 193 | else |
5e6dfc29 | 194 | # IPv4 in use ? |
3d7d555c | 195 | if is_yes "$IPV4_NETWORKING" && [ -n "${IP4ADDR}" ]; then |
5e6dfc29 | 196 | # If broadcast is missing then autocalculate it |
a51d5138 | 197 | if ! (echo $IP4ADDROPT | grep -qE "brd|broadcast"); then |
5e6dfc29 JR |
198 | IP4ADDROPT="brd + ${IP4ADDROPT}" |
199 | fi | |
200 | ||
14a0605b ER |
201 | if [ -n "${SUBDEVICE}" ]; then |
202 | ALIAS="label ${SUBDEVICE}" | |
203 | fi | |
204 | ||
5e6dfc29 | 205 | if [ -n "$REMIP" ]; then |
14a0605b | 206 | ip addr add ${IP4ADDR} peer ${REMIP} ${ALIAS} dev ${DEVICE} ${IP4ADDROPT} |
5e6dfc29 | 207 | else |
14a0605b | 208 | ip addr add ${IP4ADDR} ${ALIAS} dev ${DEVICE} ${IP4ADDROPT} |
5e6dfc29 | 209 | fi |
1c4ce04c | 210 | fi |
fa8aca70 | 211 | |
5e6dfc29 JR |
212 | # Set device up |
213 | ip link set ${DEVICE} up | |
de1fc6ce | 214 | |
5e6dfc29 | 215 | # IPv6 in use ? |
3d7d555c | 216 | if is_yes "$IPV6_NETWORKING" && [ -n "${IP6ADDR}" ]; then |
5e6dfc29 | 217 | ip addr add ${IP6ADDR} dev ${DEVICE} ${IP6ADDROPT} |
dfe0fe83 JR |
218 | if [ -n "${IP6ADDRLABEL}" ]; then |
219 | ip addrlabel add prefix ${IP6ADDR} dev ${DEVICE} label ${IP6ADDRLABEL} | |
220 | fi | |
5e6dfc29 | 221 | fi |
1c4ce04c | 222 | |
28840f50 | 223 | if is_yes "$IPV4_NETWORKING" && [ -n "${IP4ADDR}" -a -x /sbin/arping ]; then |
d6cafee9 ER |
224 | # update ARP cache of neighbouring computers |
225 | /sbin/arping -q -A -c 1 -I ${DEVICE} ${IP4ADDR%/*} | |
00f5d898 | 226 | { ( sleep 2; /sbin/arping -q -U -c 1 -I ${DEVICE} ${IP4ADDR%/*} ) & } > /dev/null 2>&1 |
41d4ee84 AM |
227 | fi |
228 | ||
5e6dfc29 JR |
229 | # IPv4/6 gateways and default routes |
230 | setup_ip_gw_ro | |
fa8aca70 | 231 | fi |
de1fc6ce | 232 | |
6a2c03da | 233 | # device have to have ip address set before |
854dc659 | 234 | if is_yes "$PROXYARP"; then |
20be05d0 | 235 | run_cmd "$(nls 'Enabling proxy ARP on %s' "${DEVICE}")" sysctl -w net.ipv4.conf.${SYSCTLDEVICE}.proxy_arp=1 |
6a2c03da | 236 | fi |
1c4ce04c | 237 | |
fa8aca70 | 238 | if [ "$HANDLING" = "3" ]; then |
5e6dfc29 | 239 | exit 0 |
7742e157 | 240 | fi |
7742e157 | 241 | |
dd4a755f | 242 | if is_yes "$IPX"; then |
f67ce454 | 243 | /lib/rc-scripts/ifup-ipx $DEVICE |
12de71be | 244 | fi |
7742e157 | 245 | |
8772739e | 246 | if is_yes "$ENABLE_6TO4"; then |
247 | # find an usable IPv4 address for this device; might have been obtained by dhcp or ppp | |
2f5024c6 | 248 | for ipv4 in `/sbin/ip addr show dev $DEVICE | awk -F'[ /]+' '/ inet /{print $3}'`; do |
385dfd73 | 249 | if [ `ipcalc -n $ipv4/8` != "NETWORK=10.0.0.0" \ |
8772739e | 250 | -a `ipcalc -n $ipv4/12` != "NETWORK=172.16.0.0" \ |
251 | -a `ipcalc -n $ipv4/24` != "NETWORK=192.168.0.0" \ | |
252 | -a `ipcalc -n $ipv4/24` != "NETWORK=169.254.0.0" ]; then | |
253 | local_ipv4=$ipv4 | |
254 | local_ipv6=`printf "2002:%02x%02x:%02x%02x::1" $(echo $ipv4 | tr . ' ')` | |
255 | break | |
256 | fi | |
257 | done | |
385dfd73 TP |
258 | if [ -n "$local_ipv4" ]; then # we have an usable IPv4 address; set up the tunnel |
259 | tun6to4=tun6to4_$DEVICE | |
8772739e | 260 | /sbin/ip tunnel add $tun6to4 mode sit ttl 128 remote any local $local_ipv4 |
261 | /sbin/ip link set dev $tun6to4 up | |
262 | /sbin/ip -6 addr add $local_ipv6/16 dev $tun6to4 | |
263 | /sbin/ip -6 route add 2000::/3 via ::192.88.99.1 dev $tun6to4 metric 1 | |
264 | fi | |
265 | fi | |
266 | ||
fa8aca70 | 267 | if [ "$HANDLING" = "4" ]; then |
5e6dfc29 | 268 | exit 0 |
fa8aca70 JR |
269 | fi |
270 | ||
f67ce454 | 271 | exec /lib/rc-scripts/ifup-post $CONFIG |