[ovs-dev] [PATCH ovn v3 10/13] ovn.at: e2e test for OVN interconnection.

Han Zhou hzhou at ovn.org
Tue Jan 28 02:55:35 UTC 2020


Test with 5 AZs, each with 1 GW, 1 HV, 5 VIFs, 5 LRs, connected to
5 transit switches. Verify traffic through each TS between each pair
of AZs.

Signed-off-by: Han Zhou <hzhou at ovn.org>
---
 tests/ovn.at | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 147 insertions(+)

diff --git a/tests/ovn.at b/tests/ovn.at
index 89e2b83..c08d50e 100644
--- a/tests/ovn.at
+++ b/tests/ovn.at
@@ -17416,6 +17416,153 @@ ovn-nbctl --wait=hv --timeout=3 sync
 AT_CHECK([ovn-trace --ovs lsw0 'inport == "lp1" && eth.type == 0x1234' | grep "dl_type=0x1234 actions="], [0], [ignore])
 
 OVN_CLEANUP([hv1])
+AT_CLEANUP
+
+AT_SETUP([ovn -- interconnection])
+ovn_init_ic_db
+n_az=5
+n_ts=5
+for i in `seq 1 $n_az`; do
+    ovn_start az$i
+done
+
+net_add n1
+
+# 1 HV and 1 GW per AZ
+for az in `seq 1 $n_az`; do
+    sim_add hv$az
+    as hv$az
+    ovs-vsctl add-br br-phys
+    ovn_az_attach az$az n1 br-phys 192.168.$az.1 16
+    for p in `seq 1 $n_ts`; do
+        ovs-vsctl -- add-port br-int vif$p -- \
+            set interface vif$p external-ids:iface-id=lsp$az-$p \
+            options:tx_pcap=hv$az/vif$p-tx.pcap \
+            options:rxq_pcap=hv$az/vif$p-rx.pcap \
+            ofport-request=$p
+    done
+
+    sim_add gw$az
+    as gw$az
+    ovs-vsctl add-br br-phys
+    ovn_az_attach az$az n1 br-phys 192.168.$az.2 16
+    ovs-vsctl set open . external-ids:ovn-is-interconn=true
+done
+
+for ts in `seq 1 $n_ts`; do
+    ovn-ic-nbctl create Transit_Switch name=ts$ts
+done
+
+for az in `seq 1 $n_az`; do
+    ovn_as az$az
+
+    # Each AZ has n_ts LSPi->LSi->LRi connecting to each TSi
+    for i in `seq 1 $n_ts`; do
+        lsp_mac=00:00:00:0$az:0$i:00
+        lrp_ls_mac=00:00:00:0$az:0$i:01
+        lrp_ts_mac=00:00:00:0$az:0$i:02
+        lsp_ip=10.$az.$i.123
+        lrp_ls_ip=10.$az.$i.1
+        lrp_ts_ip=169.254.$i.$az
+
+        ovn-nbctl ls-add ls$az-$i
+        ovn-nbctl lsp-add ls$az-$i lsp$az-$i
+        ovn-nbctl lsp-set-addresses lsp$az-$i "$lsp_mac $lsp_ip"
+
+        ovn-nbctl lr-add lr$az-$i
+
+        ovn-nbctl lrp-add lr$az-$i lrp-lr$az-$i-ls$az-$i $lrp_ls_mac $lrp_ls_ip/24
+        ovn-nbctl lsp-add ls$az-$i lsp-ls$az-$i-lr$az-$i
+        ovn-nbctl lsp-set-addresses lsp-ls$az-$i-lr$az-$i router
+        ovn-nbctl lsp-set-type lsp-ls$az-$i-lr$az-$i router
+        ovn-nbctl lsp-set-options lsp-ls$az-$i-lr$az-$i router-port=lrp-lr$az-$i-ls$az-$i
+
+        ovn-nbctl lrp-add lr$az-$i lrp-lr$az-$i-ts$i $lrp_ts_mac $lrp_ts_ip/24
+        ovn-nbctl lsp-add ts$i lsp-ts$i-lr$az-$i
+        ovn-nbctl lsp-set-addresses lsp-ts$i-lr$az-$i router
+        ovn-nbctl lsp-set-type lsp-ts$i-lr$az-$i router
+        ovn-nbctl lsp-set-options lsp-ts$i-lr$az-$i router-port=lrp-lr$az-$i-ts$i
+        ovn-nbctl lrp-set-gateway-chassis lrp-lr$az-$i-ts$i gw$az
+
+        for remote in `seq 1 $n_az`; do
+            if test $az = $remote; then
+                continue
+            fi
+            ovn-nbctl lr-route-add lr$az-$i 10.$remote.$i.0/24 169.254.$i.$remote
+        done
+    done
+done
+
+# Pre-populate the hypervisors' ARP tables so that we don't lose any
+# packets for ARP resolution (native tunneling doesn't queue packets
+# for ARP resolution).
+OVN_POPULATE_ARP
+
+for i in `seq 1 $n_az`; do
+    AT_CHECK([ovn_as az$i ovn-nbctl --timeout=3 --wait=sb sync], [0], [ignore])
+done
+
+# Allow some time for ovn-northd and ovn-controller to catch up.
+# XXX This should be more systematic.
+sleep 2
+
+# Send packets between AZs on each TS
+for s_az in `seq 1 $n_az`; do
+    for d_az in `seq 1 $n_az`; do
+        if test $s_az = $d_az; then
+            continue
+        fi
+
+        for i in `seq 1 $n_ts`; do
+            lsp_smac=00:00:00:0${s_az}:0$i:00
+            lsp_dmac=00:00:00:0${d_az}:0$i:00
+            lrp_ls_smac=00:00:00:0${s_az}:0$i:01
+            lrp_ls_dmac=00:00:00:0${d_az}:0$i:01
+            lsp_sip=10.${s_az}.$i.123
+            lsp_dip=10.${d_az}.$i.123
+
+            packet="inport==\"lsp${s_az}-$i\" && eth.src==$lsp_smac && eth.dst==$lrp_ls_smac &&
+                    ip4 && ip.ttl==64 && ip4.src==$lsp_sip && ip4.dst==$lsp_dip &&
+                    udp && udp.src==53 && udp.dst==4369"
+            AT_CHECK([as hv${s_az} ovs-appctl -t ovn-controller inject-pkt "$packet"])
+
+            # Packet to Expect
+            # The TTL should be decremented by 2.
+            packet="eth.src==$lrp_ls_dmac && eth.dst==$lsp_dmac &&
+                    ip4 && ip.ttl==62 && ip4.src==$lsp_sip && ip4.dst==$lsp_dip &&
+                    udp && udp.src==53 && udp.dst==4369"
+            echo $packet | ovstest test-ovn expr-to-packets >> ${d_az}-$i.expected
+        done
+    done
+done
+
+echo "---------INB dump-----"
+ovn-ic-nbctl show
+echo "---------------------"
+
+echo "---------ISB dump-----"
+ovn-ic-sbctl show
+echo "---------------------"
+ovn-ic-sbctl list gateway
+echo "---------------------"
+ovn-ic-sbctl list datapath_binding
+echo "---------------------"
+ovn-ic-sbctl list port_binding
+echo "---------------------"
+
+for az in `seq 1 $n_az`; do
+    for i in `seq 1 $n_ts`; do
+        OVN_CHECK_PACKETS([hv$az/vif$i-tx.pcap], [$az-$i.expected])
+    done
+done
+
+for az in `seq 1 $n_az`; do
+    OVN_CLEANUP_SBOX([hv$az])
+    OVN_CLEANUP_SBOX([gw$az])
+    OVN_CLEANUP_AZ([az$az])
+done
+
+OVN_CLEANUP_IC
 
 AT_CLEANUP
 
-- 
2.1.0



More information about the dev mailing list