Merge branch 'master' into forward-port
[sliver-openvswitch.git] / planetlab / scripts / create_bridge
diff --git a/planetlab/scripts/create_bridge b/planetlab/scripts/create_bridge
new file mode 100755 (executable)
index 0000000..ad88305
--- /dev/null
@@ -0,0 +1,55 @@
+#!/bin/bash
+
+function error 
+{
+       echo $1 >&2
+       killall pltap-ovs 2>/dev/null || true
+       exit 1
+}
+
+function is_switch_running
+{
+       ovs-appctl version >/dev/null 2>&1
+}
+
+if [ -z "$1" ]; then
+       error "Usage: ${0##*/} <IP/PREFIX>"
+fi
+
+# TODO: check paramether validity
+
+IP=${1%/*}
+PREFIX=${1#*/}
+
+set -e
+
+# ensure ovs-vswitchd is running
+if ! is_switch_running; then
+       echo "ovs-vswitchd not running" >&2
+       exit 1
+fi
+       
+
+# check whether the address is already assigned
+set -e
+TAPNAME=$(ip addr show to "$IP/32" | perl -ne '/^\s*\d+:\s*([\w-]+):/ && print $1')
+if [ ! -z "$TAPNAME" ]; then
+    if ovs-vsctl br-exists "$TAPNAME"; then
+               echo $TAPNAME
+               exit 0
+    fi
+    error "$IP already assigned to $TAPNAME"
+fi
+
+TAPNAME=$(pltap-ovs)
+vsysc vif_up << EOF
+       $TAPNAME
+       $IP
+       $PREFIX
+EOF
+while ! ip link show up | egrep -q "^[0-9]+: +$TAPNAME:"; do
+       echo "Waiting for $TAPNAME to come UP..." >&2
+       sleep 1
+done
+ovs-vsctl add-br $TAPNAME -- set bridge $TAPNAME datapath_type=planetlab
+echo $TAPNAME