2 * Test the radix tree net
9 #include <netinet/in.h> /* htonl */
10 #include "include/net/radix.h"
18 struct radix_node rn[2];
24 del(struct radix_node *rn, void *arg)
26 struct radix_node_head * const rnh = arg;
27 struct table_entry *ent;
29 ent = (struct table_entry *)
30 rnh->rnh_deladdr(rn->rn_key, rn->rn_mask, rnh);
31 fprintf(stderr, "del returns %p\n", ent);
38 list(struct radix_node *rn, void *arg)
40 struct table_entry *ent = (struct table_entry *)rn;
42 fprintf(stderr, "walking on node %d\n", ent->value);
47 print_dt(struct timeval *start, struct timeval *end, int n, const char *msg)
50 du = end->tv_usec - start->tv_usec;
55 ds += end->tv_sec - start->tv_sec;
58 l = (ds * 1000000+ du)/n;
59 fprintf(stderr, "%d tries in %d.%06ds, %dus each\n",
64 test1(struct radix_node_head *h, int n)
66 struct table_entry *p;
67 struct timeval start, end;
70 p = calloc(n, sizeof(*p));
73 for (i=0; i < n; i++) {
75 p->x.len[0] = p->mask.len[0] = 8;
76 p->mask.data = 0xffffffff;
79 gettimeofday(&start, NULL);
80 for (i=0; i < n; i++) {
81 h->rnh_addaddr(&(p->x), &(p->mask), h, (void *)p);
83 gettimeofday(&end, NULL);
84 print_dt(&start, &end, n, NULL);
85 h->rnh_walktree(h, del, h);
89 main(int argc, char *argv[])
91 struct radix_node_head *h = NULL;
93 rn_init(64); // XXX bits or bytes ?
94 rn_inithead((void **)&h, 32); /* data offset in bits */