* The JavaScript RingBuffer structure updated correctly.
* Replaced the funnel graph with text - easier to read.
* Discovered that the current "parking_lot" could become unstable
under very heavy load, and only with "fat" LTO. Since it's
no longer recommended (recent change), removed it.
* Replaced the "lazy_static" macro suite with the newly recommended
"once_cell" system. Less code.
* Full source format.
* Update some dependency versions.
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.
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.
* The new Rust utility "webusers" manages /opt/libreqos/webusers.toml.
* You can add/update/remove/list users from that tool.
* The "allow anonymous" option in webusers.toml permits access for
unauthenticated users, but won't let them change anything. This is
for payne demonstrations.
* All web APIs and pages should now be secured, requiring a login.
* The login requires cookies.
Signed-off-by: Herbert Wolverson <herberticus@gmail.com>
* The frequency with which TC queues are polled for statistics is
now controled by `queue_check_period_ms` in `/etc/lqos`.
* Example file updated.
* Configuration display updated.
This is designed to act as a compromise: for detailed analysis, it
can be updated to a low number. For regular running, it can be updated
to 1000 or more.
Signed-off-by: Herbert Wolverson <herberticus@gmail.com>
Replaces the previously separate repo, merging the Rust
system into the mainline ready for 1.4.
The Rust system currently provides:
* lqos_bus: type definitions for localhost control bus.
* lqos_config: handler for configuration files.
* lqos_node_manager: local web-based monitor and manager.
* lqos_sys: eBPF program that handles all of the tracking,
CPU assignment, VLAN redirect, TC queue assignment,
and RTT tracking. Wrapped in a Rust core, providing
consistent in-Rust building and mostly-safe wrappers
to C code.
* lqosd: a daemon designed to run continually while
LibreQoS is operating. On start, it parses the configuration
files and sets up interface mapping (the Python code is still
required to actually build queues). It then assigns the various
eBPF programs to appropriate interfaces. The eBPF systems are
removed when the daemon terminates.
lqosd also provides a "bus", listening to requests for changes
or information on localhost, providing a control plane for
the rest of the project.
* lqtop: An example program demonstrating how to use the bus,
acts like "top", showing current network traffic and mappings.
* xdp_iphash_to_cpu_cmdline: a Rust wrapper providing the same
services as the cpumap originated tool of the same name. This is
a "shim" - it will go away once the native Python library is
ready.
* xdp_pping: also a shim, providing equivalent services to the
cpumap service of the same name.
A helper shell script "remove_pinned_maps.sh" can be used to
remove all pinned eBPF maps from the system, allowing for eBPF
program upgrades that change persistent map structures without
a reboot.
Signed-off-by: Herbert Wolverson <herberticus@gmail.com>