From: Zhen Wang <[email protected]>

Every other branch of the multicast group loop writes the destination's
key into the outport register because something downstream reads it back.
The type=remote branch does not: it calls tunnel_to_chassis(), which
passes the key to put_encapsulation() as an argument and writes it
straight into the tunnel header.  Nothing reads MFF_LOG_OUTPORT between
the load and the output, so the load is dead.

It is not free, though.  It costs 16 bytes of OpenFlow in a flow that
already carries one set of actions per destination, which is what bounds
how many remote ports a flood can reach.  Removing it raises that ceiling
from 680 destinations to 817.

Assisted-by: Claude Opus 5, Cursor
Signed-off-by: Zhen Wang <[email protected]>
---
 controller/physical.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/controller/physical.c b/controller/physical.c
index 554e611d60e6..ea1f2e0d1a53 100644
--- a/controller/physical.c
+++ b/controller/physical.c
@@ -3041,8 +3041,8 @@ consider_mc_group(const struct physical_ctx *ctx,
             }
         } else if (type == LP_REMOTE) {
             if (port->chassis) {
-                put_load(port->tunnel_key, MFF_LOG_OUTPORT, 0, 32,
-                         &remote_ctx->ofpacts);
+                /* No outport load: the destination key reaches the tunnel
+                 * header through tunnel_to_chassis' argument instead. */
                 tunnel_to_chassis(ctx->mff_ovn_geneve, port->chassis->name,
                                   ctx->chassis_tunnels, mc->datapath,
                                   port->tunnel_key, &remote_ctx->ofpacts);
-- 
2.38.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to