#!/bin/sh

SYSFS="/sys"

MODE="$1"
DEV="tap$2"
BR="br$3"

if [ "$MODE" = "add" ]; then
  if [ ! -e "$SYSFS/class/net/$DEV" ]; then
    ip tuntap add dev "$DEV" mode tap group kvm || exit 1
  fi
  if [ ! -e "$SYSFS/class/net/$BR" ]; then
    brctl addbr "$BR" || exit 1
  fi
  ip link set dev "$DEV" up || exit 1
  if [ ! -e "$SYSFS/class/net/$BR/brif/$DEV" ]; then
    brctl addif "$BR" "$DEV" || exit 1
  fi
elif [ "$MODE" = "del" ]; then
  ip tuntap del dev "$DEV" mode tap || exit 1
  numifs=0
  for interf in "$SYSFS"/class/net/"$BR"/brif/*; do
    if [ -e "$interf" ]; then
      numifs=$((numifs+1))
    fi
  done
  if [ $numifs -eq 0 ]; then
    brctl delbr "$BR" || exit 1
  fi
else
  echo "usage: $0 {add|del} <tap> <bridge>" >&2
  exit 1
fi

exit 0
