* Bump k8s.io/cri-api to latest version - v0.23.0-alpha.4 * Vendor github.com/vishvananda/netlink for network stats Signed-off-by: David Porter <porterdavid@google.com>
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package netlink
 | 
						|
 | 
						|
import (
 | 
						|
	"syscall"
 | 
						|
	"unsafe"
 | 
						|
 | 
						|
	"golang.org/x/sys/unix"
 | 
						|
)
 | 
						|
 | 
						|
// ioctl for statistics.
 | 
						|
const (
 | 
						|
	// ETHTOOL_GSSET_INFO gets string set info
 | 
						|
	ETHTOOL_GSSET_INFO = 0x00000037
 | 
						|
	// SIOCETHTOOL is Ethtool interface
 | 
						|
	SIOCETHTOOL = 0x8946
 | 
						|
	// ETHTOOL_GSTRINGS gets specified string set
 | 
						|
	ETHTOOL_GSTRINGS = 0x0000001b
 | 
						|
	// ETHTOOL_GSTATS gets NIC-specific statistics
 | 
						|
	ETHTOOL_GSTATS = 0x0000001d
 | 
						|
)
 | 
						|
 | 
						|
// string set id.
 | 
						|
const (
 | 
						|
	// ETH_SS_TEST is self-test result names, for use with %ETHTOOL_TEST
 | 
						|
	ETH_SS_TEST = iota
 | 
						|
	// ETH_SS_STATS statistic names, for use with %ETHTOOL_GSTATS
 | 
						|
	ETH_SS_STATS
 | 
						|
	// ETH_SS_PRIV_FLAGS are driver private flag names
 | 
						|
	ETH_SS_PRIV_FLAGS
 | 
						|
	// _ETH_SS_NTUPLE_FILTERS is deprecated
 | 
						|
	_ETH_SS_NTUPLE_FILTERS
 | 
						|
	// ETH_SS_FEATURES are device feature names
 | 
						|
	ETH_SS_FEATURES
 | 
						|
	// ETH_SS_RSS_HASH_FUNCS is RSS hush function names
 | 
						|
	ETH_SS_RSS_HASH_FUNCS
 | 
						|
)
 | 
						|
 | 
						|
// IfreqSlave is a struct for ioctl bond manipulation syscalls.
 | 
						|
// It is used to assign slave to bond interface with Name.
 | 
						|
type IfreqSlave struct {
 | 
						|
	Name  [unix.IFNAMSIZ]byte
 | 
						|
	Slave [unix.IFNAMSIZ]byte
 | 
						|
}
 | 
						|
 | 
						|
// Ifreq is a struct for ioctl ethernet manipulation syscalls.
 | 
						|
type Ifreq struct {
 | 
						|
	Name [unix.IFNAMSIZ]byte
 | 
						|
	Data uintptr
 | 
						|
}
 | 
						|
 | 
						|
// ethtoolSset is a string set information
 | 
						|
type ethtoolSset struct {
 | 
						|
	cmd      uint32
 | 
						|
	reserved uint32
 | 
						|
	mask     uint64
 | 
						|
	data     [1]uint32
 | 
						|
}
 | 
						|
 | 
						|
type ethtoolStats struct {
 | 
						|
	cmd    uint32
 | 
						|
	nStats uint32
 | 
						|
	// Followed by nStats * []uint64.
 | 
						|
}
 | 
						|
 | 
						|
// newIocltSlaveReq returns filled IfreqSlave with proper interface names
 | 
						|
// It is used by ioctl to assign slave to bond master
 | 
						|
func newIocltSlaveReq(slave, master string) *IfreqSlave {
 | 
						|
	ifreq := &IfreqSlave{}
 | 
						|
	copy(ifreq.Name[:unix.IFNAMSIZ-1], master)
 | 
						|
	copy(ifreq.Slave[:unix.IFNAMSIZ-1], slave)
 | 
						|
	return ifreq
 | 
						|
}
 | 
						|
 | 
						|
// newIocltStringSetReq creates request to get interface string set
 | 
						|
func newIocltStringSetReq(linkName string) (*Ifreq, *ethtoolSset) {
 | 
						|
	e := ðtoolSset{
 | 
						|
		cmd:  ETHTOOL_GSSET_INFO,
 | 
						|
		mask: 1 << ETH_SS_STATS,
 | 
						|
	}
 | 
						|
 | 
						|
	ifreq := &Ifreq{Data: uintptr(unsafe.Pointer(e))}
 | 
						|
	copy(ifreq.Name[:unix.IFNAMSIZ-1], linkName)
 | 
						|
	return ifreq, e
 | 
						|
}
 | 
						|
 | 
						|
// getSocketUDP returns file descriptor to new UDP socket
 | 
						|
// It is used for communication with ioctl interface.
 | 
						|
func getSocketUDP() (int, error) {
 | 
						|
	return syscall.Socket(unix.AF_INET, unix.SOCK_DGRAM, 0)
 | 
						|
}
 |