#! /bin/bash # # network Bring up/down networking # # chkconfig: 2345 10 90 # description: Activates/Deactivates all network interfaces configured to \ # start at boot time. # probe: true ### BEGIN INIT INFO # Provides: $network ### END INIT INFO # Source function library. . /etc/init.d/functions if [ ! -f /etc/sysconfig/network ]; then exit 0 fi . /etc/sysconfig/network if [ -f /etc/sysconfig/pcmcia ]; then . /etc/sysconfig/pcmcia fi # Check that networking is up. [ "${NETWORKING}" = "no" ] && exit 0 # 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 -o ! -x /sbin/ipx_configure ] && IPX= # If IPv6 is explicitly configured, make sure it's available. if [ "$NETWORKING_IPV6" = "yes" ]; then alias=`modprobe -c | awk '/^alias net-pf-10 / { print $3 }'` if [ "$alias" != "ipv6" -a ! -f /proc/net/if_inet6 ]; then echo "alias net-pf-10 ipv6" >> /etc/modules.conf fi fi CWD=`pwd` cd /etc/sysconfig/network-scripts . network-functions # find all the interfaces besides loopback. # ignore aliases, alternative configurations, and editor backup files interfaces=`ls ifcfg* | LANG=C egrep -v '(ifcfg-lo|:|\.|rpmsave|rpmorig|rpmnew)' | \ LANG=C egrep -v '(~|\.bak)$' | \ LANG=C egrep 'ifcfg-[A-Za-z0-9_-]+$' | \ sed 's/^ifcfg-//g'` vlan_interfaces=`ls ifcfg-eth?.?* | \ LANG=C egrep -v '(~|\.bak)$' | \ LANG=C egrep 'ifcfg-[A-Za-z0-9_-\.]+$' | \ sed 's/^ifcfg-//g'` # See how we were called. case "$1" in start) # IPv6 hook (pre IPv4 start) if [ "$NETWORKING_IPV6" = "yes" ]; then if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then /etc/sysconfig/network-scripts/init.ipv6-global start pre fi fi action $"Setting network parameters: " sysctl -e -p /etc/sysctl.conf # 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 oldhotplug=`sysctl kernel.hotplug 2>/dev/null | \ awk '{ print $3 }' 2>/dev/null` sysctl -w kernel.hotplug="/bin/true" > /dev/null 2>&1 cipeinterfaces="" # bring up all other interfaces configured to come up at boot time for i in $interfaces; do eval $(fgrep "DEVICE=" ifcfg-$i) if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi if [ "${DEVICE##cipcb}" != "$DEVICE" ] ; then cipeinterfaces="$cipeinterfaces $DEVICE" continue fi if LANG=C egrep -L "^ONBOOT=\"?[Nn][Oo]\"?" ifcfg-$i > /dev/null ; then # this loads the module, to preserve ordering is_available $i continue fi # If we're in confirmation mode, get user confirmation [ -n "$CONFIRM" ] && { confirm $i case $? in 0) : ;; 2) CONFIRM= ;; *) continue ;; esac } action $"Bringing up interface $i: " ./ifup $i boot done # bring up vlan interfaces configured to come up at boot time for i in $vlan_interfaces; do eval $(fgrep "DEVICE=" ifcfg-$i) if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi if LANG=C egrep -L "^ONBOOT=\"?[Nn][Oo]\"?" ifcfg-$i > /dev/null ; then # this loads the module, to preserve ordering is_available $i continue fi # If we're in confirmation mode, get user confirmation [ -n "$CONFIRM" ] && { confirm $i case $? in 0) : ;; 2) CONFIRM= ;; *) continue ;; esac } /usr/local/bin/vconfig add `echo $i | tr '.' ' '` action $"Bringing up interface $i: " ./ifup $i boot done # Bring up CIPE VPN interfaces for i in $cipeinterfaces ; do if ! LANG=C egrep -L "^ONBOOT=\"?[Nn][Oo]\"?" ifcfg-$i >/dev/null 2>&1 ; then # If we're in confirmation mode, get user confirmation [ -n "$CONFIRM" ] && { confirm $i case $? in 0) : ;; 2) CONFIRM= ;; *) continue ;; esac } action $"Bringing up interface $i: " ./ifup $i boot fi done sysctl -w kernel.hotplug=$oldhotplug > /dev/null 2>&1 # Add non interface-specific static-routes. if [ -f /etc/sysconfig/static-routes ]; then grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do /sbin/route add -$args done fi # IPv6 hook (post IPv4 start) if [ "$NETWORKING_IPV6" = "yes" ]; then if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then /etc/sysconfig/network-scripts/init.ipv6-global start post fi fi # Run this again to catch any interface-specific actions sysctl -e -p /etc/sysctl.conf >/dev/null 2>&1 touch /var/lock/subsys/network ;; stop) # 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 NFSMTAB=`grep -v '^#' /proc/mounts | awk '{ if ($3 ~ /^nfs$/ ) print $2}'` SMBMTAB=`grep -v '^#' /proc/mounts | awk '{ if ($3 ~ /^smbfs$/ ) print $2}'` NCPMTAB=`grep -v '^#' /proc/mounts | awk '{ if ($3 ~ /^ncpfs$/ ) print $2}'` if [ -n "$NFSMTAB" -o -n "$SMBMTAB" -o -n "$NCPMTAB" ] ; then /etc/init.d/netfs stop fi fi # IPv6 hook (pre IPv4 stop) if [ "$NETWORKING_IPV6" = "yes" ]; then if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then /etc/sysconfig/network-scripts/init.ipv6-global stop pre fi fi # shut down all interfaces (other than loopback) for i in $interfaces ; do eval $(fgrep "DEVICE=" ifcfg-$i) if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi if ! check_device_down $i; then action $"Shutting down interface $i: " ./ifdown $i boot fi done # VLAN for i in $vlan_interfaces ; do eval $(fgrep "DEVICE=" ifcfg-$i) if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi if [ -f /proc/net/vlan/$i ]; then action $"Removing vlan interface interface $i: " /usr/local/bin/vconfig rem $i 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 # IPv6 hook (post IPv4 stop) if [ "$NETWORKING_IPV6" = "yes" ]; then if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then /etc/sysconfig/network-scripts/init.ipv6-global stop post fi fi rm -f /var/lock/subsys/network ;; status) echo $"Configured devices:" echo lo $interfaces echo $"Currently active devices:" echo `/sbin/ip -o link show | awk -F ": " '{ print $2 }'` ;; restart|reload) cd $CWD $0 stop $0 start ;; *) echo $"Usage: $0 {start|stop|restart|reload|status}" exit 1 esac exit 0