qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 46/60] e1000: Discard oversized packets based on


From: Amos Kong
Subject: Re: [Qemu-devel] [PATCH 46/60] e1000: Discard oversized packets based on SBP|LPE
Date: Wed, 27 Nov 2013 19:14:30 +0800
User-agent: Mutt/1.5.21 (2010-09-15)

On Mon, Feb 04, 2013 at 02:40:56PM +0400, Michael Tokarev wrote:
> From: Michael Contreras <address@hidden>
> 
> Discard packets longer than 16384 when !SBP to match the hardware behavior.
> 
> Signed-off-by: Michael Contreras <address@hidden>
> Signed-off-by: Stefan Hajnoczi <address@hidden>
> (cherry picked from commit 2c0331f4f7d241995452b99afaf0aab00493334a)
> 
> Signed-off-by: Michael Tokarev <address@hidden>
> ---
>  hw/e1000.c |    7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/e1000.c b/hw/e1000.c
> index e22ba3d..87c798b 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:
> @@ -799,8 +801,9 @@ e1000_receive(VLANClientState *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;


This change is correct. I have a related question to ask.

I enabled E1000_DEBUG in qemu, and try to change nic MTU to >1500
in Windows 7/ Windows 8 guest. I found RCTL register isn't changed.

It mean E1000_RCTL_LPE bit is 0, so I ping guest from host with >
1500 size packet, the request ICMP packets will be dropped.

It seems a e1000 driver bug of Windows?


Thanks, Amos

>      }
> -- 
> 1.7.10.4



reply via email to

[Prev in Thread] Current Thread [Next in Thread]