If logical router has ECMP for a same prefix, northd tries to adversited N times by the same logical router port, insert in sbrec_advertised_route table fails because all fields of sbrec_advertised_route are equal. To fix it, just add one time the route to be advertised in the sync routes.
Fixes: f2deb24c5c43 ("northd: Sync Advertised_Route to sb.") Signed-off-by: Lucas Vargas Dias <lucas.vd...@luizalabs.com> --- northd/en-advertised-route-sync.c | 11 ++++++++++- tests/ovn-northd.at | 9 +++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/northd/en-advertised-route-sync.c b/northd/en-advertised-route-sync.c index 35def9d22..3dd4d0581 100644 --- a/northd/en-advertised-route-sync.c +++ b/northd/en-advertised-route-sync.c @@ -757,8 +757,17 @@ advertised_route_table_sync( advertise_route_track_od(data, route->od, route->tracked_port, route->source); + const struct sbrec_port_binding *tracked_port = + route->tracked_port ? route->tracked_port->sb : NULL; + char *ip_prefix = normalize_v46_prefix(&route->prefix, route->plen); + if (ar_entry_find(&sync_routes,route->od->sdp->sb_dp, + route->out_port->sb, ip_prefix, + tracked_port)) { + free(ip_prefix); + continue; + } ar_entry_add_nocopy(&sync_routes, route->od, route->out_port, - normalize_v46_prefix(&route->prefix, route->plen), + ip_prefix, route->tracked_port, route->source); } diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at index c9e998129..cae20aa1a 100644 --- a/tests/ovn-northd.at +++ b/tests/ovn-northd.at @@ -15095,6 +15095,15 @@ check_row_count Advertised_Route 3 check_row_count Advertised_Route 2 logical_port=$pb check_row_count Advertised_Route 1 logical_port=$pb ip_prefix=192.168.0.0/24 +# Adding two statics routes adds none additional entry. +check ovn-nbctl --wait=sb lr-route-del lr0 192.168.0.0/24 10.0.0.10 +check ovn-nbctl --wait=sb --ecmp lr-route-add lr0 192.168.0.0/24 10.0.0.10 +check ovn-nbctl --wait=sb --ecmp lr-route-add lr0 192.168.0.0/24 10.0.0.11 + +check_row_count Advertised_Route 3 +check_row_count Advertised_Route 2 logical_port=$pb +check_row_count Advertised_Route 1 logical_port=$pb ip_prefix=192.168.0.0/24 + # Adding an ipv6 LRP adds an addition route entry. check ovn-nbctl --wait=sb lrp-add lr0 lr0-sw2 00:00:00:00:ff:03 2001:db8::1/64 fe80::1/64 pb3=$(fetch_column port_binding _uuid logical_port=lr0-sw2) -- 2.34.1 -- _'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 d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev