1 | /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ |
2 | /* |
3 | * Linux ethernet bridge |
4 | * |
5 | * Authors: |
6 | * Lennert Buytenhek <buytenh@gnu.org> |
7 | * |
8 | * This program is free software; you can redistribute it and/or |
9 | * modify it under the terms of the GNU General Public License |
10 | * as published by the Free Software Foundation; either version |
11 | * 2 of the License, or (at your option) any later version. |
12 | */ |
13 | |
14 | #ifndef _UAPI_LINUX_IF_BRIDGE_H |
15 | #define _UAPI_LINUX_IF_BRIDGE_H |
16 | |
17 | #include <linux/types.h> |
18 | #include <linux/if_ether.h> |
19 | #include <linux/in6.h> |
20 | |
21 | #define SYSFS_BRIDGE_ATTR "bridge" |
22 | #define SYSFS_BRIDGE_FDB "brforward" |
23 | #define SYSFS_BRIDGE_PORT_SUBDIR "brif" |
24 | #define SYSFS_BRIDGE_PORT_ATTR "brport" |
25 | #define SYSFS_BRIDGE_PORT_LINK "bridge" |
26 | |
27 | #define BRCTL_VERSION 1 |
28 | |
29 | #define BRCTL_GET_VERSION 0 |
30 | #define BRCTL_GET_BRIDGES 1 |
31 | #define BRCTL_ADD_BRIDGE 2 |
32 | #define BRCTL_DEL_BRIDGE 3 |
33 | #define BRCTL_ADD_IF 4 |
34 | #define BRCTL_DEL_IF 5 |
35 | #define BRCTL_GET_BRIDGE_INFO 6 |
36 | #define BRCTL_GET_PORT_LIST 7 |
37 | #define BRCTL_SET_BRIDGE_FORWARD_DELAY 8 |
38 | #define BRCTL_SET_BRIDGE_HELLO_TIME 9 |
39 | #define BRCTL_SET_BRIDGE_MAX_AGE 10 |
40 | #define BRCTL_SET_AGEING_TIME 11 |
41 | #define BRCTL_SET_GC_INTERVAL 12 |
42 | #define BRCTL_GET_PORT_INFO 13 |
43 | #define BRCTL_SET_BRIDGE_STP_STATE 14 |
44 | #define BRCTL_SET_BRIDGE_PRIORITY 15 |
45 | #define BRCTL_SET_PORT_PRIORITY 16 |
46 | #define BRCTL_SET_PATH_COST 17 |
47 | #define BRCTL_GET_FDB_ENTRIES 18 |
48 | |
49 | #define BR_STATE_DISABLED 0 |
50 | #define BR_STATE_LISTENING 1 |
51 | #define BR_STATE_LEARNING 2 |
52 | #define BR_STATE_FORWARDING 3 |
53 | #define BR_STATE_BLOCKING 4 |
54 | |
55 | struct __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 | |
77 | struct __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 | |
93 | struct __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 | */ |
118 | enum { |
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 | |
138 | struct bridge_vlan_info { |
139 | __u16 flags; |
140 | __u16 vid; |
141 | }; |
142 | |
143 | enum { |
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 | |
153 | struct 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 | |
163 | enum { |
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 | |
180 | enum { |
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 | |
191 | enum { |
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 | |
199 | enum { |
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 | |
207 | enum { |
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 | |
216 | enum { |
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 | |
225 | enum { |
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 | |
237 | enum { |
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 | |
258 | enum { |
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 | |
267 | enum { |
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 | |
278 | enum { |
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 | |
289 | struct br_mrp_instance { |
290 | __u32 ring_id; |
291 | __u32 p_ifindex; |
292 | __u32 s_ifindex; |
293 | __u16 prio; |
294 | }; |
295 | |
296 | struct br_mrp_ring_state { |
297 | __u32 ring_id; |
298 | __u32 ring_state; |
299 | }; |
300 | |
301 | struct br_mrp_ring_role { |
302 | __u32 ring_id; |
303 | __u32 ring_role; |
304 | }; |
305 | |
306 | struct br_mrp_start_test { |
307 | __u32 ring_id; |
308 | __u32 interval; |
309 | __u32 max_miss; |
310 | __u32 period; |
311 | __u32 monitor; |
312 | }; |
313 | |
314 | struct br_mrp_in_state { |
315 | __u32 in_state; |
316 | __u16 in_id; |
317 | }; |
318 | |
319 | struct br_mrp_in_role { |
320 | __u32 ring_id; |
321 | __u32 in_role; |
322 | __u32 i_ifindex; |
323 | __u16 in_id; |
324 | }; |
325 | |
326 | struct br_mrp_start_in_test { |
327 | __u32 interval; |
328 | __u32 max_miss; |
329 | __u32 period; |
330 | __u16 in_id; |
331 | }; |
332 | |
333 | enum { |
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 | |
356 | enum { |
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 | |
367 | enum { |
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 | |
375 | enum { |
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 | |
386 | enum { |
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 | |
397 | enum { |
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 | |
406 | enum { |
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 | |
415 | enum { |
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 | |
430 | enum { |
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 | |
441 | enum { |
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 | |
457 | enum { |
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 | |
464 | enum { |
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 | |
472 | struct 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 */ |
482 | struct br_vlan_msg { |
483 | __u8 family; |
484 | __u8 reserved1; |
485 | __u16 reserved2; |
486 | __u32 ifindex; |
487 | }; |
488 | |
489 | enum { |
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 | */ |
510 | enum { |
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 | |
518 | enum { |
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 | */ |
540 | enum { |
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 | */ |
556 | enum { |
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 | |
567 | enum { |
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 | */ |
607 | enum { |
608 | MDBA_UNSPEC, |
609 | MDBA_MDB, |
610 | MDBA_ROUTER, |
611 | __MDBA_MAX, |
612 | }; |
613 | #define MDBA_MAX (__MDBA_MAX - 1) |
614 | |
615 | enum { |
616 | MDBA_MDB_UNSPEC, |
617 | MDBA_MDB_ENTRY, |
618 | __MDBA_MDB_MAX, |
619 | }; |
620 | #define MDBA_MDB_MAX (__MDBA_MDB_MAX - 1) |
621 | |
622 | enum { |
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 */ |
630 | enum { |
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 */ |
647 | enum { |
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 | */ |
657 | enum { |
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 */ |
666 | enum { |
667 | MDB_RTR_TYPE_DISABLED, |
668 | MDB_RTR_TYPE_TEMP_QUERY, |
669 | MDB_RTR_TYPE_PERM, |
670 | MDB_RTR_TYPE_TEMP |
671 | }; |
672 | |
673 | enum { |
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 */ |
681 | enum { |
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 | |
692 | struct br_port_msg { |
693 | __u8 family; |
694 | __u32 ifindex; |
695 | }; |
696 | |
697 | struct br_mdb_entry { |
698 | __u32 ifindex; |
699 | #define MDB_TEMPORARY 0 |
700 | #define MDB_PERMANENT 1 |
701 | __u8 state; |
702 | #define MDB_FLAGS_OFFLOAD (1 << 0) |
703 | #define MDB_FLAGS_FAST_LEAVE (1 << 1) |
704 | #define MDB_FLAGS_STAR_EXCL (1 << 2) |
705 | #define MDB_FLAGS_BLOCKED (1 << 3) |
706 | __u8 flags; |
707 | __u16 vid; |
708 | struct { |
709 | union { |
710 | __be32 ip4; |
711 | struct in6_addr ip6; |
712 | unsigned char mac_addr[ETH_ALEN]; |
713 | } u; |
714 | __be16 proto; |
715 | } addr; |
716 | }; |
717 | |
718 | enum { |
719 | MDBA_SET_ENTRY_UNSPEC, |
720 | MDBA_SET_ENTRY, |
721 | MDBA_SET_ENTRY_ATTRS, |
722 | __MDBA_SET_ENTRY_MAX, |
723 | }; |
724 | #define MDBA_SET_ENTRY_MAX (__MDBA_SET_ENTRY_MAX - 1) |
725 | |
726 | /* [MDBA_GET_ENTRY] = { |
727 | * struct br_mdb_entry |
728 | * [MDBA_GET_ENTRY_ATTRS] = { |
729 | * [MDBE_ATTR_SOURCE] |
730 | * struct in_addr / struct in6_addr |
731 | * [MDBE_ATTR_SRC_VNI] |
732 | * u32 |
733 | * } |
734 | * } |
735 | */ |
736 | enum { |
737 | MDBA_GET_ENTRY_UNSPEC, |
738 | MDBA_GET_ENTRY, |
739 | MDBA_GET_ENTRY_ATTRS, |
740 | __MDBA_GET_ENTRY_MAX, |
741 | }; |
742 | #define MDBA_GET_ENTRY_MAX (__MDBA_GET_ENTRY_MAX - 1) |
743 | |
744 | /* [MDBA_SET_ENTRY_ATTRS] = { |
745 | * [MDBE_ATTR_xxx] |
746 | * ... |
747 | * } |
748 | */ |
749 | enum { |
750 | MDBE_ATTR_UNSPEC, |
751 | MDBE_ATTR_SOURCE, |
752 | MDBE_ATTR_SRC_LIST, |
753 | MDBE_ATTR_GROUP_MODE, |
754 | MDBE_ATTR_RTPROT, |
755 | MDBE_ATTR_DST, |
756 | MDBE_ATTR_DST_PORT, |
757 | MDBE_ATTR_VNI, |
758 | MDBE_ATTR_IFINDEX, |
759 | MDBE_ATTR_SRC_VNI, |
760 | __MDBE_ATTR_MAX, |
761 | }; |
762 | #define MDBE_ATTR_MAX (__MDBE_ATTR_MAX - 1) |
763 | |
764 | /* per mdb entry source */ |
765 | enum { |
766 | MDBE_SRC_LIST_UNSPEC, |
767 | MDBE_SRC_LIST_ENTRY, |
768 | __MDBE_SRC_LIST_MAX, |
769 | }; |
770 | #define MDBE_SRC_LIST_MAX (__MDBE_SRC_LIST_MAX - 1) |
771 | |
772 | /* per mdb entry per source attributes |
773 | * these are embedded in MDBE_SRC_LIST_ENTRY |
774 | */ |
775 | enum { |
776 | MDBE_SRCATTR_UNSPEC, |
777 | MDBE_SRCATTR_ADDRESS, |
778 | __MDBE_SRCATTR_MAX, |
779 | }; |
780 | #define MDBE_SRCATTR_MAX (__MDBE_SRCATTR_MAX - 1) |
781 | |
782 | /* Embedded inside LINK_XSTATS_TYPE_BRIDGE */ |
783 | enum { |
784 | BRIDGE_XSTATS_UNSPEC, |
785 | BRIDGE_XSTATS_VLAN, |
786 | BRIDGE_XSTATS_MCAST, |
787 | BRIDGE_XSTATS_PAD, |
788 | BRIDGE_XSTATS_STP, |
789 | __BRIDGE_XSTATS_MAX |
790 | }; |
791 | #define BRIDGE_XSTATS_MAX (__BRIDGE_XSTATS_MAX - 1) |
792 | |
793 | enum { |
794 | BR_MCAST_DIR_RX, |
795 | BR_MCAST_DIR_TX, |
796 | BR_MCAST_DIR_SIZE |
797 | }; |
798 | |
799 | /* IGMP/MLD statistics */ |
800 | struct br_mcast_stats { |
801 | __u64 igmp_v1queries[BR_MCAST_DIR_SIZE]; |
802 | __u64 igmp_v2queries[BR_MCAST_DIR_SIZE]; |
803 | __u64 igmp_v3queries[BR_MCAST_DIR_SIZE]; |
804 | __u64 igmp_leaves[BR_MCAST_DIR_SIZE]; |
805 | __u64 igmp_v1reports[BR_MCAST_DIR_SIZE]; |
806 | __u64 igmp_v2reports[BR_MCAST_DIR_SIZE]; |
807 | __u64 igmp_v3reports[BR_MCAST_DIR_SIZE]; |
808 | __u64 igmp_parse_errors; |
809 | |
810 | __u64 mld_v1queries[BR_MCAST_DIR_SIZE]; |
811 | __u64 mld_v2queries[BR_MCAST_DIR_SIZE]; |
812 | __u64 mld_leaves[BR_MCAST_DIR_SIZE]; |
813 | __u64 mld_v1reports[BR_MCAST_DIR_SIZE]; |
814 | __u64 mld_v2reports[BR_MCAST_DIR_SIZE]; |
815 | __u64 mld_parse_errors; |
816 | |
817 | __u64 mcast_bytes[BR_MCAST_DIR_SIZE]; |
818 | __u64 mcast_packets[BR_MCAST_DIR_SIZE]; |
819 | }; |
820 | |
821 | /* bridge boolean options |
822 | * BR_BOOLOPT_NO_LL_LEARN - disable learning from link-local packets |
823 | * BR_BOOLOPT_MCAST_VLAN_SNOOPING - control vlan multicast snooping |
824 | * |
825 | * IMPORTANT: if adding a new option do not forget to handle |
826 | * it in br_boolopt_toggle/get and bridge sysfs |
827 | */ |
828 | enum br_boolopt_id { |
829 | BR_BOOLOPT_NO_LL_LEARN, |
830 | BR_BOOLOPT_MCAST_VLAN_SNOOPING, |
831 | BR_BOOLOPT_MST_ENABLE, |
832 | BR_BOOLOPT_MAX |
833 | }; |
834 | |
835 | /* struct br_boolopt_multi - change multiple bridge boolean options |
836 | * |
837 | * @optval: new option values (bit per option) |
838 | * @optmask: options to change (bit per option) |
839 | */ |
840 | struct br_boolopt_multi { |
841 | __u32 optval; |
842 | __u32 optmask; |
843 | }; |
844 | |
845 | enum { |
846 | BRIDGE_QUERIER_UNSPEC, |
847 | BRIDGE_QUERIER_IP_ADDRESS, |
848 | BRIDGE_QUERIER_IP_PORT, |
849 | BRIDGE_QUERIER_IP_OTHER_TIMER, |
850 | BRIDGE_QUERIER_PAD, |
851 | BRIDGE_QUERIER_IPV6_ADDRESS, |
852 | BRIDGE_QUERIER_IPV6_PORT, |
853 | BRIDGE_QUERIER_IPV6_OTHER_TIMER, |
854 | __BRIDGE_QUERIER_MAX |
855 | }; |
856 | #define BRIDGE_QUERIER_MAX (__BRIDGE_QUERIER_MAX - 1) |
857 | #endif /* _UAPI_LINUX_IF_BRIDGE_H */ |
858 | |