On Tue, Jul 21, 2026 at 02:53:20PM +0200, Ales Musil via dev wrote:
> The IC routes were using mix of printf functions and inet_ntop to
> format the address. Use the normalize_v46 helpers instead, this also
> has the effect that the prefix is truly normalized so it doesn't
> contain host bits anymore.
> 
> Also simplify the debug messages formatting.
> 
> Signed-off-by: Ales Musil <[email protected]>
> ---
>  ic/ovn-ic.c | 59 ++++++++++++-----------------------------------------
>  1 file changed, 13 insertions(+), 46 deletions(-)
> 
> diff --git a/ic/ovn-ic.c b/ic/ovn-ic.c
> index 26173a5f6..fd20c73be 100644
> --- a/ic/ovn-ic.c
> +++ b/ic/ovn-ic.c
> @@ -2088,14 +2088,7 @@ add_static_to_routes_ad(
>  
>          ds_put_format(&msg, "Advertising static route: %s -> %s, ic nexthop: 
> ",
>                        nb_route->ip_prefix, nb_route->nexthop);
> -
> -        if (IN6_IS_ADDR_V4MAPPED(&nexthop)) {
> -            ds_put_format(&msg, IP_FMT,
> -                          IP_ARGS(in6_addr_get_mapped_ipv4(&nexthop)));
> -        } else {
> -            ipv6_format_addr(&nexthop, &msg);
> -        }
> -
> +        ipv6_format_mapped(&nexthop, &msg);
>          ds_put_format(&msg, ", route_table: %s", nb_route->route_table[0]
>                                                   ? nb_route->route_table
>                                                   : "<main>");
> @@ -2159,12 +2152,7 @@ add_network_to_routes_ad(struct hmap *routes_ad, const 
> char *network,
>              ds_put_format(&msg, " of lrp %s,", nb_lrp->name);
>          }
>          ds_put_format(&msg, " nexthop ");
> -        if (IN6_IS_ADDR_V4MAPPED(&nexthop)) {
> -            ds_put_format(&msg, IP_FMT,
> -                          IP_ARGS(in6_addr_get_mapped_ipv4(&nexthop)));
> -        } else {
> -            ipv6_format_addr(&nexthop, &msg);
> -        }
> +        ipv6_format_mapped(&nexthop, &msg);
>  
>          VLOG_DBG("%s", ds_cstr(&msg));
>          ds_destroy(&msg);
> @@ -2234,13 +2222,7 @@ add_lb_vip_to_routes_ad(struct hmap *routes_ad, const 
> char *vip_key,
>  
>          ds_put_format(&msg, "Adding lb vip route to <main> routing "
>                        "table: %s, nexthop ", vip_str);
> -
> -        if (IN6_IS_ADDR_V4MAPPED(&nexthop)) {
> -            ds_put_format(&msg, IP_FMT,
> -                          IP_ARGS(in6_addr_get_mapped_ipv4(&nexthop)));
> -        } else {
> -            ipv6_format_addr(&nexthop, &msg);
> -        }
> +        ipv6_format_mapped(&nexthop, &msg);
>  
>          VLOG_DBG("%s", ds_cstr(&msg));
>          ds_destroy(&msg);
> @@ -2769,36 +2751,20 @@ advertise_routes(struct ic_context *ctx,
>      }
>      icsbrec_route_index_destroy_row(isb_route_key);
>  
> +    struct ds prefix = DS_EMPTY_INITIALIZER;
> +
>      /* Create the missing routes in IC-SB */
>      struct ic_route_info *route_adv;
>      HMAP_FOR_EACH_SAFE (route_adv, node, routes_ad) {
> +        ds_clear(&prefix);
> +        ipv6_format_mapped(&route_adv->prefix, &prefix);
Nit: Should probably use normalize_v46_prefix here for the prefix and
drop the ds.
> +        ds_put_format(&prefix, "/%d", route_adv->plen);
> +        char *nexthop_s = normalize_v46(&route_adv->nexthop);
> +
>          isb_route = icsbrec_route_insert(ctx->ovnisb_unlocked_txn);
>          icsbrec_route_set_transit_switch(isb_route, ts_name);
>          icsbrec_route_set_availability_zone(isb_route, az);
> -
> -        /* The prefix and the next hop are formatted independently: an IPv4
> -         * prefix may be advertised with an IPv6 next hop ("IPv4 over IPv6").
> -         */
> -        char *prefix_s, *nexthop_s;
> -        if (IN6_IS_ADDR_V4MAPPED(&route_adv->prefix)) {
> -            ovs_be32 ipv4 = in6_addr_get_mapped_ipv4(&route_adv->prefix);
> -            prefix_s = xasprintf(IP_FMT "/%d", IP_ARGS(ipv4), 
> route_adv->plen);
> -        } else {
> -            char network_s[INET6_ADDRSTRLEN];
> -            inet_ntop(AF_INET6, &route_adv->prefix, network_s,
> -                      INET6_ADDRSTRLEN);
> -            prefix_s = xasprintf("%s/%d", network_s, route_adv->plen);
> -        }
> -        if (IN6_IS_ADDR_V4MAPPED(&route_adv->nexthop)) {
> -            ovs_be32 nh = in6_addr_get_mapped_ipv4(&route_adv->nexthop);
> -            nexthop_s = xasprintf(IP_FMT, IP_ARGS(nh));
> -        } else {
> -            char network_s[INET6_ADDRSTRLEN];
> -            inet_ntop(AF_INET6, &route_adv->nexthop, network_s,
> -                      INET6_ADDRSTRLEN);
> -            nexthop_s = xstrdup(network_s);
> -        }
> -        icsbrec_route_set_ip_prefix(isb_route, prefix_s);
> +        icsbrec_route_set_ip_prefix(isb_route, ds_cstr(&prefix));
>          icsbrec_route_set_nexthop(isb_route, nexthop_s);
>          icsbrec_route_set_origin(isb_route, route_adv->origin);
>          icsbrec_route_set_route_table(isb_route, route_adv->route_table
> @@ -2808,7 +2774,6 @@ advertise_routes(struct ic_context *ctx,
>              icsbrec_route_update_options_setkey(isb_route,
>                  ROUTE_OVERRIDE_CONNECTED, "true");
>          }
> -        free(prefix_s);
>          free(nexthop_s);
>  
>          ad_route_sync_external_ids(route_adv, isb_route);
> @@ -2816,6 +2781,8 @@ advertise_routes(struct ic_context *ctx,
>          hmap_remove(routes_ad, &route_adv->node);
>          free(route_adv);
>      }
> +
> +    ds_destroy(&prefix);
>  }
>  
>  static void
> -- 
> 2.55.0
> 
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> 

Hi Ales,

Patch looks good, just one Nit around clearing the host bits for the
prefix.

Acked-by: Mairtin O'Loingsigh <[email protected]>

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

Reply via email to