master
  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 _LINUX_IF_BRIDGE_H
 15#define _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#define MDB_FLAGS_OFFLOAD_FAILED	(1 << 4)
707	__u8 flags;
708	__u16 vid;
709	struct {
710		union {
711			__be32	ip4;
712			struct in6_addr ip6;
713			unsigned char mac_addr[ETH_ALEN];
714		} u;
715		__be16		proto;
716	} addr;
717};
718
719enum {
720	MDBA_SET_ENTRY_UNSPEC,
721	MDBA_SET_ENTRY,
722	MDBA_SET_ENTRY_ATTRS,
723	__MDBA_SET_ENTRY_MAX,
724};
725#define MDBA_SET_ENTRY_MAX (__MDBA_SET_ENTRY_MAX - 1)
726
727/* [MDBA_GET_ENTRY] = {
728 *    struct br_mdb_entry
729 *    [MDBA_GET_ENTRY_ATTRS] = {
730 *       [MDBE_ATTR_SOURCE]
731 *          struct in_addr / struct in6_addr
732 *       [MDBE_ATTR_SRC_VNI]
733 *          u32
734 *    }
735 * }
736 */
737enum {
738	MDBA_GET_ENTRY_UNSPEC,
739	MDBA_GET_ENTRY,
740	MDBA_GET_ENTRY_ATTRS,
741	__MDBA_GET_ENTRY_MAX,
742};
743#define MDBA_GET_ENTRY_MAX (__MDBA_GET_ENTRY_MAX - 1)
744
745/* [MDBA_SET_ENTRY_ATTRS] = {
746 *    [MDBE_ATTR_xxx]
747 *    ...
748 * }
749 */
750enum {
751	MDBE_ATTR_UNSPEC,
752	MDBE_ATTR_SOURCE,
753	MDBE_ATTR_SRC_LIST,
754	MDBE_ATTR_GROUP_MODE,
755	MDBE_ATTR_RTPROT,
756	MDBE_ATTR_DST,
757	MDBE_ATTR_DST_PORT,
758	MDBE_ATTR_VNI,
759	MDBE_ATTR_IFINDEX,
760	MDBE_ATTR_SRC_VNI,
761	MDBE_ATTR_STATE_MASK,
762	__MDBE_ATTR_MAX,
763};
764#define MDBE_ATTR_MAX (__MDBE_ATTR_MAX - 1)
765
766/* per mdb entry source */
767enum {
768	MDBE_SRC_LIST_UNSPEC,
769	MDBE_SRC_LIST_ENTRY,
770	__MDBE_SRC_LIST_MAX,
771};
772#define MDBE_SRC_LIST_MAX (__MDBE_SRC_LIST_MAX - 1)
773
774/* per mdb entry per source attributes
775 * these are embedded in MDBE_SRC_LIST_ENTRY
776 */
777enum {
778	MDBE_SRCATTR_UNSPEC,
779	MDBE_SRCATTR_ADDRESS,
780	__MDBE_SRCATTR_MAX,
781};
782#define MDBE_SRCATTR_MAX (__MDBE_SRCATTR_MAX - 1)
783
784/* Embedded inside LINK_XSTATS_TYPE_BRIDGE */
785enum {
786	BRIDGE_XSTATS_UNSPEC,
787	BRIDGE_XSTATS_VLAN,
788	BRIDGE_XSTATS_MCAST,
789	BRIDGE_XSTATS_PAD,
790	BRIDGE_XSTATS_STP,
791	__BRIDGE_XSTATS_MAX
792};
793#define BRIDGE_XSTATS_MAX (__BRIDGE_XSTATS_MAX - 1)
794
795enum {
796	BR_MCAST_DIR_RX,
797	BR_MCAST_DIR_TX,
798	BR_MCAST_DIR_SIZE
799};
800
801/* IGMP/MLD statistics */
802struct br_mcast_stats {
803	__u64 igmp_v1queries[BR_MCAST_DIR_SIZE];
804	__u64 igmp_v2queries[BR_MCAST_DIR_SIZE];
805	__u64 igmp_v3queries[BR_MCAST_DIR_SIZE];
806	__u64 igmp_leaves[BR_MCAST_DIR_SIZE];
807	__u64 igmp_v1reports[BR_MCAST_DIR_SIZE];
808	__u64 igmp_v2reports[BR_MCAST_DIR_SIZE];
809	__u64 igmp_v3reports[BR_MCAST_DIR_SIZE];
810	__u64 igmp_parse_errors;
811
812	__u64 mld_v1queries[BR_MCAST_DIR_SIZE];
813	__u64 mld_v2queries[BR_MCAST_DIR_SIZE];
814	__u64 mld_leaves[BR_MCAST_DIR_SIZE];
815	__u64 mld_v1reports[BR_MCAST_DIR_SIZE];
816	__u64 mld_v2reports[BR_MCAST_DIR_SIZE];
817	__u64 mld_parse_errors;
818
819	__u64 mcast_bytes[BR_MCAST_DIR_SIZE];
820	__u64 mcast_packets[BR_MCAST_DIR_SIZE];
821};
822
823/* bridge boolean options
824 * BR_BOOLOPT_NO_LL_LEARN - disable learning from link-local packets
825 * BR_BOOLOPT_MCAST_VLAN_SNOOPING - control vlan multicast snooping
826 *
827 * IMPORTANT: if adding a new option do not forget to handle
828 *            it in br_boolopt_toggle/get and bridge sysfs
829 */
830enum br_boolopt_id {
831	BR_BOOLOPT_NO_LL_LEARN,
832	BR_BOOLOPT_MCAST_VLAN_SNOOPING,
833	BR_BOOLOPT_MST_ENABLE,
834	BR_BOOLOPT_MDB_OFFLOAD_FAIL_NOTIFICATION,
835	BR_BOOLOPT_MAX
836};
837
838/* struct br_boolopt_multi - change multiple bridge boolean options
839 *
840 * @optval: new option values (bit per option)
841 * @optmask: options to change (bit per option)
842 */
843struct br_boolopt_multi {
844	__u32 optval;
845	__u32 optmask;
846};
847
848enum {
849	BRIDGE_QUERIER_UNSPEC,
850	BRIDGE_QUERIER_IP_ADDRESS,
851	BRIDGE_QUERIER_IP_PORT,
852	BRIDGE_QUERIER_IP_OTHER_TIMER,
853	BRIDGE_QUERIER_PAD,
854	BRIDGE_QUERIER_IPV6_ADDRESS,
855	BRIDGE_QUERIER_IPV6_PORT,
856	BRIDGE_QUERIER_IPV6_OTHER_TIMER,
857	__BRIDGE_QUERIER_MAX
858};
859#define BRIDGE_QUERIER_MAX (__BRIDGE_QUERIER_MAX - 1)
860#endif /* _LINUX_IF_BRIDGE_H */