ip_route_input() --> rt_hash()
#define rt_hash(daddr, saddr, idx) / rt_hash_code((__force u32)(__be32)(daddr), / (__force u32)(__be32)(saddr) ^ ((idx) << 5)) static unsigned int rt_hash_code(u32 daddr, u32 saddr) { return (jhash_2words(daddr, saddr, rt_hash_rnd) & rt_hash_mask); } static inline u32 jhash_2words(u32 a, u32 b, u32 initval) { return jhash_3words(a, b, 0, initval); } static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval) { a += JHASH_GOLDEN_RATIO; b += JHASH_GOLDEN_RATIO; c += initval; __jhash_mix(a, b, c); return c; } #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); / } |
Linux route 中rt_hash 源码(转)
最新推荐文章于 2022-08-10 22:11:58 发布