X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=include%2Fnet%2Finet_sock.h;h=70013c5f4e59aba0d83f7e99df4da8898d94b05f;hb=c2a7dcad9f0d92d7a96e735abb8bec7b9c621536;hp=ce6da97bc8489d4fc1e5d8838f0dd3541a78cfc5;hpb=5a3e3b2230980cf2ce6e5e56b816dde19b993939;p=linux-2.6 diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h index ce6da97bc8..70013c5f4e 100644 --- a/include/net/inet_sock.h +++ b/include/net/inet_sock.h @@ -19,10 +19,12 @@ #include #include +#include #include #include #include +#include /** struct ip_options - IP Options * @@ -167,13 +169,15 @@ static inline void inet_sk_copy_descendant(struct sock *sk_to, extern int inet_sk_rebuild_header(struct sock *sk); +extern u32 inet_ehash_secret; +extern void build_ehash_secret(void); + static inline unsigned int inet_ehashfn(const __be32 laddr, const __u16 lport, const __be32 faddr, const __be16 fport) { - unsigned int h = ((__force __u32)laddr ^ lport) ^ ((__force __u32)faddr ^ (__force __u32)fport); - h ^= h >> 16; - h ^= h >> 8; - return h; + return jhash_2words((__force __u32) laddr ^ (__force __u32) faddr, + ((__u32) lport) << 16 | (__force __u32)fport, + inet_ehash_secret); } static inline int inet_sk_ehashfn(const struct sock *sk) @@ -187,4 +191,10 @@ static inline int inet_sk_ehashfn(const struct sock *sk) return inet_ehashfn(laddr, lport, faddr, fport); } + +static inline int inet_iif(const struct sk_buff *skb) +{ + return ((struct rtable *)skb->dst)->rt_iif; +} + #endif /* _INET_SOCK_H */