summaryrefslogtreecommitdiff
path: root/libnetwork
diff options
context:
space:
mode:
authorAlbin Kerouanton <albinker@gmail.com>2023-03-04 17:35:05 +0100
committerAlbin Kerouanton <albinker@gmail.com>2023-04-06 19:52:27 +0200
commite3708a89ccf5c88273660b2409e2ea1197530b0b (patch)
treee80b33f1ed0b7a0a02d6585ecfcba5dd49aaf368 /libnetwork
parente251837445bab87efffee7a01199eac7942a296a (diff)
downloaddocker-e3708a89ccf5c88273660b2409e2ea1197530b0b.tar.gz
libnetwork/overlay: remove vni allocation
VNI allocations made by the overlay driver were only used by Classic Swarm. With Swarm v2 mode, the driver ovmanager is responsible of allocating & releasing them. Previously, vxlanIdm was initialized when a global store was available but since 142b522, no global store can be instantiated. As such, releaseVxlanID actually does actually nothing and iptables rules are never removed. The last line of dead code detected by golangci-lint is now gone. Signed-off-by: Albin Kerouanton <albinker@gmail.com>
Diffstat (limited to 'libnetwork')
-rw-r--r--libnetwork/drivers/overlay/joinleave.go4
-rw-r--r--libnetwork/drivers/overlay/ov_network.go107
-rw-r--r--libnetwork/drivers/overlay/overlay.go4
-rw-r--r--libnetwork/drivers/overlay/peerdb.go4
4 files changed, 33 insertions, 86 deletions
diff --git a/libnetwork/drivers/overlay/joinleave.go b/libnetwork/drivers/overlay/joinleave.go
index 78014307b8..4d0ae1592e 100644
--- a/libnetwork/drivers/overlay/joinleave.go
+++ b/libnetwork/drivers/overlay/joinleave.go
@@ -46,10 +46,6 @@ func (d *driver) Join(nid, eid string, sboxKey string, jinfo driverapi.JoinInfo,
return fmt.Errorf("could not find subnet for endpoint %s", eid)
}
- if err := n.obtainVxlanID(s); err != nil {
- return fmt.Errorf("couldn't get vxlan id for %q: %v", s.subnetIP.String(), err)
- }
-
if err := n.joinSandbox(s, false, true); err != nil {
return fmt.Errorf("network sandbox join failed: %v", err)
}
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 {
diff --git a/libnetwork/drivers/overlay/overlay.go b/libnetwork/drivers/overlay/overlay.go
index 3d3cb3605f..5a74638998 100644
--- a/libnetwork/drivers/overlay/overlay.go
+++ b/libnetwork/drivers/overlay/overlay.go
@@ -13,7 +13,6 @@ import (
"github.com/docker/docker/libnetwork/datastore"
"github.com/docker/docker/libnetwork/discoverapi"
"github.com/docker/docker/libnetwork/driverapi"
- "github.com/docker/docker/libnetwork/idm"
"github.com/docker/docker/libnetwork/netlabel"
"github.com/docker/docker/libnetwork/osl"
"github.com/docker/docker/libnetwork/types"
@@ -28,8 +27,6 @@ const (
secureOption = "encrypted"
)
-var initVxlanIdm = make(chan (bool), 1)
-
type driver struct {
bindAddress string
advertiseAddress string
@@ -38,7 +35,6 @@ type driver struct {
secMap *encrMap
networks networkTable
localStore datastore.DataStore
- vxlanIdm *idm.Idm
initOS sync.Once
localJoinOnce sync.Once
keys []*key
diff --git a/libnetwork/drivers/overlay/peerdb.go b/libnetwork/drivers/overlay/peerdb.go
index cae9f500c3..8b1e890ae3 100644
--- a/libnetwork/drivers/overlay/peerdb.go
+++ b/libnetwork/drivers/overlay/peerdb.go
@@ -315,10 +315,6 @@ func (d *driver) peerAddOp(nid, eid string, peerIP net.IP, peerIPMask net.IPMask
return fmt.Errorf("couldn't find the subnet %q in network %q", IP.String(), n.id)
}
- if err := n.obtainVxlanID(s); err != nil {
- return fmt.Errorf("couldn't get vxlan id for %q: %v", s.subnetIP.String(), err)
- }
-
if err := n.joinSandbox(s, false, false); err != nil {
return fmt.Errorf("subnet sandbox join failed for %q: %v", s.subnetIP.String(), err)
}