From pookie@drims.net  Wed Aug 13 06:48:57 2003
Return-Path: <pookie@drims.net>
Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id 83A8237B401
	for <FreeBSD-gnats-submit@freebsd.org>; Wed, 13 Aug 2003 06:48:57 -0700 (PDT)
Received: from ash.drims.net (dom2-124.menta.net [212.78.153.124])
	by mx1.FreeBSD.org (Postfix) with ESMTP id 5B25C43FBF
	for <FreeBSD-gnats-submit@freebsd.org>; Wed, 13 Aug 2003 06:48:55 -0700 (PDT)
	(envelope-from pookie@drims.net)
Received: from amavis by ash.drims.net with scanned-ok (Exim 3.36 #1 (Debian))
	id 19mvzi-000159-00
	for <FreeBSD-gnats-submit@freebsd.org>; Wed, 13 Aug 2003 15:48:54 +0200
Received: from yukai.drims.net ([192.168.0.4] helo=drims.net)
	by ash.drims.net with esmtp (Exim 3.36 #1 (Debian))
	id 19mvyD-00014R-00
	for <FreeBSD-gnats-submit@freebsd.org>; Wed, 13 Aug 2003 15:47:21 +0200
Message-Id: <A91764A2-CD94-11D7-9DC5-000A956C3248@drims.net>
Date: Wed, 13 Aug 2003 15:47:20 +0200
From: pookie <pookie@drims.net>
To: FreeBSD-gnats-submit@freebsd.org
Subject: [patch] discard oversize frame (ether type 800 flags 3 len 1518 > max 1514) previously happening in if_xe also found in if_de

>Number:         55542
>Category:       kern
>Synopsis:       [de] [patch] discard oversize frame (ether type 800 flags 3 len 1518 > max 1514) previously happening in if_xe also found in if_de
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    yongari
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Wed Aug 13 06:50:09 PDT 2003
>Closed-Date:    Mon Aug 16 01:54:15 UTC 2010
>Last-Modified:  Mon Aug 16 01:54:15 UTC 2010
>Originator:     David Mari
>Release:        FreeBSD 5.1-RELEASE i386
>Organization:
>Environment:
 System: FreeBSD virtualyuka.drims.net 5.1-RELEASE FreeBSD 5.1-RELEASE #0: Mon Aug 11 15:06:41 CEST 2003 
     root@virtualyuka.drims.net:/usr/src/sys/i386/compile/GENERIC i386
 
>Description:

 discard oversize frame (ether type 800 flags 3 len 1518 > max 1514) 
 previously happening in if_xe also found in if_de
 
>How-To-Repeat:
          ping -s 2000 <ip>
          using "de" eth driver
 
>Fix:
 
 Just add a line to /usr/src/sys/pci/if_de.c
 
 Diff:
 
 --- if_de_diff begins here ---
 *** if_de_old.c Mon Aug 11 12:57:59 2003
 --- if_de.c     Mon Aug 11 15:44:30 2003
 ***************
 *** 3565,3570 ****
 --- 3565,3571 ----
    #endif
                  ) {
    #if !defined(TULIP_COPY_RXDATA)
 +               ms->m_flags |= M_HASFCS;
                  ms->m_pkthdr.len = total_len;
                  ms->m_pkthdr.rcvif = ifp;
                  (*ifp->if_input)(ifp, ms);
 --- if_de_diff ends here --- 
                               
 
>Release-Note:
>Audit-Trail:
Class-Changed-From-To: sw-bug->update 
Class-Changed-By: ceri 
Class-Changed-When: Wed Aug 13 11:44:08 PDT 2003 
Class-Changed-Why:  
Reassign misfiled PR. 


Responsible-Changed-From-To: gnats-admin->freebsd-bugs 
Responsible-Changed-By: ceri 
Responsible-Changed-When: Wed Aug 13 11:44:08 PDT 2003 
Responsible-Changed-Why:  
Reassign misfiled PR. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=55542 
Responsible-Changed-From-To: freebsd-bugs->andre 
Responsible-Changed-By: andre 
Responsible-Changed-When: Sat Dec 27 08:50:34 PST 2003 
Responsible-Changed-Why:  
Take over. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=55542 
State-Changed-From-To: open->analyzed 
State-Changed-By: andre 
State-Changed-When: Tue Dec 30 05:45:19 PST 2003 
State-Changed-Why:  
See my last message. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=55542 

From: Andre Oppermann <andre@freebsd.org>
To: freebsd-gnats-submit@FreeBSD.org, pookie@drims.net
Cc:  
Subject: Re: kern/55542: [patch] discard oversize frame (ether type 800 flags
 3 len 1518 > max 1514) previously happening in if_xe also found in if_de
Date: Tue, 30 Dec 2003 14:45:06 +0100

 I've looked at the de driver in FreeBSD and NetBSD.  I'm not sure why
 this HASFCS is needed.  NetBSD doesn't do it.  It might be neccessary
 or the problem may be in a different area.  There hasn't been any bigger
 change to de which might explain the different flag needed.
 
 It might be that the Originator of this PR has connected the de card
 to a switch with VLAN enabled on that port and thus the ethernet frames
 are bigger.
 
 I've found a fastethernet card with a DEC21140-AB in an old PC here
 for checking this out.  However I'm not sure when exactly I'm able to
 get to it.
 
 -- 
 Andre
 
Responsible-Changed-From-To: andre->yongari 
Responsible-Changed-By: andre 
Responsible-Changed-When: Sat Aug 14 22:58:37 UTC 2010 
Responsible-Changed-Why:  
Send over to de-facto maintainer.  Maybe he has some further insight. 
If not, just close this PR. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=55542 
State-Changed-From-To: analyzed->closed 
State-Changed-By: yongari 
State-Changed-When: Mon Aug 16 01:53:43 UTC 2010 
State-Changed-Why:  
It seems some de(4) controllers have no problems in handling frames 
that are 1518 bytes in length.  If controller encounter large sized 
frames that could not fit in a single RX buffer, the received frame 
will span multiple RX buffers and driver will chain multiple 
buffers into single mbuf chains. I don't see driver bug here. 

The original problem seems to come from ether_input() where it used 
to check the length of frame and discarded it if it exceeds current 
interface's MTU size. Because that code was believed to be bad idea 
it was removed long time ago. So I believe you will not see the 
issue on more recent FreeBSD releases. 

By the way, given that the controller can receive frames that are 
1518 bytes in length, I think we can safely assume de(4) can 
support VLAN oversized frames. However it's hard to get de(4) 
controllers in these days I didn't touch that part. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=55542 
>Unformatted:
