xref: /linux/include/uapi/linux/if_bridge.h (revision fe33c0fbed75dd464747c0faaedf94c7d8eb4101)
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,
1242be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM,
125122c2948STobias Waldekranz 	IFLA_BRIDGE_MST,
1262469ffd7SJohn Fastabend 	__IFLA_BRIDGE_MAX,
1272469ffd7SJohn Fastabend };
1282469ffd7SJohn Fastabend #define IFLA_BRIDGE_MAX (__IFLA_BRIDGE_MAX - 1)
129ee07c6e7SCong Wang 
130407af329SVlad Yasevich #define BRIDGE_VLAN_INFO_MASTER	(1<<0)	/* Operate on Bridge device as well */
131552406c4SVlad Yasevich #define BRIDGE_VLAN_INFO_PVID	(1<<1)	/* VLAN is PVID, ingress untagged */
13235e03f3aSVlad Yasevich #define BRIDGE_VLAN_INFO_UNTAGGED	(1<<2)	/* VLAN egresses untagged */
133bdced7efSRoopa Prabhu #define BRIDGE_VLAN_INFO_RANGE_BEGIN	(1<<3) /* VLAN is start of vlan range */
134bdced7efSRoopa Prabhu #define BRIDGE_VLAN_INFO_RANGE_END	(1<<4) /* VLAN is end of vlan range */
1352594e906SNikolay Aleksandrov #define BRIDGE_VLAN_INFO_BRENTRY	(1<<5) /* Global bridge VLAN entry */
136a5d29ae2SNikolay Aleksandrov #define BRIDGE_VLAN_INFO_ONLY_OPTS	(1<<6) /* Skip create/delete/flags */
137407af329SVlad Yasevich 
138407af329SVlad Yasevich struct bridge_vlan_info {
1399f89ec82SCong Wang 	__u16 flags;
1409f89ec82SCong Wang 	__u16 vid;
141407af329SVlad Yasevich };
142407af329SVlad Yasevich 
143b3c7ef0aSRoopa Prabhu enum {
144b3c7ef0aSRoopa Prabhu 	IFLA_BRIDGE_VLAN_TUNNEL_UNSPEC,
145b3c7ef0aSRoopa Prabhu 	IFLA_BRIDGE_VLAN_TUNNEL_ID,
146b3c7ef0aSRoopa Prabhu 	IFLA_BRIDGE_VLAN_TUNNEL_VID,
147b3c7ef0aSRoopa Prabhu 	IFLA_BRIDGE_VLAN_TUNNEL_FLAGS,
148b3c7ef0aSRoopa Prabhu 	__IFLA_BRIDGE_VLAN_TUNNEL_MAX,
149b3c7ef0aSRoopa Prabhu };
150b3c7ef0aSRoopa Prabhu 
151b3c7ef0aSRoopa Prabhu #define IFLA_BRIDGE_VLAN_TUNNEL_MAX (__IFLA_BRIDGE_VLAN_TUNNEL_MAX - 1)
152b3c7ef0aSRoopa Prabhu 
153a60c0903SNikolay Aleksandrov struct bridge_vlan_xstats {
154a60c0903SNikolay Aleksandrov 	__u64 rx_bytes;
155a60c0903SNikolay Aleksandrov 	__u64 rx_packets;
156a60c0903SNikolay Aleksandrov 	__u64 tx_bytes;
157a60c0903SNikolay Aleksandrov 	__u64 tx_packets;
158a60c0903SNikolay Aleksandrov 	__u16 vid;
15961ba1a2dSNikolay Aleksandrov 	__u16 flags;
160a60c0903SNikolay Aleksandrov 	__u32 pad2;
161a60c0903SNikolay Aleksandrov };
162a60c0903SNikolay Aleksandrov 
1634714d137SHoratiu Vultur enum {
1644714d137SHoratiu Vultur 	IFLA_BRIDGE_MRP_UNSPEC,
1654714d137SHoratiu Vultur 	IFLA_BRIDGE_MRP_INSTANCE,
1664714d137SHoratiu Vultur 	IFLA_BRIDGE_MRP_PORT_STATE,
1674714d137SHoratiu Vultur 	IFLA_BRIDGE_MRP_PORT_ROLE,
1684714d137SHoratiu Vultur 	IFLA_BRIDGE_MRP_RING_STATE,
1694714d137SHoratiu Vultur 	IFLA_BRIDGE_MRP_RING_ROLE,
1704714d137SHoratiu Vultur 	IFLA_BRIDGE_MRP_START_TEST,
171e4266b99SHoratiu Vultur 	IFLA_BRIDGE_MRP_INFO,
17228017583SHoratiu Vultur 	IFLA_BRIDGE_MRP_IN_ROLE,
17328017583SHoratiu Vultur 	IFLA_BRIDGE_MRP_IN_STATE,
17428017583SHoratiu Vultur 	IFLA_BRIDGE_MRP_START_IN_TEST,
1754714d137SHoratiu Vultur 	__IFLA_BRIDGE_MRP_MAX,
1764714d137SHoratiu Vultur };
1774714d137SHoratiu Vultur 
17820f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_MAX (__IFLA_BRIDGE_MRP_MAX - 1)
17920f6a05eSHoratiu Vultur 
18020f6a05eSHoratiu Vultur enum {
18120f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_INSTANCE_UNSPEC,
18220f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_INSTANCE_RING_ID,
18320f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_INSTANCE_P_IFINDEX,
18420f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_INSTANCE_S_IFINDEX,
1854b3a61b0SHoratiu Vultur 	IFLA_BRIDGE_MRP_INSTANCE_PRIO,
18620f6a05eSHoratiu Vultur 	__IFLA_BRIDGE_MRP_INSTANCE_MAX,
18720f6a05eSHoratiu Vultur };
18820f6a05eSHoratiu Vultur 
18920f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_INSTANCE_MAX (__IFLA_BRIDGE_MRP_INSTANCE_MAX - 1)
19020f6a05eSHoratiu Vultur 
19120f6a05eSHoratiu Vultur enum {
19220f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_PORT_STATE_UNSPEC,
19320f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_PORT_STATE_STATE,
19420f6a05eSHoratiu Vultur 	__IFLA_BRIDGE_MRP_PORT_STATE_MAX,
19520f6a05eSHoratiu Vultur };
19620f6a05eSHoratiu Vultur 
19720f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_PORT_STATE_MAX (__IFLA_BRIDGE_MRP_PORT_STATE_MAX - 1)
19820f6a05eSHoratiu Vultur 
19920f6a05eSHoratiu Vultur enum {
20020f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_PORT_ROLE_UNSPEC,
20120f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_PORT_ROLE_ROLE,
20220f6a05eSHoratiu Vultur 	__IFLA_BRIDGE_MRP_PORT_ROLE_MAX,
20320f6a05eSHoratiu Vultur };
20420f6a05eSHoratiu Vultur 
20520f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_PORT_ROLE_MAX (__IFLA_BRIDGE_MRP_PORT_ROLE_MAX - 1)
20620f6a05eSHoratiu Vultur 
20720f6a05eSHoratiu Vultur enum {
20820f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_RING_STATE_UNSPEC,
20920f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_RING_STATE_RING_ID,
21020f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_RING_STATE_STATE,
21120f6a05eSHoratiu Vultur 	__IFLA_BRIDGE_MRP_RING_STATE_MAX,
21220f6a05eSHoratiu Vultur };
21320f6a05eSHoratiu Vultur 
21420f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_RING_STATE_MAX (__IFLA_BRIDGE_MRP_RING_STATE_MAX - 1)
21520f6a05eSHoratiu Vultur 
21620f6a05eSHoratiu Vultur enum {
21720f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_RING_ROLE_UNSPEC,
21820f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_RING_ROLE_RING_ID,
21920f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_RING_ROLE_ROLE,
22020f6a05eSHoratiu Vultur 	__IFLA_BRIDGE_MRP_RING_ROLE_MAX,
22120f6a05eSHoratiu Vultur };
22220f6a05eSHoratiu Vultur 
22320f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_RING_ROLE_MAX (__IFLA_BRIDGE_MRP_RING_ROLE_MAX - 1)
22420f6a05eSHoratiu Vultur 
22520f6a05eSHoratiu Vultur enum {
22620f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_START_TEST_UNSPEC,
22720f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_START_TEST_RING_ID,
22820f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_START_TEST_INTERVAL,
22920f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_START_TEST_MAX_MISS,
23020f6a05eSHoratiu Vultur 	IFLA_BRIDGE_MRP_START_TEST_PERIOD,
231c6676e7dSHoratiu Vultur 	IFLA_BRIDGE_MRP_START_TEST_MONITOR,
23220f6a05eSHoratiu Vultur 	__IFLA_BRIDGE_MRP_START_TEST_MAX,
23320f6a05eSHoratiu Vultur };
23420f6a05eSHoratiu Vultur 
23520f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_START_TEST_MAX (__IFLA_BRIDGE_MRP_START_TEST_MAX - 1)
23620f6a05eSHoratiu Vultur 
237e4266b99SHoratiu Vultur enum {
238e4266b99SHoratiu Vultur 	IFLA_BRIDGE_MRP_INFO_UNSPEC,
239e4266b99SHoratiu Vultur 	IFLA_BRIDGE_MRP_INFO_RING_ID,
240e4266b99SHoratiu Vultur 	IFLA_BRIDGE_MRP_INFO_P_IFINDEX,
241e4266b99SHoratiu Vultur 	IFLA_BRIDGE_MRP_INFO_S_IFINDEX,
242e4266b99SHoratiu Vultur 	IFLA_BRIDGE_MRP_INFO_PRIO,
243e4266b99SHoratiu Vultur 	IFLA_BRIDGE_MRP_INFO_RING_STATE,
244e4266b99SHoratiu Vultur 	IFLA_BRIDGE_MRP_INFO_RING_ROLE,
245e4266b99SHoratiu Vultur 	IFLA_BRIDGE_MRP_INFO_TEST_INTERVAL,
246e4266b99SHoratiu Vultur 	IFLA_BRIDGE_MRP_INFO_TEST_MAX_MISS,
247e4266b99SHoratiu Vultur 	IFLA_BRIDGE_MRP_INFO_TEST_MONITOR,
248559139cbSHoratiu Vultur 	IFLA_BRIDGE_MRP_INFO_I_IFINDEX,
249559139cbSHoratiu Vultur 	IFLA_BRIDGE_MRP_INFO_IN_STATE,
250559139cbSHoratiu Vultur 	IFLA_BRIDGE_MRP_INFO_IN_ROLE,
251559139cbSHoratiu Vultur 	IFLA_BRIDGE_MRP_INFO_IN_TEST_INTERVAL,
252559139cbSHoratiu Vultur 	IFLA_BRIDGE_MRP_INFO_IN_TEST_MAX_MISS,
253e4266b99SHoratiu Vultur 	__IFLA_BRIDGE_MRP_INFO_MAX,
254e4266b99SHoratiu Vultur };
255e4266b99SHoratiu Vultur 
256e4266b99SHoratiu Vultur #define IFLA_BRIDGE_MRP_INFO_MAX (__IFLA_BRIDGE_MRP_INFO_MAX - 1)
257e4266b99SHoratiu Vultur 
25828017583SHoratiu Vultur enum {
25928017583SHoratiu Vultur 	IFLA_BRIDGE_MRP_IN_STATE_UNSPEC,
26028017583SHoratiu Vultur 	IFLA_BRIDGE_MRP_IN_STATE_IN_ID,
26128017583SHoratiu Vultur 	IFLA_BRIDGE_MRP_IN_STATE_STATE,
26228017583SHoratiu Vultur 	__IFLA_BRIDGE_MRP_IN_STATE_MAX,
26328017583SHoratiu Vultur };
26428017583SHoratiu Vultur 
26528017583SHoratiu Vultur #define IFLA_BRIDGE_MRP_IN_STATE_MAX (__IFLA_BRIDGE_MRP_IN_STATE_MAX - 1)
26628017583SHoratiu Vultur 
26728017583SHoratiu Vultur enum {
26828017583SHoratiu Vultur 	IFLA_BRIDGE_MRP_IN_ROLE_UNSPEC,
26928017583SHoratiu Vultur 	IFLA_BRIDGE_MRP_IN_ROLE_RING_ID,
27028017583SHoratiu Vultur 	IFLA_BRIDGE_MRP_IN_ROLE_IN_ID,
27128017583SHoratiu Vultur 	IFLA_BRIDGE_MRP_IN_ROLE_ROLE,
27228017583SHoratiu Vultur 	IFLA_BRIDGE_MRP_IN_ROLE_I_IFINDEX,
27328017583SHoratiu Vultur 	__IFLA_BRIDGE_MRP_IN_ROLE_MAX,
27428017583SHoratiu Vultur };
27528017583SHoratiu Vultur 
27628017583SHoratiu Vultur #define IFLA_BRIDGE_MRP_IN_ROLE_MAX (__IFLA_BRIDGE_MRP_IN_ROLE_MAX - 1)
27728017583SHoratiu Vultur 
27828017583SHoratiu Vultur enum {
27928017583SHoratiu Vultur 	IFLA_BRIDGE_MRP_START_IN_TEST_UNSPEC,
28028017583SHoratiu Vultur 	IFLA_BRIDGE_MRP_START_IN_TEST_IN_ID,
28128017583SHoratiu Vultur 	IFLA_BRIDGE_MRP_START_IN_TEST_INTERVAL,
28228017583SHoratiu Vultur 	IFLA_BRIDGE_MRP_START_IN_TEST_MAX_MISS,
28328017583SHoratiu Vultur 	IFLA_BRIDGE_MRP_START_IN_TEST_PERIOD,
28428017583SHoratiu Vultur 	__IFLA_BRIDGE_MRP_START_IN_TEST_MAX,
28528017583SHoratiu Vultur };
28628017583SHoratiu Vultur 
28728017583SHoratiu Vultur #define IFLA_BRIDGE_MRP_START_IN_TEST_MAX (__IFLA_BRIDGE_MRP_START_IN_TEST_MAX - 1)
28828017583SHoratiu Vultur 
2894714d137SHoratiu Vultur struct br_mrp_instance {
2904714d137SHoratiu Vultur 	__u32 ring_id;
2914714d137SHoratiu Vultur 	__u32 p_ifindex;
2924714d137SHoratiu Vultur 	__u32 s_ifindex;
2934b3a61b0SHoratiu Vultur 	__u16 prio;
2944714d137SHoratiu Vultur };
2954714d137SHoratiu Vultur 
2964714d137SHoratiu Vultur struct br_mrp_ring_state {
2974714d137SHoratiu Vultur 	__u32 ring_id;
2984714d137SHoratiu Vultur 	__u32 ring_state;
2994714d137SHoratiu Vultur };
3004714d137SHoratiu Vultur 
3014714d137SHoratiu Vultur struct br_mrp_ring_role {
3024714d137SHoratiu Vultur 	__u32 ring_id;
3034714d137SHoratiu Vultur 	__u32 ring_role;
3044714d137SHoratiu Vultur };
3054714d137SHoratiu Vultur 
3064714d137SHoratiu Vultur struct br_mrp_start_test {
3074714d137SHoratiu Vultur 	__u32 ring_id;
3084714d137SHoratiu Vultur 	__u32 interval;
3094714d137SHoratiu Vultur 	__u32 max_miss;
3104714d137SHoratiu Vultur 	__u32 period;
311c6676e7dSHoratiu Vultur 	__u32 monitor;
3124714d137SHoratiu Vultur };
3134714d137SHoratiu Vultur 
31428017583SHoratiu Vultur struct br_mrp_in_state {
31528017583SHoratiu Vultur 	__u32 in_state;
31628017583SHoratiu Vultur 	__u16 in_id;
31728017583SHoratiu Vultur };
31828017583SHoratiu Vultur 
31928017583SHoratiu Vultur struct br_mrp_in_role {
32028017583SHoratiu Vultur 	__u32 ring_id;
32128017583SHoratiu Vultur 	__u32 in_role;
32228017583SHoratiu Vultur 	__u32 i_ifindex;
32328017583SHoratiu Vultur 	__u16 in_id;
32428017583SHoratiu Vultur };
32528017583SHoratiu Vultur 
32628017583SHoratiu Vultur struct br_mrp_start_in_test {
32728017583SHoratiu Vultur 	__u32 interval;
32828017583SHoratiu Vultur 	__u32 max_miss;
32928017583SHoratiu Vultur 	__u32 period;
33028017583SHoratiu Vultur 	__u16 in_id;
33128017583SHoratiu Vultur };
33228017583SHoratiu Vultur 
3332be665c3SHenrik Bjoernlund enum {
3342be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_UNSPEC,
3352be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_CREATE,
3362be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_DELETE,
3372be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_CONFIG,
3382be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CONFIG,
3392be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_MEP_ADD,
3402be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_MEP_REMOVE,
3412be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_RDI,
3422be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CCM_TX,
3435e312fc0SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_CREATE_INFO,
3445e312fc0SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_CONFIG_INFO,
3455e312fc0SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CONFIG_INFO,
3465e312fc0SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_RDI_INFO,
3475e312fc0SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CCM_TX_INFO,
3485e312fc0SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_MEP_INFO,
349e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_STATUS_INFO,
350e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_STATUS_INFO,
3512be665c3SHenrik Bjoernlund 	__IFLA_BRIDGE_CFM_MAX,
3522be665c3SHenrik Bjoernlund };
3532be665c3SHenrik Bjoernlund 
3542be665c3SHenrik Bjoernlund #define IFLA_BRIDGE_CFM_MAX (__IFLA_BRIDGE_CFM_MAX - 1)
3552be665c3SHenrik Bjoernlund 
3562be665c3SHenrik Bjoernlund enum {
3572be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_CREATE_UNSPEC,
3582be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_CREATE_INSTANCE,
3592be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_CREATE_DOMAIN,
3602be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_CREATE_DIRECTION,
3612be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_CREATE_IFINDEX,
3622be665c3SHenrik Bjoernlund 	__IFLA_BRIDGE_CFM_MEP_CREATE_MAX,
3632be665c3SHenrik Bjoernlund };
3642be665c3SHenrik Bjoernlund 
3652be665c3SHenrik Bjoernlund #define IFLA_BRIDGE_CFM_MEP_CREATE_MAX (__IFLA_BRIDGE_CFM_MEP_CREATE_MAX - 1)
3662be665c3SHenrik Bjoernlund 
3672be665c3SHenrik Bjoernlund enum {
3682be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_DELETE_UNSPEC,
3692be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_DELETE_INSTANCE,
3702be665c3SHenrik Bjoernlund 	__IFLA_BRIDGE_CFM_MEP_DELETE_MAX,
3712be665c3SHenrik Bjoernlund };
3722be665c3SHenrik Bjoernlund 
3732be665c3SHenrik Bjoernlund #define IFLA_BRIDGE_CFM_MEP_DELETE_MAX (__IFLA_BRIDGE_CFM_MEP_DELETE_MAX - 1)
3742be665c3SHenrik Bjoernlund 
3752be665c3SHenrik Bjoernlund enum {
3762be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_CONFIG_UNSPEC,
3772be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_CONFIG_INSTANCE,
3782be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_CONFIG_UNICAST_MAC,
3792be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_CONFIG_MDLEVEL,
3802be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_CONFIG_MEPID,
3812be665c3SHenrik Bjoernlund 	__IFLA_BRIDGE_CFM_MEP_CONFIG_MAX,
3822be665c3SHenrik Bjoernlund };
3832be665c3SHenrik Bjoernlund 
3842be665c3SHenrik Bjoernlund #define IFLA_BRIDGE_CFM_MEP_CONFIG_MAX (__IFLA_BRIDGE_CFM_MEP_CONFIG_MAX - 1)
3852be665c3SHenrik Bjoernlund 
3862be665c3SHenrik Bjoernlund enum {
3872be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CONFIG_UNSPEC,
3882be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CONFIG_INSTANCE,
3892be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CONFIG_ENABLE,
3902be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CONFIG_EXP_INTERVAL,
3912be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CONFIG_EXP_MAID,
3922be665c3SHenrik Bjoernlund 	__IFLA_BRIDGE_CFM_CC_CONFIG_MAX,
3932be665c3SHenrik Bjoernlund };
3942be665c3SHenrik Bjoernlund 
3952be665c3SHenrik Bjoernlund #define IFLA_BRIDGE_CFM_CC_CONFIG_MAX (__IFLA_BRIDGE_CFM_CC_CONFIG_MAX - 1)
3962be665c3SHenrik Bjoernlund 
3972be665c3SHenrik Bjoernlund enum {
3982be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_MEP_UNSPEC,
3992be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_MEP_INSTANCE,
4002be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_MEPID,
4012be665c3SHenrik Bjoernlund 	__IFLA_BRIDGE_CFM_CC_PEER_MEP_MAX,
4022be665c3SHenrik Bjoernlund };
4032be665c3SHenrik Bjoernlund 
4042be665c3SHenrik Bjoernlund #define IFLA_BRIDGE_CFM_CC_PEER_MEP_MAX (__IFLA_BRIDGE_CFM_CC_PEER_MEP_MAX - 1)
4052be665c3SHenrik Bjoernlund 
4062be665c3SHenrik Bjoernlund enum {
4072be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_RDI_UNSPEC,
4082be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_RDI_INSTANCE,
4092be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_RDI_RDI,
4102be665c3SHenrik Bjoernlund 	__IFLA_BRIDGE_CFM_CC_RDI_MAX,
4112be665c3SHenrik Bjoernlund };
4122be665c3SHenrik Bjoernlund 
4132be665c3SHenrik Bjoernlund #define IFLA_BRIDGE_CFM_CC_RDI_MAX (__IFLA_BRIDGE_CFM_CC_RDI_MAX - 1)
4142be665c3SHenrik Bjoernlund 
4152be665c3SHenrik Bjoernlund enum {
4162be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CCM_TX_UNSPEC,
4172be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CCM_TX_INSTANCE,
4182be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CCM_TX_DMAC,
4192be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CCM_TX_SEQ_NO_UPDATE,
4202be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CCM_TX_PERIOD,
4212be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CCM_TX_IF_TLV,
4222be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CCM_TX_IF_TLV_VALUE,
4232be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CCM_TX_PORT_TLV,
4242be665c3SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_CCM_TX_PORT_TLV_VALUE,
4252be665c3SHenrik Bjoernlund 	__IFLA_BRIDGE_CFM_CC_CCM_TX_MAX,
4262be665c3SHenrik Bjoernlund };
4272be665c3SHenrik Bjoernlund 
4282be665c3SHenrik Bjoernlund #define IFLA_BRIDGE_CFM_CC_CCM_TX_MAX (__IFLA_BRIDGE_CFM_CC_CCM_TX_MAX - 1)
4292be665c3SHenrik Bjoernlund 
430e77824d8SHenrik Bjoernlund enum {
431e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_STATUS_UNSPEC,
432e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_STATUS_INSTANCE,
433e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_STATUS_OPCODE_UNEXP_SEEN,
434e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_STATUS_VERSION_UNEXP_SEEN,
435e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_MEP_STATUS_RX_LEVEL_LOW_SEEN,
436e77824d8SHenrik Bjoernlund 	__IFLA_BRIDGE_CFM_MEP_STATUS_MAX,
437e77824d8SHenrik Bjoernlund };
438e77824d8SHenrik Bjoernlund 
439e77824d8SHenrik Bjoernlund #define IFLA_BRIDGE_CFM_MEP_STATUS_MAX (__IFLA_BRIDGE_CFM_MEP_STATUS_MAX - 1)
440e77824d8SHenrik Bjoernlund 
441e77824d8SHenrik Bjoernlund enum {
442e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_STATUS_UNSPEC,
443e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_STATUS_INSTANCE,
444e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_STATUS_PEER_MEPID,
445e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_STATUS_CCM_DEFECT,
446e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_STATUS_RDI,
447e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_STATUS_PORT_TLV_VALUE,
448e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_STATUS_IF_TLV_VALUE,
449e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_STATUS_SEEN,
450e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_STATUS_TLV_SEEN,
451e77824d8SHenrik Bjoernlund 	IFLA_BRIDGE_CFM_CC_PEER_STATUS_SEQ_UNEXP_SEEN,
452e77824d8SHenrik Bjoernlund 	__IFLA_BRIDGE_CFM_CC_PEER_STATUS_MAX,
453e77824d8SHenrik Bjoernlund };
454e77824d8SHenrik Bjoernlund 
455e77824d8SHenrik Bjoernlund #define IFLA_BRIDGE_CFM_CC_PEER_STATUS_MAX (__IFLA_BRIDGE_CFM_CC_PEER_STATUS_MAX - 1)
456e77824d8SHenrik Bjoernlund 
457122c2948STobias Waldekranz enum {
458122c2948STobias Waldekranz 	IFLA_BRIDGE_MST_UNSPEC,
459122c2948STobias Waldekranz 	IFLA_BRIDGE_MST_ENTRY,
460122c2948STobias Waldekranz 	__IFLA_BRIDGE_MST_MAX,
461122c2948STobias Waldekranz };
462122c2948STobias Waldekranz #define IFLA_BRIDGE_MST_MAX (__IFLA_BRIDGE_MST_MAX - 1)
463122c2948STobias Waldekranz 
464122c2948STobias Waldekranz enum {
465122c2948STobias Waldekranz 	IFLA_BRIDGE_MST_ENTRY_UNSPEC,
466122c2948STobias Waldekranz 	IFLA_BRIDGE_MST_ENTRY_MSTI,
467122c2948STobias Waldekranz 	IFLA_BRIDGE_MST_ENTRY_STATE,
468122c2948STobias Waldekranz 	__IFLA_BRIDGE_MST_ENTRY_MAX,
469122c2948STobias Waldekranz };
470122c2948STobias Waldekranz #define IFLA_BRIDGE_MST_ENTRY_MAX (__IFLA_BRIDGE_MST_ENTRY_MAX - 1)
471122c2948STobias Waldekranz 
472de179966SVivien Didelot struct bridge_stp_xstats {
473de179966SVivien Didelot 	__u64 transition_blk;
474de179966SVivien Didelot 	__u64 transition_fwd;
475de179966SVivien Didelot 	__u64 rx_bpdu;
476de179966SVivien Didelot 	__u64 tx_bpdu;
477de179966SVivien Didelot 	__u64 rx_tcn;
478de179966SVivien Didelot 	__u64 tx_tcn;
479de179966SVivien Didelot };
480de179966SVivien Didelot 
4818dcea187SNikolay Aleksandrov /* Bridge vlan RTM header */
4828dcea187SNikolay Aleksandrov struct br_vlan_msg {
4838dcea187SNikolay Aleksandrov 	__u8 family;
4848dcea187SNikolay Aleksandrov 	__u8 reserved1;
4858dcea187SNikolay Aleksandrov 	__u16 reserved2;
4868dcea187SNikolay Aleksandrov 	__u32 ifindex;
4878dcea187SNikolay Aleksandrov };
4888dcea187SNikolay Aleksandrov 
48956d09976SNikolay Aleksandrov enum {
49056d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_DUMP_UNSPEC,
49156d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_DUMP_FLAGS,
49256d09976SNikolay Aleksandrov 	__BRIDGE_VLANDB_DUMP_MAX,
49356d09976SNikolay Aleksandrov };
49456d09976SNikolay Aleksandrov #define BRIDGE_VLANDB_DUMP_MAX (__BRIDGE_VLANDB_DUMP_MAX - 1)
49556d09976SNikolay Aleksandrov 
49656d09976SNikolay Aleksandrov /* flags used in BRIDGE_VLANDB_DUMP_FLAGS attribute to affect dumps */
49756d09976SNikolay Aleksandrov #define BRIDGE_VLANDB_DUMPF_STATS	(1 << 0) /* Include stats in the dump */
498743a53d9SNikolay Aleksandrov #define BRIDGE_VLANDB_DUMPF_GLOBAL	(1 << 1) /* Dump global vlan options only */
49956d09976SNikolay Aleksandrov 
5008dcea187SNikolay Aleksandrov /* Bridge vlan RTM attributes
5018dcea187SNikolay Aleksandrov  * [BRIDGE_VLANDB_ENTRY] = {
5028dcea187SNikolay Aleksandrov  *     [BRIDGE_VLANDB_ENTRY_INFO]
5038dcea187SNikolay Aleksandrov  *     ...
5048dcea187SNikolay Aleksandrov  * }
50547ecd2dbSNikolay Aleksandrov  * [BRIDGE_VLANDB_GLOBAL_OPTIONS] = {
50647ecd2dbSNikolay Aleksandrov  *     [BRIDGE_VLANDB_GOPTS_ID]
50747ecd2dbSNikolay Aleksandrov  *     ...
50847ecd2dbSNikolay Aleksandrov  * }
5098dcea187SNikolay Aleksandrov  */
5108dcea187SNikolay Aleksandrov enum {
5118dcea187SNikolay Aleksandrov 	BRIDGE_VLANDB_UNSPEC,
5128dcea187SNikolay Aleksandrov 	BRIDGE_VLANDB_ENTRY,
51347ecd2dbSNikolay Aleksandrov 	BRIDGE_VLANDB_GLOBAL_OPTIONS,
5148dcea187SNikolay Aleksandrov 	__BRIDGE_VLANDB_MAX,
5158dcea187SNikolay Aleksandrov };
5168dcea187SNikolay Aleksandrov #define BRIDGE_VLANDB_MAX (__BRIDGE_VLANDB_MAX - 1)
5178dcea187SNikolay Aleksandrov 
5188dcea187SNikolay Aleksandrov enum {
5198dcea187SNikolay Aleksandrov 	BRIDGE_VLANDB_ENTRY_UNSPEC,
5208dcea187SNikolay Aleksandrov 	BRIDGE_VLANDB_ENTRY_INFO,
5210ab55879SNikolay Aleksandrov 	BRIDGE_VLANDB_ENTRY_RANGE,
522a580c76dSNikolay Aleksandrov 	BRIDGE_VLANDB_ENTRY_STATE,
523fa388f29SNikolay Aleksandrov 	BRIDGE_VLANDB_ENTRY_TUNNEL_INFO,
52456d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_ENTRY_STATS,
5252796d846SNikolay Aleksandrov 	BRIDGE_VLANDB_ENTRY_MCAST_ROUTER,
526a1aee20dSPetr Machata 	BRIDGE_VLANDB_ENTRY_MCAST_N_GROUPS,
527a1aee20dSPetr Machata 	BRIDGE_VLANDB_ENTRY_MCAST_MAX_GROUPS,
52883f6d600SIdo Schimmel 	BRIDGE_VLANDB_ENTRY_NEIGH_SUPPRESS,
5298dcea187SNikolay Aleksandrov 	__BRIDGE_VLANDB_ENTRY_MAX,
5308dcea187SNikolay Aleksandrov };
5318dcea187SNikolay Aleksandrov #define BRIDGE_VLANDB_ENTRY_MAX (__BRIDGE_VLANDB_ENTRY_MAX - 1)
5328dcea187SNikolay Aleksandrov 
53356d09976SNikolay Aleksandrov /* [BRIDGE_VLANDB_ENTRY] = {
534fa388f29SNikolay Aleksandrov  *     [BRIDGE_VLANDB_ENTRY_TUNNEL_INFO] = {
535fa388f29SNikolay Aleksandrov  *         [BRIDGE_VLANDB_TINFO_ID]
536fa388f29SNikolay Aleksandrov  *         ...
537fa388f29SNikolay Aleksandrov  *     }
538fa388f29SNikolay Aleksandrov  * }
539fa388f29SNikolay Aleksandrov  */
540fa388f29SNikolay Aleksandrov enum {
541fa388f29SNikolay Aleksandrov 	BRIDGE_VLANDB_TINFO_UNSPEC,
542fa388f29SNikolay Aleksandrov 	BRIDGE_VLANDB_TINFO_ID,
543c443758bSNikolay Aleksandrov 	BRIDGE_VLANDB_TINFO_CMD,
544fa388f29SNikolay Aleksandrov 	__BRIDGE_VLANDB_TINFO_MAX,
545fa388f29SNikolay Aleksandrov };
546fa388f29SNikolay Aleksandrov #define BRIDGE_VLANDB_TINFO_MAX (__BRIDGE_VLANDB_TINFO_MAX - 1)
547fa388f29SNikolay Aleksandrov 
548fa388f29SNikolay Aleksandrov /* [BRIDGE_VLANDB_ENTRY] = {
54956d09976SNikolay Aleksandrov  *     [BRIDGE_VLANDB_ENTRY_STATS] = {
55056d09976SNikolay Aleksandrov  *         [BRIDGE_VLANDB_STATS_RX_BYTES]
55156d09976SNikolay Aleksandrov  *         ...
55256d09976SNikolay Aleksandrov  *     }
55356d09976SNikolay Aleksandrov  *     ...
55456d09976SNikolay Aleksandrov  * }
55556d09976SNikolay Aleksandrov  */
55656d09976SNikolay Aleksandrov enum {
55756d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_STATS_UNSPEC,
55856d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_STATS_RX_BYTES,
55956d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_STATS_RX_PACKETS,
56056d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_STATS_TX_BYTES,
56156d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_STATS_TX_PACKETS,
56256d09976SNikolay Aleksandrov 	BRIDGE_VLANDB_STATS_PAD,
56356d09976SNikolay Aleksandrov 	__BRIDGE_VLANDB_STATS_MAX,
56456d09976SNikolay Aleksandrov };
56556d09976SNikolay Aleksandrov #define BRIDGE_VLANDB_STATS_MAX (__BRIDGE_VLANDB_STATS_MAX - 1)
56656d09976SNikolay Aleksandrov 
56747ecd2dbSNikolay Aleksandrov enum {
56847ecd2dbSNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_UNSPEC,
56947ecd2dbSNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_ID,
57047ecd2dbSNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_RANGE,
5719dee572cSNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_MCAST_SNOOPING,
572df271cd6SNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_MCAST_IGMP_VERSION,
573df271cd6SNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_MCAST_MLD_VERSION,
574931ba87dSNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_MCAST_LAST_MEMBER_CNT,
57550725f6eSNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_MCAST_STARTUP_QUERY_CNT,
57677f6ababSNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_MCAST_LAST_MEMBER_INTVL,
57777f6ababSNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_PAD,
5782da0aea2SNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_MCAST_MEMBERSHIP_INTVL,
579cd9269d4SNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_MCAST_QUERIER_INTVL,
580d6c08abaSNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_MCAST_QUERY_INTVL,
58142521450SNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_MCAST_QUERY_RESPONSE_INTVL,
582941121eeSNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_MCAST_STARTUP_QUERY_INTVL,
58362938182SNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_MCAST_QUERIER,
584dc002875SNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_MCAST_ROUTER_PORTS,
585ddc649d1SNikolay Aleksandrov 	BRIDGE_VLANDB_GOPTS_MCAST_QUERIER_STATE,
5868c678d60STobias Waldekranz 	BRIDGE_VLANDB_GOPTS_MSTI,
58747ecd2dbSNikolay Aleksandrov 	__BRIDGE_VLANDB_GOPTS_MAX
58847ecd2dbSNikolay Aleksandrov };
58947ecd2dbSNikolay Aleksandrov #define BRIDGE_VLANDB_GOPTS_MAX (__BRIDGE_VLANDB_GOPTS_MAX - 1)
59047ecd2dbSNikolay Aleksandrov 
591ee07c6e7SCong Wang /* Bridge multicast database attributes
592ee07c6e7SCong Wang  * [MDBA_MDB] = {
593ee07c6e7SCong Wang  *     [MDBA_MDB_ENTRY] = {
59421257156SNikolay Aleksandrov  *         [MDBA_MDB_ENTRY_INFO] {
59521257156SNikolay Aleksandrov  *		struct br_mdb_entry
59621257156SNikolay Aleksandrov  *		[MDBA_MDB_EATTR attributes]
59721257156SNikolay Aleksandrov  *         }
598ee07c6e7SCong Wang  *     }
599ee07c6e7SCong Wang  * }
600ee07c6e7SCong Wang  * [MDBA_ROUTER] = {
60159f78f9fSNikolay Aleksandrov  *    [MDBA_ROUTER_PORT] = {
60259f78f9fSNikolay Aleksandrov  *        u32 ifindex
60359f78f9fSNikolay Aleksandrov  *        [MDBA_ROUTER_PATTR attributes]
60459f78f9fSNikolay Aleksandrov  *    }
605ee07c6e7SCong Wang  * }
606ee07c6e7SCong Wang  */
607ee07c6e7SCong Wang enum {
608ee07c6e7SCong Wang 	MDBA_UNSPEC,
609ee07c6e7SCong Wang 	MDBA_MDB,
610ee07c6e7SCong Wang 	MDBA_ROUTER,
611ee07c6e7SCong Wang 	__MDBA_MAX,
612ee07c6e7SCong Wang };
613ee07c6e7SCong Wang #define MDBA_MAX (__MDBA_MAX - 1)
614ee07c6e7SCong Wang 
615ee07c6e7SCong Wang enum {
616ee07c6e7SCong Wang 	MDBA_MDB_UNSPEC,
617ee07c6e7SCong Wang 	MDBA_MDB_ENTRY,
618ee07c6e7SCong Wang 	__MDBA_MDB_MAX,
619ee07c6e7SCong Wang };
620ee07c6e7SCong Wang #define MDBA_MDB_MAX (__MDBA_MDB_MAX - 1)
621ee07c6e7SCong Wang 
622ee07c6e7SCong Wang enum {
623ee07c6e7SCong Wang 	MDBA_MDB_ENTRY_UNSPEC,
624ee07c6e7SCong Wang 	MDBA_MDB_ENTRY_INFO,
625ee07c6e7SCong Wang 	__MDBA_MDB_ENTRY_MAX,
626ee07c6e7SCong Wang };
627ee07c6e7SCong Wang #define MDBA_MDB_ENTRY_MAX (__MDBA_MDB_ENTRY_MAX - 1)
628ee07c6e7SCong Wang 
62921257156SNikolay Aleksandrov /* per mdb entry additional attributes */
63021257156SNikolay Aleksandrov enum {
63121257156SNikolay Aleksandrov 	MDBA_MDB_EATTR_UNSPEC,
63221257156SNikolay Aleksandrov 	MDBA_MDB_EATTR_TIMER,
6335205e919SNikolay Aleksandrov 	MDBA_MDB_EATTR_SRC_LIST,
6345205e919SNikolay Aleksandrov 	MDBA_MDB_EATTR_GROUP_MODE,
63588d4bd18SNikolay Aleksandrov 	MDBA_MDB_EATTR_SOURCE,
6368f8cb77eSNikolay Aleksandrov 	MDBA_MDB_EATTR_RTPROT,
637a3a48de5SIdo Schimmel 	MDBA_MDB_EATTR_DST,
638a3a48de5SIdo Schimmel 	MDBA_MDB_EATTR_DST_PORT,
639a3a48de5SIdo Schimmel 	MDBA_MDB_EATTR_VNI,
640a3a48de5SIdo Schimmel 	MDBA_MDB_EATTR_IFINDEX,
641a3a48de5SIdo Schimmel 	MDBA_MDB_EATTR_SRC_VNI,
64221257156SNikolay Aleksandrov 	__MDBA_MDB_EATTR_MAX
64321257156SNikolay Aleksandrov };
64421257156SNikolay Aleksandrov #define MDBA_MDB_EATTR_MAX (__MDBA_MDB_EATTR_MAX - 1)
64521257156SNikolay Aleksandrov 
6465205e919SNikolay Aleksandrov /* per mdb entry source */
6475205e919SNikolay Aleksandrov enum {
6485205e919SNikolay Aleksandrov 	MDBA_MDB_SRCLIST_UNSPEC,
6495205e919SNikolay Aleksandrov 	MDBA_MDB_SRCLIST_ENTRY,
6505205e919SNikolay Aleksandrov 	__MDBA_MDB_SRCLIST_MAX
6515205e919SNikolay Aleksandrov };
6525205e919SNikolay Aleksandrov #define MDBA_MDB_SRCLIST_MAX (__MDBA_MDB_SRCLIST_MAX - 1)
6535205e919SNikolay Aleksandrov 
6545205e919SNikolay Aleksandrov /* per mdb entry per source attributes
6555205e919SNikolay Aleksandrov  * these are embedded in MDBA_MDB_SRCLIST_ENTRY
6565205e919SNikolay Aleksandrov  */
6575205e919SNikolay Aleksandrov enum {
6585205e919SNikolay Aleksandrov 	MDBA_MDB_SRCATTR_UNSPEC,
6595205e919SNikolay Aleksandrov 	MDBA_MDB_SRCATTR_ADDRESS,
6605205e919SNikolay Aleksandrov 	MDBA_MDB_SRCATTR_TIMER,
6615205e919SNikolay Aleksandrov 	__MDBA_MDB_SRCATTR_MAX
6625205e919SNikolay Aleksandrov };
6635205e919SNikolay Aleksandrov #define MDBA_MDB_SRCATTR_MAX (__MDBA_MDB_SRCATTR_MAX - 1)
6645205e919SNikolay Aleksandrov 
6657f0aec7aSNikolay Aleksandrov /* multicast router types */
6667f0aec7aSNikolay Aleksandrov enum {
6677f0aec7aSNikolay Aleksandrov 	MDB_RTR_TYPE_DISABLED,
6687f0aec7aSNikolay Aleksandrov 	MDB_RTR_TYPE_TEMP_QUERY,
6697f0aec7aSNikolay Aleksandrov 	MDB_RTR_TYPE_PERM,
670a55d8246SNikolay Aleksandrov 	MDB_RTR_TYPE_TEMP
6717f0aec7aSNikolay Aleksandrov };
6727f0aec7aSNikolay Aleksandrov 
673ee07c6e7SCong Wang enum {
674ee07c6e7SCong Wang 	MDBA_ROUTER_UNSPEC,
675ee07c6e7SCong Wang 	MDBA_ROUTER_PORT,
676ee07c6e7SCong Wang 	__MDBA_ROUTER_MAX,
677ee07c6e7SCong Wang };
678ee07c6e7SCong Wang #define MDBA_ROUTER_MAX (__MDBA_ROUTER_MAX - 1)
679ee07c6e7SCong Wang 
68059f78f9fSNikolay Aleksandrov /* router port attributes */
68159f78f9fSNikolay Aleksandrov enum {
68259f78f9fSNikolay Aleksandrov 	MDBA_ROUTER_PATTR_UNSPEC,
68359f78f9fSNikolay Aleksandrov 	MDBA_ROUTER_PATTR_TIMER,
68459f78f9fSNikolay Aleksandrov 	MDBA_ROUTER_PATTR_TYPE,
685b7fb0916SLinus Lüssing 	MDBA_ROUTER_PATTR_INET_TIMER,
686b7fb0916SLinus Lüssing 	MDBA_ROUTER_PATTR_INET6_TIMER,
6871e9ca456SNikolay Aleksandrov 	MDBA_ROUTER_PATTR_VID,
68859f78f9fSNikolay Aleksandrov 	__MDBA_ROUTER_PATTR_MAX
68959f78f9fSNikolay Aleksandrov };
69059f78f9fSNikolay Aleksandrov #define MDBA_ROUTER_PATTR_MAX (__MDBA_ROUTER_PATTR_MAX - 1)
69159f78f9fSNikolay Aleksandrov 
692ee07c6e7SCong Wang struct br_port_msg {
693cfd56754SCong Wang 	__u8  family;
694ee07c6e7SCong Wang 	__u32 ifindex;
695ee07c6e7SCong Wang };
696ee07c6e7SCong Wang 
697ee07c6e7SCong Wang struct br_mdb_entry {
698ee07c6e7SCong Wang 	__u32 ifindex;
699ccb1c31aSAmerigo Wang #define MDB_TEMPORARY 0
700ccb1c31aSAmerigo Wang #define MDB_PERMANENT 1
701ccb1c31aSAmerigo Wang 	__u8 state;
702157ede67SElad Raz #define MDB_FLAGS_OFFLOAD	(1 << 0)
7033247b272SNikolay Aleksandrov #define MDB_FLAGS_FAST_LEAVE	(1 << 1)
7048266a049SNikolay Aleksandrov #define MDB_FLAGS_STAR_EXCL	(1 << 2)
7059116ffbfSNikolay Aleksandrov #define MDB_FLAGS_BLOCKED	(1 << 3)
706157ede67SElad Raz 	__u8 flags;
70774fe61f1SNikolay Aleksandrov 	__u16 vid;
708ee07c6e7SCong Wang 	struct {
709ee07c6e7SCong Wang 		union {
710ee07c6e7SCong Wang 			__be32	ip4;
711ee07c6e7SCong Wang 			struct in6_addr ip6;
712955062b0SNikolay Aleksandrov 			unsigned char mac_addr[ETH_ALEN];
713ee07c6e7SCong Wang 		} u;
714ee07c6e7SCong Wang 		__be16		proto;
715ee07c6e7SCong Wang 	} addr;
716ee07c6e7SCong Wang };
717ee07c6e7SCong Wang 
718cfd56754SCong Wang enum {
719cfd56754SCong Wang 	MDBA_SET_ENTRY_UNSPEC,
720cfd56754SCong Wang 	MDBA_SET_ENTRY,
7219c4258c7SNikolay Aleksandrov 	MDBA_SET_ENTRY_ATTRS,
722cfd56754SCong Wang 	__MDBA_SET_ENTRY_MAX,
723cfd56754SCong Wang };
724cfd56754SCong Wang #define MDBA_SET_ENTRY_MAX (__MDBA_SET_ENTRY_MAX - 1)
725cfd56754SCong Wang 
72683c1bbebSIdo Schimmel /* [MDBA_GET_ENTRY] = {
72783c1bbebSIdo Schimmel  *    struct br_mdb_entry
72883c1bbebSIdo Schimmel  *    [MDBA_GET_ENTRY_ATTRS] = {
72983c1bbebSIdo Schimmel  *       [MDBE_ATTR_SOURCE]
73083c1bbebSIdo Schimmel  *          struct in_addr / struct in6_addr
73183c1bbebSIdo Schimmel  *       [MDBE_ATTR_SRC_VNI]
73283c1bbebSIdo Schimmel  *          u32
73383c1bbebSIdo Schimmel  *    }
73483c1bbebSIdo Schimmel  * }
73583c1bbebSIdo Schimmel  */
73683c1bbebSIdo Schimmel enum {
73783c1bbebSIdo Schimmel 	MDBA_GET_ENTRY_UNSPEC,
73883c1bbebSIdo Schimmel 	MDBA_GET_ENTRY,
73983c1bbebSIdo Schimmel 	MDBA_GET_ENTRY_ATTRS,
74083c1bbebSIdo Schimmel 	__MDBA_GET_ENTRY_MAX,
74183c1bbebSIdo Schimmel };
74283c1bbebSIdo Schimmel #define MDBA_GET_ENTRY_MAX (__MDBA_GET_ENTRY_MAX - 1)
74383c1bbebSIdo Schimmel 
7449c4258c7SNikolay Aleksandrov /* [MDBA_SET_ENTRY_ATTRS] = {
7459c4258c7SNikolay Aleksandrov  *    [MDBE_ATTR_xxx]
7469c4258c7SNikolay Aleksandrov  *    ...
7479c4258c7SNikolay Aleksandrov  * }
7489c4258c7SNikolay Aleksandrov  */
7499c4258c7SNikolay Aleksandrov enum {
7509c4258c7SNikolay Aleksandrov 	MDBE_ATTR_UNSPEC,
75188d4bd18SNikolay Aleksandrov 	MDBE_ATTR_SOURCE,
7526afaae6dSIdo Schimmel 	MDBE_ATTR_SRC_LIST,
7536afaae6dSIdo Schimmel 	MDBE_ATTR_GROUP_MODE,
7541d7b66a7SIdo Schimmel 	MDBE_ATTR_RTPROT,
755a3a48de5SIdo Schimmel 	MDBE_ATTR_DST,
756a3a48de5SIdo Schimmel 	MDBE_ATTR_DST_PORT,
757a3a48de5SIdo Schimmel 	MDBE_ATTR_VNI,
758a3a48de5SIdo Schimmel 	MDBE_ATTR_IFINDEX,
759a3a48de5SIdo Schimmel 	MDBE_ATTR_SRC_VNI,
760*e37a11fcSIdo Schimmel 	MDBE_ATTR_STATE_MASK,
7619c4258c7SNikolay Aleksandrov 	__MDBE_ATTR_MAX,
7629c4258c7SNikolay Aleksandrov };
7639c4258c7SNikolay Aleksandrov #define MDBE_ATTR_MAX (__MDBE_ATTR_MAX - 1)
7649c4258c7SNikolay Aleksandrov 
7656afaae6dSIdo Schimmel /* per mdb entry source */
7666afaae6dSIdo Schimmel enum {
7676afaae6dSIdo Schimmel 	MDBE_SRC_LIST_UNSPEC,
7686afaae6dSIdo Schimmel 	MDBE_SRC_LIST_ENTRY,
7696afaae6dSIdo Schimmel 	__MDBE_SRC_LIST_MAX,
7706afaae6dSIdo Schimmel };
7716afaae6dSIdo Schimmel #define MDBE_SRC_LIST_MAX (__MDBE_SRC_LIST_MAX - 1)
7726afaae6dSIdo Schimmel 
7736afaae6dSIdo Schimmel /* per mdb entry per source attributes
7746afaae6dSIdo Schimmel  * these are embedded in MDBE_SRC_LIST_ENTRY
7756afaae6dSIdo Schimmel  */
7766afaae6dSIdo Schimmel enum {
7776afaae6dSIdo Schimmel 	MDBE_SRCATTR_UNSPEC,
7786afaae6dSIdo Schimmel 	MDBE_SRCATTR_ADDRESS,
7796afaae6dSIdo Schimmel 	__MDBE_SRCATTR_MAX,
7806afaae6dSIdo Schimmel };
7816afaae6dSIdo Schimmel #define MDBE_SRCATTR_MAX (__MDBE_SRCATTR_MAX - 1)
7826afaae6dSIdo Schimmel 
783a60c0903SNikolay Aleksandrov /* Embedded inside LINK_XSTATS_TYPE_BRIDGE */
784a60c0903SNikolay Aleksandrov enum {
785a60c0903SNikolay Aleksandrov 	BRIDGE_XSTATS_UNSPEC,
786a60c0903SNikolay Aleksandrov 	BRIDGE_XSTATS_VLAN,
7871080ab95SNikolay Aleksandrov 	BRIDGE_XSTATS_MCAST,
7881080ab95SNikolay Aleksandrov 	BRIDGE_XSTATS_PAD,
789de179966SVivien Didelot 	BRIDGE_XSTATS_STP,
790a60c0903SNikolay Aleksandrov 	__BRIDGE_XSTATS_MAX
791a60c0903SNikolay Aleksandrov };
792a60c0903SNikolay Aleksandrov #define BRIDGE_XSTATS_MAX (__BRIDGE_XSTATS_MAX - 1)
793a60c0903SNikolay Aleksandrov 
7941080ab95SNikolay Aleksandrov enum {
7951080ab95SNikolay Aleksandrov 	BR_MCAST_DIR_RX,
7961080ab95SNikolay Aleksandrov 	BR_MCAST_DIR_TX,
7971080ab95SNikolay Aleksandrov 	BR_MCAST_DIR_SIZE
7981080ab95SNikolay Aleksandrov };
7991080ab95SNikolay Aleksandrov 
8001080ab95SNikolay Aleksandrov /* IGMP/MLD statistics */
8011080ab95SNikolay Aleksandrov struct br_mcast_stats {
802a65056ecSNikolay Aleksandrov 	__u64 igmp_v1queries[BR_MCAST_DIR_SIZE];
803a65056ecSNikolay Aleksandrov 	__u64 igmp_v2queries[BR_MCAST_DIR_SIZE];
804a65056ecSNikolay Aleksandrov 	__u64 igmp_v3queries[BR_MCAST_DIR_SIZE];
8051080ab95SNikolay Aleksandrov 	__u64 igmp_leaves[BR_MCAST_DIR_SIZE];
8061080ab95SNikolay Aleksandrov 	__u64 igmp_v1reports[BR_MCAST_DIR_SIZE];
8071080ab95SNikolay Aleksandrov 	__u64 igmp_v2reports[BR_MCAST_DIR_SIZE];
8081080ab95SNikolay Aleksandrov 	__u64 igmp_v3reports[BR_MCAST_DIR_SIZE];
8091080ab95SNikolay Aleksandrov 	__u64 igmp_parse_errors;
8101080ab95SNikolay Aleksandrov 
811a65056ecSNikolay Aleksandrov 	__u64 mld_v1queries[BR_MCAST_DIR_SIZE];
812a65056ecSNikolay Aleksandrov 	__u64 mld_v2queries[BR_MCAST_DIR_SIZE];
8131080ab95SNikolay Aleksandrov 	__u64 mld_leaves[BR_MCAST_DIR_SIZE];
8141080ab95SNikolay Aleksandrov 	__u64 mld_v1reports[BR_MCAST_DIR_SIZE];
8151080ab95SNikolay Aleksandrov 	__u64 mld_v2reports[BR_MCAST_DIR_SIZE];
8161080ab95SNikolay Aleksandrov 	__u64 mld_parse_errors;
8171080ab95SNikolay Aleksandrov 
8181080ab95SNikolay Aleksandrov 	__u64 mcast_bytes[BR_MCAST_DIR_SIZE];
8191080ab95SNikolay Aleksandrov 	__u64 mcast_packets[BR_MCAST_DIR_SIZE];
8201080ab95SNikolay Aleksandrov };
821a428afe8SNikolay Aleksandrov 
822a428afe8SNikolay Aleksandrov /* bridge boolean options
82370e4272bSNikolay Aleksandrov  * BR_BOOLOPT_NO_LL_LEARN - disable learning from link-local packets
824f4b7002aSNikolay Aleksandrov  * BR_BOOLOPT_MCAST_VLAN_SNOOPING - control vlan multicast snooping
82570e4272bSNikolay Aleksandrov  *
826a428afe8SNikolay Aleksandrov  * IMPORTANT: if adding a new option do not forget to handle
827a428afe8SNikolay Aleksandrov  *            it in br_boolopt_toggle/get and bridge sysfs
828a428afe8SNikolay Aleksandrov  */
829a428afe8SNikolay Aleksandrov enum br_boolopt_id {
83070e4272bSNikolay Aleksandrov 	BR_BOOLOPT_NO_LL_LEARN,
831f4b7002aSNikolay Aleksandrov 	BR_BOOLOPT_MCAST_VLAN_SNOOPING,
832ec7328b5STobias Waldekranz 	BR_BOOLOPT_MST_ENABLE,
833a428afe8SNikolay Aleksandrov 	BR_BOOLOPT_MAX
834a428afe8SNikolay Aleksandrov };
835a428afe8SNikolay Aleksandrov 
836a428afe8SNikolay Aleksandrov /* struct br_boolopt_multi - change multiple bridge boolean options
837a428afe8SNikolay Aleksandrov  *
838a428afe8SNikolay Aleksandrov  * @optval: new option values (bit per option)
839a428afe8SNikolay Aleksandrov  * @optmask: options to change (bit per option)
840a428afe8SNikolay Aleksandrov  */
841a428afe8SNikolay Aleksandrov struct br_boolopt_multi {
842a428afe8SNikolay Aleksandrov 	__u32 optval;
843a428afe8SNikolay Aleksandrov 	__u32 optmask;
844a428afe8SNikolay Aleksandrov };
845c7fa1d9bSNikolay Aleksandrov 
846c7fa1d9bSNikolay Aleksandrov enum {
847c7fa1d9bSNikolay Aleksandrov 	BRIDGE_QUERIER_UNSPEC,
848c7fa1d9bSNikolay Aleksandrov 	BRIDGE_QUERIER_IP_ADDRESS,
849c7fa1d9bSNikolay Aleksandrov 	BRIDGE_QUERIER_IP_PORT,
850c7fa1d9bSNikolay Aleksandrov 	BRIDGE_QUERIER_IP_OTHER_TIMER,
851c7fa1d9bSNikolay Aleksandrov 	BRIDGE_QUERIER_PAD,
85285b41082SNikolay Aleksandrov 	BRIDGE_QUERIER_IPV6_ADDRESS,
85385b41082SNikolay Aleksandrov 	BRIDGE_QUERIER_IPV6_PORT,
85485b41082SNikolay Aleksandrov 	BRIDGE_QUERIER_IPV6_OTHER_TIMER,
855c7fa1d9bSNikolay Aleksandrov 	__BRIDGE_QUERIER_MAX
856c7fa1d9bSNikolay Aleksandrov };
857c7fa1d9bSNikolay Aleksandrov #define BRIDGE_QUERIER_MAX (__BRIDGE_QUERIER_MAX - 1)
858607ca46eSDavid Howells #endif /* _UAPI_LINUX_IF_BRIDGE_H */
859