bridge_linux.go 1.6 KB

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