diff options
author | Pavel Emelyanov <xemul@openvz.org> | 2007-10-17 22:44:34 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-10-17 22:44:34 -0400 |
commit | 2588fe1d782f1686847493ad643157d5d10bf602 (patch) | |
tree | 7513851819330d4ff6aadc9f76b1b45bc03f8f82 /include/net | |
parent | fd9e63544cac30a34c951f0ec958038f0529e244 (diff) |
[INET]: Consolidate xxx_frag_intern
This routine checks for the existence of a given entry
in the hash table and inserts the new one if needed.
The ->equal callback is used to compare two frag_queue-s
together, but this one is temporary and will be removed
later. The netfilter code and the ipv6 one use the same
routine to compare frags.
The inet_frag_intern() always returns non-NULL pointer,
so convert the inet_frag_queue into protocol specific
one (with the container_of) without any checks.
Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/inet_frag.h | 4 | ||||
-rw-r--r-- | include/net/ipv6.h | 3 |
2 files changed, 7 insertions, 0 deletions
diff --git a/include/net/inet_frag.h b/include/net/inet_frag.h index 911c2cd02941..133e187fbc98 100644 --- a/include/net/inet_frag.h +++ b/include/net/inet_frag.h | |||
@@ -41,6 +41,8 @@ struct inet_frags { | |||
41 | unsigned int (*hashfn)(struct inet_frag_queue *); | 41 | unsigned int (*hashfn)(struct inet_frag_queue *); |
42 | void (*destructor)(struct inet_frag_queue *); | 42 | void (*destructor)(struct inet_frag_queue *); |
43 | void (*skb_free)(struct sk_buff *); | 43 | void (*skb_free)(struct sk_buff *); |
44 | int (*equal)(struct inet_frag_queue *q1, | ||
45 | struct inet_frag_queue *q2); | ||
44 | }; | 46 | }; |
45 | 47 | ||
46 | void inet_frags_init(struct inet_frags *); | 48 | void inet_frags_init(struct inet_frags *); |
@@ -50,6 +52,8 @@ void inet_frag_kill(struct inet_frag_queue *q, struct inet_frags *f); | |||
50 | void inet_frag_destroy(struct inet_frag_queue *q, | 52 | void inet_frag_destroy(struct inet_frag_queue *q, |
51 | struct inet_frags *f, int *work); | 53 | struct inet_frags *f, int *work); |
52 | int inet_frag_evictor(struct inet_frags *f); | 54 | int inet_frag_evictor(struct inet_frags *f); |
55 | struct inet_frag_queue *inet_frag_intern(struct inet_frag_queue *q, | ||
56 | struct inet_frags *f, unsigned int hash); | ||
53 | 57 | ||
54 | static inline void inet_frag_put(struct inet_frag_queue *q, struct inet_frags *f) | 58 | static inline void inet_frag_put(struct inet_frag_queue *q, struct inet_frags *f) |
55 | { | 59 | { |
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index cc796cbc1b26..ff1269713462 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
@@ -377,6 +377,9 @@ static inline int ipv6_prefix_equal(const struct in6_addr *a1, | |||
377 | prefixlen); | 377 | prefixlen); |
378 | } | 378 | } |
379 | 379 | ||
380 | struct inet_frag_queue; | ||
381 | int ip6_frag_equal(struct inet_frag_queue *q1, struct inet_frag_queue *q2); | ||
382 | |||
380 | static inline int ipv6_addr_any(const struct in6_addr *a) | 383 | static inline int ipv6_addr_any(const struct in6_addr *a) |
381 | { | 384 | { |
382 | return ((a->s6_addr32[0] | a->s6_addr32[1] | | 385 | return ((a->s6_addr32[0] | a->s6_addr32[1] | |