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
55struct __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
77struct __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
93struct __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 */
118enum {
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
138struct bridge_vlan_info {
139	__u16 flags;
140	__u16 vid;
141};
142
143enum {
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
153struct 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
163enum {
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
180enum {
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
191enum {
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
199enum {
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
207enum {
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
216enum {
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
225enum {
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
237enum {
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
258enum {
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
267enum {
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
278enum {
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
289struct br_mrp_instance {
290	__u32 ring_id;
291	__u32 p_ifindex;
292	__u32 s_ifindex;
293	__u16 prio;
294};
295
296struct br_mrp_ring_state {
297	__u32 ring_id;
298	__u32 ring_state;
299};
300
301struct br_mrp_ring_role {
302	__u32 ring_id;
303	__u32 ring_role;
304};
305
306struct br_mrp_start_test {
307	__u32 ring_id;
308	__u32 interval;
309	__u32 max_miss;
310	__u32 period;
311	__u32 monitor;
312};
313
314struct br_mrp_in_state {
315	__u32 in_state;
316	__u16 in_id;
317};
318
319struct br_mrp_in_role {
320	__u32 ring_id;
321	__u32 in_role;
322	__u32 i_ifindex;
323	__u16 in_id;
324};
325
326struct br_mrp_start_in_test {
327	__u32 interval;
328	__u32 max_miss;
329	__u32 period;
330	__u16 in_id;
331};
332
333enum {
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
356enum {
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
367enum {
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
375enum {
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
386enum {
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
397enum {
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
406enum {
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
415enum {
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
430enum {
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
441enum {
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
457enum {
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
464enum {
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
472struct 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 */
482struct br_vlan_msg {
483	__u8 family;
484	__u8 reserved1;
485	__u16 reserved2;
486	__u32 ifindex;
487};
488
489enum {
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 */
510enum {
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
518enum {
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 */
540enum {
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 */
556enum {
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
567enum {
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 */
607enum {
608	MDBA_UNSPEC,
609	MDBA_MDB,
610	MDBA_ROUTER,
611	__MDBA_MAX,
612};
613#define MDBA_MAX (__MDBA_MAX - 1)
614
615enum {
616	MDBA_MDB_UNSPEC,
617	MDBA_MDB_ENTRY,
618	__MDBA_MDB_MAX,
619};
620#define MDBA_MDB_MAX (__MDBA_MDB_MAX - 1)
621
622enum {
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 */
630enum {
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 */
647enum {
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 */
657enum {
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 */
666enum {
667	MDB_RTR_TYPE_DISABLED,
668	MDB_RTR_TYPE_TEMP_QUERY,
669	MDB_RTR_TYPE_PERM,
670	MDB_RTR_TYPE_TEMP
671};
672
673enum {
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 */
681enum {
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
692struct br_port_msg {
693	__u8  family;
694	__u32 ifindex;
695};
696
697struct 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
718enum {
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_GET_ENTRY] = {
727 *    struct br_mdb_entry
728 *    [MDBA_GET_ENTRY_ATTRS] = {
729 *       [MDBE_ATTR_SOURCE]
730 *          struct in_addr / struct in6_addr
731 *       [MDBE_ATTR_SRC_VNI]
732 *          u32
733 *    }
734 * }
735 */
736enum {
737	MDBA_GET_ENTRY_UNSPEC,
738	MDBA_GET_ENTRY,
739	MDBA_GET_ENTRY_ATTRS,
740	__MDBA_GET_ENTRY_MAX,
741};
742#define MDBA_GET_ENTRY_MAX (__MDBA_GET_ENTRY_MAX - 1)
743
744/* [MDBA_SET_ENTRY_ATTRS] = {
745 *    [MDBE_ATTR_xxx]
746 *    ...
747 * }
748 */
749enum {
750	MDBE_ATTR_UNSPEC,
751	MDBE_ATTR_SOURCE,
752	MDBE_ATTR_SRC_LIST,
753	MDBE_ATTR_GROUP_MODE,
754	MDBE_ATTR_RTPROT,
755	MDBE_ATTR_DST,
756	MDBE_ATTR_DST_PORT,
757	MDBE_ATTR_VNI,
758	MDBE_ATTR_IFINDEX,
759	MDBE_ATTR_SRC_VNI,
760	MDBE_ATTR_STATE_MASK,
761	__MDBE_ATTR_MAX,
762};
763#define MDBE_ATTR_MAX (__MDBE_ATTR_MAX - 1)
764
765/* per mdb entry source */
766enum {
767	MDBE_SRC_LIST_UNSPEC,
768	MDBE_SRC_LIST_ENTRY,
769	__MDBE_SRC_LIST_MAX,
770};
771#define MDBE_SRC_LIST_MAX (__MDBE_SRC_LIST_MAX - 1)
772
773/* per mdb entry per source attributes
774 * these are embedded in MDBE_SRC_LIST_ENTRY
775 */
776enum {
777	MDBE_SRCATTR_UNSPEC,
778	MDBE_SRCATTR_ADDRESS,
779	__MDBE_SRCATTR_MAX,
780};
781#define MDBE_SRCATTR_MAX (__MDBE_SRCATTR_MAX - 1)
782
783/* Embedded inside LINK_XSTATS_TYPE_BRIDGE */
784enum {
785	BRIDGE_XSTATS_UNSPEC,
786	BRIDGE_XSTATS_VLAN,
787	BRIDGE_XSTATS_MCAST,
788	BRIDGE_XSTATS_PAD,
789	BRIDGE_XSTATS_STP,
790	__BRIDGE_XSTATS_MAX
791};
792#define BRIDGE_XSTATS_MAX (__BRIDGE_XSTATS_MAX - 1)
793
794enum {
795	BR_MCAST_DIR_RX,
796	BR_MCAST_DIR_TX,
797	BR_MCAST_DIR_SIZE
798};
799
800/* IGMP/MLD statistics */
801struct br_mcast_stats {
802	__u64 igmp_v1queries[BR_MCAST_DIR_SIZE];
803	__u64 igmp_v2queries[BR_MCAST_DIR_SIZE];
804	__u64 igmp_v3queries[BR_MCAST_DIR_SIZE];
805	__u64 igmp_leaves[BR_MCAST_DIR_SIZE];
806	__u64 igmp_v1reports[BR_MCAST_DIR_SIZE];
807	__u64 igmp_v2reports[BR_MCAST_DIR_SIZE];
808	__u64 igmp_v3reports[BR_MCAST_DIR_SIZE];
809	__u64 igmp_parse_errors;
810
811	__u64 mld_v1queries[BR_MCAST_DIR_SIZE];
812	__u64 mld_v2queries[BR_MCAST_DIR_SIZE];
813	__u64 mld_leaves[BR_MCAST_DIR_SIZE];
814	__u64 mld_v1reports[BR_MCAST_DIR_SIZE];
815	__u64 mld_v2reports[BR_MCAST_DIR_SIZE];
816	__u64 mld_parse_errors;
817
818	__u64 mcast_bytes[BR_MCAST_DIR_SIZE];
819	__u64 mcast_packets[BR_MCAST_DIR_SIZE];
820};
821
822/* bridge boolean options
823 * BR_BOOLOPT_NO_LL_LEARN - disable learning from link-local packets
824 * BR_BOOLOPT_MCAST_VLAN_SNOOPING - control vlan multicast snooping
825 *
826 * IMPORTANT: if adding a new option do not forget to handle
827 *            it in br_boolopt_toggle/get and bridge sysfs
828 */
829enum br_boolopt_id {
830	BR_BOOLOPT_NO_LL_LEARN,
831	BR_BOOLOPT_MCAST_VLAN_SNOOPING,
832	BR_BOOLOPT_MST_ENABLE,
833	BR_BOOLOPT_MAX
834};
835
836/* struct br_boolopt_multi - change multiple bridge boolean options
837 *
838 * @optval: new option values (bit per option)
839 * @optmask: options to change (bit per option)
840 */
841struct br_boolopt_multi {
842	__u32 optval;
843	__u32 optmask;
844};
845
846enum {
847	BRIDGE_QUERIER_UNSPEC,
848	BRIDGE_QUERIER_IP_ADDRESS,
849	BRIDGE_QUERIER_IP_PORT,
850	BRIDGE_QUERIER_IP_OTHER_TIMER,
851	BRIDGE_QUERIER_PAD,
852	BRIDGE_QUERIER_IPV6_ADDRESS,
853	BRIDGE_QUERIER_IPV6_PORT,
854	BRIDGE_QUERIER_IPV6_OTHER_TIMER,
855	__BRIDGE_QUERIER_MAX
856};
857#define BRIDGE_QUERIER_MAX (__BRIDGE_QUERIER_MAX - 1)
858#endif /* _UAPI_LINUX_IF_BRIDGE_H */
859