-
Notifications
You must be signed in to change notification settings - Fork 757
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Two new functions: LinkSetBondSlave and VethPeerIndex
- Loading branch information
phob0s
committed
Dec 14, 2017
1 parent
f67b75e
commit 320750e
Showing
3 changed files
with
279 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
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 | ||
} | ||
|
||
// ethtoolGstrings is string set for data tagging | ||
type ethtoolGstrings struct { | ||
cmd uint32 | ||
stringSet uint32 | ||
length uint32 | ||
data [32]byte | ||
} | ||
|
||
type ethtoolStats struct { | ||
cmd uint32 | ||
nStats uint32 | ||
data [1]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) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters