aboutsummaryrefslogtreecommitdiffstats
path: root/src/fnettrace/radix.c
diff options
context:
space:
mode:
authorLibravatar netblue30 <netblue30@protonmail.com>2023-08-08 16:27:18 -0400
committerLibravatar netblue30 <netblue30@protonmail.com>2023-08-08 16:27:18 -0400
commitc4962789fc88e349a0c6a6c51af4a7cfc09fcc99 (patch)
tree83e69a67a17f9962846175e3f5cd0856d5e50de0 /src/fnettrace/radix.c
parentMerge branch 'master' of ssh://github.com/netblue30/firejail (diff)
downloadfirejail-c4962789fc88e349a0c6a6c51af4a7cfc09fcc99.tar.gz
firejail-c4962789fc88e349a0c6a6c51af4a7cfc09fcc99.tar.zst
firejail-c4962789fc88e349a0c6a6c51af4a7cfc09fcc99.zip
nettrace stats
Diffstat (limited to 'src/fnettrace/radix.c')
-rw-r--r--src/fnettrace/radix.c40
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
153static uint32_t sum; 153static uint32_t sum;
154static void print(RNode *ptr, int level, int pkts) { 154static 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
184void radix_print(int pkts) { 185void 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
246static 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
254void radix_clear_data(void) {
255 if (!head)
256 return;
257 clear_data(head->zero);
258 clear_data(head->one);
259}