From c787891dffdf7a1ce08296c810a20206ea4ff05a Mon Sep 17 00:00:00 2001 From: rd235 Date: Sun, 26 May 2013 14:35:13 +0000 Subject: [PATCH] new hash function git-svn-id: https://svn.code.sf.net/p/vde/svn/trunk@559 d37a7db1-d92d-0410-89df-f68f52f87b57 --- vde-2/src/vde_switch/hash.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/vde-2/src/vde_switch/hash.c b/vde-2/src/vde_switch/hash.c index e5c1809..27dc678 100644 --- a/vde-2/src/vde_switch/hash.c +++ b/vde-2/src/vde_switch/hash.c @@ -53,16 +53,17 @@ static struct hash_entry **h; static int calc_hash(u_int64_t src) { - register int x = src * 0x030507090b0d1113LL; - x = (x ^ x >> 12 ^ x >> 8 ^ x >> 4) & hash_mask; - /*printf("HASH %02x:%02x:%02x:%02x:%02x:%02x V%d -> %d\n", src[0], src[1], src[2], src[3], src[4], src[5],(src[6]>>8)+src[7],x);*/ - return x; + src ^= src >> 33; + src *= 0xff51afd7ed558ccd; + src ^= src >> 33; + src *= 0xc4ceb9fe1a85ec53; + return src & hash_mask; } #if BYTE_ORDER == LITTLE_ENDIAN #define EMAC2MAC6(X) \ (u_int)((X)&0xff), (u_int)(((X)>>8)&0xff), (u_int)(((X)>>16)&0xff), \ - (u_int)(((X)>>24)&0xff), (u_int)(((X)>>32)&0xff), (u_int)(((X)>>40)&0xff) +(u_int)(((X)>>24)&0xff), (u_int)(((X)>>32)&0xff), (u_int)(((X)>>40)&0xff) #elif BYTE_ORDER == BIG_ENDIAN #define EMAC2MAC6(X) \ (u_int)(((X)>>24)&0xff), (u_int)(((X)>>16)&0xff), (u_int)(((X)>>8)&0xff), \ -- 2.11.4.GIT