#!/bin/sh
#
-# $Id: ifdown,v 1.20 1999/12/20 19:36:27 jajcus Exp $
+# $Id: ifdown,v 1.24.2.6 2001/09/30 10:19:42 misiek Exp $
#
PATH=/sbin:/usr/sbin:/bin:/usr/bin
+. /etc/sysconfig/network
+. /etc/rc.d/init.d/functions
+. /etc/sysconfig/network-scripts/functions.network
+
DEV=$1
[ -z "$DEV" ] && {
- echo "usage: ifdown <device name>" >&2
+ nls "usage: %s <device name>" "ifdown" >&2
exit 1
}
-. /etc/sysconfig/network
-. /etc/rc.d/init.d/functions
-. /etc/sysconfig/network-scripts/.functions
-
-IFCONFIGS="`ls /etc/sysconfig/interfaces/ifcfg-*|egrep -v '~$'`"
-if [ "$IFCONFIGS" ]; then
- IFCONFIGS="`egrep -L '^#!' $IFCONFIGS`"
-fi
-if [ "$IFCONFIGS" ]; then
- CONFIG="`egrep -l "^DEVICE=[\"\']*$DEV[\"\']*\$" $IFCONFIGS`"
-fi
-
-if [ -z "$CONFIG" ]; then
- CONFIG="$DEV"
+if [ -f "/etc/sysconfig/interfaces/ifcfg-$DEV" ] ; then
+ CONFIG="/etc/sysconfig/interfaces/ifcfg-$DEV"
+else
+ CONFIG="$DEV"
fi
-if [ `id -u` != 0 ]; then
+if [ "$(id -u)" != "0" ]; then
if [ -x /sbin/usernetctl ]; then
exec /sbin/usernetctl $CONFIG down
fi
source_config
-# IPv4, IPv6 or both ?
-[ -n "$IPV6_ADDR" ] && IPv6=yes || IPv6=no
-[ -n "$IPADDR" -o "$PUMP" = "true" ] && IPv4=yes || IPv4=no
-
-if [ -z "$PREFIX" -a -n "$NETMASK" ]; then
- PREFIX="`calcprefix $NETMASK`"
-fi
-
-if [ -z "$NETMASK" -a -n "$PREFIX" ]; then
- NETMASK="`calcnetmask $PREFIX`"
-fi
+# set all major variables
+setup_ip_param
-FULLDEVNAME="$DEVICE"
-DEVICETYPE=`echo $FULLDEVNAME | sed "s/[0-9]*$//"`
-DEVICE=`echo $FULLDEVNAME | sed 's/:.*//g'`
OTHERSCRIPT="/etc/sysconfig/network-scripts/ifdown-${DEVICETYPE}"
+# shutdown tleds software
+if [ "$TLEDS_DEV" = "$DEVICE" -a -x /usr/bin/tleds ]; then
+ /usr/bin/tleds -qk "$DEVICE"
+fi
+
if [ -x $OTHERSCRIPT ]; then
- if [ "$DEFAULTHANDLING" = "yes" ]; then
- $OTHERSCRIPT $CONFIG $2
- else
- $OTHERSCRIPT $CONFIG $2
- exit $?
+ if [ "$HANDLING" = "0" ]; then
+ exec $OTHERSCRIPT $CONFIG $2
+ elif [ "$HANDLING" = "1" ]; then
+ $OTHERSCRIPT $CONFIG $2
+ RESULT=$?
+ if [ ${RESULT} -ne 0 ]; then
+ exit 1
+ fi
fi
fi
-if echo "$FULLDEVNAME" | grep -q ':' ; then
- ISALIAS=yes
-else
- ISALIAS=no
+# Check to make sure the device is actually up
+check_device_down && exit 0
+
+if [ "$BOOTMETHOD" = "bootp" -o "$BOOTMETHOD" = "pump" ]; then
+ /sbin/pump -r -i ${DEVICE}
+ RESULT=$?
fi
-if [ "$ISALIAS" = "yes" ]; then
- if [ "$IPv4" = "yes" ]; then
- ip -family inet addr del ${IPADDR}/${PREFIX} dev ${DEVICE} label ${FULLDEVNAME}
+if [ "$BOOTMETHOD" = "dhcp" ]; then
+ if [ -x /sbin/dhcpcd ];then
+ if [ "foo$2" = "fooboot" -a -e /var/run/dhcpcd-${DEVICE}.pid ]; then
+ PID=$(cat /var/run/dhcpcd-${DEVICE}.pid)
+ if ps ax --no-header | grep -q $PID;then
+ kill -TERM $PID
+ RESULT=$?
+ fi
+ else
+ /sbin/dhcpcd -k ${DEVICE}
+ RESULT=$?
fi
- for ADDR in ${IPV6_ADDR} ; do
- ip -family inet6 addr del ${ADDR} dev ${DEVICE} label ${FULLDEVNAME}
- done
-else
- ip link set ${DEVICE} down
- ip addr flush dev ${DEVICE} 2> /dev/null
+ elif [ -x /sbin/dhclient ];then
+ if [ -f /var/run/dhclient.pid ];then
+ PID=$(cat /var/run/dhclient.pid)
+ if ps ax --no-header|grep -q $PID;then
+ kill $PID
+ RESULT=$?
+ fi
+ fi
+ elif [ -x /sbin/dhcpxd ];then
+ /sbin/dhcpxd -k ${DEVICE}
+ RESULT=$?
+ elif [ -x /sbin/pump ];then
+ /sbin/pump -r -i ${DEVICE}
+ RESULT=$?
+ fi
fi
+ip link set ${DEVICE} down
+ip addr flush dev ${DEVICE} 2>&1 | grep -v "Nothing to flush"
+
+# wait up to 5 seconds for device to actually come down...
+waited=0
+while ! check_device_down && [ "$waited" -lt 50 ] ; do
+ usleep 10000
+ waited=$(( ${waited} + 1 ))
+done
+
+if [ "$HANDLING" = "4" ]; then
+ exit 0
+fi
+
+if [ "$RESULT" != "0" ]; then
+ return $RESULT
+fi
+
+# don't leave an outdated key sitting around
+if [ -n "${WIRELESS_ENC_KEY}" -a -x /sbin/iwconfig ]; then
+ /sbin/iwconfig ${DEVICE} enc 0 > /dev/null 2>&1
+fi
+
+exec /etc/sysconfig/network-scripts/ifdown-post ${CONFIG}
-exec /etc/sysconfig/network-scripts/ifdown-post $CONFIG
+# This must be last line !
+# vi:syntax=sh:tw=78:ts=8:sw=4