diff options
author | Albin Kerouanton <albinker@gmail.com> | 2023-03-04 17:35:05 +0100 |
---|---|---|
committer | Albin Kerouanton <albinker@gmail.com> | 2023-04-06 19:52:27 +0200 |
commit | e3708a89ccf5c88273660b2409e2ea1197530b0b (patch) | |
tree | e80b33f1ed0b7a0a02d6585ecfcba5dd49aaf368 /libnetwork | |
parent | e251837445bab87efffee7a01199eac7942a296a (diff) | |
download | docker-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.go | 4 | ||||
-rw-r--r-- | libnetwork/drivers/overlay/ov_network.go | 107 | ||||
-rw-r--r-- | libnetwork/drivers/overlay/overlay.go | 4 | ||||
-rw-r--r-- | libnetwork/drivers/overlay/peerdb.go | 4 |
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) } |