Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions plugins/main/bridge/bridge.go
Original file line number Diff line number Diff line change
Expand Up @@ -788,6 +788,21 @@ func cmdDel(args *skel.CmdArgs) error {
return ipamDel()
}

// remove the vlan default GW interface
if isLayer3 && n.IsDefaultGW && n.Vlan != 0 {
var linkNotFoundError netlink.LinkNotFoundError

name := fmt.Sprintf("%s.%d", n.BrName, n.Vlan)
vlanIface, err := netlinksafe.LinkByName(name)
if err == nil {
if err = netlink.LinkDel(vlanIface); err != nil {
return err
}
} else if !errors.As(err, &linkNotFoundError) {
return err
}
}

// There is a netns so try to clean up. Delete can be called multiple times
// so don't return an error if the device is already removed.
// If the device isn't there then don't try to clean up IP masq either.
Expand Down
26 changes: 25 additions & 1 deletion plugins/main/bridge/bridge_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -885,6 +885,14 @@ func (tester *testerV10x) cmdDelTest(tc testCase, dataDir string) {
link, err := netlinksafe.LinkByName(tester.vethName)
Expect(err).To(HaveOccurred())
Expect(link).To(BeNil())

if !tc.isLayer2 && tc.vlan != 0 {
// Make sure vlan link exists
vlanLink, err := netlinksafe.LinkByName(fmt.Sprintf("%s.%d", BRNAME, tc.vlan))
Expect(err).To(HaveOccurred())
Expect(vlanLink).To(BeNil())
}

return nil
})
Expect(err).NotTo(HaveOccurred())
Expand Down Expand Up @@ -1219,6 +1227,14 @@ func (tester *testerV04x) cmdDelTest(tc testCase, dataDir string) {
link, err := netlinksafe.LinkByName(tester.vethName)
Expect(err).To(HaveOccurred())
Expect(link).To(BeNil())

if !tc.isLayer2 && tc.vlan != 0 {
// Make sure vlan link exists
vlanLink, err := netlinksafe.LinkByName(fmt.Sprintf("%s.%d", BRNAME, tc.vlan))
Expect(err).To(HaveOccurred())
Expect(vlanLink).To(BeNil())
}

return nil
})
Expect(err).NotTo(HaveOccurred())
Expand Down Expand Up @@ -1440,7 +1456,7 @@ func (tester *testerV03x) cmdAddTest(tc testCase, dataDir string) (types.Result,
func (tester *testerV03x) cmdCheckTest(_ testCase, _ *Net, _ string) {
}

func (tester *testerV03x) cmdDelTest(_ testCase, _ string) {
func (tester *testerV03x) cmdDelTest(tc testCase, _ string) {
err := tester.testNS.Do(func(ns.NetNS) error {
defer GinkgoRecover()

Expand Down Expand Up @@ -1470,6 +1486,14 @@ func (tester *testerV03x) cmdDelTest(_ testCase, _ string) {
link, err := netlinksafe.LinkByName(tester.vethName)
Expect(err).To(HaveOccurred())
Expect(link).To(BeNil())

if !tc.isLayer2 && tc.vlan != 0 {
// Make sure vlan link exists
vlanLink, err := netlinksafe.LinkByName(fmt.Sprintf("%s.%d", BRNAME, tc.vlan))
Expect(err).To(HaveOccurred())
Expect(vlanLink).To(BeNil())
}

return nil
})
Expect(err).NotTo(HaveOccurred())
Expand Down