On Tue, Mar 15, 2022 at 18:54, Vladimir Oltean <olteanv@xxxxxxxxx> wrote: > On Tue, Mar 15, 2022 at 01:25:31AM +0100, Tobias Waldekranz wrote: >> Make it possible to change the port state in a given MSTI by extending >> the bridge port netlink interface (RTM_SETLINK on PF_BRIDGE).The >> proposed iproute2 interface would be: >> >> bridge mst set dev <PORT> msti <MSTI> state <STATE> >> >> Current states in all applicable MSTIs can also be dumped via a >> corresponding RTM_GETLINK. The proposed iproute interface looks like >> this: >> >> $ bridge mst >> port msti >> vb1 0 >> state forwarding >> 100 >> state disabled >> vb2 0 >> state forwarding >> 100 >> state forwarding >> >> The preexisting per-VLAN states are still valid in the MST >> mode (although they are read-only), and can be queried as usual if one >> is interested in knowing a particular VLAN's state without having to >> care about the VID to MSTI mapping (in this example VLAN 20 and 30 are >> bound to MSTI 100): >> >> $ bridge -d vlan >> port vlan-id >> vb1 10 >> state forwarding mcast_router 1 >> 20 >> state disabled mcast_router 1 >> 30 >> state disabled mcast_router 1 >> 40 >> state forwarding mcast_router 1 >> vb2 10 >> state forwarding mcast_router 1 >> 20 >> state forwarding mcast_router 1 >> 30 >> state forwarding mcast_router 1 >> 40 >> state forwarding mcast_router 1 >> >> Signed-off-by: Tobias Waldekranz <tobias@xxxxxxxxxxxxxx> >> --- >> +static int br_mst_process_one(struct net_bridge_port *p, >> + const struct nlattr *attr, >> + struct netlink_ext_ack *extack) >> +{ >> + struct nlattr *tb[IFLA_BRIDGE_MST_ENTRY_MAX + 1]; >> + u16 msti; >> + u8 state; >> + int err; >> + >> + err = nla_parse_nested(tb, IFLA_BRIDGE_MST_ENTRY_MAX, attr, >> + br_mst_nl_policy, extack); >> + if (err) >> + return err; >> + >> + if (!tb[IFLA_BRIDGE_MST_ENTRY_MSTI]) { >> + NL_SET_ERR_MSG_MOD(extack, "MSTI not specified"); >> + return -EINVAL; >> + } >> + >> + if (!tb[IFLA_BRIDGE_MST_ENTRY_STATE]) { >> + NL_SET_ERR_MSG_MOD(extack, "State not specified"); >> + return -EINVAL; >> + } >> + >> + msti = nla_get_u16(tb[IFLA_BRIDGE_MST_ENTRY_MSTI]); >> + state = nla_get_u8(tb[IFLA_BRIDGE_MST_ENTRY_STATE]); >> + >> + br_mst_set_state(p, msti, state); > > Is there any reason why this isn't propagating the error? No, we definitely should. Thanks. >> + return 0; >> +}