]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
unit test for addr_mask.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 19 Nov 2007 13:02:15 +0000 (13:02 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 19 Nov 2007 13:02:15 +0000 (13:02 +0000)
git-svn-id: file:///svn/unbound/trunk@766 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
testcode/unitmain.c
util/net_help.c

index 9470a532ae2f90fb873e296648d6bd104580a7fd..33bbd087a60c02dd8fcd65ecb73c6ec5c7f9bb52 100644 (file)
@@ -5,6 +5,7 @@
        - README file updated.
        - nice libevent not found error.
        - README talks about gnu make.
+       - 0.8: unit test for addr_mask and fixups for it.
 
 16 November 2007: Wouter
        - privilege separation is not needed in unbound at this time.
index 03ff3cfad7695321302c168cdeb97aab22e34e98..de7e8a0e3f8165253ed20843d95f7a8d548948a1 100644 (file)
@@ -117,6 +117,70 @@ net_test()
        unit_assert( !is_pow2(23) );
        unit_assert( !is_pow2(257) );
        unit_assert( !is_pow2(259) );
+
+       /* test addr_mask */
+       if(1) {
+               struct sockaddr_in a4;
+               struct sockaddr_in6 a6;
+               socklen_t l4 = (socklen_t)sizeof(a4);
+               socklen_t l6 = (socklen_t)sizeof(a6);
+               char* t4[] = {"\000\000\000\000",
+                       "\200\000\000\000",
+                       "\300\000\000\000",
+                       "\340\000\000\000",
+                       "\360\000\000\000",
+                       "\370\000\000\000",
+                       "\374\000\000\000",
+                       "\376\000\000\000",
+                       "\377\000\000\000",
+                       "\377\200\000\000",
+                       "\377\300\000\000",
+                       "\377\340\000\000",
+                       "\377\360\000\000",
+                       "\377\370\000\000",
+                       "\377\374\000\000",
+                       "\377\376\000\000",
+                       "\377\377\000\000",
+                       "\377\377\200\000",
+                       "\377\377\300\000",
+                       "\377\377\340\000",
+                       "\377\377\360\000",
+                       "\377\377\370\000",
+                       "\377\377\374\000",
+                       "\377\377\376\000",
+                       "\377\377\377\000",
+                       "\377\377\377\200",
+                       "\377\377\377\300",
+                       "\377\377\377\340",
+                       "\377\377\377\360",
+                       "\377\377\377\370",
+                       "\377\377\377\374",
+                       "\377\377\377\376",
+                       "\377\377\377\377",
+                       "\377\377\377\377",
+                       "\377\377\377\377",
+               };
+               int i;
+               a4.sin_family = AF_INET;
+               a6.sin6_family = AF_INET6;
+               for(i=0; i<35; i++) {
+                       /* address 255.255.255.255 */
+                       memcpy(&a4.sin_addr, "\377\377\377\377", 4);
+                       addr_mask((struct sockaddr_storage*)&a4, l4, i);
+                       unit_assert(memcmp(&a4.sin_addr, t4[i], 4) == 0);
+               }
+               memcpy(&a6.sin6_addr, "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377", 16);
+               addr_mask((struct sockaddr_storage*)&a6, l6, 128);
+               unit_assert(memcmp(&a6.sin6_addr, "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377", 16) == 0);
+               addr_mask((struct sockaddr_storage*)&a6, l6, 122);
+               unit_assert(memcmp(&a6.sin6_addr, "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\300", 16) == 0);
+               addr_mask((struct sockaddr_storage*)&a6, l6, 120);
+               unit_assert(memcmp(&a6.sin6_addr, "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000", 16) == 0);
+               addr_mask((struct sockaddr_storage*)&a6, l6, 64);
+               unit_assert(memcmp(&a6.sin6_addr, "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000", 16) == 0);
+               addr_mask((struct sockaddr_storage*)&a6, l6, 0);
+               unit_assert(memcmp(&a6.sin6_addr, "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000", 16) == 0);
+       }
 }
 
 #include "util/rtt.h"
index 46e0587426813e35b71e88bce32ab19cc1fbee6a..37d97f06c3d0caca06cd055525d2d675d0c7556f 100644 (file)
@@ -377,7 +377,7 @@ addr_is_ip6(struct sockaddr_storage* addr, socklen_t len)
 void
 addr_mask(struct sockaddr_storage* addr, socklen_t len, int net)
 {
-       uint8_t mask[8] = {0x0, 0x1, 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f};
+       uint8_t mask[8] = {0x0, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe};
        int i, max;
        uint8_t* s;
        if(addr_is_ip6(addr, len)) {