1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	Linux ethernet bridge
3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	Authors:
5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	Lennert Buytenhek		<buytenh@gnu.org>
6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	This program is free software; you can redistribute it and/or
8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	modify it under the terms of the GNU General Public License
9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	as published by the Free Software Foundation; either version
10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	2 of the License, or (at your option) any later version.
11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef _UAPI_LINUX_IF_BRIDGE_H
14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _UAPI_LINUX_IF_BRIDGE_H
15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h>
17e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#include <linux/if_ether.h>
187c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris#include <linux/in6.h>
19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SYSFS_BRIDGE_ATTR	"bridge"
21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SYSFS_BRIDGE_FDB	"brforward"
22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SYSFS_BRIDGE_PORT_SUBDIR "brif"
23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SYSFS_BRIDGE_PORT_ATTR	"brport"
24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SYSFS_BRIDGE_PORT_LINK	"bridge"
25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_VERSION 1
27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_GET_VERSION 0
29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_GET_BRIDGES 1
30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_ADD_BRIDGE 2
31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_DEL_BRIDGE 3
32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_ADD_IF 4
33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_DEL_IF 5
34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_GET_BRIDGE_INFO 6
35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_GET_PORT_LIST 7
36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_SET_BRIDGE_FORWARD_DELAY 8
37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_SET_BRIDGE_HELLO_TIME 9
38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_SET_BRIDGE_MAX_AGE 10
39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_SET_AGEING_TIME 11
40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_SET_GC_INTERVAL 12
41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_GET_PORT_INFO 13
42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_SET_BRIDGE_STP_STATE 14
43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_SET_BRIDGE_PRIORITY 15
44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_SET_PORT_PRIORITY 16
45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_SET_PATH_COST 17
46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRCTL_GET_FDB_ENTRIES 18
47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BR_STATE_DISABLED 0
49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BR_STATE_LISTENING 1
50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BR_STATE_LEARNING 2
51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BR_STATE_FORWARDING 3
52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BR_STATE_BLOCKING 4
53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct __bridge_info {
55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 designated_root;
56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 bridge_id;
57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 root_path_cost;
58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 max_age;
59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 hello_time;
60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 forward_delay;
61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 bridge_max_age;
62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 bridge_hello_time;
63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 bridge_forward_delay;
64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8 topology_change;
65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8 topology_change_detected;
66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8 root_port;
67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8 stp_enabled;
68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 ageing_time;
69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 gc_interval;
70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 hello_timer_value;
71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 tcn_timer_value;
72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 topology_change_timer_value;
73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 gc_timer_value;
74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct __port_info {
77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 designated_root;
78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 designated_bridge;
79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16 port_id;
80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16 designated_port;
81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 path_cost;
82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 designated_cost;
83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8 state;
84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8 top_change_ack;
85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8 config_pending;
86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8 unused0;
87224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 message_age_timer_value;
88224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 forward_delay_timer_value;
89224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 hold_timer_value;
90224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
91224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
92224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct __fdb_entry {
93e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	__u8 mac_addr[ETH_ALEN];
94224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8 port_no;
95224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8 is_local;
96224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 ageing_timer_value;
97224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8 port_hi;
98224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8 pad0;
99224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16 unused;
100224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
101224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
102224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Bridge Flags */
103224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRIDGE_FLAGS_MASTER	1	/* Bridge command to/from master */
104224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRIDGE_FLAGS_SELF	2	/* Bridge command to/from lowerdev */
105224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
106224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRIDGE_MODE_VEB		0	/* Default loopback mode */
107224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRIDGE_MODE_VEPA	1	/* 802.1Qbg defined VEPA mode */
108224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
109224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Bridge management nested attributes
110224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * [IFLA_AF_SPEC] = {
111224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *     [IFLA_BRIDGE_FLAGS]
112224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *     [IFLA_BRIDGE_MODE]
113224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *     [IFLA_BRIDGE_VLAN_INFO]
114224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * }
115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	IFLA_BRIDGE_FLAGS,
118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	IFLA_BRIDGE_MODE,
119224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	IFLA_BRIDGE_VLAN_INFO,
120224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__IFLA_BRIDGE_MAX,
121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define IFLA_BRIDGE_MAX (__IFLA_BRIDGE_MAX - 1)
123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRIDGE_VLAN_INFO_MASTER	(1<<0)	/* Operate on Bridge device as well */
125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRIDGE_VLAN_INFO_PVID	(1<<1)	/* VLAN is PVID, ingress untagged */
126224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define BRIDGE_VLAN_INFO_UNTAGGED	(1<<2)	/* VLAN egresses untagged */
127224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
128224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct bridge_vlan_info {
129224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16 flags;
130224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16 vid;
131224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
132224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Bridge multicast database attributes
134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * [MDBA_MDB] = {
135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *     [MDBA_MDB_ENTRY] = {
136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *         [MDBA_MDB_ENTRY_INFO]
137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *     }
138224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * }
139224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * [MDBA_ROUTER] = {
140224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *    [MDBA_ROUTER_PORT]
141224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * }
142224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
143224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
144224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	MDBA_UNSPEC,
145224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	MDBA_MDB,
146224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	MDBA_ROUTER,
147224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__MDBA_MAX,
148224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
149224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define MDBA_MAX (__MDBA_MAX - 1)
150224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
151224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
152224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	MDBA_MDB_UNSPEC,
153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	MDBA_MDB_ENTRY,
154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__MDBA_MDB_MAX,
155224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
156224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define MDBA_MDB_MAX (__MDBA_MDB_MAX - 1)
157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	MDBA_MDB_ENTRY_UNSPEC,
160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	MDBA_MDB_ENTRY_INFO,
161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__MDBA_MDB_ENTRY_MAX,
162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
163224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define MDBA_MDB_ENTRY_MAX (__MDBA_MDB_ENTRY_MAX - 1)
164224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
165224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
166224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	MDBA_ROUTER_UNSPEC,
167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	MDBA_ROUTER_PORT,
168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__MDBA_ROUTER_MAX,
169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define MDBA_ROUTER_MAX (__MDBA_ROUTER_MAX - 1)
171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
172224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct br_port_msg {
173224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8  family;
174224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 ifindex;
175224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
176224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
177224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct br_mdb_entry {
178224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 ifindex;
179224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define MDB_TEMPORARY 0
180224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define MDB_PERMANENT 1
181224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8 state;
182224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct {
183224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		union {
184224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			__be32	ip4;
185224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			struct in6_addr ip6;
186224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		} u;
187224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		__be16		proto;
188224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	} addr;
189224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
190224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
191224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
192224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	MDBA_SET_ENTRY_UNSPEC,
193224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	MDBA_SET_ENTRY,
194224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__MDBA_SET_ENTRY_MAX,
195224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
196224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define MDBA_SET_ENTRY_MAX (__MDBA_SET_ENTRY_MAX - 1)
197224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
198224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* _UAPI_LINUX_IF_BRIDGE_H */
199