Skip to content

Commit e22295b

Browse files
committed
fix: cleanup auto-created vlan subinterfaces on interface switch (#6193)
* fix: cleanup auto-created vlan subinterfaces on interface switch Signed-off-by: clyi <clyi@alauda.io>
1 parent a8be30f commit e22295b

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

pkg/daemon/controller.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,11 @@ func (c *Controller) initProviderNetwork(pn *kubeovnv1.ProviderNetwork, node *v1
449449
klog.Infof("Auto-detected %d additional VLAN interfaces for %s", len(vlanIDs), nic)
450450
}
451451

452+
if err := c.cleanupAutoCreatedVlanInterfaces(pn.Name, nic, vlanInterfaceMap); err != nil {
453+
klog.Errorf("Failed to cleanup auto-created VLAN interfaces for provider %s: %v", pn.Name, err)
454+
return err
455+
}
456+
452457
var mtu int
453458
var err error
454459
klog.V(3).Infof("ovs init provider network %s", pn.Name)
@@ -518,7 +523,7 @@ func (c *Controller) handleDeleteProviderNetwork(pn *kubeovnv1.ProviderNetwork)
518523
return err
519524
}
520525

521-
if err := c.cleanupAutoCreatedVlanInterfaces(pn.Name); err != nil {
526+
if err := c.cleanupAutoCreatedVlanInterfaces(pn.Name, "", nil); err != nil {
522527
klog.Errorf("Failed to cleanup auto-created VLAN interfaces for provider %s: %v", pn.Name, err)
523528
return err
524529
}

pkg/daemon/ovs_linux.go

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2015,20 +2015,41 @@ func (c *Controller) createVlanSubinterfaces(vlanInterfaces []string, baseInterf
20152015
return nil
20162016
}
20172017

2018-
func (c *Controller) cleanupAutoCreatedVlanInterfaces(providerName string) error {
2019-
createdInterfaces, err := util.FindKubeOVNAutoCreatedInterfaces(providerName)
2018+
func (c *Controller) cleanupAutoCreatedVlanInterfaces(providerName, nic string, preservedIfaces map[string]int) error {
2019+
gcVlanIfaces, err := util.FindKubeOVNAutoCreatedInterfaces(providerName)
20202020
if err != nil {
20212021
return fmt.Errorf("failed to find auto-created interfaces for provider %s: %w", providerName, err)
20222022
}
20232023

2024-
if len(createdInterfaces) == 0 {
2024+
inUseVlanIface := ""
2025+
if strings.Contains(nic, ".") {
2026+
inUseVlanIface = nic
2027+
}
2028+
2029+
filteredIfaces := make([]string, 0, len(gcVlanIfaces))
2030+
for _, iface := range gcVlanIfaces {
2031+
if iface == inUseVlanIface {
2032+
continue
2033+
}
2034+
if preservedIfaces != nil {
2035+
if _, skip := preservedIfaces[iface]; skip {
2036+
continue
2037+
}
2038+
}
2039+
if iface == "" {
2040+
continue
2041+
}
2042+
filteredIfaces = append(filteredIfaces, iface)
2043+
}
2044+
gcVlanIfaces = filteredIfaces
2045+
if len(gcVlanIfaces) == 0 {
20252046
klog.V(3).Infof("No auto-created VLAN interfaces found for provider %s", providerName)
20262047
return nil
20272048
}
20282049

2029-
klog.Infof("Found %d auto-created VLAN interfaces to clean up for provider %s: %v", len(createdInterfaces), providerName, createdInterfaces)
2050+
klog.Infof("Cleaning %d auto-created VLAN interfaces for provider %s: %v", len(gcVlanIfaces), providerName, gcVlanIfaces)
20302051

2031-
for _, ifaceName := range createdInterfaces {
2052+
for _, ifaceName := range gcVlanIfaces {
20322053
klog.Infof("Cleaning up auto-created VLAN interface %s", ifaceName)
20332054
output, err := exec.Command("ip", "link", "delete", ifaceName).CombinedOutput()
20342055
if err != nil {

0 commit comments

Comments
 (0)