Hi Lance, On Mon, Aug 24, 2020 at 04:11:45PM -0400, Lance Richardson wrote: > I was looking for some clarification regarding how rx checksum > flags should be set for tunnel packets having both inner and outer > IP/L4 headers. > > Based on comments in rte_mbuf_core.h, it seems to me. that the > inner (encapsulated) IP header checksum status should determine > which of these goes into ol_flags: > PKT_RX_IP_CKSUM_UNKNOWN > PKT_RX_IP_CKSUM_BAD > PKT_RX_IP_CKSUM_GOOD > PKT_RX_IP_CKSUM_NONE > > Similarly, the L4 checksum status should determine which of these > goes into ol_flags: > PKT_RX_L4_CKSUM_UNKNOWN > PKT_RX_L4_CKSUM_BAD > PKT_RX_L4_CKSUM_GOOD > PKT_RX_L4_CKSUM_NONE > > The IP header checksum status for the outer IP header should determine > whether this flag is set in ol_flags: > PKT_RX_EIP_CKSUM_BAD > > And for UDP-based tunnel encapsulations, the outer L4 checksum status > should determine which of these goes into ol_flags: > PKT_RX_OUTER_L4_CKSUM_UNKNOWN > PKT_RX_OUTER_L4_CKSUM_BAD > PKT_RX_OUTER_L4_CKSUM_GOOD > PKT_RX_OUTER_L4_CKSUM_INVALID > > Finally, the checksum status of inner headers should have no influence > on PKT_RX_EIP_CKSUM_BAD or PKT_RX_OUTER_L4_CKSUM_*, and > likewise the checksum status of outer headers should have no influence > on PKT_RX_L4_CKSUM_* or PKT_RX_IP_CKSUM_*. > > Is this correct? Apologies for such a basic question, but I'm having trouble > correlating the above with implementations. > > Thanks and regards, > Lance
The PKT_RX_EIP_CKSUM_BAD flag was added by these commits: https://git.dpdk.org/dpdk/commit/?id=c22265f6fd4cdcac9ee1b4970e4af8459d267516 https://git.dpdk.org/dpdk/commit/?id=d909af8f72ca3f8ab4fe1942abfb4f53e15ff8bc First, to be honnest, I don't think this API is the right one. From a software stack point of view, it would have been more logical to have PKT_RX_INNER_* flags instead of outer. That said, your understanding looks correct to me. I think this is the expected behavior when the DEV_RX_OFFLOAD_OUTER* capability is enabled. If the capability is not set, only the PKT_RX_IP_CKSUM* and PKT_RX_L4_CKSUM* flags may be set, and they reference the first layer. Regards, Olivier