On Wed, Oct 19, 2022 at 1:51 AM Numan Siddique <num...@ovn.org> wrote:
> On Tue, Oct 18, 2022 at 7:23 AM Ales Musil <amu...@redhat.com> wrote: > > > > The current code was parsing the ip twice, once for > > the "inet_parse_active" and second time by calling > > either "ip_parse" or "ipv6_parse". Avoid that by > > getting the "in6_addr" directly from "sockaddr_storage". > > > > Signed-off-by: Ales Musil <amu...@redhat.com> > > Thanks for the patch. > > LGTM. Can you please also update the function comments in > lib/ovn-util.c now that the function > also sets 'struct in6_addr *ip'. > > Acked-by: Numan Siddique <num...@ovn.org> > > Numan > Comment updated in v2. Thanks, Ales > > > --- > > lib/lb.c | 20 +++----------------- > > lib/ovn-util.c | 5 ++++- > > lib/ovn-util.h | 3 ++- > > utilities/ovn-trace.c | 20 ++++++-------------- > > 4 files changed, 15 insertions(+), 33 deletions(-) > > > > diff --git a/lib/lb.c b/lib/lb.c > > index 77674ea28..ab5de38a8 100644 > > --- a/lib/lb.c > > +++ b/lib/lb.c > > @@ -78,18 +78,11 @@ bool ovn_lb_vip_init(struct ovn_lb_vip *lb_vip, > const char *lb_key, > > int addr_family; > > > > if (!ip_address_and_port_from_lb_key(lb_key, &lb_vip->vip_str, > > - &lb_vip->vip_port, > &addr_family)) { > > + &lb_vip->vip, > &lb_vip->vip_port, > > + &addr_family)) { > > return false; > > } > > > > - if (addr_family == AF_INET) { > > - ovs_be32 vip4; > > - ip_parse(lb_vip->vip_str, &vip4); > > - in6_addr_set_mapped_ipv4(&lb_vip->vip, vip4); > > - } else { > > - ipv6_parse(lb_vip->vip_str, &lb_vip->vip); > > - } > > - > > /* Format for backend ips: "IP1:port1,IP2:port2,...". */ > > size_t n_backends = 0; > > size_t n_allocated_backends = 0; > > @@ -108,7 +101,7 @@ bool ovn_lb_vip_init(struct ovn_lb_vip *lb_vip, > const char *lb_key, > > struct ovn_lb_backend *backend = &lb_vip->backends[n_backends]; > > int backend_addr_family; > > if (!ip_address_and_port_from_lb_key(token, &backend->ip_str, > > - &backend->port, > > + &backend->ip, > &backend->port, > > &backend_addr_family)) { > > continue; > > } > > @@ -118,13 +111,6 @@ bool ovn_lb_vip_init(struct ovn_lb_vip *lb_vip, > const char *lb_key, > > continue; > > } > > > > - if (addr_family == AF_INET) { > > - ovs_be32 ip4; > > - ip_parse(backend->ip_str, &ip4); > > - in6_addr_set_mapped_ipv4(&backend->ip, ip4); > > - } else { > > - ipv6_parse(backend->ip_str, &backend->ip); > > - } > > n_backends++; > > } > > free(tokstr); > > diff --git a/lib/ovn-util.c b/lib/ovn-util.c > > index d80db179a..13659cd70 100644 > > --- a/lib/ovn-util.c > > +++ b/lib/ovn-util.c > > @@ -788,7 +788,8 @@ ovn_smap_get_uint(const struct smap *smap, const > char *key, unsigned int def) > > */ > > bool > > ip_address_and_port_from_lb_key(const char *key, char **ip_address, > > - uint16_t *port, int *addr_family) > > + struct in6_addr *ip, uint16_t *port, > > + int *addr_family) > > { > > struct sockaddr_storage ss; > > if (!inet_parse_active(key, 0, &ss, false, NULL)) { > > @@ -798,12 +799,14 @@ ip_address_and_port_from_lb_key(const char *key, > char **ip_address, > > *ip_address = NULL; > > *port = 0; > > *addr_family = 0; > > + memset(ip, 0, sizeof(*ip)); > > return false; > > } > > > > struct ds s = DS_EMPTY_INITIALIZER; > > ss_format_address_nobracks(&ss, &s); > > *ip_address = ds_steal_cstr(&s); > > + *ip = ss_get_address(&ss); > > *port = ss_get_port(&ss); > > *addr_family = ss.ss_family; > > return true; > > diff --git a/lib/ovn-util.h b/lib/ovn-util.h > > index 145f974ed..a1f1cf0ad 100644 > > --- a/lib/ovn-util.h > > +++ b/lib/ovn-util.h > > @@ -241,7 +241,8 @@ char *str_tolower(const char *orig); > > case OVN_OPT_USER_GROUP: > > > > bool ip_address_and_port_from_lb_key(const char *key, char **ip_address, > > - uint16_t *port, int *addr_family); > > + struct in6_addr *ip, uint16_t > *port, > > + int *addr_family); > > > > /* Returns the internal OVN version. The caller must free the returned > > * value. */ > > diff --git a/utilities/ovn-trace.c b/utilities/ovn-trace.c > > index d9e7129d9..6fa5137d9 100644 > > --- a/utilities/ovn-trace.c > > +++ b/utilities/ovn-trace.c > > @@ -2601,23 +2601,15 @@ get_lb_vip_data(struct flow *uflow, struct > in6_addr *vip, > > SBREC_LOAD_BALANCER_FOR_EACH (sbdb, ovnsb_idl) { > > struct smap_node *node; > > SMAP_FOR_EACH (node, &sbdb->vips) { > > - if (!ip_address_and_port_from_lb_key(node->key, vip_str, > > - port, &family)) { > > + if (!ip_address_and_port_from_lb_key(node->key, vip_str, > vip, port, > > + &family)) { > > continue; > > } > > > > - if (family == AF_INET) { > > - ovs_be32 vip4; > > - ip_parse(*vip_str, &vip4); > > - in6_addr_set_mapped_ipv4(vip, vip4); > > - if (vip4 == uflow->ct_nw_dst) { > > - return true; > > - } > > - } else { > > - ipv6_parse(*vip_str, vip); > > - if (ipv6_addr_equals(vip, &uflow->ct_ipv6_dst)) { > > - return true; > > - } > > + if ((family == AF_INET > > + && in6_addr_get_mapped_ipv4(vip) == uflow->ct_nw_dst) > > + || ipv6_addr_equals(vip, &uflow->ct_ipv6_dst)) { > > + return true; > > } > > free(*vip_str); > > } > > -- > > 2.37.3 > > > > _______________________________________________ > > dev mailing list > > d...@openvswitch.org > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > > > -- Ales Musil Senior Software Engineer - OVN Core Red Hat EMEA <https://www.redhat.com> amu...@redhat.com IM: amusil <https://red.ht/sig> _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev