diff options
Diffstat (limited to 'lsb-bootscripts/sbin/ifdown')
-rw-r--r-- | lsb-bootscripts/sbin/ifdown | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/lsb-bootscripts/sbin/ifdown b/lsb-bootscripts/sbin/ifdown new file mode 100644 index 000000000..f9e2a51ad --- /dev/null +++ b/lsb-bootscripts/sbin/ifdown @@ -0,0 +1,98 @@ +#!/bin/sh +######################################################################## +# Begin $NETWORK_DEVICES/ifdown +# +# Description : Interface Down +# +# Authors : Nathan Coulson - nathan@linuxfromscratch.org +# Kevin P. Fleming - kpfleming@linuxfromscratch.org +# +# Version : 00.01 +# +# Notes : the IFCONFIG variable is passed to the scripts found +# in the services directory, to indicate what file the +# service should source to get environmental variables. +# +######################################################################## + +. /lib/lsb/init-functions + +# Collect a list of configuration files for our interface +if [ -n "${2}" ]; then + for file in ${@#$1}; do # All parameters except $1 + FILES="${FILES} /run/network/ifconfig.${1}/${file}" + done +elif [ -d "/run/network/ifconfig.${1}" ]; then + FILES=`echo /run/network/ifconfig.${1}/*` +else + FILES="/run/network/ifconfig.${1}" +fi + +# Reverse the order configuration files are processed in +for file in ${FILES}; do + FILES2="${file} ${FILES2}" +done +FILES=${FILES2} + +# Process each configuration file +for file in ${FILES}; do + # skip backup files + if [ "${file}" != "${file%""~""}" ]; then + continue + fi + + if [ ! -f "${file}" ]; then + message="${file} is not a network configuration file or directory." + log_warning_msg + fi + ( + if [ ! -d "${file}" ]; then + . ${file} + fi + + # Will not process this service if started by boot, and ONBOOT + # is not set to yes + if [ "${IN_BOOT}" = "1" -a "${ONBOOT}" != "yes" ]; then + continue + fi + + # Will not process this service if started by hotplug, and + # ONHOTPLUG is not set to yes + if [ "${IN_HOTPLUG}" = "1" -a "${ONHOTPLUG}" != "yes" ]; then + continue + fi + + # This will run the service script, if SERVICE is set + if [ -n "${SERVICE}" -a -x "/lib/network-services/${SERVICE}" ]; then + if ip link show ${1} > /dev/null 2>&1 + then + IFCONFIG=${file} /lib/network-services/${SERVICE} ${1} down && + if [ -f "${file}" ]; then + rm ${file} + fi + else + message="Interface ${1} doesn't exist." + log_warning_msg + fi + else + echo -e "${FAILURE}Unable to process ${file}. Either" + echo -e "${FAILURE}the SERVICE variable was not set," + echo -e "${FAILURE}or the specified service cannot be executed." + message="" + log_failure_msg + fi + ) +done + +if [ -z "${2}" ]; then + link_status=`ip link show $1` + if [ -n "${link_status}" ]; then + if echo "${link_status}" | grep -q UP; then + message="Bringing down the ${1} interface..." + ip link set ${1} down + evaluate_retval standard + fi + fi +fi + +# End $NETWORK_DEVICES/ifdown |