> -----Original Message----- > From: Padam Jeet Singh [mailto:padam.singh at inventum.net] > Sent: Wednesday, October 28, 2015 4:12 PM > To: Liu, Jijiang > Cc: dev at dpdk.org; Matthew Hall > Subject: Re: [dpdk-dev] Wrong TCP Checkum computed by hardware > > > > On 28-Oct-2015, at 1:31 pm, Liu, Jijiang <jijiang.liu at intel.com> wrote: > > > > > >> -----Original Message----- > >> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Padam Jeet Singh > >> Sent: Wednesday, October 28, 2015 3:20 PM > >> To: Matthew Hall > >> Cc: dev at dpdk.org > >> Subject: Re: [dpdk-dev] Wrong TCP Checkum computed by hardware > >> > > > > Did you set the txq_flags? > > If the flag is not set, the default value is IXGBE_SIMPLE_FLAGS, and the any > TX offloads do not work. > > > > See the following codes in ixgbe_rxtx.c file > > > > /* Use a simple Tx queue (no offloads, no multi segs) if possible */ > > if (((txq->txq_flags & IXGBE_SIMPLE_FLAGS) == IXGBE_SIMPLE_FLAGS) > > && (txq->tx_rs_thresh >= > RTE_PMD_IXGBE_TX_MAX_BURST)) { > > PMD_INIT_LOG(INFO, "Using simple tx code path"); > > ... > > dev->tx_pkt_burst = ixgbe_xmit_pkts_simple; > > } else { > > ... > > dev->tx_pkt_burst = ixgbe_xmit_pkts; > > } > > > > > > --Jijiang Liu > > I initialise the queue with the following structure: > > static const struct rte_eth_txconf tx_conf = { > .tx_thresh = { > .pthresh = 32, /* Ring prefetch threshold */ > .hthresh = 0, /* Ring host threshold */ > .wthresh = 0, /* Ring writeback threshold */ > }, > .tx_free_thresh = 0, /* Use PMD default values */ > .tx_rs_thresh = 0, /* Use PMD default values */ > }; > > This would set the txq_flags to zero - so the tx_pkt_burst function would > always point to ixgbe_xmit_pkts. Also, as observed only TCP checksum is > computed wrong when there is VLAN TX Offload + IP Offload + TCP offload > bits set. VLAN TX Offload + IP Offload + TCP CKSUM in software generates > correct packet on the wire.
I don't think the txq_flags is 0 if you just initialized the struct rte_eth_txconf like that. > Thanks, > Padam