]> git.puffer.fish Git - matthieu/frr.git/commitdiff
sockunion: add hash function
authorTimo Teräs <timo.teras@iki.fi>
Wed, 29 Apr 2015 06:43:05 +0000 (09:43 +0300)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 8 Sep 2015 20:18:37 +0000 (13:18 -0700)
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
lib/sockunion.c
lib/sockunion.h

index 59c5ba5dd0658d865a907115d9bba59ba76dac0d..b404cb78f42b3e83555fa4600be912cf4d075b2e 100644 (file)
@@ -27,6 +27,7 @@
 #include "memory.h"
 #include "str.h"
 #include "log.h"
+#include "jhash.h"
 
 #ifndef HAVE_INET_ATON
 int
@@ -603,6 +604,21 @@ sockunion_same (const union sockunion *su1, const union sockunion *su2)
     return 0;
 }
 
+unsigned int
+sockunion_hash (const union sockunion *su)
+{
+  switch (sockunion_family(su))
+    {
+    case AF_INET:
+      return jhash_1word(su->sin.sin_addr.s_addr, 0);
+#ifdef HAVE_IPV6
+    case AF_INET6:
+      return jhash2(su->sin6.sin6_addr.s6_addr32, ZEBRA_NUM_OF(su->sin6.sin6_addr.s6_addr32), 0);
+#endif /* HAVE_IPV6 */
+    }
+  return 0;
+}
+
 /* After TCP connection is established.  Get local address and port. */
 union sockunion *
 sockunion_getsockname (int fd)
index 78356e4cb76b62c6a73fe0f09520a6c82cceebd2..e66b0b8e83d6674cc10a7b9810c80b7cbb004233 100644 (file)
@@ -89,6 +89,7 @@ extern int str2sockunion (const char *, union sockunion *);
 extern const char *sockunion2str (union sockunion *, char *, size_t);
 extern int sockunion_cmp (union sockunion *, union sockunion *);
 extern int sockunion_same (const union sockunion *, const union sockunion *);
+extern unsigned int sockunion_hash (const union sockunion *);
 
 extern union sockunion *sockunion_str2su (const char *str);
 extern int sockunion_accept (int sock, union sockunion *);