netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Petko Manolov <petkan@nucleusys.com>
To: Matthias-Christian Ott <ott@mirix.org>
Cc: Andrew Lunn <andrew@lunn.ch>,
	linux-usb@vger.kernel.org, netdev@vger.kernel.org
Subject: Re: [PATCH] net: usb: pegasus: Do not drop long Ethernet frames
Date: Mon, 27 Dec 2021 00:28:42 +0200	[thread overview]
Message-ID: <YcjsmvZdFsbBLDYK@karbon.k.g> (raw)
In-Reply-To: <a87c4ea5-72ef-8dd3-de98-01f799d627ef@mirix.org>

On 21-12-26 17:01:24, Matthias-Christian Ott wrote:
> On 26/12/2021 16:39, Andrew Lunn wrote:
> > On Sun, Dec 26, 2021 at 02:29:30PM +0100, Matthias-Christian Ott wrote:
> >> The D-Link DSB-650TX (2001:4002) is unable to receive Ethernet frames that
> >> are longer than 1518 octets, for example, Ethernet frames that contain
> >> 802.1Q VLAN tags.
> >>
> >> The frames are sent to the pegasus driver via USB but the driver discards
> >> them because they have the Long_pkt field set to 1 in the received status
> >> report. The function read_bulk_callback of the pegasus driver treats such
> >> received "packets" (in the terminology of the hardware) as errors but the
> >> field simply does just indicate that the Ethernet frame (MAC destination to
> >> FCS) is longer than 1518 octets.
> >>
> >> It seems that in the 1990s there was a distinction between "giant" (> 1518)
> >> and "runt" (< 64) frames and the hardware includes flags to indicate this
> >> distinction. It seems that the purpose of the distinction "giant" frames
> >> was to not allow infinitely long frames due to transmission errors and to
> >> allow hardware to have an upper limit of the frame size. However, the
> >> hardware already has such limit with its 2048 octet receive buffer and,
> >> therefore, Long_pkt is merely a convention and should not be treated as a
> >> receive error.
> >>
> >> Actually, the hardware is even able to receive Ethernet frames with 2048
> >> octets which exceeds the claimed limit frame size limit of the driver of
> >> 1536 octets (PEGASUS_MTU).
> >>
> >> Signed-off-by: Matthias-Christian Ott <ott@mirix.org>
> >> ---
> >>  drivers/net/usb/pegasus.c | 4 ++--
> >>  1 file changed, 2 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/drivers/net/usb/pegasus.c b/drivers/net/usb/pegasus.c
> >> index 140d11ae6688..2582daf23015 100644
> >> --- a/drivers/net/usb/pegasus.c
> >> +++ b/drivers/net/usb/pegasus.c
> >> @@ -499,11 +499,11 @@ static void read_bulk_callback(struct urb *urb)
> >>  		goto goon;
> >>  
> >>  	rx_status = buf[count - 2];
> >> -	if (rx_status & 0x1e) {
> >> +	if (rx_status & 0x1c) {
> >>  		netif_dbg(pegasus, rx_err, net,
> >>  			  "RX packet error %x\n", rx_status);
> >>  		net->stats.rx_errors++;
> >> -		if (rx_status & 0x06)	/* long or runt	*/
> >> +		if (rx_status & 0x04)	/* runt	*/
> > 
> > I've nothing against this patch, but if you are working on the driver, it
> > would be nice to replace these hex numbers with #defines using BIT, or
> > FIELD. It will make the code more readable.
> 
> Replacing the constants with macros is on my list of things that I want to do.
> In this case, I did not do it because I wanted to a have small patch that gets
> easily accepted and allows me to figure out the current process to submit
> patches after years of inactivity.

To be honest, that's due to the fact the original code was submitted more than
20 years ago, when the driver acceptance criteria were a lot more relaxed than
they are now.  Ideally, these constants should be replaced with human readable
macros, something which i never got around doing.

If you are in the mood, you could send two patch series, one that fixes the
constants and another that fixes the packet size bug.  As is often the case, one
of them may get mainlined right away, while the other is being debated for a
while.


cheers,
Petko

  parent reply	other threads:[~2021-12-26 22:28 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-26 13:29 [PATCH] net: usb: pegasus: Do not drop long Ethernet frames Matthias-Christian Ott
2021-12-26 15:39 ` Andrew Lunn
2021-12-26 16:01   ` Matthias-Christian Ott
2021-12-26 16:31     ` Andrew Lunn
2021-12-26 22:21       ` Matthias-Christian Ott
2021-12-26 22:28     ` Petko Manolov [this message]
2021-12-27  9:56 ` Sergei Shtylyov
2022-01-02 14:22   ` Matthias-Christian Ott

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YcjsmvZdFsbBLDYK@karbon.k.g \
    --to=petkan@nucleusys.com \
    --cc=andrew@lunn.ch \
    --cc=linux-usb@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=ott@mirix.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).