|
@@ -30,7 +30,28 @@ const (
|
|
|
ip6 ipFamily = "IPv6"
|
|
|
)
|
|
|
|
|
|
-func ValidateIPAM(ipam *IPAM, enableIPv6 bool) error {
|
|
|
+// HasIPv6Subnets checks whether there's any IPv6 subnets in the ipam parameter. It ignores any invalid Subnet and nil
|
|
|
+// ipam.
|
|
|
+func HasIPv6Subnets(ipam *IPAM) bool {
|
|
|
+ if ipam == nil {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, cfg := range ipam.Config {
|
|
|
+ subnet, err := netip.ParsePrefix(cfg.Subnet)
|
|
|
+ if err != nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ if subnet.Addr().Is6() {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return false
|
|
|
+}
|
|
|
+
|
|
|
+func ValidateIPAM(ipam *IPAM) error {
|
|
|
if ipam == nil {
|
|
|
return nil
|
|
|
}
|
|
@@ -51,10 +72,6 @@ func ValidateIPAM(ipam *IPAM, enableIPv6 bool) error {
|
|
|
errs = append(errs, fmt.Errorf("invalid subnet %s: it should be %s", subnet, subnet.Masked()))
|
|
|
}
|
|
|
|
|
|
- if !enableIPv6 && subnetFamily == ip6 {
|
|
|
- errs = append(errs, fmt.Errorf("invalid subnet %s: IPv6 has not been enabled for this network", subnet))
|
|
|
- }
|
|
|
-
|
|
|
if ipRangeErrs := validateIPRange(cfg.IPRange, subnet, subnetFamily); len(ipRangeErrs) > 0 {
|
|
|
errs = append(errs, ipRangeErrs...)
|
|
|
}
|