diff options
author | Gao feng <gaofeng@cn.fujitsu.com> | 2012-05-25 21:30:53 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-05-27 01:11:22 -0400 |
commit | 0c1833797a5a6ec23ea9261d979aa18078720b74 (patch) | |
tree | 1ea0d0ee1fb3915b30f7b40a91c0d047db5aeac3 /include/net | |
parent | 91657eafb64b4cb53ec3a2fbc4afc3497f735788 (diff) |
ipv6: fix incorrect ipsec fragment
Since commit ad0081e43a
"ipv6: Fragment locally generated tunnel-mode IPSec6 packets as needed"
the fragment of packets is incorrect.
because tunnel mode needs IPsec headers and trailer for all fragments,
while on transport mode it is sufficient to add the headers to the
first fragment and the trailer to the last.
so modify mtu and maxfraglen base on ipsec mode and if fragment is first
or last.
with my test,it work well(every fragment's size is the mtu)
and does not trigger slow fragment path.
Changes from v1:
though optimization, mtu_prev and maxfraglen_prev can be delete.
replace xfrm mode codes with dst_entry's new frag DST_XFRM_TUNNEL.
add fuction ip6_append_data_mtu to make codes clearer.
Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/dst.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/net/dst.h b/include/net/dst.h index bed833d9796a..8197eadca819 100644 --- a/include/net/dst.h +++ b/include/net/dst.h | |||
@@ -60,6 +60,7 @@ struct dst_entry { | |||
60 | #define DST_NOCOUNT 0x0020 | 60 | #define DST_NOCOUNT 0x0020 |
61 | #define DST_NOPEER 0x0040 | 61 | #define DST_NOPEER 0x0040 |
62 | #define DST_FAKE_RTABLE 0x0080 | 62 | #define DST_FAKE_RTABLE 0x0080 |
63 | #define DST_XFRM_TUNNEL 0x0100 | ||
63 | 64 | ||
64 | short error; | 65 | short error; |
65 | short obsolete; | 66 | short obsolete; |