1  /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2  /*
3   *	Linux ethernet bridge
4   *
5   *	Authors:
6   *	Lennert Buytenhek		<buytenh@gnu.org>
7   *
8   *	This program is free software; you can redistribute it and/or
9   *	modify it under the terms of the GNU General Public License
10   *	as published by the Free Software Foundation; either version
11   *	2 of the License, or (at your option) any later version.
12   */
13  
14  #ifndef _UAPI_LINUX_IF_BRIDGE_H
15  #define _UAPI_LINUX_IF_BRIDGE_H
16  
17  #include <linux/types.h>
18  #include <linux/if_ether.h>
19  #include <linux/in6.h>
20  
21  #define SYSFS_BRIDGE_ATTR	"bridge"
22  #define SYSFS_BRIDGE_FDB	"brforward"
23  #define SYSFS_BRIDGE_PORT_SUBDIR "brif"
24  #define SYSFS_BRIDGE_PORT_ATTR	"brport"
25  #define SYSFS_BRIDGE_PORT_LINK	"bridge"
26  
27  #define BRCTL_VERSION 1
28  
29  #define BRCTL_GET_VERSION 0
30  #define BRCTL_GET_BRIDGES 1
31  #define BRCTL_ADD_BRIDGE 2
32  #define BRCTL_DEL_BRIDGE 3
33  #define BRCTL_ADD_IF 4
34  #define BRCTL_DEL_IF 5
35  #define BRCTL_GET_BRIDGE_INFO 6
36  #define BRCTL_GET_PORT_LIST 7
37  #define BRCTL_SET_BRIDGE_FORWARD_DELAY 8
38  #define BRCTL_SET_BRIDGE_HELLO_TIME 9
39  #define BRCTL_SET_BRIDGE_MAX_AGE 10
40  #define BRCTL_SET_AGEING_TIME 11
41  #define BRCTL_SET_GC_INTERVAL 12
42  #define BRCTL_GET_PORT_INFO 13
43  #define BRCTL_SET_BRIDGE_STP_STATE 14
44  #define BRCTL_SET_BRIDGE_PRIORITY 15
45  #define BRCTL_SET_PORT_PRIORITY 16
46  #define BRCTL_SET_PATH_COST 17
47  #define BRCTL_GET_FDB_ENTRIES 18
48  
49  #define BR_STATE_DISABLED 0
50  #define BR_STATE_LISTENING 1
51  #define BR_STATE_LEARNING 2
52  #define BR_STATE_FORWARDING 3
53  #define BR_STATE_BLOCKING 4
54  
55  struct __bridge_info {
56  	__u64 designated_root;
57  	__u64 bridge_id;
58  	__u32 root_path_cost;
59  	__u32 max_age;
60  	__u32 hello_time;
61  	__u32 forward_delay;
62  	__u32 bridge_max_age;
63  	__u32 bridge_hello_time;
64  	__u32 bridge_forward_delay;
65  	__u8 topology_change;
66  	__u8 topology_change_detected;
67  	__u8 root_port;
68  	__u8 stp_enabled;
69  	__u32 ageing_time;
70  	__u32 gc_interval;
71  	__u32 hello_timer_value;
72  	__u32 tcn_timer_value;
73  	__u32 topology_change_timer_value;
74  	__u32 gc_timer_value;
75  };
76  
77  struct __port_info {
78  	__u64 designated_root;
79  	__u64 designated_bridge;
80  	__u16 port_id;
81  	__u16 designated_port;
82  	__u32 path_cost;
83  	__u32 designated_cost;
84  	__u8 state;
85  	__u8 top_change_ack;
86  	__u8 config_pending;
87  	__u8 unused0;
88  	__u32 message_age_timer_value;
89  	__u32 forward_delay_timer_value;
90  	__u32 hold_timer_value;
91  };
92  
93  struct __fdb_entry {
94  	__u8 mac_addr[ETH_ALEN];
95  	__u8 port_no;
96  	__u8 is_local;
97  	__u32 ageing_timer_value;
98  	__u8 port_hi;
99  	__u8 pad0;
100  	__u16 unused;
101  };
102  
103  /* Bridge Flags */
104  #define BRIDGE_FLAGS_MASTER	1	/* Bridge command to/from master */
105  #define BRIDGE_FLAGS_SELF	2	/* Bridge command to/from lowerdev */
106  
107  #define BRIDGE_MODE_VEB		0	/* Default loopback mode */
108  #define BRIDGE_MODE_VEPA	1	/* 802.1Qbg defined VEPA mode */
109  #define BRIDGE_MODE_UNDEF	0xFFFF  /* mode undefined */
110  
111  /* Bridge management nested attributes
112   * [IFLA_AF_SPEC] = {
113   *     [IFLA_BRIDGE_FLAGS]
114   *     [IFLA_BRIDGE_MODE]
115   *     [IFLA_BRIDGE_VLAN_INFO]
116   * }
117   */
118  enum {
119  	IFLA_BRIDGE_FLAGS,
120  	IFLA_BRIDGE_MODE,
121  	IFLA_BRIDGE_VLAN_INFO,
122  	IFLA_BRIDGE_VLAN_TUNNEL_INFO,
123  	IFLA_BRIDGE_MRP,
124  	IFLA_BRIDGE_CFM,
125  	IFLA_BRIDGE_MST,
126  	__IFLA_BRIDGE_MAX,
127  };
128  #define IFLA_BRIDGE_MAX (__IFLA_BRIDGE_MAX - 1)
129  
130  #define BRIDGE_VLAN_INFO_MASTER	(1<<0)	/* Operate on Bridge device as well */
131  #define BRIDGE_VLAN_INFO_PVID	(1<<1)	/* VLAN is PVID, ingress untagged */
132  #define BRIDGE_VLAN_INFO_UNTAGGED	(1<<2)	/* VLAN egresses untagged */
133  #define BRIDGE_VLAN_INFO_RANGE_BEGIN	(1<<3) /* VLAN is start of vlan range */
134  #define BRIDGE_VLAN_INFO_RANGE_END	(1<<4) /* VLAN is end of vlan range */
135  #define BRIDGE_VLAN_INFO_BRENTRY	(1<<5) /* Global bridge VLAN entry */
136  #define BRIDGE_VLAN_INFO_ONLY_OPTS	(1<<6) /* Skip create/delete/flags */
137  
138  struct bridge_vlan_info {
139  	__u16 flags;
140  	__u16 vid;
141  };
142  
143  enum {
144  	IFLA_BRIDGE_VLAN_TUNNEL_UNSPEC,
145  	IFLA_BRIDGE_VLAN_TUNNEL_ID,
146  	IFLA_BRIDGE_VLAN_TUNNEL_VID,
147  	IFLA_BRIDGE_VLAN_TUNNEL_FLAGS,
148  	__IFLA_BRIDGE_VLAN_TUNNEL_MAX,
149  };
150  
151  #define IFLA_BRIDGE_VLAN_TUNNEL_MAX (__IFLA_BRIDGE_VLAN_TUNNEL_MAX - 1)
152  
153  struct bridge_vlan_xstats {
154  	__u64 rx_bytes;
155  	__u64 rx_packets;
156  	__u64 tx_bytes;
157  	__u64 tx_packets;
158  	__u16 vid;
159  	__u16 flags;
160  	__u32 pad2;
161  };
162  
163  enum {
164  	IFLA_BRIDGE_MRP_UNSPEC,
165  	IFLA_BRIDGE_MRP_INSTANCE,
166  	IFLA_BRIDGE_MRP_PORT_STATE,
167  	IFLA_BRIDGE_MRP_PORT_ROLE,
168  	IFLA_BRIDGE_MRP_RING_STATE,
169  	IFLA_BRIDGE_MRP_RING_ROLE,
170  	IFLA_BRIDGE_MRP_START_TEST,
171  	IFLA_BRIDGE_MRP_INFO,
172  	IFLA_BRIDGE_MRP_IN_ROLE,
173  	IFLA_BRIDGE_MRP_IN_STATE,
174  	IFLA_BRIDGE_MRP_START_IN_TEST,
175  	__IFLA_BRIDGE_MRP_MAX,
176  };
177  
178  #define IFLA_BRIDGE_MRP_MAX (__IFLA_BRIDGE_MRP_MAX - 1)
179  
180  enum {
181  	IFLA_BRIDGE_MRP_INSTANCE_UNSPEC,
182  	IFLA_BRIDGE_MRP_INSTANCE_RING_ID,
183  	IFLA_BRIDGE_MRP_INSTANCE_P_IFINDEX,
184  	IFLA_BRIDGE_MRP_INSTANCE_S_IFINDEX,
185  	IFLA_BRIDGE_MRP_INSTANCE_PRIO,
186  	__IFLA_BRIDGE_MRP_INSTANCE_MAX,
187  };
188  
189  #define IFLA_BRIDGE_MRP_INSTANCE_MAX (__IFLA_BRIDGE_MRP_INSTANCE_MAX - 1)
190  
191  enum {
192  	IFLA_BRIDGE_MRP_PORT_STATE_UNSPEC,
193  	IFLA_BRIDGE_MRP_PORT_STATE_STATE,
194  	__IFLA_BRIDGE_MRP_PORT_STATE_MAX,
195  };
196  
197  #define IFLA_BRIDGE_MRP_PORT_STATE_MAX (__IFLA_BRIDGE_MRP_PORT_STATE_MAX - 1)
198  
199  enum {
200  	IFLA_BRIDGE_MRP_PORT_ROLE_UNSPEC,
201  	IFLA_BRIDGE_MRP_PORT_ROLE_ROLE,
202  	__IFLA_BRIDGE_MRP_PORT_ROLE_MAX,
203  };
204  
205  #define IFLA_BRIDGE_MRP_PORT_ROLE_MAX (__IFLA_BRIDGE_MRP_PORT_ROLE_MAX - 1)
206  
207  enum {
208  	IFLA_BRIDGE_MRP_RING_STATE_UNSPEC,
209  	IFLA_BRIDGE_MRP_RING_STATE_RING_ID,
210  	IFLA_BRIDGE_MRP_RING_STATE_STATE,
211  	__IFLA_BRIDGE_MRP_RING_STATE_MAX,
212  };
213  
214  #define IFLA_BRIDGE_MRP_RING_STATE_MAX (__IFLA_BRIDGE_MRP_RING_STATE_MAX - 1)
215  
216  enum {
217  	IFLA_BRIDGE_MRP_RING_ROLE_UNSPEC,
218  	IFLA_BRIDGE_MRP_RING_ROLE_RING_ID,
219  	IFLA_BRIDGE_MRP_RING_ROLE_ROLE,
220  	__IFLA_BRIDGE_MRP_RING_ROLE_MAX,
221  };
222  
223  #define IFLA_BRIDGE_MRP_RING_ROLE_MAX (__IFLA_BRIDGE_MRP_RING_ROLE_MAX - 1)
224  
225  enum {
226  	IFLA_BRIDGE_MRP_START_TEST_UNSPEC,
227  	IFLA_BRIDGE_MRP_START_TEST_RING_ID,
228  	IFLA_BRIDGE_MRP_START_TEST_INTERVAL,
229  	IFLA_BRIDGE_MRP_START_TEST_MAX_MISS,
230  	IFLA_BRIDGE_MRP_START_TEST_PERIOD,
231  	IFLA_BRIDGE_MRP_START_TEST_MONITOR,
232  	__IFLA_BRIDGE_MRP_START_TEST_MAX,
233  };
234  
235  #define IFLA_BRIDGE_MRP_START_TEST_MAX (__IFLA_BRIDGE_MRP_START_TEST_MAX - 1)
236  
237  enum {
238  	IFLA_BRIDGE_MRP_INFO_UNSPEC,
239  	IFLA_BRIDGE_MRP_INFO_RING_ID,
240  	IFLA_BRIDGE_MRP_INFO_P_IFINDEX,
241  	IFLA_BRIDGE_MRP_INFO_S_IFINDEX,
242  	IFLA_BRIDGE_MRP_INFO_PRIO,
243  	IFLA_BRIDGE_MRP_INFO_RING_STATE,
244  	IFLA_BRIDGE_MRP_INFO_RING_ROLE,
245  	IFLA_BRIDGE_MRP_INFO_TEST_INTERVAL,
246  	IFLA_BRIDGE_MRP_INFO_TEST_MAX_MISS,
247  	IFLA_BRIDGE_MRP_INFO_TEST_MONITOR,
248  	IFLA_BRIDGE_MRP_INFO_I_IFINDEX,
249  	IFLA_BRIDGE_MRP_INFO_IN_STATE,
250  	IFLA_BRIDGE_MRP_INFO_IN_ROLE,
251  	IFLA_BRIDGE_MRP_INFO_IN_TEST_INTERVAL,
252  	IFLA_BRIDGE_MRP_INFO_IN_TEST_MAX_MISS,
253  	__IFLA_BRIDGE_MRP_INFO_MAX,
254  };
255  
256  #define IFLA_BRIDGE_MRP_INFO_MAX (__IFLA_BRIDGE_MRP_INFO_MAX - 1)
257  
258  enum {
259  	IFLA_BRIDGE_MRP_IN_STATE_UNSPEC,
260  	IFLA_BRIDGE_MRP_IN_STATE_IN_ID,
261  	IFLA_BRIDGE_MRP_IN_STATE_STATE,
262  	__IFLA_BRIDGE_MRP_IN_STATE_MAX,
263  };
264  
265  #define IFLA_BRIDGE_MRP_IN_STATE_MAX (__IFLA_BRIDGE_MRP_IN_STATE_MAX - 1)
266  
267  enum {
268  	IFLA_BRIDGE_MRP_IN_ROLE_UNSPEC,
269  	IFLA_BRIDGE_MRP_IN_ROLE_RING_ID,
270  	IFLA_BRIDGE_MRP_IN_ROLE_IN_ID,
271  	IFLA_BRIDGE_MRP_IN_ROLE_ROLE,
272  	IFLA_BRIDGE_MRP_IN_ROLE_I_IFINDEX,
273  	__IFLA_BRIDGE_MRP_IN_ROLE_MAX,
274  };
275  
276  #define IFLA_BRIDGE_MRP_IN_ROLE_MAX (__IFLA_BRIDGE_MRP_IN_ROLE_MAX - 1)
277  
278  enum {
279  	IFLA_BRIDGE_MRP_START_IN_TEST_UNSPEC,
280  	IFLA_BRIDGE_MRP_START_IN_TEST_IN_ID,
281  	IFLA_BRIDGE_MRP_START_IN_TEST_INTERVAL,
282  	IFLA_BRIDGE_MRP_START_IN_TEST_MAX_MISS,
283  	IFLA_BRIDGE_MRP_START_IN_TEST_PERIOD,
284  	__IFLA_BRIDGE_MRP_START_IN_TEST_MAX,
285  };
286  
287  #define IFLA_BRIDGE_MRP_START_IN_TEST_MAX (__IFLA_BRIDGE_MRP_START_IN_TEST_MAX - 1)
288  
289  struct br_mrp_instance {
290  	__u32 ring_id;
291  	__u32 p_ifindex;
292  	__u32 s_ifindex;
293  	__u16 prio;
294  };
295  
296  struct br_mrp_ring_state {
297  	__u32 ring_id;
298  	__u32 ring_state;
299  };
300  
301  struct br_mrp_ring_role {
302  	__u32 ring_id;
303  	__u32 ring_role;
304  };
305  
306  struct br_mrp_start_test {
307  	__u32 ring_id;
308  	__u32 interval;
309  	__u32 max_miss;
310  	__u32 period;
311  	__u32 monitor;
312  };
313  
314  struct br_mrp_in_state {
315  	__u32 in_state;
316  	__u16 in_id;
317  };
318  
319  struct br_mrp_in_role {
320  	__u32 ring_id;
321  	__u32 in_role;
322  	__u32 i_ifindex;
323  	__u16 in_id;
324  };
325  
326  struct br_mrp_start_in_test {
327  	__u32 interval;
328  	__u32 max_miss;
329  	__u32 period;
330  	__u16 in_id;
331  };
332  
333  enum {
334  	IFLA_BRIDGE_CFM_UNSPEC,
335  	IFLA_BRIDGE_CFM_MEP_CREATE,
336  	IFLA_BRIDGE_CFM_MEP_DELETE,
337  	IFLA_BRIDGE_CFM_MEP_CONFIG,
338  	IFLA_BRIDGE_CFM_CC_CONFIG,
339  	IFLA_BRIDGE_CFM_CC_PEER_MEP_ADD,
340  	IFLA_BRIDGE_CFM_CC_PEER_MEP_REMOVE,
341  	IFLA_BRIDGE_CFM_CC_RDI,
342  	IFLA_BRIDGE_CFM_CC_CCM_TX,
343  	IFLA_BRIDGE_CFM_MEP_CREATE_INFO,
344  	IFLA_BRIDGE_CFM_MEP_CONFIG_INFO,
345  	IFLA_BRIDGE_CFM_CC_CONFIG_INFO,
346  	IFLA_BRIDGE_CFM_CC_RDI_INFO,
347  	IFLA_BRIDGE_CFM_CC_CCM_TX_INFO,
348  	IFLA_BRIDGE_CFM_CC_PEER_MEP_INFO,
349  	IFLA_BRIDGE_CFM_MEP_STATUS_INFO,
350  	IFLA_BRIDGE_CFM_CC_PEER_STATUS_INFO,
351  	__IFLA_BRIDGE_CFM_MAX,
352  };
353  
354  #define IFLA_BRIDGE_CFM_MAX (__IFLA_BRIDGE_CFM_MAX - 1)
355  
356  enum {
357  	IFLA_BRIDGE_CFM_MEP_CREATE_UNSPEC,
358  	IFLA_BRIDGE_CFM_MEP_CREATE_INSTANCE,
359  	IFLA_BRIDGE_CFM_MEP_CREATE_DOMAIN,
360  	IFLA_BRIDGE_CFM_MEP_CREATE_DIRECTION,
361  	IFLA_BRIDGE_CFM_MEP_CREATE_IFINDEX,
362  	__IFLA_BRIDGE_CFM_MEP_CREATE_MAX,
363  };
364  
365  #define IFLA_BRIDGE_CFM_MEP_CREATE_MAX (__IFLA_BRIDGE_CFM_MEP_CREATE_MAX - 1)
366  
367  enum {
368  	IFLA_BRIDGE_CFM_MEP_DELETE_UNSPEC,
369  	IFLA_BRIDGE_CFM_MEP_DELETE_INSTANCE,
370  	__IFLA_BRIDGE_CFM_MEP_DELETE_MAX,
371  };
372  
373  #define IFLA_BRIDGE_CFM_MEP_DELETE_MAX (__IFLA_BRIDGE_CFM_MEP_DELETE_MAX - 1)
374  
375  enum {
376  	IFLA_BRIDGE_CFM_MEP_CONFIG_UNSPEC,
377  	IFLA_BRIDGE_CFM_MEP_CONFIG_INSTANCE,
378  	IFLA_BRIDGE_CFM_MEP_CONFIG_UNICAST_MAC,
379  	IFLA_BRIDGE_CFM_MEP_CONFIG_MDLEVEL,
380  	IFLA_BRIDGE_CFM_MEP_CONFIG_MEPID,
381  	__IFLA_BRIDGE_CFM_MEP_CONFIG_MAX,
382  };
383  
384  #define IFLA_BRIDGE_CFM_MEP_CONFIG_MAX (__IFLA_BRIDGE_CFM_MEP_CONFIG_MAX - 1)
385  
386  enum {
387  	IFLA_BRIDGE_CFM_CC_CONFIG_UNSPEC,
388  	IFLA_BRIDGE_CFM_CC_CONFIG_INSTANCE,
389  	IFLA_BRIDGE_CFM_CC_CONFIG_ENABLE,
390  	IFLA_BRIDGE_CFM_CC_CONFIG_EXP_INTERVAL,
391  	IFLA_BRIDGE_CFM_CC_CONFIG_EXP_MAID,
392  	__IFLA_BRIDGE_CFM_CC_CONFIG_MAX,
393  };
394  
395  #define IFLA_BRIDGE_CFM_CC_CONFIG_MAX (__IFLA_BRIDGE_CFM_CC_CONFIG_MAX - 1)
396  
397  enum {
398  	IFLA_BRIDGE_CFM_CC_PEER_MEP_UNSPEC,
399  	IFLA_BRIDGE_CFM_CC_PEER_MEP_INSTANCE,
400  	IFLA_BRIDGE_CFM_CC_PEER_MEPID,
401  	__IFLA_BRIDGE_CFM_CC_PEER_MEP_MAX,
402  };
403  
404  #define IFLA_BRIDGE_CFM_CC_PEER_MEP_MAX (__IFLA_BRIDGE_CFM_CC_PEER_MEP_MAX - 1)
405  
406  enum {
407  	IFLA_BRIDGE_CFM_CC_RDI_UNSPEC,
408  	IFLA_BRIDGE_CFM_CC_RDI_INSTANCE,
409  	IFLA_BRIDGE_CFM_CC_RDI_RDI,
410  	__IFLA_BRIDGE_CFM_CC_RDI_MAX,
411  };
412  
413  #define IFLA_BRIDGE_CFM_CC_RDI_MAX (__IFLA_BRIDGE_CFM_CC_RDI_MAX - 1)
414  
415  enum {
416  	IFLA_BRIDGE_CFM_CC_CCM_TX_UNSPEC,
417  	IFLA_BRIDGE_CFM_CC_CCM_TX_INSTANCE,
418  	IFLA_BRIDGE_CFM_CC_CCM_TX_DMAC,
419  	IFLA_BRIDGE_CFM_CC_CCM_TX_SEQ_NO_UPDATE,
420  	IFLA_BRIDGE_CFM_CC_CCM_TX_PERIOD,
421  	IFLA_BRIDGE_CFM_CC_CCM_TX_IF_TLV,
422  	IFLA_BRIDGE_CFM_CC_CCM_TX_IF_TLV_VALUE,
423  	IFLA_BRIDGE_CFM_CC_CCM_TX_PORT_TLV,
424  	IFLA_BRIDGE_CFM_CC_CCM_TX_PORT_TLV_VALUE,
425  	__IFLA_BRIDGE_CFM_CC_CCM_TX_MAX,
426  };
427  
428  #define IFLA_BRIDGE_CFM_CC_CCM_TX_MAX (__IFLA_BRIDGE_CFM_CC_CCM_TX_MAX - 1)
429  
430  enum {
431  	IFLA_BRIDGE_CFM_MEP_STATUS_UNSPEC,
432  	IFLA_BRIDGE_CFM_MEP_STATUS_INSTANCE,
433  	IFLA_BRIDGE_CFM_MEP_STATUS_OPCODE_UNEXP_SEEN,
434  	IFLA_BRIDGE_CFM_MEP_STATUS_VERSION_UNEXP_SEEN,
435  	IFLA_BRIDGE_CFM_MEP_STATUS_RX_LEVEL_LOW_SEEN,
436  	__IFLA_BRIDGE_CFM_MEP_STATUS_MAX,
437  };
438  
439  #define IFLA_BRIDGE_CFM_MEP_STATUS_MAX (__IFLA_BRIDGE_CFM_MEP_STATUS_MAX - 1)
440  
441  enum {
442  	IFLA_BRIDGE_CFM_CC_PEER_STATUS_UNSPEC,
443  	IFLA_BRIDGE_CFM_CC_PEER_STATUS_INSTANCE,
444  	IFLA_BRIDGE_CFM_CC_PEER_STATUS_PEER_MEPID,
445  	IFLA_BRIDGE_CFM_CC_PEER_STATUS_CCM_DEFECT,
446  	IFLA_BRIDGE_CFM_CC_PEER_STATUS_RDI,
447  	IFLA_BRIDGE_CFM_CC_PEER_STATUS_PORT_TLV_VALUE,
448  	IFLA_BRIDGE_CFM_CC_PEER_STATUS_IF_TLV_VALUE,
449  	IFLA_BRIDGE_CFM_CC_PEER_STATUS_SEEN,
450  	IFLA_BRIDGE_CFM_CC_PEER_STATUS_TLV_SEEN,
451  	IFLA_BRIDGE_CFM_CC_PEER_STATUS_SEQ_UNEXP_SEEN,
452  	__IFLA_BRIDGE_CFM_CC_PEER_STATUS_MAX,
453  };
454  
455  #define IFLA_BRIDGE_CFM_CC_PEER_STATUS_MAX (__IFLA_BRIDGE_CFM_CC_PEER_STATUS_MAX - 1)
456  
457  enum {
458  	IFLA_BRIDGE_MST_UNSPEC,
459  	IFLA_BRIDGE_MST_ENTRY,
460  	__IFLA_BRIDGE_MST_MAX,
461  };
462  #define IFLA_BRIDGE_MST_MAX (__IFLA_BRIDGE_MST_MAX - 1)
463  
464  enum {
465  	IFLA_BRIDGE_MST_ENTRY_UNSPEC,
466  	IFLA_BRIDGE_MST_ENTRY_MSTI,
467  	IFLA_BRIDGE_MST_ENTRY_STATE,
468  	__IFLA_BRIDGE_MST_ENTRY_MAX,
469  };
470  #define IFLA_BRIDGE_MST_ENTRY_MAX (__IFLA_BRIDGE_MST_ENTRY_MAX - 1)
471  
472  struct bridge_stp_xstats {
473  	__u64 transition_blk;
474  	__u64 transition_fwd;
475  	__u64 rx_bpdu;
476  	__u64 tx_bpdu;
477  	__u64 rx_tcn;
478  	__u64 tx_tcn;
479  };
480  
481  /* Bridge vlan RTM header */
482  struct br_vlan_msg {
483  	__u8 family;
484  	__u8 reserved1;
485  	__u16 reserved2;
486  	__u32 ifindex;
487  };
488  
489  enum {
490  	BRIDGE_VLANDB_DUMP_UNSPEC,
491  	BRIDGE_VLANDB_DUMP_FLAGS,
492  	__BRIDGE_VLANDB_DUMP_MAX,
493  };
494  #define BRIDGE_VLANDB_DUMP_MAX (__BRIDGE_VLANDB_DUMP_MAX - 1)
495  
496  /* flags used in BRIDGE_VLANDB_DUMP_FLAGS attribute to affect dumps */
497  #define BRIDGE_VLANDB_DUMPF_STATS	(1 << 0) /* Include stats in the dump */
498  #define BRIDGE_VLANDB_DUMPF_GLOBAL	(1 << 1) /* Dump global vlan options only */
499  
500  /* Bridge vlan RTM attributes
501   * [BRIDGE_VLANDB_ENTRY] = {
502   *     [BRIDGE_VLANDB_ENTRY_INFO]
503   *     ...
504   * }
505   * [BRIDGE_VLANDB_GLOBAL_OPTIONS] = {
506   *     [BRIDGE_VLANDB_GOPTS_ID]
507   *     ...
508   * }
509   */
510  enum {
511  	BRIDGE_VLANDB_UNSPEC,
512  	BRIDGE_VLANDB_ENTRY,
513  	BRIDGE_VLANDB_GLOBAL_OPTIONS,
514  	__BRIDGE_VLANDB_MAX,
515  };
516  #define BRIDGE_VLANDB_MAX (__BRIDGE_VLANDB_MAX - 1)
517  
518  enum {
519  	BRIDGE_VLANDB_ENTRY_UNSPEC,
520  	BRIDGE_VLANDB_ENTRY_INFO,
521  	BRIDGE_VLANDB_ENTRY_RANGE,
522  	BRIDGE_VLANDB_ENTRY_STATE,
523  	BRIDGE_VLANDB_ENTRY_TUNNEL_INFO,
524  	BRIDGE_VLANDB_ENTRY_STATS,
525  	BRIDGE_VLANDB_ENTRY_MCAST_ROUTER,
526  	BRIDGE_VLANDB_ENTRY_MCAST_N_GROUPS,
527  	BRIDGE_VLANDB_ENTRY_MCAST_MAX_GROUPS,
528  	BRIDGE_VLANDB_ENTRY_NEIGH_SUPPRESS,
529  	__BRIDGE_VLANDB_ENTRY_MAX,
530  };
531  #define BRIDGE_VLANDB_ENTRY_MAX (__BRIDGE_VLANDB_ENTRY_MAX - 1)
532  
533  /* [BRIDGE_VLANDB_ENTRY] = {
534   *     [BRIDGE_VLANDB_ENTRY_TUNNEL_INFO] = {
535   *         [BRIDGE_VLANDB_TINFO_ID]
536   *         ...
537   *     }
538   * }
539   */
540  enum {
541  	BRIDGE_VLANDB_TINFO_UNSPEC,
542  	BRIDGE_VLANDB_TINFO_ID,
543  	BRIDGE_VLANDB_TINFO_CMD,
544  	__BRIDGE_VLANDB_TINFO_MAX,
545  };
546  #define BRIDGE_VLANDB_TINFO_MAX (__BRIDGE_VLANDB_TINFO_MAX - 1)
547  
548  /* [BRIDGE_VLANDB_ENTRY] = {
549   *     [BRIDGE_VLANDB_ENTRY_STATS] = {
550   *         [BRIDGE_VLANDB_STATS_RX_BYTES]
551   *         ...
552   *     }
553   *     ...
554   * }
555   */
556  enum {
557  	BRIDGE_VLANDB_STATS_UNSPEC,
558  	BRIDGE_VLANDB_STATS_RX_BYTES,
559  	BRIDGE_VLANDB_STATS_RX_PACKETS,
560  	BRIDGE_VLANDB_STATS_TX_BYTES,
561  	BRIDGE_VLANDB_STATS_TX_PACKETS,
562  	BRIDGE_VLANDB_STATS_PAD,
563  	__BRIDGE_VLANDB_STATS_MAX,
564  };
565  #define BRIDGE_VLANDB_STATS_MAX (__BRIDGE_VLANDB_STATS_MAX - 1)
566  
567  enum {
568  	BRIDGE_VLANDB_GOPTS_UNSPEC,
569  	BRIDGE_VLANDB_GOPTS_ID,
570  	BRIDGE_VLANDB_GOPTS_RANGE,
571  	BRIDGE_VLANDB_GOPTS_MCAST_SNOOPING,
572  	BRIDGE_VLANDB_GOPTS_MCAST_IGMP_VERSION,
573  	BRIDGE_VLANDB_GOPTS_MCAST_MLD_VERSION,
574  	BRIDGE_VLANDB_GOPTS_MCAST_LAST_MEMBER_CNT,
575  	BRIDGE_VLANDB_GOPTS_MCAST_STARTUP_QUERY_CNT,
576  	BRIDGE_VLANDB_GOPTS_MCAST_LAST_MEMBER_INTVL,
577  	BRIDGE_VLANDB_GOPTS_PAD,
578  	BRIDGE_VLANDB_GOPTS_MCAST_MEMBERSHIP_INTVL,
579  	BRIDGE_VLANDB_GOPTS_MCAST_QUERIER_INTVL,
580  	BRIDGE_VLANDB_GOPTS_MCAST_QUERY_INTVL,
581  	BRIDGE_VLANDB_GOPTS_MCAST_QUERY_RESPONSE_INTVL,
582  	BRIDGE_VLANDB_GOPTS_MCAST_STARTUP_QUERY_INTVL,
583  	BRIDGE_VLANDB_GOPTS_MCAST_QUERIER,
584  	BRIDGE_VLANDB_GOPTS_MCAST_ROUTER_PORTS,
585  	BRIDGE_VLANDB_GOPTS_MCAST_QUERIER_STATE,
586  	BRIDGE_VLANDB_GOPTS_MSTI,
587  	__BRIDGE_VLANDB_GOPTS_MAX
588  };
589  #define BRIDGE_VLANDB_GOPTS_MAX (__BRIDGE_VLANDB_GOPTS_MAX - 1)
590  
591  /* Bridge multicast database attributes
592   * [MDBA_MDB] = {
593   *     [MDBA_MDB_ENTRY] = {
594   *         [MDBA_MDB_ENTRY_INFO] {
595   *		struct br_mdb_entry
596   *		[MDBA_MDB_EATTR attributes]
597   *         }
598   *     }
599   * }
600   * [MDBA_ROUTER] = {
601   *    [MDBA_ROUTER_PORT] = {
602   *        u32 ifindex
603   *        [MDBA_ROUTER_PATTR attributes]
604   *    }
605   * }
606   */
607  enum {
608  	MDBA_UNSPEC,
609  	MDBA_MDB,
610  	MDBA_ROUTER,
611  	__MDBA_MAX,
612  };
613  #define MDBA_MAX (__MDBA_MAX - 1)
614  
615  enum {
616  	MDBA_MDB_UNSPEC,
617  	MDBA_MDB_ENTRY,
618  	__MDBA_MDB_MAX,
619  };
620  #define MDBA_MDB_MAX (__MDBA_MDB_MAX - 1)
621  
622  enum {
623  	MDBA_MDB_ENTRY_UNSPEC,
624  	MDBA_MDB_ENTRY_INFO,
625  	__MDBA_MDB_ENTRY_MAX,
626  };
627  #define MDBA_MDB_ENTRY_MAX (__MDBA_MDB_ENTRY_MAX - 1)
628  
629  /* per mdb entry additional attributes */
630  enum {
631  	MDBA_MDB_EATTR_UNSPEC,
632  	MDBA_MDB_EATTR_TIMER,
633  	MDBA_MDB_EATTR_SRC_LIST,
634  	MDBA_MDB_EATTR_GROUP_MODE,
635  	MDBA_MDB_EATTR_SOURCE,
636  	MDBA_MDB_EATTR_RTPROT,
637  	MDBA_MDB_EATTR_DST,
638  	MDBA_MDB_EATTR_DST_PORT,
639  	MDBA_MDB_EATTR_VNI,
640  	MDBA_MDB_EATTR_IFINDEX,
641  	MDBA_MDB_EATTR_SRC_VNI,
642  	__MDBA_MDB_EATTR_MAX
643  };
644  #define MDBA_MDB_EATTR_MAX (__MDBA_MDB_EATTR_MAX - 1)
645  
646  /* per mdb entry source */
647  enum {
648  	MDBA_MDB_SRCLIST_UNSPEC,
649  	MDBA_MDB_SRCLIST_ENTRY,
650  	__MDBA_MDB_SRCLIST_MAX
651  };
652  #define MDBA_MDB_SRCLIST_MAX (__MDBA_MDB_SRCLIST_MAX - 1)
653  
654  /* per mdb entry per source attributes
655   * these are embedded in MDBA_MDB_SRCLIST_ENTRY
656   */
657  enum {
658  	MDBA_MDB_SRCATTR_UNSPEC,
659  	MDBA_MDB_SRCATTR_ADDRESS,
660  	MDBA_MDB_SRCATTR_TIMER,
661  	__MDBA_MDB_SRCATTR_MAX
662  };
663  #define MDBA_MDB_SRCATTR_MAX (__MDBA_MDB_SRCATTR_MAX - 1)
664  
665  /* multicast router types */
666  enum {
667  	MDB_RTR_TYPE_DISABLED,
668  	MDB_RTR_TYPE_TEMP_QUERY,
669  	MDB_RTR_TYPE_PERM,
670  	MDB_RTR_TYPE_TEMP
671  };
672  
673  enum {
674  	MDBA_ROUTER_UNSPEC,
675  	MDBA_ROUTER_PORT,
676  	__MDBA_ROUTER_MAX,
677  };
678  #define MDBA_ROUTER_MAX (__MDBA_ROUTER_MAX - 1)
679  
680  /* router port attributes */
681  enum {
682  	MDBA_ROUTER_PATTR_UNSPEC,
683  	MDBA_ROUTER_PATTR_TIMER,
684  	MDBA_ROUTER_PATTR_TYPE,
685  	MDBA_ROUTER_PATTR_INET_TIMER,
686  	MDBA_ROUTER_PATTR_INET6_TIMER,
687  	MDBA_ROUTER_PATTR_VID,
688  	__MDBA_ROUTER_PATTR_MAX
689  };
690  #define MDBA_ROUTER_PATTR_MAX (__MDBA_ROUTER_PATTR_MAX - 1)
691  
692  struct br_port_msg {
693  	__u8  family;
694  	__u32 ifindex;
695  };
696  
697  struct br_mdb_entry {
698  	__u32 ifindex;
699  #define MDB_TEMPORARY 0
700  #define MDB_PERMANENT 1
701  	__u8 state;
702  #define MDB_FLAGS_OFFLOAD	(1 << 0)
703  #define MDB_FLAGS_FAST_LEAVE	(1 << 1)
704  #define MDB_FLAGS_STAR_EXCL	(1 << 2)
705  #define MDB_FLAGS_BLOCKED	(1 << 3)
706  	__u8 flags;
707  	__u16 vid;
708  	struct {
709  		union {
710  			__be32	ip4;
711  			struct in6_addr ip6;
712  			unsigned char mac_addr[ETH_ALEN];
713  		} u;
714  		__be16		proto;
715  	} addr;
716  };
717  
718  enum {
719  	MDBA_SET_ENTRY_UNSPEC,
720  	MDBA_SET_ENTRY,
721  	MDBA_SET_ENTRY_ATTRS,
722  	__MDBA_SET_ENTRY_MAX,
723  };
724  #define MDBA_SET_ENTRY_MAX (__MDBA_SET_ENTRY_MAX - 1)
725  
726  /* [MDBA_SET_ENTRY_ATTRS] = {
727   *    [MDBE_ATTR_xxx]
728   *    ...
729   * }
730   */
731  enum {
732  	MDBE_ATTR_UNSPEC,
733  	MDBE_ATTR_SOURCE,
734  	MDBE_ATTR_SRC_LIST,
735  	MDBE_ATTR_GROUP_MODE,
736  	MDBE_ATTR_RTPROT,
737  	MDBE_ATTR_DST,
738  	MDBE_ATTR_DST_PORT,
739  	MDBE_ATTR_VNI,
740  	MDBE_ATTR_IFINDEX,
741  	MDBE_ATTR_SRC_VNI,
742  	__MDBE_ATTR_MAX,
743  };
744  #define MDBE_ATTR_MAX (__MDBE_ATTR_MAX - 1)
745  
746  /* per mdb entry source */
747  enum {
748  	MDBE_SRC_LIST_UNSPEC,
749  	MDBE_SRC_LIST_ENTRY,
750  	__MDBE_SRC_LIST_MAX,
751  };
752  #define MDBE_SRC_LIST_MAX (__MDBE_SRC_LIST_MAX - 1)
753  
754  /* per mdb entry per source attributes
755   * these are embedded in MDBE_SRC_LIST_ENTRY
756   */
757  enum {
758  	MDBE_SRCATTR_UNSPEC,
759  	MDBE_SRCATTR_ADDRESS,
760  	__MDBE_SRCATTR_MAX,
761  };
762  #define MDBE_SRCATTR_MAX (__MDBE_SRCATTR_MAX - 1)
763  
764  /* Embedded inside LINK_XSTATS_TYPE_BRIDGE */
765  enum {
766  	BRIDGE_XSTATS_UNSPEC,
767  	BRIDGE_XSTATS_VLAN,
768  	BRIDGE_XSTATS_MCAST,
769  	BRIDGE_XSTATS_PAD,
770  	BRIDGE_XSTATS_STP,
771  	__BRIDGE_XSTATS_MAX
772  };
773  #define BRIDGE_XSTATS_MAX (__BRIDGE_XSTATS_MAX - 1)
774  
775  enum {
776  	BR_MCAST_DIR_RX,
777  	BR_MCAST_DIR_TX,
778  	BR_MCAST_DIR_SIZE
779  };
780  
781  /* IGMP/MLD statistics */
782  struct br_mcast_stats {
783  	__u64 igmp_v1queries[BR_MCAST_DIR_SIZE];
784  	__u64 igmp_v2queries[BR_MCAST_DIR_SIZE];
785  	__u64 igmp_v3queries[BR_MCAST_DIR_SIZE];
786  	__u64 igmp_leaves[BR_MCAST_DIR_SIZE];
787  	__u64 igmp_v1reports[BR_MCAST_DIR_SIZE];
788  	__u64 igmp_v2reports[BR_MCAST_DIR_SIZE];
789  	__u64 igmp_v3reports[BR_MCAST_DIR_SIZE];
790  	__u64 igmp_parse_errors;
791  
792  	__u64 mld_v1queries[BR_MCAST_DIR_SIZE];
793  	__u64 mld_v2queries[BR_MCAST_DIR_SIZE];
794  	__u64 mld_leaves[BR_MCAST_DIR_SIZE];
795  	__u64 mld_v1reports[BR_MCAST_DIR_SIZE];
796  	__u64 mld_v2reports[BR_MCAST_DIR_SIZE];
797  	__u64 mld_parse_errors;
798  
799  	__u64 mcast_bytes[BR_MCAST_DIR_SIZE];
800  	__u64 mcast_packets[BR_MCAST_DIR_SIZE];
801  };
802  
803  /* bridge boolean options
804   * BR_BOOLOPT_NO_LL_LEARN - disable learning from link-local packets
805   * BR_BOOLOPT_MCAST_VLAN_SNOOPING - control vlan multicast snooping
806   *
807   * IMPORTANT: if adding a new option do not forget to handle
808   *            it in br_boolopt_toggle/get and bridge sysfs
809   */
810  enum br_boolopt_id {
811  	BR_BOOLOPT_NO_LL_LEARN,
812  	BR_BOOLOPT_MCAST_VLAN_SNOOPING,
813  	BR_BOOLOPT_MST_ENABLE,
814  	BR_BOOLOPT_MAX
815  };
816  
817  /* struct br_boolopt_multi - change multiple bridge boolean options
818   *
819   * @optval: new option values (bit per option)
820   * @optmask: options to change (bit per option)
821   */
822  struct br_boolopt_multi {
823  	__u32 optval;
824  	__u32 optmask;
825  };
826  
827  enum {
828  	BRIDGE_QUERIER_UNSPEC,
829  	BRIDGE_QUERIER_IP_ADDRESS,
830  	BRIDGE_QUERIER_IP_PORT,
831  	BRIDGE_QUERIER_IP_OTHER_TIMER,
832  	BRIDGE_QUERIER_PAD,
833  	BRIDGE_QUERIER_IPV6_ADDRESS,
834  	BRIDGE_QUERIER_IPV6_PORT,
835  	BRIDGE_QUERIER_IPV6_OTHER_TIMER,
836  	__BRIDGE_QUERIER_MAX
837  };
838  #define BRIDGE_QUERIER_MAX (__BRIDGE_QUERIER_MAX - 1)
839  #endif /* _UAPI_LINUX_IF_BRIDGE_H */
840