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:
# 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,$*)"
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
####################
+==================== 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
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
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> ...