Lines Matching +full:p +full:- +full:state

1 // SPDX-License-Identifier: GPL-2.0-or-later
34 return -EINVAL; in br_mst_get_info()
38 return -EINVAL; in br_mst_get_info()
42 list_for_each_entry(v, &vg->vlan_list, vlist) { in br_mst_get_info()
43 if (v->msti == msti) in br_mst_get_info()
44 __set_bit(v->vid, vids); in br_mst_get_info()
51 int br_mst_get_state(const struct net_device *dev, u16 msti, u8 *state) in br_mst_get_state() argument
53 const struct net_bridge_port *p = NULL; in br_mst_get_state() local
59 p = br_port_get_check_rtnl(dev); in br_mst_get_state()
60 if (!p || !br_opt_get(p->br, BROPT_MST_ENABLED)) in br_mst_get_state()
61 return -EINVAL; in br_mst_get_state()
63 vg = nbp_vlan_group(p); in br_mst_get_state()
65 list_for_each_entry(v, &vg->vlan_list, vlist) { in br_mst_get_state()
66 if (v->brvlan->msti == msti) { in br_mst_get_state()
67 *state = v->state; in br_mst_get_state()
72 return -ENOENT; in br_mst_get_state()
78 u8 state) in br_mst_vlan_set_state() argument
80 if (br_vlan_get_state(v) == state) in br_mst_vlan_set_state()
83 br_vlan_set_state(v, state); in br_mst_vlan_set_state()
85 if (v->vid == vg->pvid) in br_mst_vlan_set_state()
86 br_vlan_set_pvid_state(vg, state); in br_mst_vlan_set_state()
89 int br_mst_set_state(struct net_bridge_port *p, u16 msti, u8 state, in br_mst_set_state() argument
94 .orig_dev = p->dev, in br_mst_set_state()
97 .state = state, in br_mst_set_state()
105 vg = nbp_vlan_group_rcu(p); in br_mst_set_state()
109 /* MSTI 0 (CST) state changes are notified via the regular in br_mst_set_state()
113 err = switchdev_port_attr_set(p->dev, &attr, extack); in br_mst_set_state()
114 if (err && err != -EOPNOTSUPP) in br_mst_set_state()
119 list_for_each_entry_rcu(v, &vg->vlan_list, vlist) { in br_mst_set_state()
120 if (v->brvlan->msti != msti) in br_mst_set_state()
123 br_mst_vlan_set_state(vg, v, state); in br_mst_set_state()
133 struct net_bridge_vlan_group *vg = nbp_vlan_group(pv->port); in br_mst_vlan_sync_state()
136 list_for_each_entry(v, &vg->vlan_list, vlist) { in br_mst_vlan_sync_state()
137 /* If this port already has a defined state in this in br_mst_vlan_sync_state()
141 if (v != pv && v->brvlan->msti == msti) { in br_mst_vlan_sync_state()
142 br_mst_vlan_set_state(vg, pv, v->state); in br_mst_vlan_sync_state()
155 .orig_dev = mv->br->dev, in br_mst_vlan_set_msti()
157 .vid = mv->vid, in br_mst_vlan_set_msti()
163 struct net_bridge_port *p; in br_mst_vlan_set_msti() local
166 if (mv->msti == msti) in br_mst_vlan_set_msti()
169 err = switchdev_port_attr_set(mv->br->dev, &attr, NULL); in br_mst_vlan_set_msti()
170 if (err && err != -EOPNOTSUPP) in br_mst_vlan_set_msti()
173 mv->msti = msti; in br_mst_vlan_set_msti()
175 list_for_each_entry(p, &mv->br->port_list, list) { in br_mst_vlan_set_msti()
176 vg = nbp_vlan_group(p); in br_mst_vlan_set_msti()
178 pv = br_vlan_find(vg, mv->vid); in br_mst_vlan_set_msti()
189 v->msti = 0; in br_mst_vlan_init_state()
192 v->state = BR_STATE_FORWARDING; in br_mst_vlan_init_state()
194 v->state = v->port->state; in br_mst_vlan_init_state()
202 .orig_dev = br->dev, in br_mst_set_enabled()
206 struct net_bridge_port *p; in br_mst_set_enabled() local
209 list_for_each_entry(p, &br->port_list, list) { in br_mst_set_enabled()
210 vg = nbp_vlan_group(p); in br_mst_set_enabled()
212 if (!vg->num_vlans) in br_mst_set_enabled()
217 return -EBUSY; in br_mst_set_enabled()
223 err = switchdev_port_attr_set(br->dev, &attr, extack); in br_mst_set_enabled()
224 if (err && err != -EOPNOTSUPP) in br_mst_set_enabled()
245 list_for_each_entry_rcu(v, &vg->vlan_list, vlist) { in br_mst_info_size()
246 if (test_bit(v->brvlan->msti, seen)) in br_mst_info_size()
256 __set_bit(v->brvlan->msti, seen); in br_mst_info_size()
270 list_for_each_entry(v, &vg->vlan_list, vlist) { in br_mst_fill_info()
271 if (test_bit(v->brvlan->msti, seen)) in br_mst_fill_info()
276 nla_put_u16(skb, IFLA_BRIDGE_MST_ENTRY_MSTI, v->brvlan->msti) || in br_mst_fill_info()
277 nla_put_u8(skb, IFLA_BRIDGE_MST_ENTRY_STATE, v->state)) { in br_mst_fill_info()
278 err = -EMSGSIZE; in br_mst_fill_info()
283 __set_bit(v->brvlan->msti, seen); in br_mst_fill_info()
292 VLAN_N_VID - 1),
298 static int br_mst_process_one(struct net_bridge_port *p, in br_mst_process_one() argument
304 u8 state; in br_mst_process_one() local
314 return -EINVAL; in br_mst_process_one()
318 NL_SET_ERR_MSG_MOD(extack, "State not specified"); in br_mst_process_one()
319 return -EINVAL; in br_mst_process_one()
323 state = nla_get_u8(tb[IFLA_BRIDGE_MST_ENTRY_STATE]); in br_mst_process_one()
325 return br_mst_set_state(p, msti, state, extack); in br_mst_process_one()
328 int br_mst_process(struct net_bridge_port *p, const struct nlattr *mst_attr, in br_mst_process() argument
335 if (!br_opt_get(p->br, BROPT_MST_ENABLED)) { in br_mst_process()
336 NL_SET_ERR_MSG_MOD(extack, "Can't modify MST state when MST is disabled"); in br_mst_process()
337 return -EBUSY; in br_mst_process()
343 err = br_mst_process_one(p, attr, extack); in br_mst_process()
356 err = -EINVAL; in br_mst_process()