1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package netlink
- import (
- "syscall"
- "unsafe"
- "golang.org/x/sys/unix"
- )
- const (
-
- ETHTOOL_GSSET_INFO = 0x00000037
-
- SIOCETHTOOL = 0x8946
-
- ETHTOOL_GSTRINGS = 0x0000001b
-
- ETHTOOL_GSTATS = 0x0000001d
- )
- const (
-
- ETH_SS_TEST = iota
-
- ETH_SS_STATS
-
- ETH_SS_PRIV_FLAGS
-
- _ETH_SS_NTUPLE_FILTERS
-
- ETH_SS_FEATURES
-
- ETH_SS_RSS_HASH_FUNCS
- )
- type IfreqSlave struct {
- Name [unix.IFNAMSIZ]byte
- Slave [unix.IFNAMSIZ]byte
- }
- type Ifreq struct {
- Name [unix.IFNAMSIZ]byte
- Data uintptr
- }
- type ethtoolSset struct {
- cmd uint32
- reserved uint32
- mask uint64
- data [1]uint32
- }
- type ethtoolGstrings struct {
- cmd uint32
- stringSet uint32
- length uint32
- data [32]byte
- }
- type ethtoolStats struct {
- cmd uint32
- nStats uint32
- data [1]uint64
- }
- func newIocltSlaveReq(slave, master string) *IfreqSlave {
- ifreq := &IfreqSlave{}
- copy(ifreq.Name[:unix.IFNAMSIZ-1], master)
- copy(ifreq.Slave[:unix.IFNAMSIZ-1], slave)
- return ifreq
- }
- 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
- }
- func getSocketUDP() (int, error) {
- return syscall.Socket(unix.AF_INET, unix.SOCK_DGRAM, 0)
- }
|