diff options
Diffstat (limited to 'tests/lib/ippool_test.c')
-rw-r--r-- | tests/lib/ippool_test.c | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/tests/lib/ippool_test.c b/tests/lib/ippool_test.c index 1d0c3a2..04306ef 100644 --- a/tests/lib/ippool_test.c +++ b/tests/lib/ippool_test.c @@ -13,36 +13,46 @@ #include "../../lib/syserr.h" -static struct ippool_t *create_pool(const char *prefix_str, unsigned int flags) +static struct ippool_t *create_pool(const char *prefix_str, unsigned int flags, char **blacklist, size_t blacklist_size) { + struct in46_prefix *blacklist_pfx; struct ippool_t *pool; struct in46_prefix pfx; size_t t; int rc; + blacklist_pfx = calloc(blacklist_size, sizeof(struct in46_prefix)); + for (int i = 0; i < blacklist_size; i++) { + rc = ippool_aton(&blacklist_pfx[i].addr, &t, blacklist[i], 0); + OSMO_ASSERT(rc == 0); + pfx.prefixlen = t; + } + /* dynamic-only v4 */ - rc = ippool_aton(&pfx.addr, &t, prefix_str, flags); + rc = ippool_aton(&pfx.addr, &t, prefix_str, 0); OSMO_ASSERT(rc == 0); pfx.prefixlen = t; - rc = ippool_new(&pool, &pfx, NULL, flags); + rc = ippool_new(&pool, &pfx, NULL, flags, blacklist_pfx, blacklist_size); OSMO_ASSERT(rc == 0); //ippool_printaddr(pool); + free(blacklist_pfx); + return pool; } -static int test_pool_size(const char *pfx, unsigned int flags, unsigned int expected_size) +static void test_pool_size(const char *pfx, unsigned int flags, char **blacklist, size_t blacklist_size, unsigned int expected_size) { struct ippool_t *pool; struct ippoolm_t *member; struct in46_addr addr; int i, rc, n; - printf("testing pool for prefix %s, flags=0x%x, expected_size=%u\n", pfx, flags, expected_size); - pool = create_pool(pfx, flags); + printf("testing pool for prefix %s, flags=0x%x, blacklist_size=%lu, expected_size=%u\n", pfx, flags, blacklist_size, expected_size); + pool = create_pool(pfx, flags, blacklist, blacklist_size); OSMO_ASSERT(pool->listsize == expected_size); memset(&addr, 0, sizeof(addr)); @@ -88,24 +98,28 @@ static int test_pool_size(const char *pfx, unsigned int flags, unsigned int expe ippool_free(pool); } -static int test_pool_sizes(void) +static void test_pool_sizes(void) { - struct ippool_t *pool; /* 256 addresses [0..255] */ - test_pool_size("192.168.23.0/24", 0, 256); + test_pool_size("192.168.23.0/24", 0, NULL, 0, 256); /* 255 addresses [1..255] */ - test_pool_size("192.168.23.0/24", IPPOOL_NONETWORK, 255); + test_pool_size("192.168.23.0/24", IPPOOL_NONETWORK, NULL, 0, 255); /* 254 addresses [1..254] */ - test_pool_size("192.168.23.0/24", IPPOOL_NONETWORK | IPPOOL_NOBROADCAST, 254); + test_pool_size("192.168.23.0/24", IPPOOL_NONETWORK | IPPOOL_NOBROADCAST, NULL, 0, 254); /* 65534 addresses [0.1..255.254] */ - test_pool_size("192.168.0.0/16", IPPOOL_NONETWORK | IPPOOL_NOBROADCAST, 65534); + test_pool_size("192.168.0.0/16", IPPOOL_NONETWORK | IPPOOL_NOBROADCAST, NULL, 0, 65534); /* 256 prefixes of /64 each */ - test_pool_size("2001:DB8::/56", 0, 256); + test_pool_size("2001:DB8::/56", 0, NULL, 0, 256); + + /* 253 addresses [1..254] & exclude 192.168.23.1/24 */ + char *blacklist[] = {"176.16.222.10/24", "192.168.23.1/24", "192.168.38.2/24"}; + test_pool_size("192.168.23.0/24", IPPOOL_NONETWORK | IPPOOL_NOBROADCAST, blacklist, 3, 253); + } int main(int argc, char **argv) |