the match phase. Enum options have to replace minus with underscore.
E.g. `ack-filter` becomes `ack_filter`.
So you can do:
`string_table_enum!(DashingEnum, option_1, option2);`
And read `DashingEnum::from_str("option-1")`
Instead of polling every TC queue, maintain a "watch list" (with
auto expiration). Opening a queue in the GUI adds that queue to
the "watch list".
Only queues in the watch list are polled.
* Remove the `lqosd` lib/main hack.
* Move benchmarks from lqosd into the new `lqos_queue_tracker` crate.
* Move queue tracking into a separate crate, to make it easier to
work with.
* Add a secondary build option (as library) to lqosd, by including
a `lib.rs` file that mirrors `main.rs`.
* Add the boilerplate required for a Criterion-based benchmark
setup.
* Add support for `cargo bench` launching a set of tests that
benchmark deserializing TC queues, and benchmarks retrieving
queue statistics from `tc`.
Cake Diff functions now use "checked_sub" to ensure that an overflow
doesn't mess up data.
Web UI includes checks that Cake data is available on each history
tick.
While json sends everything around as a u64, many of the cake
variables internally and in the protocol, are 16-32 bit. It
seemed a major memory savings to have the types more closely
match the underlying reality, and one small step towards
actually getting these values from the kernel more directly.
In terms of surprise several of those can actually roll over,
which is something we need to look out for in the future.
callback-based setup that elides the need to clone data on the
hot path.
Clean up the throughput data collection into clearly defined
stages, using Rayon where appropriate to speed up iterator-based
tasks.
This removes: 2 memcpy and 1 memmove per circuit, per second.
The previous wording was confusing, making people think that the
configuration entry was referring to the Linux bridge - while it
meant "use the XDP bridge that happens to run in kernel space".
The new wording should be more obvious.
IMPORTANT: run "remove_pinned_maps.sh" before you run the new
version of lqosd. The eBPF map structure has changed.
1) Add a "last_seen" value to the map_traffic eBPF map.
2) Whenever traffic is seen, update "last_seen" to equal the
result of a bpf_ktime_get_boot_ns() call.
3) When retrieving the unknown IP list, perform a syscall to
obtain the time since boot in nanoseconds and subtract
five minutes.
4) Filter out any unknown IPs that exceed the 5 minute window.
This should solve the problem with "unknown IPs" filling up
on start, and gradually accumulating.