diff options
Diffstat (limited to 'include/net/inet_hashtables.h')
-rw-r--r-- | include/net/inet_hashtables.h | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/include/net/inet_hashtables.h b/include/net/inet_hashtables.h index bd513f3b9c7e..b4491c9e2a5a 100644 --- a/include/net/inet_hashtables.h +++ b/include/net/inet_hashtables.h | |||
@@ -271,10 +271,16 @@ static inline int inet_iif(const struct sk_buff *skb) | |||
271 | return ((struct rtable *)skb->dst)->rt_iif; | 271 | return ((struct rtable *)skb->dst)->rt_iif; |
272 | } | 272 | } |
273 | 273 | ||
274 | extern struct sock * | 274 | extern struct sock *__inet_lookup_listener(struct inet_hashinfo *hashinfo, |
275 | inet_lookup_listener(struct inet_hashinfo *hashinfo, | 275 | const u32 daddr, |
276 | const u32 daddr, | 276 | const unsigned short hnum, |
277 | const unsigned short hnum, const int dif); | 277 | const int dif); |
278 | |||
279 | static inline struct sock *inet_lookup_listener(struct inet_hashinfo *hashinfo, | ||
280 | u32 daddr, u16 dport, int dif) | ||
281 | { | ||
282 | return __inet_lookup_listener(hashinfo, daddr, ntohs(dport), dif); | ||
283 | } | ||
278 | 284 | ||
279 | /* Socket demux engine toys. */ | 285 | /* Socket demux engine toys. */ |
280 | #ifdef __BIG_ENDIAN | 286 | #ifdef __BIG_ENDIAN |
@@ -362,14 +368,25 @@ hit: | |||
362 | goto out; | 368 | goto out; |
363 | } | 369 | } |
364 | 370 | ||
371 | static inline struct sock * | ||
372 | inet_lookup_established(struct inet_hashinfo *hashinfo, | ||
373 | const u32 saddr, const u16 sport, | ||
374 | const u32 daddr, const u16 dport, | ||
375 | const int dif) | ||
376 | { | ||
377 | return __inet_lookup_established(hashinfo, saddr, sport, daddr, | ||
378 | ntohs(dport), dif); | ||
379 | } | ||
380 | |||
365 | static inline struct sock *__inet_lookup(struct inet_hashinfo *hashinfo, | 381 | static inline struct sock *__inet_lookup(struct inet_hashinfo *hashinfo, |
366 | const u32 saddr, const u16 sport, | 382 | const u32 saddr, const u16 sport, |
367 | const u32 daddr, const u16 hnum, | 383 | const u32 daddr, const u16 dport, |
368 | const int dif) | 384 | const int dif) |
369 | { | 385 | { |
386 | u16 hnum = ntohs(dport); | ||
370 | struct sock *sk = __inet_lookup_established(hashinfo, saddr, sport, daddr, | 387 | struct sock *sk = __inet_lookup_established(hashinfo, saddr, sport, daddr, |
371 | hnum, dif); | 388 | hnum, dif); |
372 | return sk ? : inet_lookup_listener(hashinfo, daddr, hnum, dif); | 389 | return sk ? : __inet_lookup_listener(hashinfo, daddr, hnum, dif); |
373 | } | 390 | } |
374 | 391 | ||
375 | static inline struct sock *inet_lookup(struct inet_hashinfo *hashinfo, | 392 | static inline struct sock *inet_lookup(struct inet_hashinfo *hashinfo, |
@@ -380,7 +397,7 @@ static inline struct sock *inet_lookup(struct inet_hashinfo *hashinfo, | |||
380 | struct sock *sk; | 397 | struct sock *sk; |
381 | 398 | ||
382 | local_bh_disable(); | 399 | local_bh_disable(); |
383 | sk = __inet_lookup(hashinfo, saddr, sport, daddr, ntohs(dport), dif); | 400 | sk = __inet_lookup(hashinfo, saddr, sport, daddr, dport, dif); |
384 | local_bh_enable(); | 401 | local_bh_enable(); |
385 | 402 | ||
386 | return sk; | 403 | return sk; |