From 4b06b0771f321bd4301075eaff64452261a45a4d Mon Sep 17 00:00:00 2001 From: Konstantin Ananyev Date: Thu, 6 Jun 2019 12:33:28 +0100 Subject: [PATCH] ip_frag: fix IPv6 fragment size calculation Take into account IPv6 fragment extension header when calculating data size for each fragment. Fixes: 7a838c8798a9 ("ip_frag: fix IPv6 when MTU sizes not aligned to 8 bytes") Fixes: 0aa31d7a5929 ("ip_frag: add IPv6 fragmentation support") Cc: stable@dpdk.org Signed-off-by: Konstantin Ananyev --- lib/librte_ip_frag/rte_ipv6_fragmentation.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/librte_ip_frag/rte_ipv6_fragmentation.c b/lib/librte_ip_frag/rte_ipv6_fragmentation.c index bfe44d435d..43449970e5 100644 --- a/lib/librte_ip_frag/rte_ipv6_fragmentation.c +++ b/lib/librte_ip_frag/rte_ipv6_fragmentation.c @@ -83,8 +83,10 @@ rte_ipv6_fragment_packet(struct rte_mbuf *pkt_in, * Ensure the IP payload length of all fragments (except the * the last fragment) are a multiple of 8 bytes per RFC2460. */ - frag_size = RTE_ALIGN_FLOOR(mtu_size - sizeof(struct rte_ipv6_hdr), - RTE_IPV6_EHDR_FO_ALIGN); + + frag_size = mtu_size - sizeof(struct rte_ipv6_hdr) - + sizeof(struct ipv6_extension_fragment); + frag_size = RTE_ALIGN_FLOOR(frag_size, RTE_IPV6_EHDR_FO_ALIGN); /* Check that pkts_out is big enough to hold all fragments */ if (unlikely (frag_size * nb_pkts_out < -- 2.20.1