#!/bin/sh # # network Bring up/down networking # # chkconfig: 2345 10 90 # description: Activates/Deactivates all network interfaces configured to \ # start at boot time. # probe: true # Source function library. . /etc/rc.d/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 [ -x /sbin/ifconfig ] || exit 0 # Even if IPX is configured, without the utilities we can't do much [ ! -x /sbin/ipx_internal_net -o ! -x /sbin/ipx_configure ] && IPX= CWD=`pwd` cd /etc/sysconfig/network-scripts # find all the interfaces besides loopback. # ignore aliases, alternative configurations, and editor backup files interfaces=`ls ifcfg* | egrep -v '(ifcfg-lo|:)' | egrep 'ifcfg-[a-z0-9]+$' | \ sed 's/^ifcfg-//g'` interfaces_boot= for inter in `ls ifcfg* | egrep -v '(ifcfg-lo|:)' | egrep 'ifcfg-[a-z0-9]+$'`; do int=`egrep -L "ONBOOT=\"?[Nn][Oo]\"?" $inter | sed 's/^ifcfg-//g'` [ -n "$int" ] && interfaces_boot="$interfaces_boot $int" done ipv4_forward_set () { # Turn IP forwarding on or off. We do this before bringing up the # interfaces to make sure we don't forward when we shouldn't, and # we do it even if networking isn't configured (why not?). if [ -d /proc/sys/net/ipv4 ]; then # people could have left this out of their kernel, which isn't # exactly an error if [ ! -f /proc/sys/net/ipv4/ip_forward ] ; then echo "/proc/sys/net/ipv4/ip_forward is missing --" \ "cannot control IP forwarding" >&2 else if [ "$FORWARD_IPV4" = "no" -o "$FORWARD_IPV4" = "false" ]; then value=0 message="Disabling IPv4 packet forwarding" else value=1 message="Enabling IPv4 packet forwarding" fi if [ $value != `cat /proc/sys/net/ipv4/ip_forward` ]; then action "$message" /bin/true echo "$value" > /proc/sys/net/ipv4/ip_forward fi fi fi } # See how we were called. case "$1" in start) ipv4_forward_set action "Bringing up interface lo" ./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 for i in $interfaces_boot; do action "Bringing up interface $i" ./ifup $i boot done touch /var/lock/subsys/network ;; stop) for i in $interfaces_boot; do action "Shutting down interface $i" ./ifdown $i boot done case "$IPX" in yes|true) if [ "$IPXINTERNALNETNUM" != "0" ]; then /sbin/ipx_internal_net del fi ;; esac ./ifdown ifcfg-lo if [ -d /proc/sys/net/ipv4 -a -f /proc/sys/net/ipv4/ip_forward ]; then if [ `cat /proc/sys/net/ipv4/ip_forward` != 0 ]; then action "Disabling IPv4 packet forwarding" /bin/true echo 0 > /proc/sys/net/ipv4/ip_forward fi fi rm -f /var/lock/subsys/network ;; status) echo "Configured devices:" echo lo $interfaces if [ -x /bin/linuxconf ] ; then eval `/bin/linuxconf --hint netdev` echo "Devices that are down:" echo $DEV_UP echo "Devices with modified configuration:" echo $DEV_RECONF else echo "Currently active devices:" echo `/sbin/ifconfig | grep ^[a-z] | awk '{print $1}'` fi ;; restart) cd $CWD $0 stop $0 start ;; reload) if [ -x /bin/linuxconf ] ; then eval `/bin/linuxconf --hint netdev` if [ "$RECONF_IPV4ROUTING" = "yes" ] ; then ipv4_forward_set fi for device in $DEV_UP ; do action "Bringing up device $device" ./ifup $device done for device in $DEV_DOWN ; do action "Shutting down device $device" ./ifdown $device done for device in $DEV_RECONF ; do action "Shutting down device $device" ./ifdown $device action "Bringing up device $device" ./ifup $device done for device in $DEV_RECONF_ALIASES ; do action "Briging up alias $device" /etc/sysconfig/network-scripts/ifup-aliases $device done for device in $DEV_RECONF_ROUTES ; do action "Bringing up route $device" /etc/sysconfig/network-scripts/ifup-routes $device done case $IPX in yes|true) case $IPXINTERNALNET in reconf) action "Deleting internal IPX network" /sbin/ipx_internal_net del action "Adding internal IPX network $IPXINTERNALNETNUM $IPXINTERNALNODENUM" /sbin/ipx_internal_net add $IPXINTERNALNETNUM \ $IPXINTERNALNODENUM ;; add) action "Adding internal IPX network $IPXINTERNALNETNUM $IPXINTERNALNODENUM"/sbin/ipx_internal_net add $IPXINTERNALNETNUM \ $IPXINTERNALNODENUM ;; del) action "Deleting internal IPX network" /sbin/ipx_internal_net del ;; esac ;; esac else cd $CWD $0 restart fi ;; probe) if [ -x /bin/linuxconf ] ; then eval `/bin/linuxconf --hint netdev` [ -n "$DEV_UP$DEV_DOWN$DEV_RECONF$DEV_RECONF_ALIASES" -o \ -n "$DEV_RECONF_ROUTES$IPXINTERNALNET" -o \ "$RECONF_IPV4ROUTING" = yes ] && \ echo reload exit 0 else # if linuxconf isn't around to figure stuff out for us, # we punt. Probably better than completely reloading # networking if user isn't sure which to do. If user # is sure, they would run restart or reload, not probe. exit 0 fi ;; *) echo "Usage: network {start|stop|restart|reload|status|probe}" exit 1 esac exit 0