Merge pull request #42598 from deepy/linux-routeoverlaps-link-only

Only check if route overlaps routes with scope: LINK
This commit is contained in:
Sebastiaan van Stijn 2021-08-26 09:58:35 +02:00 committed by GitHub
commit 2bb21b85c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 2 deletions

View File

@ -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
} }
} }

View File

@ -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) {