From 013a5284c901a6ce80320f499685b89d15eeed9e Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Tue, 13 Nov 2012 12:21:08 +0100 Subject: api: add nfct_bitmask object In order to use generic getter/setter API with upcoming conntrack label extension, add helper functions to set/test/unset bits in a vector of arbitrary size. Conntrack labels will then be encoded via nfct_bitmask object. Original idea from Pablo Neira Ayuso. Signed-off-by: Florian Westphal --- qa/test_api.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'qa') diff --git a/qa/test_api.c b/qa/test_api.c index e1f1750..911b160 100644 --- a/qa/test_api.c +++ b/qa/test_api.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -31,6 +32,54 @@ static void eval_sigterm(int status) } } +static void test_nfct_bitmask(void) +{ + struct nfct_bitmask *a, *b; + unsigned short int maxb, i; + + maxb = rand() & 0xffff; + + a = nfct_bitmask_new(maxb); + + assert(!nfct_bitmask_test_bit(a, maxb + 32)); + nfct_bitmask_set_bit(a, maxb + 32); + assert(!nfct_bitmask_test_bit(a, maxb + 32)); + + for (i = 0; i <= maxb; i++) + assert(!nfct_bitmask_test_bit(a, i)); + + for (i = 0; i <= maxb; i++) { + if (rand() & 1) { + assert(!nfct_bitmask_test_bit(a, i)); + continue; + } + nfct_bitmask_set_bit(a, i); + assert(nfct_bitmask_test_bit(a, i)); + } + + b = nfct_bitmask_clone(a); + assert(b); + + for (i = 0; i <= maxb; i++) { + if (nfct_bitmask_test_bit(a, i)) + assert(nfct_bitmask_test_bit(b, i)); + else + assert(!nfct_bitmask_test_bit(b, i)); + } + + nfct_bitmask_destroy(a); + + for (i = 0; i <= maxb; i++) { + if (rand() & 1) + continue; + nfct_bitmask_unset_bit(b, i); + assert(!nfct_bitmask_test_bit(b, i)); + } + + nfct_bitmask_destroy(b); +} + + int main(void) { int ret, i; @@ -40,6 +89,8 @@ int main(void) const char *val; int status; + srand(time(NULL)); + /* initialize fake data for testing purposes */ for (i=0; i