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>
* Add src/rust/target to the .gitignore file,
to avoid including Rust build artifacts in the
Git tree.
* Fix the syntax when calling the IP mapping helper
and deleting IP mappings.
Signed-off-by: Herbert Wolverson <herberticus@gmail.com>
* Modifies ispConfig.example.py to include work-in-progress
"on a stick" configuration. You can specify 2 VLANs on a
single interface and operate on a single interface.
* LibreQoS.py no longer calls cpumap commands, but instead
calls the Rust shims that do the same thing with the new
Rust environment (which is in the next commit).
* LibreQoS.py detects when running "on a stick", and divides
the number of available queues by 2. The first half are
used for download queues, the second for upload queues.
This allows a single TC hierarchy to be installed on the
single "stick" interface, and still divide traffic by core.
Part of #181
Signed-off-by: Herbert Wolverson <herberticus@gmail.com>
FIXES#177
Apply the change suggested in the issue body: UISP can report
devices with duplicate IP addresses across interfaces. Check
that an IP address is unique before applying it.
Changed for both Flat and Hierarchy networks.
When the repo was rearranged, it broke a unit test that expected
to find network.json.example in the "1.3" folder. It now looks
in the src/ folder, and the test passes.
The v1.3 release features fast latency tracking, partial queue reload,
IPv6 and IPv4 trie support, huge scalability improvements (30k subs
per core now), a Circuit ID identifier and other improvements across the
board.