gmap_report subcommand
authorThierry Parmentelat <thierry.parmentelat@inria.fr>
Wed, 3 Oct 2012 16:05:56 +0000 (18:05 +0200)
committerThierry Parmentelat <thierry.parmentelat@inria.fr>
Wed, 3 Oct 2012 16:05:56 +0000 (18:05 +0200)
planetlab/exp-tool/Makefile
planetlab/exp-tool/Makefile.help
planetlab/scripts/sliver-ovs.in

index 728e260..ba4f69a 100644 (file)
@@ -65,12 +65,12 @@ ALL_LINK_IDS=$(addsuffix @1,$(LINKS)) $(addsuffix @2,$(LINKS))
 CONF_NODE_IDS=$(subst HOST_,,$(filter HOST_%,$(.VARIABLES)))
 
 ####################
-init+all: init all
+init_all: init all
 init:
        @[ -d L ] || ( echo Creating tmp dir L; mkdir L)
        @[ -d log ] || (echo Creating tmp dir log; mkdir log)
        @[ -d cache ] || ( echo Creating tmp dir cache; mkdir cache)
-.PHONY: init+all init
+.PHONY: init_all init
 
 FORCE:
 
@@ -139,7 +139,7 @@ ovsversion-%: FORCE
 # should probably replace sshcheck
 cache/status.%: FORCE
        @echo "=== DB and SWITCH processes on $(call display,$*)"
-       @$(SSH) $(HOST_$*) $(SUDO) sliver-ovs status
+       @$(SSH) $(HOST_$*) $(SUDO) sliver-ovs status ||:
 
 cache/host.%:
        @echo "IP lookup for $(call display,$*)"
@@ -280,7 +280,7 @@ cache/link.%: cache/host.$$(call rget,%) cache/iface.% cache/iface.$$(call opp,%
 CLEANTARGETS=$(addprefix del-,$(notdir $(filter-out %.log,$(wildcard cache/bridge.*))))
 clean: $(CLEANTARGETS)
 distclean:
-       rm -rf L U cache
+       rm -rf L log cache
 .PHONY: clean distclean
 
 ####################
index e9be270..e4ad76f 100644 (file)
@@ -1,9 +1,11 @@
+==================== usual target
 make [init+all]
         shortcut for 'make init all'
 make init
         create util subdirs needed by this tool
 make all
         initialize the whole topology on all nodes
+==================== inspect donfig
 make showslice
         show SLICE as defined in conf.mk
 make shownodes
@@ -14,26 +16,37 @@ make showlinks
 make sshchecks
 make ovsversions
         try out ssh connectivity to slivers in the slice, or show installed ovs version
+==================== For changing the topology on the fly
+make L/<id1>-<id2>
+       create a link between nodes with ids <id1> and <id2>
+make U/<id1>-<id2>
+       delete link between nodes with ids <id1> and <id2>
+==================== cleanup
+make clean
+       clean up whatever has been created on the slivers
+make distclean
+       clean up local cache, useful when restarting from a clean slice
+==================== configure (direct switches towards) OF controllers 
+make showcontrollers
+       show how OF controllers are configured from conf.mk
+       use CONTROLLER_<nodeid> if set, or CONTROLLER as a default otherwise
+make controllers
+       configure the various switches so they use the configured controllers
+==================== devel
+make update 
+       push a new version of sliver-ovs into the slivers
+       use SLIVER_OVS that should point to the local new version
+==================== manually/progressively deploy stuff (done in make all)
 make dbs
         initialize ovs db in all slivers
 make switchs
         start ovs switch in all slivers
+make bridges
+        create a bridge interface linked to tap device in each sliver
 make start 
         shortcut for make dbs switchs
 make stop
         stop all ovs switch in all slivers
 make status
         list status of db and switch processes in all slivers
-make bridges
-        create a bridge interface linked to tap devce in each sliver
 ====================
-make showcontrollers
-       show how OF controllers are configured from conf.mk
-       use CONTROLLER_<nodeid> if set, or CONTROLLER as a default otherwise
-make controllers
-       configure the various switches so they use the configured controllers
-
-====================
-make update (devel)
-       push a new version of sliver-ovs into the slivers
-       use SLIVER_OVS that should point to the local new version
index 187fb04..2a95797 100755 (executable)
@@ -259,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<id1>-<id2> 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 set_controller del_controller"
+show set_remote_endpoint set_controller del_controller gmap_report"
 
 function main () {
        message="Usage: $COMMAND <subcommand> ...