diff options
author | Hannes Frederic Sowa <hannes@stressinduktion.org> | 2013-03-22 04:24:37 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-03-24 17:16:30 -0400 |
commit | be991971d53e0f5b6d13e3940192054216590072 (patch) | |
tree | 8d8b92e82104a51d0954a4f062d758efed6ee2a4 /net/ipv4/inet_fragment.c | |
parent | 63998ac24f8370caf99e433483532bab8368eb7e (diff) |
inet: generalize ipv4-only RFC3168 5.3 ecn fragmentation handling for future use by ipv6
This patch just moves some code arround to make the ip4_frag_ecn_table
and IPFRAG_ECN_* constants accessible from the other reassembly engines. I
also renamed ip4_frag_ecn_table to ip_frag_ecn_table.
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Jesper Dangaard Brouer <jbrouer@redhat.com>
Cc: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Acked-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/inet_fragment.c')
-rw-r--r-- | net/ipv4/inet_fragment.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/net/ipv4/inet_fragment.c b/net/ipv4/inet_fragment.c index f4fd23de9b13..2bff045bec60 100644 --- a/net/ipv4/inet_fragment.c +++ b/net/ipv4/inet_fragment.c | |||
@@ -23,6 +23,28 @@ | |||
23 | 23 | ||
24 | #include <net/sock.h> | 24 | #include <net/sock.h> |
25 | #include <net/inet_frag.h> | 25 | #include <net/inet_frag.h> |
26 | #include <net/inet_ecn.h> | ||
27 | |||
28 | /* Given the OR values of all fragments, apply RFC 3168 5.3 requirements | ||
29 | * Value : 0xff if frame should be dropped. | ||
30 | * 0 or INET_ECN_CE value, to be ORed in to final iph->tos field | ||
31 | */ | ||
32 | const u8 ip_frag_ecn_table[16] = { | ||
33 | /* at least one fragment had CE, and others ECT_0 or ECT_1 */ | ||
34 | [IPFRAG_ECN_CE | IPFRAG_ECN_ECT_0] = INET_ECN_CE, | ||
35 | [IPFRAG_ECN_CE | IPFRAG_ECN_ECT_1] = INET_ECN_CE, | ||
36 | [IPFRAG_ECN_CE | IPFRAG_ECN_ECT_0 | IPFRAG_ECN_ECT_1] = INET_ECN_CE, | ||
37 | |||
38 | /* invalid combinations : drop frame */ | ||
39 | [IPFRAG_ECN_NOT_ECT | IPFRAG_ECN_CE] = 0xff, | ||
40 | [IPFRAG_ECN_NOT_ECT | IPFRAG_ECN_ECT_0] = 0xff, | ||
41 | [IPFRAG_ECN_NOT_ECT | IPFRAG_ECN_ECT_1] = 0xff, | ||
42 | [IPFRAG_ECN_NOT_ECT | IPFRAG_ECN_ECT_0 | IPFRAG_ECN_ECT_1] = 0xff, | ||
43 | [IPFRAG_ECN_NOT_ECT | IPFRAG_ECN_CE | IPFRAG_ECN_ECT_0] = 0xff, | ||
44 | [IPFRAG_ECN_NOT_ECT | IPFRAG_ECN_CE | IPFRAG_ECN_ECT_1] = 0xff, | ||
45 | [IPFRAG_ECN_NOT_ECT | IPFRAG_ECN_CE | IPFRAG_ECN_ECT_0 | IPFRAG_ECN_ECT_1] = 0xff, | ||
46 | }; | ||
47 | EXPORT_SYMBOL(ip_frag_ecn_table); | ||
26 | 48 | ||
27 | static void inet_frag_secret_rebuild(unsigned long dummy) | 49 | static void inet_frag_secret_rebuild(unsigned long dummy) |
28 | { | 50 | { |