]> err.no Git - linux-2.6/commitdiff
[XFRM]: Simplify xfrm_spi_hash
authorDavid S. Miller <davem@sunset.davemloft.net>
Thu, 24 Aug 2006 10:26:44 +0000 (03:26 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Fri, 22 Sep 2006 22:08:44 +0000 (15:08 -0700)
It can use __xfrm{4,6}_addr_hash().

Signed-off-by: David S. Miller <davem@davemloft.net>
net/xfrm/xfrm_state.c

index 7e5daafc186314944dcde6b82f8ba92452584548..98200397e098d1be5807c2cb396da6fb0229de55 100644 (file)
@@ -107,35 +107,20 @@ static inline unsigned xfrm_src_hash(xfrm_address_t *addr, unsigned short family
        return __xfrm_src_hash(addr, family, xfrm_state_hmask);
 }
 
-static inline unsigned int __xfrm4_spi_hash(xfrm_address_t *addr, u32 spi, u8 proto,
-                                       unsigned int hmask)
-{
-       unsigned int h;
-       h = ntohl(addr->a4^spi^proto);
-       h = (h ^ (h>>10) ^ (h>>20)) & hmask;
-       return h;
-}
-
-static inline unsigned int __xfrm6_spi_hash(xfrm_address_t *addr, u32 spi, u8 proto,
-                                           unsigned int hmask)
-{
-       unsigned int h;
-       h = ntohl(addr->a6[2]^addr->a6[3]^spi^proto);
-       h = (h ^ (h>>10) ^ (h>>20)) & hmask;
-       return h;
-}
-
-static inline
-unsigned __xfrm_spi_hash(xfrm_address_t *addr, u32 spi, u8 proto, unsigned short family,
-                        unsigned int hmask)
+static inline unsigned int
+__xfrm_spi_hash(xfrm_address_t *addr, u32 spi, u8 proto, unsigned short family,
+               unsigned int hmask)
 {
+       unsigned int h = spi ^ proto;
        switch (family) {
        case AF_INET:
-               return __xfrm4_spi_hash(addr, spi, proto, hmask);
+               h ^= __xfrm4_addr_hash(addr);
+               break;
        case AF_INET6:
-               return __xfrm6_spi_hash(addr, spi, proto, hmask);
+               h ^= __xfrm6_addr_hash(addr);
+               break;
        }
-       return 0;       /*XXX*/
+       return (h ^ (h >> 10) ^ (h >> 20)) & hmask;
 }
 
 static inline unsigned int