QoSmate: (Yet Another) Quality of Service Tool for OpenWrt

{
        "kernel": "6.6.45",
        "hostname": "FLINT-2",
        "system": "ARMv8 Processor rev 4",
        "model": "GL.iNet GL-MT6000",
        "board_name": "glinet,gl-mt6000",
        "rootfs_type": "squashfs",
        "release": {
                "distribution": "OpenWrt",
                "version": "SNAPSHOT",
                "revision": "r27193-504b174ab9",
                "target": "mediatek/filogic",
                "description": "OpenWrt SNAPSHOT r27193-504b174ab9"
        }
}
Stopping service qosmate...
Reloading network service...
Section pbr specifies unreachable path '/usr/share/pbr/firewall.include', ignoring section
kmod-sched is not installed.
Updating opkg list...
Downloading https://github.com/pesa1234/MT6000_cust_build/raw/main/2024.08.16_r27193_6.6.45_next-r3.2.2.mtk/targets/mediatek/filogic/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_core
Downloading https://github.com/pesa1234/MT6000_cust_build/raw/main/2024.08.16_r27193_6.6.45_next-r3.2.2.mtk/targets/mediatek/filogic/packages/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/snapshots/packages/aarch64_cortex-a53/base/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_base
Downloading https://downloads.openwrt.org/snapshots/packages/aarch64_cortex-a53/base/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/snapshots/packages/aarch64_cortex-a53/luci/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_luci
Downloading https://downloads.openwrt.org/snapshots/packages/aarch64_cortex-a53/luci/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/snapshots/packages/aarch64_cortex-a53/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_packages
Downloading https://downloads.openwrt.org/snapshots/packages/aarch64_cortex-a53/packages/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/snapshots/packages/aarch64_cortex-a53/routing/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_routing
Downloading https://downloads.openwrt.org/snapshots/packages/aarch64_cortex-a53/routing/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/snapshots/packages/aarch64_cortex-a53/telephony/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_telephony
Downloading https://downloads.openwrt.org/snapshots/packages/aarch64_cortex-a53/telephony/Packages.sig
Signature check passed.
Installing kmod-sched...
Unknown package 'kmod-sched'.
Collected errors:
 * opkg_install_cmd: Cannot install package kmod-sched.
Failed to install kmod-sched.
Configuration file already exists.
Global configuration section already exists.
Enabled option already exists.
Config files have been added to sysupgrade.conf for preservation.
RTNETLINK answers: No such file or directory
We have an error talking to the kernel

This script prioritizes the UDP packets from / to a set of gaming
machines into a real-time HFSC queue with guaranteed total bandwidth

Based on your settings:

Game upload guarantee = 114400 kbps
Game download guarantee = 40864 kbps

Download direction only works if you install this on a *wired* router
and there is a separate AP wired into your network, because otherwise
there are multiple parallel queues for traffic to leave your router
heading to the LAN.

Based on your link total bandwidth, the **minimum** amount of jitter
you should expect in your network is about:

UP = 0 ms

DOWN = 0 ms

In order to get lower minimum jitter you must upgrade the speed of
your link, no queuing system can help.

Please note for your display rate that:

at 30Hz, one on screen frame lasts:   33.3 ms
at 60Hz, one on screen frame lasts:   16.6 ms
at 144Hz, one on screen frame lasts:   6.9 ms

This means the typical gamer is sensitive to as little as on the order
of 5ms of jitter. To get 5ms minimum jitter you should have bandwidth
in each direction of at least:

7200 kbps

The queue system can ONLY control bandwidth and jitter in the link
between your router and the VERY FIRST device in the ISP
network. Typically you will have 5 to 10 devices between your router
and your gaming server, any of those can have variable delay and ruin
your gaming, and there is NOTHING that your router can do about it.

adding fq_codel qdisc for non-game traffic
adding fq_codel qdisc for non-game traffic
DONE!
qdisc noqueue 0: dev lo root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc mq 0: dev eth0 root
 Sent 12751563695 bytes 10234131 pkt (dropped 0, overlimits 0 requeues 12783)
 backlog 0b 0p requeues 12783
