diff mbox

[ovs-dev,3/6] meta-flow: Use standard libraries in mf_from_ipv6_string().

Message ID 1447208184-66714-3-git-send-email-jpettit@ovn.org
State Accepted
Headers show

Commit Message

Justin Pettit Nov. 11, 2015, 2:16 a.m. UTC
Signed-off-by: Justin Pettit <jpettit@nicira.com>
---
 lib/meta-flow.c |   39 +++------------------------------------
 1 files changed, 3 insertions(+), 36 deletions(-)

Comments

Ben Pfaff Nov. 23, 2015, 6:01 p.m. UTC | #1
On Tue, Nov 10, 2015 at 06:16:21PM -0800, Justin Pettit wrote:
> Signed-off-by: Justin Pettit <jpettit@nicira.com>

Acked-by: Ben Pfaff <blp@ovn.org>
diff mbox

Patch

diff --git a/lib/meta-flow.c b/lib/meta-flow.c
index 1a10a9b..6ae64c4 100644
--- a/lib/meta-flow.c
+++ b/lib/meta-flow.c
@@ -2048,43 +2048,10 @@  mf_from_ipv4_string(const struct mf_field *mf, const char *s,
 
 static char *
 mf_from_ipv6_string(const struct mf_field *mf, const char *s,
-                    struct in6_addr *value, struct in6_addr *mask)
+                    struct in6_addr *ipv6, struct in6_addr *mask)
 {
-    char *str = xstrdup(s);
-    char *save_ptr = NULL;
-    const char *name, *netmask;
-    int retval;
-
-    ovs_assert(mf->n_bytes == sizeof *value);
-
-    name = strtok_r(str, "/", &save_ptr);
-    retval = name ? lookup_ipv6(name, value) : EINVAL;
-    if (retval) {
-        char *err;
-
-        err = xasprintf("%s: could not convert to IPv6 address", str);
-        free(str);
-
-        return err;
-    }
-
-    netmask = strtok_r(NULL, "/", &save_ptr);
-    if (netmask) {
-        if (inet_pton(AF_INET6, netmask, mask) != 1) {
-            int prefix = atoi(netmask);
-            if (prefix <= 0 || prefix > 128) {
-                free(str);
-                return xasprintf("%s: prefix bits not between 1 and 128", s);
-            } else {
-                *mask = ipv6_create_mask(prefix);
-            }
-        }
-    } else {
-        *mask = in6addr_exact;
-    }
-    free(str);
-
-    return NULL;
+    ovs_assert(mf->n_bytes == sizeof *ipv6);
+    return ipv6_parse_masked(s, ipv6, mask);
 }
 
 static char *