Skip to content

Commit 81359b8

Browse files
committed
Use Devlink when possible for NewPciNetDevice
Try to use devlink api to configure the linkType to be `ether`. If the card doesn't support this we fall back to netlink. This commit is a partial fix for #392 There are still cards the doesn't support the netlink api like intel xv710 Signed-off-by: Sebastian Sch <[email protected]>
1 parent 7488066 commit 81359b8

File tree

4 files changed

+44
-1
lines changed

4 files changed

+44
-1
lines changed

pkg/netdevice/pciNetDevice.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,13 @@ func NewPciNetDevice(dev *ghw.PCIDevice, rFactory types.ResourceFactory, rc *typ
8282
}
8383

8484
linkType := ""
85-
if len(ifName) > 0 {
85+
if _, err = utils.GetNetlinkProvider().GetDevLinkDevice(pciAddr); err == nil {
86+
linkType = "ether"
87+
}
88+
89+
if err != nil && len(ifName) > 0 {
90+
glog.Warningf("Devlink query for device %s named %s is not supported trying netlink", pciAddr, ifName)
91+
8692
la, err := utils.GetNetlinkProvider().GetLinkAttrs(ifName)
8793
if err != nil {
8894
return nil, err

pkg/utils/mocks/NetlinkProvider.go

Lines changed: 23 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/utils/netlink_provider.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ type NetlinkProvider interface {
2626
GetLinkAttrs(ifName string) (*nl.LinkAttrs, error)
2727
// GetDevLinkDeviceEswitchAttrs returns a devlink device's attributes
2828
GetDevLinkDeviceEswitchAttrs(ifName string) (*nl.DevlinkDevEswitchAttr, error)
29+
// GetDevLinkDevice returns a devlink device
30+
GetDevLinkDevice(pfAddr string) (*nl.DevlinkDevice, error)
2931
}
3032

3133
type defaultNetlinkProvider struct {
@@ -47,6 +49,15 @@ func (defaultNetlinkProvider) GetLinkAttrs(ifName string) (*nl.LinkAttrs, error)
4749
return link.Attrs(), nil
4850
}
4951

52+
// GetDevLinkDevice returns a devlink device
53+
func (defaultNetlinkProvider) GetDevLinkDevice(pfAddr string) (*nl.DevlinkDevice, error) {
54+
dev, err := nl.DevLinkGetDeviceByName("pci", pfAddr)
55+
if err != nil {
56+
return nil, fmt.Errorf("error getting devlink device for net device %s %v", pfAddr, err)
57+
}
58+
return dev, nil
59+
}
60+
5061
// GetDevLinkDeviceEswitchAttrs returns a devlink device's attributes
5162
func (defaultNetlinkProvider) GetDevLinkDeviceEswitchAttrs(pfAddr string) (*nl.DevlinkDevEswitchAttr, error) {
5263
dev, err := nl.DevLinkGetDeviceByName("pci", pfAddr)

pkg/utils/testing.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ func SetDefaultMockNetlinkProvider() {
8686
mockProvider.
8787
On("GetDevLinkDeviceEswitchAttrs", mock.AnythingOfType("string")).
8888
Return(&nl.DevlinkDevEswitchAttr{Mode: "fakeMode"}, nil)
89+
mockProvider.
90+
On("GetDevLinkDevice", mock.AnythingOfType("string")).
91+
Return(nil, fmt.Errorf("error getting devlink device for net device"))
8992

9093
SetNetlinkProviderInst(&mockProvider)
9194
}

0 commit comments

Comments
 (0)