qdisc fq_codel 0: dev eth0 parent :10 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :f limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :e limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :d limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :c limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :b limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :a limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :9 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :8 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :7 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 1716038 bytes 7081 pkt (dropped 0, overlimits 0 requeues 34)
 backlog 0b 0p requeues 34
  maxpacket 1478 drop_overlimit 0 new_flow_count 22 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :6 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 2149816785 bytes 1755886 pkt (dropped 0, overlimits 0 requeues 2236)
 backlog 0b 0p requeues 2236
  maxpacket 1518 drop_overlimit 0 new_flow_count 1819 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :5 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :4 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 10600030872 bytes 8471164 pkt (dropped 0, overlimits 0 requeues 10513)
 backlog 0b 0p requeues 10513
  maxpacket 17080 drop_overlimit 0 new_flow_count 12530 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :3 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :2 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :1 limit 10240p flows 1024 quantum 1518 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc hfsc 1: dev eth1 root refcnt 17 default 13
 Sent 106 bytes 1 pkt (dropped 1, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 8039: dev eth1 parent 1:12 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 19000000b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc pfifo 10: dev eth1 parent 1:11 limit 5071p
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 803b: dev eth1 parent 1:14 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 19000000b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 803a: dev eth1 parent 1:13 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 19000000b ecn drop_batch 64
 Sent 106 bytes 1 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 106 drop_overlimit 0 new_flow_count 1 ecn_mark 0
  new_flows_len 1 old_flows_len 0
qdisc fq_codel 803c: dev eth1 parent 1:15 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 19000000b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc ingress ffff: dev eth1 parent ffff:fff1 ----------------
 Sent 1972 bytes 5 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev lan2 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev lan3 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev lan4 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev lan5 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev lan1 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev br-lan root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev phy0-ap0 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev phy1-ap0 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc hfsc 1: dev ifb-eth1 root refcnt 2 default 13
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 803e: dev ifb-eth1 parent 1:13 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 6744150b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 8040: dev ifb-eth1 parent 1:15 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 6744150b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc pfifo 10: dev ifb-eth1 parent 1:11 limit 1803p
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 803d: dev ifb-eth1 parent 1:12 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 6744150b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 803f: dev ifb-eth1 parent 1:14 limit 10240p flows 1024 quantum 3000 target 4ms interval 100ms memory_limit 6744150b ecn drop_batch 64
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
Section pbr specifies unreachable path '/usr/share/pbr/firewall.include', ignoring section
Automatically including '/usr/share/nftables.d/ruleset-post/dscptag.nft

@Hudra do you think is possible to implement ctinfo in the future?

Since you’re using pesa’s custom build, your available packages are different.

1 Like

Recommending to follow @_FailSafe instructions https://github.com/Fail-Safe/openwrt-pesa1234-build and build Pesa firmware by including kmod-sched and other kernel modules.

2 Likes

Will build one. Thanks!

Now you know what the problem is...

Please make sure that you have the following packages installed:

kmod-sched
ip-full
kmod-veth
tc-full
kmod-netem
kmod-sched-ctinfo
kmod-ifb
kmod-sched-cake
conntrack

For the future, I will make sure that it is more obvious when packages cannot be installed.

QoSmate is using ctinfo. In fact, it is only using ctinfo and not the other download traffic shaping methods. It became too confusing for new users, so I cleaned up and removed the other methods.

3 Likes

This looks very interesting, @Hudra! I've been happily using DSCP Classify by @yelreve, but I'm comparing features to see what more QoSmate brings to the table.

What would be a compelling reason to switch to QoSmate from DSCPClassify?

FWIW, I always like to check out how things are working using Netdata + my little add-on I put together for Netdata.


Update:
@Hudra I gave QoSmate a try and hit an issue when setting up a rule for IPv6. Is this a known issue? I created a corresponding issue with the project on github.

Snippet from /etc/config/qosmate
config rule
	option name 'NextDNS6'
	option proto 'tcp'
	list dest_ip '2001:19f0:5401:1d93:5400:2ff:fece:25e9'
	list dest_ip '2605:380:57:613::5'
	list dest_ip '2605:6c80:1:60::'
	list dest_ip '2605:a880:0:7b:0:1:54d:2215'
	list dest_ip '2a00:11c0:39:353::3'
	list dest_ip '2a01:4ff:f0:ac5::1'
	list dest_ip '2a07:a8c0::'
	list dest_ip '2a07:a8c1::'
	list dest_ip '2a0b:4342:1a32:f:5054:ff:fe48:d17f'
	list dest_ip '2a0e:6902:2002:12b:5054:ff:fed7:6b78'
	list dest_port '443'
	option class 'cs5'
	option counter '1'
	option enabled '1'
Error Message
...
Automatically including '/usr/share/nftables.d/ruleset-post/dscptag.nft'
In file included from /dev/stdin:6562:1-57:
/usr/share/nftables.d/ruleset-post/dscptag.nft:121:30-67: Error: Could not resolve hostname: Name has no usable address
 meta l4proto tcp ip daddr { 2001:19f0:5401:1d93:5400:2ff:fece:25e9,2605:380:57:613::5,2605:6c80:1:60::,2605:a880:0:7b:0:1:54d:2215,2a00:11c0:39:353::3,2a01:4ff:f0:ac5::1,2a07:a8c0::,2a07:a8c1::,2a0b:4342:1a32:f:5054:ff:fe48:d17f,2a0e:6902:2002:12b:5054:ff:fed7:6b78 } th dport 443 ip dscp set cs5 counter comment "NextDNS6";
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

I believe ip daddr will need to be ip6 daddr for IPv6 addresses.

I believe that DSCPCLASSIFY has a more sophisticated logic for handling established connections (at least as far as I can recall) and it's currently not possible to create Ipsets in QoSmate. This could potentially be implemented if there is a need for it. One advantage of QoSmate, especially for resource-limited devices, is that it supports HFSC and CAKE as root qdiscs, with HFSC being significantly less CPU-intensive.

I don't think there's a clear "best" option for experienced users. I'd say just give it a try and go with whatever feels right for you.

Damn, I haven’t really been testing IPv6... I’ll check it out and get back to you.

2 Likes

wow, congratulations on your great work, thank you for taking the time to help us, I'll test it here and send you feedback. Big hug from Brazil.

2 Likes

You were spot on! When creating the rules I haven't been separating the IPv6 ones from the IPv4 ones.

I’ve made some changes (including updates to the ui validation) and pushed them to the repo. Should be working now

Just run:

service qosmate update

...and the update process should kick off. To see the changes in the UI, you might need to clear your browser cache.

4 Likes

Right on! Your update argument is pretty slick. Super easy and to the point. :sunglasses:

Also, you nailed the issue. I was able to confirm after the update that my rule was processed correctly and syntactically happy with fw4. Thanks for the super-fast turnaround on that issue!

3 Likes

Hudra I posted here in our community here in Brazil for people to test, and everyone is liking it, I'm still testing it. Congratulations on the great work. My only question is whether to use it to automatically configure if I still need to set DSCP priorities on ports 22, 80, 443, 53, 853...etc. And I wanted to know by default where the DSCP priorities are going in Bulk, bestfford, video or voice.

Hudra, I reset my Archer C6 v3 router, installed QOSmate, and in the automatic search it is allocating everything in Disk Space: where my router has only 8mb, each automatic configuration it creates files in Disk Space:, and also does not complete any configuration.

Hostname OpenWrt
Model TP-Link Archer C6 v3
Architecture MediaTek MT7621 ver:1 echo:3
Target Platform ramips/mt7621

Thank you all for the positive feedback!!

If your primary focus is gaming, then I suggest to only prioritize your gaming traffic. If you later encounter issues with voice chat, streaming, or slow website loading, you can then selectively prioritize those services. As @moeller0 wisely noted a few times before:

So, remember to prioritize sparingly.

If you want to know the mappings to the different priority tins/classes just have a look at the "rules" tab in the UI:

HFSC Mapping:

High Priority [Realtime] (1:11) EF, CS5, CS6, CS7
Fast Non-Realtime (1:12) CS4, AF41, AF42
Normal (1:13) CS0
Low Priority (1:14) CS2
Bulk (1:15) CS1

CAKE Mapping (diffserv4):

Voice (Highest Priority) CS7, CS6, EF, VA, CS5, CS4
Video CS3, AF4x, AF3x, CS2, TOS1
Best Effort CS0, AF1x, AF2x, TOS0
Bulk (Lowest Priority) CS1, LE

If you use CAKE, unmarked traffic will fall into the Best Effort category, while with HFSC, unmarked traffic will land in the Normal (1:13) class.

I'm not exactly sure what you mean. Perhaps you could use a better translator or try to express yourself more clearly?

Here are some basic details:
If you use the auto-setup function, one of the Speedtest packages from OpenWrt will be installed based on how much memory you have. This does take up some memory, but it shouldn't increase the more often you run auto-setup. You also don't have to use the auto-setup function—you can manually enter the values, and if you want to free up memory, you can uninstall the Speedtest packages afterward.

To see which Speedtest package is installed on your system, you can run the following command:

opkg list-installed | grep speedtest

Also the Auto-Setup creates a file under /tmp so if your memory is full the file probably can't be created and so the setup fails.

3 Likes

Hudra, thank you very much for the explanation, I know that the application is under construction, with my little knowledge in my opinion it is one of the best applications I have ever used, my games are running much better. Could you please authorize me to make a video on YouTube talking about the application.

1 Like

hi,

out of curiosity, according to doc there are two rule formats:

config rule 
	option name 'gaming_traffic' 
	option proto 'udp' 
	option src_ip '192.168.1.100' 
	option dest_port '3074' 
	option class 'cs5' 
	option counter '1'

and

config rule
option name 'zoom_traffic'
option proto 'tcp udp'
list dest_port '3478-3479'
list dest_port '8801-8802'
option class 'af41'
option counter '1'

in qosmate.sh as i see you only use config_get dest_port "$config" dest_port command to fetch values from both option dest_port and list dest_port. in theory, config_list_foreach can parse a list. i admit have very little understanding of config handling, but config_list_foreach looks a good candidate to process a list, so why not using that?

and maybe i'd streamline options to keep 2nd format only, as a single item list is still a list :wink:

anyhow it is great to see so many qos related options, good work! thank you.

2 Likes

It's actually possible to use list even for single elements.

For example:

config rule 
    list name 'gaming_traffic' 
    list proto 'udp' 
    list src_ip '192.168.1.100' 
    list dest_port '3074' 
    list class 'cs5' 
    list counter '1'

Or even like this:

config rule
    list name 'gaming_traffic'
    list proto 'udp tcp'
    list src_ip '192.168.1.100 192.168.1.101'
    list dest_port '3074 3075'
    list class 'cs5'
    list counter '1'

The current implementation is quite flexible, and you can actually use list for everything with the current approach. However, you’re probably right that using config_list_foreach could be cleaner and more elegant. I’ll consider this and evaluate whether it would offer any advantages over the current implementation.

Thank you!

That's good to hear.

Yes, you can do that, but please be cautious and try not to overhype it. This way, you avoid creating expectations that might not be met.

2 Likes

I have a query. If you need a WiFi AP, IP 192.168.0.126. Have Low Priority. Is it necessary to create a rule with CS2?
Or automatically all LAN connections go to Low priority class (1:14)?

And by the way, my online game improved a lot. :smiley:
I appreciate your great work :sunglasses:

hudra, when my ipv6 is on, QOSmate is not working, because it only works with IPV4, I have already tested with ipv6 on and ipv6 off, there is no chance of QOSmate working with ipv6 active.