X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetlab%2Fscripts%2Fsliver-ovs.in;h=1a63bf02e4df8b13ef94e6d8e6b6c98268dfd416;hb=62b6fe80822a34182cccad23cb62c35434a95dd9;hp=804ec16fb02e38d2b1abb6be656c74f982b07292;hpb=c7e5161da9b470f6ee80b1d1956ad9e2ad72cc05;p=sliver-openvswitch.git diff --git a/planetlab/scripts/sliver-ovs.in b/planetlab/scripts/sliver-ovs.in index 804ec16fb..1a63bf02e 100755 --- a/planetlab/scripts/sliver-ovs.in +++ b/planetlab/scripts/sliver-ovs.in @@ -182,24 +182,44 @@ function create_bridge () { function create_port () { get_params "bridge port" "$@" + + W= + if ! is_switch_running; then + # we can create the port even if ovs-vswitchd is not running, + # but we need a running ovsdb-server + is_db_running || { echo "ovsdb-server not running" >&2; exit 1; } + W="--no-wait" + fi - # ensure ovs-vswitchd is running - is_switch_running || { echo "ovs-vswitchd not running" >&2 ; exit 1 ; } + set -e + ovs-vsctl --db=unix:$DB_SOCKET $W -- --may-exist add-port "$bridge" "$port" \ + -- set interface "$port" type=tunnel +} + +function get_local_endpoint () { + + get_params "local_port" "$@" + + is_switch_running || { echo "ovs-vswitchd not running" >&2; exit 1; } set -e - ovs-vsctl --db=unix:$DB_SOCKET -- --may-exist add-port "$bridge" "$port" -- set interface "$port" type=tunnel - ovs-appctl --target=ovs-vswitchd netdev-tunnel/get-port "$port" + ovs-appctl --target=ovs-vswitchd netdev-tunnel/get-port "$local_port" } function set_remote_endpoint () { get_params "local_port remote_ip remote_UDP_port" "$@" - # ensure ovs-vswitchd is running - is_switch_running || { echo "ovs-vswitchd not running" >&2 ; exit 1 ; } + W= + if ! is_switch_running; then + # we can store the info even if ovs-vswitchd is not running, + # but we need a running ovsdb-server + is_db_running || { echo "ovsdb-server not running" >&2; exit 1; } + W="--no-wait" + fi set -e - ovs-vsctl --db=unix:$DB_SOCKET set interface $local_port \ + ovs-vsctl --db=unix:$DB_SOCKET $W set interface $local_port \ options:remote_ip=$remote_ip \ options:remote_port=$remote_UDP_port } @@ -266,6 +286,26 @@ function show () { ovs-vsctl --db=unix:$DB_SOCKET show } +function get_local_ip () { + + get_params "bridge" "$@" + + set -e + ovs-vsctl --db=unix:$DB_SOCKET br-exists "$bridge" || return + local ip=$(ovs-vsctl get interface "$bridge" options:local_ip) + local netmask=$(ovs-vsctl get interface "$bridge" options:local_netmask) + eval echo $ip/$netmask +} + +function get_local_links () { + + get_params "bridge" "$@" + + set -e + ovs-vsctl --db=unix:$DB_SOCKET br-exists "$bridge" || return + ovs-vsctl --db=unix:$DB_SOCKET list-ifaces "$bridge" +} + ### for demos - connect to an ndnmap deployment to visualize links bandwidth # this expects 3 arguments # an interface name, L- based on your ids in conf.mk @@ -274,7 +314,7 @@ function show () { # this one-shot function writes the current statistics onto the ndnmap site # it needs to be called regularly so that ndnmap can do the bw computations # would make sense for the caller to redirect stderr onto some relevant location -function gmap_report_once () { +function gmap_probe_once () { iface=$1; shift hostname=$1; shift linkid=$1; shift @@ -290,7 +330,7 @@ function gmap_report_once () { } ### the front end, manages pid and so on -function gmap_report () { +function gmap_probe () { iface=$1; shift hostname=$1; shift linkid=$1; shift @@ -302,19 +342,43 @@ function gmap_report () { [ -n "$pid" ] && kill $pid >& /dev/null rm $pid_file fi + # close std fds so that ssh invokations can return + exec <&- + exec >&- while true; do - gmap_report_once $iface $hostname $linkid + gmap_probe_once $iface $hostname $linkid sleep $looptime done & # this is the pid for the background process echo $! > $pid_file } +#################### +# xxx tmp for a demo +# there *must* be a better way to do that +# the thing is the slice sees several tap devices at this point, which is odd... +# for now I'm searching the tapname based on some hint - the vnet ip range +VNET=10.0.16 +function show_mac () { + ifnames=$(grep : /proc/net/dev | cut -d: -f1 | awk '{print $1;}') + tapname="" + for ifname in $ifnames; do + ifconfig $ifname | grep -q "$VNET" && tapname=$ifname + done + if [ -z "$tapname" ] ; then + echo "no-tap-found-for$VNET" + exit 1 + fi + ifconfig $tapname | grep -i hwaddr | awk '{print $5;}' +} + #################### SUPPORTED_SUBCOMMANDS="start stop status start_db stop_db start_switch stop_switch create_bridge create_port del_bridge del_port -show set_remote_endpoint set_controller del_controller gmap_report" +show get_local_endpoint set_remote_endpoint +set_controller del_controller gmap_probe +get_local_ip get_local_links show_mac" function main () { message="Usage: $COMMAND ...