/* SPDX-License-Identifier: GPL-2.0-or-later */ #ifndef __DSA_SWITCH_H #define __DSA_SWITCH_H #include 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