diff options
Diffstat (limited to 'etc/rc.d/init.d/network')
-rwxr-xr-x | etc/rc.d/init.d/network | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/etc/rc.d/init.d/network b/etc/rc.d/init.d/network new file mode 100755 index 00000000..68e95f62 --- /dev/null +++ b/etc/rc.d/init.d/network @@ -0,0 +1,290 @@ +#! /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-wait-online 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. +is_false "${NETWORKING}" && exit 6 + +# if the ip configuration utility isn't around we can't function. +[ -x /sbin/ip ] || exit 1 + + +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-* | \ + 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 + +net_log $"You are using 'network' service provided by 'network-scripts', which are now deprecated." warning network >&2 +net_log $"'network-scripts' will be removed from distribution in near future." warning network >&2 +net_log $"It is advised to switch to 'NetworkManager' instead for network management." warning network >&2 + +# This disables additional warnings during the boot process: +export DEPRECATION_WARNING_ISSUED='true' + +# 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 + + #tell NM to reload its configuration + if [ "$(LANG=C nmcli -t --fields running general status 2>/dev/null)" = "running" ]; then + nmcli connection reload + fi + + # bring up loopback interface + action $"Bringing up loopback interface: " ./ifup ifcfg-lo + + if is_true "$VLAN" ; then + if [ ! -d /proc/net/vlan ] && ! modprobe 8021q >/dev/null 2>&1 ; then + net_log $"No 802.1Q VLAN support available in kernel." + fi + fi + + vlaninterfaces="" + vpninterfaces="" + xdslinterfaces="" + bridgeinterfaces="" + + # bring up all other interfaces configured to come up at boot time + for i in $interfaces; do + unset DEVICE TYPE SLAVE NM_CONTROLLED + eval $(LANG=C grep -F "DEVICE=" ifcfg-$i) + eval $(LANG=C grep -F "TYPE=" ifcfg-$i) + eval $(LANG=C grep -F "SLAVE=" ifcfg-$i) + eval $(LANG=C grep -F "NM_CONTROLLED=" ifcfg-$i) + + if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi + + if is_true "$SLAVE" && ( ! is_nm_running || is_false "$NM_CONTROLLED" ) ; then + continue + fi + + if [ "${DEVICE##cipcb}" != "$DEVICE" ] ; then + vpninterfaces="$vpninterfaces $i" + continue + fi + if [ "$TYPE" = "xDSL" -o "$TYPE" = "Modem" ]; then + xdslinterfaces="$xdslinterfaces $i" + continue + fi + + if [ "$TYPE" = "Bridge" ]; then + bridgeinterfaces="$bridgeinterfaces $i" + continue + fi + if [ "$TYPE" = "IPSEC" ] || [ "$TYPE" = "IPIP" ] || [ "$TYPE" = "GRE" ]; then + vpninterfaces="$vpninterfaces $i" + continue + fi + + if [ "${DEVICE%%.*}" != "$DEVICE" -o "${DEVICE##vlan}" != "$DEVICE" ] ; then + vlaninterfaces="$vlaninterfaces $i" + continue + fi + + if ( . ./ifcfg-"$i" ; is_false "$ONBOOT" ) ; then + # this loads the module, to preserve ordering + is_available $i + continue + fi + action $"Bringing up interface $i: " ./ifup $i boot + [ $? -ne 0 ] && rc=1 + done + + # Bring up xDSL and VPN interfaces + for i in $vlaninterfaces $bridgeinterfaces $xdslinterfaces $vpninterfaces ; do + if ( . ./ifcfg-"$i" ; ! is_false "$ONBOOT" ) ; then + action $"Bringing up interface $i: " ./ifup $i boot + [ $? -ne 0 ] && rc=1 + fi + done + + # Add non interface-specific static-routes. + if [ -f /etc/sysconfig/static-routes ]; then + if [ -x /sbin/route ]; then + grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do + /sbin/route add -$args + done + else + net_log $"Legacy static-route support not available: /sbin/route not found" + fi + 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 + + # Fixed delay + [ -n "${NETWORKDELAY}" ] && [ -z "${WAIT_UNTIL_REACHABLE}" ] && /bin/sleep "${NETWORKDELAY}" + + # Adaptive delay + # It tests if network connection is ready via ping + if [ -n "${WAIT_UNTIL_REACHABLE}" ] ; then + [ -z "${NETWORKDELAY}" ] && NETWORKDELAY=30 + TIMEOUT=0 + IPV="" + ipcalc -c -6 "${WAIT_UNTIL_REACHABLE}" &>/dev/null && IPV="-6" + while [ $TIMEOUT -le $NETWORKDELAY ] ; do + ping $IPV -q -c 1 -W 1 "${WAIT_UNTIL_REACHABLE}" >/dev/null && break + TIMEOUT=$(( TIMEOUT + 1 )) + done + [ $TIMEOUT -gt $NETWORKDELAY ] && net_log $"Target is not reachable, but timeout was already reached. Continuing anyway." + fi + ;; +stop) + [ "$EUID" != "0" ] && exit 4 + # Don't shut the network down if root or /usr is on NFS or a network + # block device. + root_fstype=$(gawk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/" && $3 != "rootfs") { print $3; }}' /proc/mounts) + usr_fstype=$(gawk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/usr" && $3 != "rootfs") { print $3; }}' /proc/mounts) + + if [[ "${root_fstype}" == nfs* || "${usr_fstype}" == nfs* ]] || systemctl show --property=RequiredBy -- -.mount usr.mount | grep -q 'remote-fs.target' ; then + net_log $"rootfs or /usr is on network filesystem, leaving network up" + exit 1 + fi + + unset root_fstype usr_fstype + + # Don't shut the network down when shutting down the system if configured + # as such in sysconfig + if is_false "$IFDOWN_ON_SHUTDOWN"; then + if systemctl is-system-running | grep -q 'stopping'; then + net_log $"system is shutting down, leaving interfaces up as requested" info + exit 0 + 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 [ "${DEVICE##cipcb}" != "$DEVICE" ] ; then + vpninterfaces="$vpninterfaces $i" + continue + fi + if [ "$TYPE" = "IPSEC" ] || [ "$TYPE" = "IPIP" ] || [ "$TYPE" = "GRE" ]; then + vpninterfaces="$vpninterfaces $i" + continue + fi + if [ "$TYPE" = "Bridge" ]; then + bridgeinterfaces="$bridgeinterfaces $i" + continue + fi + if [ "$TYPE" = "xDSL" -o "$TYPE" = "Modem" ]; 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 + unset DEVICE TYPE + (. ./ifcfg-$i + if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi + + if ! check_device_down $DEVICE; then + action $"Shutting down interface $i: " ./ifdown $i boot + [ $? -ne 0 ] && rc=1 + fi + ) + done + + action $"Shutting down loopback interface: " ./ifdown ifcfg-lo + + sysctl -w net.ipv4.ip_forward=0 > /dev/null 2>&1 + + # 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) + echo $"Configured devices:" + echo lo $interfaces + + echo $"Currently active devices:" + echo $(/sbin/ip -o link show up | awk -F ": " '{ print $2 }') + ;; +restart|force-reload) + cd "$CWD" + $0 stop + $0 start + rc=$? + ;; +*) + echo $"Usage: $0 {start|stop|status|restart|force-reload}" + exit 2 +esac + +exit $rc |