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  )