8cadff2b79
* CNI: bump to 1.0.1 This commit bumps the declared version of CNI in the Kilo manifests to 1.0.1. This is possible with no changes to the configuration lists because our simple configuration is not affected by any of the deprecations, and there was effectively no change between 0.4.0 and 1.0.0, other than the declaration of a stable API. Similarly, this commit also bumps the version of the CNI library and the plugins package. Bumping to CNI 1.0.0 will help ensure that Kilo stays compatible with container runtimes in the future. Signed-off-by: Lucas Servén Marín <lserven@gmail.com> * vendor: revendor Signed-off-by: Lucas Servén Marín <lserven@gmail.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)
|
|
}
|