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

k8snetworkplumbingwg / sriov-network-operator / 10058808149

23 Jul 2024 12:22PM UTC coverage: 43.964% (+0.6%) from 43.351%
10058808149

Pull #659

github

web-flow
Merge f199eb95f into 588abb449
Pull Request #659: Configure IB VFs' GUIDs using a statically provided GUID pool

212 of 280 new or added lines in 13 files covered. (75.71%)

2 existing lines in 1 file now uncovered.

6526 of 14844 relevant lines covered (43.96%)

0.48 hits per line

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

18.03
/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
        // LinkByIndex finds a link by index and returns a pointer to the object.
28
        LinkByIndex(index int) (Link, error)
29
        // LinkList gets a list of link devices.
30
        // Equivalent to: `ip link show`
31
        LinkList() ([]Link, error)
32
        // LinkSetVfHardwareAddr sets the hardware address of a vf for the link.
33
        // Equivalent to: `ip link set $link vf $vf mac $hwaddr`
34
        LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error
35
        // LinkSetUp enables the link device.
36
        // Equivalent to: `ip link set $link up`
37
        LinkSetUp(link Link) error
38
        // LinkSetMTU sets the mtu of the link device.
39
        // Equivalent to: `ip link set $link mtu $mtu`
40
        LinkSetMTU(link Link, mtu int) error
41
        // DevlinkGetDeviceByName provides a pointer to devlink device and nil error,
42
        // otherwise returns an error code.
43
        DevLinkGetDeviceByName(bus string, device string) (*netlink.DevlinkDevice, error)
44
        // DevLinkSetEswitchMode sets eswitch mode if able to set successfully or
45
        // returns an error code.
46
        // Equivalent to: `devlink dev eswitch set $dev mode switchdev`
47
        // Equivalent to: `devlink dev eswitch set $dev mode legacy`
48
        DevLinkSetEswitchMode(dev *netlink.DevlinkDevice, newMode string) error
49
        // VDPAGetDevByName returns VDPA device selected by name
50
        // Equivalent to: `vdpa dev show <name>`
51
        VDPAGetDevByName(name string) (*netlink.VDPADev, error)
52
        // VDPADelDev removes VDPA device
53
        // Equivalent to: `vdpa dev del <name>`
54
        VDPADelDev(name string) error
55
        // VDPANewDev adds new VDPA device
56
        // Equivalent to: `vdpa dev add name <name> mgmtdev <mgmtBus>/mgmtName [params]`
57
        VDPANewDev(name, mgmtBus, mgmtName string, params netlink.VDPANewDevParams) error
58
        // DevlinkGetDeviceParamByName returns specific parameter for devlink device
59
        // Equivalent to: `devlink dev param show <bus>/<device> name <param>`
60
        DevlinkGetDeviceParamByName(bus string, device string, param string) (*netlink.DevlinkParam, error)
61
        // DevlinkSetDeviceParam set specific parameter for devlink device
62
        // Equivalent to: `devlink dev param set <bus>/<device> name <param> cmode <cmode> value <value>`
63
        // cmode argument should contain valid cmode value as uint8, modes are define in nl.DEVLINK_PARAM_CMODE_* constants
64
        // value argument should have one of the following types: uint8, uint16, uint32, string, bool
65
        DevlinkSetDeviceParam(bus string, device string, param string, cmode uint8, value interface{}) error
66
        // RdmaLinkByName finds a link by name and returns a pointer to the object if
67
        // found and nil error, otherwise returns error code.
68
        RdmaLinkByName(name string) (*netlink.RdmaLink, error)
69
        // IsLinkAdminStateUp checks if the admin state of a link is up
70
        IsLinkAdminStateUp(link Link) bool
71
}
72

73
type libWrapper struct{}
74

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

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

87
// LinkByName finds a link by name and returns a pointer to the object.
88
func (w *libWrapper) LinkByName(name string) (Link, error) {
×
89
        return netlink.LinkByName(name)
×
90
}
×
91

92
// LinkByIndex finds a link by index and returns a pointer to the object.
93
func (w *libWrapper) LinkByIndex(index int) (Link, error) {
×
94
        return netlink.LinkByIndex(index)
×
95
}
×
96

97
// LinkList gets a list of link devices.
98
// Equivalent to: `ip link show`
99
func (w *libWrapper) LinkList() ([]Link, error) {
1✔
100
        links, err := netlink.LinkList()
1✔
101
        if err != nil {
1✔
NEW
102
                return nil, err
×
NEW
103
        }
×
104

105
        // Convert each netlink.Link to the custom Link interface
106
        customLinks := make([]Link, len(links))
1✔
107
        for i, link := range links {
2✔
108
                customLinks[i] = link
1✔
109
        }
1✔
110

111
        return customLinks, nil
1✔
112
}
113

