diff options
| author | Pavel Emelyanov <xemul@openvz.org> | 2007-10-17 22:46:47 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2007-10-17 22:46:47 -0400 |
| commit | c6fda282294da882f8d8cc4c513940277dd380f5 (patch) | |
| tree | 29ef5fbc59320851c8db28e7f2c0a8c3fd85c231 /include | |
| parent | e521db9d790aaa60ae8920e21cb7faedc280fc36 (diff) | |
[INET]: Consolidate xxx_frag_create()
This one uses the xxx_frag_intern() and xxx_frag_alloc()
routines, which are already consolidated, so remove them
from protocol code (as promised).
The ->constructor callback is used to init the rest of
the frag queue and it is the same for netfilter and ipv6.
Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
| -rw-r--r-- | include/net/inet_frag.h | 7 | ||||
| -rw-r--r-- | include/net/ipv6.h | 8 |
2 files changed, 12 insertions, 3 deletions
diff --git a/include/net/inet_frag.h b/include/net/inet_frag.h index 412b8582a616..e33072b9fd91 100644 --- a/include/net/inet_frag.h +++ b/include/net/inet_frag.h | |||
| @@ -39,6 +39,8 @@ struct inet_frags { | |||
| 39 | struct inet_frags_ctl *ctl; | 39 | struct inet_frags_ctl *ctl; |
| 40 | 40 | ||
| 41 | unsigned int (*hashfn)(struct inet_frag_queue *); | 41 | unsigned int (*hashfn)(struct inet_frag_queue *); |
| 42 | void (*constructor)(struct inet_frag_queue *q, | ||
| 43 | void *arg); | ||
| 42 | void (*destructor)(struct inet_frag_queue *); | 44 | void (*destructor)(struct inet_frag_queue *); |
| 43 | void (*skb_free)(struct sk_buff *); | 45 | void (*skb_free)(struct sk_buff *); |
| 44 | int (*equal)(struct inet_frag_queue *q1, | 46 | int (*equal)(struct inet_frag_queue *q1, |
| @@ -53,9 +55,8 @@ void inet_frag_kill(struct inet_frag_queue *q, struct inet_frags *f); | |||
| 53 | void inet_frag_destroy(struct inet_frag_queue *q, | 55 | void inet_frag_destroy(struct inet_frag_queue *q, |
| 54 | struct inet_frags *f, int *work); | 56 | struct inet_frags *f, int *work); |
| 55 | int inet_frag_evictor(struct inet_frags *f); | 57 | int inet_frag_evictor(struct inet_frags *f); |
| 56 | struct inet_frag_queue *inet_frag_intern(struct inet_frag_queue *q, | 58 | struct inet_frag_queue *inet_frag_create(struct inet_frags *f, |
| 57 | struct inet_frags *f, unsigned int hash); | 59 | void *create_arg, unsigned int hash); |
| 58 | struct inet_frag_queue *inet_frag_alloc(struct inet_frags *f); | ||
| 59 | 60 | ||
| 60 | static inline void inet_frag_put(struct inet_frag_queue *q, struct inet_frags *f) | 61 | static inline void inet_frag_put(struct inet_frag_queue *q, struct inet_frags *f) |
| 61 | { | 62 | { |
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index ff1269713462..9dc99bf5cf0e 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
| @@ -380,6 +380,14 @@ static inline int ipv6_prefix_equal(const struct in6_addr *a1, | |||
| 380 | struct inet_frag_queue; | 380 | struct inet_frag_queue; |
| 381 | int ip6_frag_equal(struct inet_frag_queue *q1, struct inet_frag_queue *q2); | 381 | int ip6_frag_equal(struct inet_frag_queue *q1, struct inet_frag_queue *q2); |
| 382 | 382 | ||
| 383 | struct ip6_create_arg { | ||
| 384 | __be32 id; | ||
| 385 | struct in6_addr *src; | ||
| 386 | struct in6_addr *dst; | ||
| 387 | }; | ||
| 388 | |||
| 389 | void ip6_frag_init(struct inet_frag_queue *q, void *a); | ||
| 390 | |||
| 383 | static inline int ipv6_addr_any(const struct in6_addr *a) | 391 | static inline int ipv6_addr_any(const struct in6_addr *a) |
| 384 | { | 392 | { |
| 385 | return ((a->s6_addr32[0] | a->s6_addr32[1] | | 393 | return ((a->s6_addr32[0] | a->s6_addr32[1] | |
