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, 1242469ffd7SJohn Fastabend __IFLA_BRIDGE_MAX, 1252469ffd7SJohn Fastabend }; 1262469ffd7SJohn Fastabend #define IFLA_BRIDGE_MAX (__IFLA_BRIDGE_MAX - 1) 127ee07c6e7SCong Wang 128407af329SVlad Yasevich #define BRIDGE_VLAN_INFO_MASTER (1<<0) /* Operate on Bridge device as well */ 129552406c4SVlad Yasevich #define BRIDGE_VLAN_INFO_PVID (1<<1) /* VLAN is PVID, ingress untagged */ 13035e03f3aSVlad Yasevich #define BRIDGE_VLAN_INFO_UNTAGGED (1<<2) /* VLAN egresses untagged */ 131bdced7efSRoopa Prabhu #define BRIDGE_VLAN_INFO_RANGE_BEGIN (1<<3) /* VLAN is start of vlan range */ 132bdced7efSRoopa Prabhu #define BRIDGE_VLAN_INFO_RANGE_END (1<<4) /* VLAN is end of vlan range */ 1332594e906SNikolay Aleksandrov #define BRIDGE_VLAN_INFO_BRENTRY (1<<5) /* Global bridge VLAN entry */ 134a5d29ae2SNikolay Aleksandrov #define BRIDGE_VLAN_INFO_ONLY_OPTS (1<<6) /* Skip create/delete/flags */ 135407af329SVlad Yasevich 136407af329SVlad Yasevich struct bridge_vlan_info { 1379f89ec82SCong Wang __u16 flags; 1389f89ec82SCong Wang __u16 vid; 139407af329SVlad Yasevich }; 140407af329SVlad Yasevich 141b3c7ef0aSRoopa Prabhu enum { 142b3c7ef0aSRoopa Prabhu IFLA_BRIDGE_VLAN_TUNNEL_UNSPEC, 143b3c7ef0aSRoopa Prabhu IFLA_BRIDGE_VLAN_TUNNEL_ID, 144b3c7ef0aSRoopa Prabhu IFLA_BRIDGE_VLAN_TUNNEL_VID, 145b3c7ef0aSRoopa Prabhu IFLA_BRIDGE_VLAN_TUNNEL_FLAGS, 146b3c7ef0aSRoopa Prabhu __IFLA_BRIDGE_VLAN_TUNNEL_MAX, 147b3c7ef0aSRoopa Prabhu }; 148b3c7ef0aSRoopa Prabhu 149b3c7ef0aSRoopa Prabhu #define IFLA_BRIDGE_VLAN_TUNNEL_MAX (__IFLA_BRIDGE_VLAN_TUNNEL_MAX - 1) 150b3c7ef0aSRoopa Prabhu 151a60c0903SNikolay Aleksandrov struct bridge_vlan_xstats { 152a60c0903SNikolay Aleksandrov __u64 rx_bytes; 153a60c0903SNikolay Aleksandrov __u64 rx_packets; 154a60c0903SNikolay Aleksandrov __u64 tx_bytes; 155a60c0903SNikolay Aleksandrov __u64 tx_packets; 156a60c0903SNikolay Aleksandrov __u16 vid; 15761ba1a2dSNikolay Aleksandrov __u16 flags; 158a60c0903SNikolay Aleksandrov __u32 pad2; 159a60c0903SNikolay Aleksandrov }; 160a60c0903SNikolay Aleksandrov 1614714d137SHoratiu Vultur enum { 1624714d137SHoratiu Vultur IFLA_BRIDGE_MRP_UNSPEC, 1634714d137SHoratiu Vultur IFLA_BRIDGE_MRP_INSTANCE, 1644714d137SHoratiu Vultur IFLA_BRIDGE_MRP_PORT_STATE, 1654714d137SHoratiu Vultur IFLA_BRIDGE_MRP_PORT_ROLE, 1664714d137SHoratiu Vultur IFLA_BRIDGE_MRP_RING_STATE, 1674714d137SHoratiu Vultur IFLA_BRIDGE_MRP_RING_ROLE, 1684714d137SHoratiu Vultur IFLA_BRIDGE_MRP_START_TEST, 1694714d137SHoratiu Vultur __IFLA_BRIDGE_MRP_MAX, 1704714d137SHoratiu Vultur }; 1714714d137SHoratiu Vultur 172*20f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_MAX (__IFLA_BRIDGE_MRP_MAX - 1) 173*20f6a05eSHoratiu Vultur 174*20f6a05eSHoratiu Vultur enum { 175*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_INSTANCE_UNSPEC, 176*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_INSTANCE_RING_ID, 177*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_INSTANCE_P_IFINDEX, 178*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_INSTANCE_S_IFINDEX, 179*20f6a05eSHoratiu Vultur __IFLA_BRIDGE_MRP_INSTANCE_MAX, 180*20f6a05eSHoratiu Vultur }; 181*20f6a05eSHoratiu Vultur 182*20f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_INSTANCE_MAX (__IFLA_BRIDGE_MRP_INSTANCE_MAX - 1) 183*20f6a05eSHoratiu Vultur 184*20f6a05eSHoratiu Vultur enum { 185*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_PORT_STATE_UNSPEC, 186*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_PORT_STATE_STATE, 187*20f6a05eSHoratiu Vultur __IFLA_BRIDGE_MRP_PORT_STATE_MAX, 188*20f6a05eSHoratiu Vultur }; 189*20f6a05eSHoratiu Vultur 190*20f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_PORT_STATE_MAX (__IFLA_BRIDGE_MRP_PORT_STATE_MAX - 1) 191*20f6a05eSHoratiu Vultur 192*20f6a05eSHoratiu Vultur enum { 193*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_PORT_ROLE_UNSPEC, 194*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_PORT_ROLE_ROLE, 195*20f6a05eSHoratiu Vultur __IFLA_BRIDGE_MRP_PORT_ROLE_MAX, 196*20f6a05eSHoratiu Vultur }; 197*20f6a05eSHoratiu Vultur 198*20f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_PORT_ROLE_MAX (__IFLA_BRIDGE_MRP_PORT_ROLE_MAX - 1) 199*20f6a05eSHoratiu Vultur 200*20f6a05eSHoratiu Vultur enum { 201*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_RING_STATE_UNSPEC, 202*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_RING_STATE_RING_ID, 203*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_RING_STATE_STATE, 204*20f6a05eSHoratiu Vultur __IFLA_BRIDGE_MRP_RING_STATE_MAX, 205*20f6a05eSHoratiu Vultur }; 206*20f6a05eSHoratiu Vultur 207*20f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_RING_STATE_MAX (__IFLA_BRIDGE_MRP_RING_STATE_MAX - 1) 208*20f6a05eSHoratiu Vultur 209*20f6a05eSHoratiu Vultur enum { 210*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_RING_ROLE_UNSPEC, 211*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_RING_ROLE_RING_ID, 212*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_RING_ROLE_ROLE, 213*20f6a05eSHoratiu Vultur __IFLA_BRIDGE_MRP_RING_ROLE_MAX, 214*20f6a05eSHoratiu Vultur }; 215*20f6a05eSHoratiu Vultur 216*20f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_RING_ROLE_MAX (__IFLA_BRIDGE_MRP_RING_ROLE_MAX - 1) 217*20f6a05eSHoratiu Vultur 218*20f6a05eSHoratiu Vultur enum { 219*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_START_TEST_UNSPEC, 220*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_START_TEST_RING_ID, 221*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_START_TEST_INTERVAL, 222*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_START_TEST_MAX_MISS, 223*20f6a05eSHoratiu Vultur IFLA_BRIDGE_MRP_START_TEST_PERIOD, 224*20f6a05eSHoratiu Vultur __IFLA_BRIDGE_MRP_START_TEST_MAX, 225*20f6a05eSHoratiu Vultur }; 226*20f6a05eSHoratiu Vultur 227*20f6a05eSHoratiu Vultur #define IFLA_BRIDGE_MRP_START_TEST_MAX (__IFLA_BRIDGE_MRP_START_TEST_MAX - 1) 228*20f6a05eSHoratiu Vultur 2294714d137SHoratiu Vultur struct br_mrp_instance { 2304714d137SHoratiu Vultur __u32 ring_id; 2314714d137SHoratiu Vultur __u32 p_ifindex; 2324714d137SHoratiu Vultur __u32 s_ifindex; 2334714d137SHoratiu Vultur }; 2344714d137SHoratiu Vultur 2354714d137SHoratiu Vultur struct br_mrp_ring_state { 2364714d137SHoratiu Vultur __u32 ring_id; 2374714d137SHoratiu Vultur __u32 ring_state; 2384714d137SHoratiu Vultur }; 2394714d137SHoratiu Vultur 2404714d137SHoratiu Vultur struct br_mrp_ring_role { 2414714d137SHoratiu Vultur __u32 ring_id; 2424714d137SHoratiu Vultur __u32 ring_role; 2434714d137SHoratiu Vultur }; 2444714d137SHoratiu Vultur 2454714d137SHoratiu Vultur struct br_mrp_start_test { 2464714d137SHoratiu Vultur __u32 ring_id; 2474714d137SHoratiu Vultur __u32 interval; 2484714d137SHoratiu Vultur __u32 max_miss; 2494714d137SHoratiu Vultur __u32 period; 2504714d137SHoratiu Vultur }; 2514714d137SHoratiu Vultur 252de179966SVivien Didelot struct bridge_stp_xstats { 253de179966SVivien Didelot __u64 transition_blk; 254de179966SVivien Didelot __u64 transition_fwd; 255de179966SVivien Didelot __u64 rx_bpdu; 256de179966SVivien Didelot __u64 tx_bpdu; 257de179966SVivien Didelot __u64 rx_tcn; 258de179966SVivien Didelot __u64 tx_tcn; 259de179966SVivien Didelot }; 260de179966SVivien Didelot 2618dcea187SNikolay Aleksandrov /* Bridge vlan RTM header */ 2628dcea187SNikolay Aleksandrov struct br_vlan_msg { 2638dcea187SNikolay Aleksandrov __u8 family; 2648dcea187SNikolay Aleksandrov __u8 reserved1; 2658dcea187SNikolay Aleksandrov __u16 reserved2; 2668dcea187SNikolay Aleksandrov __u32 ifindex; 2678dcea187SNikolay Aleksandrov }; 2688dcea187SNikolay Aleksandrov 26956d09976SNikolay Aleksandrov enum { 27056d09976SNikolay Aleksandrov BRIDGE_VLANDB_DUMP_UNSPEC, 27156d09976SNikolay Aleksandrov BRIDGE_VLANDB_DUMP_FLAGS, 27256d09976SNikolay Aleksandrov __BRIDGE_VLANDB_DUMP_MAX, 27356d09976SNikolay Aleksandrov }; 27456d09976SNikolay Aleksandrov #define BRIDGE_VLANDB_DUMP_MAX (__BRIDGE_VLANDB_DUMP_MAX - 1) 27556d09976SNikolay Aleksandrov 27656d09976SNikolay Aleksandrov /* flags used in BRIDGE_VLANDB_DUMP_FLAGS attribute to affect dumps */ 27756d09976SNikolay Aleksandrov #define BRIDGE_VLANDB_DUMPF_STATS (1 << 0) /* Include stats in the dump */ 27856d09976SNikolay Aleksandrov 2798dcea187SNikolay Aleksandrov /* Bridge vlan RTM attributes 2808dcea187SNikolay Aleksandrov * [BRIDGE_VLANDB_ENTRY] = { 2818dcea187SNikolay Aleksandrov * [BRIDGE_VLANDB_ENTRY_INFO] 2828dcea187SNikolay Aleksandrov * ... 2838dcea187SNikolay Aleksandrov * } 2848dcea187SNikolay Aleksandrov */ 2858dcea187SNikolay Aleksandrov enum { 2868dcea187SNikolay Aleksandrov BRIDGE_VLANDB_UNSPEC, 2878dcea187SNikolay Aleksandrov BRIDGE_VLANDB_ENTRY, 2888dcea187SNikolay Aleksandrov __BRIDGE_VLANDB_MAX, 2898dcea187SNikolay Aleksandrov }; 2908dcea187SNikolay Aleksandrov #define BRIDGE_VLANDB_MAX (__BRIDGE_VLANDB_MAX - 1) 2918dcea187SNikolay Aleksandrov 2928dcea187SNikolay Aleksandrov enum { 2938dcea187SNikolay Aleksandrov BRIDGE_VLANDB_ENTRY_UNSPEC, 2948dcea187SNikolay Aleksandrov BRIDGE_VLANDB_ENTRY_INFO, 2950ab55879SNikolay Aleksandrov BRIDGE_VLANDB_ENTRY_RANGE, 296a580c76dSNikolay Aleksandrov BRIDGE_VLANDB_ENTRY_STATE, 297fa388f29SNikolay Aleksandrov BRIDGE_VLANDB_ENTRY_TUNNEL_INFO, 29856d09976SNikolay Aleksandrov BRIDGE_VLANDB_ENTRY_STATS, 2998dcea187SNikolay Aleksandrov __BRIDGE_VLANDB_ENTRY_MAX, 3008dcea187SNikolay Aleksandrov }; 3018dcea187SNikolay Aleksandrov #define BRIDGE_VLANDB_ENTRY_MAX (__BRIDGE_VLANDB_ENTRY_MAX - 1) 3028dcea187SNikolay Aleksandrov 30356d09976SNikolay Aleksandrov /* [BRIDGE_VLANDB_ENTRY] = { 304fa388f29SNikolay Aleksandrov * [BRIDGE_VLANDB_ENTRY_TUNNEL_INFO] = { 305fa388f29SNikolay Aleksandrov * [BRIDGE_VLANDB_TINFO_ID] 306fa388f29SNikolay Aleksandrov * ... 307fa388f29SNikolay Aleksandrov * } 308fa388f29SNikolay Aleksandrov * } 309fa388f29SNikolay Aleksandrov */ 310fa388f29SNikolay Aleksandrov enum { 311fa388f29SNikolay Aleksandrov BRIDGE_VLANDB_TINFO_UNSPEC, 312fa388f29SNikolay Aleksandrov BRIDGE_VLANDB_TINFO_ID, 313c443758bSNikolay Aleksandrov BRIDGE_VLANDB_TINFO_CMD, 314fa388f29SNikolay Aleksandrov __BRIDGE_VLANDB_TINFO_MAX, 315fa388f29SNikolay Aleksandrov }; 316fa388f29SNikolay Aleksandrov #define BRIDGE_VLANDB_TINFO_MAX (__BRIDGE_VLANDB_TINFO_MAX - 1) 317fa388f29SNikolay Aleksandrov 318fa388f29SNikolay Aleksandrov /* [BRIDGE_VLANDB_ENTRY] = { 31956d09976SNikolay Aleksandrov * [BRIDGE_VLANDB_ENTRY_STATS] = { 32056d09976SNikolay Aleksandrov * [BRIDGE_VLANDB_STATS_RX_BYTES] 32156d09976SNikolay Aleksandrov * ... 32256d09976SNikolay Aleksandrov * } 32356d09976SNikolay Aleksandrov * ... 32456d09976SNikolay Aleksandrov * } 32556d09976SNikolay Aleksandrov */ 32656d09976SNikolay Aleksandrov enum { 32756d09976SNikolay Aleksandrov BRIDGE_VLANDB_STATS_UNSPEC, 32856d09976SNikolay Aleksandrov BRIDGE_VLANDB_STATS_RX_BYTES, 32956d09976SNikolay Aleksandrov BRIDGE_VLANDB_STATS_RX_PACKETS, 33056d09976SNikolay Aleksandrov BRIDGE_VLANDB_STATS_TX_BYTES, 33156d09976SNikolay Aleksandrov BRIDGE_VLANDB_STATS_TX_PACKETS, 33256d09976SNikolay Aleksandrov BRIDGE_VLANDB_STATS_PAD, 33356d09976SNikolay Aleksandrov __BRIDGE_VLANDB_STATS_MAX, 33456d09976SNikolay Aleksandrov }; 33556d09976SNikolay Aleksandrov #define BRIDGE_VLANDB_STATS_MAX (__BRIDGE_VLANDB_STATS_MAX - 1) 33656d09976SNikolay Aleksandrov 337ee07c6e7SCong Wang /* Bridge multicast database attributes 338ee07c6e7SCong Wang * [MDBA_MDB] = { 339ee07c6e7SCong Wang * [MDBA_MDB_ENTRY] = { 34021257156SNikolay Aleksandrov * [MDBA_MDB_ENTRY_INFO] { 34121257156SNikolay Aleksandrov * struct br_mdb_entry 34221257156SNikolay Aleksandrov * [MDBA_MDB_EATTR attributes] 34321257156SNikolay Aleksandrov * } 344ee07c6e7SCong Wang * } 345ee07c6e7SCong Wang * } 346ee07c6e7SCong Wang * [MDBA_ROUTER] = { 34759f78f9fSNikolay Aleksandrov * [MDBA_ROUTER_PORT] = { 34859f78f9fSNikolay Aleksandrov * u32 ifindex 34959f78f9fSNikolay Aleksandrov * [MDBA_ROUTER_PATTR attributes] 35059f78f9fSNikolay Aleksandrov * } 351ee07c6e7SCong Wang * } 352ee07c6e7SCong Wang */ 353ee07c6e7SCong Wang enum { 354ee07c6e7SCong Wang MDBA_UNSPEC, 355ee07c6e7SCong Wang MDBA_MDB, 356ee07c6e7SCong Wang MDBA_ROUTER, 357ee07c6e7SCong Wang __MDBA_MAX, 358ee07c6e7SCong Wang }; 359ee07c6e7SCong Wang #define MDBA_MAX (__MDBA_MAX - 1) 360ee07c6e7SCong Wang 361ee07c6e7SCong Wang enum { 362ee07c6e7SCong Wang MDBA_MDB_UNSPEC, 363ee07c6e7SCong Wang MDBA_MDB_ENTRY, 364ee07c6e7SCong Wang __MDBA_MDB_MAX, 365ee07c6e7SCong Wang }; 366ee07c6e7SCong Wang #define MDBA_MDB_MAX (__MDBA_MDB_MAX - 1) 367ee07c6e7SCong Wang 368ee07c6e7SCong Wang enum { 369ee07c6e7SCong Wang MDBA_MDB_ENTRY_UNSPEC, 370ee07c6e7SCong Wang MDBA_MDB_ENTRY_INFO, 371ee07c6e7SCong Wang __MDBA_MDB_ENTRY_MAX, 372ee07c6e7SCong Wang }; 373ee07c6e7SCong Wang #define MDBA_MDB_ENTRY_MAX (__MDBA_MDB_ENTRY_MAX - 1) 374ee07c6e7SCong Wang 37521257156SNikolay Aleksandrov /* per mdb entry additional attributes */ 37621257156SNikolay Aleksandrov enum { 37721257156SNikolay Aleksandrov MDBA_MDB_EATTR_UNSPEC, 37821257156SNikolay Aleksandrov MDBA_MDB_EATTR_TIMER, 37921257156SNikolay Aleksandrov __MDBA_MDB_EATTR_MAX 38021257156SNikolay Aleksandrov }; 38121257156SNikolay Aleksandrov #define MDBA_MDB_EATTR_MAX (__MDBA_MDB_EATTR_MAX - 1) 38221257156SNikolay Aleksandrov 3837f0aec7aSNikolay Aleksandrov /* multicast router types */ 3847f0aec7aSNikolay Aleksandrov enum { 3857f0aec7aSNikolay Aleksandrov MDB_RTR_TYPE_DISABLED, 3867f0aec7aSNikolay Aleksandrov MDB_RTR_TYPE_TEMP_QUERY, 3877f0aec7aSNikolay Aleksandrov MDB_RTR_TYPE_PERM, 388a55d8246SNikolay Aleksandrov MDB_RTR_TYPE_TEMP 3897f0aec7aSNikolay Aleksandrov }; 3907f0aec7aSNikolay Aleksandrov 391ee07c6e7SCong Wang enum { 392ee07c6e7SCong Wang MDBA_ROUTER_UNSPEC, 393ee07c6e7SCong Wang MDBA_ROUTER_PORT, 394ee07c6e7SCong Wang __MDBA_ROUTER_MAX, 395ee07c6e7SCong Wang }; 396ee07c6e7SCong Wang #define MDBA_ROUTER_MAX (__MDBA_ROUTER_MAX - 1) 397ee07c6e7SCong Wang 39859f78f9fSNikolay Aleksandrov /* router port attributes */ 39959f78f9fSNikolay Aleksandrov enum { 40059f78f9fSNikolay Aleksandrov MDBA_ROUTER_PATTR_UNSPEC, 40159f78f9fSNikolay Aleksandrov MDBA_ROUTER_PATTR_TIMER, 40259f78f9fSNikolay Aleksandrov MDBA_ROUTER_PATTR_TYPE, 40359f78f9fSNikolay Aleksandrov __MDBA_ROUTER_PATTR_MAX 40459f78f9fSNikolay Aleksandrov }; 40559f78f9fSNikolay Aleksandrov #define MDBA_ROUTER_PATTR_MAX (__MDBA_ROUTER_PATTR_MAX - 1) 40659f78f9fSNikolay Aleksandrov 407ee07c6e7SCong Wang struct br_port_msg { 408cfd56754SCong Wang __u8 family; 409ee07c6e7SCong Wang __u32 ifindex; 410ee07c6e7SCong Wang }; 411ee07c6e7SCong Wang 412ee07c6e7SCong Wang struct br_mdb_entry { 413ee07c6e7SCong Wang __u32 ifindex; 414ccb1c31aSAmerigo Wang #define MDB_TEMPORARY 0 415ccb1c31aSAmerigo Wang #define MDB_PERMANENT 1 416ccb1c31aSAmerigo Wang __u8 state; 417157ede67SElad Raz #define MDB_FLAGS_OFFLOAD (1 << 0) 4183247b272SNikolay Aleksandrov #define MDB_FLAGS_FAST_LEAVE (1 << 1) 419157ede67SElad Raz __u8 flags; 42074fe61f1SNikolay Aleksandrov __u16 vid; 421ee07c6e7SCong Wang struct { 422ee07c6e7SCong Wang union { 423ee07c6e7SCong Wang __be32 ip4; 424ee07c6e7SCong Wang struct in6_addr ip6; 425ee07c6e7SCong Wang } u; 426ee07c6e7SCong Wang __be16 proto; 427ee07c6e7SCong Wang } addr; 428ee07c6e7SCong Wang }; 429ee07c6e7SCong Wang 430cfd56754SCong Wang enum { 431cfd56754SCong Wang MDBA_SET_ENTRY_UNSPEC, 432cfd56754SCong Wang MDBA_SET_ENTRY, 433cfd56754SCong Wang __MDBA_SET_ENTRY_MAX, 434cfd56754SCong Wang }; 435cfd56754SCong Wang #define MDBA_SET_ENTRY_MAX (__MDBA_SET_ENTRY_MAX - 1) 436cfd56754SCong Wang 437a60c0903SNikolay Aleksandrov /* Embedded inside LINK_XSTATS_TYPE_BRIDGE */ 438a60c0903SNikolay Aleksandrov enum { 439a60c0903SNikolay Aleksandrov BRIDGE_XSTATS_UNSPEC, 440a60c0903SNikolay Aleksandrov BRIDGE_XSTATS_VLAN, 4411080ab95SNikolay Aleksandrov BRIDGE_XSTATS_MCAST, 4421080ab95SNikolay Aleksandrov BRIDGE_XSTATS_PAD, 443de179966SVivien Didelot BRIDGE_XSTATS_STP, 444a60c0903SNikolay Aleksandrov __BRIDGE_XSTATS_MAX 445a60c0903SNikolay Aleksandrov }; 446a60c0903SNikolay Aleksandrov #define BRIDGE_XSTATS_MAX (__BRIDGE_XSTATS_MAX - 1) 447a60c0903SNikolay Aleksandrov 4481080ab95SNikolay Aleksandrov enum { 4491080ab95SNikolay Aleksandrov BR_MCAST_DIR_RX, 4501080ab95SNikolay Aleksandrov BR_MCAST_DIR_TX, 4511080ab95SNikolay Aleksandrov BR_MCAST_DIR_SIZE 4521080ab95SNikolay Aleksandrov }; 4531080ab95SNikolay Aleksandrov 4541080ab95SNikolay Aleksandrov /* IGMP/MLD statistics */ 4551080ab95SNikolay Aleksandrov struct br_mcast_stats { 456a65056ecSNikolay Aleksandrov __u64 igmp_v1queries[BR_MCAST_DIR_SIZE]; 457a65056ecSNikolay Aleksandrov __u64 igmp_v2queries[BR_MCAST_DIR_SIZE]; 458a65056ecSNikolay Aleksandrov __u64 igmp_v3queries[BR_MCAST_DIR_SIZE]; 4591080ab95SNikolay Aleksandrov __u64 igmp_leaves[BR_MCAST_DIR_SIZE]; 4601080ab95SNikolay Aleksandrov __u64 igmp_v1reports[BR_MCAST_DIR_SIZE]; 4611080ab95SNikolay Aleksandrov __u64 igmp_v2reports[BR_MCAST_DIR_SIZE]; 4621080ab95SNikolay Aleksandrov __u64 igmp_v3reports[BR_MCAST_DIR_SIZE]; 4631080ab95SNikolay Aleksandrov __u64 igmp_parse_errors; 4641080ab95SNikolay Aleksandrov 465a65056ecSNikolay Aleksandrov __u64 mld_v1queries[BR_MCAST_DIR_SIZE]; 466a65056ecSNikolay Aleksandrov __u64 mld_v2queries[BR_MCAST_DIR_SIZE]; 4671080ab95SNikolay Aleksandrov __u64 mld_leaves[BR_MCAST_DIR_SIZE]; 4681080ab95SNikolay Aleksandrov __u64 mld_v1reports[BR_MCAST_DIR_SIZE]; 4691080ab95SNikolay Aleksandrov __u64 mld_v2reports[BR_MCAST_DIR_SIZE]; 4701080ab95SNikolay Aleksandrov __u64 mld_parse_errors; 4711080ab95SNikolay Aleksandrov 4721080ab95SNikolay Aleksandrov __u64 mcast_bytes[BR_MCAST_DIR_SIZE]; 4731080ab95SNikolay Aleksandrov __u64 mcast_packets[BR_MCAST_DIR_SIZE]; 4741080ab95SNikolay Aleksandrov }; 475a428afe8SNikolay Aleksandrov 476a428afe8SNikolay Aleksandrov /* bridge boolean options 47770e4272bSNikolay Aleksandrov * BR_BOOLOPT_NO_LL_LEARN - disable learning from link-local packets 47870e4272bSNikolay Aleksandrov * 479a428afe8SNikolay Aleksandrov * IMPORTANT: if adding a new option do not forget to handle 480a428afe8SNikolay Aleksandrov * it in br_boolopt_toggle/get and bridge sysfs 481a428afe8SNikolay Aleksandrov */ 482a428afe8SNikolay Aleksandrov enum br_boolopt_id { 48370e4272bSNikolay Aleksandrov BR_BOOLOPT_NO_LL_LEARN, 484a428afe8SNikolay Aleksandrov BR_BOOLOPT_MAX 485a428afe8SNikolay Aleksandrov }; 486a428afe8SNikolay Aleksandrov 487a428afe8SNikolay Aleksandrov /* struct br_boolopt_multi - change multiple bridge boolean options 488a428afe8SNikolay Aleksandrov * 489a428afe8SNikolay Aleksandrov * @optval: new option values (bit per option) 490a428afe8SNikolay Aleksandrov * @optmask: options to change (bit per option) 491a428afe8SNikolay Aleksandrov */ 492a428afe8SNikolay Aleksandrov struct br_boolopt_multi { 493a428afe8SNikolay Aleksandrov __u32 optval; 494a428afe8SNikolay Aleksandrov __u32 optmask; 495a428afe8SNikolay Aleksandrov }; 496607ca46eSDavid Howells #endif /* _UAPI_LINUX_IF_BRIDGE_H */ 497