From c4962789fc88e349a0c6a6c51af4a7cfc09fcc99 Mon Sep 17 00:00:00 2001 From: netblue30 Date: Tue, 8 Aug 2023 16:27:18 -0400 Subject: nettrace stats --- src/fnettrace/radix.c | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) (limited to 'src/fnettrace/radix.c') diff --git a/src/fnettrace/radix.c b/src/fnettrace/radix.c index 322ee2643..9dfa725a2 100644 --- a/src/fnettrace/radix.c +++ b/src/fnettrace/radix.c @@ -151,21 +151,22 @@ RNode *radix_longest_prefix_match(uint32_t ip) { } static uint32_t sum; -static void print(RNode *ptr, int level, int pkts) { +static void print(FILE *fp, RNode *ptr, int level, int pkts) { + assert(fp); if (!ptr) return; if (ptr->name) { if (pkts) { if (ptr->pkts) { - printf(" %d.%d.%d.%d/%d ", PRINT_IP(sum << (32 - level)), level); - printf("%s", ptr->name); - printf(" (%u)\n", ptr->pkts); + fprintf(fp, " %d.%d.%d.%d/%d ", PRINT_IP(sum << (32 - level)), level); + fprintf(fp, "%s", ptr->name); + fprintf(fp, " (%u)\n", ptr->pkts); } } else { - printf("%d.%d.%d.%d/%d ", PRINT_IP(sum << (32 - level)), level); - printf("%s", ptr->name); - printf("\n"); + fprintf(fp, "%d.%d.%d.%d/%d ", PRINT_IP(sum << (32 - level)), level); + fprintf(fp, "%s", ptr->name); + fprintf(fp, "\n"); } } @@ -174,21 +175,21 @@ static void print(RNode *ptr, int level, int pkts) { level++; sum <<= 1; - print(ptr->zero, level, pkts); + print(fp, ptr->zero, level, pkts); sum++; - print(ptr->one, level, pkts); + print(fp, ptr->one, level, pkts); sum--; sum >>= 1; } -void radix_print(int pkts) { +void radix_print(FILE *fp, int pkts) { if (!head) return; sum = 0; - print(head->zero, 1, pkts); + print(fp, head->zero, 1, pkts); assert(sum == 0); sum = 1; - print(head->one, 1, pkts); + print(fp, head->one, 1, pkts); assert(sum == 1); } @@ -241,3 +242,18 @@ void radix_squash(void) { assert(sum == 1); } + +static void clear_data(RNode *ptr) { + if (!ptr) + return; + ptr->pkts = 0; + clear_data(ptr->zero); + clear_data(ptr->one); +} + +void radix_clear_data(void) { + if (!head) + return; + clear_data(head->zero); + clear_data(head->one); +} -- cgit v1.2.3-54-g00ecf