~mdw
/
tripe
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
server/test.c: Trace the key-exchange and bulk crypto details.
[tripe]
/
server
/
addrmap.c
diff --git
a/server/addrmap.c
b/server/addrmap.c
index
6091dbf
..
76a358e
100644
(file)
--- a/
server/addrmap.c
+++ b/
server/addrmap.c
@@
-74,11
+74,21
@@
void am_destroy(addrmap *m)
static uint32 hash(const addr *a)
{
static uint32 hash(const addr *a)
{
+ size_t i;
+ uint32 h;
+
switch (a->sa.sa_family) {
case AF_INET:
return (U32(0x4eaac1b7ul*AF_INET +
0xa5dbc837ul*a->sin.sin_addr.s_addr +
0x3b049e83ul*a->sin.sin_port));
switch (a->sa.sa_family) {
case AF_INET:
return (U32(0x4eaac1b7ul*AF_INET +
0xa5dbc837ul*a->sin.sin_addr.s_addr +
0x3b049e83ul*a->sin.sin_port));
+ case AF_INET6:
+ for (i = 0, h = 0; i < 16; i++)
+ h = 0x6bd26a67ul*h + a->sin6.sin6_addr.s6_addr[i];
+ return (U32(0x4eaac1b7ul*AF_INET6 +
+ 0xa5dbc837ul*h +
+ 0x1d94eab4ul*a->sin6.sin6_scope_id +
+ 0x3b049e83ul*a->sin6.sin6_port));
default:
abort();
}
default:
abort();
}
@@
-99,6
+109,10
@@
static int addreq(const addr *a, const addr *b)
case AF_INET:
return (a->sin.sin_addr.s_addr == b->sin.sin_addr.s_addr &&
a->sin.sin_port == b->sin.sin_port);
case AF_INET:
return (a->sin.sin_addr.s_addr == b->sin.sin_addr.s_addr &&
a->sin.sin_port == b->sin.sin_port);
+ case AF_INET6:
+ return (!memcmp(a->sin6.sin6_addr.s6_addr,
+ b->sin6.sin6_addr.s6_addr, 16) &&
+ a->sin6.sin6_port == b->sin6.sin6_port);
default:
abort();
}
default:
abort();
}