Add Loader stats source files.

This commit is contained in:
Christian Deacon
2025-02-23 06:33:40 -05:00
parent 1f1c76854b
commit b6b43b67c2
2 changed files with 61 additions and 0 deletions

48
src/loader/utils/stats.c Normal file
View File

@@ -0,0 +1,48 @@
#include <loader/utils/stats.h>
/**
* Calculates and displays packet counters/stats.
*
* @param stats_map The stats map BPF FD.
* @param cpus The amount of CPUs the host has.
*
* @return 0 on success or 1 on failure.
*/
int CalculateStats(int stats_map, int cpus)
{
u32 key = 0;
stats_t stats[MAX_CPUS];
memset(stats, 0, sizeof(stats));
u64 allowed = 0;
u64 dropped = 0;
u64 passed = 0;
if (bpf_map_lookup_elem(stats_map, &key, stats) != 0)
{
return EXIT_FAILURE;
}
for (int i = 0; i < cpus; i++)
{
// Although this should NEVER happen, I'm seeing very strange behavior in the following GitHub issue.
// https://github.com/gamemann/XDP-Firewall/issues/10
// Therefore, before accessing stats[i], make sure the pointer to the specific CPU ID is not NULL.
if (&stats[i] == NULL)
{
fprintf(stderr, "Stats array at CPU ID #%d is NULL! Skipping...\n", i);
continue;
}
allowed += stats[i].allowed;
dropped += stats[i].dropped;
passed += stats[i].passed;
}
fflush(stdout);
fprintf(stdout, "\rAllowed: %llu | Dropped: %llu | Passed: %llu", allowed, dropped, passed);
return EXIT_SUCCESS;
}

13
src/loader/utils/stats.h Normal file
View File

@@ -0,0 +1,13 @@
#pragma once
#include <bpf.h>
#include <libbpf.h>
#include <xdp/libxdp.h>
#include <common/all.h>
#include <loader/utils/cmdline.h>
#include <loader/utils/config.h>
#include <loader/utils/helpers.h>
int CalculateStats(int stats_map, int cpus);