• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

k8snetworkplumbingwg / sriov-network-operator / 9206688050

23 May 2024 10:50AM UTC coverage: 39.655% (+0.06%) from 39.599%
9206688050

Pull #587

github

web-flow
Merge 5f3c4e903 into 87e4dadb1
Pull Request #587: Add more checks on generic plugin to discover discrepancies from the desired state

54 of 127 new or added lines in 7 files covered. (42.52%)

6 existing lines in 2 files now uncovered.

5175 of 13050 relevant lines covered (39.66%)

0.44 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

6.25
/pkg/host/internal/lib/netlink/netlink.go
1
package netlink
2

3
import (
4
        "net"
5

6
        "github.com/vishvananda/netlink"
7
)
8

9
func New() NetlinkLib {
1✔
10
        return &libWrapper{}
1✔
11
}
1✔
12

13
type Link interface {
14
        netlink.Link
15
}
16

17
//go:generate ../../../../../bin/mockgen -destination mock/mock_netlink.go -source netlink.go
18
type NetlinkLib interface {
19
        // LinkSetVfNodeGUID sets the node GUID of a vf for the link.
20
        // Equivalent to: `ip link set dev $link vf $vf node_guid $nodeguid`
21
        LinkSetVfNodeGUID(link Link, vf int, nodeguid net.HardwareAddr) error
22
        // LinkSetVfPortGUID sets the port GUID of a vf for the link.
23
        // Equivalent to: `ip link set dev $link vf $vf port_guid $portguid`
24
        LinkSetVfPortGUID(link Link, vf int, portguid net.HardwareAddr) error
25
        // LinkByName finds a link by name and returns a pointer to the object.
26
        LinkByName(name string) (Link, error)
27
        // LinkSetVfHardwareAddr sets the hardware address of a vf for the link.
28
        // Equivalent to: `ip link set $link vf $vf mac $hwaddr`
29
        LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error
30
        // LinkSetUp enables the link device.
31
        // Equivalent to: `ip link set $link up`
32
        LinkSetUp(link Link) error
33
        // LinkSetMTU sets the mtu of the link device.
34
        // Equivalent to: `ip link set $link mtu $mtu`
35
        LinkSetMTU(link Link, mtu int) error
36
        // DevlinkGetDeviceByName provides a pointer to devlink device and nil error,
37
        // otherwise returns an error code.
38
        DevLinkGetDeviceByName(bus string, device string) (*netlink.DevlinkDevice, error)
39
        // DevLinkSetEswitchMode sets eswitch mode if able to set successfully or
40
        // returns an error code.
41
        // Equivalent to: `devlink dev eswitch set $dev mode switchdev`
42
        // Equivalent to: `devlink dev eswitch set $dev mode legacy`
43
        DevLinkSetEswitchMode(dev *netlink.DevlinkDevice, newMode string) error
44
        // VDPAGetDevByName returns VDPA device selected by name
45
        // Equivalent to: `vdpa dev show <name>`
46
        VDPAGetDevByName(name string) (*netlink.VDPADev, error)
47
        // VDPADelDev removes VDPA device
48
        // Equivalent to: `vdpa dev del <name>`
49
        VDPADelDev(name string) error
50
        // VDPANewDev adds new VDPA device
51
        // Equivalent to: `vdpa dev add name <name> mgmtdev <mgmtBus>/mgmtName [params]`
52
        VDPANewDev(name, mgmtBus, mgmtName string, params netlink.VDPANewDevParams) error
53
        // DevlinkGetDeviceParamByName returns specific parameter for devlink device
54
        // Equivalent to: `devlink dev param show <bus>/<device> name <param>`
55
        DevlinkGetDeviceParamByName(bus string, device string, param string) (*netlink.DevlinkParam, error)
56
        // DevlinkSetDeviceParam set specific parameter for devlink device
57
        // Equivalent to: `devlink dev param set <bus>/<device> name <param> cmode <cmode> value <value>`
58
        // cmode argument should contain valid cmode value as uint8, modes are define in nl.DEVLINK_PARAM_CMODE_* constants
59
        // value argument should have one of the following types: uint8, uint16, uint32, string, bool
60
        DevlinkSetDeviceParam(bus string, device string, param string, cmode uint8, value interface{}) error
61
        // RdmaLinkByName finds a link by name and returns a pointer to the object if
62
        // found and nil error, otherwise returns error code.
63
        RdmaLinkByName(name string) (*netlink.RdmaLink, error)
64
        // IsLinkAdminStateUp checks if the admin state of a link is up
65
        IsLinkAdminStateUp(link Link) bool
66
}
67

68
type libWrapper struct{}
69

70
// LinkSetVfNodeGUID sets the node GUID of a vf for the link.
71
// Equivalent to: `ip link set dev $link vf $vf node_guid $nodeguid`
72
func (w *libWrapper) LinkSetVfNodeGUID(link Link, vf int, nodeguid net.HardwareAddr) error {
×
73
        return netlink.LinkSetVfNodeGUID(link, vf, nodeguid)
×
74
}
×
75

