]> git.pld-linux.org Git - projects/rc-scripts.git/blame - lib/ifup
Add run_pre_up/run_pre_down
[projects/rc-scripts.git] / lib / ifup
CommitLineData
6955eb97 1#!/bin/sh
b0443108 2#
b0443108 3#
7742e157
AF
4PATH=/sbin:/usr/sbin:/bin:/usr/bin
5
f5446505
MM
6run_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
13if 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
21fi
22
7742e157
AF
23need_hostname
24
fa8aca70 25# device name must be ifcfg-somename
111f7a0d 26DEV=$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 33if [ $(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
39fi
40
3d7d555c 41if [ -f "/etc/sysconfig/interfaces/ifcfg-$DEV" ]; then
5e6dfc29 42 CONFIG="/etc/sysconfig/interfaces/ifcfg-$DEV"
385dfd73
TP
43elif [ -f "/etc/sysconfig/interfaces/$DEV" ]; then
44 CONFIG="/etc/sysconfig/interfaces/$DEV"
03f9cfee 45else
5e6dfc29 46 CONFIG="$DEV"
111f7a0d
AF
47fi
48
7742e157
AF
49source_config
50
dd4a755f 51if [ "foo$2" = "fooboot" ] && is_no "${ONBOOT}"; then
5e6dfc29 52 exit
7742e157
AF
53fi
54
d06391de 55if [ "foo$2" = "foohotplug" ] && ! is_yes "${HOTPLUG}"; then
5e6dfc29 56 exit
9072bd26
AM
57fi
58
59if [ "foo$2" = "foopcmcia-hotplug" ] && ! is_yes "${PCMCIA_HOTPLUG}"; then
5e6dfc29 60 exit
5c096954
AF
61fi
62
7742e157
AF
63IPSETUP=no
64
fa8aca70
JR
65# set all major variables
66setup_ip_param
032ef40b 67
50fb3120
JK
68SYSCTLDEVICE=$(echo ${DEVICE} | sed 's/\./\//g')
69
f5446505
MM
70# anything you need done first
71run_pre_up
72
f67ce454 73OTHERSCRIPT="/lib/rc-scripts/ifup-${DEVICETYPE}"
7742e157 74
f70b001b 75if [ -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
84fi
85
d9ce326a
AM
86if [ -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
89fi
90
7742e157 91# is this device available? (this catches PCMCIA devices for us)
17a5cf6b 92if ! /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
95fi
96
026cd72c 97if [ -n "$MACADDR" ]; then
5e6dfc29 98 ip link set ${DEVICE} address ${MACADDR}
d29c401a 99fi
7742e157 100
3d121e27 101ip link set ${DEVICE} multicast ${MULTICAST} ${ARP} down
7742e157 102
945790a2 103if [ -n "$MTU" ]; then
5e6dfc29 104 ip link set ${DEVICE} mtu ${MTU}
945790a2
JR
105fi
106
fa8aca70 107if 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 109fi
a6c22d3d
AM
110
111if is_wireless_device "${DEVICE}"; then
1c481055 112 is_yes "${WLAN_UPEARLY}" && ip link set ${DEVICE} up
5e6dfc29 113 wireless_param ${DEVICE}
43ed6f13 114fi
115
116if 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 121fi
5e6dfc29 122
8eae0d9c
MM
123if [ -n "$ETHTOOL_OPTS" ] ; then
124 /sbin/ethtool -s $DEVICE $ETHTOOL_OPTS
125fi
126
127if 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
133fi
134
fa8aca70 135if [ "$HANDLING" = "2" ]; then
5e6dfc29 136 exit 0
fa8aca70 137fi
de1fc6ce 138
960d6d6e 139if [ -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 193else
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 231fi
de1fc6ce 232
6a2c03da 233# device have to have ip address set before
854dc659 234if 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 236fi
1c4ce04c 237
fa8aca70 238if [ "$HANDLING" = "3" ]; then
5e6dfc29 239 exit 0
7742e157 240fi
7742e157 241
dd4a755f 242if is_yes "$IPX"; then
f67ce454 243 /lib/rc-scripts/ifup-ipx $DEVICE
12de71be 244fi
7742e157 245
8772739e 246if 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
265fi
266
fa8aca70 267if [ "$HANDLING" = "4" ]; then
5e6dfc29 268 exit 0
fa8aca70
JR
269fi
270
f67ce454 271exec /lib/rc-scripts/ifup-post $CONFIG
This page took 0.920149 seconds and 4 git commands to generate.