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