summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Ovsienko <infrastation@yandex.ru>2011-10-18 18:33:53 +0400
committerDenis Ovsienko <infrastation@yandex.ru>2011-12-13 19:30:45 +0400
commitcaff7905e2d28e4d5e25c0a4ffacbb22e28a7121 (patch)
treef760ccc091c5636d4c2fe8a23d2f6571323272f3
parent21f569e37d62e3c1de6e41a4e5667c0e28279bb8 (diff)
lib: optimize apply_mask_ipv4()
-rw-r--r--lib/prefix.c21
1 files changed, 3 insertions, 18 deletions
diff --git a/lib/prefix.c b/lib/prefix.c
index 075c9dab..1ddbbbe7 100644
--- a/lib/prefix.c
+++ b/lib/prefix.c
@@ -545,27 +545,12 @@ ip_masklen (struct in_addr netmask)
return len;
}
-/* Apply mask to IPv4 prefix. */
+/* Apply mask to IPv4 prefix (network byte order). */
void
apply_mask_ipv4 (struct prefix_ipv4 *p)
{
- u_char *pnt;
- int index;
- int offset;
-
- index = p->prefixlen / 8;
-
- if (index < 4)
- {
- pnt = (u_char *) &p->prefix;
- offset = p->prefixlen % 8;
-
- pnt[index] &= maskbit[offset];
- index++;
-
- while (index < 4)
- pnt[index++] = 0;
- }
+ assert (p->prefixlen >= 0 && p->prefixlen <= IPV4_MAX_BITLEN);
+ p->prefix.s_addr &= maskbytes_network[p->prefixlen];
}
/* If prefix is 0.0.0.0/0 then return 1 else return 0. */