Commit 2c0331f4 authored by Michael Contreras's avatar Michael Contreras Committed by Stefan Hajnoczi
Browse files

e1000: Discard oversized packets based on SBP|LPE



Discard packets longer than 16384 when !SBP to match the hardware behavior.

Signed-off-by: default avatarMichael Contreras <michael@inetric.com>
Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
parent 8e4a424b
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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;
    }