5 PATH=/sbin:/usr/sbin:/bin:/usr/bin
7 . /etc/sysconfig/network
8 . /etc/rc.d/init.d/functions
9 . /lib/rc-scripts/functions.network
11 # Will be removed in the future
12 if is_yes "$NETWORKING"; then
13 if [ -z "$IPV4_NETWORKING" ]; then
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"
18 export IPV4_NETWORKING
24 # device name must be ifcfg-somename
28 nls "Usage: %s <device name>" "ifup" >&2
32 if [ $(id -u) != 0 ]; then
33 if [ -x /sbin/usernetctl ]; then
34 exec /sbin/usernetctl $DEV up
36 nls "Users cannot control this device." >&2
40 if [ -f "/etc/sysconfig/interfaces/ifcfg-$DEV" ]; then
41 CONFIG="/etc/sysconfig/interfaces/ifcfg-$DEV"
42 elif [ -f "/etc/sysconfig/interfaces/$DEV" ]; then
43 CONFIG="/etc/sysconfig/interfaces/$DEV"
50 if [ "foo$2" = "fooboot" ] && is_no "${ONBOOT}"; then
54 if [ "foo$2" = "foohotplug" ] && ! is_yes "${HOTPLUG}"; then
58 if [ "foo$2" = "foopcmcia-hotplug" ] && ! is_yes "${PCMCIA_HOTPLUG}"; then
64 # set all major variables
67 SYSCTLDEVICE=$(echo ${DEVICE} | sed 's/\./\//g')
69 OTHERSCRIPT="/lib/rc-scripts/ifup-${DEVICETYPE}"
71 if [ -x "$OTHERSCRIPT" ]; then
72 if is_yes "$DEFAULTHANDLING"; then
75 if [ "$HANDLING" = "0" ]; then
76 exec $OTHERSCRIPT $CONFIG $2
77 elif [ "$HANDLING" = "1" ]; then
78 $OTHERSCRIPT $CONFIG $2
82 if [ -n "$MACVLAN_DEV" -a -n "$MACVLAN_MACADDR" ]; then
83 ip link del link ${MACVLAN_DEV} ${DEVICE} type macvlan > /dev/null 2>&1
84 ip link add link ${MACVLAN_DEV} address ${MACVLAN_MACADDR} ${DEVICE} type macvlan
87 # is this device available? (this catches PCMCIA devices for us)
88 if ! /sbin/ip link set multicast ${MULTICAST} dev ${DEVICE} > /dev/null 2>&1; then
89 nls "Delaying %s initialization" ${DEVICE}
93 if is_yes "$SLAVE" && [ ! -x /sbin/ifenslave ]; then
94 nls "%s is missing. Can't continue." "/sbin/ifenslave"
98 if is_yes "$SLAVE" && [ -n "$MASTER" -a -x /sbin/ifenslave ]; then
99 RFLAG="" && is_yes "${RECIEVE-ONLY}" && RFLAG="-r"
101 ip link set ${DEVICE} down
102 nls "Enslaving %s to %s" "$DEVICE" "$MASTER"
103 ifenslave $RFLAG "$MASTER" "$DEVICE"
105 if [ -n "$ETHTOOL_OPTS" ] ; then
106 /sbin/ethtool -s $DEVICE $ETHTOOL_OPTS
112 if [ -n "$MACADDR" ]; then
113 ip link set ${DEVICE} address ${MACADDR}
116 ip link set ${DEVICE} multicast ${MULTICAST} ${ARP} down
118 if [ -n "$MTU" ]; then
119 ip link set ${DEVICE} mtu ${MTU}
122 if is_yes "${IPV6_NETWORKING}" && is_yes "${IPV6_DISABLE_AUTOCONF}"; then
123 run_cmd "Disabling IPv6 autoconfiguration" sysctl -w net.ipv6.conf.${SYSCTLDEVICE}.autoconf=0
126 if is_wireless_device "${DEVICE}"; then
127 is_yes "${WLAN_UPEARLY}" && ip link set ${DEVICE} up
128 wireless_param ${DEVICE}
131 if is_yes "${WLAN_WPA}"; then
132 /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
133 [ -z "$WLAN_WPA_WAIT_TIMEOUT" ] && WLAN_WPA_WAIT_TIMEOUT=15
134 # check_link_down sleeps for 0.5s
135 check_link_down ${DEVICE} $(( $WLAN_WPA_WAIT_TIMEOUT * 2 ))
138 if [ "$HANDLING" = "2" ]; then
142 if [ -n "$BOOTPROTO" -a "$BOOTPROTO" != "none" -a "$BOOTPROTO" != "static" ]; then
143 if is_yes "$IPV4_NETWORKING"; then
147 if [ -n "$DHCP_CLIENT" ]; then
148 if [ -z "$DHCP_HOSTNAME" ]; then
149 # set DHCP_HOSTNAME only basename
150 DHCP_HOSTNAME=${HOSTNAME%%.*}
152 case ${DHCP_CLIENT##*/} in
154 [ -n "$DHCP_HOSTNAME" ] && DHCP_ARGS="-h $DHCP_HOSTNAME"
155 DHCP_ARGS="$DHCP_ARGS -i $DEVICE"
158 [ -n "$DHCP_HOSTNAME" ] && DHCP_ARGS="-h $DHCP_HOSTNAME"
159 DHCP_ARGS="$DHCP_ARGS $DEVICE"
160 if is_no "$ZEROCONF"; then
161 DHCP_ARGS="$DHCP_ARGS --noipv4ll"
165 [ -n "$DHCP_HOSTNAME" ] && DHCP_ARGS="-H $DHCP_HOSTNAME"
166 DHCP_ARGS="$DHCP_ARGS $DEVICE"
169 # Can't specify a host with dhclient ?
170 DHCP_ARGS="$DEVICE -pf /var/run/dhclient.$DEVICE.pid -lf /var/lib/dhclient/dhclient.$DEVICE.leases"
171 if [ -f /etc/dhclient.$DEVICE.conf ] ; then
172 DHCP_ARGS="$DHCP_ARGS -cf /etc/dhclient.$DEVICE.conf"
176 DHCP_ARGS="-D $DEVICE"
180 DHCP_ARGS="$DHCP_OPTIONS $DHCP_ARGS"
182 if check_link_down ${DEVICE}; then
183 run_cmd "$(nls 'Determining IP information for %s (%s)' "$DEVICE" "${DHCP_CLIENT##*/}")" /bin/false
184 nls '%s: Check cable/radio on-off switch?' "$DEVICE"
188 if ! run_cmd "$(nls 'Determining IP information for %s (%s)' "$DEVICE" "${DHCP_CLIENT##*/}")" $DHCP_CLIENT $DHCP_ARGS; then
192 # give time for determining IP information
193 check_device_down && sleep 1 && check_device_down && sleep 3
194 check_device_down && ip link set ${DEVICE} up
198 if is_yes "$IPV4_NETWORKING" && [ -n "${IP4ADDR}" ]; then
199 # If broadcast is missing then autocalculate it
200 if ! (echo $IP4ADDROPT | grep -qE "brd|broadcast"); then
201 IP4ADDROPT="brd + ${IP4ADDROPT}"
204 if [ -n "${SUBDEVICE}" ]; then
205 ALIAS="label ${SUBDEVICE}"
208 if [ -n "$REMIP" ]; then
209 ip addr add ${IP4ADDR} peer ${REMIP} ${ALIAS} dev ${DEVICE} ${IP4ADDROPT}
211 ip addr add ${IP4ADDR} ${ALIAS} dev ${DEVICE} ${IP4ADDROPT}
216 ip link set ${DEVICE} up
219 if is_yes "$IPV6_NETWORKING" && [ -n "${IP6ADDR}" ]; then
220 ip addr add ${IP6ADDR} dev ${DEVICE} ${IP6ADDROPT}
221 if [ -n "${IP6ADDRLABEL}" ]; then
222 ip addrlabel add prefix ${IP6ADDR} dev ${DEVICE} label ${IP6ADDRLABEL}
226 if is_yes "$IPV4_NETWORKING" && [ -n "${IP4ADDR}" -a -x /sbin/arping ]; then
227 # update ARP cache of neighbouring computers
228 /sbin/arping -q -A -c 1 -I ${DEVICE} ${IP4ADDR%/*}
229 { ( sleep 2; /sbin/arping -q -U -c 1 -I ${DEVICE} ${IP4ADDR%/*} ) & } > /dev/null 2>&1
232 # IPv4/6 gateways and default routes
236 # device have to have ip address set before
237 if is_yes "$PROXYARP"; then
238 run_cmd "$(nls 'Enabling proxy ARP on %s' "${DEVICE}")" sysctl -w net.ipv4.conf.${SYSCTLDEVICE}.proxy_arp=1
241 if [ "$HANDLING" = "3" ]; then
245 if is_yes "$IPX"; then
246 /lib/rc-scripts/ifup-ipx $DEVICE
249 if is_yes "$ENABLE_6TO4"; then
250 # find an usable IPv4 address for this device; might have been obtained by dhcp or ppp
251 for ipv4 in `/sbin/ip addr show dev $DEVICE | awk -F'[ /]+' '/ inet /{print $3}'`; do
252 if [ `ipcalc -n $ipv4/8` != "NETWORK=10.0.0.0" \
253 -a `ipcalc -n $ipv4/12` != "NETWORK=172.16.0.0" \
254 -a `ipcalc -n $ipv4/24` != "NETWORK=192.168.0.0" \
255 -a `ipcalc -n $ipv4/24` != "NETWORK=169.254.0.0" ]; then
257 local_ipv6=`printf "2002:%02x%02x:%02x%02x::1" $(echo $ipv4 | tr . ' ')`
261 if [ -n "$local_ipv4" ]; then # we have an usable IPv4 address; set up the tunnel
262 tun6to4=tun6to4_$DEVICE
263 /sbin/ip tunnel add $tun6to4 mode sit ttl 128 remote any local $local_ipv4
264 /sbin/ip link set dev $tun6to4 up
265 /sbin/ip -6 addr add $local_ipv6/16 dev $tun6to4
266 /sbin/ip -6 route add 2000::/3 via ::192.88.99.1 dev $tun6to4 metric 1
270 if [ "$HANDLING" = "4" ]; then
274 exec /lib/rc-scripts/ifup-post $CONFIG