summaryrefslogtreecommitdiff
path: root/python/vyos/qos
AgeCommit message (Collapse)Author
2024-02-09T6028: Fix QoS policy shaper wrong class_id_max and default_minor_idViacheslav Hletenko
The `class_id_max` is wrong due to `tmp.sort` of Strings If we have class 5 and class 10 we get sorted max value 5, expected 10 ``` >>> tmp = ['5', '10'] >>> tmp.sort() >>> tmp ['10', '5'] >>> >>> hex(5+1) '0x6' >>> >>> hex(10+1) '0xb' >>> ``` This way we get wrong default maximum class value: ``` tc qdisc replace dev eth1 root handle 1: htb r2q 444 default 6 ``` Expect: ``` tc qdisc replace dev eth1 root handle 1: htb r2q 444 default b ``` Fix this converting Strings to Integers and get max value. (cherry picked from commit 2e8fa45c7f0663549edd118622b3381e7c428b2e)
2024-02-07T6021: Fix QoS shaper r2q calculationViacheslav Hletenko
The current calculation `r2q` is wrong as it uses `Floor division` but expecting `division` This way `math.ceil` calculate wrong value as we expect round a number upward to its nearest integer For example for speed 710 mbits expected value `444` but we get `443` ``` from math import ceil MAXQUANTUM = 200000 speed = 710000000 speed_bps = int(speed) // 8 >>> speed_bps // MAXQUANTUM 443 >>> speed_bps / MAXQUANTUM 443.75 >>> >>> >>> ceil(speed_bps // MAXQUANTUM) 443 >>> ceil(speed_bps / MAXQUANTUM) 444 >>> ``` (cherry picked from commit ce1035e1e8642bf740e2a21693a72fe2127b8f72)
2024-02-02qos: T5848: Add triple-isolate option to CAKE policy configMatthew Kobayashi
(cherry picked from commit 61342083d7db8c30d015474fae5cb71f480487d8)
2024-02-01T5974: Fix QoS shape bandwidth and ceil calculation for defaultViacheslav Hletenko
The default `bandwidth` and `ceiling` should calculate values based on <tag> bandwidth but currently it gets the value from qos.base `/sys/class/net/{self._interface}/speed` ``` set qos policy shaper SHAPER bandwidth '20mbit' set qos policy shaper SHAPER default bandwidth '95%' set qos policy shaper SHAPER default ceiling '100%' ``` It causes wrong calculations for class `default` i.e 950Mbit for bandwidth (expected 95% of bandwidth, 19Mbit) 1Gbit for ceil (expected 100% of bandwidth, 20Mbit) Gets incorrect values ``` r4# tc class show dev eth1 class htb 1:1 root rate 20Mbit ceil 20Mbit burst 1600b cburst 1600b class htb 1:a parent 1:1 leaf 8053: prio 0 rate 200Kbit ceil 200Kbit burst 1Mb cburst 1600b class htb 1:b parent 1:1 leaf 8054: prio 7 rate 950Mbit ceil 1Gbit burst 15200b cburst 1375b ``` Fix this (cherry picked from commit 6ddfe6328e1cbdde1b70763b39e3a87f8374755a)
2024-01-22T5958: QoS add basic implementation of policy shaper-hfscViacheslav Hletenko
QoS policy shaper-hfsc was not implemented after rewriting the traffic-policy to qos policy. We had CLI but it does not use the correct class. Add a basic implementation of policy shaper-hfsc. Write the class `TrafficShaperHFS` (cherry picked from commit f6b6ee636e34f98d336ee53599666afd1f395d78)
2024-01-21T5961: Fix QoS policy shaper class match vifViacheslav Hletenko
If we have QoS policy shaper class match `vif` (VLAN) we have to use `basic match "meta(vlan mask 0xfff eq xxx)` instead of `action policy` Actual incorrect TC filter: tc filter add dev eth1 parent 1: protocol all prio 1 action police rate 100000000 burst 15k flowid 1:64 The correct TC filter after fix: tc filter add dev eth1 parent 1: protocol all prio 1 basic match "meta(vlan mask 0xfff eq 100)" flowid 1:64 (cherry picked from commit bb532f7f65930f8bc42e3bf3ebbcc690bffcfd0a)
2024-01-20T5963: Fix QoS shaper rate calculations and set defaul 1GbitViacheslav Hletenko
It is impossible to detect interface speed for some devices for exmaple virtio interfaces: ``` vyos@r4:~$ cat /sys/class/net/eth1/speed -1 ``` It causes wrong negative calcultaions like: - bandwidth: -1000000 - 4% of bandwidth: -40000 tc class replace dev eth1 parent 1: classid 1:1 htb rate -1000000 tc class replace dev eth1 parent 1:1 classid 1:a htb rate -40000 Fix this with checking negative value. Add default interface speed to 1000 Mbit if we cannot detect the interface speed, the current default value 10 Mbit is too low for nowadays (cherry picked from commit a7fe02e989cf7034609cb833c86143660eb609d5)
2023-10-22T5299: Add missed option ceiling for QoS shaperViacheslav Hletenko
Add missed option `ceil` for QoS class 'trafficshaper' (cherry picked from commit 5218241e6293317f8837b3f7c3893d653d960993)
2023-08-08T4989: QoS fix policer match markViacheslav Hletenko
2023-08-05T5266: QoS limit could be not configured for queue-type prioriyViacheslav Hletenko
Fix tc qdisc command that use 'limit None' if limit is not in config Limit xx sould be used only if it exists in the config
2023-07-14T5195: vyos.util -> vyos.utils package refactoring (#2093)Christian Breunig
* T5195: move run, cmd, call, rc_cmd helper to vyos.utils.process * T5195: use read_file and write_file implementation from vyos.utils.file Changed code automatically using: find . -type f -not -path '*/\.*' -exec sed -i 's/^from vyos.util import read_file$/from vyos.utils.file import read_file/g' {} + find . -type f -not -path '*/\.*' -exec sed -i 's/^from vyos.util import write_file$/from vyos.utils.file import write_file/g' {} + * T5195: move chmod* helpers to vyos.utils.permission * T5195: use colon_separated_to_dict from vyos.utils.dict * T5195: move is_systemd_service_* to vyos.utils.process * T5195: fix boot issues with missing imports * T5195: move dict_search_* helpers to vyos.utils.dict * T5195: move network helpers to vyos.utils.network * T5195: move commit_* helpers to vyos.utils.commit * T5195: move user I/O helpers to vyos.utils.io
2023-07-05T5314: Always run build_base_qdisc for defaultJon Sanchez
2023-07-02T5048: QoS do not add prio if it is already in tc commandViacheslav Hletenko
Prevent duplicatte prio fot tc command
2023-07-02T5048: QoS index priority should be used only for shaperViacheslav Hletenko
QoS index priority should be used only for qostype 'shaper' otherwise we set priority 2 times, that is incorrect. OSError: [Errno 255] failed to run command: tc filter add dev eth2 parent 1: prio 5 protocol all prio 1 u32 match ip src 10.1.1.0/24 flowid 1:1e exit code: 255 Fix it
2023-07-01T5302: QoS fix class with multiple matches generate one ruleViacheslav Hletenko
Fix QoS tc class with multiple matches generates one rule but expects multiple filter rules: set qos policy shaper test class 23 match one ip protocol 'tcp' set qos policy shaper test class 23 match two ip protocol 'udp' tc filter add dev eth0 parent 1: protocol all prio 1 u32 match ip protocol 6 0xff flowid 1:17 tc filter add dev eth0 parent 1: protocol all prio 2 u32 match ip protocol 17 0xff flowid 1:17
2023-07-01T5295: QoS fix policy limiter tc filter rate limitViacheslav Hletenko
tc filter rate limit should be used only if qostype is 'limiter' and not 'shaper'
2023-06-18T5071: QoS add class match DSCP valueViacheslav Hletenko
QoS DSCP match is skipped Add it set qos policy shaper test class 23 match 10 ip dscp 'network' tc filter replace dev eth0 parent 1: protocol all u32 match ip dsfield 224 0xff flowid 1:17
2023-06-17Merge pull request #2046 from sever-sever/T5296Christian Breunig
T5296: Fix QoS class bandwidth calculation for auto and percent
2023-06-17T5256: Fix QoS protocol expects protocol number but not nameViacheslav Hletenko
tc filter exepcts protocol number for match instead of protocol name
2023-06-17T5296: Fix QoS class bandwidth calculation for auto and percentViacheslav Hletenko
There are wrong bandwidth calculations for the class We shouldn't rely on interface speed but we should get this value from 'shaper <tag> bandwidth xxx' if configured 'auto' or bandwidth with '%' Otherwise we can get unexpected rate for the class % sudo cat /sys/class/net/eth0/speed % -1 generated rate: classid 1:17 htb rate -1000000 Fix this
2023-06-16T5295: Fix QoS shaper rate limitViacheslav Hletenko
Do not handle rate via 'tc filter' directly but rather set the 'tc filter' to direct traffic to the correct tc class flow. As it in 1.3. It fixes random unexpected shapes, when you set for example 300mbit but get 3-11mbit Current implementation seems not correct as it uses rate limits two times (in class and in filter): tc class replace dev eth0 parent 1:1 classid 1:17 htb rate 250000000 \ burst 15k quantum 1514 tc filter replace dev eth0 parent 1: protocol all u32 match \ ip dst 192.168.122.11 action police rate 250000000 burst 15k flowid 1:17 The correct way after fix: tc class replace dev eth0 parent 1:1 classid 1:17 htb rate 250000000 \ burst 15k quantum 1514 tc filter replace dev eth0 parent 1: protocol all u32 match \ ip dst 192.168.122.11 flowid 1:17
2023-03-06qos: T4989: bugfix dialer interface - speed detectionChristian Breunig
Not all interfaces have valid entries in the speed file. PPPoE interfaces have the appropriate speed file, but you can not read it: cat: /sys/class/net/pppoe7/speed: Invalid argument
2023-03-01qos: T4989: bugfix missing firewall mark supportChristian Breunig
2023-02-28qos: T4284: add general debug output in update()Christian Breunig
2023-01-04qos: T4284: replace qdisc/class instead of always adding itChristian Poessinger
This makes transitions/updates faster and less error prone
2023-01-04qos: T4284: add bandwidth percentage valueChristian Poessinger
2023-01-01qos: T4284: first implementation introducing a new vyos.qos moduleChristian Poessinger