| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 | #!/bin/sh######################################################################### Begin /sbin/ifdown## Description : Interface Down## Authors     : DJ Lucas - dj@linuxfromscratch.org## Version     : 00.02#########################################################################. /lib/lsb/init-functionsfunction 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 scriptCONFIGFILE=""CONFIGDIR=""INTERFACE=""FORCE=""failed=0# Process command line argumentsget_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 2fiif [ "${INTERFACE}x" == "x" ]; then    echo "ERROR: No interface was given"    echo ""    exit 2else    if ! grep "${INTERFACE}" /proc/net/dev 2>&1 > /dev/null; then        echo "ERROR: ${INTERFACE} is not a valid network interface."        echo ""        exit 2    fifi# If a configuration file is present, use itif [ "${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 givenelse    # 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    fifi    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}..."    fifiexit "${failed}"
 |