Pārlūkot izejas kodu

Merge pull request #1547 from mavenugo/vxidm

IDM need not be bound by default vxlan-id start index
Alessandro Boch 8 gadi atpakaļ
vecāks
revīzija
96f001e6ed

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

@@ -57,7 +57,7 @@ func Init(dc driverapi.DriverCallback, config map[string]interface{}) error {
 		config:   config,
 		config:   config,
 	}
 	}
 
 
-	d.vxlanIdm, err = idm.New(nil, "vxlan-id", vxlanIDStart, vxlanIDEnd)
+	d.vxlanIdm, err = idm.New(nil, "vxlan-id", 1, vxlanIDEnd)
 	if err != nil {
 	if err != nil {
 		return fmt.Errorf("failed to initialize vxlan id manager: %v", err)
 		return fmt.Errorf("failed to initialize vxlan id manager: %v", err)
 	}
 	}
@@ -164,7 +164,7 @@ func (n *network) obtainVxlanID(s *subnet) error {
 	n.Unlock()
 	n.Unlock()
 
 
 	if vni == 0 {
 	if vni == 0 {
-		vni, err = n.driver.vxlanIdm.GetID()
+		vni, err = n.driver.vxlanIdm.GetIDInRange(vxlanIDStart, vxlanIDEnd)
 		if err != nil {
 		if err != nil {
 			return err
 			return err
 		}
 		}

+ 13 - 0
libnetwork/idm/idm.go

@@ -54,6 +54,19 @@ func (i *Idm) GetSpecificID(id uint64) error {
 	return i.handle.Set(id - i.start)
 	return i.handle.Set(id - i.start)
 }
 }
 
 
+// GetIDInRange returns the first available id in the set within a range
+func (i *Idm) GetIDInRange(start, end uint64) (uint64, error) {
+	if i.handle == nil {
+		return 0, fmt.Errorf("ID set is not initialized")
+	}
+
+	if start < i.start || end > i.end {
+		return 0, fmt.Errorf("Requested range does not belong to the set")
+	}
+
+	return i.handle.SetAnyInRange(start, end-start)
+}
+
 // Release releases the specified id
 // Release releases the specified id
 func (i *Idm) Release(id uint64) {
 func (i *Idm) Release(id uint64) {
 	i.handle.Unset(id - i.start)
 	i.handle.Unset(id - i.start)