-static inline unsigned int __sel_hash(struct xfrm_selector *sel, unsigned short family, unsigned int hmask)
-{
- xfrm_address_t *daddr = &sel->daddr;
- xfrm_address_t *saddr = &sel->saddr;
- unsigned int h = 0;
-
- switch (family) {
- case AF_INET:
- if (sel->prefixlen_d != 32 ||
- sel->prefixlen_s != 32)
- return hmask + 1;
-
- h = ntohl(daddr->a4 ^ saddr->a4);
- break;
-
- case AF_INET6:
- if (sel->prefixlen_d != 128 ||
- sel->prefixlen_s != 128)
- return hmask + 1;
-
- h = ntohl(daddr->a6[2] ^ daddr->a6[3] ^
- saddr->a6[2] ^ saddr->a6[3]);
- break;
- };
- h ^= (h >> 16);
- return h & hmask;
-}
-
-static inline unsigned int __addr_hash(xfrm_address_t *daddr, xfrm_address_t *saddr, unsigned short family, unsigned int hmask)
-{
- unsigned int h = 0;
-
- switch (family) {
- case AF_INET:
- h = ntohl(daddr->a4 ^ saddr->a4);
- break;
-
- case AF_INET6:
- h = ntohl(daddr->a6[2] ^ daddr->a6[3] ^
- saddr->a6[2] ^ saddr->a6[3]);
- break;
- };
- h ^= (h >> 16);
- return h & hmask;
-}
-