The negotiation for Geneve metadata TLV and the register allocation
might take a while after controller start, if we attempt to create
flood flows in that period we might end up crashing as the metadata
match helper asserts if the register is valid:

lib/tun-metadata.c:286: assertion idx < TUN_METADATA_NUM_OPTS failed in 
metadata_loc_from_match()

Fixes: 7c3f7f415f1d ("northd, controller: Flood ARP and NA packet on transit 
router.")
Signed-off-by: Ales Musil <[email protected]>
---
 controller/physical.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/controller/physical.c b/controller/physical.c
index 5d088302a..0d4f99ff8 100644
--- a/controller/physical.c
+++ b/controller/physical.c
@@ -2475,6 +2475,11 @@ physical_eval_remote_chassis_flows(const struct 
physical_ctx *ctx,
             continue;
         }
 
+        /* Do not create flows for Geneve if the TLV negotiation finished. */
+        if (tun->type == GENEVE && !ctx->mff_ovn_geneve) {
+            continue;
+        }
+
         if (!(prev && prev->type == tun->type)) {
             put_remote_chassis_flood_encap(egress_ofpacts, tun->type,
                                            ctx->mff_ovn_geneve);
-- 
2.48.1

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

Reply via email to