#! /bin/bash # # network Bring up/down networking # # chkconfig: - 10 90 # description: Activates/Deactivates all network interfaces configured to \ # start at boot time. # probe: false # ### BEGIN INIT INFO # Provides: network # Should-Start: irda resolvconf iptables ip6tables NetworkManager # Should-Stop: irda resolvconf # Default-Start: 2 3 4 5 # Short-Description: Bring up/down networking # Description: Activates/Deactivates all network interfaces configured to # start at boot time. ### END INIT INFO # Source function library. . /etc/init.d/functions if [ ! -f /etc/sysconfig/network ]; then echo "NETWORKING=no" > /etc/sysconfig/network exit 6 fi . /etc/sysconfig/network if [ -f /etc/sysconfig/pcmcia ]; then . /etc/sysconfig/pcmcia fi # Check that networking is up. [ "${NETWORKING}" = "no" ] && exit 6 # if the ip configuration utility isn't around we can't function. [ -x /sbin/ip ] || exit 1 # Even if IPX is configured, without the utilities we can't do much [ ! -x /sbin/ipx_internal_net ] || [ ! -x /sbin/ipx_configure ] && IPX= CWD=$(pwd) cd /etc/sysconfig/network-scripts . ./network-functions # find all the interfaces besides loopback. # ignore aliases, alternative configurations, and editor backup files interfaces=$(/bin/ls ifcfg* | \ LC_ALL=C sed -e "$__sed_discard_ignored_files" \ -e '/\(ifcfg-lo$\|:\|ifcfg-.*-range\)/d' \ -e '/ifcfg-[ A-Za-z0-9#\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \ LC_ALL=C grep -v '^ifcfg-' | \ LC_ALL=C sort -k 1,1 -k 2n | \ LC_ALL=C sed -e 's/ \([0-9]\)/\1/') rc=0 # See how we were called. case "$1" in start) [ "$EUID" != "0" ] && exit 4 rc=0 # IPv6 hook (pre IPv4 start) if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then /etc/sysconfig/network-scripts/init.ipv6-global start pre fi apply_sysctl if [ -r /etc/ethers -a -x /sbin/arp ]; then action "Storing ARP mapping" /sbin/arp -f /etc/ethers fi # bring up loopback interface action "Bringing up loopback interface: " ./ifup ifcfg-lo case "$IPX" in yes|true) /sbin/ipx_configure --auto_primary=$IPXAUTOPRIMARY \ --auto_interface=$IPXAUTOFRAME if [ "$IPXINTERNALNETNUM" != "0" ]; then /sbin/ipx_internal_net add $IPXINTERNALNETNUM $IPXINTERNALNODENUM fi ;; esac # depreciated but we still use it. if [ -f /proc/sys/net/ipv4/ip_forward ] && [[ "$FORWARD_IPV4" = "yes" || "$FORWARD_IPV4" = "true" ]]; then action "Enabling IPv4 packet forwarding" sysctl -w net.ipv4.ip_forward=1 fi case "$VLAN" in yes) if [ ! -d /proc/net/vlan ] && ! modprobe 8021q >/dev/null 2>&1 ; then gprintf "No 802.1Q VLAN support available in kernel.\n" fi ;; esac vlaninterfaces="" vpninterfaces="" xdslinterfaces="" bridgeinterfaces="" # do we have wireless cards? iwconfig 2>/dev/null | grep IEEE > /dev/null has_wifi=$? # configure CRDA domain if [ -n "${CRDA_DOMAIN}" -a -x /sbin/iw -a "$has_wifi" == 0 ]; then action "Configuring wireless regulatory domain " /sbin/iw reg set ${CRDA_DOMAIN} fi # bring up all other interfaces configured to come up at boot time for i in $interfaces; do unset DEVICE TYPE SLAVE eval $(LANG=C grep -F "DEVICE=" "ifcfg-$i") eval $(LANG=C grep -F "TYPE=" "ifcfg-$i") eval $(LANG=C grep -F "SLAVE=" "ifcfg-$i") if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi if [ "$SLAVE" = "yes" ]; then continue fi if [ "$TYPE" = "Wireless" ]; then continue fi if [ "${DEVICE##cipcb}" != "$DEVICE" ] ; then vpninterfaces="$vpninterfaces $i" continue fi if [ "$TYPE" = "xDSL" -o "$TYPE" = "ADSL" ]; then xdslinterfaces="$xdslinterfaces $i" continue fi if [ "$TYPE" = "Bridge" ]; then bridgeinterfaces="$bridgeinterfaces $i" continue fi if [ "$TYPE" = "IPSEC" ]; then vpninterfaces="$vpninterfaces $i" continue fi if [ "${DEVICE%%.*}" != "$DEVICE" -o "${DEVICE##vlan}" != "$DEVICE" ] ; then vlaninterfaces="$vlaninterfaces $i" continue fi if LANG=C grep -EL "^ONBOOT=['\"]?[Nn][Oo]['\"]?" "ifcfg-$i" > /dev/null ; then # this loads the module, to preserve ordering is_available $i continue fi action "Bringing up interface %s: " $i ./ifup $DEVICE boot [ $? -ne 0 ] && rc=1 done # Bring up xDSL and VPN interfaces for i in $vlaninterfaces $bridgeinterfaces $xdslinterfaces $vpninterfaces ; do if ! LANG=C grep -EL "^ONBOOT=['\"]?[Nn][Oo]['\"]?" "ifcfg-$i" >/dev/null 2>&1 ; then action "Bringing up interface %s: " $i ./ifup $i boot [ $? -ne 0 ] && rc=1 fi done # Add non interface-specific static-routes. if [ -f /etc/sysconfig/static-routes ]; then if [ -x /sbin/route ]; then grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do /sbin/route add -$args done else net_log $"Legacy static-route support not available: /sbin/route not found" fi fi # IPv6 hook (post IPv4 start) if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then /etc/sysconfig/network-scripts/init.ipv6-global start post fi # Run this again to catch any interface-specific actions apply_sysctl touch /var/lock/subsys/network ;; stop) [ "$EUID" != "0" ] && exit 4 # Don't shut the network down if root is on NFS or a network # block device. rootfs=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/" && $3 != "rootfs") { print $3; }}' /proc/mounts) rootopts=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $4; }}' /etc/mtab) if [[ "$rootfs" == nfs* || "$rootopts" =~ _r?netdev ]] ; then exit 1 fi # If this is a final shutdown/halt, check for network FS, # and unmount them even if the user didn't turn on netfs if [ "$RUNLEVEL" = "6" -o "$RUNLEVEL" = "0" -o "$RUNLEVEL" = "1" ]; then NETMOUNTS=$(findmnt -n -m -t nfs,nfs4,smbfs,ncpfs,cifs 2>/dev/null) if [ -n "$NETMOUNTS" ] ; then /etc/init.d/netfs stop fi fi vlaninterfaces="" vpninterfaces="" xdslinterfaces="" bridgeinterfaces="" remaining="" rc=0 # get list of bonding, vpn, and xdsl interfaces for i in $interfaces; do unset DEVICE TYPE eval $(LANG=C grep -F "DEVICE=" "ifcfg-$i") eval $(LANG=C grep -F "TYPE=" "ifcfg-$i") if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi if [ "$TYPE" = "Wireless" ]; then continue fi if [ "${DEVICE##cipcb}" != "$DEVICE" ] ; then vpninterfaces="$vpninterfaces $i" continue fi if [ "$TYPE" = "IPSEC" ]; then vpninterfaces="$vpninterfaces $i" continue fi if [ "$TYPE" = "Bridge" ]; then bridgeinterfaces="$bridgeinterfaces $i" continue fi if [ "$TYPE" = "xDSL" -o "$TYPE" = "ADSL" ]; then xdslinterfaces="$xdslinterfaces $i" continue fi if [ "${DEVICE%%.*}" != "$DEVICE" -o "${DEVICE##vlan}" != "$DEVICE" ] ; then vlaninterfaces="$vlaninterfaces $i" continue fi remaining="$remaining $i" done for i in $vpninterfaces $xdslinterfaces $bridgeinterfaces $vlaninterfaces $remaining; do (. "./ifcfg-$i" if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi if ! check_device_down $DEVICE; then action "Shutting down interface %s: " $i ./ifdown $i boot [ $? -ne 0 ] && rc=1 fi ) done case "$IPX" in yes|true) if [ "$IPXINTERNALNETNUM" != "0" ]; then /sbin/ipx_internal_net del fi ;; esac action "Shutting down loopback interface: " ./ifdown ifcfg-lo if [ -d /proc/sys/net/ipv4 ]; then if [ -f /proc/sys/net/ipv4/ip_forward ]; then if [ $(cat /proc/sys/net/ipv4/ip_forward) != 0 ]; then action "Disabling IPv4 packet forwarding: " sysctl -w net.ipv4.ip_forward=0 fi fi if [ -f /proc/sys/net/ipv4/ip_always_defrag ]; then if [ $(cat /proc/sys/net/ipv4/ip_always_defrag) != 0 ]; then action "Disabling IPv4 automatic defragmentation: " sysctl -w net.ipv4.ip_always_defrag=0 fi fi fi if [ -f /proc/sys/net/ipv4/tcp_syncookies ];then if [ `cat /proc/sys/net/ipv4/tcp_syncookies` != 0 ]; then sysctl -w net.ipv4.tcp_syncookies=0 fi fi # IPv6 hook (post IPv4 stop) if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then /etc/sysconfig/network-scripts/init.ipv6-global stop post fi rm -f /var/lock/subsys/network ;; status) gprintf "Configured devices:\n" echo lo $interfaces gprintf "Currently active devices:\n" echo $(/sbin/ip -o link show up | awk -F ": " '{ print $2 }') ;; restart|reload|force-reload) cd "$CWD" $0 stop $0 start rc=$? ;; *) gprintf "Usage: %s\n" "$(basename $0) {start|stop|restart|reload|status}" exit 2 esac exit $rc