On Fri, Oct 17, 2025 at 1:59 PM Mairtin O'Loingsigh via dev <
[email protected]> wrote:

> Move these helpers to utils so ovn-ic-nbctl can also use them.
>
> Signed-off-by: Mairtin O'Loingsigh <[email protected]>
> ---
>

Hi Mairtin,

thank you for the v5. I have only one nit down below.


>  lib/ovn-util.c        | 101 ++++++++++++++++++++++++++++++++++++++++++
>  lib/ovn-util.h        |  14 ++++++
>  utilities/ovn-nbctl.c |  98 ----------------------------------------
>  3 files changed, 115 insertions(+), 98 deletions(-)
>
> diff --git a/lib/ovn-util.c b/lib/ovn-util.c
> index 910f67304..d27983d1e 100644
> --- a/lib/ovn-util.c
> +++ b/lib/ovn-util.c
> @@ -1547,3 +1547,104 @@ ovn_is_valid_vni(int64_t vni)
>  {
>      return vni >= 0 && (vni <= (1 << 24) - 1);
>  }
> +
> +struct sset *
> +lrp_network_sset(const char **networks, int n_networks)
> +{
> +    struct sset *network_set = xzalloc(sizeof *network_set);
> +    sset_init(network_set);
> +    for (int i = 0; i < n_networks; i++) {
> +        char *norm = normalize_prefix_str(networks[i]);
> +        if (!norm) {
> +            sset_destroy(network_set);
> +            free(network_set);
> +            return NULL;
> +        }
> +
> +        sset_add_and_free(network_set, norm);
> +    }
> +
> +    return network_set;
> +}
> +
> +char *
> +normalize_ipv4_prefix_str(const char *orig_prefix)
> +{
> +    unsigned int plen;
> +    ovs_be32 ipv4;
> +    char *error;
> +
> +    error = ip_parse_cidr(orig_prefix, &ipv4, &plen);
> +    if (error) {
> +        free(error);
> +        return NULL;
> +    }
> +
> +    return normalize_ipv4_prefix(ipv4, plen);
> +}
> +
> +char *
> +normalize_ipv6_prefix_str(const char *orig_prefix)
> +{
> +    unsigned int plen;
> +    struct in6_addr ipv6;
> +    char *error;
> +
> +    error = ipv6_parse_cidr(orig_prefix, &ipv6, &plen);
> +    if (error) {
> +        free(error);
> +        return NULL;
> +    }
> +
> +    return normalize_ipv6_prefix(&ipv6, plen);
> +}
> +
> +char *
> +normalize_prefix_str(const char *orig_prefix)
> +{
> +    char *ret;
> +
> +    ret = normalize_ipv4_prefix_str(orig_prefix);
> +    if (!ret) {
> +        ret = normalize_ipv6_prefix_str(orig_prefix);
> +    }
> +
> +    return ret;
> +}
> +
> +char *
> +normalize_ipv4_addr_str(const char *orig_addr)
> +{
> +    ovs_be32 ipv4;
> +
> +    if (!ip_parse(orig_addr, &ipv4)) {
> +        return NULL;
> +    }
> +
> +    return normalize_ipv4_prefix(ipv4, 32);
> +}
> +
> +char *
> +normalize_ipv6_addr_str(const char *orig_addr)
> +{
> +    struct in6_addr ipv6;
> +
> +    if (!ipv6_parse(orig_addr, &ipv6)) {
> +        return NULL;
> +    }
> +
> +    return normalize_ipv6_prefix(&ipv6, 128);
> +}
> +
> +char *
> +normalize_addr_str(const char *orig_addr)
> +{
> +    char *ret;
> +
> +    ret = normalize_ipv4_addr_str(orig_addr);
> +    if (!ret) {
> +        ret = normalize_ipv6_addr_str(orig_addr);
> +    }
> +
> +    return ret;
> +}
> diff --git a/lib/ovn-util.h b/lib/ovn-util.h
> index 3aca4ca75..26b7e133d 100644
> --- a/lib/ovn-util.h
> +++ b/lib/ovn-util.h
> @@ -672,4 +672,18 @@ bool datapath_get_nb_uuid(const struct
> sbrec_datapath_binding *sb,
>
>  const char *datapath_get_nb_type(const struct sbrec_datapath_binding *sb);
>
> +struct sset *lrp_network_sset(const char **networks, int n_networks);
> +
> +char *normalize_ipv4_prefix_str(const char *orig_prefix);
> +
> +char *normalize_ipv6_prefix_str(const char *orig_prefix);
> +
> +char *normalize_prefix_str(const char *orig_prefix);
> +
> +char *normalize_ipv4_addr_str(const char *orig_addr);
> +
> +char *normalize_ipv6_addr_str(const char *orig_addr);
> +
> +OVS_UNUSED char *normalize_addr_str(const char *orig_addr);
>

nit: No need for OVS_UNUSED.


> +
>  #endif /* OVN_UTIL_H */
> diff --git a/utilities/ovn-nbctl.c b/utilities/ovn-nbctl.c
> index 058ad8968..fceb1a567 100644
> --- a/utilities/ovn-nbctl.c
> +++ b/utilities/ovn-nbctl.c
> @@ -4534,87 +4534,6 @@ nbctl_dhcp_options_list(struct ctl_context *ctx)
>      free(nodes);
>  }
>
> -static char *
> -normalize_ipv4_prefix_str(const char *orig_prefix)
> -{
> -    unsigned int plen;
> -    ovs_be32 ipv4;
> -    char *error;
> -
> -    error = ip_parse_cidr(orig_prefix, &ipv4, &plen);
> -    if (error) {
> -        free(error);
> -        return NULL;
> -    }
> -    return normalize_ipv4_prefix(ipv4, plen);
> -}
> -
> -static char *
> -normalize_ipv6_prefix_str(const char *orig_prefix)
> -{
> -    unsigned int plen;
> -    struct in6_addr ipv6;
> -    char *error;
> -
> -    error = ipv6_parse_cidr(orig_prefix, &ipv6, &plen);
> -    if (error) {
> -        free(error);
> -        return NULL;
> -    }
> -    return normalize_ipv6_prefix(&ipv6, plen);
> -}
> -
> -/* The caller must free the returned string. */
> -static char *
> -normalize_prefix_str(const char *orig_prefix)
> -{
> -    char *ret;
> -
> -    ret = normalize_ipv4_prefix_str(orig_prefix);
> -    if (!ret) {
> -        ret = normalize_ipv6_prefix_str(orig_prefix);
> -    }
> -    return ret;
> -}
> -
> -static char *
> -normalize_ipv4_addr_str(const char *orig_addr)
> -{
> -    ovs_be32 ipv4;
> -
> -    if (!ip_parse(orig_addr, &ipv4)) {
> -        return NULL;
> -    }
> -
> -    return normalize_ipv4_prefix(ipv4, 32);
> -}
> -
> -static char *
> -normalize_ipv6_addr_str(const char *orig_addr)
> -{
> -    struct in6_addr ipv6;
> -
> -    if (!ipv6_parse(orig_addr, &ipv6)) {
> -        return NULL;
> -    }
> -
> -    return normalize_ipv6_prefix(&ipv6, 128);
> -}
> -
> -/* Similar to normalize_prefix_str but must be an un-masked address.
> - * The caller must free the returned string. */
> -OVS_UNUSED static char *
> -normalize_addr_str(const char *orig_addr)
> -{
> -    char *ret;
> -
> -    ret = normalize_ipv4_addr_str(orig_addr);
> -    if (!ret) {
> -        ret = normalize_ipv6_addr_str(orig_addr);
> -    }
> -    return ret;
> -}
> -
>  static bool
>  ip_in_lrp_networks(const struct nbrec_logical_router_port *lrp,
>                     const char *ip_s);
> @@ -6552,23 +6471,6 @@ nbctl_lrp_get_gateway_chassis(struct ctl_context
> *ctx)
>      free(gcs);
>  }
>
> -static struct sset *
> -lrp_network_sset(const char **networks, int n_networks)
> -{
> -    struct sset *network_set = xzalloc(sizeof *network_set);
> -    sset_init(network_set);
> -    for (int i = 0; i < n_networks; i++) {
> -        char *norm = normalize_prefix_str(networks[i]);
> -        if (!norm) {
> -            sset_destroy(network_set);
> -            free(network_set);
> -            return NULL;
> -        }
> -        sset_add_and_free(network_set, norm);
> -    }
> -    return network_set;
> -}
> -
>  static void
>  nbctl_pre_lrp_add(struct ctl_context *ctx)
>  {
> --
> 2.51.0
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>
With that addressed:
Acked-by: Ales Musil <[email protected]>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to