netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Shmulik Ladkani <shmulik.ladkani@gmail.com>
To: vyasevic@redhat.com
Cc: netdev@vger.kernel.org, shemminger@vyatta.com,
	davem@davemloft.net, or.gerlitz@gmail.com, jhs@mojatatu.com,
	mst@redhat.com, erdnetdev@gmail.com, jiri@resnulli.us
Subject: Re: [PATCH net-next V4 03/13] bridge: Validate that vlan is permitted on ingress
Date: Thu, 20 Dec 2012 22:13:32 +0200	[thread overview]
Message-ID: <20121220221332.103cd142.shmulik.ladkani@gmail.com> (raw)
In-Reply-To: <50D342B7.9010901@redhat.com>

Hi Vlad,

On Thu, 20 Dec 2012 11:54:15 -0500 Vlad Yasevich <vyasevic@redhat.com> wrote:
> > (2) frame ingress on a "non-vlan" port may egress on a "vlan enabled"
> >    port, depending on the ingress VID and the port-membership map of the
> >    egress port
> >    (and thus, PVID should be defined even to "non-vlan" ports, for the
> >    case where untagged frame is received on the non-vlan port)
> 
> Sort of.  The way I did it (testing now), is like this:
>     if there is egress policy
> 	apply policy and forward.
>     else if there was ingress policy (pvid)
> 	apply it and forward
>     else
> 	forward as is (old bridge behavior).
> 
> This way if there was a pvid on an ingress port and nothing on egress,
> then pvid applies.  If there was nothing configured on ingress port,
> but we have a egress policy, we'll apply any vlan information from
> the frame to egress policy.  In this case, ingress untagged traffic 
> would be assigned vlan 0.

Sorry, got too cryptic too me ;)
We're probably aligned, but if you don't mind I'd like to make sure I
got it right.

I'd expect the following logic if the bridge is a vlan bridge:

1. Frame ingress on a port
  Frame's VID is collected: if frame was tagged, its the VID found in
  the tag; if frame was untagged (or prio-tagged), the VID would be
  port's PVID.
2. Ingress membership verification
  Verify the ingress port is a member of the frame's VID vlan (collected
  on step 1).
  (Usually policy is 'drop' in case port is not a member).
  Easily calculated by testing if the port bit is set in vlan's port
  membership map.
3. Switching logic
  Consult FDB for a forward/flood/drop decision, resulting in a map of
  candidate ports the frame might egress upon (e.g. in the common case,
  a valid existing unicast entry, the result is just one candidate
  port).
4. Egress membership verification
  For each candidate port found on step 3, verify it is a member of the
  frame's VID vlan.
  (Usually, candidate ports that aren't members of the vlan will not be
  selected for actual egress).
  This can be easily calculated by masking the candidates port map
  (found on step 3) with the vlan's port membership map. The resulting
  masked map is final egress portmap.
5. Frame tag construction and egress 
  For each final egress port (found on step 4), verify its
  tagged/untagged policy in the vlan's egress-policy map.
  Properly add/remove the vlan tag (if needed) according to port's
  egress policy, and transmit.

To my best understanding, if all the ports are "vlan-enabled" (having a
non-empty vid list, i.e. belonging to at least one vlan), the behavior
of the implemented bridge is aligned with the above scheme.

For "non-vlan" ports (having en empty vid list), we treat them as if
they belong to ANY POSSIBLE vlan (as if their bit is always set in every
vlan port membeship map). Meaning, in step (2) verification always
suceeds for such ports, and in step (4) such ports will never be masked
out of the egress candidates portmap.

Please let me know if the implementation fits this.

> I'll try to document things sufficiently.  This hybrid approach may
> produce some unintended results.  We could always remove it or introduce
> the tunable to change default policy to drop once vlan configuration is
> in effect.

Ok.

Regards,
Shmulik

  reply	other threads:[~2012-12-20 20:14 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-19 17:48 [PATCH net-next V4 00/13] Add basic VLAN support to bridges Vlad Yasevich
2012-12-19 17:48 ` [PATCH net-next V4 01/13] vlan: wrap hw-acceleration calls in separate functions Vlad Yasevich
2012-12-19 17:48 ` [PATCH net-next V4 02/13] bridge: Add vlan filtering infrastructure Vlad Yasevich
2012-12-20 13:39   ` Shmulik Ladkani
2012-12-20 15:31     ` Vlad Yasevich
2012-12-19 17:48 ` [PATCH net-next V4 03/13] bridge: Validate that vlan is permitted on ingress Vlad Yasevich
2012-12-20  7:27   ` Cong Wang
2012-12-20 14:07   ` Shmulik Ladkani
2012-12-20 15:41     ` Vlad Yasevich
2012-12-20 16:24       ` Shmulik Ladkani
2012-12-20 16:54         ` Vlad Yasevich
2012-12-20 20:13           ` Shmulik Ladkani [this message]
2012-12-21  4:48       ` Shmulik Ladkani
2012-12-19 17:48 ` [PATCH net-next V4 04/13] bridge: Verify that a vlan is allowed to egress on give port Vlad Yasevich
2012-12-20 14:28   ` Shmulik Ladkani
2012-12-19 17:48 ` [PATCH net-next V4 05/13] bridge: Cache vlan in the cb for faster egress lookup Vlad Yasevich
2012-12-19 17:48 ` [PATCH net-next V4 06/13] bridge: Add vlan to unicast fdb entries Vlad Yasevich
2012-12-19 17:48 ` [PATCH net-next V4 07/13] bridge: Add vlan id to multicast groups Vlad Yasevich
2012-12-20  8:05   ` Cong Wang
2012-12-19 17:48 ` [PATCH net-next V4 08/13] bridge: Add netlink interface to configure vlans on bridge ports Vlad Yasevich
2012-12-20  7:48   ` Cong Wang
2012-12-19 17:48 ` [PATCH net-next V4 09/13] bridge: Add vlan support to static neighbors Vlad Yasevich
2012-12-19 17:48 ` [PATCH net-next V4 10/13] bridge: Add the ability to configure untagged vlans Vlad Yasevich
2012-12-19 17:48 ` [PATCH net-next V4 11/13] bridge: Implement untagged vlan handling Vlad Yasevich
2012-12-19 17:48 ` [PATCH net-next V4 12/13] bridge: Dump vlan information from a bridge port Vlad Yasevich
2012-12-19 17:48 ` [PATCH net-next V4 13/13] bridge: Add vlan support for local fdb entries Vlad Yasevich
2012-12-19 22:54 ` [PATCH net-next V4 00/13] Add basic VLAN support to bridges Andrew Collins
2012-12-19 22:58   ` Vlad Yasevich
2012-12-20 10:08   ` Vitalii Demianets
2012-12-20 17:07     ` Stephen Hemminger

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=20121220221332.103cd142.shmulik.ladkani@gmail.com \
    --to=shmulik.ladkani@gmail.com \
    --cc=davem@davemloft.net \
    --cc=erdnetdev@gmail.com \
    --cc=jhs@mojatatu.com \
    --cc=jiri@resnulli.us \
    --cc=mst@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=or.gerlitz@gmail.com \
    --cc=shemminger@vyatta.com \
    --cc=vyasevic@redhat.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;
as well as URLs for NNTP newsgroup(s).