github.com/vishvananda/netlink@v1.3.1/nl/bridge_linux.go (about) 1 package nl 2 3 import ( 4 "fmt" 5 "unsafe" 6 ) 7 8 const ( 9 SizeofBridgeVlanInfo = 0x04 10 ) 11 12 /* Bridge Flags */ 13 const ( 14 BRIDGE_FLAGS_MASTER = iota + 1 /* Bridge command to/from master */ 15 BRIDGE_FLAGS_SELF /* Bridge command to/from lowerdev */ 16 ) 17 18 /* Bridge management nested attributes 19 * [IFLA_AF_SPEC] = { 20 * [IFLA_BRIDGE_FLAGS] 21 * [IFLA_BRIDGE_MODE] 22 * [IFLA_BRIDGE_VLAN_INFO] 23 * } 24 */ 25 const ( 26 IFLA_BRIDGE_FLAGS = iota 27 IFLA_BRIDGE_MODE 28 IFLA_BRIDGE_VLAN_INFO 29 IFLA_BRIDGE_VLAN_TUNNEL_INFO 30 ) 31 32 const ( 33 IFLA_BRIDGE_VLAN_TUNNEL_UNSPEC = iota 34 IFLA_BRIDGE_VLAN_TUNNEL_ID 35 IFLA_BRIDGE_VLAN_TUNNEL_VID 36 IFLA_BRIDGE_VLAN_TUNNEL_FLAGS 37 ) 38 39 const ( 40 BRIDGE_VLAN_INFO_MASTER = 1 << iota 41 BRIDGE_VLAN_INFO_PVID 42 BRIDGE_VLAN_INFO_UNTAGGED 43 BRIDGE_VLAN_INFO_RANGE_BEGIN 44 BRIDGE_VLAN_INFO_RANGE_END 45 ) 46 47 // struct bridge_vlan_info { 48 // __u16 flags; 49 // __u16 vid; 50 // }; 51 52 type TunnelInfo struct { 53 TunId uint32 54 Vid uint16 55 } 56 57 type BridgeVlanInfo struct { 58 Flags uint16 59 Vid uint16 60 } 61 62 func (b *BridgeVlanInfo) Serialize() []byte { 63 return (*(*[SizeofBridgeVlanInfo]byte)(unsafe.Pointer(b)))[:] 64 } 65 66 func DeserializeBridgeVlanInfo(b []byte) *BridgeVlanInfo { 67 return (*BridgeVlanInfo)(unsafe.Pointer(&b[0:SizeofBridgeVlanInfo][0])) 68 } 69 70 func (b *BridgeVlanInfo) PortVID() bool { 71 return b.Flags&BRIDGE_VLAN_INFO_PVID > 0 72 } 73 74 func (b *BridgeVlanInfo) EngressUntag() bool { 75 return b.Flags&BRIDGE_VLAN_INFO_UNTAGGED > 0 76 } 77 78 func (b *BridgeVlanInfo) String() string { 79 return fmt.Sprintf("%+v", *b) 80 } 81 82 /* New extended info filters for IFLA_EXT_MASK */ 83 const ( 84 RTEXT_FILTER_VF = 1 << iota 85 RTEXT_FILTER_BRVLAN 86 RTEXT_FILTER_BRVLAN_COMPRESSED 87 )