diff options
author | Patrick McHardy <kaber@trash.net> | 2009-12-15 10:59:18 -0500 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2009-12-15 10:59:18 -0500 |
commit | 0b5ccb2ee250136dd7385b1c7da28417d0d4d32d (patch) | |
tree | b0630141672471d5c800867cd8dbee425308bc73 /include/net/ipv6.h | |
parent | 9abfe315de96aa5c9878b2f627542bc54901c6e9 (diff) |
ipv6: reassembly: use seperate reassembly queues for conntrack and local delivery
Currently the same reassembly queue might be used for packets reassembled
by conntrack in different positions in the stack (PREROUTING/LOCAL_OUT),
as well as local delivery. This can cause "packet jumps" when the fragment
completing a reassembled packet is queued from a different position in the
stack than the previous ones.
Add a "user" identifier to the reassembly queue key to seperate the queues
of each caller, similar to what we do for IPv4.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'include/net/ipv6.h')
-rw-r--r-- | include/net/ipv6.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index 92db8617d188..d6916035bcea 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
@@ -350,8 +350,15 @@ static inline int ipv6_prefix_equal(const struct in6_addr *a1, | |||
350 | 350 | ||
351 | struct inet_frag_queue; | 351 | struct inet_frag_queue; |
352 | 352 | ||
353 | enum ip6_defrag_users { | ||
354 | IP6_DEFRAG_LOCAL_DELIVER, | ||
355 | IP6_DEFRAG_CONNTRACK_IN, | ||
356 | IP6_DEFRAG_CONNTRACK_OUT, | ||
357 | }; | ||
358 | |||
353 | struct ip6_create_arg { | 359 | struct ip6_create_arg { |
354 | __be32 id; | 360 | __be32 id; |
361 | u32 user; | ||
355 | struct in6_addr *src; | 362 | struct in6_addr *src; |
356 | struct in6_addr *dst; | 363 | struct in6_addr *dst; |
357 | }; | 364 | }; |