From: Timo Teräs Date: Wed, 29 Apr 2015 06:43:05 +0000 (+0300) Subject: sockunion: add hash function X-Git-Tag: frr-2.0-rc1~1264 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=7cb5cdbb346504cac853499b2977b47c34ea0a43;p=matthieu%2Ffrr.git sockunion: add hash function Signed-off-by: Timo Teräs Signed-off-by: David Lamparter --- diff --git a/lib/sockunion.c b/lib/sockunion.c index 59c5ba5dd0..b404cb78f4 100644 --- a/lib/sockunion.c +++ b/lib/sockunion.c @@ -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) diff --git a/lib/sockunion.h b/lib/sockunion.h index 78356e4cb7..e66b0b8e83 100644 --- a/lib/sockunion.h +++ b/lib/sockunion.h @@ -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 *);