Commit bcfd7801 authored by Scott Feldman's avatar Scott Feldman Committed by David S. Miller

rocker: install untagged VLAN (vid=0) support for each port

On port probe, install by default untagged VLAN support.  This is
equivalent to running the command:

	bridge vlan add vid 0 dev DEV self

A user could, if they wanted, manaully removing untagged support from the
port by running the command:

	bridge vlan del vid 0 dev DEV self

But installing it by default on port initialization gives the normal
expected behavior.
Signed-off-by: default avatarScott Feldman <sfeldma@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent cec04a60
...@@ -3136,6 +3136,8 @@ static int rocker_port_vlan_flood_group(struct rocker_port *rocker_port, ...@@ -3136,6 +3136,8 @@ static int rocker_port_vlan_flood_group(struct rocker_port *rocker_port,
for (i = 0; i < rocker->port_count; i++) { for (i = 0; i < rocker->port_count; i++) {
p = rocker->ports[i]; p = rocker->ports[i];
if (!p)
continue;
if (!rocker_port_is_bridged(p)) if (!rocker_port_is_bridged(p))
continue; continue;
if (test_bit(ntohs(vlan_id), p->vlan_bitmap)) { if (test_bit(ntohs(vlan_id), p->vlan_bitmap)) {
...@@ -3195,7 +3197,7 @@ static int rocker_port_vlan_l2_groups(struct rocker_port *rocker_port, ...@@ -3195,7 +3197,7 @@ static int rocker_port_vlan_l2_groups(struct rocker_port *rocker_port,
for (i = 0; i < rocker->port_count; i++) { for (i = 0; i < rocker->port_count; i++) {
p = rocker->ports[i]; p = rocker->ports[i];
if (test_bit(ntohs(vlan_id), p->vlan_bitmap)) if (p && test_bit(ntohs(vlan_id), p->vlan_bitmap))
ref++; ref++;
} }
...@@ -4857,6 +4859,7 @@ static int rocker_probe_port(struct rocker *rocker, unsigned int port_number) ...@@ -4857,6 +4859,7 @@ static int rocker_probe_port(struct rocker *rocker, unsigned int port_number)
const struct pci_dev *pdev = rocker->pdev; const struct pci_dev *pdev = rocker->pdev;
struct rocker_port *rocker_port; struct rocker_port *rocker_port;
struct net_device *dev; struct net_device *dev;
u16 untagged_vid = 0;
int err; int err;
dev = alloc_etherdev(sizeof(struct rocker_port)); dev = alloc_etherdev(sizeof(struct rocker_port));
...@@ -4892,16 +4895,27 @@ static int rocker_probe_port(struct rocker *rocker, unsigned int port_number) ...@@ -4892,16 +4895,27 @@ static int rocker_probe_port(struct rocker *rocker, unsigned int port_number)
rocker_port_set_learning(rocker_port, SWITCHDEV_TRANS_NONE); rocker_port_set_learning(rocker_port, SWITCHDEV_TRANS_NONE);
rocker_port->internal_vlan_id =
rocker_port_internal_vlan_id_get(rocker_port, dev->ifindex);
err = rocker_port_ig_tbl(rocker_port, SWITCHDEV_TRANS_NONE, 0); err = rocker_port_ig_tbl(rocker_port, SWITCHDEV_TRANS_NONE, 0);
if (err) { if (err) {
dev_err(&pdev->dev, "install ig port table failed\n"); dev_err(&pdev->dev, "install ig port table failed\n");
goto err_port_ig_tbl; goto err_port_ig_tbl;
} }
rocker_port->internal_vlan_id =
rocker_port_internal_vlan_id_get(rocker_port, dev->ifindex);
err = rocker_port_vlan_add(rocker_port, SWITCHDEV_TRANS_NONE,
untagged_vid, 0);
if (err) {
netdev_err(rocker_port->dev, "install untagged VLAN failed\n");
goto err_untagged_vlan;
}
return 0; return 0;
err_untagged_vlan:
rocker_port_ig_tbl(rocker_port, SWITCHDEV_TRANS_NONE,
ROCKER_OP_FLAG_REMOVE);
err_port_ig_tbl: err_port_ig_tbl:
unregister_netdev(dev); unregister_netdev(dev);
err_register_netdev: err_register_netdev:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment