1
0
mirror of https://github.com/corundum/corundum.git synced 2025-01-16 08:12:53 +08:00
corundum/scripts/dev-netns-shell.sh
2020-09-07 16:28:18 -07:00

69 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
ns=""
while getopts h-: option; do
case "${option}" in
-)
case "${OPTARG}" in
ns)
val="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ))
ns=$val
;;
ns=*)
val=${OPTARG#*=}
ns=$val
;;
*)
if [ "$OPTERR" = 1 ] && [ "${optspec:0:1}" != ":" ]; then
echo "Unknown option --${OPTARG}" >&2
fi
;;
esac;;
h)
echo $(basename $0): usage: $(basename $0) [-h] [--ns=name] [dev] [dev]
exit 0
;;
esac
done
shift $((OPTIND -1))
dev=$1
if [ -z "$ns" ]; then
if [ -z "$dev" ]; then
echo "Error: must specify either device or network namespace name"
exit 1
fi
ns=$dev
fi
if [ -f "/var/run/netns/$ns" ]; then
echo "Network namespace '$ns' already exists"
else
echo "Creating network namespace '$ns'"
ip netns add $ns
for d in "$@"
do
echo "Adding interface '$d' to network namespace '$ns'"
ip link set dev $d netns $ns
ip netns exec $ns ip link set dev $d up
done
fi
if [ -f "/var/run/netns/$ns" ]; then
echo "Starting shell in network namespace '$ns'"
echo "Note: \$dev='$dev'"
export dev
ip netns exec $ns bash
else
echo "Error: network namespace not found"
fi
if [ -f "/var/run/netns/$ns" -a -z "$(ip netns pids $ns)" ]; then
echo "Deleting network namespace '$ns'"
ip netns del $ns
fi