| /* SPDX-License-Identifier: GPL-2.0-or-later */ |
| |
| #ifndef __DSA_SWITCH_H |
| #define __DSA_SWITCH_H |
| |
| #include <net/dsa.h> |
| |
| struct netlink_ext_ack; |
| |
| enum { |
| DSA_NOTIFIER_AGEING_TIME, |
| DSA_NOTIFIER_BRIDGE_JOIN, |
| DSA_NOTIFIER_BRIDGE_LEAVE, |
| DSA_NOTIFIER_FDB_ADD, |
| DSA_NOTIFIER_FDB_DEL, |
| DSA_NOTIFIER_HOST_FDB_ADD, |
| DSA_NOTIFIER_HOST_FDB_DEL, |
| DSA_NOTIFIER_LAG_FDB_ADD, |
| DSA_NOTIFIER_LAG_FDB_DEL, |
| DSA_NOTIFIER_LAG_CHANGE, |
| DSA_NOTIFIER_LAG_JOIN, |
| DSA_NOTIFIER_LAG_LEAVE, |
| DSA_NOTIFIER_MDB_ADD, |
| DSA_NOTIFIER_MDB_DEL, |
| DSA_NOTIFIER_HOST_MDB_ADD, |
| DSA_NOTIFIER_HOST_MDB_DEL, |
| DSA_NOTIFIER_VLAN_ADD, |
| DSA_NOTIFIER_VLAN_DEL, |
| DSA_NOTIFIER_HOST_VLAN_ADD, |
| DSA_NOTIFIER_HOST_VLAN_DEL, |
| DSA_NOTIFIER_MTU, |
| DSA_NOTIFIER_TAG_PROTO, |
| DSA_NOTIFIER_TAG_PROTO_CONNECT, |
| DSA_NOTIFIER_TAG_PROTO_DISCONNECT, |
| DSA_NOTIFIER_TAG_8021Q_VLAN_ADD, |
| DSA_NOTIFIER_TAG_8021Q_VLAN_DEL, |
| DSA_NOTIFIER_CONDUIT_STATE_CHANGE, |
| }; |
| |
| /* DSA_NOTIFIER_AGEING_TIME */ |
| struct dsa_notifier_ageing_time_info { |
| unsigned int ageing_time; |
| }; |
| |
| /* DSA_NOTIFIER_BRIDGE_* */ |
| struct dsa_notifier_bridge_info { |
| const struct dsa_port *dp; |
| struct dsa_bridge bridge; |
| bool tx_fwd_offload; |
| struct netlink_ext_ack *extack; |
| }; |
| |
| /* DSA_NOTIFIER_FDB_* */ |
| struct dsa_notifier_fdb_info { |
| const struct dsa_port *dp; |
| const unsigned char *addr; |
| u16 vid; |
| struct dsa_db db; |
| }; |
| |
| /* DSA_NOTIFIER_LAG_FDB_* */ |
| struct dsa_notifier_lag_fdb_info { |
| struct dsa_lag *lag; |
| const unsigned char *addr; |
| u16 vid; |
| struct dsa_db db; |
| }; |
| |
| /* DSA_NOTIFIER_MDB_* */ |
| struct dsa_notifier_mdb_info { |
| const struct dsa_port *dp; |
| const struct switchdev_obj_port_mdb *mdb; |
| struct dsa_db db; |
| }; |
| |
| /* DSA_NOTIFIER_LAG_* */ |
| struct dsa_notifier_lag_info { |
| const struct dsa_port *dp; |
| struct dsa_lag lag; |
| struct netdev_lag_upper_info *info; |
| struct netlink_ext_ack *extack; |
| }; |
| |
| /* DSA_NOTIFIER_VLAN_* */ |
| struct dsa_notifier_vlan_info { |
| const struct dsa_port *dp; |
| const struct switchdev_obj_port_vlan *vlan; |
| struct netlink_ext_ack *extack; |
| }; |
| |
| /* DSA_NOTIFIER_MTU */ |
| struct dsa_notifier_mtu_info { |
| const struct dsa_port *dp; |
| int mtu; |
| }; |
| |
| /* DSA_NOTIFIER_TAG_PROTO_* */ |
| struct dsa_notifier_tag_proto_info { |
| const struct dsa_device_ops *tag_ops; |
| }; |
| |
| /* DSA_NOTIFIER_TAG_8021Q_VLAN_* */ |
| struct dsa_notifier_tag_8021q_vlan_info { |
| const struct dsa_port *dp; |
| u16 vid; |
| }; |
| |
| /* DSA_NOTIFIER_CONDUIT_STATE_CHANGE */ |
| struct dsa_notifier_conduit_state_info { |
| const struct net_device *conduit; |
| bool operational; |
| }; |
| |
| struct dsa_vlan *dsa_vlan_find(struct list_head *vlan_list, |
| const struct switchdev_obj_port_vlan *vlan); |
| |
| int dsa_tree_notify(struct dsa_switch_tree *dst, unsigned long e, void *v); |
| int dsa_broadcast(unsigned long e, void *v); |
| |
| int dsa_switch_register_notifier(struct dsa_switch *ds); |
| void dsa_switch_unregister_notifier(struct dsa_switch *ds); |
| |
| #endif |