On Mon, Oct 03, 2016 at 11:00:23AM +0200, Olivier Matz wrote: > +/* When doing TSO, the IP length is not included in the pseudo header > + * checksum of the packet given to the PMD, but for virtio it is > + * expected. > + */ > +static void > +virtio_tso_fix_cksum(struct rte_mbuf *m) > +{ > + /* common case: header is not fragmented */ > + if (likely(rte_pktmbuf_data_len(m) >= m->l2_len + m->l3_len + > + m->l4_len)) { ... > + /* replace it in the packet */ > + th->cksum = new_cksum; > + } else { ... > + /* replace it in the packet */ > + *rte_pktmbuf_mtod_offset(m, uint8_t *, > + m->l2_len + m->l3_len + 16) = new_cksum.u8[0]; > + *rte_pktmbuf_mtod_offset(m, uint8_t *, > + m->l2_len + m->l3_len + 17) = new_cksum.u8[1]; > + }
The tcp header will always be in the mbuf, right? Otherwise, you can't update the cksum field here. What's the point of introducing the "else clause" then? --yliu