forked from github/multus-cni
gomodule is still in progress to migrate for now, hence multus team decide to keep vendor directory to support build without gomodule.
75 lines
1.4 KiB
Go
75 lines
1.4 KiB
Go
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
|
|
)
|