diff options
Diffstat (limited to 'src/fnettrace/radix.c')
-rw-r--r-- | src/fnettrace/radix.c | 40 |
1 files changed, 28 insertions, 12 deletions
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) { | |||
151 | } | 151 | } |
152 | 152 | ||
153 | static uint32_t sum; | 153 | static uint32_t sum; |
154 | static void print(RNode *ptr, int level, int pkts) { | 154 | static void print(FILE *fp, RNode *ptr, int level, int pkts) { |
155 | assert(fp); | ||
155 | if (!ptr) | 156 | if (!ptr) |
156 | return; | 157 | return; |
157 | if (ptr->name) { | 158 | if (ptr->name) { |
158 | if (pkts) { | 159 | if (pkts) { |
159 | if (ptr->pkts) { | 160 | if (ptr->pkts) { |
160 | printf(" %d.%d.%d.%d/%d ", PRINT_IP(sum << (32 - level)), level); | 161 | fprintf(fp, " %d.%d.%d.%d/%d ", PRINT_IP(sum << (32 - level)), level); |
161 | printf("%s", ptr->name); | 162 | fprintf(fp, "%s", ptr->name); |
162 | printf(" (%u)\n", ptr->pkts); | 163 | fprintf(fp, " (%u)\n", ptr->pkts); |
163 | } | 164 | } |
164 | } | 165 | } |
165 | else { | 166 | else { |
166 | printf("%d.%d.%d.%d/%d ", PRINT_IP(sum << (32 - level)), level); | 167 | fprintf(fp, "%d.%d.%d.%d/%d ", PRINT_IP(sum << (32 - level)), level); |
167 | printf("%s", ptr->name); | 168 | fprintf(fp, "%s", ptr->name); |
168 | printf("\n"); | 169 | fprintf(fp, "\n"); |
169 | } | 170 | } |
170 | } | 171 | } |
171 | 172 | ||
@@ -174,21 +175,21 @@ static void print(RNode *ptr, int level, int pkts) { | |||
174 | 175 | ||
175 | level++; | 176 | level++; |
176 | sum <<= 1; | 177 | sum <<= 1; |
177 | print(ptr->zero, level, pkts); | 178 | print(fp, ptr->zero, level, pkts); |
178 | sum++; | 179 | sum++; |
179 | print(ptr->one, level, pkts); | 180 | print(fp, ptr->one, level, pkts); |
180 | sum--; | 181 | sum--; |
181 | sum >>= 1; | 182 | sum >>= 1; |
182 | } | 183 | } |
183 | 184 | ||
184 | void radix_print(int pkts) { | 185 | void radix_print(FILE *fp, int pkts) { |
185 | if (!head) | 186 | if (!head) |
186 | return; | 187 | return; |
187 | sum = 0; | 188 | sum = 0; |
188 | print(head->zero, 1, pkts); | 189 | print(fp, head->zero, 1, pkts); |
189 | assert(sum == 0); | 190 | assert(sum == 0); |
190 | sum = 1; | 191 | sum = 1; |
191 | print(head->one, 1, pkts); | 192 | print(fp, head->one, 1, pkts); |
192 | assert(sum == 1); | 193 | assert(sum == 1); |
193 | } | 194 | } |
194 | 195 | ||
@@ -241,3 +242,18 @@ void radix_squash(void) { | |||
241 | assert(sum == 1); | 242 | assert(sum == 1); |
242 | 243 | ||
243 | } | 244 | } |
245 | |||
246 | static void clear_data(RNode *ptr) { | ||
247 | if (!ptr) | ||
248 | return; | ||
249 | ptr->pkts = 0; | ||
250 | clear_data(ptr->zero); | ||
251 | clear_data(ptr->one); | ||
252 | } | ||
253 | |||
254 | void radix_clear_data(void) { | ||
255 | if (!head) | ||
256 | return; | ||
257 | clear_data(head->zero); | ||
258 | clear_data(head->one); | ||
259 | } | ||