xref: /linux/include/uapi/linux/if_bridge.h (revision 20f6a05ef63594feb0c6dfbd629da0448b43124d)
1e2be04c7SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2607ca46eSDavid Howells /*
3607ca46eSDavid Howells  *	Linux ethernet bridge
4607ca46eSDavid Howells  *
5607ca46eSDavid Howells  *	Authors:
6607ca46eSDavid Howells  *	Lennert Buytenhek		<buytenh@gnu.org>
7607ca46eSDavid Howells  *
8607ca46eSDavid Howells  *	This program is free software; you can redistribute it and/or
9607ca46eSDavid Howells  *	modify it under the terms of the GNU General Public License
10607ca46eSDavid Howells  *	as published by the Free Software Foundation; either version
11607ca46eSDavid Howells  *	2 of the License, or (at your option) any later version.
12607ca46eSDavid Howells  */
13607ca46eSDavid Howells 
14607ca46eSDavid Howells #ifndef _UAPI_LINUX_IF_BRIDGE_H
15607ca46eSDavid Howells #define _UAPI_LINUX_IF_BRIDGE_H
16607ca46eSDavid Howells 
17607ca46eSDavid Howells #include <linux/types.h>
18e216975aSJoe Perches #include <linux/if_ether.h>
1966f1c448SGregory Fong #include <linux/in6.h>
20607ca46eSDavid Howells 
21607ca46eSDavid Howells #define SYSFS_BRIDGE_ATTR	"bridge"
22607ca46eSDavid Howells #define SYSFS_BRIDGE_FDB	"brforward"
23607ca46eSDavid Howells #define SYSFS_BRIDGE_PORT_SUBDIR "brif"
24607ca46eSDavid Howells #define SYSFS_BRIDGE_PORT_ATTR	"brport"
25607ca46eSDavid Howells #define SYSFS_BRIDGE_PORT_LINK	"bridge"
26607ca46eSDavid Howells 
27607ca46eSDavid Howells #define BRCTL_VERSION 1
28607ca46eSDavid Howells 
29607ca46eSDavid Howells #define BRCTL_GET_VERSION 0
30607ca46eSDavid Howells #define BRCTL_GET_BRIDGES 1
31607ca46eSDavid Howells #define BRCTL_ADD_BRIDGE 2
32607ca46eSDavid Howells #define BRCTL_DEL_BRIDGE 3
33607ca46eSDavid Howells #define BRCTL_ADD_IF 4
34607ca46eSDavid Howells #define BRCTL_DEL_IF 5
35607ca46eSDavid Howells #define BRCTL_GET_BRIDGE_INFO 6
36607ca46eSDavid Howells #define BRCTL_GET_PORT_LIST 7
37607ca46eSDavid Howells #define BRCTL_SET_BRIDGE_FORWARD_DELAY 8
38607ca46eSDavid Howells #define BRCTL_SET_BRIDGE_HELLO_TIME 9
39607ca46eSDavid Howells #define BRCTL_SET_BRIDGE_MAX_AGE 10
40607ca46eSDavid Howells #define BRCTL_SET_AGEING_TIME 11
41607ca46eSDavid Howells #define BRCTL_SET_GC_INTERVAL 12
42607ca46eSDavid Howells #define BRCTL_GET_PORT_INFO 13
43607ca46eSDavid Howells #define BRCTL_SET_BRIDGE_STP_STATE 14
44607ca46eSDavid Howells #define BRCTL_SET_BRIDGE_PRIORITY 15
45607ca46eSDavid Howells #define BRCTL_SET_PORT_PRIORITY 16
46607ca46eSDavid Howells #define BRCTL_SET_PATH_COST 17
47607ca46eSDavid Howells #define BRCTL_GET_FDB_ENTRIES 18
48607ca46eSDavid Howells 
49607ca46eSDavid Howells #define BR_STATE_DISABLED 0
50607ca46eSDavid Howells #define BR_STATE_LISTENING 1
51607ca46eSDavid Howells #define BR_STATE_LEARNING 2
52607ca46eSDavid Howells #define BR_STATE_FORWARDING 3
53607ca46eSDavid Howells #define BR_STATE_BLOCKING 4
54607ca46eSDavid Howells 
55607ca46eSDavid Howells struct __bridge_info {
56607ca46eSDavid Howells 	__u64 designated_root;
57607ca46eSDavid Howells 	__u64 bridge_id;
58607ca46eSDavid Howells 	__u32 root_path_cost;
59607ca46eSDavid Howells 	__u32 max_age;
60607ca46eSDavid Howells 	__u32 hello_time;
61607ca46eSDavid Howells 	__u32 forward_delay;
62607ca46eSDavid Howells 	__u32 bridge_max_age;
63607ca46eSDavid Howells 	__u32 bridge_hello_time;
64607ca46eSDavid Howells 	__u32 bridge_forward_delay;
65607ca46eSDavid Howells 	__u8 topology_change;
66607ca46eSDavid Howells 	__u8 topology_change_detected;
67607ca46eSDavid Howells 	__u8 root_port;
68607ca46eSDavid Howells 	__u8 stp_enabled;
69607ca46eSDavid Howells 	__u32 ageing_time;
70607ca46eSDavid Howells 	__u32 gc_interval;
71607ca46eSDavid Howells 	__u32 hello_timer_value;
72607ca46eSDavid Howells 	__u32 tcn_timer_value;
73607ca46eSDavid Howells 	__u32 topology_change_timer_value;
74607ca46eSDavid Howells 	__u32 gc_timer_value;
75607ca46eSDavid Howells };
76607ca46eSDavid Howells 
77607ca46eSDavid Howells struct __port_info {
78607ca46eSDavid Howells 	__u64 designated_root;
79607ca46eSDavid Howells 	__u64 designated_bridge;
80607ca46eSDavid Howells 	__u16 port_id;
81607ca46eSDavid Howells 	__u16 designated_port;
82607ca46eSDavid Howells 	__u32 path_cost;
83607ca46eSDavid Howells 	__u32 designated_cost;
84607ca46eSDavid Howells 	__u8 state;
85607ca46eSDavid Howells 	__u8 top_change_ack;
86607ca46eSDavid Howells 	__u8 config_pending;
87607ca46eSDavid Howells 	__u8 unused0;
88607ca46eSDavid Howells 	__u32 message_age_timer_value;
89607ca46eSDavid Howells 	__u32 forward_delay_timer_value;
90607ca46eSDavid Howells 	__u32 hold_timer_value;
91607ca46eSDavid Howells };
92607ca46eSDavid Howells 
93607ca46eSDavid Howells struct __fdb_entry {
94e216975aSJoe Perches 	__u8 mac_addr[ETH_ALEN];
95607ca46eSDavid Howells 	__u8 port_no;
96607ca46eSDavid Howells 	__u8 is_local;
97607ca46eSDavid Howells 	__u32 ageing_timer_value;
98607ca46eSDavid Howells 	__u8 port_hi;
99607ca46eSDavid Howells 	__u8 pad0;
100607ca46eSDavid Howells 	__u16 unused;
101607ca46eSDavid Howells };
102607ca46eSDavid Howells 
1032469ffd7SJohn Fastabend /* Bridge Flags */
1042469ffd7SJohn Fastabend #define BRIDGE_FLAGS_MASTER	1	/* Bridge command to/from master */
1052469ffd7SJohn Fastabend #define BRIDGE_FLAGS_SELF	2	/* Bridge command to/from lowerdev */
106607ca46eSDavid Howells 
1072469ffd7SJohn Fastabend #define BRIDGE_MODE_VEB		0	/* Default loopback mode */
1082469ffd7SJohn Fastabend #define BRIDGE_MODE_VEPA	1	/* 802.1Qbg defined VEPA mode */
109fc0bdbbcSRoopa Prabhu #define BRIDGE_MODE_UNDEF	0xFFFF  /* mode undefined */
1102469ffd7SJohn Fastabend 
1112469ffd7SJohn Fastabend /* Bridge management nested attributes
1122469ffd7SJohn Fastabend  * [IFLA_AF_SPEC] = {
1132469ffd7SJohn Fastabend  *     [IFLA_BRIDGE_FLAGS]
1142469ffd7SJohn Fastabend  *     [IFLA_BRIDGE_MODE]
115407af329SVlad Yasevich  *     [IFLA_BRIDGE_VLAN_INFO]
1162469ffd7SJohn Fastabend  * }
1172469ffd7SJohn Fastabend  */
1182469ffd7SJohn Fastabend enum {
1192469ffd7SJohn Fastabend 	IFLA_BRIDGE_FLAGS,
1202469ffd7SJohn Fastabend 	IFLA_BRIDGE_MODE,
121407af329SVlad Yasevich 	IFLA_BRIDGE_VLAN_INFO,
122b3c7ef0aSRoopa Prabhu 	IFLA_BRIDGE_VLAN_TUNNEL_INFO,
1234714d137SHoratiu Vultur 	IFLA_BRIDGE_MRP,
1242469ffd7SJohn Fastabend 	__IFLA_BRIDGE_MAX,
1252469ffd7SJohn Fastabend };
1262469ffd7SJohn Fastabend #define IFLA_BRIDGE_MAX (__IFLA_BRIDGE_MAX - 1)
127ee07c6e7SCong Wang 
128407af329SVlad Yasevich #define BRIDGE_VLAN_INFO_MASTER	(1<<0)	/* Operate on Bridge device as well */
129552406c4SVlad Yasevich #define BRIDGE_VLAN_INFO_PVID	(1<<1)	/* VLAN is PVID, ingress untagged */
13035e03f3aSVlad Yasevich #define BRIDGE_VLAN_INFO_UNTAGGED	(1<<2)	/* VLAN egresses untagged */
131bdced7efSRoopa Prabhu #define BRIDGE_VLAN_INFO_RANGE_BEGIN	(1<<3) /* VLAN is start of vlan range */
132bdced7efSRoopa Prabhu #define BRIDGE_VLAN_INFO_RANGE_END	(1<<4) /* VLAN is end of vlan range */
1332594e906SNikolay Aleksandrov #define BRIDGE_VLAN_INFO_BRENTRY	(1<<5) /* Global bridge VLAN entry */
134a5d29ae2SNikolay Aleksandrov #define BRIDGE_VLAN_INFO_ONLY_OPTS	(1<<6) /* Skip create/delete/flags */
135407af329SVlad Yasevich 
136407af329SVlad Yasevich struct bridge_vlan_info {
1379f89ec82SCong Wang 	__u16 flags;
1389f89ec82SCong Wang 	__u16 vid;
139407af329SVlad Yasevich };
140407af329SVlad Yasevich 
141b3c7ef0aSRoopa Prabhu enum {
142b3c7ef0aSRoopa Prabhu 	IFLA_BRIDGE_VLAN_TUNNEL_UNSPEC,
143b3c7ef0aSRoopa Prabhu 	IFLA_BRIDGE_VLAN_TUNNEL_ID,
144b3c7ef0aSRoopa Prabhu 	IFLA_BRIDGE_VLAN_TUNNEL_VID,
145b3c7ef0aSRoopa Prabhu 	IFLA_BRIDGE_VLAN_TUNNEL_FLAGS,
146b3c7ef0aSRoopa Prabhu 	__IFLA_BRIDGE_VLAN_TUNNEL_MAX,
147b3c7ef0aSRoopa Prabhu };
148b3c7ef0aSRoopa Prabhu 
149b3c7ef0aSRoopa Prabhu #define IFLA_BRIDGE_VLAN_TUNNEL_MAX (__IFLA_BRIDGE_VLAN_TUNNEL_MAX - 1)
150b3c7ef0aSRoopa Prabhu 
151a60c0903SNikolay Aleksandrov struct bridge_vlan_xstats {
152a60c0903SNikolay Aleksandrov 	__u64 rx_bytes;
153a60c0903SNikolay Aleksandrov 	__u64 rx_packets;
154a60c0903SNikolay Aleksandrov 	__u64 tx_bytes;
155a60c0903SNikolay Aleksandrov 	__u64 tx_packets;
156a60c0903SNikolay Aleksandrov 	__u16 vid;
15761ba1a2dSNikolay Aleksandrov 	__u16 flags;
158a60c0903SNikolay Aleksandrov 	__u32 pad2;
159a60c0903SNikolay Aleksandrov };
160a60c0903SNikolay Aleksandrov 
1614714d137SHoratiu Vultur enum {
1624714d137SHoratiu Vultur 	IFLA_BRIDGE_MRP_UNSPEC,
1634714d137SHoratiu Vultur 	IFLA_BRIDGE_MRP_INSTANCE,
1644714d137SHoratiu Vultur 	IFLA_BRIDGE_MRP_PORT_STATE,
1654714d137SHoratiu Vultur 	IFLA_BRIDGE_MRP_PORT_ROLE,
1664714d137SHoratiu Vultur 	IFLA_BRIDGE_MRP_RING_STATE,
1674714d137SHoratiu Vultur 	IFLA_BRIDGE_MRP_RING_ROLE,
1684714d137SHoratiu Vultur 	IFLA_BRIDGE_MRP_START_TEST,
1694714d137SHoratiu Vultur 	__IFLA_BRIDGE_MRP_MAX,
1704714d137SHoratiu Vultur };
1714714d137SHoratiu Vultur 
172*20f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_MAX (__IFLA_BRIDGE_MRP_MAX - 1)
173*20f6a05eSHoratiu Vultur 
174*20f6a05eSHoratiu Vultur enum {
175*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_INSTANCE_UNSPEC,
176*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_INSTANCE_RING_ID,
177*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_INSTANCE_P_IFINDEX,
178*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_INSTANCE_S_IFINDEX,
179*20f6a05eSHoratiu Vultur 	__IFLA_BRIDGE_MRP_INSTANCE_MAX,
180*20f6a05eSHoratiu Vultur };
181*20f6a05eSHoratiu Vultur 
182*20f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_INSTANCE_MAX (__IFLA_BRIDGE_MRP_INSTANCE_MAX - 1)
183*20f6a05eSHoratiu Vultur 
184*20f6a05eSHoratiu Vultur enum {
185*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_PORT_STATE_UNSPEC,
186*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_PORT_STATE_STATE,
187*20f6a05eSHoratiu Vultur 	__IFLA_BRIDGE_MRP_PORT_STATE_MAX,
188*20f6a05eSHoratiu Vultur };
189*20f6a05eSHoratiu Vultur 
190*20f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_PORT_STATE_MAX (__IFLA_BRIDGE_MRP_PORT_STATE_MAX - 1)
191*20f6a05eSHoratiu Vultur 
192*20f6a05eSHoratiu Vultur enum {
193*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_PORT_ROLE_UNSPEC,
194*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_PORT_ROLE_ROLE,
195*20f6a05eSHoratiu Vultur 	__IFLA_BRIDGE_MRP_PORT_ROLE_MAX,
196*20f6a05eSHoratiu Vultur };
197*20f6a05eSHoratiu Vultur 
198*20f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_PORT_ROLE_MAX (__IFLA_BRIDGE_MRP_PORT_ROLE_MAX - 1)
199*20f6a05eSHoratiu Vultur 
200*20f6a05eSHoratiu Vultur enum {
201*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_RING_STATE_UNSPEC,
202*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_RING_STATE_RING_ID,
203*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_RING_STATE_STATE,
204*20f6a05eSHoratiu Vultur 	__IFLA_BRIDGE_MRP_RING_STATE_MAX,
205*20f6a05eSHoratiu Vultur };
206*20f6a05eSHoratiu Vultur 
207*20f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_RING_STATE_MAX (__IFLA_BRIDGE_MRP_RING_STATE_MAX - 1)
208*20f6a05eSHoratiu Vultur 
209*20f6a05eSHoratiu Vultur enum {
210*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_RING_ROLE_UNSPEC,
211*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_RING_ROLE_RING_ID,
212*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_RING_ROLE_ROLE,
213*20f6a05eSHoratiu Vultur 	__IFLA_BRIDGE_MRP_RING_ROLE_MAX,
214*20f6a05eSHoratiu Vultur };
215*20f6a05eSHoratiu Vultur 
216*20f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_RING_ROLE_MAX (__IFLA_BRIDGE_MRP_RING_ROLE_MAX - 1)
217*20f6a05eSHoratiu Vultur 
218*20f6a05eSHoratiu Vultur enum {
219*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_START_TEST_UNSPEC,
220*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_START_TEST_RING_ID,
221*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_START_TEST_INTERVAL,
222*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_START_TEST_MAX_MISS,
223*20f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_START_TEST_PERIOD,
224*20f6a05eSHoratiu Vultur 	__IFLA_BRIDGE_MRP_START_TEST_MAX,
225*20f6a05eSHoratiu Vultur };
226*20f6a05eSHoratiu Vultur 
227*20f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_START_TEST_MAX (__IFLA_BRIDGE_MRP_START_TEST_MAX - 1)
228*20f6a05eSHoratiu Vultur 
2294714d137SHoratiu Vultur struct br_mrp_instance {
2304714d137SHoratiu Vultur 	__u32 ring_id;
2314714d137SHoratiu Vultur 	__u32 p_ifindex;
2324714d137SHoratiu Vultur 	__u32 s_ifindex;
2334714d137SHoratiu Vultur };
2344714d137SHoratiu Vultur 
2354714d137SHoratiu Vultur struct br_mrp_ring_state {
2364714d137SHoratiu Vultur 	__u32 ring_id;
2374714d137SHoratiu Vultur 	__u32 ring_state;
2384714d137SHoratiu Vultur };
2394714d137SHoratiu Vultur 
2404714d137SHoratiu Vultur struct br_mrp_ring_role {
2414714d137SHoratiu Vultur 	__u32 ring_id;
2424714d137SHoratiu Vultur 	__u32 ring_role;
2434714d137SHoratiu Vultur };
2444714d137SHoratiu Vultur 
2454714d137SHoratiu Vultur struct br_mrp_start_test {
2464714d137SHoratiu Vultur 	__u32 ring_id;
2474714d137SHoratiu Vultur 	__u32 interval;
2484714d137SHoratiu Vultur 	__u32 max_miss;
2494714d137SHoratiu Vultur 	__u32 period;
2504714d137SHoratiu Vultur };
2514714d137SHoratiu Vultur 
252de179966SVivien Didelot struct bridge_stp_xstats {
253de179966SVivien Didelot 	__u64 transition_blk;
254de179966SVivien Didelot 	__u64 transition_fwd;
255de179966SVivien Didelot 	__u64 rx_bpdu;
256de179966SVivien Didelot 	__u64 tx_bpdu;
257de179966SVivien Didelot 	__u64 rx_tcn;
258de179966SVivien Didelot 	__u64 tx_tcn;
259de179966SVivien Didelot };
260de179966SVivien Didelot 
2618dcea187SNikolay Aleksandrov /* Bridge vlan RTM header */
2628dcea187SNikolay Aleksandrov struct br_vlan_msg {
2638dcea187SNikolay Aleksandrov 	__u8 family;
2648dcea187SNikolay Aleksandrov 	__u8 reserved1;
2658dcea187SNikolay Aleksandrov 	__u16 reserved2;
2668dcea187SNikolay Aleksandrov 	__u32 ifindex;
2678dcea187SNikolay Aleksandrov };
2688dcea187SNikolay Aleksandrov 
26956d09976SNikolay Aleksandrov enum {
27056d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_DUMP_UNSPEC,
27156d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_DUMP_FLAGS,
27256d09976SNikolay Aleksandrov 	__BRIDGE_VLANDB_DUMP_MAX,
27356d09976SNikolay Aleksandrov };
27456d09976SNikolay Aleksandrov #define BRIDGE_VLANDB_DUMP_MAX (__BRIDGE_VLANDB_DUMP_MAX - 1)
27556d09976SNikolay Aleksandrov 
27656d09976SNikolay Aleksandrov /* flags used in BRIDGE_VLANDB_DUMP_FLAGS attribute to affect dumps */
27756d09976SNikolay Aleksandrov #define BRIDGE_VLANDB_DUMPF_STATS	(1 << 0) /* Include stats in the dump */
27856d09976SNikolay Aleksandrov 
2798dcea187SNikolay Aleksandrov /* Bridge vlan RTM attributes
2808dcea187SNikolay Aleksandrov  * [BRIDGE_VLANDB_ENTRY] = {
2818dcea187SNikolay Aleksandrov  *     [BRIDGE_VLANDB_ENTRY_INFO]
2828dcea187SNikolay Aleksandrov  *     ...
2838dcea187SNikolay Aleksandrov  * }
2848dcea187SNikolay Aleksandrov  */
2858dcea187SNikolay Aleksandrov enum {
2868dcea187SNikolay Aleksandrov 	BRIDGE_VLANDB_UNSPEC,
2878dcea187SNikolay Aleksandrov 	BRIDGE_VLANDB_ENTRY,
2888dcea187SNikolay Aleksandrov 	__BRIDGE_VLANDB_MAX,
2898dcea187SNikolay Aleksandrov };
2908dcea187SNikolay Aleksandrov #define BRIDGE_VLANDB_MAX (__BRIDGE_VLANDB_MAX - 1)
2918dcea187SNikolay Aleksandrov 
2928dcea187SNikolay Aleksandrov enum {
2938dcea187SNikolay Aleksandrov 	BRIDGE_VLANDB_ENTRY_UNSPEC,
2948dcea187SNikolay Aleksandrov 	BRIDGE_VLANDB_ENTRY_INFO,
2950ab55879SNikolay Aleksandrov 	BRIDGE_VLANDB_ENTRY_RANGE,
296a580c76dSNikolay Aleksandrov 	BRIDGE_VLANDB_ENTRY_STATE,
297fa388f29SNikolay Aleksandrov 	BRIDGE_VLANDB_ENTRY_TUNNEL_INFO,
29856d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_ENTRY_STATS,
2998dcea187SNikolay Aleksandrov 	__BRIDGE_VLANDB_ENTRY_MAX,
3008dcea187SNikolay Aleksandrov };
3018dcea187SNikolay Aleksandrov #define BRIDGE_VLANDB_ENTRY_MAX (__BRIDGE_VLANDB_ENTRY_MAX - 1)
3028dcea187SNikolay Aleksandrov 
30356d09976SNikolay Aleksandrov /* [BRIDGE_VLANDB_ENTRY] = {
304fa388f29SNikolay Aleksandrov  *     [BRIDGE_VLANDB_ENTRY_TUNNEL_INFO] = {
305fa388f29SNikolay Aleksandrov  *         [BRIDGE_VLANDB_TINFO_ID]
306fa388f29SNikolay Aleksandrov  *         ...
307fa388f29SNikolay Aleksandrov  *     }
308fa388f29SNikolay Aleksandrov  * }
309fa388f29SNikolay Aleksandrov  */
310fa388f29SNikolay Aleksandrov enum {
311fa388f29SNikolay Aleksandrov 	BRIDGE_VLANDB_TINFO_UNSPEC,
312fa388f29SNikolay Aleksandrov 	BRIDGE_VLANDB_TINFO_ID,
313c443758bSNikolay Aleksandrov 	BRIDGE_VLANDB_TINFO_CMD,
314fa388f29SNikolay Aleksandrov 	__BRIDGE_VLANDB_TINFO_MAX,
315fa388f29SNikolay Aleksandrov };
316fa388f29SNikolay Aleksandrov #define BRIDGE_VLANDB_TINFO_MAX (__BRIDGE_VLANDB_TINFO_MAX - 1)
317fa388f29SNikolay Aleksandrov 
318fa388f29SNikolay Aleksandrov /* [BRIDGE_VLANDB_ENTRY] = {
31956d09976SNikolay Aleksandrov  *     [BRIDGE_VLANDB_ENTRY_STATS] = {
32056d09976SNikolay Aleksandrov  *         [BRIDGE_VLANDB_STATS_RX_BYTES]
32156d09976SNikolay Aleksandrov  *         ...
32256d09976SNikolay Aleksandrov  *     }
32356d09976SNikolay Aleksandrov  *     ...
32456d09976SNikolay Aleksandrov  * }
32556d09976SNikolay Aleksandrov  */
32656d09976SNikolay Aleksandrov enum {
32756d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_STATS_UNSPEC,
32856d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_STATS_RX_BYTES,
32956d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_STATS_RX_PACKETS,
33056d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_STATS_TX_BYTES,
33156d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_STATS_TX_PACKETS,
33256d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_STATS_PAD,
33356d09976SNikolay Aleksandrov 	__BRIDGE_VLANDB_STATS_MAX,
33456d09976SNikolay Aleksandrov };
33556d09976SNikolay Aleksandrov #define BRIDGE_VLANDB_STATS_MAX (__BRIDGE_VLANDB_STATS_MAX - 1)
33656d09976SNikolay Aleksandrov 
337ee07c6e7SCong Wang /* Bridge multicast database attributes
338ee07c6e7SCong Wang  * [MDBA_MDB] = {
339ee07c6e7SCong Wang  *     [MDBA_MDB_ENTRY] = {
34021257156SNikolay Aleksandrov  *         [MDBA_MDB_ENTRY_INFO] {
34121257156SNikolay Aleksandrov  *		struct br_mdb_entry
34221257156SNikolay Aleksandrov  *		[MDBA_MDB_EATTR attributes]
34321257156SNikolay Aleksandrov  *         }
344ee07c6e7SCong Wang  *     }
345ee07c6e7SCong Wang  * }
346ee07c6e7SCong Wang  * [MDBA_ROUTER] = {
34759f78f9fSNikolay Aleksandrov  *    [MDBA_ROUTER_PORT] = {
34859f78f9fSNikolay Aleksandrov  *        u32 ifindex
34959f78f9fSNikolay Aleksandrov  *        [MDBA_ROUTER_PATTR attributes]
35059f78f9fSNikolay Aleksandrov  *    }
351ee07c6e7SCong Wang  * }
352ee07c6e7SCong Wang  */
353ee07c6e7SCong Wang enum {
354ee07c6e7SCong Wang 	MDBA_UNSPEC,
355ee07c6e7SCong Wang 	MDBA_MDB,
356ee07c6e7SCong Wang 	MDBA_ROUTER,
357ee07c6e7SCong Wang 	__MDBA_MAX,
358ee07c6e7SCong Wang };
359ee07c6e7SCong Wang #define MDBA_MAX (__MDBA_MAX - 1)
360ee07c6e7SCong Wang 
361ee07c6e7SCong Wang enum {
362ee07c6e7SCong Wang 	MDBA_MDB_UNSPEC,
363ee07c6e7SCong Wang 	MDBA_MDB_ENTRY,
364ee07c6e7SCong Wang 	__MDBA_MDB_MAX,
365ee07c6e7SCong Wang };
366ee07c6e7SCong Wang #define MDBA_MDB_MAX (__MDBA_MDB_MAX - 1)
367ee07c6e7SCong Wang 
368ee07c6e7SCong Wang enum {
369ee07c6e7SCong Wang 	MDBA_MDB_ENTRY_UNSPEC,
370ee07c6e7SCong Wang 	MDBA_MDB_ENTRY_INFO,
371ee07c6e7SCong Wang 	__MDBA_MDB_ENTRY_MAX,
372ee07c6e7SCong Wang };
373ee07c6e7SCong Wang #define MDBA_MDB_ENTRY_MAX (__MDBA_MDB_ENTRY_MAX - 1)
374ee07c6e7SCong Wang 
37521257156SNikolay Aleksandrov /* per mdb entry additional attributes */
37621257156SNikolay Aleksandrov enum {
37721257156SNikolay Aleksandrov 	MDBA_MDB_EATTR_UNSPEC,
37821257156SNikolay Aleksandrov 	MDBA_MDB_EATTR_TIMER,
37921257156SNikolay Aleksandrov 	__MDBA_MDB_EATTR_MAX
38021257156SNikolay Aleksandrov };
38121257156SNikolay Aleksandrov #define MDBA_MDB_EATTR_MAX (__MDBA_MDB_EATTR_MAX - 1)
38221257156SNikolay Aleksandrov 
3837f0aec7aSNikolay Aleksandrov /* multicast router types */
3847f0aec7aSNikolay Aleksandrov enum {
3857f0aec7aSNikolay Aleksandrov 	MDB_RTR_TYPE_DISABLED,
3867f0aec7aSNikolay Aleksandrov 	MDB_RTR_TYPE_TEMP_QUERY,
3877f0aec7aSNikolay Aleksandrov 	MDB_RTR_TYPE_PERM,
388a55d8246SNikolay Aleksandrov 	MDB_RTR_TYPE_TEMP
3897f0aec7aSNikolay Aleksandrov };
3907f0aec7aSNikolay Aleksandrov 
391ee07c6e7SCong Wang enum {
392ee07c6e7SCong Wang 	MDBA_ROUTER_UNSPEC,
393ee07c6e7SCong Wang 	MDBA_ROUTER_PORT,
394ee07c6e7SCong Wang 	__MDBA_ROUTER_MAX,
395ee07c6e7SCong Wang };
396ee07c6e7SCong Wang #define MDBA_ROUTER_MAX (__MDBA_ROUTER_MAX - 1)
397ee07c6e7SCong Wang 
39859f78f9fSNikolay Aleksandrov /* router port attributes */
39959f78f9fSNikolay Aleksandrov enum {
40059f78f9fSNikolay Aleksandrov 	MDBA_ROUTER_PATTR_UNSPEC,
40159f78f9fSNikolay Aleksandrov 	MDBA_ROUTER_PATTR_TIMER,
40259f78f9fSNikolay Aleksandrov 	MDBA_ROUTER_PATTR_TYPE,
40359f78f9fSNikolay Aleksandrov 	__MDBA_ROUTER_PATTR_MAX
40459f78f9fSNikolay Aleksandrov };
40559f78f9fSNikolay Aleksandrov #define MDBA_ROUTER_PATTR_MAX (__MDBA_ROUTER_PATTR_MAX - 1)
40659f78f9fSNikolay Aleksandrov 
407ee07c6e7SCong Wang struct br_port_msg {
408cfd56754SCong Wang 	__u8  family;
409ee07c6e7SCong Wang 	__u32 ifindex;
410ee07c6e7SCong Wang };
411ee07c6e7SCong Wang 
412ee07c6e7SCong Wang struct br_mdb_entry {
413ee07c6e7SCong Wang 	__u32 ifindex;
414ccb1c31aSAmerigo Wang #define MDB_TEMPORARY 0
415ccb1c31aSAmerigo Wang #define MDB_PERMANENT 1
416ccb1c31aSAmerigo Wang 	__u8 state;
417157ede67SElad Raz #define MDB_FLAGS_OFFLOAD	(1 << 0)
4183247b272SNikolay Aleksandrov #define MDB_FLAGS_FAST_LEAVE	(1 << 1)
419157ede67SElad Raz 	__u8 flags;
42074fe61f1SNikolay Aleksandrov 	__u16 vid;
421ee07c6e7SCong Wang 	struct {
422ee07c6e7SCong Wang 		union {
423ee07c6e7SCong Wang 			__be32	ip4;
424ee07c6e7SCong Wang 			struct in6_addr ip6;
425ee07c6e7SCong Wang 		} u;
426ee07c6e7SCong Wang 		__be16		proto;
427ee07c6e7SCong Wang 	} addr;
428ee07c6e7SCong Wang };
429ee07c6e7SCong Wang 
430cfd56754SCong Wang enum {
431cfd56754SCong Wang 	MDBA_SET_ENTRY_UNSPEC,
432cfd56754SCong Wang 	MDBA_SET_ENTRY,
433cfd56754SCong Wang 	__MDBA_SET_ENTRY_MAX,
434cfd56754SCong Wang };
435cfd56754SCong Wang #define MDBA_SET_ENTRY_MAX (__MDBA_SET_ENTRY_MAX - 1)
436cfd56754SCong Wang 
437a60c0903SNikolay Aleksandrov /* Embedded inside LINK_XSTATS_TYPE_BRIDGE */
438a60c0903SNikolay Aleksandrov enum {
439a60c0903SNikolay Aleksandrov 	BRIDGE_XSTATS_UNSPEC,
440a60c0903SNikolay Aleksandrov 	BRIDGE_XSTATS_VLAN,
4411080ab95SNikolay Aleksandrov 	BRIDGE_XSTATS_MCAST,
4421080ab95SNikolay Aleksandrov 	BRIDGE_XSTATS_PAD,
443de179966SVivien Didelot 	BRIDGE_XSTATS_STP,
444a60c0903SNikolay Aleksandrov 	__BRIDGE_XSTATS_MAX
445a60c0903SNikolay Aleksandrov };
446a60c0903SNikolay Aleksandrov #define BRIDGE_XSTATS_MAX (__BRIDGE_XSTATS_MAX - 1)
447a60c0903SNikolay Aleksandrov 
4481080ab95SNikolay Aleksandrov enum {
4491080ab95SNikolay Aleksandrov 	BR_MCAST_DIR_RX,
4501080ab95SNikolay Aleksandrov 	BR_MCAST_DIR_TX,
4511080ab95SNikolay Aleksandrov 	BR_MCAST_DIR_SIZE
4521080ab95SNikolay Aleksandrov };
4531080ab95SNikolay Aleksandrov 
4541080ab95SNikolay Aleksandrov /* IGMP/MLD statistics */
4551080ab95SNikolay Aleksandrov struct br_mcast_stats {
456a65056ecSNikolay Aleksandrov 	__u64 igmp_v1queries[BR_MCAST_DIR_SIZE];
457a65056ecSNikolay Aleksandrov 	__u64 igmp_v2queries[BR_MCAST_DIR_SIZE];
458a65056ecSNikolay Aleksandrov 	__u64 igmp_v3queries[BR_MCAST_DIR_SIZE];
4591080ab95SNikolay Aleksandrov 	__u64 igmp_leaves[BR_MCAST_DIR_SIZE];
4601080ab95SNikolay Aleksandrov 	__u64 igmp_v1reports[BR_MCAST_DIR_SIZE];
4611080ab95SNikolay Aleksandrov 	__u64 igmp_v2reports[BR_MCAST_DIR_SIZE];
4621080ab95SNikolay Aleksandrov 	__u64 igmp_v3reports[BR_MCAST_DIR_SIZE];
4631080ab95SNikolay Aleksandrov 	__u64 igmp_parse_errors;
4641080ab95SNikolay Aleksandrov 
465a65056ecSNikolay Aleksandrov 	__u64 mld_v1queries[BR_MCAST_DIR_SIZE];
466a65056ecSNikolay Aleksandrov 	__u64 mld_v2queries[BR_MCAST_DIR_SIZE];
4671080ab95SNikolay Aleksandrov 	__u64 mld_leaves[BR_MCAST_DIR_SIZE];
4681080ab95SNikolay Aleksandrov 	__u64 mld_v1reports[BR_MCAST_DIR_SIZE];
4691080ab95SNikolay Aleksandrov 	__u64 mld_v2reports[BR_MCAST_DIR_SIZE];
4701080ab95SNikolay Aleksandrov 	__u64 mld_parse_errors;
4711080ab95SNikolay Aleksandrov 
4721080ab95SNikolay Aleksandrov 	__u64 mcast_bytes[BR_MCAST_DIR_SIZE];
4731080ab95SNikolay Aleksandrov 	__u64 mcast_packets[BR_MCAST_DIR_SIZE];
4741080ab95SNikolay Aleksandrov };
475a428afe8SNikolay Aleksandrov 
476a428afe8SNikolay Aleksandrov /* bridge boolean options
47770e4272bSNikolay Aleksandrov  * BR_BOOLOPT_NO_LL_LEARN - disable learning from link-local packets
47870e4272bSNikolay Aleksandrov  *
479a428afe8SNikolay Aleksandrov  * IMPORTANT: if adding a new option do not forget to handle
480a428afe8SNikolay Aleksandrov  *            it in br_boolopt_toggle/get and bridge sysfs
481a428afe8SNikolay Aleksandrov  */
482a428afe8SNikolay Aleksandrov enum br_boolopt_id {
48370e4272bSNikolay Aleksandrov 	BR_BOOLOPT_NO_LL_LEARN,
484a428afe8SNikolay Aleksandrov 	BR_BOOLOPT_MAX
485a428afe8SNikolay Aleksandrov };
486a428afe8SNikolay Aleksandrov 
487a428afe8SNikolay Aleksandrov /* struct br_boolopt_multi - change multiple bridge boolean options
488a428afe8SNikolay Aleksandrov  *
489a428afe8SNikolay Aleksandrov  * @optval: new option values (bit per option)
490a428afe8SNikolay Aleksandrov  * @optmask: options to change (bit per option)
491a428afe8SNikolay Aleksandrov  */
492a428afe8SNikolay Aleksandrov struct br_boolopt_multi {
493a428afe8SNikolay Aleksandrov 	__u32 optval;
494a428afe8SNikolay Aleksandrov 	__u32 optmask;
495a428afe8SNikolay Aleksandrov };
496607ca46eSDavid Howells #endif /* _UAPI_LINUX_IF_BRIDGE_H */
497