From 21ccf217a1462ccfe1b822d88acf5761a33e0f92 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Wed, 3 Oct 2012 18:05:56 +0200 Subject: [PATCH] gmap_report subcommand --- planetlab/exp-tool/Makefile | 8 +++--- planetlab/exp-tool/Makefile.help | 37 ++++++++++++++++-------- planetlab/scripts/sliver-ovs.in | 48 +++++++++++++++++++++++++++++++- 3 files changed, 76 insertions(+), 17 deletions(-) diff --git a/planetlab/exp-tool/Makefile b/planetlab/exp-tool/Makefile index 728e260e7..ba4f69a24 100644 --- a/planetlab/exp-tool/Makefile +++ b/planetlab/exp-tool/Makefile @@ -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 #################### diff --git a/planetlab/exp-tool/Makefile.help b/planetlab/exp-tool/Makefile.help index e9be270ee..e4ad76fc0 100644 --- a/planetlab/exp-tool/Makefile.help +++ b/planetlab/exp-tool/Makefile.help @@ -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/- + create a link between nodes with ids and +make U/- + delete link between nodes with ids and +==================== 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_ 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_ 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 diff --git a/planetlab/scripts/sliver-ovs.in b/planetlab/scripts/sliver-ovs.in index 187fb0486..2a95797ad 100755 --- a/planetlab/scripts/sliver-ovs.in +++ b/planetlab/scripts/sliver-ovs.in @@ -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- 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 ... -- 2.43.0