public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
From: Eric Dumazet <eric.dumazet@gmail.com>
To: Vladislav Zolotarov <vladz@broadcom.com>
Cc: "netdev@vger.kernel.org" <netdev@vger.kernel.org>
Subject: RE: Receiving of priority tagged packets
Date: Sun, 23 May 2010 22:32:31 +0200	[thread overview]
Message-ID: <1274646751.5020.78.camel@edumazet-laptop> (raw)
In-Reply-To: <8628FE4E7912BF47A96AE7DD7BAC0AADDDC6675BF8@SJEXCHCCR02.corp.ad.broadcom.com>

Le dimanche 23 mai 2010 à 03:51 -0700, Vladislav Zolotarov a écrit :
> 
> > -----Original Message-----
> > From: netdev-owner@vger.kernel.org [mailto:netdev-owner@vger.kernel.org] On
> > Behalf Of Vladislav Zolotarov
> > Sent: Sunday, May 23, 2010 1:23 PM
> > To: Eric Dumazet
> > Cc: netdev@vger.kernel.org
> > Subject: RE: Receiving of priority tagged packets
> > 
> > 
> > > -----Original Message-----
> > > From: Eric Dumazet [mailto:eric.dumazet@gmail.com]
> > > Sent: Sunday, May 23, 2010 1:07 PM
> > > To: Vladislav Zolotarov
> > > Cc: netdev@vger.kernel.org
> > > Subject: Re: Receiving of priority tagged packets
> > >
> > > Le dimanche 23 mai 2010 à 02:36 -0700, Vladislav Zolotarov a écrit :
> > > > Hello,
> > > > We were playing with FCoE in our labs and saw the strange behavior of
> > Linux
> > > networking stack in regard to priority-tagged frames (the ones that have a
> > > zero VID in a VLAN tag). We saw that until we explicitly added a zero vlan
> > > interface (vconfig add ethX 0) the stack refused to accept such packets
> > both
> > > in HW VLAN acceleration mode (skb is indicated using
> > > vlan_hwaccel_receive_skb()) and in a regular mode (skb is indicated with
> > > netif_receive_skb()).
> > > >
> > > > However "IEEE Std 802.1Q, 2006 Edition DRAFT D0.1" in section 6.7 states
> > > the following:
> > > >
> > > > Each Bridge Port shall support the following parameters for use by these
> > > (EISS tagging and detagging) functions:
> > > > 	c) an Acceptable Frame Types parameter with at least one of the
> > > following values:
> > > > 		1) Admit Only VLAN-tagged frames;
> > > > 		2) Admit Only Untagged and Priority-tagged frames;
> > > > 		3) Admit All frames
> > > >
> > > > So I guess this means that priority tagged frames should be accepted
> > > together with the untagged frames on the default interface ethX.
> > > >
> > > > Could anyone explain, pls., what's the expected behavior of the Linux
> > > Networking Stack in regard to the priority-tagged frames and what's
> > expected
> > > to be configured in order to start accepting them?
> > > >
> > > > Thanks in advance,
> > > > vlad
> > >
> > > So if eth0.0 is setup, incoming vlanid=0 frames are delivered to eth0.0,
> > > OK ? (This works in and out since commit 05423b241311c93)
> > >
> > > Now, if eth0.0 is not setup, you believe these frames should be directed
> > > to eth0, as if they were not tagged ?
> > >
> > > That seems a bit strange.
> > 
> > Well, as far as I understood this is what IEEE 802.1Q spec states...
> 
> From the same spec:
> 
> ***************
> 3.38 Priority-tagged frame: A tagged frame whose tag header carries priority information but carries no
> VLAN identification information.
> ***************
> 
> Namely priority-tagged frames are frames that carry no VLAN identification information and namely should be treated as non-VLAN packets.
> 
> However, as u mentioned above, current Networking Stack implementation handles them as if they have VID 0.
> 
> These two are quite different ways to handle the frame, don’t u think?

Following patch should fix it ?

Fallback to ethX is ethX.0 is not used.

diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c
index bd537fc..909f6e7 100644
--- a/net/8021q/vlan_core.c
+++ b/net/8021q/vlan_core.c
@@ -8,6 +8,9 @@
 int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,
 		      u16 vlan_tci, int polling)
 {
+	struct net_device *vlan_dev;
+	u16 vlan_id;
+
 	if (netpoll_rx(skb))
 		return NET_RX_DROP;
 
@@ -16,10 +19,14 @@ int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,
 
 	skb->skb_iif = skb->dev->ifindex;
 	__vlan_hwaccel_put_tag(skb, vlan_tci);
-	skb->dev = vlan_group_get_device(grp, vlan_tci & VLAN_VID_MASK);
+	vlan_id = vlan_tci & VLAN_VID_MASK;
+	vlan_dev = vlan_group_get_device(grp, vlan_id);
 
-	if (!skb->dev)
-		goto drop;
+	if (vlan_dev)
+		skb->dev = vlan_dev;
+	else
+		if (vlan_id)
+			goto drop;
 
 	return (polling ? netif_receive_skb(skb) : netif_rx(skb));
 
@@ -82,16 +89,22 @@ vlan_gro_common(struct napi_struct *napi, struct vlan_group *grp,
 		unsigned int vlan_tci, struct sk_buff *skb)
 {
 	struct sk_buff *p;
+	struct net_device *vlan_dev;
+	u16 vlan_id;
 
 	if (skb_bond_should_drop(skb, ACCESS_ONCE(skb->dev->master)))
 		goto drop;
 
 	skb->skb_iif = skb->dev->ifindex;
 	__vlan_hwaccel_put_tag(skb, vlan_tci);
-	skb->dev = vlan_group_get_device(grp, vlan_tci & VLAN_VID_MASK);
-
-	if (!skb->dev)
-		goto drop;
+	vlan_id = vlan_tci & VLAN_VID_MASK;
+	vlan_dev = vlan_group_get_device(grp, vlan_id);
+
+	if (vlan_dev)
+		skb->dev = vlan_dev;
+	else
+		if (vlan_id)
+			goto drop;
 
 	for (p = napi->gro_list; p; p = p->next) {
 		NAPI_GRO_CB(p)->same_flow =





  reply	other threads:[~2010-05-23 20:32 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-23  9:36 Receiving of priority tagged packets Vladislav Zolotarov
2010-05-23 10:06 ` Eric Dumazet
2010-05-23 10:22   ` Vladislav Zolotarov
2010-05-23 10:51     ` Vladislav Zolotarov
2010-05-23 20:32       ` Eric Dumazet [this message]
2010-05-24  7:44         ` Vladislav Zolotarov
2010-05-24  9:05           ` Vladislav Zolotarov

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=1274646751.5020.78.camel@edumazet-laptop \
    --to=eric.dumazet@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=vladz@broadcom.com \
    /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