mirror of
https://git.linuxfromscratch.org/lfs.git
synced 2025-01-19 13:37:39 +00:00
c2db0877b0
git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@9543 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689
177 lines
5.2 KiB
Bash
177 lines
5.2 KiB
Bash
#!/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}"
|
|
|