Commit Graph
332 Commits
Author SHA1 Message Date
Nils Andreas Svee 817cc304e6 refactor(time): Introduce typed clock sources for compile-time safety
This change replaces runtime `ClockId` parameters with distinct types to ensure correct clock usage at compile time.
2026-09-30 12:05:42 +07:00
Nils Andreas Svee e27bab1944 chore(deps): update rust crate icmp-socket2 to v0.6.2
Rust CI / cargo fmt (push) Successful in 17s
Rust CI / cargo clippy (push) Failing after 40s
Rust CI / cargo check (x86_64-unknown-linux-gnu) (push) Failing after 40s
Rust CI / cargo check (x86_64-unknown-linux-musl) (push) Failing after 9s
Rust CI / cargo test (x86_64-unknown-linux-gnu) (push) Failing after 47s
Rust CI / cargo test (x86_64-unknown-linux-musl) (push) Failing after 8s
Supply chain / actionlint (push) Successful in 9s
Rust CI / cargo doc (push) Successful in 43s
Supply chain / cargo-deny advisories (push) Failing after 1m48s
Supply chain / cargo-deny bans licenses sources (push) Failing after 1m50s
2026-09-28 19:52:26 +07:00
renovate[bot] fbb971b47d chore(deps): update rust crate icmp-socket2 to v0.6.1
Rust CI / cargo fmt (push) Successful in 16s
Rust CI / cargo clippy (push) Failing after 38s
Rust CI / cargo check (x86_64-unknown-linux-gnu) (push) Failing after 37s
Rust CI / cargo check (x86_64-unknown-linux-musl) (push) Failing after 8s
Rust CI / cargo test (x86_64-unknown-linux-gnu) (push) Failing after 46s
Rust CI / cargo test (x86_64-unknown-linux-musl) (push) Failing after 10s
Supply chain / actionlint (push) Successful in 6s
Rust CI / cargo doc (push) Successful in 40s
Supply chain / cargo-deny bans licenses sources (push) Failing after 1m45s
Supply chain / cargo-deny advisories (push) Failing after 1m49s
2026-09-28 07:49:49 +00:00
renovate Bot 3fbc96b15f chore(deps): update github/codeql-action digest to 2892aa5
Rust CI / cargo fmt (pull_request) Successful in 10s
Rust CI / cargo clippy (pull_request) Failing after 29s
Rust CI / cargo check (x86_64-unknown-linux-gnu) (pull_request) Failing after 27s
Rust CI / cargo check (x86_64-unknown-linux-musl) (pull_request) Failing after 8s
Rust CI / cargo test (x86_64-unknown-linux-gnu) (pull_request) Failing after 38s
Rust CI / cargo test (x86_64-unknown-linux-musl) (pull_request) Failing after 9s
Rust CI / cargo doc (pull_request) Successful in 37s
Supply chain / actionlint (pull_request) Successful in 9s
Supply chain / cargo-deny advisories (pull_request) Failing after 1m47s
Supply chain / cargo-deny bans licenses sources (pull_request) Failing after 1m42s
Rust CI / cargo fmt (push) Successful in 16s
Rust CI / cargo clippy (push) Failing after 38s
Rust CI / cargo check (x86_64-unknown-linux-gnu) (push) Failing after 37s
Rust CI / cargo check (x86_64-unknown-linux-musl) (push) Failing after 7s
Rust CI / cargo test (x86_64-unknown-linux-gnu) (push) Failing after 46s
Rust CI / cargo test (x86_64-unknown-linux-musl) (push) Failing after 10s
Supply chain / actionlint (push) Successful in 8s
Rust CI / cargo doc (push) Successful in 44s
Supply chain / cargo-deny bans licenses sources (push) Failing after 1m48s
Supply chain / cargo-deny advisories (push) Failing after 1m51s
2026-09-25 17:01:54 +00:00
Nils Andreas Svee c199d63c93 ci: split Gitea and GitHub workflows
Rust CI / cargo fmt (push) Successful in 11s
Rust CI / cargo clippy (push) Failing after 34s
Rust CI / cargo check (x86_64-unknown-linux-gnu) (push) Failing after 34s
Rust CI / cargo test (x86_64-unknown-linux-gnu) (push) Failing after 41s
Rust CI / cargo check (x86_64-unknown-linux-musl) (push) Failing after 9s
Rust CI / cargo test (x86_64-unknown-linux-musl) (push) Failing after 8s
Rust CI / cargo doc (push) Successful in 36s
Supply chain / actionlint (push) Successful in 11s
Supply chain / cargo-deny bans licenses sources (push) Failing after 1m54s
Supply chain / cargo-deny advisories (push) Failing after 2m1s
2026-09-26 00:01:03 +07:00
renovate Bot 2afa1bba35 chore(deps): update rust crate thiserror to v2.0.21
Build / build (push) Failing after 3s
DevSkim / DevSkim (push) Failing after 1m21s
rust-clippy analyze / Run rust-clippy analyzing (push) Failing after 1m41s
2026-09-25 17:26:03 +07:00
renovate Bot d03effd600 chore(deps): update rust crate config to v0.15.26 2026-09-25 17:26:03 +07:00
renovate Bot 6103d2dae4 chore(deps): update rust crate syn to v3.0.6 2026-09-25 17:26:03 +07:00
renovate Bot efe9eff036 chore(deps): update rust crate rustix to v1.1.5 2026-09-25 17:26:03 +07:00
renovate Bot bb94b42d24 chore(deps): update google/osv-scanner-action action to v2.6.0 2026-09-25 17:26:03 +07:00
renovate Bot de8d7e3aeb chore(deps): update netlink dependencies to v0.3.5 2026-09-25 17:26:02 +07:00
renovate Bot 746636b59a chore(deps): update rust crate trybuild to v1.0.121 2026-09-25 17:26:02 +07:00
renovate Bot 83e02c6e1c chore(deps): update actions-rust-lang/setup-rust-toolchain action to v2 2026-09-25 17:26:02 +07:00
Nils Andreas Svee 6d4849899e fix(settings): reject zero-floor minimum rates
Build / build (push) Failing after 4s
DevSkim / DevSkim (push) Failing after 1m22s
rust-clippy analyze / Run rust-clippy analyzing (push) Failing after 1m35s
2026-09-25 17:20:08 +07:00
Nils Andreas Svee 7254aa5cf9 fix(uci): propagate malformed optional sources 2026-09-25 17:20:08 +07:00
Nils Andreas Svee 5b0854920d fix(settings): reject IPv6 reflectors 2026-09-25 17:20:07 +07:00
Nils Andreas Svee 4c9fe15201 fix(log): honor configured maximum level 2026-09-25 17:20:07 +07:00
Nils Andreas Svee 5872f40d3e fix(icmp): handle RFC 792 timestamp rollover 2026-09-25 17:20:06 +07:00
renovate Bot 8fb051d48f chore(deps): update rust crate log to v0.4.34
Build / build (pull_request) Successful in 1m7s
DevSkim / DevSkim (pull_request) Failing after 1m25s
Build / build (push) Successful in 1m5s
rust-clippy analyze / Run rust-clippy analyzing (pull_request) Failing after 2m2s
DevSkim / DevSkim (push) Failing after 1m18s
rust-clippy analyze / Run rust-clippy analyzing (push) Failing after 2m7s
2026-08-29 14:29:43 +00:00
renovate Bot a0535357c7 chore(deps): update google/osv-scanner-action action to v2.5.1
Build / build (pull_request) Successful in 1m8s
DevSkim / DevSkim (pull_request) Failing after 1m26s
rust-clippy analyze / Run rust-clippy analyzing (pull_request) Failing after 2m8s
Build / build (push) Successful in 1m7s
DevSkim / DevSkim (push) Failing after 1m22s
rust-clippy analyze / Run rust-clippy analyzing (push) Failing after 1m59s
2026-08-29 14:27:59 +00:00
renovate Bot 91d773c77e chore(deps): update rust crate syn to v3.0.4
Build / build (pull_request) Successful in 1m6s
DevSkim / DevSkim (pull_request) Failing after 1m26s
rust-clippy analyze / Run rust-clippy analyzing (pull_request) Failing after 2m3s
Build / build (push) Successful in 1m6s
DevSkim / DevSkim (push) Failing after 1m22s
rust-clippy analyze / Run rust-clippy analyzing (push) Failing after 1m55s
2026-08-29 14:12:05 +00:00
Lochnair 083d464067 Merge pull request 'chore(deps): update netlink dependencies to v0.3.4' (#76) from renovate/netlink-dependencies into master
Build / build (push) Successful in 1m5s
DevSkim / DevSkim (push) Failing after 1m21s
rust-clippy analyze / Run rust-clippy analyzing (push) Failing after 2m1s
Reviewed-on: #76
2026-08-29 14:11:36 +00:00
renovate Bot f0eae4b2ce chore(deps): update netlink dependencies to v0.3.4
Build / build (pull_request) Successful in 1m4s
DevSkim / DevSkim (pull_request) Failing after 1m32s
rust-clippy analyze / Run rust-clippy analyzing (pull_request) Failing after 2m5s
2026-08-29 14:10:14 +00:00
Lochnair a6067910ad chore: make renovate combine netlink deps
Build / build (push) Successful in 1m4s
DevSkim / DevSkim (push) Failing after 1m18s
rust-clippy analyze / Run rust-clippy analyzing (push) Failing after 1m57s
2026-08-28 09:15:20 +00:00
Lochnair ffd7b0beb7 fix: remove unused import
DevSkim / DevSkim (push) Failing after 4s
Build / build (push) Successful in 57s
rust-clippy analyze / Run rust-clippy analyzing (push) Failing after 2m10s
2026-08-23 17:23:10 +00:00
Lochnair 377fb3be2d chore(ci): install latest rust
DevSkim / DevSkim (push) Failing after 4s
rust-clippy analyze / Run rust-clippy analyzing (push) Failing after 1m42s
Build / build (push) Failing after 50s
2026-08-23 17:12:17 +00:00
Lochnair d765bef002 chore(ci): add workflow_dispatch to build workflow
Build / build (push) Failing after 2s
DevSkim / DevSkim (push) Failing after 4s
rust-clippy analyze / Run rust-clippy analyzing (push) Failing after 5s
2026-08-23 16:50:26 +00:00
renovate[bot] 86b13f948e chore(deps): update rust crate thiserror to v2.0.20 2026-08-14 16:44:07 +00:00
Nils Andreas Svee 4abf4bfcb8 refactor(ratecontroller): own random generator 2026-08-13 22:16:43 +07:00
Nils Andreas Svee 1a49c9adce refactor(platform): move platform.rs to platform/mod.rs
Restructure the platform module into a directory to allow for future sub-module expansion.
2026-08-13 21:10:53 +07:00
Nils Andreas Svee 8c831e4287 refactor(ratecontroller): reorder methods to improve code organization 2026-08-13 14:20:15 +07:00
Nils Andreas Svee 6a90446b56 fix(ratecontroller): use egress interface for traffic stats
Read both RX and TX byte counters from the configured upload/egress
interface. Remove the obsolete per-direction stats selection and related
plumbing now that download load uses RX and upload load uses TX from the
same interface.
2026-08-13 14:19:53 +07:00
renovate[bot] 1ad47eaeb0 chore(deps): update rust crate syn to v3.0.3 2026-08-07 09:19:39 +00:00
renovate[bot] a27b95e9ca fix(deps): update rust crate syn to v3 2026-08-07 09:11:56 +00:00
Nils Andreas Svee be6546b443 Merge pull request #68 from Lochnair/feature/config
feat(config): migrate configuration loading to config-rs
2026-08-07 16:10:13 +07:00
Nils Andreas Svee 605ec6ef81 refactor(main): simplify interface stats direction logic
Remove the ifb/veth interface prefix detection from
interface_stats_directions. The function now unconditionally returns
RX for download and TX for upload, as the previous heuristic was
unreliable and the simplified behavior matches actual usage.
2026-08-07 16:05:00 +07:00
Nils Andreas Svee 7e0f434251 refactor: replace legacy Config with Settings
Remove legacy src/config.rs and migrate all application consumers to
the nested Settings model. Baseliner, metrics, pingers, ratecontroller,
reflector selector, and main now use Settings. Derived min rates become
methods on NetworkSettings rather than stored legacy fields.
MeasurementType and ObservabilityProtocol move into the settings module.
2026-08-07 16:04:59 +07:00
Nils Andreas Svee 3c688089a1 feat(settings): add validation and flexible boolean parsing
Add settings validation with Warning and Error severity levels.
Warnings print to stderr without preventing startup; errors are
aggregated and prevent startup. Percentage validation accepts 1..=100
rather than silently clamping. Add UCI-compatible flexible boolean
parsing through Serde, accepting 1/true/yes/y/on/enabled for true and
0/false/no/n/off/disabled for false, while native booleans continue to
deserialize correctly.
2026-08-07 16:04:59 +07:00
Nils Andreas Svee a6478c9bd4 feat(uci): derive UCI schema from settings
Add uci-derive proc-macro crate with UciConfig and UciSection derive
macros that generate UCI schema metadata from Settings structs. The
schema maps UCI section types and option names to config-rs field
paths. UciSource::from_schema() creates a source from the derived
schema, mapping known UCI options to their Settings fields while
preserving unknown options under raw UCI-derived paths.
2026-08-07 16:04:59 +07:00
Nils Andreas Svee f51d90bff6 feat(settings): parse reflector lists with CSV
Add CSV-based reflector list parsing with Serde reflector records.
The load_reflectors method reads a CSV file with reflector_ip,
ip_version, and description columns, validating IP version
consistency for each entry.
2026-08-07 16:04:59 +07:00
Nils Andreas Svee a653bcf279 ci: support static cross-compilation with vendored UCI
Add Dockerfile.ci with pkg-config for vendored UCI builds. Switch
Jenkinsfile from pre-built Docker images to Dockerfile-based agents
for full control over the build environment. Add static CRT linking
via RUSTFLAGS for standalone static binaries across the CI matrix.
2026-08-07 16:04:59 +07:00
Nils Andreas Svee af07915441 build(uci): enable vendored UCI builds and Unix development support
Switch rust-uci dependency to the Lochnair fork with vendored UCI
feature for self-contained builds without system libuci. Add
uci-vendored feature flag (enabled by default) that pulls in the
vendored C library. UCI support on non-Linux Unix is intended for
development and testing.
2026-08-07 16:04:59 +07:00
Nils Andreas Svee 39add2b2e0 feat(uci): add generalized UCI configuration source
Introduce the UciSource abstraction as a config-rs Source that reads
UCI packages and maps them into the configuration tree. Supports
package selection, required/optional behavior, and custom config/save
directories. Move rust-uci dependency to cfg(unix) to enable UCI
support on all Unix systems for development and testing, while
Linux/OpenWrt remains the production-supported platform.
2026-08-07 16:04:59 +07:00
Nils Andreas Svee c0a50c68f9 feat(config): add config-rs settings support
Introduce config-rs and Serde support with a nested Settings model.
Add config and serde dependencies with toml feature for file-based
configuration loading. The Settings struct provides typed configuration
with sensible defaults for network, output, observability, and advanced
settings sections. Environment variable override via SQMA__ prefix is
supported. The legacy Config remains in use; migration follows later.
2026-08-07 16:04:58 +07:00
renovate[bot] 8bacb102b7 chore(deps): update google/osv-scanner-action action to v2.5.0 2026-08-07 08:37:03 +00:00
renovate[bot] bc86a2cd53 fix(deps): update rust crate icmp-socket2 to 0.6.0 2026-07-29 10:04:32 +00:00
renovate[bot] c6338b596e chore(deps): update rust crate libc to v0.2.189 2026-07-24 00:05:41 +07:00
Nils Andreas Svee 7f557f26d4 style(reflector): remove redundant comment in reflector selector
Eliminate an outdated comment to improve code readability and maintain a clean codebase.
2026-07-24 00:05:41 +07:00
Nils Andreas Svee c1bcb22b23 refactor(baseliner): Replace shared Mutex state with thread-safe control snapshots
Eliminate lock contention between the baseliner, ratecontroller, and selector by moving to a message-passing architecture using immutable snapshots of reflector state. This improves data consistency and simplifies cross-thread communication.
2026-07-24 00:05:41 +07:00
Nils Andreas Svee 51377f947f refactor(baseliner): extract reflector statistics logic and add unit tests 2026-07-24 00:05:41 +07:00