diff options
author | Michael Contreras | 2012-12-05 19:31:30 +0100 |
---|---|---|
committer | Stefan Hajnoczi | 2013-01-07 10:43:21 +0100 |
commit | 2c0331f4f7d241995452b99afaf0aab00493334a (patch) | |
tree | 998825733291f8aa52d6961085593fa26d39c63e /hw/e1000.c | |
parent | Revert "virtio-pci: replace byte swap hack" (diff) | |
download | qemu-2c0331f4f7d241995452b99afaf0aab00493334a.tar.gz qemu-2c0331f4f7d241995452b99afaf0aab00493334a.tar.xz qemu-2c0331f4f7d241995452b99afaf0aab00493334a.zip |
e1000: Discard oversized packets based on SBP|LPE
Discard packets longer than 16384 when !SBP to match the hardware behavior.
Signed-off-by: Michael Contreras <michael@inetric.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'hw/e1000.c')
-rw-r--r-- | hw/e1000.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/hw/e1000.c b/hw/e1000.c index 92fb00a89f..8fd165456a 100644 --- a/hw/e1000.c +++ b/hw/e1000.c @@ -61,6 +61,8 @@ static int debugflags = DBGBIT(TXERR) | DBGBIT(GENERAL); /* this is the size past which hardware will drop packets when setting LPE=0 */ #define MAXIMUM_ETHERNET_VLAN_SIZE 1522 +/* this is the size past which hardware will drop packets when setting LPE=1 */ +#define MAXIMUM_ETHERNET_LPE_SIZE 16384 /* * HW models: @@ -809,8 +811,9 @@ e1000_receive(NetClientState *nc, const uint8_t *buf, size_t size) } /* Discard oversized packets if !LPE and !SBP. */ - if (size > MAXIMUM_ETHERNET_VLAN_SIZE - && !(s->mac_reg[RCTL] & E1000_RCTL_LPE) + if ((size > MAXIMUM_ETHERNET_LPE_SIZE || + (size > MAXIMUM_ETHERNET_VLAN_SIZE + && !(s->mac_reg[RCTL] & E1000_RCTL_LPE))) && !(s->mac_reg[RCTL] & E1000_RCTL_SBP)) { return size; } |