Nexapp - Quality of Service (QoS)
Quality of Service (QoS)
NexappOS QoS provides Active Queue Management (AQM) and Flow Queuing (FQ) features to ensure bandwidth is used efficiently and fairly across all users and applications. This helps keep business-critical traffic responsive even when links are congested.
Operating Principles
QoS in NexappOS is built to optimize real-world WAN usage without imposing harsh shaping by default. It operates on these fundamentals:
Bandwidth Usage
- QoS aims to use all available bandwidth effectively.
- It does not apply strict bandwidth caps unless you explicitly configure them.
- Unused bandwidth is dynamically reclaimed and shared across active flows.
Flow Management
- QoS actively manages traffic flows so no single host or application can dominate the link.
- This ensures fair access for all clients and keeps latency-sensitive services stable.
Configuration
Bandwidth management is automatic once link rates are provided.
- Open Network → QoS
- Enable QoS on the desired interface(s).
- Enter Upload and Download speeds per interface.
QoS can run on any interface, but it is most effective on WAN links, where the stated upload/download should match the real ISP data rates.
Best practice
To prevent saturation and improve stability, configure rates about 10% lower than measured values.
Advanced Configuration
QoS uses an eBPF-based classifier to assign DSCP values to packets.
Because classification runs in kernel space, performance overhead remains minimal even at high throughput.
Advanced capabilities: - classification by IP and port - classification by DNS name or pattern - dynamic demotion of heavy flows - prioritization of small packets to reduce latency
QoS works well without manual tuning, but specific scenarios may benefit from CLI customization.
Priority Classes
QoS uses four priority classes. Each class has a maximum bandwidth share (threshold) and maps to DSCP codepoints.
| Class | DSCP / Tags | Max Threshold | Typical Use |
|---|---|---|---|
| Bulk | CS1, LE (kernel v5.9+) | 6.25% | Large downloads, backups, updates |
| Best Effort | General | 100% | Default traffic such as browsing |
| Video | AF4x, AF3x, CS3, AF2x, CS2, TOS4, TOS1 | 50% | Streaming, conferencing video |
| Voice | CS7, CS6, EF, VA, CS5, CS4 | 25% | VoIP, real-time audio |
Dynamic Behavior
- QoS may temporarily demote a flow if it produces excessive traffic (for example, shifting to Bulk).
- Small packets can be prioritized to keep latency low for interactive services.
- This reduces bufferbloat and improves SD-WAN application quality.
Override DSCP Classification (CLI)
To manually override classification, create:
/etc/qosify/10-custom.conf
Each line contains two whitespace-separated values:
<match> <dscp>
Supported Match Formats
tcp:<port>[-<endport>]
TCP single port or rangeudp:<port>[-<endport>]
UDP single port or range<ipaddr>
IPv4 address (example:1.1.1.1)<ipv6addr>
IPv6 address (example:ff01::1)dns:<pattern>
Wildcard hostname pattern using*and?dns:/<regex>
POSIX extended regex (works only if DNS lookups are passed via ubus add_dns_host)dns_c:<pattern>
Matches only CNAME entries
DSCP Values
- Can be raw numbers or codepoints like
CS0,CS7,voice,video. - Prefixing with
+overrides only when current DSCP is zero.
Example
tcp:80 +voice
216.58.204.238 video
dns:example.org +CS7
Troubleshooting
Check QoS status and packet distribution:
qosify-status
Validate that packets are being classified into the four priority classes as expected.