Home | History | Annotate | Line # | Download | only in libnpftest
npf_table_test.c revision 1.1.2.2
      1  1.1.2.2  yamt /*	$NetBSD: npf_table_test.c,v 1.1.2.2 2012/04/17 00:09:51 yamt Exp $	*/
      2  1.1.2.2  yamt 
      3  1.1.2.2  yamt /*
      4  1.1.2.2  yamt  * NPF tableset test.
      5  1.1.2.2  yamt  *
      6  1.1.2.2  yamt  * Public Domain.
      7  1.1.2.2  yamt  */
      8  1.1.2.2  yamt 
      9  1.1.2.2  yamt #include <sys/types.h>
     10  1.1.2.2  yamt 
     11  1.1.2.2  yamt #include "npf_impl.h"
     12  1.1.2.2  yamt #include "npf_test.h"
     13  1.1.2.2  yamt 
     14  1.1.2.2  yamt static const char *ip_list[] = {
     15  1.1.2.2  yamt 	"192.168.1.1",
     16  1.1.2.2  yamt 	"10.0.0.1",
     17  1.1.2.2  yamt 	"192.168.2.1",
     18  1.1.2.2  yamt 	"10.1.0.1",
     19  1.1.2.2  yamt 	"192.168.100.253",
     20  1.1.2.2  yamt 	"10.0.5.1",
     21  1.1.2.2  yamt 	"192.168.128.127",
     22  1.1.2.2  yamt 	"10.0.0.2",
     23  1.1.2.2  yamt };
     24  1.1.2.2  yamt 
     25  1.1.2.2  yamt #define	HASH_TID		1
     26  1.1.2.2  yamt #define	TREE_TID		2
     27  1.1.2.2  yamt 
     28  1.1.2.2  yamt bool
     29  1.1.2.2  yamt npf_table_test(bool verbose)
     30  1.1.2.2  yamt {
     31  1.1.2.2  yamt 	npf_addr_t addr_storage, *addr = &addr_storage;
     32  1.1.2.2  yamt 	npf_tableset_t *tblset;
     33  1.1.2.2  yamt 	npf_table_t *t1, *t2;
     34  1.1.2.2  yamt 	int error;
     35  1.1.2.2  yamt 	u_int i;
     36  1.1.2.2  yamt 
     37  1.1.2.2  yamt 	npf_tableset_sysinit();
     38  1.1.2.2  yamt 
     39  1.1.2.2  yamt 	tblset = npf_tableset_create();
     40  1.1.2.2  yamt 	assert(tblset != NULL);
     41  1.1.2.2  yamt 
     42  1.1.2.2  yamt 	/* Table ID 1, using hash table with 256 lists. */
     43  1.1.2.2  yamt 	t1 = npf_table_create(HASH_TID, NPF_TABLE_HASH, 256);
     44  1.1.2.2  yamt 	assert(t1 != NULL);
     45  1.1.2.2  yamt 	error = npf_tableset_insert(tblset, t1);
     46  1.1.2.2  yamt 	assert(error == 0);
     47  1.1.2.2  yamt 
     48  1.1.2.2  yamt 	/* Check for double-insert. */
     49  1.1.2.2  yamt 	error = npf_tableset_insert(tblset, t1);
     50  1.1.2.2  yamt 	assert(error != 0);
     51  1.1.2.2  yamt 
     52  1.1.2.2  yamt 	/* Table ID 2, using RB-tree. */
     53  1.1.2.2  yamt 	t2 = npf_table_create(TREE_TID, NPF_TABLE_TREE, 0);
     54  1.1.2.2  yamt 	assert(t2 != NULL);
     55  1.1.2.2  yamt 	error = npf_tableset_insert(tblset, t2);
     56  1.1.2.2  yamt 	assert(error == 0);
     57  1.1.2.2  yamt 
     58  1.1.2.2  yamt 	/* Fill both tables with IP addresses. */
     59  1.1.2.2  yamt 	for (i = 0; i < __arraycount(ip_list); i++) {
     60  1.1.2.2  yamt 		addr->s6_addr32[0] = inet_addr(ip_list[i]);
     61  1.1.2.2  yamt 
     62  1.1.2.2  yamt 		error = npf_table_add_cidr(tblset, HASH_TID, addr, 32);
     63  1.1.2.2  yamt 		assert(error == 0);
     64  1.1.2.2  yamt 		error = npf_table_add_cidr(tblset, HASH_TID, addr, 32);
     65  1.1.2.2  yamt 		assert(error != 0);
     66  1.1.2.2  yamt 
     67  1.1.2.2  yamt 		error = npf_table_add_cidr(tblset, TREE_TID, addr, 32);
     68  1.1.2.2  yamt 		assert(error == 0);
     69  1.1.2.2  yamt 		error = npf_table_add_cidr(tblset, TREE_TID, addr, 32);
     70  1.1.2.2  yamt 		assert(error != 0);
     71  1.1.2.2  yamt 	}
     72  1.1.2.2  yamt 
     73  1.1.2.2  yamt 	/* Attempt to add duplicates - should fail. */
     74  1.1.2.2  yamt 	addr->s6_addr32[0] = inet_addr(ip_list[0]);
     75  1.1.2.2  yamt 
     76  1.1.2.2  yamt 	error = npf_table_add_cidr(tblset, HASH_TID, addr, 32);
     77  1.1.2.2  yamt 	assert(error != 0);
     78  1.1.2.2  yamt 
     79  1.1.2.2  yamt 	error = npf_table_add_cidr(tblset, TREE_TID, addr, 32);
     80  1.1.2.2  yamt 	assert(error != 0);
     81  1.1.2.2  yamt 
     82  1.1.2.2  yamt 	/* Reference checks. */
     83  1.1.2.2  yamt 	t1 = npf_table_get(tblset, HASH_TID);
     84  1.1.2.2  yamt 	assert(t1 != NULL);
     85  1.1.2.2  yamt 	npf_table_put(t1);
     86  1.1.2.2  yamt 
     87  1.1.2.2  yamt 	t2 = npf_table_get(tblset, TREE_TID);
     88  1.1.2.2  yamt 	assert(t2 != NULL);
     89  1.1.2.2  yamt 	npf_table_put(t2);
     90  1.1.2.2  yamt 
     91  1.1.2.2  yamt 	/* Match (validate) each IP entry. */
     92  1.1.2.2  yamt 	for (i = 0; i < __arraycount(ip_list); i++) {
     93  1.1.2.2  yamt 		addr->s6_addr32[0] = inet_addr(ip_list[i]);
     94  1.1.2.2  yamt 
     95  1.1.2.2  yamt 		error = npf_table_match_addr(tblset, HASH_TID, addr);
     96  1.1.2.2  yamt 		assert(error == 0);
     97  1.1.2.2  yamt 
     98  1.1.2.2  yamt 		error = npf_table_match_addr(tblset, TREE_TID, addr);
     99  1.1.2.2  yamt 		assert(error == 0);
    100  1.1.2.2  yamt 	}
    101  1.1.2.2  yamt 
    102  1.1.2.2  yamt 	/* Remove all entries. */
    103  1.1.2.2  yamt 	for (i = 0; i < __arraycount(ip_list); i++) {
    104  1.1.2.2  yamt 		addr->s6_addr32[0] = inet_addr(ip_list[i]);
    105  1.1.2.2  yamt 
    106  1.1.2.2  yamt 		error = npf_table_rem_cidr(tblset, HASH_TID, addr, 32);
    107  1.1.2.2  yamt 		assert(error == 0);
    108  1.1.2.2  yamt 
    109  1.1.2.2  yamt 		error = npf_table_rem_cidr(tblset, TREE_TID, addr, 32);
    110  1.1.2.2  yamt 		assert(error == 0);
    111  1.1.2.2  yamt 	}
    112  1.1.2.2  yamt 
    113  1.1.2.2  yamt 	npf_tableset_destroy(tblset);
    114  1.1.2.2  yamt 	npf_tableset_sysfini();
    115  1.1.2.2  yamt 
    116  1.1.2.2  yamt 	return true;
    117  1.1.2.2  yamt }
    118