const struct ip_addr *net_ip, unsigned int bits)
{
const uint32_t *ip1, *ip2;
- uint32_t mask;
+ uint32_t mask, i1, i2;
unsigned int pos, i;
if (IPADDR_IS_V4(ip) != IPADDR_IS_V4(net_ip)) {
if (ip1[i] != ip2[i])
return FALSE;
}
+ i1 = htonl(ip1[i]);
+ i2 = htonl(ip2[i]);
/* check the last full bytes */
- for (mask = 0xff; pos + 8 <= bits; pos += 8, mask <<= 8) {
- if ((ip1[i] & mask) != (ip2[i] & mask))
+ for (mask = 0xff000000; pos + 8 <= bits; pos += 8, mask >>= 8) {
+ if ((i1 & mask) != (i2 & mask))
return FALSE;
}
/* check the last bits, they're reversed in bytes */
bits -= pos;
- for (mask = 0x80 << (pos % 32); bits > 0; bits--, mask >>= 1) {
- if ((ip1[i] & mask) != (ip2[i] & mask))
+ for (mask = 0x80000000 >> (pos % 32); bits > 0; bits--, mask >>= 1) {
+ if ((i1 & mask) != (i2 & mask))
return FALSE;
}
return TRUE;