This patch adds new test for testing VXLAN or Geneve tunnels. The test
scenario consists of two baremetal hosts, each with one NIC. On both
hosts, there is an OVS bridge, where number of internal devices are
created along with the same number of VXLAN/Geneve interfaces. The
number is set in the task in TUNNEL_COUNT variable. This variable is set
to 16 by default. Netperf is run in parallel over each tunnel and over each
tunnel number of STREAM are run in parallel in order to maximize link
utilization. This number is specified with nperf_num_parallel alias and is set
to 4 by default.
The result throughputs are then summarized and displayed with Custom module.
This is temporary solution before we implement more complex parallel netperf in
LNST test module.
Signed-off-by: Jiri Prochazka <jprochaz(a)redhat.com>
---
recipes/tunnels/ovs_geneve.xml | 727 +++++++++++++++++++++++++++++++++++++++++
recipes/tunnels/ovs_tunnels.py | 170 ++++++++++
recipes/tunnels/ovs_vxlan.xml | 727 +++++++++++++++++++++++++++++++++++++++++
3 files changed, 1624 insertions(+)
create mode 100644 recipes/tunnels/ovs_geneve.xml
create mode 100644 recipes/tunnels/ovs_tunnels.py
create mode 100644 recipes/tunnels/ovs_vxlan.xml
diff --git a/recipes/tunnels/ovs_geneve.xml b/recipes/tunnels/ovs_geneve.xml
new file mode 100644
index 0000000..d3ada78
--- /dev/null
+++ b/recipes/tunnels/ovs_geneve.xml
@@ -0,0 +1,727 @@
+<lnstrecipe>
+ <define>
+ <alias name="ipv" value="both" />
+ <alias name="mtu" value="1450" />
+ <alias name="netperf_duration" value="60" />
+ <alias name="nperf_reserve" value="20" />
+ <alias name="nperf_confidence" value="99,5" />
+ <alias name="nperf_max_runs" value="5"/>
+ <alias name="nperf_num_parallel" value="4"/>
+ <alias name="nperf_debug" value="0"/>
+ <alias name="nperf_max_dev" value="20%"/>
+ <alias name="nperf_protocols" value="tcp udp"/>
+ <alias name="mapping_file" value="novirt_ovs_geneve.mapping" />
+ <alias name="net" value="192.168.2"/>
+ <alias name="geneve_net" value="192.168.111"/>
+ <alias name="geneve_net6" value="fc00:0:0:0"/>
+ <alias name="driver" value=""/>
+ </define>
+ <network>
+ <host id="test_host1">
+ <interfaces>
+ <eth id="if1" label="n1">
+ <params>
+ <param name="driver" value="{$driver}"/>
+ </params>
+ <addresses>
+ <address value="{$net}.1/24"/>
+ <address value="{$net}.2/24"/>
+ <address value="{$net}.3/24"/>
+ <address value="{$net}.4/24"/>
+ <address value="{$net}.5/24"/>
+ <address value="{$net}.6/24"/>
+ <address value="{$net}.7/24"/>
+ <address value="{$net}.8/24"/>
+ <address value="{$net}.9/24"/>
+ <address value="{$net}.10/24"/>
+ <address value="{$net}.11/24"/>
+ <address value="{$net}.12/24"/>
+ <address value="{$net}.13/24"/>
+ <address value="{$net}.14/24"/>
+ <address value="{$net}.15/24"/>
+ <address value="{$net}.16/24"/>
+ </addresses>
+ </eth>
+ <ovs_bridge id="ovs1">
+ <internal id="int0">
+ <addresses>
+ <address value="{$geneve_net}.1/24"/>
+ <address value="{$geneve_net6}::1/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="5"/>
+ <option name="name" value="int0"/>
+ </options>
+ </internal>
+ <internal id="int1">
+ <addresses>
+ <address value="{$geneve_net}.2/24"/>
+ <address value="{$geneve_net6}::2/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="6"/>
+ <option name="name" value="int1"/>
+ </options>
+ </internal>
+ <internal id="int2">
+ <addresses>
+ <address value="{$geneve_net}.3/24"/>
+ <address value="{$geneve_net6}::3/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="7"/>
+ <option name="name" value="int2"/>
+ </options>
+ </internal>
+ <internal id="int3">
+ <addresses>
+ <address value="{$geneve_net}.4/24"/>
+ <address value="{$geneve_net6}::4/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="8"/>
+ <option name="name" value="int3"/>
+ </options>
+ </internal>
+ <internal id="int4">
+ <addresses>
+ <address value="{$geneve_net}.5/24"/>
+ <address value="{$geneve_net6}::5/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="9"/>
+ <option name="name" value="int4"/>
+ </options>
+ </internal>
+ <internal id="int5">
+ <addresses>
+ <address value="{$geneve_net}.6/24"/>
+ <address value="{$geneve_net6}::6/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="10"/>
+ <option name="name" value="int5"/>
+ </options>
+ </internal>
+ <internal id="int6">
+ <addresses>
+ <address value="{$geneve_net}.7/24"/>
+ <address value="{$geneve_net6}::7/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="11"/>
+ <option name="name" value="int6"/>
+ </options>
+ </internal>
+ <internal id="int7">
+ <addresses>
+ <address value="{$geneve_net}.8/24"/>
+ <address value="{$geneve_net6}::8/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="12"/>
+ <option name="name" value="int7"/>
+ </options>
+ </internal>
+ <internal id="int8">
+ <addresses>
+ <address value="{$geneve_net}.9/24"/>
+ <address value="{$geneve_net6}::9/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="13"/>
+ <option name="name" value="int8"/>
+ </options>
+ </internal>
+ <internal id="int9">
+ <addresses>
+ <address value="{$geneve_net}.10/24"/>
+ <address value="{$geneve_net6}::10/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="14"/>
+ <option name="name" value="int9"/>
+ </options>
+ </internal>
+ <internal id="int10">
+ <addresses>
+ <address value="{$geneve_net}.11/24"/>
+ <address value="{$geneve_net6}::11/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="15"/>
+ <option name="name" value="int10"/>
+ </options>
+ </internal>
+ <internal id="int11">
+ <addresses>
+ <address value="{$geneve_net}.12/24"/>
+ <address value="{$geneve_net6}::12/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="16"/>
+ <option name="name" value="int11"/>
+ </options>
+ </internal>
+ <internal id="int12">
+ <addresses>
+ <address value="{$geneve_net}.13/24"/>
+ <address value="{$geneve_net6}::13/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="17"/>
+ <option name="name" value="int12"/>
+ </options>
+ </internal>
+ <internal id="int13">
+ <addresses>
+ <address value="{$geneve_net}.14/24"/>
+ <address value="{$geneve_net6}::14/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="18"/>
+ <option name="name" value="int13"/>
+ </options>
+ </internal>
+ <internal id="int14">
+ <addresses>
+ <address value="{$geneve_net}.15/24"/>
+ <address value="{$geneve_net6}::15/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="19"/>
+ <option name="name" value="int14"/>
+ </options>
+ </internal>
+ <internal id="int15">
+ <addresses>
+ <address value="{$geneve_net}.16/24"/>
+ <address value="{$geneve_net6}::16/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="20"/>
+ <option name="name" value="int15"/>
+ </options>
+ </internal>
+ <tunnel id="geneve1" type="geneve">
+ <options>
+ <option name="name" value="geneve1"/>
+ <option name="option:remote_ip" value="{$net}.20"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="30"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve2" type="geneve">
+ <options>
+ <option name="name" value="geneve2"/>
+ <option name="option:remote_ip" value="{$net}.21"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="31"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve3" type="geneve">
+ <options>
+ <option name="name" value="geneve3"/>
+ <option name="option:remote_ip" value="{$net}.22"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="32"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve4" type="geneve">
+ <options>
+ <option name="name" value="geneve4"/>
+ <option name="option:remote_ip" value="{$net}.23"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="33"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve5" type="geneve">
+ <options>
+ <option name="name" value="geneve5"/>
+ <option name="option:remote_ip" value="{$net}.24"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="34"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve6" type="geneve">
+ <options>
+ <option name="name" value="geneve6"/>
+ <option name="option:remote_ip" value="{$net}.25"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="35"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve7" type="geneve">
+ <options>
+ <option name="name" value="geneve7"/>
+ <option name="option:remote_ip" value="{$net}.26"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="36"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve8" type="geneve">
+ <options>
+ <option name="name" value="geneve8"/>
+ <option name="option:remote_ip" value="{$net}.27"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="37"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve9" type="geneve">
+ <options>
+ <option name="name" value="geneve9"/>
+ <option name="option:remote_ip" value="{$net}.28"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="38"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve10" type="geneve">
+ <options>
+ <option name="name" value="geneve10"/>
+ <option name="option:remote_ip" value="{$net}.29"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="39"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve11" type="geneve">
+ <options>
+ <option name="name" value="geneve11"/>
+ <option name="option:remote_ip" value="{$net}.30"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="40"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve12" type="geneve">
+ <options>
+ <option name="name" value="geneve12"/>
+ <option name="option:remote_ip" value="{$net}.31"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="41"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve13" type="geneve">
+ <options>
+ <option name="name" value="geneve13"/>
+ <option name="option:remote_ip" value="{$net}.32"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="42"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve14" type="geneve">
+ <options>
+ <option name="name" value="geneve14"/>
+ <option name="option:remote_ip" value="{$net}.33"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="43"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve15" type="geneve">
+ <options>
+ <option name="name" value="geneve15"/>
+ <option name="option:remote_ip" value="{$net}.34"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="44"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve16" type="geneve">
+ <options>
+ <option name="name" value="geneve16"/>
+ <option name="option:remote_ip" value="{$net}.35"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="45"/>
+ </options>
+ </tunnel>
+ <flow_entries>
+ <entry>table=0,in_port=5,actions=set_field:100->tun_id,output:30</entry>
+ <entry>table=0,in_port=6,actions=set_field:100->tun_id,output:31</entry>
+ <entry>table=0,in_port=7,actions=set_field:100->tun_id,output:32</entry>
+ <entry>table=0,in_port=8,actions=set_field:100->tun_id,output:33</entry>
+ <entry>table=0,in_port=9,actions=set_field:100->tun_id,output:34</entry>
+ <entry>table=0,in_port=10,actions=set_field:100->tun_id,output:35</entry>
+ <entry>table=0,in_port=11,actions=set_field:100->tun_id,output:36</entry>
+ <entry>table=0,in_port=12,actions=set_field:100->tun_id,output:37</entry>
+ <entry>table=0,in_port=13,actions=set_field:100->tun_id,output:38</entry>
+ <entry>table=0,in_port=14,actions=set_field:100->tun_id,output:39</entry>
+ <entry>table=0,in_port=15,actions=set_field:100->tun_id,output:40</entry>
+ <entry>table=0,in_port=16,actions=set_field:100->tun_id,output:41</entry>
+ <entry>table=0,in_port=17,actions=set_field:100->tun_id,output:42</entry>
+ <entry>table=0,in_port=18,actions=set_field:100->tun_id,output:43</entry>
+ <entry>table=0,in_port=19,actions=set_field:100->tun_id,output:44</entry>
+ <entry>table=0,in_port=20,actions=set_field:100->tun_id,output:45</entry>
+ <entry>table=0,in_port=30,tun_id=100,actions=output:5</entry>
+ <entry>table=0,in_port=31,tun_id=100,actions=output:6</entry>
+ <entry>table=0,in_port=32,tun_id=100,actions=output:7</entry>
+ <entry>table=0,in_port=33,tun_id=100,actions=output:8</entry>
+ <entry>table=0,in_port=34,tun_id=100,actions=output:9</entry>
+ <entry>table=0,in_port=35,tun_id=100,actions=output:10</entry>
+ <entry>table=0,in_port=36,tun_id=100,actions=output:11</entry>
+ <entry>table=0,in_port=37,tun_id=100,actions=output:12</entry>
+ <entry>table=0,in_port=38,tun_id=100,actions=output:13</entry>
+ <entry>table=0,in_port=39,tun_id=100,actions=output:14</entry>
+ <entry>table=0,in_port=40,tun_id=100,actions=output:15</entry>
+ <entry>table=0,in_port=41,tun_id=100,actions=output:16</entry>
+ <entry>table=0,in_port=42,tun_id=100,actions=output:17</entry>
+ <entry>table=0,in_port=43,tun_id=100,actions=output:18</entry>
+ <entry>table=0,in_port=44,tun_id=100,actions=output:19</entry>
+ <entry>table=0,in_port=45,tun_id=100,actions=output:20</entry>
+ <entry>table=0,priority=100,actions=drop</entry>
+ </flow_entries>
+ </ovs_bridge>
+ </interfaces>
+ </host>
+ <host id="test_host2">
+ <interfaces>
+ <eth id="if1" label="n1">
+ <params>
+ <param name="driver" value="{$driver}"/>
+ </params>
+ <addresses>
+ <address value="{$net}.20/24"/>
+ <address value="{$net}.21/24"/>
+ <address value="{$net}.22/24"/>
+ <address value="{$net}.23/24"/>
+ <address value="{$net}.24/24"/>
+ <address value="{$net}.25/24"/>
+ <address value="{$net}.26/24"/>
+ <address value="{$net}.27/24"/>
+ <address value="{$net}.28/24"/>
+ <address value="{$net}.29/24"/>
+ <address value="{$net}.30/24"/>
+ <address value="{$net}.31/24"/>
+ <address value="{$net}.32/24"/>
+ <address value="{$net}.33/24"/>
+ <address value="{$net}.34/24"/>
+ <address value="{$net}.35/24"/>
+ </addresses>
+ </eth>
+ <ovs_bridge id="ovs2">
+ <internal id="int0">
+ <options>
+ <option name="ofport_request" value="5"/>
+ <option name="name" value="int0"/>
+ </options>
+ <addresses>
+ <address value="{$geneve_net}.20/24"/>
+ <address value="{$geneve_net6}::20/24"/>
+ </addresses>
+ </internal>
+ <internal id="int1">
+ <addresses>
+ <address value="{$geneve_net}.21/24"/>
+ <address value="{$geneve_net6}::21/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="6"/>
+ <option name="name" value="int1"/>
+ </options>
+ </internal>
+ <internal id="int2">
+ <addresses>
+ <address value="{$geneve_net}.22/24"/>
+ <address value="{$geneve_net6}::22/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="7"/>
+ <option name="name" value="int2"/>
+ </options>
+ </internal>
+ <internal id="int3">
+ <addresses>
+ <address value="{$geneve_net}.23/24"/>
+ <address value="{$geneve_net6}::23/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="8"/>
+ <option name="name" value="int3"/>
+ </options>
+ </internal>
+ <internal id="int4">
+ <addresses>
+ <address value="{$geneve_net}.24/24"/>
+ <address value="{$geneve_net6}::24/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="9"/>
+ <option name="name" value="int4"/>
+ </options>
+ </internal>
+ <internal id="int5">
+ <addresses>
+ <address value="{$geneve_net}.25/24"/>
+ <address value="{$geneve_net6}::25/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="10"/>
+ <option name="name" value="int5"/>
+ </options>
+ </internal>
+ <internal id="int6">
+ <addresses>
+ <address value="{$geneve_net}.26/24"/>
+ <address value="{$geneve_net6}::26/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="11"/>
+ <option name="name" value="int6"/>
+ </options>
+ </internal>
+ <internal id="int7">
+ <addresses>
+ <address value="{$geneve_net}.27/24"/>
+ <address value="{$geneve_net6}::27/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="12"/>
+ <option name="name" value="int7"/>
+ </options>
+ </internal>
+ <internal id="int8">
+ <addresses>
+ <address value="{$geneve_net}.28/24"/>
+ <address value="{$geneve_net6}::28/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="13"/>
+ <option name="name" value="int8"/>
+ </options>
+ </internal>
+ <internal id="int9">
+ <addresses>
+ <address value="{$geneve_net}.29/24"/>
+ <address value="{$geneve_net6}::29/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="14"/>
+ <option name="name" value="int9"/>
+ </options>
+ </internal>
+ <internal id="int10">
+ <addresses>
+ <address value="{$geneve_net}.30/24"/>
+ <address value="{$geneve_net6}::30/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="15"/>
+ <option name="name" value="int10"/>
+ </options>
+ </internal>
+ <internal id="int11">
+ <addresses>
+ <address value="{$geneve_net}.31/24"/>
+ <address value="{$geneve_net6}::31/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="16"/>
+ <option name="name" value="int11"/>
+ </options>
+ </internal>
+ <internal id="int12">
+ <addresses>
+ <address value="{$geneve_net}.32/24"/>
+ <address value="{$geneve_net6}::32/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="17"/>
+ <option name="name" value="int12"/>
+ </options>
+ </internal>
+ <internal id="int13">
+ <addresses>
+ <address value="{$geneve_net}.33/24"/>
+ <address value="{$geneve_net6}::33/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="18"/>
+ <option name="name" value="int13"/>
+ </options>
+ </internal>
+ <internal id="int14">
+ <addresses>
+ <address value="{$geneve_net}.34/24"/>
+ <address value="{$geneve_net6}::34/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="19"/>
+ <option name="name" value="int14"/>
+ </options>
+ </internal>
+ <internal id="int15">
+ <addresses>
+ <address value="{$geneve_net}.35/24"/>
+ <address value="{$geneve_net6}::35/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="20"/>
+ <option name="name" value="int15"/>
+ </options>
+ </internal>
+ <tunnel id="geneve1" type="geneve">
+ <options>
+ <option name="name" value="geneve1"/>
+ <option name="option:remote_ip" value="{$net}.1"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="30"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve2" type="geneve">
+ <options>
+ <option name="name" value="geneve2"/>
+ <option name="option:remote_ip" value="{$net}.2"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="31"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve3" type="geneve">
+ <options>
+ <option name="name" value="geneve3"/>
+ <option name="option:remote_ip" value="{$net}.3"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="32"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve4" type="geneve">
+ <options>
+ <option name="name" value="geneve4"/>
+ <option name="option:remote_ip" value="{$net}.4"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="33"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve5" type="geneve">
+ <options>
+ <option name="name" value="geneve5"/>
+ <option name="option:remote_ip" value="{$net}.5"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="34"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve6" type="geneve">
+ <options>
+ <option name="name" value="geneve6"/>
+ <option name="option:remote_ip" value="{$net}.6"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="35"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve7" type="geneve">
+ <options>
+ <option name="name" value="geneve7"/>
+ <option name="option:remote_ip" value="{$net}.7"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="36"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve8" type="geneve">
+ <options>
+ <option name="name" value="geneve8"/>
+ <option name="option:remote_ip" value="{$net}.8"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="37"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve9" type="geneve">
+ <options>
+ <option name="name" value="geneve9"/>
+ <option name="option:remote_ip" value="{$net}.9"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="38"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve10" type="geneve">
+ <options>
+ <option name="name" value="geneve10"/>
+ <option name="option:remote_ip" value="{$net}.10"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="39"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve11" type="geneve">
+ <options>
+ <option name="name" value="geneve11"/>
+ <option name="option:remote_ip" value="{$net}.11"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="40"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve12" type="geneve">
+ <options>
+ <option name="name" value="geneve12"/>
+ <option name="option:remote_ip" value="{$net}.12"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="41"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve13" type="geneve">
+ <options>
+ <option name="name" value="geneve13"/>
+ <option name="option:remote_ip" value="{$net}.13"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="42"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve14" type="geneve">
+ <options>
+ <option name="name" value="geneve14"/>
+ <option name="option:remote_ip" value="{$net}.14"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="43"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve15" type="geneve">
+ <options>
+ <option name="name" value="geneve15"/>
+ <option name="option:remote_ip" value="{$net}.15"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="44"/>
+ </options>
+ </tunnel>
+ <tunnel id="geneve16" type="geneve">
+ <options>
+ <option name="name" value="geneve16"/>
+ <option name="option:remote_ip" value="{$net}.16"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="45"/>
+ </options>
+ </tunnel>
+ <flow_entries>
+ <entry>table=0,in_port=5,actions=set_field:100->tun_id,output:30</entry>
+ <entry>table=0,in_port=6,actions=set_field:100->tun_id,output:31</entry>
+ <entry>table=0,in_port=7,actions=set_field:100->tun_id,output:32</entry>
+ <entry>table=0,in_port=8,actions=set_field:100->tun_id,output:33</entry>
+ <entry>table=0,in_port=9,actions=set_field:100->tun_id,output:34</entry>
+ <entry>table=0,in_port=10,actions=set_field:100->tun_id,output:35</entry>
+ <entry>table=0,in_port=11,actions=set_field:100->tun_id,output:36</entry>
+ <entry>table=0,in_port=12,actions=set_field:100->tun_id,output:37</entry>
+ <entry>table=0,in_port=13,actions=set_field:100->tun_id,output:38</entry>
+ <entry>table=0,in_port=14,actions=set_field:100->tun_id,output:39</entry>
+ <entry>table=0,in_port=15,actions=set_field:100->tun_id,output:40</entry>
+ <entry>table=0,in_port=16,actions=set_field:100->tun_id,output:41</entry>
+ <entry>table=0,in_port=17,actions=set_field:100->tun_id,output:42</entry>
+ <entry>table=0,in_port=18,actions=set_field:100->tun_id,output:43</entry>
+ <entry>table=0,in_port=19,actions=set_field:100->tun_id,output:44</entry>
+ <entry>table=0,in_port=20,actions=set_field:100->tun_id,output:45</entry>
+ <entry>table=0,in_port=30,tun_id=100,actions=output:5</entry>
+ <entry>table=0,in_port=31,tun_id=100,actions=output:6</entry>
+ <entry>table=0,in_port=32,tun_id=100,actions=output:7</entry>
+ <entry>table=0,in_port=33,tun_id=100,actions=output:8</entry>
+ <entry>table=0,in_port=34,tun_id=100,actions=output:9</entry>
+ <entry>table=0,in_port=35,tun_id=100,actions=output:10</entry>
+ <entry>table=0,in_port=36,tun_id=100,actions=output:11</entry>
+ <entry>table=0,in_port=37,tun_id=100,actions=output:12</entry>
+ <entry>table=0,in_port=38,tun_id=100,actions=output:13</entry>
+ <entry>table=0,in_port=39,tun_id=100,actions=output:14</entry>
+ <entry>table=0,in_port=40,tun_id=100,actions=output:15</entry>
+ <entry>table=0,in_port=41,tun_id=100,actions=output:16</entry>
+ <entry>table=0,in_port=42,tun_id=100,actions=output:17</entry>
+ <entry>table=0,in_port=43,tun_id=100,actions=output:18</entry>
+ <entry>table=0,in_port=44,tun_id=100,actions=output:19</entry>
+ <entry>table=0,in_port=45,tun_id=100,actions=output:20</entry>
+ <entry>table=0,priority=100,actions=drop</entry>
+ </flow_entries>
+ </ovs_bridge>
+ </interfaces>
+ </host>
+ </network>
+
+ <task python="ovs_tunnels.py"/>
+</lnstrecipe>
diff --git a/recipes/tunnels/ovs_tunnels.py b/recipes/tunnels/ovs_tunnels.py
new file mode 100644
index 0000000..2075d84
--- /dev/null
+++ b/recipes/tunnels/ovs_tunnels.py
@@ -0,0 +1,170 @@
+from lnst.Controller.Task import ctl
+
+from lnst.RecipeCommon.ModuleWrap import netperf
+from lnst.RecipeCommon.IRQ import pin_dev_irqs
+
+def run_netperf(netperf_servers, netperf_clients, testname):
+ netperf_cli_procs = []
+ netperf_srv_procs = []
+
+ timeout = (netperf_duration + nperf_reserve) * nperf_max_runs
+
+ for i in range(0, TUNNEL_COUNT):
+ netperf_clients[i].update_options({"testname" : testname})
+
+ netperf_srv_procs.append(h2.run(netperf_servers[i], bg=True, timeout=timeout))
+ netperf_cli_procs.append(h1.run(netperf_clients[i], bg=True, timeout=timeout))
+
+ for i in range(0, TUNNEL_COUNT):
+ netperf_cli_procs[i].wait()
+ netperf_srv_procs[i].intr()
+
+ sum = 0
+
+ for i in range(0, TUNNEL_COUNT):
+ sum += netperf_cli_procs[i].get_result()['res_data']['rate']
+
+ res = ctl.get_module("Custom",
+ options={
+ "rate" : sum,
+ "unit" : "bps",
+ "testname" : testname
+ })
+
+ return res
+
+# ------
+# SETUP
+# ------
+
+# test hosts
+h1 = ctl.get_host("test_host1")
+h2 = ctl.get_host("test_host2")
+
+for h in [h1, h2]:
+ h.sync_resources(modules=["Netperf", "Custom"])
+
+TUNNEL_COUNT = 16
+
+# ------
+# TESTS
+# ------
+
+ipv = ctl.get_alias("ipv")
+mtu = ctl.get_alias("mtu")
+netperf_duration = int(ctl.get_alias("netperf_duration"))
+nperf_reserve = int(ctl.get_alias("nperf_reserve"))
+nperf_confidence = ctl.get_alias("nperf_confidence")
+nperf_max_runs = int(ctl.get_alias("nperf_max_runs"))
+nperf_cpupin = ctl.get_alias("nperf_cpupin")
+nperf_cpu_util = ctl.get_alias("nperf_cpu_util")
+nperf_num_parallel = int(ctl.get_alias("nperf_num_parallel"))
+nperf_debug = ctl.get_alias("nperf_debug")
+nperf_max_dev = ctl.get_alias("nperf_max_dev")
+nperf_msg_size = ctl.get_alias("nperf_msg_size")
+nperf_protocols = ctl.get_alias("nperf_protocols")
+
+devices = []
+
+h1_nic = h1.get_interface("if1")
+h2_nic = h2.get_interface("if1")
+
+for i in range(0, TUNNEL_COUNT):
+ d1 = h1.get_device("int" + str(i))
+ d2 = h2.get_device("int" + str(i))
+ devices.append((d1, d2))
+
+for h1_dev, h2_dev in devices:
+ h1_dev.set_mtu(mtu)
+ h2_dev.set_mtu(mtu)
+
+nperf_opts = ""
+if nperf_cpupin:
+ h1.run("service irqbalance stop")
+ h2.run("service irqbalance stop")
+
+ # this will pin devices irqs to cpu #0
+ for m, d in [(h1, h1_nic), (h2, h2_nic)]:
+ pin_dev_irqs(m, d, 0)
+
+if nperf_cpupin and nperf_num_parallel == 1:
+ nperf_opts = " -T%s,%s" % (nperf_cpupin, nperf_cpupin)
+
+
+ctl.wait(15)
+
+netperf_clients = []
+netperf_servers = []
+netperf_clients6 = []
+netperf_servers6 = []
+
+
+for h1_dev, h2_dev in devices:
+ netperf_clients.append(ctl.get_module("Netperf",
+ options={
+ "role" : "client",
+ "netperf_server": h2_dev.get_ip(0),
+ "bind": h1_dev.get_ip(0),
+ "duration" : netperf_duration,
+ "testname" : "TCP_STREAM",
+ "confidence" : nperf_confidence,
+ "cpu_util" : nperf_cpu_util,
+ "runs": nperf_max_runs,
+ "debug" : nperf_debug,
+ "num_parallel" : nperf_num_parallel,
+ "max_deviation" : nperf_max_dev}))
+
+ netperf_clients6.append(ctl.get_module("Netperf",
+ options={
+ "role" : "client",
+ "netperf_server": h2_dev.get_ip(1),
+ "bind": h1_dev.get_ip(1),
+ "duration" : netperf_duration,
+ "testname" : "TCP_STREAM",
+ "confidence" : nperf_confidence,
+ "cpu_util" : nperf_cpu_util,
+ "runs": nperf_max_runs,
+ "debug" : nperf_debug,
+ "num_parallel" : nperf_num_parallel,
+ "max_deviation" : nperf_max_dev}))
+
+ netperf_servers.append(ctl.get_module("Netperf",
+ options={
+ "role" : "server",
+ "bind": h2_dev.get_ip(0)}))
+
+ netperf_servers6.append(ctl.get_module("Netperf",
+ options={
+ "role" : "server",
+ "bind": h2_dev.get_ip(1)}))
+
+
+for action in ["on", "off"]:
+ h1.run("ethtool -K %s tx-udp_tnl-segmentation %s" % (h1_nic.get_devname(), action))
+ h2.run("ethtool -K %s tx-udp_tnl-segmentation %s" % (h2_nic.get_devname(), action))
+
+ #netperfs
+ ctl.wait(5)
+
+ if ipv in ["ipv4", "both"]:
+ if nperf_protocols.find("tcp") > -1:
+ testname = "TCP_STREAM"
+ res = run_netperf(netperf_servers, netperf_clients, testname)
+ h1.run(res)
+ if nperf_protocols.find("udp") > -1:
+ testname = "UDP_STREAM"
+ res = run_netperf(netperf_servers, netperf_clients, testname)
+ h1.run(res)
+ if ipv in ["ipv6", "both"]:
+ if nperf_protocols.find("tcp") > -1:
+ testname = "TCP_STREAM"
+ res = run_netperf(netperf_servers6, netperf_clients6, testname)
+ h1.run(res)
+ if nperf_protocols.find("udp") > -1:
+ testname = "UDP_STREAM"
+ res = run_netperf(netperf_servers6, netperf_clients6, testname)
+ h1.run(res)
+
+if nperf_cpupin:
+ h1.run("service irqbalance start")
+ h2.run("service irqbalance start")
diff --git a/recipes/tunnels/ovs_vxlan.xml b/recipes/tunnels/ovs_vxlan.xml
new file mode 100644
index 0000000..773e464
--- /dev/null
+++ b/recipes/tunnels/ovs_vxlan.xml
@@ -0,0 +1,727 @@
+<lnstrecipe>
+ <define>
+ <alias name="ipv" value="both" />
+ <alias name="mtu" value="1450" />
+ <alias name="netperf_duration" value="60" />
+ <alias name="nperf_reserve" value="20" />
+ <alias name="nperf_confidence" value="99,5" />
+ <alias name="nperf_max_runs" value="5"/>
+ <alias name="nperf_num_parallel" value="4"/>
+ <alias name="nperf_debug" value="0"/>
+ <alias name="nperf_max_dev" value="20%"/>
+ <alias name="nperf_protocols" value="tcp udp"/>
+ <alias name="mapping_file" value="novirt_ovs_vxlan.mapping" />
+ <alias name="net" value="192.168.2"/>
+ <alias name="vxlan_net" value="192.168.111"/>
+ <alias name="vxlan_net6" value="fc00:0:0:0"/>
+ <alias name="driver" value=""/>
+ </define>
+ <network>
+ <host id="test_host1">
+ <interfaces>
+ <eth id="if1" label="n1">
+ <params>
+ <param name="driver" value="{$driver}"/>
+ </params>
+ <addresses>
+ <address value="{$net}.1/24"/>
+ <address value="{$net}.2/24"/>
+ <address value="{$net}.3/24"/>
+ <address value="{$net}.4/24"/>
+ <address value="{$net}.5/24"/>
+ <address value="{$net}.6/24"/>
+ <address value="{$net}.7/24"/>
+ <address value="{$net}.8/24"/>
+ <address value="{$net}.9/24"/>
+ <address value="{$net}.10/24"/>
+ <address value="{$net}.11/24"/>
+ <address value="{$net}.12/24"/>
+ <address value="{$net}.13/24"/>
+ <address value="{$net}.14/24"/>
+ <address value="{$net}.15/24"/>
+ <address value="{$net}.16/24"/>
+ </addresses>
+ </eth>
+ <ovs_bridge id="ovs1">
+ <internal id="int0">
+ <addresses>
+ <address value="{$vxlan_net}.1/24"/>
+ <address value="{$vxlan_net6}::1/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="5"/>
+ <option name="name" value="int0"/>
+ </options>
+ </internal>
+ <internal id="int1">
+ <addresses>
+ <address value="{$vxlan_net}.2/24"/>
+ <address value="{$vxlan_net6}::2/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="6"/>
+ <option name="name" value="int1"/>
+ </options>
+ </internal>
+ <internal id="int2">
+ <addresses>
+ <address value="{$vxlan_net}.3/24"/>
+ <address value="{$vxlan_net6}::3/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="7"/>
+ <option name="name" value="int2"/>
+ </options>
+ </internal>
+ <internal id="int3">
+ <addresses>
+ <address value="{$vxlan_net}.4/24"/>
+ <address value="{$vxlan_net6}::4/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="8"/>
+ <option name="name" value="int3"/>
+ </options>
+ </internal>
+ <internal id="int4">
+ <addresses>
+ <address value="{$vxlan_net}.5/24"/>
+ <address value="{$vxlan_net6}::5/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="9"/>
+ <option name="name" value="int4"/>
+ </options>
+ </internal>
+ <internal id="int5">
+ <addresses>
+ <address value="{$vxlan_net}.6/24"/>
+ <address value="{$vxlan_net6}::6/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="10"/>
+ <option name="name" value="int5"/>
+ </options>
+ </internal>
+ <internal id="int6">
+ <addresses>
+ <address value="{$vxlan_net}.7/24"/>
+ <address value="{$vxlan_net6}::7/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="11"/>
+ <option name="name" value="int6"/>
+ </options>
+ </internal>
+ <internal id="int7">
+ <addresses>
+ <address value="{$vxlan_net}.8/24"/>
+ <address value="{$vxlan_net6}::8/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="12"/>
+ <option name="name" value="int7"/>
+ </options>
+ </internal>
+ <internal id="int8">
+ <addresses>
+ <address value="{$vxlan_net}.9/24"/>
+ <address value="{$vxlan_net6}::9/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="13"/>
+ <option name="name" value="int8"/>
+ </options>
+ </internal>
+ <internal id="int9">
+ <addresses>
+ <address value="{$vxlan_net}.10/24"/>
+ <address value="{$vxlan_net6}::10/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="14"/>
+ <option name="name" value="int9"/>
+ </options>
+ </internal>
+ <internal id="int10">
+ <addresses>
+ <address value="{$vxlan_net}.11/24"/>
+ <address value="{$vxlan_net6}::11/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="15"/>
+ <option name="name" value="int10"/>
+ </options>
+ </internal>
+ <internal id="int11">
+ <addresses>
+ <address value="{$vxlan_net}.12/24"/>
+ <address value="{$vxlan_net6}::12/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="16"/>
+ <option name="name" value="int11"/>
+ </options>
+ </internal>
+ <internal id="int12">
+ <addresses>
+ <address value="{$vxlan_net}.13/24"/>
+ <address value="{$vxlan_net6}::13/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="17"/>
+ <option name="name" value="int12"/>
+ </options>
+ </internal>
+ <internal id="int13">
+ <addresses>
+ <address value="{$vxlan_net}.14/24"/>
+ <address value="{$vxlan_net6}::14/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="18"/>
+ <option name="name" value="int13"/>
+ </options>
+ </internal>
+ <internal id="int14">
+ <addresses>
+ <address value="{$vxlan_net}.15/24"/>
+ <address value="{$vxlan_net6}::15/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="19"/>
+ <option name="name" value="int14"/>
+ </options>
+ </internal>
+ <internal id="int15">
+ <addresses>
+ <address value="{$vxlan_net}.16/24"/>
+ <address value="{$vxlan_net6}::16/65"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="20"/>
+ <option name="name" value="int15"/>
+ </options>
+ </internal>
+ <tunnel id="vxlan1" type="vxlan">
+ <options>
+ <option name="name" value="vxlan1"/>
+ <option name="option:remote_ip" value="{$net}.20"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="30"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan2" type="vxlan">
+ <options>
+ <option name="name" value="vxlan2"/>
+ <option name="option:remote_ip" value="{$net}.21"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="31"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan3" type="vxlan">
+ <options>
+ <option name="name" value="vxlan3"/>
+ <option name="option:remote_ip" value="{$net}.22"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="32"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan4" type="vxlan">
+ <options>
+ <option name="name" value="vxlan4"/>
+ <option name="option:remote_ip" value="{$net}.23"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="33"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan5" type="vxlan">
+ <options>
+ <option name="name" value="vxlan5"/>
+ <option name="option:remote_ip" value="{$net}.24"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="34"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan6" type="vxlan">
+ <options>
+ <option name="name" value="vxlan6"/>
+ <option name="option:remote_ip" value="{$net}.25"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="35"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan7" type="vxlan">
+ <options>
+ <option name="name" value="vxlan7"/>
+ <option name="option:remote_ip" value="{$net}.26"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="36"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan8" type="vxlan">
+ <options>
+ <option name="name" value="vxlan8"/>
+ <option name="option:remote_ip" value="{$net}.27"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="37"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan9" type="vxlan">
+ <options>
+ <option name="name" value="vxlan9"/>
+ <option name="option:remote_ip" value="{$net}.28"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="38"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan10" type="vxlan">
+ <options>
+ <option name="name" value="vxlan10"/>
+ <option name="option:remote_ip" value="{$net}.29"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="39"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan11" type="vxlan">
+ <options>
+ <option name="name" value="vxlan11"/>
+ <option name="option:remote_ip" value="{$net}.30"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="40"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan12" type="vxlan">
+ <options>
+ <option name="name" value="vxlan12"/>
+ <option name="option:remote_ip" value="{$net}.31"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="41"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan13" type="vxlan">
+ <options>
+ <option name="name" value="vxlan13"/>
+ <option name="option:remote_ip" value="{$net}.32"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="42"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan14" type="vxlan">
+ <options>
+ <option name="name" value="vxlan14"/>
+ <option name="option:remote_ip" value="{$net}.33"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="43"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan15" type="vxlan">
+ <options>
+ <option name="name" value="vxlan15"/>
+ <option name="option:remote_ip" value="{$net}.34"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="44"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan16" type="vxlan">
+ <options>
+ <option name="name" value="vxlan16"/>
+ <option name="option:remote_ip" value="{$net}.35"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="45"/>
+ </options>
+ </tunnel>
+ <flow_entries>
+ <entry>table=0,in_port=5,actions=set_field:100->tun_id,output:30</entry>
+ <entry>table=0,in_port=6,actions=set_field:100->tun_id,output:31</entry>
+ <entry>table=0,in_port=7,actions=set_field:100->tun_id,output:32</entry>
+ <entry>table=0,in_port=8,actions=set_field:100->tun_id,output:33</entry>
+ <entry>table=0,in_port=9,actions=set_field:100->tun_id,output:34</entry>
+ <entry>table=0,in_port=10,actions=set_field:100->tun_id,output:35</entry>
+ <entry>table=0,in_port=11,actions=set_field:100->tun_id,output:36</entry>
+ <entry>table=0,in_port=12,actions=set_field:100->tun_id,output:37</entry>
+ <entry>table=0,in_port=13,actions=set_field:100->tun_id,output:38</entry>
+ <entry>table=0,in_port=14,actions=set_field:100->tun_id,output:39</entry>
+ <entry>table=0,in_port=15,actions=set_field:100->tun_id,output:40</entry>
+ <entry>table=0,in_port=16,actions=set_field:100->tun_id,output:41</entry>
+ <entry>table=0,in_port=17,actions=set_field:100->tun_id,output:42</entry>
+ <entry>table=0,in_port=18,actions=set_field:100->tun_id,output:43</entry>
+ <entry>table=0,in_port=19,actions=set_field:100->tun_id,output:44</entry>
+ <entry>table=0,in_port=20,actions=set_field:100->tun_id,output:45</entry>
+ <entry>table=0,in_port=30,tun_id=100,actions=output:5</entry>
+ <entry>table=0,in_port=31,tun_id=100,actions=output:6</entry>
+ <entry>table=0,in_port=32,tun_id=100,actions=output:7</entry>
+ <entry>table=0,in_port=33,tun_id=100,actions=output:8</entry>
+ <entry>table=0,in_port=34,tun_id=100,actions=output:9</entry>
+ <entry>table=0,in_port=35,tun_id=100,actions=output:10</entry>
+ <entry>table=0,in_port=36,tun_id=100,actions=output:11</entry>
+ <entry>table=0,in_port=37,tun_id=100,actions=output:12</entry>
+ <entry>table=0,in_port=38,tun_id=100,actions=output:13</entry>
+ <entry>table=0,in_port=39,tun_id=100,actions=output:14</entry>
+ <entry>table=0,in_port=40,tun_id=100,actions=output:15</entry>
+ <entry>table=0,in_port=41,tun_id=100,actions=output:16</entry>
+ <entry>table=0,in_port=42,tun_id=100,actions=output:17</entry>
+ <entry>table=0,in_port=43,tun_id=100,actions=output:18</entry>
+ <entry>table=0,in_port=44,tun_id=100,actions=output:19</entry>
+ <entry>table=0,in_port=45,tun_id=100,actions=output:20</entry>
+ <entry>table=0,priority=100,actions=drop</entry>
+ </flow_entries>
+ </ovs_bridge>
+ </interfaces>
+ </host>
+ <host id="test_host2">
+ <interfaces>
+ <eth id="if1" label="n1">
+ <params>
+ <param name="driver" value="{$driver}"/>
+ </params>
+ <addresses>
+ <address value="{$net}.20/24"/>
+ <address value="{$net}.21/24"/>
+ <address value="{$net}.22/24"/>
+ <address value="{$net}.23/24"/>
+ <address value="{$net}.24/24"/>
+ <address value="{$net}.25/24"/>
+ <address value="{$net}.26/24"/>
+ <address value="{$net}.27/24"/>
+ <address value="{$net}.28/24"/>
+ <address value="{$net}.29/24"/>
+ <address value="{$net}.30/24"/>
+ <address value="{$net}.31/24"/>
+ <address value="{$net}.32/24"/>
+ <address value="{$net}.33/24"/>
+ <address value="{$net}.34/24"/>
+ <address value="{$net}.35/24"/>
+ </addresses>
+ </eth>
+ <ovs_bridge id="ovs2">
+ <internal id="int0">
+ <options>
+ <option name="ofport_request" value="5"/>
+ <option name="name" value="int0"/>
+ </options>
+ <addresses>
+ <address value="{$vxlan_net}.20/24"/>
+ <address value="{$vxlan_net6}::20/24"/>
+ </addresses>
+ </internal>
+ <internal id="int1">
+ <addresses>
+ <address value="{$vxlan_net}.21/24"/>
+ <address value="{$vxlan_net6}::21/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="6"/>
+ <option name="name" value="int1"/>
+ </options>
+ </internal>
+ <internal id="int2">
+ <addresses>
+ <address value="{$vxlan_net}.22/24"/>
+ <address value="{$vxlan_net6}::22/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="7"/>
+ <option name="name" value="int2"/>
+ </options>
+ </internal>
+ <internal id="int3">
+ <addresses>
+ <address value="{$vxlan_net}.23/24"/>
+ <address value="{$vxlan_net6}::23/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="8"/>
+ <option name="name" value="int3"/>
+ </options>
+ </internal>
+ <internal id="int4">
+ <addresses>
+ <address value="{$vxlan_net}.24/24"/>
+ <address value="{$vxlan_net6}::24/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="9"/>
+ <option name="name" value="int4"/>
+ </options>
+ </internal>
+ <internal id="int5">
+ <addresses>
+ <address value="{$vxlan_net}.25/24"/>
+ <address value="{$vxlan_net6}::25/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="10"/>
+ <option name="name" value="int5"/>
+ </options>
+ </internal>
+ <internal id="int6">
+ <addresses>
+ <address value="{$vxlan_net}.26/24"/>
+ <address value="{$vxlan_net6}::26/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="11"/>
+ <option name="name" value="int6"/>
+ </options>
+ </internal>
+ <internal id="int7">
+ <addresses>
+ <address value="{$vxlan_net}.27/24"/>
+ <address value="{$vxlan_net6}::27/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="12"/>
+ <option name="name" value="int7"/>
+ </options>
+ </internal>
+ <internal id="int8">
+ <addresses>
+ <address value="{$vxlan_net}.28/24"/>
+ <address value="{$vxlan_net6}::28/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="13"/>
+ <option name="name" value="int8"/>
+ </options>
+ </internal>
+ <internal id="int9">
+ <addresses>
+ <address value="{$vxlan_net}.29/24"/>
+ <address value="{$vxlan_net6}::29/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="14"/>
+ <option name="name" value="int9"/>
+ </options>
+ </internal>
+ <internal id="int10">
+ <addresses>
+ <address value="{$vxlan_net}.30/24"/>
+ <address value="{$vxlan_net6}::30/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="15"/>
+ <option name="name" value="int10"/>
+ </options>
+ </internal>
+ <internal id="int11">
+ <addresses>
+ <address value="{$vxlan_net}.31/24"/>
+ <address value="{$vxlan_net6}::31/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="16"/>
+ <option name="name" value="int11"/>
+ </options>
+ </internal>
+ <internal id="int12">
+ <addresses>
+ <address value="{$vxlan_net}.32/24"/>
+ <address value="{$vxlan_net6}::32/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="17"/>
+ <option name="name" value="int12"/>
+ </options>
+ </internal>
+ <internal id="int13">
+ <addresses>
+ <address value="{$vxlan_net}.33/24"/>
+ <address value="{$vxlan_net6}::33/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="18"/>
+ <option name="name" value="int13"/>
+ </options>
+ </internal>
+ <internal id="int14">
+ <addresses>
+ <address value="{$vxlan_net}.34/24"/>
+ <address value="{$vxlan_net6}::34/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="19"/>
+ <option name="name" value="int14"/>
+ </options>
+ </internal>
+ <internal id="int15">
+ <addresses>
+ <address value="{$vxlan_net}.35/24"/>
+ <address value="{$vxlan_net6}::35/64"/>
+ </addresses>
+ <options>
+ <option name="ofport_request" value="20"/>
+ <option name="name" value="int15"/>
+ </options>
+ </internal>
+ <tunnel id="vxlan1" type="vxlan">
+ <options>
+ <option name="name" value="vxlan1"/>
+ <option name="option:remote_ip" value="{$net}.1"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="30"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan2" type="vxlan">
+ <options>
+ <option name="name" value="vxlan2"/>
+ <option name="option:remote_ip" value="{$net}.2"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="31"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan3" type="vxlan">
+ <options>
+ <option name="name" value="vxlan3"/>
+ <option name="option:remote_ip" value="{$net}.3"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="32"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan4" type="vxlan">
+ <options>
+ <option name="name" value="vxlan4"/>
+ <option name="option:remote_ip" value="{$net}.4"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="33"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan5" type="vxlan">
+ <options>
+ <option name="name" value="vxlan5"/>
+ <option name="option:remote_ip" value="{$net}.5"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="34"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan6" type="vxlan">
+ <options>
+ <option name="name" value="vxlan6"/>
+ <option name="option:remote_ip" value="{$net}.6"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="35"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan7" type="vxlan">
+ <options>
+ <option name="name" value="vxlan7"/>
+ <option name="option:remote_ip" value="{$net}.7"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="36"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan8" type="vxlan">
+ <options>
+ <option name="name" value="vxlan8"/>
+ <option name="option:remote_ip" value="{$net}.8"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="37"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan9" type="vxlan">
+ <options>
+ <option name="name" value="vxlan9"/>
+ <option name="option:remote_ip" value="{$net}.9"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="38"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan10" type="vxlan">
+ <options>
+ <option name="name" value="vxlan10"/>
+ <option name="option:remote_ip" value="{$net}.10"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="39"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan11" type="vxlan">
+ <options>
+ <option name="name" value="vxlan11"/>
+ <option name="option:remote_ip" value="{$net}.11"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="40"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan12" type="vxlan">
+ <options>
+ <option name="name" value="vxlan12"/>
+ <option name="option:remote_ip" value="{$net}.12"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="41"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan13" type="vxlan">
+ <options>
+ <option name="name" value="vxlan13"/>
+ <option name="option:remote_ip" value="{$net}.13"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="42"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan14" type="vxlan">
+ <options>
+ <option name="name" value="vxlan14"/>
+ <option name="option:remote_ip" value="{$net}.14"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="43"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan15" type="vxlan">
+ <options>
+ <option name="name" value="vxlan15"/>
+ <option name="option:remote_ip" value="{$net}.15"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="44"/>
+ </options>
+ </tunnel>
+ <tunnel id="vxlan16" type="vxlan">
+ <options>
+ <option name="name" value="vxlan16"/>
+ <option name="option:remote_ip" value="{$net}.16"/>
+ <option name="option:key" value="flow"/>
+ <option name="ofport_request" value="45"/>
+ </options>
+ </tunnel>
+ <flow_entries>
+ <entry>table=0,in_port=5,actions=set_field:100->tun_id,output:30</entry>
+ <entry>table=0,in_port=6,actions=set_field:100->tun_id,output:31</entry>
+ <entry>table=0,in_port=7,actions=set_field:100->tun_id,output:32</entry>
+ <entry>table=0,in_port=8,actions=set_field:100->tun_id,output:33</entry>
+ <entry>table=0,in_port=9,actions=set_field:100->tun_id,output:34</entry>
+ <entry>table=0,in_port=10,actions=set_field:100->tun_id,output:35</entry>
+ <entry>table=0,in_port=11,actions=set_field:100->tun_id,output:36</entry>
+ <entry>table=0,in_port=12,actions=set_field:100->tun_id,output:37</entry>
+ <entry>table=0,in_port=13,actions=set_field:100->tun_id,output:38</entry>
+ <entry>table=0,in_port=14,actions=set_field:100->tun_id,output:39</entry>
+ <entry>table=0,in_port=15,actions=set_field:100->tun_id,output:40</entry>
+ <entry>table=0,in_port=16,actions=set_field:100->tun_id,output:41</entry>
+ <entry>table=0,in_port=17,actions=set_field:100->tun_id,output:42</entry>
+ <entry>table=0,in_port=18,actions=set_field:100->tun_id,output:43</entry>
+ <entry>table=0,in_port=19,actions=set_field:100->tun_id,output:44</entry>
+ <entry>table=0,in_port=20,actions=set_field:100->tun_id,output:45</entry>
+ <entry>table=0,in_port=30,tun_id=100,actions=output:5</entry>
+ <entry>table=0,in_port=31,tun_id=100,actions=output:6</entry>
+ <entry>table=0,in_port=32,tun_id=100,actions=output:7</entry>
+ <entry>table=0,in_port=33,tun_id=100,actions=output:8</entry>
+ <entry>table=0,in_port=34,tun_id=100,actions=output:9</entry>
+ <entry>table=0,in_port=35,tun_id=100,actions=output:10</entry>
+ <entry>table=0,in_port=36,tun_id=100,actions=output:11</entry>
+ <entry>table=0,in_port=37,tun_id=100,actions=output:12</entry>
+ <entry>table=0,in_port=38,tun_id=100,actions=output:13</entry>
+ <entry>table=0,in_port=39,tun_id=100,actions=output:14</entry>
+ <entry>table=0,in_port=40,tun_id=100,actions=output:15</entry>
+ <entry>table=0,in_port=41,tun_id=100,actions=output:16</entry>
+ <entry>table=0,in_port=42,tun_id=100,actions=output:17</entry>
+ <entry>table=0,in_port=43,tun_id=100,actions=output:18</entry>
+ <entry>table=0,in_port=44,tun_id=100,actions=output:19</entry>
+ <entry>table=0,in_port=45,tun_id=100,actions=output:20</entry>
+ <entry>table=0,priority=100,actions=drop</entry>
+ </flow_entries>
+ </ovs_bridge>
+ </interfaces>
+ </host>
+ </network>
+
+ <task python="ovs_tunnels.py"/>
+</lnstrecipe>
--
2.9.4