Merge branch 'forward-port'
authorGiuseppe Lettieri <g.lettieri@iet.unipi.it>
Wed, 5 Sep 2012 10:35:36 +0000 (12:35 +0200)
committerGiuseppe Lettieri <g.lettieri@iet.unipi.it>
Wed, 5 Sep 2012 10:35:36 +0000 (12:35 +0200)
Conflicts:
planetlab/exp-tool/Makefile

1  2 
planetlab/exp-tool/Makefile

@@@ -22,75 -22,35 +22,76 @@@ opp=$(call proj1,$(1))@$(call flip,$(ca
  # rget(x-y@2) = x
  rget=$(call get,$(call opp,$(1)))
  
- SSH_OPTIONS ?= $(SSH_KEY_OPTION) -l $(SLICE)
 +solve=$(HOST_$(1))
 +# can be redefined in conf.mk if that's not the expected behaviour
 +display?=host $(1) aka $(call solve,$(1))
 +
 +#################### set variables after conf.mk
 +ifeq "$(SSH_KEY)" ""
 +SSH_KEY_OPTION ?=
 +else
 +SSH_KEY_OPTION ?= -i $(SSH_KEY)
 +endif
 +
++SSH_OPTIONS ?= $(SSH_KEY_OPTION) -l $(SLICE) -t
 +SSH = ssh $(SSH_OPTIONS)
 +
 +ALL_NODE_IDS=$(shell (cut -d- -f1 < links; cut -d- -f2 < links) | sort -u)
 +
 +####################
 +all+init: init all
 +init:
 +      @[ -d L ] || ( echo Creating tmp dir L; mkdir L)
 +      @[ -d U ] || ( echo Creating tmp dir U; mkdir U)
 +      @[ -d cache ] || ( echo Creating tmp dir cache; mkdir cache)
 +.PHONY: all+init init
 +
 +FORCE:
  
  .SECONDARY:
  
  all: $(addprefix L/,$(shell cat links))
 +.PHONY: all
 +
 +nodes:
 +      @echo $(foreach id,$(ALL_NODE_IDS),$(call display,$(id)))
 +.PHONY: nodes
 +
 +sshchecks: $(foreach id,$(ALL_NODE_IDS),cache/sshcheck.$(id))
 +.PHONY: sshchecks
  
 +dbs: $(foreach id,$(ALL_NODE_IDS),cache/db.$(id))
 +.PHONY: dbs
  
 +switchds: $(foreach id,$(ALL_NODE_IDS),cache/switchd.$(id))
 +.PHONY: switchds
 +
 +### node-oriented targets
  cache/host.%:
 -      @echo "IP lookup for host $*"
 +      @echo "IP lookup for $(call display,$*)"
        @host $(HOST_$*) | sed -n 's/^.*has address *//p' > $@
  
  cache/db.%:
 -      @echo "Starting db server on host $*"
 -      @ssh -t -l $(SLICE) $(HOST_$*) \
 -              sudo start_ovsdb-server > $@ \
++<<<<<<< HEAD
 +      @echo "Starting db server on $(call display,$*)"
 +      @$(SSH) $(HOST_$*) sudo start_ovsdb-server > $@ \
         || { rm $@; exit 1; }
  
  cache/switchd.%: cache/db.%
 -      @echo "Starting vswitchd on host $*"
 -      @ssh -t -l $(SLICE) $(HOST_$*) \
 -              sudo start_vswitchd > $@ \
 +      @echo "Starting vswitchd on $(call display,$*)"
 +      @$(SSH) $(HOST_$*) sudo start_vswitchd > $@ \
         || { rm $@; exit 1; }
  
  cache/bridge.%: cache/switchd.%
 -      @echo "Creating bridge on host $*"
 -      @ssh -t -l $(SLICE) $(HOST_$*) \
 -              sudo create_bridge $(IP_$*) > $@ \
 +      @echo "Creating bridge on $(call display,$*)"
 +      @$(SSH) $(HOST_$*) sudo create_bridge $(IP_$*) > $@ \
         || { rm $@; exit 1; }
  
 +cache/sshcheck.%: FORCE
 +      @if $(SSH) $(HOST_$*) hostname 2> /dev/null; then echo "ssh on" $(call display,$*) "OK" ; \
 +       else echo "ssh on" $(call display,$*) "KO !!!"; fi
  
 +### link-oriented targets
  L/%: cache/link.%@1 cache/link.%@2
        @touch $@
        @echo "Created link $*"
@@@ -100,9 -60,10 +101,9 @@@ U/%: del-iface.%@1 del-iface.%@
        @echo "Deleted link $*"
  
  del-bridge.%: cache/db.%
 -      @echo "Deleting bridge on host $*"
 +      @echo "Deleting bridge on $(call display,$*)"
        @if [ -f cache/bridge.$* ]; then \
 -              ssh -t -l $(SLICE) $(HOST_$*) \
 -                      sudo del_bridge $$(cat cache/bridge.$*);\
 +              $(SSH) $(HOST_$*) sudo del_bridge $$(cat cache/bridge.$*);\
         fi
        @rm -f cache/bridge.$* \
              cache/iface.$*-*@1 cache/iface.*-$*@2 \
              L/$*-*             L/*-$*
  
  del-switchd.%: del-bridge.%
 -      @echo "Shutting down switchd on host $*"
 +      @echo "Shutting down switchd on $(call display,$*)"
        @if [ -f cache/switchd.$* ]; then \
 -              ssh -t -l $(SLICE) $(HOST_$*) \
 -                      sudo ovs-appctl exit;\
 +              $(SSH) $(HOST_$*) sudo ovs-appctl exit;\
         fi
        @rm -f cache/switchd.$*
  
  del-db.%:
 -      @echo "Shutting down db on host $*"
 +      @echo "Shutting down db on $(call display,$*)"
        @if [ -f cache/db.$* ]; then \
 -              ssh -t -l $(SLICE) $(HOST_$*) \
 -                      sudo ovs-appctl --target=$(VARRUN)/ovsdb-server.$$(cat cache/db.$*).ctl exit;\
 +              $(SSH) $(HOST_$*) sudo ovs-appctl --target=$(VARRUN)/ovsdb-server.$$(cat cache/db.$*).ctl exit;\
         fi
        @rm -f cache/db.$*
  
 +del-links: $(addprefix U/,$(notdir $(wildcard L/*)))
 +
 +del-switchds: $(addprefix del-,$(notdir $(wildcard cache/switchd.*)))
 +
 +del-dbs: $(addprefix del-,$(notdir $(wildcard cache/db.*)))
 +
  shutdown: del-switches del-dbs
  
 +.PHONY: del-links del-switchds del-dbs shutdown
 +
 +####################
  graph.dot:
        ( echo "digraph $(SLICE) {"; ls L | sed 's/-/->/;s/$$/;/'; echo "}" ) > $@
 -
  graph.ps: graph.dot
        dot -Tps < $^ > $@      
  
 -.PHONY: clean del-links graph.dot servers
 -
 -
 +####################
  clean: $(addprefix del-,$(notdir $(wildcard cache/bridge.*)))
 +distclean:
 +      rm -rf L U cache
  
 -del-links: $(addprefix U/,$(notdir $(wildcard L/*)))
 -
 -switchds: $(wildcard cache/switchd.*)
 -
 -dbs: $(wildcard cache/db.*)
 -
 -del-switchds: $(addprefix del-,$(notdir $(wildcard cache/switchd.*)))
 -
 -del-dbs: $(addprefix del-,$(notdir $(wildcard cache/db.*)))
 +.PHONY: clean distclean
  
  .SECONDEXPANSION:
  
  del-iface.%: cache/db.$$(call get,%)
 -      @echo "Removing interface for link $(call proj1,$*) from host $(call get,$*)"
 -      @ssh -t -l $(SLICE) $(HOST_$(call get,$*)) \
 +      @echo "Removing interface for link $(call proj1,$*) from $(call get,$*)"
 +      @$(SSH) $(HOST_$(call get,$*)) \
                sudo del_port L$(call proj1,$*)
        @rm -f cache/iface.$* cache/link.$* cache/link.$(call opp,$*)
  
  
  
  cache/iface.%: cache/bridge.$$(call get,%)
 -      @echo "Creating interface for link $(call proj1,$*) on host $(call get,$*)"
 -      @ssh -t -l $(SLICE) $(HOST_$(call get,$*)) \
 +      @echo "Creating interface for link $(call proj1,$*) on $(call get,$*)"
 +      @$(SSH) $(HOST_$(call get,$*)) \
                sudo create_port $$(cat $^) L$(call proj1,$*) > $@ \
         || { rm $@; exit 1; }
  
  cache/link.%: cache/host.$$(call rget,$$*) cache/iface.% cache/iface.$$(call opp,$$*)
 -      @echo "Setting port number of link $(call proj1,$*) on host $(call get,$*)"
 -      @ssh -t -l $(SLICE) $(HOST_$(call get,$*)) \
 +      @echo "Setting port number of link $(call proj1,$*) on $(call get,$*)"
 +      @$(SSH) $(HOST_$(call get,$*)) \
                sudo ovs-vsctl set interface L$(call proj1,$*) \
                        options:remote_ip=$$(cat cache/host.$(call rget,$*)) \
                        options:remote_port=$$(cat cache/iface.$(call opp,$*)) \
         && touch $@
  
 +#################### convenience, for debugging only
 +# make +foo : prints the value of $(foo)
 +# make ++foo : idem but verbose, i.e. foo=$(foo)
 +++%: varname=$(subst +,,$@)
 +++%:
 +      @echo "$(varname)=$($(varname))"
 ++%: varname=$(subst +,,$@)
 ++%:
 +      @echo "$($(varname))"