76
// LinkSetVfPortGUID sets the port GUID of a vf for the link.
77
// Equivalent to: `ip link set dev $link vf $vf port_guid $portguid`
78
func (w *libWrapper) LinkSetVfPortGUID(link Link, vf int, portguid net.HardwareAddr) error {
×
79
        return netlink.LinkSetVfPortGUID(link, vf, portguid)
×
80
}
×
81

82
// LinkByName finds a link by name and returns a pointer to the object.// LinkByName finds a link by name and returns a pointer to the object.
83
func (w *libWrapper) LinkByName(name string) (Link, error) {
×
84
        return netlink.LinkByName(name)
×
85
}
×
86

87
// LinkSetVfHardwareAddr sets the hardware address of a vf for the link.
88
// Equivalent to: `ip link set $link vf $vf mac $hwaddr`
89
func (w *libWrapper) LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error {
×
90
        return netlink.LinkSetVfHardwareAddr(link, vf, hwaddr)
×
91
}
×
92

93
// LinkSetUp enables the link device.
94
// Equivalent to: `ip link set $link up`
95
func (w *libWrapper) LinkSetUp(link Link) error {
×
96
        return netlink.LinkSetUp(link)
×
97
}
×
98

99
// LinkSetMTU sets the mtu of the link device.
100
// Equivalent to: `ip link set $link mtu $mtu`
101
func (w *libWrapper) LinkSetMTU(link Link, mtu int) error {
×
102
        return netlink.LinkSetMTU(link, mtu)
×
103
}
×
104

105
// DevlinkGetDeviceByName provides a pointer to devlink device and nil error,
106
// otherwise returns an error code.
107
func (w *libWrapper) DevLinkGetDeviceByName(bus string, device string) (*netlink.DevlinkDevice, error) {
×
108
        return netlink.DevLinkGetDeviceByName(bus, device)
×
109
}
×
110

111
// DevLinkSetEswitchMode sets eswitch mode if able to set successfully or
112
// returns an error code.
113
// Equivalent to: `devlink dev eswitch set $dev mode switchdev`
114
// Equivalent to: `devlink dev eswitch set $dev mode legacy`
115
func (w *libWrapper) DevLinkSetEswitchMode(dev *netlink.DevlinkDevice, newMode string) error {
×
116
        return netlink.DevLinkSetEswitchMode(dev, newMode)
×
117
}
×
118

119
// VDPAGetDevByName returns VDPA device selected by name
120
// Equivalent to: `vdpa dev show <name>`
121
func (w *libWrapper) VDPAGetDevByName(name string) (*netlink.VDPADev, error) {
×
122
        return netlink.VDPAGetDevByName(name)
×
123
}
×
124

125
// VDPADelDev removes VDPA device
126
// Equivalent to: `vdpa dev del <name>`
127
func (w *libWrapper) VDPADelDev(name string) error {
×
128
        return netlink.VDPADelDev(name)
×
129
}
×
130

131
// VDPANewDev adds new VDPA device
132
// Equivalent to: `vdpa dev add name <name> mgmtdev <mgmtBus>/mgmtName [params]`
133
func (w *libWrapper) VDPANewDev(name, mgmtBus, mgmtName string, params netlink.VDPANewDevParams) error {
×
134
        return netlink.VDPANewDev(name, mgmtBus, mgmtName, params)
×
135
}
×
136

137
// DevlinkGetDeviceParamByName returns specific parameter for devlink device
138
// Equivalent to: `devlink dev param show <bus>/<device> name <param>`
139
func (w *libWrapper) DevlinkGetDeviceParamByName(bus string, device string, param string) (*netlink.DevlinkParam, error) {
×
140
        return netlink.DevlinkGetDeviceParamByName(bus, device, param)
×
141
}
×
142

143
// DevlinkSetDeviceParam set specific parameter for devlink device
144
// Equivalent to: `devlink dev param set <bus>/<device> name <param> cmode <cmode> value <value>`
145
// cmode argument should contain valid cmode value as uint8, modes are define in nl.DEVLINK_PARAM_CMODE_* constants
146
// value argument should have one of the following types: uint8, uint16, uint32, string, bool
147
func (w *libWrapper) DevlinkSetDeviceParam(bus string, device string, param string, cmode uint8, value interface{}) error {
×
148
        return netlink.DevlinkSetDeviceParam(bus, device, param, cmode, value)
×
149
}
×
150

151
// RdmaLinkByName finds a link by name and returns a pointer to the object if
152
// found and nil error, otherwise returns error code.
NEW
153
func (w *libWrapper) RdmaLinkByName(name string) (*netlink.RdmaLink, error) {
×
NEW
154
        return netlink.RdmaLinkByName(name)
×
NEW
155
}
×
156

157
// IsLinkAdminStateUp checks if the admin state of a link is up
NEW
158
func (w *libWrapper) IsLinkAdminStateUp(link Link) bool {
×
NEW
159
        return link.Attrs().Flags&net.FlagUp == 1
×
NEW
160
}
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc