netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Vlad Yasevich <vyasevic@redhat.com>
To: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Cc: "David S. Miller" <davem@davemloft.net>, netdev@vger.kernel.org
Subject: Re: [PATCH net 2/4] bridge: Handle priority-tagged frames properly
Date: Tue, 10 Sep 2013 10:03:31 -0400	[thread overview]
Message-ID: <522F26B3.60709@redhat.com> (raw)
In-Reply-To: <1378809280.3988.8.camel@ubuntu-vm-makita>

On 09/10/2013 06:34 AM, Toshiaki Makita wrote:
> IEEE 802.1Q says that when we receive priority-tagged (VID 0) frames
> use the PVID for the port as its VID.
> (See IEEE 802.1Q-2005 6.7.1 and Table 9-2)
>
> Apply the PVID to not only untagged frames but also priority-tagged frames.
>
> Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
> ---
>   net/bridge/br_vlan.c | 27 ++++++++++++++++++++-------
>   1 file changed, 20 insertions(+), 7 deletions(-)
>
> diff --git a/net/bridge/br_vlan.c b/net/bridge/br_vlan.c
> index 21b6d21..5a9c44a 100644
> --- a/net/bridge/br_vlan.c
> +++ b/net/bridge/br_vlan.c
> @@ -189,6 +189,8 @@ out:
>   bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v,
>   			struct sk_buff *skb, u16 *vid)
>   {
> +	int err;
> +
>   	/* If VLAN filtering is disabled on the bridge, all packets are
>   	 * permitted.
>   	 */
> @@ -201,20 +203,31 @@ bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v,
>   	if (!v)
>   		return false;
>
> -	if (br_vlan_get_tag(skb, vid)) {
> +	err = br_vlan_get_tag(skb, vid);
> +	if (!*vid) {
>   		u16 pvid = br_get_pvid(v);
>
> -		/* Frame did not have a tag.  See if pvid is set
> -		 * on this port.  That tells us which vlan untagged
> -		 * traffic belongs to.
> +		/* Frame had a tag with VID 0 or did not have a tag.
> +		 * See if pvid is set on this port.  That tells us which
> +		 * vlan untagged or priority-tagged traffic belongs to.
>   		 */
>   		if (pvid == VLAN_N_VID)
>   			return false;
>
> -		/* PVID is set on this port.  Any untagged ingress
> -		 * frame is considered to belong to this vlan.
> +		/* PVID is set on this port.  Any untagged or priority-tagged
> +		 * ingress frame is considered to belong to this vlan.
>   		 */
> -		__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), pvid);
> +		if (likely(err))
> +			/* Untagged Frame. */
> +			__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), pvid);
> +		else
> +			/* Priority-tagged Frame.
> +			 * At this point, We know that skb->vlan_tci had
> +			 * VLAN_TAG_PRESENT bit and its VID field was 0x000.
> +			 * We update only VID field and preserve PCP field.
> +			 */
> +			skb->vlan_tci |= pvid;
> +

In the case of a priority tagged frame, we should unroll the 
modification above and restore the VID field to 0.  Otherwise, you
may end up either stripping the vlan header completely or forwarding
with pvid of the ingress port.

-vlad
>   		return true;
>   	}
>
>

  reply	other threads:[~2013-09-10 14:03 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-10 10:27 [PATCH net 0/4] bridge: Fix problems around the PVID Toshiaki Makita
2013-09-10 10:32 ` [PATCH net 1/4] bridge: Don't use VID 0 and 4095 in vlan filtering Toshiaki Makita
2013-09-10 14:22   ` Vlad Yasevich
2013-09-12 19:55     ` David Miller
2013-09-12 20:57       ` Vlad Yasevich
2013-09-10 10:34 ` [PATCH net 2/4] bridge: Handle priority-tagged frames properly Toshiaki Makita
2013-09-10 14:03   ` Vlad Yasevich [this message]
2013-09-11  7:00     ` Toshiaki Makita
2013-09-11 16:32       ` Vlad Yasevich
2013-09-12  8:08         ` Toshiaki Makita
2013-09-10 10:37 ` [PATCH net 3/4] bridge: Fix the way the PVID is referenced Toshiaki Makita
2013-09-10 14:08   ` Vlad Yasevich
2013-09-10 14:24   ` Vlad Yasevich
2013-09-10 10:39 ` [PATCH net 4/4] bridge: Fix updating FDB entries when the PVID is applied Toshiaki Makita
2013-09-10 14:24   ` Vlad Yasevich
2013-09-12 20:00 ` [PATCH net 0/4] bridge: Fix problems around the PVID David Miller
2013-09-13 12:06   ` Toshiaki Makita
2013-09-13 15:21     ` Veaceslav Falico
2013-09-14 15:42       ` Toshiaki Makita
2013-09-16 17:49     ` Vlad Yasevich
2013-09-17  8:12       ` Toshiaki Makita
2013-09-23 14:41         ` Vlad Yasevich
2013-09-24 11:45           ` Toshiaki Makita
2013-09-24 13:35             ` Vlad Yasevich
2013-09-24 17:30               ` Toshiaki Makita
2013-09-24 17:55                 ` Vlad Yasevich
2013-09-26 10:38                   ` Toshiaki Makita
2013-09-26 14:22                     ` Vlad Yasevich
2013-09-27 17:11                       ` Toshiaki Makita
2013-09-27 18:10                         ` Vlad Yasevich
2013-09-30 11:46                           ` Toshiaki Makita
2013-09-30 16:01                             ` Vlad Yasevich
2013-10-01 11:56                               ` Toshiaki Makita
2013-10-09 15:01                                 ` Vlad Yasevich
2013-10-11  7:34                                   ` Toshiaki Makita
2013-10-11 14:14                                     ` Vlad Yasevich
2013-10-13 16:11                                       ` Toshiaki Makita
2013-10-15 13:55                                         ` Vlad Yasevich

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=522F26B3.60709@redhat.com \
    --to=vyasevic@redhat.com \
    --cc=davem@davemloft.net \
    --cc=makita.toshiaki@lab.ntt.co.jp \
    --cc=netdev@vger.kernel.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).