diff mbox series

[ovs-dev,4/5] ovn-northd: Improve the doc and tests for ecmp-symmetric-reply.

Message ID 20220313195532.1141490-5-hzhou@ovn.org
State Superseded
Headers show
Series Use ct_mark for masked access to make flows HW-offloading friendly. | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_ovn-kubernetes success github build: passed
ovsrobot/github-robot-_Build_and_Test fail github build: failed

Commit Message

Han Zhou March 13, 2022, 7:55 p.m. UTC
1. The ovn-northd.8.xml didn't cover the flow in the lr_in_arp_resolve
   stage.

2. The original test didn't really test the ecmp-symmetric-reply because
   the option takes effect only for gateway routers. This patch set the
   chassis to make the router a gateway router. Also, add the check
   for the ecmp-symmetric-reply related flow in the lr_in_arp_resolve
   stage..

Signed-off-by: Han Zhou <hzhou@ovn.org>
---
 northd/ovn-northd.8.xml | 17 ++++++++++++++---
 tests/ovn-northd.at     |  4 ++++
 2 files changed, 18 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/northd/ovn-northd.8.xml b/northd/ovn-northd.8.xml
index 4784bff04..51e132239 100644
--- a/northd/ovn-northd.8.xml
+++ b/northd/ovn-northd.8.xml
@@ -3520,9 +3520,12 @@  output;
       <code>ct_label</code> value is used to choose the destination. The least
       significant 48 bits of the <code>ct_label</code> tell the destination MAC
       address to which the packet should be sent. The next 16 bits tell the
-      logical router port on which the packet should be sent. These values in
-      the <code>ct_label</code> are set when the initial ingress traffic is
-      received over the ECMP route.
+      logical router port on which the packet should be sent. These values are
+      saved to the <code>ct_label</code> when the initial ingress traffic is
+      received over the ECMP route and committed to conntrack. The
+      priority-10300 flows in this stage set the <code>outport</code>,
+      while the <code>eth.dst</code> is set by flows at the ARP/ND Resolution
+      stage.
     </p>
 
     <p>
@@ -3881,6 +3884,14 @@  outport = <var>P</var>
         </p>
       </li>
 
+      <li>
+        <p>
+          Priority-200 flows that match ECMP reply traffic for the routes
+          configured to use symmetric replies, with actions
+          <code>eth.dst = ct_label.ecmp_reply_eth; next;</code>.
+        </p>
+      </li>
+
       <li>
         <p>
           Static MAC bindings.  MAC bindings can be known statically based on
diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at
index 60d91a771..5efbdf267 100644
--- a/tests/ovn-northd.at
+++ b/tests/ovn-northd.at
@@ -5664,6 +5664,7 @@  ovn_start
 check ovn-sbctl chassis-add ch1 geneve 127.0.0.1
 
 check ovn-nbctl lr-add lr0
+check ovn-nbctl set logical_router lr0 options:chassis=ch1
 check ovn-nbctl ls-add public
 check ovn-nbctl lrp-add lr0 lr0-public 00:00:20:20:12:13 192.168.0.1/24
 check ovn-nbctl lsp-add public public-lr0
@@ -5692,6 +5693,9 @@  AT_CHECK([grep -e "lr_in_ip_routing_ecmp" lr0flows | sed 's/192\.168\.0\..0/192.
   table=??(lr_in_ip_routing_ecmp), priority=100  , match=(reg8[[0..15]] == 1 && reg8[[16..31]] == 2), action=(reg0 = 192.168.0.??; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = "lr0-public"; next;)
   table=??(lr_in_ip_routing_ecmp), priority=150  , match=(reg8[[0..15]] == 0), action=(next;)
 ])
+AT_CHECK([grep -e "lr_in_arp_resolve.*ecmp" lr0flows | sed 's/table=../table=??/'], [0], [dnl
+  table=??(lr_in_arp_resolve  ), priority=200  , match=(ct.rpl && ct_label.ecmp_reply_port == 1), action=(eth.dst = ct_label.ecmp_reply_eth; next;)
+])
 
 # add ecmp route with wrong nexthop
 check ovn-nbctl --wait=sb --ecmp-symmetric-reply lr-route-add lr0 1.0.0.1 192.168.1.20