package nl import ( "fmt" "unsafe" ) const ( SizeofBridgeVlanInfo = 0x04 ) /* Bridge Flags */ const ( BRIDGE_FLAGS_MASTER = iota /* Bridge command to/from master */ BRIDGE_FLAGS_SELF /* Bridge command to/from lowerdev */ ) /* Bridge management nested attributes * [IFLA_AF_SPEC] = { * [IFLA_BRIDGE_FLAGS] * [IFLA_BRIDGE_MODE] * [IFLA_BRIDGE_VLAN_INFO] * } */ const ( IFLA_BRIDGE_FLAGS = iota IFLA_BRIDGE_MODE IFLA_BRIDGE_VLAN_INFO ) const ( BRIDGE_VLAN_INFO_MASTER = 1 << iota BRIDGE_VLAN_INFO_PVID BRIDGE_VLAN_INFO_UNTAGGED BRIDGE_VLAN_INFO_RANGE_BEGIN BRIDGE_VLAN_INFO_RANGE_END ) // struct bridge_vlan_info { // __u16 flags; // __u16 vid; // }; type BridgeVlanInfo struct { Flags uint16 Vid uint16 } func (b *BridgeVlanInfo) Serialize() []byte { return (*(*[SizeofBridgeVlanInfo]byte)(unsafe.Pointer(b)))[:] } func DeserializeBridgeVlanInfo(b []byte) *BridgeVlanInfo { return (*BridgeVlanInfo)(unsafe.Pointer(&b[0:SizeofBridgeVlanInfo][0])) } func (b *BridgeVlanInfo) PortVID() bool { return b.Flags&BRIDGE_VLAN_INFO_PVID > 0 } func (b *BridgeVlanInfo) EngressUntag() bool { return b.Flags&BRIDGE_VLAN_INFO_UNTAGGED > 0 } func (b *BridgeVlanInfo) String() string { return fmt.Sprintf("%+v", *b) } /* New extended info filters for IFLA_EXT_MASK */ const ( RTEXT_FILTER_VF = 1 << iota RTEXT_FILTER_BRVLAN RTEXT_FILTER_BRVLAN_COMPRESSED )