xref: /linux/include/uapi/linux/if_bridge.h (revision 59f78f9f6c2e80dcf0f520be85b660f856217b79)
1607ca46eSDavid Howells /*
2607ca46eSDavid Howells  *	Linux ethernet bridge
3607ca46eSDavid Howells  *
4607ca46eSDavid Howells  *	Authors:
5607ca46eSDavid Howells  *	Lennert Buytenhek		<buytenh@gnu.org>
6607ca46eSDavid Howells  *
7607ca46eSDavid Howells  *	This program is free software; you can redistribute it and/or
8607ca46eSDavid Howells  *	modify it under the terms of the GNU General Public License
9607ca46eSDavid Howells  *	as published by the Free Software Foundation; either version
10607ca46eSDavid Howells  *	2 of the License, or (at your option) any later version.
11607ca46eSDavid Howells  */
12607ca46eSDavid Howells 
13607ca46eSDavid Howells #ifndef _UAPI_LINUX_IF_BRIDGE_H
14607ca46eSDavid Howells #define _UAPI_LINUX_IF_BRIDGE_H
15607ca46eSDavid Howells 
16607ca46eSDavid Howells #include <linux/types.h>
17e216975aSJoe Perches #include <linux/if_ether.h>
1866f1c448SGregory Fong #include <linux/in6.h>
19607ca46eSDavid Howells 
20607ca46eSDavid Howells #define SYSFS_BRIDGE_ATTR	"bridge"
21607ca46eSDavid Howells #define SYSFS_BRIDGE_FDB	"brforward"
22607ca46eSDavid Howells #define SYSFS_BRIDGE_PORT_SUBDIR "brif"
23607ca46eSDavid Howells #define SYSFS_BRIDGE_PORT_ATTR	"brport"
24607ca46eSDavid Howells #define SYSFS_BRIDGE_PORT_LINK	"bridge"
25607ca46eSDavid Howells 
26607ca46eSDavid Howells #define BRCTL_VERSION 1
27607ca46eSDavid Howells 
28607ca46eSDavid Howells #define BRCTL_GET_VERSION 0
29607ca46eSDavid Howells #define BRCTL_GET_BRIDGES 1
30607ca46eSDavid Howells #define BRCTL_ADD_BRIDGE 2
31607ca46eSDavid Howells #define BRCTL_DEL_BRIDGE 3
32607ca46eSDavid Howells #define BRCTL_ADD_IF 4
33607ca46eSDavid Howells #define BRCTL_DEL_IF 5
34607ca46eSDavid Howells #define BRCTL_GET_BRIDGE_INFO 6
35607ca46eSDavid Howells #define BRCTL_GET_PORT_LIST 7
36607ca46eSDavid Howells #define BRCTL_SET_BRIDGE_FORWARD_DELAY 8
37607ca46eSDavid Howells #define BRCTL_SET_BRIDGE_HELLO_TIME 9
38607ca46eSDavid Howells #define BRCTL_SET_BRIDGE_MAX_AGE 10
39607ca46eSDavid Howells #define BRCTL_SET_AGEING_TIME 11
40607ca46eSDavid Howells #define BRCTL_SET_GC_INTERVAL 12
41607ca46eSDavid Howells #define BRCTL_GET_PORT_INFO 13
42607ca46eSDavid Howells #define BRCTL_SET_BRIDGE_STP_STATE 14
43607ca46eSDavid Howells #define BRCTL_SET_BRIDGE_PRIORITY 15
44607ca46eSDavid Howells #define BRCTL_SET_PORT_PRIORITY 16
45607ca46eSDavid Howells #define BRCTL_SET_PATH_COST 17
46607ca46eSDavid Howells #define BRCTL_GET_FDB_ENTRIES 18
47607ca46eSDavid Howells 
48607ca46eSDavid Howells #define BR_STATE_DISABLED 0
49607ca46eSDavid Howells #define BR_STATE_LISTENING 1
50607ca46eSDavid Howells #define BR_STATE_LEARNING 2
51607ca46eSDavid Howells #define BR_STATE_FORWARDING 3
52607ca46eSDavid Howells #define BR_STATE_BLOCKING 4
53607ca46eSDavid Howells 
54607ca46eSDavid Howells struct __bridge_info {
55607ca46eSDavid Howells 	__u64 designated_root;
56607ca46eSDavid Howells 	__u64 bridge_id;
57607ca46eSDavid Howells 	__u32 root_path_cost;
58607ca46eSDavid Howells 	__u32 max_age;
59607ca46eSDavid Howells 	__u32 hello_time;
60607ca46eSDavid Howells 	__u32 forward_delay;
61607ca46eSDavid Howells 	__u32 bridge_max_age;
62607ca46eSDavid Howells 	__u32 bridge_hello_time;
63607ca46eSDavid Howells 	__u32 bridge_forward_delay;
64607ca46eSDavid Howells 	__u8 topology_change;
65607ca46eSDavid Howells 	__u8 topology_change_detected;
66607ca46eSDavid Howells 	__u8 root_port;
67607ca46eSDavid Howells 	__u8 stp_enabled;
68607ca46eSDavid Howells 	__u32 ageing_time;
69607ca46eSDavid Howells 	__u32 gc_interval;
70607ca46eSDavid Howells 	__u32 hello_timer_value;
71607ca46eSDavid Howells 	__u32 tcn_timer_value;
72607ca46eSDavid Howells 	__u32 topology_change_timer_value;
73607ca46eSDavid Howells 	__u32 gc_timer_value;
74607ca46eSDavid Howells };
75607ca46eSDavid Howells 
76607ca46eSDavid Howells struct __port_info {
77607ca46eSDavid Howells 	__u64 designated_root;
78607ca46eSDavid Howells 	__u64 designated_bridge;
79607ca46eSDavid Howells 	__u16 port_id;
80607ca46eSDavid Howells 	__u16 designated_port;
81607ca46eSDavid Howells 	__u32 path_cost;
82607ca46eSDavid Howells 	__u32 designated_cost;
83607ca46eSDavid Howells 	__u8 state;
84607ca46eSDavid Howells 	__u8 top_change_ack;
85607ca46eSDavid Howells 	__u8 config_pending;
86607ca46eSDavid Howells 	__u8 unused0;
87607ca46eSDavid Howells 	__u32 message_age_timer_value;
88607ca46eSDavid Howells 	__u32 forward_delay_timer_value;
89607ca46eSDavid Howells 	__u32 hold_timer_value;
90607ca46eSDavid Howells };
91607ca46eSDavid Howells 
92607ca46eSDavid Howells struct __fdb_entry {
93e216975aSJoe Perches 	__u8 mac_addr[ETH_ALEN];
94607ca46eSDavid Howells 	__u8 port_no;
95607ca46eSDavid Howells 	__u8 is_local;
96607ca46eSDavid Howells 	__u32 ageing_timer_value;
97607ca46eSDavid Howells 	__u8 port_hi;
98607ca46eSDavid Howells 	__u8 pad0;
99607ca46eSDavid Howells 	__u16 unused;
100607ca46eSDavid Howells };
101607ca46eSDavid Howells 
1022469ffd7SJohn Fastabend /* Bridge Flags */
1032469ffd7SJohn Fastabend #define BRIDGE_FLAGS_MASTER	1	/* Bridge command to/from master */
1042469ffd7SJohn Fastabend #define BRIDGE_FLAGS_SELF	2	/* Bridge command to/from lowerdev */
105607ca46eSDavid Howells 
1062469ffd7SJohn Fastabend #define BRIDGE_MODE_VEB		0	/* Default loopback mode */
1072469ffd7SJohn Fastabend #define BRIDGE_MODE_VEPA	1	/* 802.1Qbg defined VEPA mode */
108fc0bdbbcSRoopa Prabhu #define BRIDGE_MODE_UNDEF	0xFFFF  /* mode undefined */
1092469ffd7SJohn Fastabend 
1102469ffd7SJohn Fastabend /* Bridge management nested attributes
1112469ffd7SJohn Fastabend  * [IFLA_AF_SPEC] = {
1122469ffd7SJohn Fastabend  *     [IFLA_BRIDGE_FLAGS]
1132469ffd7SJohn Fastabend  *     [IFLA_BRIDGE_MODE]
114407af329SVlad Yasevich  *     [IFLA_BRIDGE_VLAN_INFO]
1152469ffd7SJohn Fastabend  * }
1162469ffd7SJohn Fastabend  */
1172469ffd7SJohn Fastabend enum {
1182469ffd7SJohn Fastabend 	IFLA_BRIDGE_FLAGS,
1192469ffd7SJohn Fastabend 	IFLA_BRIDGE_MODE,
120407af329SVlad Yasevich 	IFLA_BRIDGE_VLAN_INFO,
1212469ffd7SJohn Fastabend 	__IFLA_BRIDGE_MAX,
1222469ffd7SJohn Fastabend };
1232469ffd7SJohn Fastabend #define IFLA_BRIDGE_MAX (__IFLA_BRIDGE_MAX - 1)
124ee07c6e7SCong Wang 
125407af329SVlad Yasevich #define BRIDGE_VLAN_INFO_MASTER	(1<<0)	/* Operate on Bridge device as well */
126552406c4SVlad Yasevich #define BRIDGE_VLAN_INFO_PVID	(1<<1)	/* VLAN is PVID, ingress untagged */
12735e03f3aSVlad Yasevich #define BRIDGE_VLAN_INFO_UNTAGGED	(1<<2)	/* VLAN egresses untagged */
128bdced7efSRoopa Prabhu #define BRIDGE_VLAN_INFO_RANGE_BEGIN	(1<<3) /* VLAN is start of vlan range */
129bdced7efSRoopa Prabhu #define BRIDGE_VLAN_INFO_RANGE_END	(1<<4) /* VLAN is end of vlan range */
1302594e906SNikolay Aleksandrov #define BRIDGE_VLAN_INFO_BRENTRY	(1<<5) /* Global bridge VLAN entry */
131407af329SVlad Yasevich 
132407af329SVlad Yasevich struct bridge_vlan_info {
1339f89ec82SCong Wang 	__u16 flags;
1349f89ec82SCong Wang 	__u16 vid;
135407af329SVlad Yasevich };
136407af329SVlad Yasevich 
137ee07c6e7SCong Wang /* Bridge multicast database attributes
138ee07c6e7SCong Wang  * [MDBA_MDB] = {
139ee07c6e7SCong Wang  *     [MDBA_MDB_ENTRY] = {
14021257156SNikolay Aleksandrov  *         [MDBA_MDB_ENTRY_INFO] {
14121257156SNikolay Aleksandrov  *		struct br_mdb_entry
14221257156SNikolay Aleksandrov  *		[MDBA_MDB_EATTR attributes]
14321257156SNikolay Aleksandrov  *         }
144ee07c6e7SCong Wang  *     }
145ee07c6e7SCong Wang  * }
146ee07c6e7SCong Wang  * [MDBA_ROUTER] = {
147*59f78f9fSNikolay Aleksandrov  *    [MDBA_ROUTER_PORT] = {
148*59f78f9fSNikolay Aleksandrov  *        u32 ifindex
149*59f78f9fSNikolay Aleksandrov  *        [MDBA_ROUTER_PATTR attributes]
150*59f78f9fSNikolay Aleksandrov  *    }
151ee07c6e7SCong Wang  * }
152ee07c6e7SCong Wang  */
153ee07c6e7SCong Wang enum {
154ee07c6e7SCong Wang 	MDBA_UNSPEC,
155ee07c6e7SCong Wang 	MDBA_MDB,
156ee07c6e7SCong Wang 	MDBA_ROUTER,
157ee07c6e7SCong Wang 	__MDBA_MAX,
158ee07c6e7SCong Wang };
159ee07c6e7SCong Wang #define MDBA_MAX (__MDBA_MAX - 1)
160ee07c6e7SCong Wang 
161ee07c6e7SCong Wang enum {
162ee07c6e7SCong Wang 	MDBA_MDB_UNSPEC,
163ee07c6e7SCong Wang 	MDBA_MDB_ENTRY,
164ee07c6e7SCong Wang 	__MDBA_MDB_MAX,
165ee07c6e7SCong Wang };
166ee07c6e7SCong Wang #define MDBA_MDB_MAX (__MDBA_MDB_MAX - 1)
167ee07c6e7SCong Wang 
168ee07c6e7SCong Wang enum {
169ee07c6e7SCong Wang 	MDBA_MDB_ENTRY_UNSPEC,
170ee07c6e7SCong Wang 	MDBA_MDB_ENTRY_INFO,
171ee07c6e7SCong Wang 	__MDBA_MDB_ENTRY_MAX,
172ee07c6e7SCong Wang };
173ee07c6e7SCong Wang #define MDBA_MDB_ENTRY_MAX (__MDBA_MDB_ENTRY_MAX - 1)
174ee07c6e7SCong Wang 
17521257156SNikolay Aleksandrov /* per mdb entry additional attributes */
17621257156SNikolay Aleksandrov enum {
17721257156SNikolay Aleksandrov 	MDBA_MDB_EATTR_UNSPEC,
17821257156SNikolay Aleksandrov 	MDBA_MDB_EATTR_TIMER,
17921257156SNikolay Aleksandrov 	__MDBA_MDB_EATTR_MAX
18021257156SNikolay Aleksandrov };
18121257156SNikolay Aleksandrov #define MDBA_MDB_EATTR_MAX (__MDBA_MDB_EATTR_MAX - 1)
18221257156SNikolay Aleksandrov 
1837f0aec7aSNikolay Aleksandrov /* multicast router types */
1847f0aec7aSNikolay Aleksandrov enum {
1857f0aec7aSNikolay Aleksandrov 	MDB_RTR_TYPE_DISABLED,
1867f0aec7aSNikolay Aleksandrov 	MDB_RTR_TYPE_TEMP_QUERY,
1877f0aec7aSNikolay Aleksandrov 	MDB_RTR_TYPE_PERM,
188a55d8246SNikolay Aleksandrov 	MDB_RTR_TYPE_TEMP
1897f0aec7aSNikolay Aleksandrov };
1907f0aec7aSNikolay Aleksandrov 
191ee07c6e7SCong Wang enum {
192ee07c6e7SCong Wang 	MDBA_ROUTER_UNSPEC,
193ee07c6e7SCong Wang 	MDBA_ROUTER_PORT,
194ee07c6e7SCong Wang 	__MDBA_ROUTER_MAX,
195ee07c6e7SCong Wang };
196ee07c6e7SCong Wang #define MDBA_ROUTER_MAX (__MDBA_ROUTER_MAX - 1)
197ee07c6e7SCong Wang 
198*59f78f9fSNikolay Aleksandrov /* router port attributes */
199*59f78f9fSNikolay Aleksandrov enum {
200*59f78f9fSNikolay Aleksandrov 	MDBA_ROUTER_PATTR_UNSPEC,
201*59f78f9fSNikolay Aleksandrov 	MDBA_ROUTER_PATTR_TIMER,
202*59f78f9fSNikolay Aleksandrov 	MDBA_ROUTER_PATTR_TYPE,
203*59f78f9fSNikolay Aleksandrov 	__MDBA_ROUTER_PATTR_MAX
204*59f78f9fSNikolay Aleksandrov };
205*59f78f9fSNikolay Aleksandrov #define MDBA_ROUTER_PATTR_MAX (__MDBA_ROUTER_PATTR_MAX - 1)
206*59f78f9fSNikolay Aleksandrov 
207ee07c6e7SCong Wang struct br_port_msg {
208cfd56754SCong Wang 	__u8  family;
209ee07c6e7SCong Wang 	__u32 ifindex;
210ee07c6e7SCong Wang };
211ee07c6e7SCong Wang 
212ee07c6e7SCong Wang struct br_mdb_entry {
213ee07c6e7SCong Wang 	__u32 ifindex;
214ccb1c31aSAmerigo Wang #define MDB_TEMPORARY 0
215ccb1c31aSAmerigo Wang #define MDB_PERMANENT 1
216ccb1c31aSAmerigo Wang 	__u8 state;
217157ede67SElad Raz #define MDB_FLAGS_OFFLOAD	(1 << 0)
218157ede67SElad Raz 	__u8 flags;
21974fe61f1SNikolay Aleksandrov 	__u16 vid;
220ee07c6e7SCong Wang 	struct {
221ee07c6e7SCong Wang 		union {
222ee07c6e7SCong Wang 			__be32	ip4;
223ee07c6e7SCong Wang 			struct in6_addr ip6;
224ee07c6e7SCong Wang 		} u;
225ee07c6e7SCong Wang 		__be16		proto;
226ee07c6e7SCong Wang 	} addr;
227ee07c6e7SCong Wang };
228ee07c6e7SCong Wang 
229cfd56754SCong Wang enum {
230cfd56754SCong Wang 	MDBA_SET_ENTRY_UNSPEC,
231cfd56754SCong Wang 	MDBA_SET_ENTRY,
232cfd56754SCong Wang 	__MDBA_SET_ENTRY_MAX,
233cfd56754SCong Wang };
234cfd56754SCong Wang #define MDBA_SET_ENTRY_MAX (__MDBA_SET_ENTRY_MAX - 1)
235cfd56754SCong Wang 
236607ca46eSDavid Howells #endif /* _UAPI_LINUX_IF_BRIDGE_H */
237