Bug #3304
closedneed workaround for QEMU bug that induces bad e1000g checksums
100%
Description
From Bryans patch:
According to the documentation, the packet options field (POPTS) is "ignored except on the first data descriptor of a packet." However, there is a bug in QEMU (638955) whereby the POPTS field within a given data descriptor is used to interpret that data descriptor -- regardless of whether or not the descriptor is the first in a packet or not. For a packet that spans multiple descriptors, the (virtual) HW checksum (either TCP/UDP or IP or both) will therefore not be performed on descriptors after the first, resulting in incorrect checksums and mysteriously dropped/retransmitted packets. Other drivers do not have this issue because they (harmlessly) set the POPTS field on every data descriptor to be the intended options for the entire packet. To circumvent this QEMU bug, we engage in this same behavior iff our type matches that which is emulated by QEMU (the 82540).
https://github.com/joyent/illumos-joyent/commit/d26ccb67c380bd8e12daf99987339ec493d84318