Hi Lorenzo, Thanks for your review. Actually this patch must be ignored. Patch [0] fixes this issue.
[0] https://github.com/ovn-org/ovn/commit/69c2b8677de0676db7b3f4a5cd89cb0be931737a Regards, Lucas Em sex., 6 de mar. de 2026, 12:40, Lorenzo Bianconi < [email protected]> escreveu: > > Avoid learned route loop if two differents AZs > > configure the same address and adv the same prefix > > in the same Transit Switch. > > Do not remove the route from routes learned structure, > > mark the route as not stale. > > Hi Lucas, > > looking at the testing scenario this seems mostly a configuration issue to > me > and the networking will not working properly even adding this patch right? > E.g. > Both the routers will respond to ARP requests or snat the traffic with the > same > IP. > > Some comments inline. > Regards, > Lorenzo > > > > > Signed-off-by: Lucas Vargas Dias <[email protected]> > > --- > > ic/ovn-ic.c | 17 ++++++++------ > > tests/ovn-ic.at | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ > > 2 files changed, 70 insertions(+), 7 deletions(-) > > > > diff --git a/ic/ovn-ic.c b/ic/ovn-ic.c > > index 95d73cb4b..3f3c0d99d 100644 > > --- a/ic/ovn-ic.c > > +++ b/ic/ovn-ic.c > > @@ -1300,6 +1300,7 @@ struct ic_route_info { > > const struct nbrec_logical_router_static_route *nb_route; > > const struct nbrec_logical_router_port *nb_lrp; > > const struct nbrec_load_balancer *nb_lb; > > + bool stale; /* True if the route is stale and should be removed. */ > > }; > > > > static uint32_t > > @@ -1393,6 +1394,7 @@ add_to_routes_learned(struct hmap *routes_learned, > > ic_route->origin = origin; > > ic_route->route_table = nb_route->route_table; > > ic_route->nb_lr = nb_lr; > > + ic_route->stale = true; > > hmap_insert(routes_learned, &ic_route->node, > > ic_route_hash(&prefix, plen, &nexthop, origin, > > nb_route->route_table)); > > @@ -2168,8 +2170,7 @@ sync_learned_routes(struct ic_context *ctx, > > route_learned->nb_route, "ic-learned-route", > uuid_s); > > free(uuid_s); > > } > > - hmap_remove(&ic_lr->routes_learned, > &route_learned->node); > > - free(route_learned); > > + route_learned->stale = false; > > } else { > > /* Create the missing route in NB. */ > > const struct nbrec_logical_router_static_route > *nb_route = > > @@ -2197,11 +2198,13 @@ sync_learned_routes(struct ic_context *ctx, > > /* Delete extra learned routes. */ > > struct ic_route_info *route_learned; > > HMAP_FOR_EACH_SAFE (route_learned, node, &ic_lr->routes_learned) { > > - VLOG_DBG("Delete route %s -> %s that is not in IC-SB from NB.", > > - route_learned->nb_route->ip_prefix, > > - route_learned->nb_route->nexthop); > > - nbrec_logical_router_update_static_routes_delvalue( > > - ic_lr->lr, route_learned->nb_route); > > + if (route_learned->stale) { > > + VLOG_DBG("Delete route %s -> %s that is not in IC-SB from > NB.", > > + route_learned->nb_route->ip_prefix, > > + route_learned->nb_route->nexthop); > > + nbrec_logical_router_update_static_routes_delvalue( > > + ic_lr->lr, route_learned->nb_route); > > + } > > hmap_remove(&ic_lr->routes_learned, &route_learned->node); > > free(route_learned); > > } > > diff --git a/tests/ovn-ic.at b/tests/ovn-ic.at > > index 1a826aa1c..ead16aa91 100644 > > --- a/tests/ovn-ic.at > > +++ b/tests/ovn-ic.at > > @@ -3394,6 +3394,66 @@ OVN_CLEANUP_IC([az1], [az2]) > > AT_CLEANUP > > ]) > > > > +OVN_FOR_EACH_NORTHD([ > > +AT_SETUP([ovn-ic -- check loop with LSP of duplicated address]) > > + > > +ovn_init_ic_db > > + > > +for i in 1 2 3; do > > + ovn_start az$i > > + ovn_as az$i > > + > > + # Enable route learning at AZ level > > + check ovn-nbctl set nb_global . options:ic-route-learn=true > > + # Enable route advertising at AZ level > > + check ovn-nbctl set nb_global . options:ic-route-adv=true > > +done > > + > > +# Create new transit switches and LRs. Test topology is next: > > +# logical router (lr12) > > +# | > > +# logical router (lr11) - / transit switch (ts11) \ - logical router > (lr13) > > +# > > + > > +# Create lr11, lr13, ts11 and connect them > > +for i in 1 3; do > > + ovn_as az$i > > + > > + lr=lr1$i > > + check ovn-nbctl lr-add $lr > > + > > + check ovn-ic-nbctl --wait=sb --may-exist ts-add ts11 > > + > > + lrp=lrp-$lr-ts11 > > + lsp=lsp-ts11-$lr > > + # Create LRP and connect to TS > > + check ovn-nbctl lrp-add $lr $lrp aa:aa:aa:aa:a1:0$i > 169.254.101.1/24 > > + check ovn-nbctl lsp-add-router-port ts11 $lsp $lrp > > +done > > + > > +# Create lr12 and connect it to ts11 > > +ovn_as az2 > > +check ovn-nbctl lr-add lr12 > > + > > +# Create LRP and connect to TS > > +check ovn-nbctl lrp-add lr12 lrp-lr12-ts11 aa:aa:aa:aa:a1:03 > 169.254.101.2/24 > > +check ovn-nbctl lsp-add-router-port ts11 lsp-lr12-ts11 lrp-lr12-ts11 > > + > > + > > +# Create directly-connected route in lr11 > > +check ovn_as az1 ovn-nbctl lrp-add lr11 lrp-lr11 aa:aa:aa:aa:bb:01 " > 192.168.0.1/24" > > +check ovn_as az3 ovn-nbctl lrp-add lr13 lrp-lr13 aa:aa:aa:aa:bb:03 " > 192.168.0.1/24" > > +sleep 2 > > I guess you do not need this sleep > > > +OVS_WAIT_FOR_OUTPUT([ovn_as az2 ovn-nbctl lr-route-list lr12 | grep > 192.168 | > > + grep learned | awk '{print $1, $2}' | sort ], [0], [dnl > > +192.168.0.0/24 169.254.101.1 > > even if we have just one route here, it is not clear to me which router > (lr11 > or lr13 will respond to the ARP request as next-hop). > > > +]) > > + > > +OVN_CLEANUP_IC([az1], [az2], [az3]) > > + > > +AT_CLEANUP > > +]) > > + > > OVN_FOR_EACH_NORTHD([ > > AT_SETUP([ovn-ic -- prefix filter -- filtering routes]) > > ovn_init_ic_db > > -- > > 2.43.0 > > > > > > -- > > > > > > > > > > _'Esta mensagem é direcionada apenas para os endereços constantes no > > cabeçalho inicial. Se você não está listado nos endereços constantes no > > cabeçalho, pedimos-lhe que desconsidere completamente o conteúdo dessa > > mensagem e cuja cópia, encaminhamento e/ou execução das ações citadas > estão > > imediatamente anuladas e proibidas'._ > > > > > > * **'Apesar do Magazine Luiza tomar > > todas as precauções razoáveis para assegurar que nenhum vírus esteja > > presente nesse e-mail, a empresa não poderá aceitar a responsabilidade > por > > quaisquer perdas ou danos causados por esse e-mail ou por seus anexos'.* > > > > > > > > _______________________________________________ > > dev mailing list > > [email protected] > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > > -- _‘Esta mensagem é direcionada apenas para os endereços constantes no cabeçalho inicial. Se você não está listado nos endereços constantes no cabeçalho, pedimos-lhe que desconsidere completamente o conteúdo dessa mensagem e cuja cópia, encaminhamento e/ou execução das ações citadas estão imediatamente anuladas e proibidas’._ * **‘Apesar do Magazine Luiza tomar todas as precauções razoáveis para assegurar que nenhum vírus esteja presente nesse e-mail, a empresa não poderá aceitar a responsabilidade por quaisquer perdas ou danos causados por esse e-mail ou por seus anexos’.* _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
