In vxlan mode with more than 2047 lrp in router, build_ports()
prints "all port tunnel ids exhausted", and frees the lrp port.

However, lsp of type "router" connected to the lrp still holds
the pointer in port->peer. This leads to northd crash in
build_lflows().

CallTrace:
  build_lswitch_rport_arp_req_flows
  build_lswitch_ip_unicast_lookup
  build_lswitch_and_lrouter_iterate_by_op
  build_lflows
  en_lflow_run
  engine_recompute
  engine_run
  inc_proc_northd_run
  main

Fixes: 3044132261d3 ("northd: Enhance implementation of port tunnel key 
requests.")
Signed-off-by: Tao Liu <taoliu...@163.com>
---
 northd/northd.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/northd/northd.c b/northd/northd.c
index c10e5c20c..fe36a0362 100644
--- a/northd/northd.c
+++ b/northd/northd.c
@@ -4598,6 +4598,9 @@ ovn_port_allocate_key(const struct sbrec_chassis_table 
*sbrec_chassis_table,
             if (op->sb) {
                 sbrec_port_binding_delete(op->sb);
             }
+            if (op->peer) {
+                op->peer->peer = NULL;
+            }
             ovs_list_remove(&op->list);
             ovn_port_destroy(ports, op);
         }
-- 
2.31.1

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to