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