Skip to content

Commit

Permalink
fix: check conflict subnet cidr
Browse files Browse the repository at this point in the history
  • Loading branch information
oilbeater committed May 15, 2019
1 parent 4d08efd commit 8992bbe
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
2 changes: 1 addition & 1 deletion pkg/controller/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -215,13 +215,13 @@ func (c *Controller) Run(stopCh <-chan struct{}) error {

// Launch workers to process resources
go wait.Until(c.runAddIpPoolPodWorker, time.Second, stopCh)
go wait.Until(c.runAddNamespaceWorker, time.Second, stopCh)

for i := 0; i < c.config.WorkerNum; i++ {
go wait.Until(c.runAddPodWorker, time.Second, stopCh)
go wait.Until(c.runDeletePodWorker, time.Second, stopCh)
go wait.Until(c.runUpdatePodWorker, time.Second, stopCh)

go wait.Until(c.runAddNamespaceWorker, time.Second, stopCh)
go wait.Until(c.runDeleteNamespaceWorker, time.Second, stopCh)
go wait.Until(c.runUpdateNamespaceWorker, time.Second, stopCh)

Expand Down
26 changes: 26 additions & 0 deletions pkg/controller/namespace.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package controller

import (
"fmt"
"net"
"strings"

"github.com/alauda/kube-ovn/pkg/util"
Expand Down Expand Up @@ -209,6 +210,22 @@ func (c *Controller) handleAddNamespace(key string) error {
c.recorder.Eventf(ns, v1.EventTypeWarning, "ValidateLogicalSwitchFailed", err.Error())
return err
}

nsList, err := c.namespacesLister.List(labels.Everything())
if err != nil {
klog.Errorf("failed to list ns")
return err
}

for _, n := range nsList {
if ls != n.Annotations[util.LogicalSwitchAnnotation] && cidrConflict(cidr, n.Annotations[util.CidrAnnotation]) {
err = fmt.Errorf("cidr %s in ns %s conflict with %s in ns %s", cidr, ns.Name, n.Annotations[util.CidrAnnotation], n.Name)
klog.Error(err)
c.recorder.Eventf(ns, v1.EventTypeWarning, "CidrConflict", err.Error())
return err
}
}

if excludeIps == "" {
excludeIps = gateway
}
Expand Down Expand Up @@ -287,3 +304,12 @@ func (c *Controller) handleUpdateNamespace(key string) error {

return c.ovnClient.SetPrivateLogicalSwitch(ls, strings.Split(allow, ","))
}

func cidrConflict(a, b string) bool {
aIp, aIpNet, aErr := net.ParseCIDR(a)
bIp, bIpNet, bErr := net.ParseCIDR(b)
if aErr != nil || bErr != nil {
return false
}
return aIpNet.Contains(bIp) || bIpNet.Contains(aIp)
}

0 comments on commit 8992bbe

Please sign in to comment.