Page MenuHomeVyOS Platform

QoS policy limiter broken if class without match
Closed, ResolvedPublicBUG

Description

QoS policy limiter broken,
To reproduce (class 20 is empty):

set qos policy limiter my-policy class 10 bandwidth '20mbit'
set qos policy limiter my-policy class 10 match LOCAL-NET ip destination address '192.0.2.0/24'
set qos policy limiter my-policy class 20 bandwidth '10mbit'
set qos policy limiter my-policy default bandwidth '30mbit'
set qos interface eth1 ingress my-policy
commit

commit:

vyos@r4# commit
[ qos ]
Error: Cannot find specified qdisc on specified device.
Error: Cannot delete qdisc with handle of zero.
Error: Cannot find specified qdisc on specified device.
Error: Cannot delete qdisc with handle of zero.
Error: Cannot find specified qdisc on specified device.
Error: Cannot delete qdisc with handle of zero.
Error: Cannot find specified qdisc on specified device.
Error: Cannot delete qdisc with handle of zero.
Error: Cannot find specified qdisc on specified device.
Error: Cannot delete qdisc with handle of zero.
Error: Cannot find specified qdisc on specified device.
Error: Cannot delete qdisc with handle of zero.
Error: Cannot find specified qdisc on specified device.
Error: Cannot delete qdisc with handle of zero.
Error: Cannot delete qdisc with handle of zero.
Error: Cannot find specified qdisc on specified device.
Error: Cannot delete qdisc with handle of zero.
Error: Cannot find specified qdisc on specified device.
Error: Cannot delete qdisc with handle of zero.
VyOS had an issue completing a command.


Traceback (most recent call last):
  File "/usr/libexec/vyos/conf_mode/qos.py", line 240, in <module>
    apply(c)
  File "/usr/libexec/vyos/conf_mode/qos.py", line 231, in apply
    tmp.update(shaper_config, direction)
  File "/usr/lib/python3/dist-packages/vyos/qos/limiter.py", line 27, in update
    super().update(config, direction)
  File "/usr/lib/python3/dist-packages/vyos/qos/base.py", line 328, in update
    self._cmd(filter_cmd)
  File "/usr/lib/python3/dist-packages/vyos/qos/base.py", line 74, in _cmd
    return cmd(command)
           ^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/vyos/utils/process.py", line 155, in cmd
    raise OSError(code, feedback)
PermissionError: [Errno 1] failed to run command: tc filter add dev eth1 parent ffff: prio 20 protocol all u32 match ip dst 192.0.2.0/24 flowid ffff:a action police conform-exceed drop/ok rate 20000000 burst 15k flowid ffff:a basic flowid ffff:14
returned: 
exit code: 1

noteworthy:
cmd 'tc filter add dev eth1 parent ffff: prio 20 protocol all u32 match ip dst 192.0.2.0/24 flowid ffff:a action police conform-exceed drop/ok rate 20000000 burst 15k flowid ffff:a basic flowid ffff:14'
returned (out):

returned (err):
What is "basic"?
Usage: ... u32 [ match SELECTOR ... ] [ link HTID ] [ classid CLASSID ]
               [ action ACTION_SPEC ] [ offset OFFSET_SPEC ]
               [ ht HTID ] [ hashkey HASHKEY_SPEC ]
               [ sample SAMPLE ] [skip_hw | skip_sw]
or         u32 divisor DIVISOR

Where: SELECTOR := SAMPLE SAMPLE ...
       SAMPLE := { ip | ip6 | udp | tcp | icmp | u{32|16|8} | mark }
                 SAMPLE_ARGS [ divisor DIVISOR ]
       FILTERID := X:Y:Z

NOTE: CLASSID is parsed at hexadecimal input.

[[qos]] failed
Commit failed
[edit]
vyos@r4#

Details

Version
VyOS 1.5-rolling-202310090023
Is it a breaking change?
Unspecified (possibly destroys the router)
Issue type
Bug (incorrect behavior)

Event Timeline

Viacheslav renamed this task from QoS policy limiter broken to QoS policy limiter broken if class without match.Oct 22 2023, 2:18 PM
natali-rs1985 changed the task status from Open to In progress.Mar 1 2024, 10:58 AM
Viacheslav moved this task from Open to Finished on the VyOS 1.5 Circinus board.