123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- #!/bin/sh
- ########################################################################
- # Begin /sbin/ifdown
- #
- # Description : Interface Down
- #
- # Authors : DJ Lucas - dj@linuxfromscratch.org
- #
- # Version : 00.02
- #
- ########################################################################
- . /lib/lsb/init-functions
- function get_args()
- {
- if test -z "${1}" ; then
- showhelp
- exit 1
- fi
- while test -n "${1}" ; do
- case "${1}" in
- -c | --configfile)
- check_arg $1 $2
- CONFIGFILE="${2}"
- shift 2
- ;;
- -f | --force)
- FORCE="1"
- shift 1
- ;;
- eth* | iw* | wlan*)
- INTERFACE="${1}"
- shift 1
- ;;
- -h | --help)
- showhelp
- exit 0
- ;;
- *)
- showhelp
- echo "ERROR: '${1}' unknown argument"
- echo ""
- exit 2
- ;;
- esac
- done
- }
- function check_arg()
- {
- echo "${2}" | grep -v "^-" > /dev/null
- if [ -z "${?}" -o ! -n "${2}" ]; then
- echo "Error: ${1} requires a valid argument."
- exit 2
- fi
- }
- function showhelp()
- {
- echo ""
- echo "`/usr/bin/basename ${0}` brings down a valid network interface."
- echo ""
- echo "Options:"
- echo " -c --configfile The path to an interface configuration file"
- echo " If no configuration file is given, all files"
- echo " listed in /etc/network/ifconfig.<int> will"
- echo " be processed, regarless of the value of ONBOOT"
- echo " -f --force Flush all IPs and force the interface down."
- echo " -h --help Show this help message and exit."
- echo ""
- echo "Examples:"
- echo " `/usr/bin/basename ${0}` eth0 -c /run/network/ifconfig.eth0/ipv4"
- echo " `/usr/bin/basename ${0}` eth0 --force -c /run/network/ifconfig.eth0/ipv4"
- echo " `/usr/bin/basename ${0}` eth0 --force"
- echo " `/usr/bin/basename ${0}` eth0"
- echo ""
- echo ""
- }
- # Intialize empty variables so that the shell does not polute the script
- CONFIGFILE=""
- CONFIGDIR=""
- INTERFACE=""
- FORCE=""
- failed=0
- # Process command line arguments
- get_args ${@}
- # Handle common errors - No need to account for bootscripts, this should not
- # happen during boot or shutdown.
- if [ "${CONFIGFILE}x" != "x" -a ! -f "${CONFIGFILE}" ]; then
- echo "ERROR: ${CONFIGFILE} is not a valid network configuration file."
- echo ""
- exit 2
- fi
- if [ "${INTERFACE}x" == "x" ]; then
- echo "ERROR: No interface was given"
- echo ""
- exit 2
- else
- if ! grep "${INTERFACE}" /proc/net/dev 2>&1 > /dev/null; then
- echo "ERROR: ${INTERFACE} is not a valid network interface."
- echo ""
- exit 2
- fi
- fi
- # If a configuration file is present, use it
- if [ "${CONFIGFILE}x" != "x" ]; then
- . "${CONFIGFILE}"
- if [ -x "/lib/network-services/${SERVICE}" ]; then
- # do the work
- if IFCONFIG=${CONFIGFILE} \
- /lib/network-services/${SERVICE} ${INTERFACE} down; then
- rm "${CONFIGFILE}"
- fi
- else
- echo "ERROR: Service '${SERVICE}' is not a valid service."
- echo ""
- exit 2
- fi
- # No interface configuration file was given
- else
- # Process all running interface configuration files
- CONFIGDIR="/run/network/ifconfig.${INTERFACE}"
- if [ -d "${CONFIGDIR}" ]; then
- FILES=`ls "${CONFIGDIR}"`
- for CONFIGFILE in ${FILES}
- do
- (
- . "${CONFIGDIR}/${CONFIGFILE}"
- # No error checking necessary if they are in /run
- if IFCONFIG="${CONFIGDIR}/${CONFIGFILE}" \
- /lib/network-services/${SERVICE} ${INTERFACE} down; then
- rm "${CONFIGDIR}/${CONFIGFILE}"
- fi
- )
- done
- # all running config files processes, set the link down
- message="Setting interface ${INTERFACE} down..."
- /sbin/ip link set "${INTERFACE}" down
- evaluate_retval standard
- else
- if [ "${FORCE}" != "1" ]; then
- echo "ERROR: No configuration files found for ${INTERFACE}."
- echo ""
- exit 2
- fi
- fi
- fi
-
- if [ "${FORCE}" == "1" ]; then
- /sbin/ip addr flush dev "${INTERFACE}" 2>&1 > /dev/null || failed=1
- if [ "${failed}" == "1" ]; then
- log_failure_msg "Flushing IP addresses from interface ${INTERFACE}..."
- echo ""
- exit 1
- else
- log_success_msg "Flushing IP addresses from interface ${INTERFACE}..."
- fi
- /sbin/ip link set dev "${INTERFACE}" down 2>&1 > /dev/null || failed=1
- if [ "${failed}" == "1" ]; then
- log_failure_msg "Setting link down for interface ${INTERFACE}..."
- echo ""
- exit 1
- else
- log_success_msg "Setting link down for interface ${INTERFACE}..."
- fi
- fi
- exit "${failed}"
|