It looks like a filter by ether* isn't implemented in vyos 1.4 and higher
steps to reproduce:
conf set qos interface eth1 egress 'test' set qos policy shaper test bandwidth '100gbit' set qos policy shaper test class 22 bandwidth '22mbit' set qos policy shaper test class 22 match 22m ether protocol 'ip' set qos policy shaper test class 22 match 22m ether source '0c:89:0a:2e:00:01' set qos policy shaper test class 22 queue-type 'fair-queue' set qos policy shaper test default bandwidth '100gbit' set qos policy shaper test default queue-type 'fair-queue' commit
after commit tc filters is empty
vyos@vyos# tc -s filter show dev eth1 [edit] vyos@vyos#
but qdisc and classes have been updated and look correct.
the same config on vyos 1.3 also generate filters:
conf set interfaces ethernet eth1 traffic-policy out 'test' set traffic-policy shaper test bandwidth '100gbit' set traffic-policy shaper test class 22 bandwidth '22mbit' set traffic-policy shaper test class 22 match 22m ether protocol 'ip' set traffic-policy shaper test class 22 match 22m ether source '0c:89:0a:2e:00:01' set traffic-policy shaper test class 22 queue-type 'fair-queue' set traffic-policy shaper test default bandwidth '100gbit' set traffic-policy shaper test default queue-type 'fair-queue' commit
vyos@vyos# tc -s filter show dev eth1 filter parent 1: protocol ip pref 1 u32 chain 0 filter parent 1: protocol ip pref 1 u32 chain 0 fh 800: ht divisor 1 filter parent 1: protocol ip pref 1 u32 chain 0 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:16 not_in_hw (rule hit 0 success 0) match 0c890a2e/ffffffff at -8 (success 0 ) match 00010000/ffff0000 at -4 (success 0 )