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? > + return 0; > +}