浏览代码

Merge pull request #833 from mrjana/overlay

Cleanup vxlan interface by id before creating
aboch 9 年之前
父节点
当前提交
28c0e8fb6f
共有 2 个文件被更改,包括 24 次插入2 次删除
  1. 2 2
      libnetwork/drivers/overlay/ov_network.go
  2. 22 0
      libnetwork/drivers/overlay/ov_utils.go

+ 2 - 2
libnetwork/drivers/overlay/ov_network.go

@@ -267,8 +267,8 @@ func (n *network) initSubnetSandbox(s *subnet) error {
 
 
 	vxlanName := n.generateVxlanName(s)
 	vxlanName := n.generateVxlanName(s)
 
 
-	// Try to delete the vxlan interface if already present
-	deleteVxlan(vxlanName)
+	// Try to delete the vxlan interface by vni if already present
+	deleteVxlanByVNI(n.vxlanID(s))
 
 
 	err := createVxlan(vxlanName, n.vxlanID(s))
 	err := createVxlan(vxlanName, n.vxlanID(s))
 	if err != nil {
 	if err != nil {

+ 22 - 0
libnetwork/drivers/overlay/ov_utils.go

@@ -81,3 +81,25 @@ func deleteVxlan(name string) error {
 
 
 	return nil
 	return nil
 }
 }
+
+func deleteVxlanByVNI(vni uint32) error {
+	defer osl.InitOSContext()()
+
+	links, err := netlink.LinkList()
+	if err != nil {
+		return fmt.Errorf("failed to list interfaces while deleting vxlan interface by vni: %v", err)
+	}
+
+	for _, l := range links {
+		if l.Type() == "vxlan" && l.(*netlink.Vxlan).VxlanId == int(vni) {
+			err = netlink.LinkDel(l)
+			if err != nil {
+				return fmt.Errorf("error deleting vxlan interface with id %d: %v", vni, err)
+			}
+
+			return nil
+		}
+	}
+
+	return fmt.Errorf("could not find a vxlan interface to delete with id %d", vni)
+}