114
// LinkSetVfHardwareAddr sets the hardware address of a vf for the link.
115
// Equivalent to: `ip link set $link vf $vf mac $hwaddr`
116
func (w *libWrapper) LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error {
×
117
        return netlink.LinkSetVfHardwareAddr(link, vf, hwaddr)
×
118
}
×
119

120
// LinkSetUp enables the link device.
121
// Equivalent to: `ip link set $link up`
122
func (w *libWrapper) LinkSetUp(link Link) error {
×
123
        return netlink.LinkSetUp(link)
×
124
}
×
125

126
// LinkSetMTU sets the mtu of the link device.
127
// Equivalent to: `ip link set $link mtu $mtu`
128
func (w *libWrapper) LinkSetMTU(link Link, mtu int) error {
×
129
        return netlink.LinkSetMTU(link, mtu)
×
130
}
×
131

132
// DevlinkGetDeviceByName provides a pointer to devlink device and nil error,
133
// otherwise returns an error code.
134
func (w *libWrapper) DevLinkGetDeviceByName(bus string, device string) (*netlink.DevlinkDevice, error) {
×
135
        return netlink.DevLinkGetDeviceByName(bus, device)
×
136
}
×
137

138
// DevLinkSetEswitchMode sets eswitch mode if able to set successfully or
139
// returns an error code.
140
// Equivalent to: `devlink dev eswitch set $dev mode switchdev`
141
// Equivalent to: `devlink dev eswitch set $dev mode legacy`
142
func (w *libWrapper) DevLinkSetEswitchMode(dev *netlink.DevlinkDevice, newMode string) error {
×
143
        return netlink.DevLinkSetEswitchMode(dev, newMode)
×
144
}
×
145

146
// VDPAGetDevByName returns VDPA device selected by name
147
// Equivalent to: `vdpa dev show <name>`
148
func (w *libWrapper) VDPAGetDevByName(name string) (*netlink.VDPADev, error) {
×
149
        return netlink.VDPAGetDevByName(name)
×
150
}
×
151

152
// VDPADelDev removes VDPA device
153
// Equivalent to: `vdpa dev del <name>`
154
func (w *libWrapper) VDPADelDev(name string) error {
×
155
        return netlink.VDPADelDev(name)
×
156
}
×
157

158
// VDPANewDev adds new VDPA device
159
// Equivalent to: `vdpa dev add name <name> mgmtdev <mgmtBus>/mgmtName [params]`
160
func (w *libWrapper) VDPANewDev(name, mgmtBus, mgmtName string, params netlink.VDPANewDevParams) error {
×
161
        return netlink.VDPANewDev(name, mgmtBus, mgmtName, params)
×
162
}
×
163

164
// DevlinkGetDeviceParamByName returns specific parameter for devlink device
165
// Equivalent to: `devlink dev param show <bus>/<device> name <param>`
166
func (w *libWrapper) DevlinkGetDeviceParamByName(bus string, device string, param string) (*netlink.DevlinkParam, error) {
×
167
        return netlink.DevlinkGetDeviceParamByName(bus, device, param)
×
168
}
×
169

170
// DevlinkSetDeviceParam set specific parameter for devlink device
171
// Equivalent to: `devlink dev param set <bus>/<device> name <param> cmode <cmode> value <value>`
172
// cmode argument should contain valid cmode value as uint8, modes are define in nl.DEVLINK_PARAM_CMODE_* constants
173
// value argument should have one of the following types: uint8, uint16, uint32, string, bool
174
func (w *libWrapper) DevlinkSetDeviceParam(bus string, device string, param string, cmode uint8, value interface{}) error {
×
175
        return netlink.DevlinkSetDeviceParam(bus, device, param, cmode, value)
×
176
}
×
177

178
// RdmaLinkByName finds a link by name and returns a pointer to the object if
179
// found and nil error, otherwise returns error code.
180
func (w *libWrapper) RdmaLinkByName(name string) (*netlink.RdmaLink, error) {
×
181
        return netlink.RdmaLinkByName(name)
×
182
}
×
183

184
// IsLinkAdminStateUp checks if the admin state of a link is up
185
func (w *libWrapper) IsLinkAdminStateUp(link Link) bool {
×
186
        return link.Attrs().Flags&net.FlagUp == 1
×
187
}
×
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