@@ -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
@@ -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
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(-)