Tobias Waldekranz
2022-Mar-15 00:25 UTC
[Bridge] [PATCH v4 net-next 04/15] net: bridge: mst: Notify switchdev drivers of MST mode changes
Trigger a switchdev event whenever the bridge's MST mode is enabled/disabled. This allows constituent ports to either perform any required hardware config, or refuse the change if it not supported. Signed-off-by: Tobias Waldekranz <tobias at waldekranz.com> --- include/net/switchdev.h | 2 ++ net/bridge/br_mst.c | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/include/net/switchdev.h b/include/net/switchdev.h index 3e424d40fae3..85dd004dc9ad 100644 --- a/include/net/switchdev.h +++ b/include/net/switchdev.h @@ -27,6 +27,7 @@ enum switchdev_attr_id { SWITCHDEV_ATTR_ID_BRIDGE_VLAN_PROTOCOL, SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED, SWITCHDEV_ATTR_ID_BRIDGE_MROUTER, + SWITCHDEV_ATTR_ID_BRIDGE_MST, SWITCHDEV_ATTR_ID_MRP_PORT_ROLE, }; @@ -48,6 +49,7 @@ struct switchdev_attr { clock_t ageing_time; /* BRIDGE_AGEING_TIME */ bool vlan_filtering; /* BRIDGE_VLAN_FILTERING */ u16 vlan_protocol; /* BRIDGE_VLAN_PROTOCOL */ + bool mst; /* BRIDGE_MST */ bool mc_disabled; /* MC_DISABLED */ u8 mrp_port_role; /* MRP_PORT_ROLE */ } u; diff --git a/net/bridge/br_mst.c b/net/bridge/br_mst.c index 355ad102d6b1..051b9358946b 100644 --- a/net/bridge/br_mst.c +++ b/net/bridge/br_mst.c @@ -99,8 +99,14 @@ void br_mst_vlan_init_state(struct net_bridge_vlan *v) int br_mst_set_enabled(struct net_bridge *br, bool on, struct netlink_ext_ack *extack) { + struct switchdev_attr attr = { + .id = SWITCHDEV_ATTR_ID_BRIDGE_MST, + .orig_dev = br->dev, + .u.mst = on, + }; struct net_bridge_vlan_group *vg; struct net_bridge_port *p; + int err; list_for_each_entry(p, &br->port_list, list) { vg = nbp_vlan_group(p); @@ -116,6 +122,10 @@ int br_mst_set_enabled(struct net_bridge *br, bool on, if (br_opt_get(br, BROPT_MST_ENABLED) == on) return 0; + err = switchdev_port_attr_set(br->dev, &attr, extack); + if (err && err != -EOPNOTSUPP) + return err; + if (on) static_branch_enable(&br_mst_used); else -- 2.25.1
Jakub Kicinski
2022-Mar-15 05:32 UTC
[Bridge] [PATCH v4 net-next 04/15] net: bridge: mst: Notify switchdev drivers of MST mode changes
On Tue, 15 Mar 2022 01:25:32 +0100 Tobias Waldekranz wrote:> Trigger a switchdev event whenever the bridge's MST mode is > enabled/disabled. This allows constituent ports to either perform any > required hardware config, or refuse the change if it not supported. > > Signed-off-by: Tobias Waldekranz <tobias at waldekranz.com>../net/bridge/br_mst.c: In function ?br_mst_set_enabled?: ../net/bridge/br_mst.c:102:16: error: variable ?attr? has initializer but incomplete type 102 | struct switchdev_attr attr = { | ^~~~~~~~~~~~~~ ../net/bridge/br_mst.c:103:18: error: ?struct switchdev_attr? has no member named ?id? 103 | .id = SWITCHDEV_ATTR_ID_BRIDGE_MST, | ^~ ../net/bridge/br_mst.c:103:23: error: ?SWITCHDEV_ATTR_ID_BRIDGE_MST? undeclared (first use in this function) 103 | .id = SWITCHDEV_ATTR_ID_BRIDGE_MST, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../net/bridge/br_mst.c:103:23: note: each undeclared identifier is reported only once for each function it appears in ../net/bridge/br_mst.c:103:23: warning: excess elements in struct initializer ../net/bridge/br_mst.c:103:23: note: (near initialization for ?attr?) ../net/bridge/br_mst.c:104:18: error: ?struct switchdev_attr? has no member named ?orig_dev? 104 | .orig_dev = br->dev, | ^~~~~~~~ ../net/bridge/br_mst.c:104:29: warning: excess elements in struct initializer 104 | .orig_dev = br->dev, | ^~ ../net/bridge/br_mst.c:104:29: note: (near initialization for ?attr?) ../net/bridge/br_mst.c:105:18: error: ?struct switchdev_attr? has no member named ?u? 105 | .u.mst = on, | ^ ../net/bridge/br_mst.c:105:26: warning: excess elements in struct initializer 105 | .u.mst = on, | ^~ ../net/bridge/br_mst.c:105:26: note: (near initialization for ?attr?) ../net/bridge/br_mst.c:102:31: error: storage size of ?attr? isn?t known 102 | struct switchdev_attr attr = { | ^~~~ ../net/bridge/br_mst.c:125:15: error: implicit declaration of function ?switchdev_port_attr_set?; did you mean ?br_switchdev_port_vlan_del?? [-Werror=implicit-function-declaration] 125 | err = switchdev_port_attr_set(br->dev, &attr, extack); | ^~~~~~~~~~~~~~~~~~~~~~~ | br_switchdev_port_vlan_del ../net/bridge/br_mst.c:102:31: warning: unused variable ?attr? [-Wunused-variable] 102 | struct switchdev_attr attr = { | ^~~~