[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110708164128.50155c9c@nehalam.ftrdhcpuser.net>
Date: Fri, 8 Jul 2011 16:41:28 -0700
From: Stephen Hemminger <shemminger@...tta.com>
To: David Miller <davem@...emloft.net>
Cc: roland@...estorage.com, johnwheffner@...il.com, mj@....cz,
netdev@...r.kernel.org
Subject: Re: ipv4: Simplify ARP hash function.
What about using murmur hash which has a four byte pass as well.
https://sites.google.com/site/murmurhash/
---
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#define u32 uint32_t
/* Do a one pass murmurhash2 */
static u32 arp_hashfn(u32 key, int ifindex, u32 hash_rnd)
{
/* murmurhash mixiing constants */
const unsigned int m = 0x5bd1e995;
const int r = 24;
/* Initialize the hash to a 'random' value */
unsigned int h = ifindex ^ hash_rnd;
unsigned int k = key;
k *= m;
k ^= k >> r;
k *= m;
h *= m;
h ^= k;
/* Do a few final mixes of the hash to ensure the last few
* bytes are well-incorporated.
*/
h ^= h >> 13;
h *= m;
h ^= h >> 15;
return h;
}
int main(int argc, char **argv)
{
u32 rnd, key, hash;
int ifindex;
key = atoi(argv[1]);
ifindex = atoi(argv[2]);
rnd = atoi(argv[3]);
hash = arp_hashfn(key, ifindex, rnd);
printf("%u, %d, %u => %u\n", key, ifindex, rnd, hash);
return 0;
}
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists