summaryrefslogtreecommitdiffstats
path: root/lib/ipv4.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ipv4.h')
-rw-r--r--lib/ipv4.h6
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/ipv4.h b/lib/ipv4.h
index c37ea80..4ae3e95 100644
--- a/lib/ipv4.h
+++ b/lib/ipv4.h
@@ -61,10 +61,12 @@ typedef u32 ip_addr;
int ipv4_classify(u32);
u32 ipv4_class_mask(u32);
-/* FIXME: Is this hash function uniformly distributed over standard routing tables? */
static inline unsigned ipv4_hash(u32 a)
{
- return a ^ (a >> 16) ^ (a >> 24);
+ /* Returns a 16-bit value */
+ a ^= a >> 16;
+ a ^= a << 10;
+ return a & 0xffff;
}
#endif