2022-11-21 16:55:48 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
# ifndef __DSA_SWITCH_H
# define __DSA_SWITCH_H
2022-11-21 16:55:50 +03:00
# 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_MASTER_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_MASTER_STATE_CHANGE */
struct dsa_notifier_master_state_info {
const struct net_device * master ;
bool operational ;
} ;
2022-11-21 16:55:48 +03:00
2022-11-21 16:55:49 +03:00
int dsa_tree_notify ( struct dsa_switch_tree * dst , unsigned long e , void * v ) ;
int dsa_broadcast ( unsigned long e , void * v ) ;
2022-11-21 16:55:48 +03:00
int dsa_switch_register_notifier ( struct dsa_switch * ds ) ;
void dsa_switch_unregister_notifier ( struct dsa_switch * ds ) ;
# endif