Skip to content

Commit 85daca7

Browse files
liuyuan10squeed
authored andcommitted
Fix file exists errro in dummy cni
When the root net ns has "eth0", dummy CNI returns errror "failed to create dummy: file exists" The fix is to create the dummy interface directly in the pod net ns Signed-off-by: Yuan Liu <[email protected]>
1 parent 0e64847 commit 85daca7

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

plugins/main/dummy/dummy.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,19 @@ func parseNetConf(bytes []byte) (*types.NetConf, error) {
4444
func createDummy(ifName string, netns ns.NetNS) (*current.Interface, error) {
4545
dummy := &current.Interface{}
4646

47-
linkAttrs := netlink.NewLinkAttrs()
48-
linkAttrs.Name = ifName
49-
linkAttrs.Namespace = netlink.NsFd(int(netns.Fd()))
47+
err := netns.Do(func(_ ns.NetNS) error {
48+
linkAttrs := netlink.NewLinkAttrs()
49+
linkAttrs.Name = ifName
5050

51-
dm := &netlink.Dummy{
52-
LinkAttrs: linkAttrs,
53-
}
51+
dm := &netlink.Dummy{
52+
LinkAttrs: linkAttrs,
53+
}
5454

55-
if err := netlink.LinkAdd(dm); err != nil {
56-
return nil, fmt.Errorf("failed to create dummy: %v", err)
57-
}
58-
dummy.Name = ifName
55+
if err := netlink.LinkAdd(dm); err != nil {
56+
return fmt.Errorf("failed to create dummy: %v", err)
57+
}
58+
dummy.Name = ifName
5959

60-
err := netns.Do(func(_ ns.NetNS) error {
6160
// Re-fetch interface to get all properties/attributes
6261
contDummy, err := netlinksafe.LinkByName(ifName)
6362
if err != nil {

plugins/main/dummy/dummy_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,26 @@ var _ = Describe("dummy Operations", func() {
233233
Expect(err).NotTo(HaveOccurred())
234234
})
235235

236+
It(fmt.Sprintf("[%s] creates an dummy link in a non-default namespace with conflicting name in original namespace", ver), func() {
237+
ifName := "foobar0"
238+
err := originalNS.Do(func(ns.NetNS) error {
239+
defer GinkgoRecover()
240+
// Create dummy in the original namespace, with the same name
241+
linkAttrs := netlink.NewLinkAttrs()
242+
linkAttrs.Name = ifName
243+
dm := &netlink.Dummy{
244+
LinkAttrs: linkAttrs,
245+
}
246+
err := netlink.LinkAdd(dm)
247+
Expect(err).NotTo(HaveOccurred())
248+
249+
_, err = createDummy(ifName, targetNS)
250+
Expect(err).NotTo(HaveOccurred())
251+
return nil
252+
})
253+
Expect(err).NotTo(HaveOccurred())
254+
})
255+
236256
It(fmt.Sprintf("[%s] configures and deconfigures a dummy link with ADD/CHECK/DEL", ver), func() {
237257
const IFNAME = "dummy0"
238258

0 commit comments

Comments
 (0)