1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
2 | |
3 | #ifndef __DSA_SWITCH_H |
4 | #define __DSA_SWITCH_H |
5 | |
6 | #include <net/dsa.h> |
7 | |
8 | struct netlink_ext_ack; |
9 | |
10 | enum { |
11 | DSA_NOTIFIER_AGEING_TIME, |
12 | DSA_NOTIFIER_BRIDGE_JOIN, |
13 | DSA_NOTIFIER_BRIDGE_LEAVE, |
14 | DSA_NOTIFIER_FDB_ADD, |
15 | DSA_NOTIFIER_FDB_DEL, |
16 | DSA_NOTIFIER_HOST_FDB_ADD, |
17 | DSA_NOTIFIER_HOST_FDB_DEL, |
18 | DSA_NOTIFIER_LAG_FDB_ADD, |
19 | DSA_NOTIFIER_LAG_FDB_DEL, |
20 | DSA_NOTIFIER_LAG_CHANGE, |
21 | DSA_NOTIFIER_LAG_JOIN, |
22 | DSA_NOTIFIER_LAG_LEAVE, |
23 | DSA_NOTIFIER_MDB_ADD, |
24 | DSA_NOTIFIER_MDB_DEL, |
25 | DSA_NOTIFIER_HOST_MDB_ADD, |
26 | DSA_NOTIFIER_HOST_MDB_DEL, |
27 | DSA_NOTIFIER_VLAN_ADD, |
28 | DSA_NOTIFIER_VLAN_DEL, |
29 | DSA_NOTIFIER_HOST_VLAN_ADD, |
30 | DSA_NOTIFIER_HOST_VLAN_DEL, |
31 | DSA_NOTIFIER_MTU, |
32 | DSA_NOTIFIER_TAG_PROTO, |
33 | DSA_NOTIFIER_TAG_PROTO_CONNECT, |
34 | DSA_NOTIFIER_TAG_PROTO_DISCONNECT, |
35 | DSA_NOTIFIER_TAG_8021Q_VLAN_ADD, |
36 | DSA_NOTIFIER_TAG_8021Q_VLAN_DEL, |
37 | DSA_NOTIFIER_CONDUIT_STATE_CHANGE, |
38 | }; |
39 | |
40 | /* DSA_NOTIFIER_AGEING_TIME */ |
41 | struct dsa_notifier_ageing_time_info { |
42 | unsigned int ageing_time; |
43 | }; |
44 | |
45 | /* DSA_NOTIFIER_BRIDGE_* */ |
46 | struct dsa_notifier_bridge_info { |
47 | const struct dsa_port *dp; |
48 | struct dsa_bridge bridge; |
49 | bool tx_fwd_offload; |
50 | struct netlink_ext_ack *extack; |
51 | }; |
52 | |
53 | /* DSA_NOTIFIER_FDB_* */ |
54 | struct dsa_notifier_fdb_info { |
55 | const struct dsa_port *dp; |
56 | const unsigned char *addr; |
57 | u16 vid; |
58 | struct dsa_db db; |
59 | }; |
60 | |
61 | /* DSA_NOTIFIER_LAG_FDB_* */ |
62 | struct dsa_notifier_lag_fdb_info { |
63 | struct dsa_lag *lag; |
64 | const unsigned char *addr; |
65 | u16 vid; |
66 | struct dsa_db db; |
67 | }; |
68 | |
69 | /* DSA_NOTIFIER_MDB_* */ |
70 | struct dsa_notifier_mdb_info { |
71 | const struct dsa_port *dp; |
72 | const struct switchdev_obj_port_mdb *mdb; |
73 | struct dsa_db db; |
74 | }; |
75 | |
76 | /* DSA_NOTIFIER_LAG_* */ |
77 | struct dsa_notifier_lag_info { |
78 | const struct dsa_port *dp; |
79 | struct dsa_lag lag; |
80 | struct netdev_lag_upper_info *info; |
81 | struct netlink_ext_ack *extack; |
82 | }; |
83 | |
84 | /* DSA_NOTIFIER_VLAN_* */ |
85 | struct dsa_notifier_vlan_info { |
86 | const struct dsa_port *dp; |
87 | const struct switchdev_obj_port_vlan *vlan; |
88 | struct netlink_ext_ack *extack; |
89 | }; |
90 | |
91 | /* DSA_NOTIFIER_MTU */ |
92 | struct dsa_notifier_mtu_info { |
93 | const struct dsa_port *dp; |
94 | int mtu; |
95 | }; |
96 | |
97 | /* DSA_NOTIFIER_TAG_PROTO_* */ |
98 | struct dsa_notifier_tag_proto_info { |
99 | const struct dsa_device_ops *tag_ops; |
100 | }; |
101 | |
102 | /* DSA_NOTIFIER_TAG_8021Q_VLAN_* */ |
103 | struct dsa_notifier_tag_8021q_vlan_info { |
104 | const struct dsa_port *dp; |
105 | u16 vid; |
106 | }; |
107 | |
108 | /* DSA_NOTIFIER_CONDUIT_STATE_CHANGE */ |
109 | struct dsa_notifier_conduit_state_info { |
110 | const struct net_device *conduit; |
111 | bool operational; |
112 | }; |
113 | |
114 | struct dsa_vlan *dsa_vlan_find(struct list_head *vlan_list, |
115 | const struct switchdev_obj_port_vlan *vlan); |
116 | |
117 | int dsa_tree_notify(struct dsa_switch_tree *dst, unsigned long e, void *v); |
118 | int dsa_broadcast(unsigned long e, void *v); |
119 | |
120 | int dsa_switch_register_notifier(struct dsa_switch *ds); |
121 | void dsa_switch_unregister_notifier(struct dsa_switch *ds); |
122 | |
123 | #endif |
124 | |