From 5760f9042df34e1507e5b43dc4202d0828947abf Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Tue, 9 Jun 2015 23:32:54 +0200 Subject: [PATCH] native: unify and simplify usage of tapsetup script --- cpu/native/tapsetup-freebsd.sh | 54 -------- cpu/native/tapsetup-osx.sh | 47 ------- cpu/native/tapsetup.sh | 58 --------- dist/tools/tapsetup/tapsetup | 220 +++++++++++++++++++++++++++++++++ 4 files changed, 220 insertions(+), 159 deletions(-) delete mode 100755 cpu/native/tapsetup-freebsd.sh delete mode 100755 cpu/native/tapsetup-osx.sh delete mode 100755 cpu/native/tapsetup.sh create mode 100755 dist/tools/tapsetup/tapsetup diff --git a/cpu/native/tapsetup-freebsd.sh b/cpu/native/tapsetup-freebsd.sh deleted file mode 100755 index 9b4ab39f9722..000000000000 --- a/cpu/native/tapsetup-freebsd.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/sh - -COMMAND=${1} -COUNT=${2} - -DEFCOUNT="2" - -if [ -z "${USER}" ]; then - echo 'need to export $USER' - exit 1 -fi -if [ -z "${COMMAND}" ]; then - echo "usage: $(basename $0) " - exit 1 -fi - -if [ "${COMMAND}" = 'create' ]; then - if [ -z "${COUNT}" ]; then - COUNT="${DEFCOUNT}" - fi - - # load kernel modules - sudo kldload if_tap - sudo kldload if_bridge - - # set permissions - sudo sysctl net.link.tap.user_open=1 - - # create network - echo "creating ${BRNAME} ..." - sudo ifconfig bridge0 create - sudo ifconfig bridge0 up - - for N in $(seq 0 "$((COUNT - 1))"); do - sudo ifconfig tap${N} create - sudo chown ${USER} /dev/tap${N} - sudo ifconfig tap${N} up - sudo ifconfig bridge0 addm tap${N} - done - -elif [ "${COMMAND}" = 'delete' ]; then - # reset permissions (devices already destroyed) - sudo sysctl net.link.tap.user_open=0 - - # unload kernel modules - sudo kldunload if_tap - sudo kldunload if_bridge - -else - echo 'unknown command' - exit 1 -fi - -exit 0 diff --git a/cpu/native/tapsetup-osx.sh b/cpu/native/tapsetup-osx.sh deleted file mode 100755 index 36317f2ef92d..000000000000 --- a/cpu/native/tapsetup-osx.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh - -COMMAND=${1} -COUNT=${2} - -DEFCOUNT="2" -DEFBRNAME="bridge1234" - -if [ -z "${USER}" ]; then - echo 'need to export $USER' - exit 1 -fi -if [ -z "${COMMAND}" ]; then - echo "usage: $(basename $0) " - exit 1 -fi - -if [ -z "${BRNAME}" ]; then - BRNAME="${DEFBRNAME}" -fi - -if [ "${COMMAND}" = 'create' ]; then - if [ -z "${COUNT}" ]; then - COUNT="${DEFCOUNT}" - fi - - sudo ifconfig ${BRNAME} create || exit 1 - echo "upping ${BRNAME}" - sudo ifconfig ${BRNAME} up || exit 1 - - for N in $(seq 0 "$((COUNT - 1))"); do - sudo chown ${USER} /dev/tap${N} || exit 1 - echo "start RIOT instance for tap${N} now and hit enter" - read - sudo ifconfig ${BRNAME} addm tap${N} || exit 1 - sudo ifconfig tap${N} up - done - -elif [ "${COMMAND}" = 'delete' ]; then - sudo ifconfig ${BRNAME} destroy - -else - echo 'unknown command' - exit 1 -fi - -exit 0 diff --git a/cpu/native/tapsetup.sh b/cpu/native/tapsetup.sh deleted file mode 100755 index 7a0e283f9849..000000000000 --- a/cpu/native/tapsetup.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/sh - -COMMAND=${1} -COUNT=${2} - -DEFCOUNT="2" -DEFBRNAME="tapbr0" -DEFTAPNAME="tap" - -if [ -z "${USER}" ]; then - echo 'need to export $USER' - exit 1 -fi -if [ -z "${COMMAND}" ]; then - echo "usage: $(basename $0) " - exit 1 -fi - -if [ -z "${BRNAME}" ]; then - BRNAME="${DEFBRNAME}" -fi -if [ -z "${TAPNAME}" ]; then - TAPNAME="${DEFTAPNAME}" -fi - -if [ "${COMMAND}" = 'create' ]; then - if [ -z "${COUNT}" ]; then - COUNT="${DEFCOUNT}" - fi - - echo "creating ${BRNAME} ..." - sudo brctl addbr ${BRNAME} || exit 1 - sudo -s sh -c "echo 1 > /proc/sys/net/ipv6/conf/${BRNAME}/disable_ipv6" || exit 1 - sudo ip link set ${BRNAME} up || exit 1 - - for N in $(seq 0 "$((COUNT - 1))"); do - echo "creating ${TAPNAME}${N} ..." - sudo ip tuntap add dev ${TAPNAME}${N} mode tap user ${USER} || exit 1 - sudo -s sh -c "echo 1 > /proc/sys/net/ipv6/conf/${TAPNAME}${N}/disable_ipv6" || exit 1 - sudo brctl addif ${BRNAME} ${TAPNAME}${N} || exit 1 - sudo ip link set ${TAPNAME}${N} up || exit 1 - done - -elif [ "${COMMAND}" = 'delete' ]; then - for IF in $(ls /sys/class/net/${BRNAME}/brif); do - echo "deleting ${IF} ..." - sudo ip link delete "${IF}" - done - echo "deleting ${BRNAME} ..." - sudo ip link set ${BRNAME} down - sudo brctl delbr ${BRNAME} - -else - echo 'unknown command' - exit 1 -fi - -exit 0 diff --git a/dist/tools/tapsetup/tapsetup b/dist/tools/tapsetup/tapsetup new file mode 100755 index 000000000000..f9db01445ca2 --- /dev/null +++ b/dist/tools/tapsetup/tapsetup @@ -0,0 +1,220 @@ +#!/bin/sh + +PROGRAM=$(basename $0) +COUNT="2" +COMMAND="" +BRNAME="tapbr0" +TAPNAME="tap" +DEACTIVATE_IPV6="" + +usage() { + echo "usage: ${PROGRAM} [arguments]" >&2 + echo "" >&2 + echo "Defaults:" + echo " If no option is given, -c is assumed" >&2 + echo "" >&2 + echo "Options:" >&2 + echo " -c [], --create []: Create tap interfaces (default: 2)" >&2 + echo " -d, --delete: Delete all interface" >&2 + echo " -b , --bridge : Give name for the bridge (default: tapbr)" >&2 + echo " -t , --tap : Name base for the tap interfaces; the" >&2 + echo " generated names will be x" >&2 + echo " (default: tap; ignored on OSX and FreeBSD)" >&2 + echo " -6, --deactivate-ipv6: Deactivate IPv6 for the interfaces and bridge" >&2 + echo " (ignored on OSX and FreeBSD)" >&2 + echo " -h, --help: Prints this text" >&2 +} + +unsupported_plattform() { + echo "unsupported platform" >&2 + echo "(currently supported \`uname -s\` 'Darvin', 'FreeBSD', and 'Linux')" >&2 +} + +create_bridge() { + echo "creating ${BRNAME}" + + case "${PLATFORM}" in + FreeBSD) + sudo kldload if_bridge + sudo ifconfig ${BRNAME} create || exit 1 ;; + Linux) + sudo ip link add name ${BRNAME} type bridge || exit 1 + if [ -n "${DEACTIVATE_IPV6}" ]; then + sudo -s sh -c "echo 1 > /proc/sys/net/ipv6/conf/${BRNAME}/disable_ipv6" || exit 1 + fi ;; + OSX) + sudo ifconfig ${BRNAME} create || exit 1 ;; + *) + ;; + esac +} + +up_bridge() { + case "${PLATFORM}" in + FreeBSD|OSX) + sudo ifconfig ${BRNAME} up || exit 1 ;; + Linux) + sudo ip link set ${BRNAME} up || exit 1 ;; + *) + ;; + esac +} + +delete_bridge() { + echo "deleting ${BRNAME}" + + case "${PLATFORM}" in + FreeBSD) + sudo sysctl net.link.tap.user_open=0 + sudo kldunload if_tap || exit 1 + sudo kldunload if_bridge || exit 1 ;; + Linux) + for IF in $(ls /sys/class/net/${BRNAME}/brif); do + sudo ip link delete "${IF}" + done + + sudo ip link delete ${BRNAME} || exit 1 ;; + OSX) + sudo ifconfig ${BRNAME} destroy || exit 1 ;; + *) + ;; + esac +} + +begin_tap() { + case "${PLATFORM}" in + FreeBSD) + sudo kldload if_tap || exit 1 + sudo sysctl net.link.tap.user_open=1 ;; + *) + ;; + esac +} + +create_tap() { + case "${PLATFORM}" in + FreeBSD) + echo "creating ${TAPNAME}${N}" || exit 1 + sudo ifconfig tap${N} create || exit 1 + sudo chown ${USER} /dev/tap${N} || exit 1 + sudo ifconfig ${BRNAME} addm tap${N} || exit 1 + sudo ifconfig tap${N} up || exit 1 ;; + Linux) + echo "creating ${TAPNAME}${N}" + sudo ip tuntap add dev ${TAPNAME}${N} mode tap user ${USER} || exit 1 + if [ -n "${DEACTIVATE_IPV6}" ]; then + sudo -s sh -c "echo 1 > /proc/sys/net/ipv6/conf/${TAPNAME}${N}/disable_ipv6" || exit 1 + fi + sudo ip link set dev ${TAPNAME}${N} master ${BRNAME} || exit 1 + sudo ip link set ${TAPNAME}${N} up || exit 1 ;; + OSX) + sudo chown ${USER} /dev/tap${N} || exit 1 + echo "start RIOT instance for tap${N} now and hit enter" + read + sudo ifconfig ${BRNAME} addm tap${N} || exit 1 + sudo ifconfig tap${N} up || exit 1 ;; + *) + ;; + esac +} + +while true ; do + case "$1" in + -6) + DEACTIVATE_IPV6=1 + shift ;; + -b|--bridge) + case "$2" in + "") + usage + exit 2 ;; + *) + BRNAME="$2" + shift 2 ;; + esac ;; + -c|--create) + if [ -n "${COMMAND}" ]; then + usage + exit 2 + fi + COMMAND="create" + case "$2" in + "") + shift ;; + *[!0-9]*) + usage + exit 2;; + *) + COUNT="$2" + shift 2 ;; + esac ;; + -d|--delete) + if [ -n "${COMMAND}" ]; then + usage + exit 2 + fi + COMMAND="delete" + shift ;; + -h|--help) + usage + exit ;; + -t|--tap) + case "$2" in + "") + usage + exit 2 ;; + *) + TAPNAME="$2" + shift 2 ;; + esac ;; + "") + break ;; + *) usage + exit 2 ;; + esac +done + +if [ -z "${USER}" ]; then + echo 'need to export $USER' + exit 1 +fi +if [ -z "${COMMAND}" ]; then + COMMAND="create" +fi +case "$(uname -s)" in + Darwin) + PLATFORM="OSX" + if echo "$BRNAME" | grep -v -q "^bridge"; then + BRNAME=bridge0 + fi ;; + FreeBSD) + PLATFORM="FreeBSD" + if echo "$BRNAME" | grep -v -q "^bridge"; then + BRNAME=bridge0 + fi ;; + Linux) + PLATFORM="Linux" ;; + *) + unsupported_plattform + exit 1 ;; +esac + +if [ "${COMMAND}" = 'create' ]; then + create_bridge || exit 1 + + begin_tap || exit 1 + + for N in $(seq 0 "$((COUNT - 1))"); do + create_tap || exit 1 + done + + up_bridge || exit 1 + +elif [ "${COMMAND}" = 'delete' ]; then + delete_bridge +else + echo 'unknown command' + exit 1 +fi + +exit 0