aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorPavel Emelyanov <xemul@openvz.org>2007-10-17 22:46:47 -0400
committerDavid S. Miller <davem@davemloft.net>2007-10-17 22:46:47 -0400
commitc6fda282294da882f8d8cc4c513940277dd380f5 (patch)
tree29ef5fbc59320851c8db28e7f2c0a8c3fd85c231 /include
parente521db9d790aaa60ae8920e21cb7faedc280fc36 (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.h7
-rw-r--r--include/net/ipv6.h8
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);
53void inet_frag_destroy(struct inet_frag_queue *q, 55void inet_frag_destroy(struct inet_frag_queue *q,
54 struct inet_frags *f, int *work); 56 struct inet_frags *f, int *work);
55int inet_frag_evictor(struct inet_frags *f); 57int inet_frag_evictor(struct inet_frags *f);
56struct inet_frag_queue *inet_frag_intern(struct inet_frag_queue *q, 58struct 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);
58struct inet_frag_queue *inet_frag_alloc(struct inet_frags *f);
59 60
60static inline void inet_frag_put(struct inet_frag_queue *q, struct inet_frags *f) 61static 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,
380struct inet_frag_queue; 380struct inet_frag_queue;
381int ip6_frag_equal(struct inet_frag_queue *q1, struct inet_frag_queue *q2); 381int ip6_frag_equal(struct inet_frag_queue *q1, struct inet_frag_queue *q2);
382 382
383struct ip6_create_arg {
384 __be32 id;
385 struct in6_addr *src;
386 struct in6_addr *dst;
387};
388
389void ip6_frag_init(struct inet_frag_queue *q, void *a);
390
383static inline int ipv6_addr_any(const struct in6_addr *a) 391static 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] |