[ovs-dev,01/15] lib: add ipv6 helper functions for tnl_config
diff mbox

Message ID 1445534948-10538-2-git-send-email-cascardo@redhat.com
State Accepted
Headers show

Commit Message

Thadeu Lima de Souza Cascardo Oct. 22, 2015, 5:28 p.m. UTC
From: Jiri Benc <jbenc@redhat.com>

These functions will be used by the next patches.

Signed-off-by: Jiri Benc <jbenc@redhat.com>
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@redhat.com>
---
 lib/smap.c        | 11 +++++++++++
 lib/smap.h        |  1 +
 lib/socket-util.c |  9 +++++++++
 lib/socket-util.h |  1 +
 4 files changed, 22 insertions(+)

Comments

Ben Pfaff Nov. 10, 2015, 6 p.m. UTC | #1
On Thu, Oct 22, 2015 at 03:28:54PM -0200, Thadeu Lima de Souza Cascardo wrote:
> From: Jiri Benc <jbenc@redhat.com>
> 
> These functions will be used by the next patches.
> 
> Signed-off-by: Jiri Benc <jbenc@redhat.com>
> Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@redhat.com>

Applied, thanks!

> +bool
> +addr_is_ipv6(const char *host_name)
> +{
> +        return strchr(host_name, ':') != NULL;
> +}

I corrected the indentation above.

Patch
diff mbox

diff --git a/lib/smap.c b/lib/smap.c
index 1d59f56..2c41013 100644
--- a/lib/smap.c
+++ b/lib/smap.c
@@ -95,6 +95,17 @@  smap_add_format(struct smap *smap, const char *key, const char *format, ...)
                hash_bytes(key, key_len, 0));
 }
 
+/* Adds 'key' paired with a string representation of 'addr'. It is the
+ * caller's responsibility to avoid duplicate keys if desirable. */
+void
+smap_add_ipv6(struct smap *smap, const char *key, struct in6_addr *addr)
+{
+    char buf[INET6_ADDRSTRLEN];
+
+    inet_ntop(AF_INET6, addr, buf, sizeof buf);
+    smap_add(smap, key, buf);
+}
+
 /* Searches for 'key' in 'smap'.  If it does not already exists, adds it.
  * Otherwise, changes its value to 'value'. */
 void
diff --git a/lib/smap.h b/lib/smap.h
index 3bfbb71..489497a 100644
--- a/lib/smap.h
+++ b/lib/smap.h
@@ -66,6 +66,7 @@  struct smap_node *smap_add_nocopy(struct smap *, char *, char *);
 bool smap_add_once(struct smap *, const char *, const char *);
 void smap_add_format(struct smap *, const char *key, const char *, ...)
     OVS_PRINTF_FORMAT(3, 4);
+void smap_add_ipv6(struct smap *, const char *, struct in6_addr *);
 void smap_replace(struct smap *, const char *, const char *);
 
 void smap_remove(struct smap *, const char *);
diff --git a/lib/socket-util.c b/lib/socket-util.c
index 206e17b..97ee01b 100644
--- a/lib/socket-util.c
+++ b/lib/socket-util.c
@@ -136,6 +136,15 @@  set_dscp(int fd, int family, uint8_t dscp)
     return retval ? sock_errno() : 0;
 }
 
+/* Checks whether 'host_name' is an IPv4 or IPv6 address.  It is assumed
+ * that 'host_name' is valid.  Returns false if it is IPv4 address, true if
+ * it is IPv6 address. */
+bool
+addr_is_ipv6(const char *host_name)
+{
+        return strchr(host_name, ':') != NULL;
+}
+
 /* Translates 'host_name', which must be a string representation of an IP
  * address, into a numeric IP address in '*addr'.  Returns 0 if successful,
  * otherwise a positive errno value. */
diff --git a/lib/socket-util.h b/lib/socket-util.h
index 8015c7f..c3c1224 100644
--- a/lib/socket-util.h
+++ b/lib/socket-util.h
@@ -32,6 +32,7 @@  void xset_nonblocking(int fd);
 void setsockopt_tcp_nodelay(int fd);
 int set_dscp(int fd, int family, uint8_t dscp);
 
+bool addr_is_ipv6(const char *host_name);
 int lookup_ip(const char *host_name, struct in_addr *address);
 int lookup_ipv6(const char *host_name, struct in6_addr *address);