# Bug-Reports: see http://grml.org/bugs/
# License: This file is licensed under the GPL v2.
################################################################################
-# grml-addtun [OPTIONS] <tun0> <tun1> ...
set -e
#set -x
+PN_="`basename $0`"
OPT_DEL_='false'
OPT_USER_=''
OPT_GROUP_=''
OPT_BRIDGE_=''
-while getopts "du:g:b:h" opt; do
- case "$opt" in
- d) OPT_DEL_='true' ;;
- u) OPT_USER_="$OPTARG" ;;
- g) OPT_GROUP_="$OPTARG" ;;
- b) OPT_BRIDGE_="$OPTARG" ;;
- h) printUsage; exit 0 ;;
- ?) printUsage; exit 1 ;;
- esac
-done
-shift $(($OPTIND - 1))
+function printUsage()
+{
+ cat <<EOT
+Usage: "$PN_" [OPTIONS] <tun0> <tun1> ...
+
+$PN_ creates persistent tun/tap devices with bridge handling
+
+OPTIONS:
+ -d delete the given tun devices and remove them from the bridge if given
+ -u <user> this user should be able to use the tun device
+ -g <group> this group should be able to use the tun device
+ -b <bridge> if given, all tun/tap devices are added/removed from the bridge
+ bridge is created if not allready existent
+ -h this help
+EOT
+}
function fromCmdline()
{
tunctl -d "$1"
}
+function die()
+{
+ echo "$@" >&2
+ exit 1
+}
+
+##
+# MAIN
+##
+
+while getopts "du:g:b:h" opt; do
+ case "$opt" in
+ d) OPT_DEL_='true' ;;
+ u) OPT_USER_="$OPTARG" ;;
+ g) OPT_GROUP_="$OPTARG" ;;
+ b) OPT_BRIDGE_="$OPTARG" ;;
+ h) printUsage; exit 0 ;;
+ ?) printUsage; exit 1 ;;
+ esac
+done
+shift $(($OPTIND - 1))
+
if [[ $OPT_DEL_ == 'false' ]]; then
+ if [[ $OPT_BRIDGE_ != '' ]]; then
+ brctl showmacs "$OPT_BRIDGE_" &>/dev/null || brctl addbr "$OPT_BRIDGE_"
+ fi
fromCmdline "createTun" "$@"
else
fromCmdline "trashTun" "$@"
+ if [[ $OPT_BRIDGE_ != '' ]]; then
+ tmp_="`brctl showmacs "$OPT_BRIDGE_" |wc -l`"
+ if (( $tmp_ == 1 )); then
+ brctl delbr "$OPT_BRIDGE_"
+ else
+ die "E: bridge $OPT_BRIDGE_ not empty, not removing"
+ fi
+ fi
fi
# vim: filetype=sh