Releases: hudra0/qosmate
Release list
v1.8.0
What's Changed
- qosmate.sh: generalize cake options generation logic by @friendly-bits in #84
- Add Software Flow Offloading (SFO) compatibility (experimental) with conditional ctinfo by @hudra0 in #86 – Note that SFO compatibility is not fully supported; some users report issues, so please disable SFO for reliable QoS.
- initscript: silence table delete errors by @brada4 in #85
- Add Rate Limiting Feature with nftables Meter Support by @hudra0 in #87
- Default NAT ingress enabled – The default configuration now enables NAT ingress (NAT_INGRESS=1) instead of disabling
- Hotplug race fix – The init script now creates its hotplug hook before executing qosmate.sh, ensuring the hook is always installed even if the main script fails due to a missing WAN interface
- Documentation updates
Full Changelog: v1.7.0...v1.8.0
v1.7.0
What's Changed
-
Improve config management by @friendly-bits in #80
The configuration system has been completely reworked. The new logic unifies config parsing and loading, adds helper functions for message printing and logging, checks the device state correctly during auto‑setup, preserves existing configuration files under /etc/qosmate.d, and gracefully handles missing files. It writes settings to disk in a single pass to minimise flash wear, improves error checking and efficiency, introduces a /etc/qosmate.d/qosmate-defaults file for restoring defaults, and ensures required options are always present. Several default values were also updated. -
Service status shows inline rules – The status_service() function now prints the contents of the inline DSCP‑tagging rule file (/etc/qosmate.d/inline_dscptag.nft) when present, and displays a clear message when no inline rules are configured. This makes it easier to verify which rules are active. commit 2c13eb3
-
Custom rules validation fix – When validating custom nftables rules, QoSmate now deletes the existing qosmate_custom table before loading the new rules. This prevents conflicts with existing meters or sets and resolves “meter overlaps an existing set” errors during repeated saves. commit e77cacd
-
Minor improvements
Added documentation about IPv6 suffix matching to the README (documentation only).
Full Changelog: v1.6.2...v1.7.0
v1.6.2
v1.6.1
What's Changed
- Fix link‑layer migration and overhead handling – This patch resolves a bug in the configuration migration logic that could cause incorrect overhead values and missed migrations during upgrades. The fix ensures the init script uses the correct UCI path (settings.ROOT_QDISC instead of global.ROOT_QDISC), runs migrate_config() before expand_config() during upgrades, checks for old settings before deciding whether to migrate, applies proper overhead values for HFSC/HTB (DOCSIS/Ethernet), defaults the link type to “Ethernet” when unspecified and only sets the ATM overhead when it differs from the default. (Commit 5b329c6)
For affected users:
Please check your QoSmate Advanced settings and adjust if needed.
- Various improvements by @friendly-bits in #76
Full Changelog: v1.6.0...v1.6.1
v1.6.0
What's Changed
-
(Experimental) HTB support – QoSmate now supports the Hierarchical Token Bucket (HTB) queueing discipline. A new setup_htb() function configures an HTB root qdisc on both WAN and LAN interfaces, creates a three‑class hierarchy (Priority, Best Effort, Background), scales class rates and burst values dynamically, applies overhead compensation for ATM/DOCSIS/Ethernet and installs DSCP‑based filters to map EF/CS5‑7 traffic to the priority class and CS1 traffic to the background class. The init script and status service have been updated to recognise htb as a valid qdisc and provide HTB‑specific status messages.(Commits 8d59015, ef798c9)
-
Unified link‑layer settings & smart migration – Link‑layer options (overhead, minimum packet unit, link compensation) have been centralised and are now calculated consistently across HFSC, HTB and Hybrid modes. New functions determine overhead parameters, and CAKE and HFSC now use the same overhead values in Hybrid mode. A migration routine automatically migrates link‑layer config settings. (Commits 3b5ef4a, 6799502 and follow‑up fixes)
-
Inline DSCP‑tagging rules – Users can now use /etc/qosmate.d/inline_dscptag.nft file (preferably via UI) containing nftables statements that will be appended to the dscptag chain. QoSmate validates these inline rules in a temporary nftables context and integrates them automatically. Validation functions have been updated to support both custom and inline rule files. (Commits 99d32ae, 1360ee5)
-
Status service improvements & other fixes – The status service has been optimised and generalised by @friendly-bits in #75. Several fixes ensure that link‑layer migration respects the active qdisc, add system logging for migration events and update the default configuration. (Commits c1f4d2a and related fixes)
Full Changelog: v1.5.0...v1.6.0
v1.5.0
What's Changed
-
Mixed IPv4/IPv6 address handling – It is now possible to list IPv4 and IPv6 addresses together in one rule. QoSmate automatically splits mixed lists into separate IPv4 and IPv6 nftables rules, preserving negated addresses and IP‐set references, and it also generates both IPv4 and IPv6 rules when no address is specifiedgithub.zerozr99.workers.dev.
-
IPv6 suffix matching – Rules can now match IPv6 address suffixes (
::suffix/::mask) instead of only full prefixes. When a suffix format is detected, QoSmate builds the correct bitwise‑AND matching syntax for nftables, and both positive and negated suffixes are supportedgithub.zerozr99.workers.dev. -
Configurable connection limit – A new
MAX_CONNECTIONSoption was added to the advanced settings (visible in the connections tab). Users may choose from several limits (10, 50, 100, 500, 1000, 2000 or 5000); the default of0disables the limitgithub.zerozr99.workers.dev. When set, QoSmate stops readingnf_conntrackafter the specified number of connections, improving performance on systems with thousands of active flows. -
Improved rule generator – The rule‑generation function has been rewritten and renamed (
gen_rule). It now always uses consistent{ }syntax, builds comma‑separated lists directly and returns error codes instead of stringsgithub.zerozr99.workers.dev. -
Correct handling of multiple negated ports – When specifying multiple negated ports (e.g.
!3074 !3075), all!=prefixes are now stripped from individual values before creating the nftables rulegithub.zerozr99.workers.dev. This ensures negation works reliably for any number of ports. -
Performance and efficiency improvements – Several internal optimisations reduce shell overhead: whitespace trimming and configuration loading avoid unnecessary subshells, DSCP hex matching code is compacted, tc‑filter creation is generalised, unused variables are removed, and a missing AF11 DSCP filter has been addedgithub.zerozr99.workers.dev.
-
Refactoring for clarity – Additional refactoring of
create_nft_rulereduces duplication and simplifies the codegithub.zerozr99.workers.dev.
Full Changelog: v1.4.0...v1.5.0
v1.4.0
What's Changed
-
Flow Offloading Compatibility Check: Added flow offloading detection to the status service to warn users about QoSmate incompatibility. The system now checks firewall defaults for both software and hardware flow offloading settings and provides clear warnings with disable instructions when found. (Commit)
-
DSCP Conntrack Display Fix and Ingress Optimization: Resolved issue where the connections tab incorrectly displayed CS0 instead of actual DSCP markings (e.g., EF) for active connections when using HFSC/Hybrid with ingress DSCP washing enabled. The fix was then refactored for better performance and cleaner code, adding universal ingress optimization in the dscptag chain that prevents unnecessary rule processing for ingress packets while maintaining all QoS functionality. (Commits, Commit)
-
Major Code Restructuring with IPv6 Fixes and Hybrid Mode: Complete refactoring of the tc part of the main qosmate script to improve modularity:
- Split setqdisc() function into specialized functions: setup_hfsc(), setup_cake(), setup_hybrid(), setup_game_qdisc()
- Critical Fix: Added missing IPv6 tc filters for ingress traffic classification when HFSC is the root qdisc (IPv6 packets were completely unclassified in ingress direction before this fix!)
- Added hybrid mode support (HFSC realtime and bulk + CAKE for other traffic)(48507d1))
Critical Bug Fixes
The IPv6 classification bug was particularly critical as IPv6 packets were completely unclassified in the ingress direction in previous versions. This release ensures proper QoS handling for both IPv4 and IPv6 traffic.
Full Changelog: v1.3.0...v1.4.0
v1.3.0
What's Changed
-
Enhanced Status Overview:
The status_service function now provides additional system diagnostics, including system info (via ubus call system board), QoSmate version, health check status, WAN interface/device details, and the full QoSmate configuration. These improvements offer better troubleshooting and system overview capabilities.
(Commit) -
Installer One-Liner Always Uses Latest Release:
The install one-liner has been updated to always point to the latest release for easier and more reliable installation.
(Commit) -
DSCP AF11 Support for HFSC Mode:
Added support for DSCP AF11 (0x28) in HFSC mode, mapping it to the Low Priority class (1:14) and ensuring correct handling in both nftables and tc filter rules.
(Commit) -
Configurable TCP Down-Prioritization:
Introduced new UCI options to enable or disable TCP down-prioritization rules for both initial and sustained flows, offering more granular control.
(Commits, Commit) -
UI Improvement for Health Check Order:
The file integrity check within the health check now runs last, resulting in a more logical and user-friendly output order.
(Commit)
Full Changelog: v1.2.0...v1.3.0
v1.2.0
v1.1.0 First numbered release
QoSmate has been in active development for quite some time now and this marks the first official numbered release. v1.1.0 was chosen to unify the versioning between UI (previously at 1.0.25) and backend (previously at 0.5.62) components.
Notes
- Both UI and backend components will maintain synchronized version numbers from now on