Previous Page | Next Page

  1. Introduction
  2. Boot Process
  3. Init and System Initialization
  4. rc.sysinit script
  5. rc script
  6. functions script
  7. Services
  8. apm daemon
  9. network startup
  10. The network script file
  11. The network-functions file
  12. Portmap startup
  13. Random initialization
  14. Syslog initialization
  15. Gated
  16. Atd
  17. cron initialization
  18. pcmcia
  19. inetd daemon
  20. named daemon
  21. lpd daemon
  22. mars-nwe
  23. netfs startup
  24. dhcpd daemon
  25. autofs daemon
  26. keytable daemon
  27. sendmail daemon
  28. gpm daemon
  29. httpd daemon
  30. xfs startup
  31. smb startup
  32. innd startup
  33. linuxconf startup
  34. rc.local script
  35. Init, Getty, Login
  36. The shell
  37. Shutting down
  38. X
  39. Conclusions
  40. App A. rc.sysinit listing
  41. App B. functions listing
  42. App C. rc listing
  43. Credits

The Linux network script file

#!/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" &#62&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" &#62 /proc/sys/net/ipv4/ip_forward
		fi
	    fi
	fi
}

ipv4_defrag_set ()
{
	# Sets whether or not to always defrag packets.
	# Good for masquerading. Not so good otherwise.
	if [ -d /proc/sys/net/ipv4 ]; then
	    if [ ! -f /proc/sys/net/ipv4/ip_always_defrag ]; then
	       echo "/proc/sys/net/ipv4/ip_always_defrag is missing --" \
	            "cannot control IP defragmentation" &#62&2
	    else
	       if [ "$DEFRAG_IPV4" = "yes" -o "$DEFRAG_IPV4" = "true" ]; then
	          value=1
		  message="Enabling IPv4 automatic defragmentation"
	       else
	          value=0
		  message="Disabling IPv4 automatic defragmentation"
	       fi
	       
	       if [ $value != `cat /proc/sys/net/ipv4/ip_always_defrag` ]; then
	          action "$message" /bin/true
		  echo "$value" &#62 /proc/sys/net/ipv4/ip_always_defrag
	       fi
	    fi
	fi
}

# See how we were called.
case "$1" in
  start)
	ipv4_forward_set
	ipv4_defrag_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 ]; 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" /bin/true
			echo 0 &#62 /proc/sys/net/ipv4/ip_forward
		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" /bin/true
			echo 0 &#62 /proc/sys/net/ipv4/ip_always_defrag
		fi
	  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 "Bringing 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