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

k8snetworkplumbingwg / sriov-network-operator / 11723997336

07 Nov 2024 01:29PM UTC coverage: 45.623% (+0.2%) from 45.458%
11723997336

Pull #799

github

web-flow
Merge 02c6b009c into 2b02ba1fe
Pull Request #799: Rdma subsytem mode

158 of 293 new or added lines in 12 files covered. (53.92%)

3 existing lines in 2 files now uncovered.

6880 of 15080 relevant lines covered (45.62%)

0.5 hits per line

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

17.19
/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
        // RdmaSystemGetNetnsMode returns RDMA subsystem mode
72
        RdmaSystemGetNetnsMode() (string, error)
73
}
74

75
type libWrapper struct{}
76

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

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

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

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

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

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

113
        return customLinks, nil
1✔
114
}
115

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

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

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

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

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

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

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

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

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

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

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

186
// IsLinkAdminStateUp checks if the admin state of a link is up
187
func (w *libWrapper) IsLinkAdminStateUp(link Link) bool {
×
188
        return link.Attrs().Flags&net.FlagUp == 1
×
189
}
×
190

191
// RdmaSystemGetNetnsMode returns RDMA subsystem mode
NEW
192
func (w *libWrapper) RdmaSystemGetNetnsMode() (string, error) {
×
NEW
193
        return netlink.RdmaSystemGetNetnsMode()
×
NEW
194
}
×
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