my project is an UDP server. I think the code is correct, because it works well on an I350 NIC, but when I test on 82599, it didn't calculate checksum at all and tcpdump running on remote machine reports bad ipv4 checksum(0) and bad udp checksum(the pseudo-header checksum calculated by server), I also tried disable checksum offload and use software to calculate checksum, it works. this is my port config
struct rte_eth_conf default_port_conf = { .rxmode = { .mq_mode = ETH_MQ_RX_RSS, .max_rx_pkt_len = ETHER_MAX_LEN, .split_hdr_size = 0, .header_split = 0, /**< Header Split disabled */ .hw_ip_checksum = 1, /**< IP checksum offload enabled */ .hw_vlan_filter = 0, /**< VLAN filtering disabled */ .jumbo_frame = 0, /**< Jumbo Frame Support disabled */ .hw_strip_crc = 1, /**< CRC stripped by hardware */ }, .rx_adv_conf = { .rss_conf = { .rss_key = NULL, .rss_hf = ETH_RSS_TCP | ETH_RSS_UDP | ETH_RSS_IP | ETH_RSS_L2_PAYLOAD, }, }, .txmode = { .mq_mode = ETH_MQ_TX_NONE, }, }; dpdk version is 16.11.1 thanks