--- zzzz-none-000/linux-4.4.60/net/ipv6/netfilter/nf_conntrack_reasm.c 2017-04-08 07:53:53.000000000 +0000 +++ scorpion-7490-727/linux-4.4.60/net/ipv6/netfilter/nf_conntrack_reasm.c 2021-02-04 17:41:59.000000000 +0000 @@ -601,6 +601,23 @@ hdr = ipv6_hdr(clone); fhdr = (struct frag_hdr *)skb_transport_header(clone); +#if IS_ENABLED(CONFIG_NF_IPV6_DUMMY_HEADER) + /* + * Revoke dummy header removal by IPv6 reassembly code. + * + * Fragment header with MF and fragment offset field as 0, is a + * dummy fragment header. + * + * MAP-T's RFC mandates CE to add the dummy header in packets and + * adds its identification in its ID field. This field should be + * conserved and delivered to BR, which uses it to identify the + * particular CE. + */ + if (unlikely((fhdr->frag_off & htons(IP6_OFFSET | IP6_MF)) == 0)) { + goto ret_orig; + } +#endif + fq = fq_find(net, fhdr->identification, user, &hdr->saddr, &hdr->daddr, skb->dev ? skb->dev->ifindex : 0, ip6_frag_ecn(hdr)); if (fq == NULL) {