Sophie

Sophie

distrib > Mandriva > cooker > x86_64 > by-pkgid > 09f8482796b422dd56a45b97ec1e48fb > files > 41

initscripts-9.34-3.x86_64.rpm

#! /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
		# If we're in confirmation mode, get user confirmation.
		[ -f /var/run/confirm ] && 
			{ 
			    confirm $i
			    case $? in
				0)
				    :
				;;
				2)
				    CONFIRM=
				;;
				*)
				    continue
				;;
			    esac 
		}
		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
		# If we're in confirmation mode, get user confirmation.
		if [ -f /var/run/confirm ]; then
			confirm $i
			test $? = 1 && continue
		fi
		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
	   grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do
              /sbin/route add -$args
	   done
	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 -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