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" >&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
}
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" >&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" > /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 > /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 > /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
|
|