|
|
|
@ -31,25 +31,24 @@
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
int CIDRFromMask(uint32_t netmask)
|
|
|
|
int CIDRFromMask(uint32_t netmask)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
netmask = ntohl(netmask);
|
|
|
|
if (netmask == 0) {
|
|
|
|
if (netmask == 0) {
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
int lead_1 = 0;
|
|
|
|
int p = 0;
|
|
|
|
bool seen_0 = false;
|
|
|
|
bool seen_1 = false;
|
|
|
|
for (int i = 0; i < 32; i++) {
|
|
|
|
while (netmask > 0) {
|
|
|
|
if (!seen_0) {
|
|
|
|
if (netmask & 1) {
|
|
|
|
if ((netmask & BIT_U32(i)) != 0) {
|
|
|
|
seen_1 = true;
|
|
|
|
lead_1++;
|
|
|
|
p++;
|
|
|
|
} else {
|
|
|
|
|
|
|
|
seen_0 = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
if ((netmask & BIT_U32(i)) != 0) {
|
|
|
|
if (seen_1) {
|
|
|
|
return -1;
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
netmask >>= 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return lead_1;
|
|
|
|
return p;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
uint32_t CIDRGet(int cidr)
|
|
|
|
uint32_t CIDRGet(int cidr)
|
|
|
|
|