summaryrefslogtreecommitdiff
path: root/libnetwork/drivers/overlay/ov_network.go
diff options
context:
space:
mode:
Diffstat (limited to 'libnetwork/drivers/overlay/ov_network.go')
-rw-r--r--libnetwork/drivers/overlay/ov_network.go107
1 files changed, 33 insertions, 74 deletions
diff --git a/libnetwork/drivers/overlay/ov_network.go b/libnetwork/drivers/overlay/ov_network.go
index c41d853de3..4fe1401791 100644
--- a/libnetwork/drivers/overlay/ov_network.go
+++ b/libnetwork/drivers/overlay/ov_network.go
@@ -5,6 +5,7 @@ package overlay
import (
"encoding/json"
+ "errors"
"fmt"
"net"
"os"
@@ -111,37 +112,43 @@ func (d *driver) CreateNetwork(id string, option map[string]interface{}, nInfo d
}
vnis := make([]uint32, 0, len(ipV4Data))
- if gval, ok := option[netlabel.GenericData]; ok {
- optMap := gval.(map[string]string)
- if val, ok := optMap[netlabel.OverlayVxlanIDList]; ok {
- logrus.Debugf("overlay: Received vxlan IDs: %s", val)
- vniStrings := strings.Split(val, ",")
- for _, vniStr := range vniStrings {
- vni, err := strconv.Atoi(vniStr)
- if err != nil {
- return fmt.Errorf("invalid vxlan id value %q passed", vniStr)
- }
+ gval, ok := option[netlabel.GenericData]
+ if !ok {
+ return fmt.Errorf("option %s is missing", netlabel.GenericData)
+ }
- vnis = append(vnis, uint32(vni))
- }
+ optMap := gval.(map[string]string)
+ vnisOpt, ok := optMap[netlabel.OverlayVxlanIDList]
+ if !ok {
+ return errors.New("no VNI provided")
+ }
+ logrus.Debugf("overlay: Received vxlan IDs: %s", vnisOpt)
+ vniStrings := strings.Split(vnisOpt, ",")
+ for _, vniStr := range vniStrings {
+ vni, err := strconv.Atoi(vniStr)
+ if err != nil {
+ return fmt.Errorf("invalid vxlan id value %q passed", vniStr)
}
- if _, ok := optMap[secureOption]; ok {
- n.secure = true
+
+ vnis = append(vnis, uint32(vni))
+ }
+
+ if _, ok := optMap[secureOption]; ok {
+ n.secure = true
+ }
+ if val, ok := optMap[netlabel.DriverMTU]; ok {
+ var err error
+ if n.mtu, err = strconv.Atoi(val); err != nil {
+ return fmt.Errorf("failed to parse %v: %v", val, err)
}
- if val, ok := optMap[netlabel.DriverMTU]; ok {
- var err error
- if n.mtu, err = strconv.Atoi(val); err != nil {
- return fmt.Errorf("failed to parse %v: %v", val, err)
- }
- if n.mtu < 0 {
- return fmt.Errorf("invalid MTU value: %v", n.mtu)
- }
+ if n.mtu < 0 {
+ return fmt.Errorf("invalid MTU value: %v", n.mtu)
}
}
- // If we are getting vnis from libnetwork, either we get for
- // all subnets or none.
- if len(vnis) != 0 && len(vnis) < len(ipV4Data) {
+ if len(vnis) == 0 {
+ return errors.New("no VNI provided")
+ } else if len(vnis) < len(ipV4Data) {
return fmt.Errorf("insufficient vnis(%d) passed to overlay", len(vnis))
}
@@ -149,10 +156,7 @@ func (d *driver) CreateNetwork(id string, option map[string]interface{}, nInfo d
s := &subnet{
subnetIP: ipd.Pool,
gwIP: ipd.Gateway,
- }
-
- if len(vnis) != 0 {
- s.vni = vnis[i]
+ vni: vnis[i],
}
n.subnets = append(n.subnets, s)
@@ -229,18 +233,6 @@ func (d *driver) DeleteNetwork(nid string) error {
doPeerFlush = true
delete(d.networks, nid)
- vnis, err := n.releaseVxlanID()
- if err != nil {
- return err
- }
-
- if n.secure {
- for _, vni := range vnis {
- programMangle(vni, false)
- programInput(vni, false)
- }
- }
-
return nil
}
@@ -874,39 +866,6 @@ func (n *network) DataScope() string {
return datastore.GlobalScope
}
-func (n *network) releaseVxlanID() ([]uint32, error) {
- n.Lock()
- nSubnets := len(n.subnets)
- n.Unlock()
- if nSubnets == 0 {
- return nil, nil
- }
-
- var vnis []uint32
- n.Lock()
- for _, s := range n.subnets {
- if n.driver.vxlanIdm != nil {
- vnis = append(vnis, s.vni)
- }
- s.vni = 0
- }
- n.Unlock()
-
- for _, vni := range vnis {
- n.driver.vxlanIdm.Release(uint64(vni))
- }
-
- return vnis, nil
-}
-
-func (n *network) obtainVxlanID(s *subnet) error {
- // return if the subnet already has a vxlan id assigned
- if n.vxlanID(s) != 0 {
- return nil
- }
- return fmt.Errorf("no valid vxlan id and no datastore configured, cannot obtain vxlan id")
-}
-
// getSubnetforIP returns the subnet to which the given IP belongs
func (n *network) getSubnetforIP(ip *net.IPNet) *subnet {
for _, s := range n.subnets {