ipv6: add ipv6_addr_hash() helper
[deliverable/linux.git] / include / net / ipv6.h
index f695f39e8926eb2e81cfad75263c683f11f690f5..01c34b363a34d1f7b126d55dffd8e170963528ed 100644 (file)
@@ -419,6 +419,19 @@ static inline bool ipv6_addr_any(const struct in6_addr *a)
 #endif
 }
 
+static inline u32 ipv6_addr_hash(const struct in6_addr *a)
+{
+#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && BITS_PER_LONG == 64
+       const unsigned long *ul = (const unsigned long *)a;
+       unsigned long x = ul[0] ^ ul[1];
+
+       return (u32)(x ^ (x >> 32));
+#else
+       return (__force u32)(a->s6_addr32[0] ^ a->s6_addr32[1] ^
+                            a->s6_addr32[2] ^ a->s6_addr32[3]);
+#endif
+}
+
 static inline bool ipv6_addr_loopback(const struct in6_addr *a)
 {
        return (a->s6_addr32[0] | a->s6_addr32[1] |
This page took 0.02664 seconds and 5 git commands to generate.