small improvements
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Tue, 4 Sep 2012 16:27:41 +0000 (18:27 +0200)
committerThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Tue, 4 Sep 2012 16:27:41 +0000 (18:27 +0200)
planetlab/exp-tool/Makefile
planetlab/exp-tool/README
planetlab/exp-tool/conf.mk.example [new file with mode: 0644]
planetlab/exp-tool/links.example [new file with mode: 0644]
sliver-openvswitch.spec

index fd69127..54ef56f 100644 (file)
@@ -22,35 +22,75 @@ opp=$(call proj1,$(1))@$(call flip,$(call proj2,$(1)))
 # rget(x-y@2) = x
 rget=$(call get,$(call opp,$(1)))
 
+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)
+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 -l $(SLICE) $(HOST_$*) \
-               sudo start_ovsdb-server > $@ \
+       @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 -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 -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 $*"
@@ -60,10 +100,9 @@ U/%: del-iface.%@1 del-iface.%@2
        @echo "Deleted link $*"
 
 del-bridge.%: cache/db.%
-       @echo "Deleting bridge on host $*"
+       @echo "Deleting bridge on $(call display,$*)"
        @if [ -f cache/bridge.$* ]; then \
-               ssh -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 \
@@ -71,65 +110,72 @@ del-bridge.%: cache/db.%
              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 -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 -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 -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 -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 -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))"
index 87d6229..5d5c357 100644 (file)
@@ -1,13 +1,15 @@
 * Introduction
 
-The Makefile contained in this directory can be used by an experimenter
-to dynamically create an overlay network in a PlanetLab slice, using the
-sliver-openvswitch distribution. At present, the Makefile only supports
-the creation of the basic topology (nodes and links). All the additional
-configuration of the bridges/switches (in particular, connecting the
-switches to OpenFlow controllers or enabling the STP) has to be done
-using the tools available in the Open vSwitch distribution. This may
-change in the future.
+The Makefile contained in this directory can be used by an
+experimenter to dynamically create an overlay network in a PlanetLab
+slice, using the sliver-openvswitch distribution. At present, the
+Makefile only supports the creation of the basic topology (nodes and
+links). 
+All the additional configuration of the bridges/switches (in
+particular, connecting the switches to OpenFlow controllers or
+enabling the Spanning Tree Protocol aka STP) has to be done using the
+tools available in the Open vSwitch distribution. This may change in
+the future.
 
 The overlay network supported by the Makefile may consist of:
 
@@ -78,6 +80,7 @@ goint to build the following overlay network:
 In the same directory were we have put the Makefile we create a 'conf.mk'
 file containing the following variables:
 
+----------
 SLICE=myslice
 HOST_1=onelab7.iet.unipi.it
 IP_1=10.0.9.1/24
@@ -87,12 +90,20 @@ HOST_3=planetlab2.ics.forth.gr
 IP_3=10.0.9.3/24
 HOST_4=planetlab2.urv.cat
 IP_4=10.0.9.4/24
+----------
 
 And a 'links' file containing the following lines:
 
+----------
 1-2
 2-3
 2-4
+----------
+
+NOTE. In this example we have chosen to use numbers (1,2,3,4) as ids
+for nodes, you can use any other name that is convenient for you.
+See the example files in this directory for an example of this.
+
 
 Then, we can just type:
 
diff --git a/planetlab/exp-tool/conf.mk.example b/planetlab/exp-tool/conf.mk.example
new file mode 100644 (file)
index 0000000..821e955
--- /dev/null
@@ -0,0 +1,21 @@
+SLICE=inri_sl1
+
+# f12-32
+HOST_SENDER=vnode09.pl.sophia.inria.fr
+# f12-64
+HOST_MUX=vnode02.pl.sophia.inria.fr
+# f14-32
+HOST_END1=vnode10.pl.sophia.inria.fr
+# f14-64
+HOST_END2=vnode07.pl.sophia.inria.fr
+
+IP_SENDER=10.0.100.1
+IP_MUX=10.0.100.2
+IP_END1=10.0.100.3
+IP_END2=10.0.100.4
+
+# the ssh key to use; optional
+SSH_KEY=key_user.rsa
+
+# how to display nodes in messages
+display="$(call solve,$(1))"
diff --git a/planetlab/exp-tool/links.example b/planetlab/exp-tool/links.example
new file mode 100644 (file)
index 0000000..b8ae16d
--- /dev/null
@@ -0,0 +1,3 @@
+SENDER-MUX
+MUX-END1
+MUX-END2
index 6fcfc25..fd07297 100644 (file)
@@ -36,6 +36,8 @@ make
 
 %install
 make install DESTDIR=$RPM_BUILD_ROOT
+mkdir -p $RPM_BUILD_ROOT/usr/bin
+rsync -av planetlab/scripts/* $RPM_BUILD_ROOT/usr/bin
 
 %clean
 rm -rf $RPM_BUILD_ROOT