1 /* SPDX-License-Identifier: LGPL-2.1-only */ 2 /* 3 * Copyright (c) 2013 Thomas Graf <[email protected]> 4 */ 5 6 #ifndef NETLINK_LINK_BRIDGE_H_ 7 #define NETLINK_LINK_BRIDGE_H_ 8 9 #include <netlink/netlink.h> 10 #include <netlink/route/link.h> 11 12 #ifdef __cplusplus 13 extern "C" { 14 #endif 15 16 #define RTNL_LINK_BRIDGE_VLAN_BITMAP_MAX 4096 17 #define RTNL_LINK_BRIDGE_VLAN_BITMAP_LEN (RTNL_LINK_BRIDGE_VLAN_BITMAP_MAX / 32) 18 19 struct rtnl_link_bridge_vlan 20 { 21 uint16_t pvid; 22 uint32_t vlan_bitmap[RTNL_LINK_BRIDGE_VLAN_BITMAP_LEN]; 23 uint32_t untagged_bitmap[RTNL_LINK_BRIDGE_VLAN_BITMAP_LEN]; 24 }; 25 26 /** 27 * Bridge flags 28 * @ingroup bridge 29 */ 30 enum rtnl_link_bridge_flags { 31 RTNL_BRIDGE_HAIRPIN_MODE = 0x0001, 32 RTNL_BRIDGE_BPDU_GUARD = 0x0002, 33 RTNL_BRIDGE_ROOT_BLOCK = 0x0004, 34 RTNL_BRIDGE_FAST_LEAVE = 0x0008, 35 RTNL_BRIDGE_UNICAST_FLOOD = 0x0010, 36 RTNL_BRIDGE_LEARNING = 0x0020, 37 RTNL_BRIDGE_LEARNING_SYNC = 0x0040, 38 }; 39 40 #define RTNL_BRIDGE_HWMODE_VEB BRIDGE_MODE_VEB 41 #define RTNL_BRIDGE_HWMODE_VEPA BRIDGE_MODE_VEPA 42 #define RTNL_BRIDGE_HWMODE_MAX BRIDGE_MODE_VEPA 43 #define RTNL_BRIDGE_HWMODE_UNDEF BRIDGE_MODE_UNDEF 44 45 extern struct rtnl_link *rtnl_link_bridge_alloc(void); 46 47 extern int rtnl_link_is_bridge(struct rtnl_link *); 48 extern int rtnl_link_bridge_has_ext_info(struct rtnl_link *); 49 50 extern int rtnl_link_bridge_set_port_state(struct rtnl_link *, uint8_t ); 51 extern int rtnl_link_bridge_get_port_state(struct rtnl_link *); 52 53 extern int rtnl_link_bridge_set_priority(struct rtnl_link *, uint16_t); 54 extern int rtnl_link_bridge_get_priority(struct rtnl_link *); 55 56 extern int rtnl_link_bridge_set_cost(struct rtnl_link *, uint32_t); 57 extern int rtnl_link_bridge_get_cost(struct rtnl_link *, uint32_t *); 58 59 extern int rtnl_link_bridge_unset_flags(struct rtnl_link *, unsigned int); 60 extern int rtnl_link_bridge_set_flags(struct rtnl_link *, unsigned int); 61 extern int rtnl_link_bridge_get_flags(struct rtnl_link *); 62 63 extern int rtnl_link_bridge_set_self(struct rtnl_link *); 64 extern int rtnl_link_bridge_set_master(struct rtnl_link *); 65 66 extern int rtnl_link_bridge_get_hwmode(struct rtnl_link *, uint16_t *); 67 extern int rtnl_link_bridge_set_hwmode(struct rtnl_link *, uint16_t); 68 69 extern char * rtnl_link_bridge_flags2str(int, char *, size_t); 70 extern int rtnl_link_bridge_str2flags(const char *); 71 72 extern char * rtnl_link_bridge_portstate2str(int, char *, size_t); 73 extern int rtnl_link_bridge_str2portstate(const char *); 74 75 extern char * rtnl_link_bridge_hwmode2str(uint16_t, char *, size_t); 76 extern uint16_t rtnl_link_bridge_str2hwmode(const char *); 77 78 extern int rtnl_link_bridge_add(struct nl_sock *sk, const char *name); 79 80 extern int rtnl_link_bridge_enable_vlan(struct rtnl_link *link); 81 extern int rtnl_link_bridge_set_port_vlan_map_range (struct rtnl_link *link, uint16_t start, uint16_t end, int untagged); 82 extern int rtnl_link_bridge_unset_port_vlan_map_range (struct rtnl_link *link, uint16_t start, uint16_t end); 83 extern int rtnl_link_bridge_set_port_vlan_pvid (struct rtnl_link *link, uint16_t pvid); 84 extern int rtnl_link_bridge_pvid(struct rtnl_link *link); 85 extern int rtnl_link_bridge_has_vlan(struct rtnl_link *link); 86 87 extern struct rtnl_link_bridge_vlan *rtnl_link_bridge_get_port_vlan(struct rtnl_link *link); 88 #ifdef __cplusplus 89 } 90 #endif 91 92 #endif 93 94