Message ID | 20200723193651.3503692-1-mmichels@redhat.com |
---|---|
State | Superseded |
Headers | show |
Series | [ovs-dev,ovn,v2,1/3] Add IP address normalization to ovn-utils. | expand |
On Fri, Jul 24, 2020 at 1:07 AM Mark Michelson <mmichels@redhat.com> wrote: > This moves a couple of existing IP address normalization routines from > ovn-nbctl.c to ovn-util.c. It also adds a new normalization function for > a v46_address. This new function is not used in this commit but will be > used in a future commit in this series. > > Signed-off-by: Mark Michelson <mmichels@redhat.com> > Acked-by: Numan Siddique <numans@ovn.org> Thanks Numan > --- > lib/ovn-util.c | 39 +++++++++++++++++++++++++++++++++++++++ > lib/ovn-util.h | 4 ++++ > utilities/ovn-nbctl.c | 29 ----------------------------- > 3 files changed, 43 insertions(+), 29 deletions(-) > > diff --git a/lib/ovn-util.c b/lib/ovn-util.c > index f09fdaffe..cdb5e18fb 100644 > --- a/lib/ovn-util.c > +++ b/lib/ovn-util.c > @@ -589,6 +589,45 @@ ip46_equals(const struct v46_ip *addr1, const struct > v46_ip *addr2) > IN6_ARE_ADDR_EQUAL(&addr1->ipv6, &addr2->ipv6))); > } > > +/* The caller must free the returned string. */ > +char * > +normalize_ipv4_prefix(ovs_be32 ipv4, unsigned int plen) > +{ > + ovs_be32 network = ipv4 & be32_prefix_mask(plen); > + if (plen == 32) { > + return xasprintf(IP_FMT, IP_ARGS(network)); > + } else { > + return xasprintf(IP_FMT "/%d", IP_ARGS(network), plen); > + } > +} > + > +/* The caller must free the returned string. */ > +char * > +normalize_ipv6_prefix(struct in6_addr ipv6, unsigned int plen) > +{ > + char network_s[INET6_ADDRSTRLEN]; > + > + struct in6_addr mask = ipv6_create_mask(plen); > + struct in6_addr network = ipv6_addr_bitand(&ipv6, &mask); > + > + inet_ntop(AF_INET6, &network, network_s, INET6_ADDRSTRLEN); > + if (plen == 128) { > + return xasprintf("%s", network_s); > + } else { > + return xasprintf("%s/%d", network_s, plen); > + } > +} > + > +char * > +normalize_v46_prefix(const struct v46_ip *prefix, unsigned int plen) > +{ > + if (prefix->family == AF_INET) { > + return normalize_ipv4_prefix(prefix->ipv4, plen); > + } else { > + return normalize_ipv6_prefix(prefix->ipv6, plen); > + } > +} > + > char * > str_tolower(const char *orig) > { > diff --git a/lib/ovn-util.h b/lib/ovn-util.h > index 4e08ee01e..0f7b501f1 100644 > --- a/lib/ovn-util.h > +++ b/lib/ovn-util.h > @@ -144,6 +144,10 @@ bool ip46_parse_cidr(const char *str, struct v46_ip > *prefix, > unsigned int *plen); > bool ip46_equals(const struct v46_ip *addr1, const struct v46_ip *addr2); > > +char *normalize_ipv4_prefix(ovs_be32 ipv4, unsigned int plen); > +char *normalize_ipv6_prefix(struct in6_addr ipv6, unsigned int plen); > +char *normalize_v46_prefix(const struct v46_ip *prefix, unsigned int > plen); > + > /* Returns a lowercase copy of orig. > * Caller must free the returned string. > */ > diff --git a/utilities/ovn-nbctl.c b/utilities/ovn-nbctl.c > index 7578b9928..0079ad5a6 100644 > --- a/utilities/ovn-nbctl.c > +++ b/utilities/ovn-nbctl.c > @@ -3482,35 +3482,6 @@ nbctl_dhcp_options_list(struct ctl_context *ctx) > free(nodes); > } > > -/* The caller must free the returned string. */ > -static char * > -normalize_ipv4_prefix(ovs_be32 ipv4, unsigned int plen) > -{ > - ovs_be32 network = ipv4 & be32_prefix_mask(plen); > - if (plen == 32) { > - return xasprintf(IP_FMT, IP_ARGS(network)); > - } else { > - return xasprintf(IP_FMT"/%d", IP_ARGS(network), plen); > - } > -} > - > -/* The caller must free the returned string. */ > -static char * > -normalize_ipv6_prefix(struct in6_addr ipv6, unsigned int plen) > -{ > - char network_s[INET6_ADDRSTRLEN]; > - > - struct in6_addr mask = ipv6_create_mask(plen); > - struct in6_addr network = ipv6_addr_bitand(&ipv6, &mask); > - > - inet_ntop(AF_INET6, &network, network_s, INET6_ADDRSTRLEN); > - if (plen == 128) { > - return xasprintf("%s", network_s); > - } else { > - return xasprintf("%s/%d", network_s, plen); > - } > -} > - > static char * > normalize_ipv4_prefix_str(const char *orig_prefix) > { > -- > 2.25.4 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > >
diff --git a/lib/ovn-util.c b/lib/ovn-util.c index f09fdaffe..cdb5e18fb 100644 --- a/lib/ovn-util.c +++ b/lib/ovn-util.c @@ -589,6 +589,45 @@ ip46_equals(const struct v46_ip *addr1, const struct v46_ip *addr2) IN6_ARE_ADDR_EQUAL(&addr1->ipv6, &addr2->ipv6))); } +/* The caller must free the returned string. */ +char * +normalize_ipv4_prefix(ovs_be32 ipv4, unsigned int plen) +{ + ovs_be32 network = ipv4 & be32_prefix_mask(plen); + if (plen == 32) { + return xasprintf(IP_FMT, IP_ARGS(network)); + } else { + return xasprintf(IP_FMT "/%d", IP_ARGS(network), plen); + } +} + +/* The caller must free the returned string. */ +char * +normalize_ipv6_prefix(struct in6_addr ipv6, unsigned int plen) +{ + char network_s[INET6_ADDRSTRLEN]; + + struct in6_addr mask = ipv6_create_mask(plen); + struct in6_addr network = ipv6_addr_bitand(&ipv6, &mask); + + inet_ntop(AF_INET6, &network, network_s, INET6_ADDRSTRLEN); + if (plen == 128) { + return xasprintf("%s", network_s); + } else { + return xasprintf("%s/%d", network_s, plen); + } +} + +char * +normalize_v46_prefix(const struct v46_ip *prefix, unsigned int plen) +{ + if (prefix->family == AF_INET) { + return normalize_ipv4_prefix(prefix->ipv4, plen); + } else { + return normalize_ipv6_prefix(prefix->ipv6, plen); + } +} + char * str_tolower(const char *orig) { diff --git a/lib/ovn-util.h b/lib/ovn-util.h index 4e08ee01e..0f7b501f1 100644 --- a/lib/ovn-util.h +++ b/lib/ovn-util.h @@ -144,6 +144,10 @@ bool ip46_parse_cidr(const char *str, struct v46_ip *prefix, unsigned int *plen); bool ip46_equals(const struct v46_ip *addr1, const struct v46_ip *addr2); +char *normalize_ipv4_prefix(ovs_be32 ipv4, unsigned int plen); +char *normalize_ipv6_prefix(struct in6_addr ipv6, unsigned int plen); +char *normalize_v46_prefix(const struct v46_ip *prefix, unsigned int plen); + /* Returns a lowercase copy of orig. * Caller must free the returned string. */ diff --git a/utilities/ovn-nbctl.c b/utilities/ovn-nbctl.c index 7578b9928..0079ad5a6 100644 --- a/utilities/ovn-nbctl.c +++ b/utilities/ovn-nbctl.c @@ -3482,35 +3482,6 @@ nbctl_dhcp_options_list(struct ctl_context *ctx) free(nodes); } -/* The caller must free the returned string. */ -static char * -normalize_ipv4_prefix(ovs_be32 ipv4, unsigned int plen) -{ - ovs_be32 network = ipv4 & be32_prefix_mask(plen); - if (plen == 32) { - return xasprintf(IP_FMT, IP_ARGS(network)); - } else { - return xasprintf(IP_FMT"/%d", IP_ARGS(network), plen); - } -} - -/* The caller must free the returned string. */ -static char * -normalize_ipv6_prefix(struct in6_addr ipv6, unsigned int plen) -{ - char network_s[INET6_ADDRSTRLEN]; - - struct in6_addr mask = ipv6_create_mask(plen); - struct in6_addr network = ipv6_addr_bitand(&ipv6, &mask); - - inet_ntop(AF_INET6, &network, network_s, INET6_ADDRSTRLEN); - if (plen == 128) { - return xasprintf("%s", network_s); - } else { - return xasprintf("%s/%d", network_s, plen); - } -} - static char * normalize_ipv4_prefix_str(const char *orig_prefix) {
This moves a couple of existing IP address normalization routines from ovn-nbctl.c to ovn-util.c. It also adds a new normalization function for a v46_address. This new function is not used in this commit but will be used in a future commit in this series. Signed-off-by: Mark Michelson <mmichels@redhat.com> --- lib/ovn-util.c | 39 +++++++++++++++++++++++++++++++++++++++ lib/ovn-util.h | 4 ++++ utilities/ovn-nbctl.c | 29 ----------------------------- 3 files changed, 43 insertions(+), 29 deletions(-)