linux内核jhash,Linux内核Jhash

static uint32_t jhash(const void *key, unsigned int length, unsigned int initval);

static int32_t mac_hash(const unsigned char *mac);

#define __jhash_mix(a, b, c) \

{ \

a -= b; a -= c; a ^= (c>>13); \

b -= c; b -= a; b ^= (a<<8); \

c -= a; c -= b; c ^= (b>>13); \

a -= b; a -= c; a ^= (c>>12); \

b -= c; b -= a; b ^= (a<<16); \

c -= a; c -= b; c ^= (b>>5); \

a -= b; a -= c; a ^= (c>>3); \

b -= c; b -= a; b ^= (a<<10); \

c -= a; c -= b; c ^= (b>>15); \

}

#define JHASH_GOLDEN_RATIO 0x9e3779b9

static uint32_t jhash(const void *key, unsigned int length, unsigned int initval)

{

unsigned int a, b, c, len;

const unsigned char *k = key;

len = length;

a = b = JHASH_GOLDEN_RATIO;

c = initval;

while (len >= 12) {

a += (k[0] +((unsigned int)k[1]<<8) +((unsigned int)k[2]<<16) +((unsigned int)k[3]<<24));

b += (k[4] +((unsigned int)k[5]<<8) +((unsigned int)k[6]<<16) +((unsigned int)k[7]<<24));

c += (k[8] +((unsigned int)k[9]<<8) +((unsigned int)k[10]<<16)+((unsigned int)k[11]<<24));

__jhash_mix(a,b,c);

k += 12;

len -= 12;

}

c += length;

switch (len) {

case 11: c += ((unsigned int)k[10]<<24);

case 10: c += ((unsigned int)k[9]<<16);

case 9 : c += ((unsigned int)k[8]<<8);

case 8 : b += ((unsigned int)k[7]<<24);

case 7 : b += ((unsigned int)k[6]<<16);

case 6 : b += ((unsigned int)k[5]<<8);

case 5 : b += k[4];

case 4 : a += ((unsigned int)k[3]<<24);

case 3 : a += ((unsigned int)k[2]<<16);

case 2 : a += ((unsigned int)k[1]<<8);

case 1 : a += k[0];

default: break;

};

__jhash_mix(a,b,c);

return c;

}

static int32_t mac_hash(const unsigned char *mac)

{

#ifndef ETH_ALEN

#define ETH_ALEN 6

#endif

return jhash(mac, ETH_ALEN, 0) & (MAC_HASH_SIZE - 1);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值