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

k8snetworkplumbingwg / sriov-network-operator / 19855289298

02 Dec 2025 10:24AM UTC coverage: 62.126% (-0.02%) from 62.149%
19855289298

Pull #967

github

web-flow
Merge e77928524 into d34e85b1c
Pull Request #967: Add support for network interface alternative names

70 of 91 new or added lines in 7 files covered. (76.92%)

21 existing lines in 6 files now uncovered.

8820 of 14197 relevant lines covered (62.13%)

0.69 hits per line

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

14.86
/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
        // GetAltNames returns a list of alternative names for a link
74
        GetAltNames(name string) ([]string, error)
75
}
76

77
type libWrapper struct{}
78

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

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

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

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

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

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

115
        return customLinks, nil
1✔
116
}
117

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

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

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

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

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

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

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

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

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

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

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

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

193
// RdmaSystemGetNetnsMode returns RDMA subsystem mode
194
func (w *libWrapper) RdmaSystemGetNetnsMode() (string, error) {
×
195
        return netlink.RdmaSystemGetNetnsMode()
×
196
}
×
197

198
// GetAltNames returns a list of alternative names for a link
NEW
199
func (w *libWrapper) GetAltNames(name string) ([]string, error) {
×
NEW
200
        link, err := netlink.LinkByName(name)
×
NEW
201
        if err != nil {
×
NEW
202
                return nil, err
×
NEW
203
        }
×
204
        // The AltNames field was added in netlink LinkAttrs struct
NEW
205
        attrs := link.Attrs()
×
NEW
206
        if attrs == nil || len(attrs.AltNames) == 0 {
×
NEW
207
                return []string{}, nil
×
NEW
208
        }
×
NEW
209
        return attrs.AltNames, nil
×
210
}
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