socket.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package netlink
  2. import "net"
  3. // SocketID identifies a single socket.
  4. type SocketID struct {
  5. SourcePort uint16
  6. DestinationPort uint16
  7. Source net.IP
  8. Destination net.IP
  9. Interface uint32
  10. Cookie [2]uint32
  11. }
  12. // Socket represents a netlink socket.
  13. type Socket struct {
  14. Family uint8
  15. State uint8
  16. Timer uint8
  17. Retrans uint8
  18. ID SocketID
  19. Expires uint32
  20. RQueue uint32
  21. WQueue uint32
  22. UID uint32
  23. INode uint32
  24. }
  25. // UnixSocket represents a netlink unix socket.
  26. type UnixSocket struct {
  27. Type uint8
  28. Family uint8
  29. State uint8
  30. pad uint8
  31. INode uint32
  32. Cookie [2]uint32
  33. }
  34. // XDPSocket represents an XDP socket (and the common diagnosis part in
  35. // particular). Please note that in contrast to [UnixSocket] the XDPSocket type
  36. // does not feature “State” information.
  37. type XDPSocket struct {
  38. // xdp_diag_msg
  39. // https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L21
  40. Family uint8
  41. Type uint8
  42. pad uint16
  43. Ino uint32
  44. Cookie [2]uint32
  45. }
  46. type XDPInfo struct {
  47. // XDP_DIAG_INFO/xdp_diag_info
  48. // https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L51
  49. Ifindex uint32
  50. QueueID uint32
  51. // XDP_DIAG_UID
  52. UID uint32
  53. // XDP_RX_RING
  54. // https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L56
  55. RxRingEntries uint32
  56. TxRingEntries uint32
  57. UmemFillRingEntries uint32
  58. UmemCompletionRingEntries uint32
  59. // XDR_DIAG_UMEM
  60. Umem *XDPDiagUmem
  61. // XDR_DIAG_STATS
  62. Stats *XDPDiagStats
  63. }
  64. const (
  65. XDP_DU_F_ZEROCOPY = 1 << iota
  66. )
  67. // XDPDiagUmem describes the umem attached to an XDP socket.
  68. //
  69. // https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L62
  70. type XDPDiagUmem struct {
  71. Size uint64
  72. ID uint32
  73. NumPages uint32
  74. ChunkSize uint32
  75. Headroom uint32
  76. Ifindex uint32
  77. QueueID uint32
  78. Flags uint32
  79. Refs uint32
  80. }
  81. // XDPDiagStats contains ring statistics for an XDP socket.
  82. //
  83. // https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L74
  84. type XDPDiagStats struct {
  85. RxDropped uint64
  86. RxInvalid uint64
  87. RxFull uint64
  88. FillRingEmpty uint64
  89. TxInvalid uint64
  90. TxRingEmpty uint64
  91. }