From: Vladimir Oltean <olteanv@gmail.com>
To: f.fainelli@gmail.com, vivien.didelot@gmail.com, andrew@lunn.ch,
idosch@idosch.org, roopa@cumulusnetworks.com,
nikolay@cumulusnetworks.com, davem@davemloft.net
Cc: netdev@vger.kernel.org, Vladimir Oltean <olteanv@gmail.com>
Subject: [PATCH net-next 4/6] net: dsa: Don't program the VLAN as pvid on the upstream port
Date: Tue, 20 Aug 2019 03:00:00 +0300 [thread overview]
Message-ID: <20190820000002.9776-5-olteanv@gmail.com> (raw)
In-Reply-To: <20190820000002.9776-1-olteanv@gmail.com>
Commit b2f81d304cee ("net: dsa: add CPU and DSA ports as VLAN members")
programs the VLAN from the bridge into the specified port as well as the
upstream port, with the same set of flags.
Consider the typical case of installing pvid 1 on user port 1, pvid 2 on
user port 2, etc. The upstream port would end up having a pvid equal to
the last user port whose pvid was programmed from the bridge. Less than
useful.
So just don't change the pvid of the upstream port and let it be
whatever the driver set it internally to be.
Signed-off-by: Vladimir Oltean <olteanv@gmail.com>
---
net/dsa/switch.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/net/dsa/switch.c b/net/dsa/switch.c
index 84ab2336131e..02ccc53f1926 100644
--- a/net/dsa/switch.c
+++ b/net/dsa/switch.c
@@ -239,17 +239,21 @@ dsa_switch_vlan_prepare_bitmap(struct dsa_switch *ds,
const struct switchdev_obj_port_vlan *vlan,
const unsigned long *bitmap)
{
+ struct switchdev_obj_port_vlan v = *vlan;
int port, err;
if (!ds->ops->port_vlan_prepare || !ds->ops->port_vlan_add)
return -EOPNOTSUPP;
for_each_set_bit(port, bitmap, ds->num_ports) {
- err = dsa_port_vlan_check(ds, port, vlan);
+ if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port))
+ v.flags &= ~BRIDGE_VLAN_INFO_PVID;
+
+ err = dsa_port_vlan_check(ds, port, &v);
if (err)
return err;
- err = ds->ops->port_vlan_prepare(ds, port, vlan);
+ err = ds->ops->port_vlan_prepare(ds, port, &v);
if (err)
return err;
}
@@ -262,10 +266,14 @@ dsa_switch_vlan_add_bitmap(struct dsa_switch *ds,
const struct switchdev_obj_port_vlan *vlan,
const unsigned long *bitmap)
{
+ struct switchdev_obj_port_vlan v = *vlan;
int port;
- for_each_set_bit(port, bitmap, ds->num_ports)
- ds->ops->port_vlan_add(ds, port, vlan);
+ for_each_set_bit(port, bitmap, ds->num_ports) {
+ if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port))
+ v.flags &= ~BRIDGE_VLAN_INFO_PVID;
+ ds->ops->port_vlan_add(ds, port, &v);
+ }
}
static int dsa_switch_vlan_add(struct dsa_switch *ds,
--
2.17.1
next prev parent reply other threads:[~2019-08-20 0:00 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-19 23:59 [PATCH net-next 0/6] Dynamic toggling of vlan_filtering for SJA1105 DSA Vladimir Oltean
2019-08-19 23:59 ` [PATCH net-next 1/6] net: dsa: tag_8021q: Future-proof the reserved fields in the custom VID Vladimir Oltean
2019-08-20 3:16 ` Florian Fainelli
2019-08-19 23:59 ` [PATCH net-next 2/6] net: bridge: Populate the pvid flag in br_vlan_get_info Vladimir Oltean
2019-08-20 0:12 ` Nikolay Aleksandrov
2019-08-19 23:59 ` [PATCH net-next 3/6] net: dsa: Delete the VID from the upstream port as well Vladimir Oltean
2019-08-20 5:51 ` Vivien Didelot
2019-08-20 9:54 ` Vladimir Oltean
2019-08-20 17:52 ` Vivien Didelot
2019-08-20 19:40 ` Florian Fainelli
2019-08-20 20:40 ` Vladimir Oltean
2019-08-20 20:58 ` Vivien Didelot
2019-08-20 21:02 ` Vladimir Oltean
2019-08-20 21:36 ` Vivien Didelot
2019-08-20 22:09 ` Vladimir Oltean
2019-08-21 3:30 ` Vivien Didelot
2019-08-21 9:51 ` Vladimir Oltean
2019-08-20 0:00 ` Vladimir Oltean [this message]
2019-08-20 3:15 ` [PATCH net-next 4/6] net: dsa: Don't program the VLAN as pvid on the upstream port Florian Fainelli
2019-08-20 12:09 ` Vladimir Oltean
2019-08-20 22:43 ` Florian Fainelli
2019-08-20 6:07 ` Vivien Didelot
2019-08-20 10:22 ` Vladimir Oltean
2019-08-20 0:00 ` [PATCH net-next 5/6] net: dsa: Allow proper internal use of VLANs Vladimir Oltean
2019-08-20 3:20 ` Florian Fainelli
2019-08-20 0:00 ` [PATCH net-next 6/6] net: dsa: tag_8021q: Restore bridge pvid when enabling vlan_filtering Vladimir Oltean
2019-08-20 3:32 ` Florian Fainelli
2019-08-20 10:28 ` Vladimir Oltean
2019-08-20 17:36 ` Florian Fainelli
2019-08-20 23:24 ` Florian Fainelli
2019-08-20 8:04 ` [PATCH net-next 0/6] Dynamic toggling of vlan_filtering for SJA1105 DSA Vivien Didelot
2019-08-20 10:18 ` Vladimir Oltean
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=20190820000002.9776-5-olteanv@gmail.com \
--to=olteanv@gmail.com \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=f.fainelli@gmail.com \
--cc=idosch@idosch.org \
--cc=netdev@vger.kernel.org \
--cc=nikolay@cumulusnetworks.com \
--cc=roopa@cumulusnetworks.com \
--cc=vivien.didelot@gmail.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).