فهرست منبع

Only check if route overlaps routes with scope: LINK

Signed-off-by: Alex Nordlund <alexander.nordlund@nasdaq.com>
Alex Nordlund 4 سال پیش
والد
کامیت
ee9e526764
2فایلهای تغییر یافته به همراه10 افزوده شده و 2 حذف شده
  1. 1 1
      libnetwork/netutils/utils_linux.go
  2. 9 1
      libnetwork/netutils/utils_linux_test.go

+ 1 - 1
libnetwork/netutils/utils_linux.go

@@ -31,7 +31,7 @@ func CheckRouteOverlaps(toCheck *net.IPNet) error {
 		return err
 		return err
 	}
 	}
 	for _, network := range networks {
 	for _, network := range networks {
-		if network.Dst != nil && NetworkOverlaps(toCheck, network.Dst) {
+		if network.Dst != nil && network.Scope == netlink.SCOPE_LINK && NetworkOverlaps(toCheck, network.Dst) {
 			return ErrNetworkOverlaps
 			return ErrNetworkOverlaps
 		}
 		}
 	}
 	}

+ 9 - 1
libnetwork/netutils/utils_linux_test.go

@@ -46,8 +46,11 @@ func TestCheckRouteOverlaps(t *testing.T) {
 		routes := []netlink.Route{}
 		routes := []netlink.Route{}
 		for _, addr := range routesData {
 		for _, addr := range routesData {
 			_, netX, _ := net.ParseCIDR(addr)
 			_, netX, _ := net.ParseCIDR(addr)
-			routes = append(routes, netlink.Route{Dst: netX})
+			routes = append(routes, netlink.Route{Dst: netX, Scope: netlink.SCOPE_LINK})
 		}
 		}
+		// Add a route with a scope which should not overlap
+		_, netX, _ := net.ParseCIDR("10.0.5.0/24")
+		routes = append(routes, netlink.Route{Dst: netX, Scope: netlink.SCOPE_UNIVERSE})
 		return routes, nil
 		return routes, nil
 	}
 	}
 	defer func() { networkGetRoutesFct = nil }()
 	defer func() { networkGetRoutesFct = nil }()
@@ -61,6 +64,11 @@ func TestCheckRouteOverlaps(t *testing.T) {
 	if err := CheckRouteOverlaps(netX); err == nil {
 	if err := CheckRouteOverlaps(netX); err == nil {
 		t.Fatal("10.0.2.0/24 and 10.0.2.0 should overlap but it doesn't")
 		t.Fatal("10.0.2.0/24 and 10.0.2.0 should overlap but it doesn't")
 	}
 	}
+
+	_, netX, _ = net.ParseCIDR("10.0.5.0/24")
+	if err := CheckRouteOverlaps(netX); err != nil {
+		t.Fatal("10.0.5.0/24 and 10.0.5.0 with scope UNIVERSE should not overlap but it does")
+	}
 }
 }
 
 
 func TestCheckNameserverOverlaps(t *testing.T) {
 func TestCheckNameserverOverlaps(t *testing.T) {