mirror of https://github.com/containers/podman.git
				
				
				
			
		
			
				
	
	
		
			105 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
| package netlink
 | |
| 
 | |
| import "net"
 | |
| 
 | |
| // SocketID identifies a single socket.
 | |
| type SocketID struct {
 | |
| 	SourcePort      uint16
 | |
| 	DestinationPort uint16
 | |
| 	Source          net.IP
 | |
| 	Destination     net.IP
 | |
| 	Interface       uint32
 | |
| 	Cookie          [2]uint32
 | |
| }
 | |
| 
 | |
| // Socket represents a netlink socket.
 | |
| type Socket struct {
 | |
| 	Family  uint8
 | |
| 	State   uint8
 | |
| 	Timer   uint8
 | |
| 	Retrans uint8
 | |
| 	ID      SocketID
 | |
| 	Expires uint32
 | |
| 	RQueue  uint32
 | |
| 	WQueue  uint32
 | |
| 	UID     uint32
 | |
| 	INode   uint32
 | |
| }
 | |
| 
 | |
| // UnixSocket represents a netlink unix socket.
 | |
| type UnixSocket struct {
 | |
| 	Type   uint8
 | |
| 	Family uint8
 | |
| 	State  uint8
 | |
| 	pad    uint8
 | |
| 	INode  uint32
 | |
| 	Cookie [2]uint32
 | |
| }
 | |
| 
 | |
| // XDPSocket represents an XDP socket (and the common diagnosis part in
 | |
| // particular). Please note that in contrast to [UnixSocket] the XDPSocket type
 | |
| // does not feature “State” information.
 | |
| type XDPSocket struct {
 | |
| 	// xdp_diag_msg
 | |
| 	// https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L21
 | |
| 	Family uint8
 | |
| 	Type   uint8
 | |
| 	pad    uint16
 | |
| 	Ino    uint32
 | |
| 	Cookie [2]uint32
 | |
| }
 | |
| 
 | |
| type XDPInfo struct {
 | |
| 	// XDP_DIAG_INFO/xdp_diag_info
 | |
| 	// https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L51
 | |
| 	Ifindex uint32
 | |
| 	QueueID uint32
 | |
| 
 | |
| 	// XDP_DIAG_UID
 | |
| 	UID uint32
 | |
| 
 | |
| 	// XDP_RX_RING
 | |
| 	// https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L56
 | |
| 	RxRingEntries             uint32
 | |
| 	TxRingEntries             uint32
 | |
| 	UmemFillRingEntries       uint32
 | |
| 	UmemCompletionRingEntries uint32
 | |
| 
 | |
| 	// XDR_DIAG_UMEM
 | |
| 	Umem *XDPDiagUmem
 | |
| 
 | |
| 	// XDR_DIAG_STATS
 | |
| 	Stats *XDPDiagStats
 | |
| }
 | |
| 
 | |
| const (
 | |
| 	XDP_DU_F_ZEROCOPY = 1 << iota
 | |
| )
 | |
| 
 | |
| // XDPDiagUmem describes the umem attached to an XDP socket.
 | |
| //
 | |
| // https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L62
 | |
| type XDPDiagUmem struct {
 | |
| 	Size      uint64
 | |
| 	ID        uint32
 | |
| 	NumPages  uint32
 | |
| 	ChunkSize uint32
 | |
| 	Headroom  uint32
 | |
| 	Ifindex   uint32
 | |
| 	QueueID   uint32
 | |
| 	Flags     uint32
 | |
| 	Refs      uint32
 | |
| }
 | |
| 
 | |
| // XDPDiagStats contains ring statistics for an XDP socket.
 | |
| //
 | |
| // https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L74
 | |
| type XDPDiagStats struct {
 | |
| 	RxDropped     uint64
 | |
| 	RxInvalid     uint64
 | |
| 	RxFull        uint64
 | |
| 	FillRingEmpty uint64
 | |
| 	TxInvalid     uint64
 | |
| 	TxRingEmpty   uint64
 | |
| }
 |