qemu: e1000 fix TOR math
Patch b0b900070c
made
TOR valuer incorrect: the spec says it should always
include the CRC field.
No one seems to use this field, but better to stick to spec.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
ba5e7f8216
commit
a05e8a6e90
11
hw/e1000.c
11
hw/e1000.c
@ -345,7 +345,7 @@ is_vlan_txd(uint32_t txd_lower)
|
||||
|
||||
/* FCS aka Ethernet CRC-32. We don't get it from backends and can't
|
||||
* fill it in, just pad descriptor length by 4 bytes unless guest
|
||||
* told us to trip it off the packet. */
|
||||
* told us to strip it off the packet. */
|
||||
static inline int
|
||||
fcs_len(E1000State *s)
|
||||
{
|
||||
@ -690,9 +690,14 @@ e1000_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
|
||||
|
||||
s->mac_reg[GPRC]++;
|
||||
s->mac_reg[TPR]++;
|
||||
n = s->mac_reg[TORL];
|
||||
if ((s->mac_reg[TORL] += size) < n)
|
||||
/* TOR - Total Octets Received:
|
||||
* This register includes bytes received in a packet from the <Destination
|
||||
* Address> field through the <CRC> field, inclusively.
|
||||
*/
|
||||
n = s->mac_reg[TORL] + size + /* Always include FCS length. */ 4;
|
||||
if (n < s->mac_reg[TORL])
|
||||
s->mac_reg[TORH]++;
|
||||
s->mac_reg[TORL] = n;
|
||||
|
||||
n = E1000_ICS_RXT0;
|
||||
if ((rdt = s->mac_reg[RDT]) < s->mac_reg[RDH])
|
||||
|
Loading…
Reference in New Issue
Block a user