Hi, I noticed that TCP rx checksum verification fails when using the tap pmd. In this particular case packets with correct checksums will always have PKT_RX_L4_CKSUM_BAD set in ol_flags. The rte_ipv4_udptcp_cksum() and rte_ipv6_udptcp_cksum() functions already return the ones complement of the checksum, unlike rte_raw_cksum(), which is used for the L3 checksum verification. After changing the code to use rte_ipv4_udptcp_cksum() instead of ~rte_ipv4_udptcp_cksum() the problem seems to be fixed. The same thing goes for rte_ipv6_udptcp_cksum().
Regards, Jacques