func isOverlap(nw *net.IPNet) bool { var nameservers []string if rc, err := resolvconf.Get(); err == nil { nameservers = resolvconf.GetNameserversAsCIDR(rc.Content) } if err := netutils.CheckNameserverOverlaps(nameservers, nw); err != nil { return true } if err := netutils.CheckRouteOverlaps(nw); err != nil { return true } return false }
// FindAvailableNetwork returns a network from the passed list which does not // overlap with existing interfaces in the system func FindAvailableNetwork(list []*net.IPNet) (*net.IPNet, error) { // We don't check for an error here, because we don't really care if we // can't read /etc/resolv.conf. So instead we skip the append if resolvConf // is nil. It either doesn't exist, or we can't read it for some reason. var nameservers []string if rc, err := resolvconf.Get(); err == nil { nameservers = resolvconf.GetNameserversAsCIDR(rc.Content) } for _, nw := range list { if err := netutils.CheckNameserverOverlaps(nameservers, nw); err == nil { if err := netutils.CheckRouteOverlaps(nw); err == nil { return nw, nil } } } return nil, fmt.Errorf("no available network") }
func checkOverlap(nw *net.IPNet) error { var nameservers []string if rc, err := resolvconf.Get(); err == nil { nameservers = resolvconf.GetNameserversAsCIDR(rc.Content) } if err := netutils.CheckNameserverOverlaps(nameservers, nw); err != nil { return fmt.Errorf("overlay subnet %s failed check with nameserver: %v: %v", nw.String(), nameservers, err) } if err := netutils.CheckRouteOverlaps(nw); err != nil { return fmt.Errorf("overlay subnet %s failed check with host route table: %v", nw.String(), err) } return nil }