[ovs-dev] [IPv6 v2 05/10] ovn-util: Preallocate address strings.

Justin Pettit jpettit at ovn.org
Fri Jul 29 06:26:15 UTC 2016


Suggested-by: Ben Pfaff <blp at ovn.org>
Signed-off-by: Justin Pettit <jpettit at ovn.org>
---
 ovn/lib/ovn-util.c | 29 ++++++++---------------------
 ovn/lib/ovn-util.h | 14 +++++++-------
 2 files changed, 15 insertions(+), 28 deletions(-)

diff --git a/ovn/lib/ovn-util.c b/ovn/lib/ovn-util.c
index de54624..51e3026 100644
--- a/ovn/lib/ovn-util.c
+++ b/ovn/lib/ovn-util.c
@@ -34,9 +34,10 @@ add_ipv4_netaddr(struct lport_addresses *laddrs, ovs_be32 addr,
     na->network = addr & na->mask;
     na->plen = plen;
 
-    na->addr_s = xasprintf(IP_FMT, IP_ARGS(addr));
-    na->network_s = xasprintf(IP_FMT, IP_ARGS(na->network));
-    na->bcast_s = xasprintf(IP_FMT, IP_ARGS(addr | ~na->mask));
+    ovs_be32 bcast = addr | ~na->mask;
+    inet_ntop(AF_INET, &addr, na->addr_s, INET_ADDRSTRLEN);
+    inet_ntop(AF_INET, &na->network, na->network_s, INET_ADDRSTRLEN);
+    inet_ntop(AF_INET, &bcast, na->bcast_s, INET_ADDRSTRLEN);
 }
 
 static void
@@ -55,11 +56,8 @@ add_ipv6_netaddr(struct lport_addresses *laddrs, struct in6_addr addr,
     na->plen = plen;
     in6_addr_solicited_node(&na->sn_addr, &addr);
 
-    na->addr_s = xmalloc(INET6_ADDRSTRLEN);
     inet_ntop(AF_INET6, &addr, na->addr_s, INET6_ADDRSTRLEN);
-    na->sn_addr_s = xmalloc(INET6_ADDRSTRLEN);
     inet_ntop(AF_INET6, &na->sn_addr, na->sn_addr_s, INET6_ADDRSTRLEN);
-    na->network_s = xmalloc(INET6_ADDRSTRLEN);
     inet_ntop(AF_INET6, &na->network, na->network_s, INET6_ADDRSTRLEN);
 }
 
@@ -85,7 +83,8 @@ extract_lsp_addresses(char *address, struct lport_addresses *laddrs)
         return false;
     }
 
-    laddrs->ea_s = xasprintf(ETH_ADDR_FMT, ETH_ADDR_ARGS(laddrs->ea));
+    snprintf(laddrs->ea_s, sizeof laddrs->ea_s, ETH_ADDR_FMT,
+             ETH_ADDR_ARGS(laddrs->ea));
 
     ovs_be32 ip4;
     struct in6_addr ip6;
@@ -138,7 +137,8 @@ extract_lrp_networks(const struct nbrec_logical_router_port *lrp,
         laddrs->ea = eth_addr_zero;
         return false;
     }
-    laddrs->ea_s = xasprintf(ETH_ADDR_FMT, ETH_ADDR_ARGS(laddrs->ea));
+    snprintf(laddrs->ea_s, sizeof laddrs->ea_s, ETH_ADDR_FMT,
+             ETH_ADDR_ARGS(laddrs->ea));
 
     for (int i = 0; i < lrp->n_networks; i++) {
         ovs_be32 ip4;
@@ -181,20 +181,7 @@ extract_lrp_networks(const struct nbrec_logical_router_port *lrp,
 void
 destroy_lport_addresses(struct lport_addresses *laddrs)
 {
-    free(laddrs->ea_s);
-
-    for (int i = 0; i < laddrs->n_ipv4_addrs; i++) {
-        free(laddrs->ipv4_addrs[i].addr_s);
-        free(laddrs->ipv4_addrs[i].network_s);
-        free(laddrs->ipv4_addrs[i].bcast_s);
-    }
     free(laddrs->ipv4_addrs);
-
-    for (int i = 0; i < laddrs->n_ipv6_addrs; i++) {
-        free(laddrs->ipv6_addrs[i].addr_s);
-        free(laddrs->ipv6_addrs[i].sn_addr_s);
-        free(laddrs->ipv6_addrs[i].network_s);
-    }
     free(laddrs->ipv6_addrs);
 }
 
diff --git a/ovn/lib/ovn-util.h b/ovn/lib/ovn-util.h
index e9f3ec2..97d9483 100644
--- a/ovn/lib/ovn-util.h
+++ b/ovn/lib/ovn-util.h
@@ -26,9 +26,9 @@ struct ipv4_netaddr {
     ovs_be32 network;         /* 192.168.10.0 */
     unsigned int plen;        /* CIDR Prefix: 24. */
 
-    char *addr_s;             /* "192.168.10.123" */
-    char *network_s;          /* "192.168.10.0" */
-    char *bcast_s;            /* "192.168.10.255" */
+    char addr_s[INET_ADDRSTRLEN + 1];     /* "192.168.10.123" */
+    char network_s[INET_ADDRSTRLEN + 1];  /* "192.168.10.0" */
+    char bcast_s[INET_ADDRSTRLEN + 1];    /* "192.168.10.255" */
 };
 
 struct ipv6_netaddr {
@@ -38,13 +38,13 @@ struct ipv6_netaddr {
     struct in6_addr network;  /* fc00:: */
     unsigned int plen;        /* CIDR Prefix: 64 */
 
-    char *addr_s;             /* "fc00::1" */
-    char *sn_addr_s;          /* "ff02:1:ff00::1" */
-    char *network_s;          /* "fc00::" */
+    char addr_s[INET6_ADDRSTRLEN + 1];    /* "fc00::1" */
+    char sn_addr_s[INET6_ADDRSTRLEN + 1]; /* "ff02:1:ff00::1" */
+    char network_s[INET6_ADDRSTRLEN + 1]; /* "fc00::" */
 };
 
 struct lport_addresses {
-    char *ea_s;
+    char ea_s[ETH_ADDR_STRLEN + 1];
     struct eth_addr ea;
     size_t n_ipv4_addrs;
     struct ipv4_netaddr *ipv4_addrs;
-- 
1.9.1




More information about the dev mailing list