doc: add Meson coding style to contributors guide
[dpdk.git] / lib / librte_ip_frag / rte_ipv6_reassembly.c
index 855e3f7..6bc0bf7 100644 (file)
@@ -32,7 +32,7 @@ ip_frag_memmove(char *dst, char *src, int len)
 struct rte_mbuf *
 ipv6_frag_reassemble(struct ip_frag_pkt *fp)
 {
-       struct ipv6_hdr *ip_hdr;
+       struct rte_ipv6_hdr *ip_hdr;
        struct ipv6_extension_fragment *frag_hdr;
        struct rte_mbuf *m, *prev;
        uint32_t i, n, ofs, first_len;
@@ -89,11 +89,8 @@ ipv6_frag_reassemble(struct ip_frag_pkt *fp)
        m = fp->frags[IP_FIRST_FRAG_IDX].mb;
        fp->frags[IP_FIRST_FRAG_IDX].mb = NULL;
 
-       /* update mbuf fields for reassembled packet. */
-       m->ol_flags |= PKT_TX_IP_CKSUM;
-
        /* update ipv6 header for the reassembled datagram */
-       ip_hdr = rte_pktmbuf_mtod_offset(m, struct ipv6_hdr *, m->l2_len);
+       ip_hdr = rte_pktmbuf_mtod_offset(m, struct rte_ipv6_hdr *, m->l2_len);
 
        ip_hdr->payload_len = rte_cpu_to_be_16(payload_len);
 
@@ -139,12 +136,13 @@ ipv6_frag_reassemble(struct ip_frag_pkt *fp)
 struct rte_mbuf *
 rte_ipv6_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
        struct rte_ip_frag_death_row *dr, struct rte_mbuf *mb, uint64_t tms,
-       struct ipv6_hdr *ip_hdr, struct ipv6_extension_fragment *frag_hdr)
+       struct rte_ipv6_hdr *ip_hdr, struct ipv6_extension_fragment *frag_hdr)
 {
        struct ip_frag_pkt *fp;
        struct ip_frag_key key;
        uint16_t ip_ofs;
        int32_t ip_len;
+       int32_t trim;
 
        rte_memcpy(&key.src_dst[0], ip_hdr->src_addr, 16);
        rte_memcpy(&key.src_dst[2], ip_hdr->dst_addr, 16);
@@ -161,16 +159,17 @@ rte_ipv6_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
         * this is what we remove from the payload len.
         */
        ip_len = rte_be_to_cpu_16(ip_hdr->payload_len) - sizeof(*frag_hdr);
+       trim = mb->pkt_len - (ip_len + mb->l3_len + mb->l2_len);
 
        IP_FRAG_LOG(DEBUG, "%s:%d:\n"
                "mbuf: %p, tms: %" PRIu64
                ", key: <" IPv6_KEY_BYTES_FMT ", %#x>, "
-               "ofs: %u, len: %d, flags: %#x\n"
+               "ofs: %u, len: %d, padding: %d, flags: %#x\n"
                "tbl: %p, max_cycles: %" PRIu64 ", entry_mask: %#x, "
                "max_entries: %u, use_entries: %u\n\n",
                __func__, __LINE__,
                mb, tms, IPv6_KEY_BYTES(key.src_dst), key.id, ip_ofs, ip_len,
-               RTE_IPV6_GET_MF(frag_hdr->frag_data),
+               trim, RTE_IPV6_GET_MF(frag_hdr->frag_data),
                tbl, tbl->max_cycles, tbl->entry_mask, tbl->max_entries,
                tbl->use_entries);
 
@@ -180,6 +179,9 @@ rte_ipv6_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
                return NULL;
        }
 
+       if (unlikely(trim > 0))
+               rte_pktmbuf_trim(mb, trim);
+
        /* try to find/add entry into the fragment's table. */
        fp = ip_frag_find(tbl, dr, &key, tms);
        if (fp == NULL) {