Skip to content

Commit 81c520a

Browse files
committed
Remove interface name from alt name if exist
This change is similar to SRIOV-CNI [1]. [1] k8snetworkplumbingwg/sriov-cni#292 Signed-off-by: Ivan Kolodyazhny <e0ne@e0ne.info>
1 parent 88f7542 commit 81c520a

File tree

6 files changed

+197
-16
lines changed

6 files changed

+197
-16
lines changed

pkg/sriov/sriov.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ func (n *MyNetlink) LinkSetVfNodeGUID(link netlink.Link, vf int, nodeGUID net.Ha
5656
return netlink.LinkSetVfNodeGUID(link, vf, nodeGUID)
5757
}
5858

59+
// LinkDelAltName using NetlinkManager
60+
func (n *MyNetlink) LinkDelAltName(link netlink.Link, altName string) error {
61+
return netlink.LinkDelAltName(link, altName)
62+
}
63+
5964
type pciUtilsImpl struct{}
6065

6166
func (p *pciUtilsImpl) GetSriovNumVfs(ifName string) (int, error) {
@@ -139,18 +144,31 @@ func (s *sriovManager) SetupVF(conf *types.NetConf, podifName, cid string, netns
139144
return fmt.Errorf("error setting temp IF name %s for %s", tempName, linkName)
140145
}
141146

142-
// 3. Change netns
147+
// 3. Remove alt name from the nic
148+
linkObj, err = s.nLink.LinkByName(tempName)
149+
if err != nil {
150+
return fmt.Errorf("error getting VF netdevice with name %s: %v", tempName, err)
151+
}
152+
for _, altName := range linkObj.Attrs().AltNames {
153+
if altName == linkName {
154+
if err := s.nLink.LinkDelAltName(linkObj, linkName); err != nil {
155+
return fmt.Errorf("error removing VF altname %s: %v", linkName, err)
156+
}
157+
}
158+
}
159+
160+
// 4. Change netns
143161
if err := s.nLink.LinkSetNsFd(linkObj, int(netns.Fd())); err != nil {
144162
return fmt.Errorf("failed to move IF %s to netns: %q", tempName, err)
145163
}
146164

147165
if err := netns.Do(func(_ ns.NetNS) error {
148-
// 4. Set Pod IF name
166+
// 5. Set Pod IF name
149167
if err := s.nLink.LinkSetName(linkObj, podifName); err != nil {
150168
return fmt.Errorf("error setting container interface name %s for %s", linkName, tempName)
151169
}
152170

153-
// 5. Bring IF up in Pod netns
171+
// 6. Bring IF up in Pod netns
154172
if err := s.nLink.LinkSetUp(linkObj); err != nil {
155173
return fmt.Errorf("error bringing interface up in container ns: %q", err)
156174
}

pkg/sriov/sriov_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,26 @@ var _ = Describe("Sriov", func() {
386386
err := sm.SetupVF(netconf, podifName, contID, targetNetNS)
387387
Expect(err).To(HaveOccurred())
388388
})
389+
It("Remove altName", func() {
390+
targetNetNS := newFakeNs()
391+
mocked := &mocks.NetlinkManager{}
392+
393+
fakeLink := &FakeLink{netlink.LinkAttrs{
394+
Index: 1000,
395+
Name: "dummylink",
396+
AltNames: []string{"enp175s6"},
397+
}}
398+
399+
mocked.On("LinkByName", mock.AnythingOfType("string")).Return(fakeLink, nil)
400+
mocked.On("LinkSetDown", fakeLink).Return(nil)
401+
mocked.On("LinkSetName", fakeLink, mock.Anything).Return(nil)
402+
mocked.On("LinkDelAltName", fakeLink, "enp175s6").Return(nil)
403+
mocked.On("LinkSetNsFd", fakeLink, mock.AnythingOfType("int")).Return(nil)
404+
mocked.On("LinkSetUp", fakeLink).Return(nil)
405+
sm := sriovManager{nLink: mocked}
406+
err := sm.SetupVF(netconf, podifName, contID, targetNetNS)
407+
Expect(err).NotTo(HaveOccurred())
408+
})
389409
})
390410
Context("Checking ReleaseVF function", func() {
391411
var (

pkg/types/mocks/Manager.go

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

pkg/types/mocks/NetlinkManager.go

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

0 commit comments

Comments
 (0)