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

Difficulty level
Unknown (require assessment)
Version
VyOS 1.5-rolling-202310090023
Why the issue appeared?
Will be filled on close
Is it a breaking change?
Unspecified (possibly destroys the router)
Issue type
Bug (incorrect behavior)