added del-controllers target
[sliver-openvswitch.git] / planetlab / exp-tool / Makefile
index 9780280..bf66afb 100644 (file)
@@ -38,6 +38,7 @@ opp=$(call linkpart,$(1))@$(call flip,$(call endpart,$(1)))
 # rget(x-y@2) = x
 rget=$(call get,$(call opp,$(1)))
 ###
+default=$(if $($(1)_$(2)),$($(1)_$(2)),$($(1)))
 solve=$(HOST_$(1))
 solve_ip=$(IP_$(1))
 # can be redefined in conf.mk if that's not the expected behaviour
@@ -60,6 +61,7 @@ SUDO ?= sudo -S
 
 ALL_NODE_IDS=$(sort $(foreach link,$(LINKS),$(call leftnode,$(link))) $(foreach link,$(LINKS),$(call rightnode,$(link))))
 ALL_LINK_IDS=$(addsuffix @1,$(LINKS)) $(addsuffix @2,$(LINKS))
+CONF_NODE_IDS=$(subst HOST_,,$(filter HOST_%,$(.VARIABLES)))
 
 ####################
 all+init: init all
@@ -112,6 +114,13 @@ BRIDGES=$(foreach id,$(ALL_NODE_IDS),cache/bridge.$(id))
 bridges: $(BRIDGES)
 .PHONY: bridges
 
+CONTROLLERS=$(foreach id,$(ALL_NODE_IDS),cache/controller.$(id))
+controllers: $(CONTROLLERS)
+.PHONY: controllers
+
+del-controllers: $(foreach id,$(ALL_NODE_IDS),del-controller-$(id))
+.PHONY: del-controllers
+
 ### node-oriented targets
 # check ssh connectivity
 cache/sshcheck.%: FORCE
@@ -140,6 +149,10 @@ cache/bridge.%: cache/switch.%
        @$(SSH) $(HOST_$*) $(SUDO) sliver-ovs create-bridge $(BRIDGE) $(IP_$*) > $@ 2> $(call log,$@) || { rm $@; exit 1; }
        @echo Created bridge with tap $$(cat $@) on $(call display,$*)
 
+cache/controller.%: cache/bridge.%
+       @echo "Setting controller $(call default,CONTROLLER,$*) on $(call display,$*) - logs in $(call log,$@)"
+       @$(SSH) $(HOST_$*) $(SUDO) ovs-vsctl set-controller $(BRIDGE) $(call default,CONTROLLER,$*) &> $(call log,$@) || { rm $@; exit 1; }
+
 # xxx this probably needs a more thorough cleanup in cache/
 cache/stop.%: del-bridge.%
        @echo "Stopping switch & db on $(call display,$*)"
@@ -173,6 +186,11 @@ del-db.%:
        @$(SSH) $(HOST_$*) $(SUDO) sliver-ovs stop-db
        @rm -f cache/db.$*
 
+del-controller.%:
+       @echo "Removing controller for $(call display,$*)"
+       @$(SSH) $(HOST_$*) $(SUDO) sliver-ovs del-controller $(BRIDGE)
+       @rm -f cache/controller.$*
+
 del-links: $(addprefix U/,$(notdir $(filter-out %.log,$(wildcard L/*))))
 
 del-switchs: $(addprefix del-,$(notdir $(filter-out %.log,$(wildcard cache/switch.*))))
@@ -183,6 +201,41 @@ shutdown: del-switchs del-dbs
 
 .PHONY: del-links del-switchs del-dbs shutdown
 
+
+### snapshots
+remote-snapshot: remote-snapshot-ips remote-snapshot-links
+       @true
+
+remote-snapshot-ips: $(addprefix cache/rsnap.ip.,$(CONF_NODE_IDS))
+       @cat /dev/null $^
+
+remote-snapshot-links: $(addprefix cache/rsnap.links.,$(CONF_NODE_IDS))
+       @sort -u /dev/null $^
+
+### update sliver-ovs
+update: $(addprefix update-,$(CONF_NODE_IDS))
+       @true
+
+update-%: FORCE
+       @[ -n "$(SLIVER_OVS)" ] || { echo "SLIVER_OVS not set" >&2; exit 1; }
+       @[ -f "$(SLIVER_OVS)" ] || { echo "$(SLIVER_OVS) not found" >&2; exit 1; }
+       @echo "Sending $(SLIVER_OVS) to $(call display,$*)"
+       @scp -q $(SLIVER_OVS) $(SLICE)@$(call solve,$*):
+       @$(SSH) $(call solve,$*) $(SUDO) mv $(notdir $(SLIVER_OVS)) /usr/sbin/sliver-ovs
+
+.PHONY: remote-snapshot remote-snapshot-ips remote-snapshot-links
+
+cache/rsnap.ip.%: 
+       @$(SSH) $(HOST_$*) $(SUDO) ovs-vsctl -- \
+               get interface $(BRIDGE) options:local_ip options:local_netmask |\
+               sed -n 's|"||g;1h;2{G;s|\(.*\)\n\(.*\)|IP_$* = \2/\1|p}' > $@ || \
+        { rm $@; exit 1; }
+
+cache/rsnap.links.%: 
+       @$(SSH) $(HOST_$*) $(SUDO) ovs-vsctl list-ifaces $(BRIDGE) | \
+        sed -n 's/^L/LINKS += /p' > $@ || \
+        { rm $@; exit 1; }
+
 .SECONDEXPANSION:
 
 del-iface.%: cache/db.$$(call get,%)
@@ -227,6 +280,7 @@ graph.dot:
 graph.ps: graph.dot
        dot -Tps < $^ > $@      
 
+
 ####################
 # 'virtual' targets in that there's no real file attached
 define node_shortcuts