ipv4ToCidr static method
Returns the CIDR for the IPv4 range between ipFrom and ipTo.
Implementation
static List<String>? ipv4ToCidr(String ipFrom, String ipTo) {
if (!isIPv4(ipFrom) || !isIPv4(ipTo)) return null;
var startIP = ipv4ToDecimal(ipFrom)!.toInt();
var endIP = ipv4ToDecimal(ipTo)!.toInt();
List<String> result = [];
while (endIP >= startIP) {
var maxSize = 32;
while (maxSize > 0) {
final mask = (pow(2, 32) - pow(2, 32 - (maxSize - 1))).toInt();
if ((startIP & mask) != startIP) break;
maxSize--;
}
final x = log(endIP - startIP + 1) / log(2);
final maxDiff = 32 - x.floor();
if (maxSize < maxDiff) maxSize = maxDiff.toInt();
result.add('${decimalToIPv4(BigInt.from(startIP))}/$maxSize');
startIP += pow(2, 32 - maxSize).toInt();
}
return result;
}