(This is the second in a series of five posts. See
part 1,
part 3,
part 4,
part 5.)
By instrumenting the VLAN driver code with debug output, I have demonstrated that the checksum computed for the offending packets immediately after
the call to skb_pull_rcsum are all 0xffff; i.e., the checksum for only the part of the packet from the IP header onward is exactly what the checksum for a valid IP packet should be. The skbs created by the SunHME driver for packets larger than RX_COPY_THRESHOLD must differ from the ones created by said driver for smaller packets in such a way that causes the checksum to become corrupted only further on in the processing chain. Alignment, perhaps? This could be either a SunHME driver bug or a bug somewhere else, it seems.