From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxime Coquelin Subject: Re: [PATCH 1/2] vhost: fix TCP csum not set Date: Wed, 7 Jun 2017 21:25:38 +0200 Message-ID: References: <1496817697-49130-1-git-send-email-jianfeng.tan@intel.com> <1496817697-49130-2-git-send-email-jianfeng.tan@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Cc: stable@dpdk.org, Yuanhan Liu , Jiayu Hu To: Jianfeng Tan , dev@dpdk.org Return-path: In-Reply-To: <1496817697-49130-2-git-send-email-jianfeng.tan@intel.com> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On 06/07/2017 08:41 AM, Jianfeng Tan wrote: > As PKT_TX_TCP_SEG flag in mbuf->ol_flags implies PKT_TX_TCP_CKSUM, > applications, e.g., testpmd, don't set PKT_TX_TCP_CKSUM when TSO > is set. > > This leads to that packets get dropped in VM tcp stack layer because > of bad TCP csum. > > To fix this, we make sure TCP NEEDS_CSUM info is set into virtio net > header when PKT_TX_TCP_SEG is set, so that VM tcp stack will not > check the TCP csum. > > Fixes: 859b480d5afd ("vhost: add guest offload setting") > Cc: stable@dpdk.org > > Cc: Yuanhan Liu > Cc: Maxime Coquelin > Cc: Jiayu Hu > Signed-off-by: Jianfeng Tan Reviewed-by: Maxime Coquelin Thanks, Maxime > --- > lib/librte_vhost/virtio_net.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_net.c > index 48219e0..0a7e023 100644 > --- a/lib/librte_vhost/virtio_net.c > +++ b/lib/librte_vhost/virtio_net.c > @@ -114,11 +114,16 @@ update_shadow_used_ring(struct vhost_virtqueue *vq, > static void > virtio_enqueue_offload(struct rte_mbuf *m_buf, struct virtio_net_hdr *net_hdr) > { > - if (m_buf->ol_flags & PKT_TX_L4_MASK) { > + uint64_t csum_l4 = m_buf->ol_flags & PKT_TX_L4_MASK; > + > + if (m_buf->ol_flags & PKT_TX_TCP_SEG) > + csum_l4 |= PKT_TX_TCP_CKSUM; > + > + if (csum_l4) { > net_hdr->flags = VIRTIO_NET_HDR_F_NEEDS_CSUM; > net_hdr->csum_start = m_buf->l2_len + m_buf->l3_len; > > - switch (m_buf->ol_flags & PKT_TX_L4_MASK) { > + switch (csum_l4) { > case PKT_TX_TCP_CKSUM: > net_hdr->csum_offset = (offsetof(struct tcp_hdr, > cksum)); >