X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetlab%2Fscripts%2Fsliver-ovs.in;h=2a95797add00ca2fbc23605c0edbc6ecf8d31525;hb=21ccf217a1462ccfe1b822d88acf5761a33e0f92;hp=01089ee8c74b0a0a3a5955c5dd790fe6cfb3a202;hpb=d0a72100346ee2695cbb23134d7bc7f5ba4865a7;p=sliver-openvswitch.git diff --git a/planetlab/scripts/sliver-ovs.in b/planetlab/scripts/sliver-ovs.in index 01089ee8c..2a95797ad 100755 --- a/planetlab/scripts/sliver-ovs.in +++ b/planetlab/scripts/sliver-ovs.in @@ -157,38 +157,19 @@ function stop () { #################### create functions function create_bridge () { - get_params "IP/PREFIX" "$@" + get_params "bridge IP/PREFIX" "$@" IP=${IP_PREFIX%/*} PREFIX=${IP_PREFIX#*/} - set -e # ensure ovs-vswitchd is running is_switch_running || { echo "ovs-vswitchd not running" >&2 ; exit 1 ; } - # check whether the address is already assigned - TAPNAME=$(tapname $IP) - if [ ! -z "$TAPNAME" ]; then - if ovs-vsctl --db=unix:$DB_SOCKET br-exists "$TAPNAME"; then - echo $TAPNAME - exit 0 - fi - kill_pltap_ovs - error "$IP already assigned to $TAPNAME" - fi - - # we're clear - TAPNAME=$(pltap-ovs) - trap kill_pltap_ovs EXIT - # xxx wouldn't that be safer if left-aligned ? - vsysc vif_up << EOF - $TAPNAME - $IP - $PREFIX -EOF - wait_device $TAPNAME 60 && \ - ovs-vsctl --db=unix:$DB_SOCKET add-br $TAPNAME -- set bridge $TAPNAME datapath_type=planetlab - echo $TAPNAME + set -e + ovs-vsctl --db=unix:$DB_SOCKET -- --may-exist add-br "$bridge" \ + -- set bridge "$bridge" datapath_type=planetlab \ + -- set interface "$bridge" options:local_ip="$IP" option:local_netmask="$PREFIX" + ovs-appctl netdev-pltap/get-tapname "$bridge" } function create_port () { @@ -216,6 +197,28 @@ function set_remote_endpoint () { options:remote_port=$remote_UDP_port } +function set_controller () { + + get_params "bridge_name controller" "$@" + + # ensure ovs-vswitchd is running + is_switch_running || { echo "ovs-vswitchd not running" >&2 ; exit 1 ; } + + set -e + ovs-vsctl --db=unix:$DB_SOCKET set-controller "$bridge_name" "$controller" +} + +function del_controller () { + + get_params "bridge_name" "$@" + + # ensure ovs-vswitchd is running + is_switch_running || { echo "ovs-vswitchd not running" >&2 ; exit 1 ; } + + set -e + ovs-vsctl --db=unix:$DB_SOCKET del-controller "$bridge_name" +} + #################### del functions function del_bridge () { @@ -256,11 +259,57 @@ function show () { ovs-vsctl --db=unix:$DB_SOCKET show } +### 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 +# the hostname for a ndnmap deployment +# a linkid, this is the id that this link has in your ndnmap scenario (hard-coded in some json file) +# 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 () { + iface=$1; shift + hostname=$1; shift + linkid=$1; shift + report=$(ovs-vsctl get interface $iface statistics) + rx_bytes=$(echo $report | sed -e 's/^.*rx_bytes=//' -e 's/,.*$//') + tx_bytes=$(echo $report | sed -e 's/^.*tx_bytes=//' -e 's/,.*$//') + rx_bits=$(($rx_bytes*8)) + tx_bits=$(($tx_bytes*8)) + now=$(date +%s).$(date +%N) + trigger=http://${hostname}/bw/${linkid}/${now}/${rx_bits}/${tx_bits} +# curl -s -L $trigger | grep -q "Got it" || echo Missed event with $trigger +# echo $trigger + curl -s -L $trigger >& /dev/null +} + +### the front end, manages pid and so on +function gmap_report () { + iface=$1; shift + hostname=$1; shift + linkid=$1; shift + looptime=$1; shift + [ -z "$looptime" ] && looptime=1 +# we'd need a means to avoid running 2 instances at the same time +# but it's kind of hard to keep track of the right pid here.. +# pidfile=/var/run/openvswitch/gmap-$iface.pid +# if [ -f $pidfile ] ; then +# pid=$(cat $pidfile) +# [ -n "$pid" ] && kill $pid +# rm $pidfile +# fi + while true; do +# echo $$ > $pidfile + gmap_report_once $iface $hostname $linkid + sleep $looptime + done +} + #################### 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" +show set_remote_endpoint set_controller del_controller gmap_report" function main () { message="Usage: $COMMAND ...