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
