<div>Hello, Paul!</div><div> </div><div>Thanks for the answer.</div><div> </div><div><div> </div></div><div><span style="font-family:'courier new' , monospace">I set offloads as follows:</span></div><div>...</div><div><pre style="margin:0px;text-indent:0px"><span style="color:#ff6aad">#define</span><span style="color:#bec0c2"> </span><span style="color:#ff6aad">RTE_ETH_TX_OFFLOAD_IPV4_CKSUM</span><span style="color:#bec0c2">       </span><span style="color:#ff6aad">RTE_BIT64</span>(<span style="color:#8a602c">1</span>)</pre><pre style="margin:0px;text-indent:0px"><span style="color:#ff6aad">#define</span><span style="color:#bec0c2"> </span><span style="color:#ff6aad">RTE_ETH_TX_OFFLOAD_UDP_CKSUM</span><span style="color:#bec0c2">        </span><span style="color:#ff6aad">RTE_BIT64</span>(<span style="color:#8a602c">2</span>)</pre><pre style="margin:0px;text-indent:0px"><span style="color:#ff6aad">#define</span><span style="color:#bec0c2"> </span><span style="color:#ff6aad">RTE_ETH_TX_OFFLOAD_TCP_CKSUM</span><span style="color:#bec0c2">        </span><span style="color:#ff6aad">RTE_BIT64</span>(<span style="color:#8a602c">3</span>)</pre></div><div>...</div><div><pre style="margin:0px;text-indent:0px"><span style="font-family:'courier new' , monospace"><em style="color:#45c6d6;font-style:italic">static</em></span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="color:#ff8080;font-family:'courier new' , monospace">uint64_t</span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="font-family:'courier new' , monospace">s_offloads</span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="color:#d6bb9a;font-family:'courier new' , monospace">=</span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="font-family:'courier new' , monospace">{<!-- --></span></pre><pre style="margin:0px;text-indent:0px"><span style="color:#bec0c2;font-family:'courier new' , monospace">               </span><span style="color:#ff6aad;font-family:'courier new' , monospace">RTE_ETH_TX_OFFLOAD_IPV4_CKSUM</span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="color:#d6bb9a;font-family:'courier new' , monospace">|</span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="color:#ff6aad;font-family:'courier new' , monospace">RTE_ETH_TX_OFFLOAD_UDP_CKSUM</span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="color:#d6bb9a;font-family:'courier new' , monospace">|</span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="color:#ff6aad;font-family:'courier new' , monospace">RTE_ETH_TX_OFFLOAD_TCP_CKSUM</span><span style="font-family:'courier new' , monospace">};</span></pre><div> </div></div><div><pre style="margin:0px;text-indent:0px"><span style="color:#bec0c2;font-family:'courier new' , monospace">                </span><span style="font-family:'courier new' , monospace"><em style="color:#45c6d6;font-style:italic">if</em></span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="font-family:'courier new' , monospace">(</span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="color:#d6bb9a;font-family:'courier new' , monospace">l_dev_info.</span><span style="font-family:'courier new' , monospace">tx_offload_capa</span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="color:#d6bb9a;font-family:'courier new' , monospace">&</span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="color:#ff6aad;font-family:'courier new' , monospace">RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE</span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="font-family:'courier new' , monospace">)</span></pre><pre style="margin:0px;text-indent:0px"><span style="color:#bec0c2;font-family:'courier new' , monospace">                 </span><span style="color:#d6bb9a;font-family:'courier new' , monospace">l_port_conf.</span><span style="font-family:'courier new' , monospace">txmode</span><span style="color:#d6bb9a;font-family:'courier new' , monospace">.</span><span style="font-family:'courier new' , monospace">offloads</span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="color:#d6bb9a;font-family:'courier new' , monospace">|=</span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="color:#ff6aad;font-family:'courier new' , monospace">RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE</span><span style="font-family:'courier new' , monospace">;</span></pre><pre style="margin:0px;text-indent:0px"> </pre><pre style="margin:0px;text-indent:0px"><span style="color:#bec0c2;font-family:'courier new' , monospace">         </span><span style="color:#d6bb9a;font-family:'courier new' , monospace">l_port_conf.</span><span style="font-family:'courier new' , monospace">txmode</span><span style="color:#d6bb9a;font-family:'courier new' , monospace">.</span><span style="font-family:'courier new' , monospace">offloads</span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="color:#d6bb9a;font-family:'courier new' , monospace">|=</span><span style="color:#bec0c2;font-family:'courier new' , monospace"> </span><span style="font-family:'courier new' , monospace">s_offloads;</span></pre><div> </div><div><div><span style="font-family:'courier new' , monospace">l_dev_info.tx_offload_capa = 0x000080bf</span></div><div><span style="font-family:'courier new' , monospace">l_port_conf.txmode.offloads = 0x0000000e - it's before </span>rte_eth_dev_configure( ( ... <span style="color:#d6bb9a">&l_port_conf ...)</span></div><div><br /></div></div><div> </div><div> </div><div>The receiver - is  DPDK application. Do I'm need set offloads at receiver site to eliminate "ierrors" ?</div><div> </div></div><div> </div><div> </div><div> </div><div> </div><div>08.12.2022, 10:54, "Pavel Vazharov" <freakpv@gmail.com>:</div><blockquote><div><div><div><div><div>Few questions:</div>1. Does the sending NIC support IP and TCP/UDP checksum offloading? I mean, if these flags set?<br />    struct rte_eth_dev_info dev_info;                                          <br />    rte_eth_dev_info_get(cfg.nic_port_id_, &dev_info);<br />    constexpr auto rxcsum = DEV_RX_OFFLOAD_CHECKSUM;                            <br />    constexpr auto l3csum = DEV_TX_OFFLOAD_IPV4_CKSUM;                          <br />    constexpr auto l4csum = DEV_TX_OFFLOAD_TCP_CKSUM | DEV_TX_OFFLOAD_UDP_CKSUM;                 <br />    dev_rx_csum_          = ((dev_info.tx_offload_capa & rxcsum) == rxcsum);    <br />    dev_tx_csum_l3_       = ((dev_info.tx_offload_capa & l3csum) == l3csum);    <br />    dev_tx_csum_l4_       = ((dev_info.tx_offload_capa & l4csum) == l4csum);<br /> </div>2. Do you "tell" the sending NIC to do the checksum calculations before sending the packets? I mean, do you do something like this for outgoing packets?<br />    if (offl.ip_csum) {                                                        <br />        pkt->ol_flags |= PKT_TX_IP_CKSUM | PKT_TX_IPV4;                        <br />        pkt->l2_len = RTE_ETHER_HDR_LEN;                                        <br />        pkt->l3_len = ih_len;                                                  <br />    }                                                                          <br />    if (offl.tcp_csum) {                                                        <br />        pkt->ol_flags |= PKT_TX_TCP_CKSUM;                                      <br />        pkt->l2_len = RTE_ETHER_HDR_LEN;                                        <br />        pkt->l3_len = ih_len;                                                  <br />    }                                                                          <br />    if (offl.udp_csum) {                                                        <br />        pkt->ol_flags |= PKT_TX_UDP_CKSUM;                                      <br />        pkt->l2_len = RTE_ETHER_HDR_LEN;                                        <br />        pkt->l3_len = ih_len;                                                  <br />    }<br /> </div>3. Is the receiving side also a DPDK application? If it is, and if the NIC there supports checksum offloading you can check the flags of the received packets to see if the receiving NIC has detected checksum errors.<br />pkt->ol_flags & (PKT_RX_IP_CKSUM_BAD | PKT_RX_L4_CKSUM_BAD)<br /> </div><div>Hope some of the above helps.</div></div> <div><div>On Thu, Dec 8, 2022 at 9:36 AM Ruslan R. Laishev <<a href="mailto:zator@yandex.ru" rel="noopener noreferrer">zator@yandex.ru</a>> wrote:</div><blockquote style="border-left-color:rgb( 204 , 204 , 204 );border-left-style:solid;border-left-width:1px;margin:0px 0px 0px 0.8ex;padding-left:1ex"><div>Hello !</div><div> </div><div>I wrote too small apps to send and receive  ethernet/ip/udp frame/packet/dg, so on received side I  see next situation:</div><div>number of in errors is equally a number of received packets. The test packet I made manually,  set offloads  IP/UDP checkusm.</div><div>Is there what I'm need to check additionally ?</div><div> </div></blockquote></div></blockquote><div> </div><div> </div><div><span style="font-family:'georgia' , 'palatino'">--- </span></div><div><span style="font-family:'georgia' , 'palatino'">С уважением,<br />Ruslan R. Laishev</span></div><div><span style="font-family:'georgia' , 'palatino'">OpenVMS bigot, natural born system/network progger, C contractor.</span></div><div><span style="font-family:'georgia' , 'palatino'">+79013163222</span></div><div><span style="font-family:'georgia' , 'palatino'">+79910009922</span></div><div> </div>