X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetlab%2Fexp-tool%2FMakefile;h=c2b0d77095e7128e176c936d84d47eca8d11cae0;hb=71ae087e8c5d196e27a583ba73dae383c37d1795;hp=75719a3b7c7c8548f80bb4186d01570ae11f084d;hpb=23ac66053b47ebd56dca0e8a56363012ff6bf11f;p=sliver-openvswitch.git diff --git a/planetlab/exp-tool/Makefile b/planetlab/exp-tool/Makefile index 75719a3b7..c2b0d7709 100644 --- a/planetlab/exp-tool/Makefile +++ b/planetlab/exp-tool/Makefile @@ -101,6 +101,8 @@ ovsversions: $(foreach id,$(ALL_NODE_IDS),ovsversion-$(id)) # more general form; run with make sshs SSH-COMMAND="bla bla bla" sshs: $(foreach id,$(ALL_NODE_IDS),ssh-$(id)) .PHONY: sshs +showdpids: $(foreach id,$(ALL_NODE_IDS),showdpid-$(id)) +.PHONY: showdpids DBS=$(foreach id,$(ALL_NODE_IDS),cache/db.$(id)) dbs: $(DBS) @@ -142,6 +144,9 @@ ovsversion-%: FORCE ssh-%: FORCE @$(SSH) $(HOST_$*) $(SUDO) $(SSH-COMMAND) +showdpid-%: FORCE + @echo $*_DPID=0x$$( $(SSH) $(HOST_$*) $(SUDO) ovs-vsctl get bridge $(BRIDGE) datapath_id | sed -e 's,",,g') + # should probably replace sshcheck cache/status.%: FORCE @echo "=== DB and SWITCH processes on $(call display,$*)" @@ -155,18 +160,20 @@ cache/db.%: @echo "Starting db server on $(call display,$*) - logs in $(call log,$@)" @$(SSH) $(HOST_$*) $(SUDO) sliver-ovs start-db &> $(call log,$@) && touch $@ -cache/switch.%: cache/db.% +cache/switch.%: | cache/db.% @echo "Starting vswitchd on $(call display,$*) - logs in $(call log,$@)" @$(SSH) $(HOST_$*) $(SUDO) sliver-ovs start-switch &> $(call log,$@) && touch $@ -cache/bridge.%: cache/switch.% +cache/bridge.%: | cache/db.% @echo "Creating bridge on $(call display,$*) - logs in $(call log,$@)" - @$(SSH) $(HOST_$*) $(SUDO) sliver-ovs create-bridge $(BRIDGE) $(IP_$*) > $@ 2> $(call log,$@) || { rm $@; exit 1; } - @echo Created bridge with tap $$(cat $@) on $(call display,$*) + @$(SSH) $(HOST_$*) $(SUDO) \ + sliver-ovs create-bridge $(BRIDGE) $(IP_$*) $(call default,BROPTIONS,$*) &> $(call log,$@) \ + && touch $@ 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; } + @$(SSH) $(HOST_$*) $(SUDO) ovs-vsctl set-controller $(BRIDGE) $(call default,CONTROLLER,$*) &> $(call log,$@) \ + && touch $@ # xxx this probably needs a more thorough cleanup in cache/ cache/stop.%: del-bridge.% @@ -174,44 +181,84 @@ cache/stop.%: del-bridge.% @$(SSH) $(HOST_$*) $(SUDO) sliver-ovs stop && rm cache/switch.$* cache/db.$* ### link-oriented targets -# L/- -L/%: cache/link.%@1 cache/link.%@2 +# L/-: +# Establish a link between nodes and +L/%: cache/endpoint.%@1 cache/endpoint.%@2 @touch $@ - @echo "Created link $*" + @echo "Link $* is up" +# U/- +# Tear down the link between nodes and U/%: del-iface.%@1 del-iface.%@2 @rm -f L/$* @echo "Deleted link $*" -del-bridge.%: cache/db.% +# del-bridge.: Delete the bridge on node . +# +# We can do this only if the db on node is running, but +# we don't need to re-delete if the db is restarted (hence the +# order-only dependency). +# +# Deleting a bridge also deletes all interfaces of the bridge +# as a side effect. This in turn invalidates local tunnel +# port numbers and endpoint info on both sides of each affected tunnel. +# The corresponding links obviously go down. +# Controller information is also lost. +# We invalidate the cache accordingly. +del-bridge.%: | cache/db.% @echo "Deleting bridge on $(call display,$*)" @$(SSH) $(HOST_$*) $(SUDO) sliver-ovs del-bridge $(BRIDGE); @rm -f cache/bridge.$* \ cache/iface.$*$(SEP)*@1 cache/iface.*$(SEP)$*@2 \ - cache/link.$*$(SEP)*@? cache/link.*$(SEP)$*@? \ - L/$*$(SEP)* L/*$(SEP)$* - -del-switch.%: del-bridge.% + cache/port.$*$(SEP)*@1 cache/port.*$(SEP)$*@2 \ + cache/endpoint.$*$(SEP)*@? cache/endpoint.*$(SEP)$*@? \ + L/$*$(SEP)* L/*$(SEP)$* \ + cache/controller.$* + +# del-switch.: Stops the switch daemon on . +# +# As a side effect, the local port numbers of the tunnels +# are no longer valid (they will change when the daemon is restarted) +# and, therefore, the endpoint info on the remote side of +# the tunnels must be invalidated. The links also go down. +# Controller information is also lost. +# We invalidate the cache accordingly. +del-switch.%: @echo "Shutting down switch on $(call display,$*)" @$(SSH) $(HOST_$*) $(SUDO) sliver-ovs stop-switch - @rm -f cache/switch.$* - + @rm -f cache/switch.$* \ + cache/port.$*$(SEP)*@1 cache/port.*$(SEP)$*@2 \ + cache/endpoint.$*$(SEP)*@2 cache/endpoint.*$(SEP)$*@1 \ + L/$*$(SEP)* L/*$(SEP)$* \ + cache/controller.$* + +# del-db.: Stops the db daemon on . +# +# This has no additional side effects. del-db.%: @echo "Shutting down db on $(call display,$*)" @$(SSH) $(HOST_$*) $(SUDO) sliver-ovs stop-db @rm -f cache/db.$* -del-controller.%: +# del-controller.: +# Detaches from the controller. +# +# This has no additional side effects. +del-controller-%: | cache/db.% @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-links: Shortcut to delete all currently up links. +del-links: $(addprefix U/,$(notdir $(wildcard L/*))) -del-switchs: $(addprefix del-,$(notdir $(filter-out %.log,$(wildcard cache/switch.*)))) +# del-switchs: Shortcut to stop all currently running switch daemons. +del-switchs: $(addprefix del-,$(notdir $(wildcard cache/switch.*))) -del-dbs: $(addprefix del-,$(notdir $(filter-out %.log,$(wildcard cache/db.*)))) +# del-dbs: Shortcut to stop all currently running db daemona.s +del-dbs: $(addprefix del-,$(notdir $(wildcard cache/db.*))) +# shutdown: Shortcut to stop all currently running daemons. shutdown: del-switchs del-dbs .PHONY: del-links del-switchs del-dbs shutdown @@ -253,11 +300,22 @@ cache/rsnap.links.%: .SECONDEXPANSION: -del-iface.%: cache/db.$$(call get,%) +# del-iface.-@: +# Deletes the interface of link - on either +# or , according to . +# +# We need a running db daemon to do this, but we do not have to +# redo the delete if the db daemon is restarted. +# +# This also invalidates the local port of the tunnel and the endpoint +# info on both sides of the tunnel. The link goes down. +del-iface.%: | cache/db.$$(call get,%) @echo "Removing interface for link $(call linkpart,$*) from $(call get,$*)" @$(SSH) $(HOST_$(call get,$*)) \ $(SUDO) sliver-ovs del-port L$(call linkpart,$*) - @rm -f cache/iface.$* cache/link.$* cache/link.$(call opp,$*) + @rm -f cache/iface.$* \ + cache/port.$* cache/endpoint.$* cache/endpoint.$(call opp,$*) \ + L/$(call linkpart,$*) ### '%' here is leftid-rightid@{1,2} @@ -265,25 +323,56 @@ del-iface.%: cache/db.$$(call get,%) #linkid=$(call linkpart,%) #nodeid=$(call get,%) #bridgefile=cache/bridge.$(nodeid) -cache/iface.%: cache/bridge.$$(call get,%) + +# cache/iface.-@: +# Creates the interface for link - on +# >. +# +# The bridge of the local node must already exist, and we need to create +# the interface again if the bridge is re-created. +# We also need a running db daemon, but we do not need to do anything +# if the db daemon is restarted. +cache/iface.%: cache/bridge.$$(call get,%) | cache/db.$$(call get,%) @echo "Creating interface for link $(call linkpart,$(*F)) on $(call display,$(call get,$(*F))) - logs in $(call log,$@)" @$(SSH) $(call solve,$(call get,$(*F))) $(SUDO) sliver-ovs create-port $(BRIDGE) \ - L$(call linkpart,$(*F)) > $@ 2> $(call log,$@) || { rm $@; exit 1; } + L$(call linkpart,$(*F)) &> $(call log,$@) \ + && touch $@ + +# cache/port.-@: +# Retrieves the local port of link - on +# node >. +# +# The local interface must have been created already and the +# switch daemon must be running. We need to retrieve the port +# number again if the interface is re-created, or the switch +# daemon is restarted. +cache/port.%: cache/iface.% cache/switch.$$(call get,%) + @echo "Getting port number for link $(call linkpart,$(*F)) on $(call display,$(call get,$(*F))) - logs in $(call log,$@)" + @$(SSH) $(call solve,$(call get,$(*F))) $(SUDO) \ + ovs-appctl netdev-tunnel/get-port L$(call linkpart,$(*F)) > $@ 2> $(call log,$@) \ + || { rm $@; exit 1; } # linkid=$(call linkpart,%) # nodeid=$(call get,%) # iface1=cache/iface.% # iface2=cache/iface.$(call opp,%) -cache/link.%: cache/host.$$(call rget,%) cache/iface.% cache/iface.$$(call opp,%) + +# cache/endpoint.-@: +# Sets the other side (IP address, UDP port) info for link - +# on >. +# +# We need the IP address and the UDP port of the other side and the interace of this side. +# We need to set the info again if any of these change. +cache/endpoint.%: cache/host.$$(call rget,%) cache/port.$$(call opp,%) cache/iface.% @echo "Setting port number of link $(call linkpart,$(*F)) on $(call display,$(call get,$(*F))) - logs in $(call log,$@)" @$(SSH) $(call solve,$(call get,$(*F))) $(SUDO) sliver-ovs set-remote-endpoint L$(call linkpart,$(*F)) \ $$(cat cache/host.$(call rget,$(*F))) \ - $$(cat cache/iface.$(call opp,$(*F))) 2> $(call log,$@) \ + $$(cat cache/port.$(call opp,$(*F))) 2> $(call log,$@) \ && touch $@ #################### -CLEANTARGETS=$(addprefix del-,$(notdir $(filter-out %.log,$(wildcard cache/bridge.*)))) +CLEANTARGETS=$(addprefix del-,$(notdir $(wildcard cache/bridge.*))) clean: $(CLEANTARGETS) distclean: rm -rf L log cache @@ -295,6 +384,23 @@ graph.dot: graph.ps: graph.dot dot -Tps < $^ > $@ +#################### +# googlemap stuff +# Uses: +# GMAP_SERVER, the hostname that runs an ndnmap instance +# GMAP_PROBES, a list of tuples of the form +# === +# e.g. +# SENDER-MUX=SENDER=3=0.5 +# which would mean, the link 'SENDER-MUX' should be monitored at the 'SENDER' node and is coded +# in links.json with id=3, every half second +# sliver-ovs gmap-probe is designed to run in background, +# and so that a new run will kill any previously running instance +gprobes: $(foreach probe,$(GMAP_PROBES),gprobe-$(probe)) + +gprobe-%: FORCE + $(SSH) -n $(call solve,$(word 2,$(subst @, ,$(*F)))) $(SUDO) \ + sliver-ovs gmap-probe L$(word 1,$(subst @, ,$(*F))) $(GMAP_SERVER) $(word 3,$(subst @, ,$(*F))) $(word 4,$(subst @, ,$(*F))) #################### # 'virtual' targets in that there's no real file attached @@ -307,6 +413,7 @@ stop.$(1): cache/stop.$(1) FORCE status.$(1): cache/status.$(1) FORCE bridge.$(1): cache/bridge.$(1) FORCE host.$(1): cache/host.$(1) FORCE +controller.$(1): cache/controller.$(1) FORCE # switch already depends on db, but well cache/start.$(1): cache/db.$(1) cache/switch.$(1) FORCE endef @@ -315,7 +422,7 @@ $(foreach id,$(ALL_NODE_IDS), $(eval $(call node_shortcuts,$(id)))) define link_shortcuts iface.%: cache/iface.% -link.%: cache/link.% +endpoint.%: cache/endpoint.% endef $(foreach id,$(ALL_LINK_IDS), $(eval $(call link_shortcuts,$(id))))