+++ /dev/null
-/*
- * Test the radix tree net
- */
-
-#include <sys/param.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/time.h>
-#include <netinet/in.h> /* htonl */
-#include "include/net/radix.h"
-
-struct d {
- uint8_t len[4];
- uint32_t data;
-};
-
-struct table_entry {
- struct radix_node rn[2];
- struct d x, mask;
- int value;
-};
-
-static int
-del(struct radix_node *rn, void *arg)
-{
- struct radix_node_head * const rnh = arg;
- struct table_entry *ent;
-
- ent = (struct table_entry *)
- rnh->rnh_deladdr(rn->rn_key, rn->rn_mask, rnh);
- fprintf(stderr, "del returns %p\n", ent);
- if (0 && ent != NULL)
- free(ent);
- return (0);
-}
-
-int
-list(struct radix_node *rn, void *arg)
-{
- struct table_entry *ent = (struct table_entry *)rn;
-
- fprintf(stderr, "walking on node %d\n", ent->value);
- return (0);
-}
-
-static void
-print_dt(struct timeval *start, struct timeval *end, int n, const char *msg)
-{
- int ds = 0, du, l;
- du = end->tv_usec - start->tv_usec;
- if (du < 0) {
- ds = -1;
- du += 1000000;
- }
- ds += end->tv_sec - start->tv_sec;
- if (n <= 1)
- n = 1;
- l = (ds * 1000000+ du)/n;
- fprintf(stderr, "%d tries in %d.%06ds, %dus each\n",
- n, ds, du, l);
-}
-
-static void
-test1(struct radix_node_head *h, int n)
-{
- struct table_entry *p;
- struct timeval start, end;
- int i;
-
- p = calloc(n, sizeof(*p));
- if (!p)
- return;
- for (i=0; i < n; i++) {
- p->value = i;
- p->x.len[0] = p->mask.len[0] = 8;
- p->mask.data = 0xffffffff;
- p->x.data = htonl(i);
- }
- gettimeofday(&start, NULL);
- for (i=0; i < n; i++) {
- h->rnh_addaddr(&(p->x), &(p->mask), h, (void *)p);
- }
- gettimeofday(&end, NULL);
- print_dt(&start, &end, n, NULL);
- h->rnh_walktree(h, del, h);
-}
-
-int
-main(int argc, char *argv[])
-{
- struct radix_node_head *h = NULL;
-
- rn_init(64); // XXX bits or bytes ?
- rn_inithead((void **)&h, 32); /* data offset in bits */
- test1(h, 1000000);
- return 0;
-}