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