Qosify: new package for DSCP marking + cake

I think it is added..download

ingress status:
qdisc cake 1: root refcnt 2 bandwidth 38693Kbit diffserv4 dual-dsthost nat nowash ingress no-ack-filter split-gso rtt 30ms noatm overhead 38 

upload

egress status:
qdisc cake 1: root refcnt 2 bandwidth 4844Kbit diffserv4 dual-srchost nat nowash no-ack-filter split-gso rtt 30ms noatm overhead 38 
 Sent 156782 bytes 2580 pkt (dropped 0, overlimits 1723 requeues 0) 

This is my config and i have a question...

config defaults
	list defaults /etc/qosify/*.conf
	option dscp_prio video
	option dscp_icmp +besteffort
	option dscp_bulk bulk

config class besteffort
	option ingress CS0
	option egress CS0
	option bulk_trigger_pps 100
	option bulk_trigger_timeout 5

config class bulk
	option ingress CS1
	option egress CS1

config class video
	option ingress AF41
	option egress AF41
	option bulk_trigger_pps 100
	option bulk_trigger_timeout 5

config class voice
	option ingress CS6
	option egress CS6
	option bulk_trigger_pps 100
	option bulk_trigger_timeout 5
	option dscp_bulk CS1

config interface wan
	option name wan
	option disabled 0
	option bandwidth_up 4844kbit
	option bandwidth_down 38693kbit
	option overhead_type none
	# defaults:
	option ingress 1
	option egress 1
	option mode diffserv4
	option nat 1
	option host_isolate 1
	option autorate_ingress 1
	option ingress_options ""
	option egress_options ""
	option options ""
	option options "overhead 38 rtt 30ms"

config device wandev
	option disabled 1
	option name wan
	option bandwidth 100mbit


defaults..

# DNS
tcp:53		video
tcp:5353	video
udp:53		video
udp:5353	video

# NTP
udp:123		video

# SSH
tcp:22		+video

# HTTP/QUIC
tcp:80		+besteffort
tcp:443		+besteffort
udp:80		+besteffort
udp:443		+besteffort



#ipaddr 192.168.1.xxx CS6
ipaddr 192.168.1.xxx CS1
ipaddr 192.168.1.xxx CS1
ipaddr 192.168.1.xxx AF41
ipaddr 192.168.1.xxx CS1


udp:3074 to 3079 CS6
udp:3478 to 3479 CS6


# Console Downloading - set to Bulk
tcp --src:192.168.1.xxx --dport 80 CS1
tcp --src:192.168.1.xxx --dport 80 CS1
udp --src:192.168.1.xxx --dport 443 CS1
udp --src:192.168.1.xxx --dport 443 CS1

# Console Gaming - Set to highest
udp --src:192.168.1.xxx --dport 1024:65535 CS6

According to my config if i combine overhead value and rtt in the same "space" it is working.

option options "overhead 38 rtt 30ms"

If i separate them..

option options "rtt 30ms"
option options "overhead 38"

It doesnt change rtt value.

Second question..

These settings are configured right?They are working?How can i "check" if they are working?Etc when we create iptables rules we can check them in firewall overview..if we have something wrong in syntax they arent implemented at all...in any case we can figure out if they are working.With Qosify we can't figure out this.

#ipaddr 192.168.1.xxx CS6
ipaddr 192.168.1.xxx CS1
ipaddr 192.168.1.xxx CS1
ipaddr 192.168.1.xxx AF41
ipaddr 192.168.1.xxx CS1


udp:3074 to 3079 CS6
udp:3478 to 3479 CS6


# Console Downloading - set to Bulk
tcp --src:192.168.1.xxx --dport 80 CS1
tcp --src:192.168.1.xxx --dport 80 CS1
udp --src:192.168.1.xxx --dport 443 CS1
udp --src:192.168.1.xxx --dport 443 CS1

# Console Gaming - Set to highest
udp --src:192.168.1.xxx --dport 1024:65535 CS6

Hi knomax regarding the rtt you cannot add twice option hence the fact that rtt disappears

keep in mind that if you are in vdsl2 you can add several but on the same line I use for example overhead 44 ptm

then i think you have a lot of fake elan syntax can you confirm that

I suggest you modify like this

config defaults
	list defaults /etc/qosify/*.conf
	option dscp_prio video
	option dscp_icmp +besteffort
	option dscp_default_udp besteffort
	option prio_max_avg_pkt_len 500

config class besteffort
	option ingress CS0
	option egress CS0

config class bulk
	option ingress LE
	option egress LE

config class video
	option ingress AF41
	option egress AF41

config class voice
	option ingress CS6
	option egress CS6
	option bulk_trigger_pps 100
	option bulk_trigger_timeout 5
	option dscp_bulk CS0

config class gaming
	option ingress CS4 ## i has make a class for gaming with CS4 
	option egress CS4 ## for egress 

config interface wan
	option name wan
	option disabled 0
	option bandwidth_up 16mbit
	option bandwidth_down 56mbit
	option overhead_type none ### change of type your connection
	# defaults:
	option ingress 1
	option egress 1
	option mode diffserv4
	option nat 1
	option host_isolate 1
	option autorate_ingress 1
	option ingress_options "nowash"
	option egress_options ""
	option options "overhead 44 ptm" ##just one ligne 

then add you prio port, for me work like this but not sure the graphic wireshark show well the cs4 traffic to destination of my playstation

# DNS
tcp:53		voice
tcp:5353	voice
udp:53		voice
udp:5353	voice

# NTP
udp:123		voice

# SSH
tcp:22		+video

# HTTP/QUIC
tcp:80		+besteffort
tcp:443		+besteffort
udp:80		+besteffort
udp:443		+besteffort


# PlayStation (TCP)
tcp:1935	gaming
tcp:3074	gaming
tcp:3478-3480	gaming
tcp:50000-65000	gaming


# PlayStation (UDP)
udp:3074-3079	gaming
udp:3478-3479	gaming
udp:3659	gaming
udp:30000-45000	gaming

the gaming correspond to my class of files before

I dont understand that...explain please.

Post output of qosify-status if "gaming" class implement.

1 Like
root@OpenWrt:~# qosify-status
===== interface wan: active =====
egress status:
qdisc cake 1: root refcnt 2 bandwidth 16Mbit diffserv4 dual-srchost nat nowash no-ack-filter split-gso rtt 100ms ptm overhead 44
 Sent 43976567 bytes 269990 pkt (dropped 9, overlimits 112023 requeues 0)
 backlog 0b 0p requeues 0
 memory used: 65280b of 4Mb
 capacity estimate: 16Mbit
 min/max network layer size:           28 /    1500
 min/max overhead-adjusted size:       74 /    1569
 average network hdr offset:           14

                   Bulk  Best Effort        Video        Voice
  thresh          1Mbit       16Mbit        8Mbit        4Mbit
  target         18.2ms          5ms          5ms          5ms
  interval        113ms        100ms        100ms        100ms
  pk_delay          0us        825us          0us       2.77ms
  av_delay          0us         69us          0us       1.43ms
  sp_delay          0us         14us          0us          9us
  backlog            0b           0b           0b           0b
  pkts                0       142833            0       127166
  bytes               0     20325113            0     23662694
  way_inds            0         5383            0           82
  way_miss            0         3412            0         1458
  way_cols            0            0            0            0
  drops               0            9            0            0
  marks               0            0            0            0
  ack_drop            0            0            0            0
  sp_flows            0            1            0            1
  bk_flows            0            1            0            0
  un_flows            0            0            0            0
  max_len             0         4937            0         4236
  quantum           300          488          300          300


ingress status:
qdisc cake 1: root refcnt 2 bandwidth 56Mbit diffserv4 dual-dsthost nat nowash ingress no-ack-filter split-gso rtt 100ms ptm overhead 44
 Sent 117599628 bytes 186525 pkt (dropped 22, overlimits 112884 requeues 0)
 backlog 0b 0p requeues 0
 memory used: 507008b of 4Mb
 capacity estimate: 56Mbit
 min/max network layer size:           46 /    1500
 min/max overhead-adjusted size:       92 /    1569
 average network hdr offset:           14

                   Bulk  Best Effort        Video        Voice
  thresh       3500Kbit       56Mbit       28Mbit       14Mbit
  target         5.19ms          5ms          5ms          5ms
  interval        100ms        100ms        100ms        100ms
  pk_delay          0us        158us          0us        336us
  av_delay          0us         24us          0us        107us
  sp_delay          0us          6us          0us          7us
  backlog            0b           0b           0b           0b
  pkts                0       122308            0        64239
  bytes               0     66558852            0     51070486
  way_inds            0         4706            0          190
  way_miss            0         3609            0          464
  way_cols            0            0            0            0
  drops               0           22            0            0
  marks               0            0            0            0
  ack_drop            0            0            0            0
  sp_flows            0            2            0            1
  bk_flows            0            1            0            0
  un_flows            0            0            0            0
  max_len             0         9084            0         3028
  quantum           300         1514          854          427


root@OpenWrt:~#

my class gaming is implemented you can see the all traffic to the voice

you can use EF is you want

I try to understand...my config

# HTTP/QUIC
tcp:80		+besteffort
tcp:443		+besteffort
udp:80		+besteffort
udp:443		+besteffort



#ipaddr 192.168.1.100 CS6
ipaddr 192.168.1.149 CS1
ipaddr 192.168.1.130 CS1
ipaddr 192.168.1.135 AF41
ipaddr 192.168.1.127 CS1

In this file the rules are implement in the order they are appear?

HTTP/QUIC ports implement first and these..

#ipaddr 192.168.1.100 CS6
ipaddr 192.168.1.149 CS1
ipaddr 192.168.1.130 CS1
ipaddr 192.168.1.135 AF41
ipaddr 192.168.1.127 CS1

Are tottaly ignored?Or doesnt work at all!!Because all traffic falls in Besteffort class according to HTTP/QUIC ports.

ingress status:
qdisc cake 1: root refcnt 2 bandwidth 38693Kbit diffserv4 dual-dsthost nat nowash ingress no-ack-filter split-gso rtt 30ms noatm overhead 38 
 Sent 1486676090 bytes 1062770 pkt (dropped 41678, overlimits 987606 requeues 0) 
 backlog 0b 0p requeues 0
 memory used: 669760b of 4Mb
 capacity estimate: 38693Kbit
 min/max network layer size:           30 /    1492
 min/max overhead-adjusted size:       68 /    1530
 average network hdr offset:            0

                   Bulk  Best Effort        Video        Voice
  thresh       2418Kbit    38693Kbit    19346Kbit     9673Kbit
  target         7.51ms        1.5ms        1.5ms       1.88ms
  interval         36ms         30ms         30ms       30.4ms
  pk_delay          0us       5.39ms        901us          0us
  av_delay          0us        898us         60us          0us
  sp_delay          0us         16us         27us          0us
  backlog            0b           0b           0b           0b
  pkts                0      1104231          217            0
  bytes               0   1545794793        25129            0
  way_inds            0         9277            0            0
  way_miss            0          343          201            0
  way_cols            0            0            0            0
  drops               0        41678            0            0
  marks               0            0            0            0
  ack_drop            0            0            0            0
  sp_flows            0            1            0            0
  bk_flows            0            1            0            0
  un_flows            0            0            0            0
  max_len             0         1492          351            0
  quantum           300         1180          590          300


root@OpenWrt:~# 

I change config to be in first order

ipaddr 192.168.1.100 CS6
ipaddr 192.168.1.149 CS1
ipaddr 192.168.1.130 CS1
ipaddr 192.168.1.135 AF41
ipaddr 192.168.1.127 CS1

Again all traffic falls in besteffort..so maybe syntax is wrong and doesnt implement or somehow ignored...dev must answer to this..i dont know.

diffserv4 : CS4 or EF or VA for game ports = Voice (Tin) = Highest priority.

no that and just a classification you see you have no traffic in voice for information i guide you for the diffserv4 that uses qosify the highest priority on voice

1 Like

Two comments:

  1. ipaddr keyword is not valid. Only put the IP address and the DSCP value.
  2. Local IPs will not work in the config because qosify expects the IP to be the remote IP (i.e. the source IP for download or the destination ip for upload).
3 Likes

I believe this to be a consequence of where qosify operates in regards to NAT; typically it is difficult for ingress packet processing to get the post-NAT internal IP addresses & ports of packets.

1 Like

And Iā€™m assuming even on egress this is a problem because the masquerade has already happened from iptables before qosify sees the packet.

1 Like

Yes and no, for qosify you might be right, but for iptables we should be able to do the DSCP marking inside the LAN part of the network.

So even i write etc

192.168.1.200  CS4

Will not work at all..right?

What about this config?The "logic" is that everything that is above 100 packets per second to fall in "bulk" class because it is not probably real time traffic but something like update download..video download etc.

config defaults
	list defaults /etc/qosify/*.conf
	option dscp_prio video
	option dscp_icmp +besteffort
	option dscp_default_udp besteffort
	option prio_max_avg_pkt_len 500
	option dscp_bulk bulk

config class besteffort
	option ingress CS0
	option egress CS0
	option bulk_trigger_pps 100
	option bulk_trigger_timeout 5
	option dscp_bulk bulk

config class bulk
	option ingress CS1
	option egress CS1

config class video
	option ingress AF41
	option egress AF41
	option bulk_trigger_pps 100
	option bulk_trigger_timeout 5
	option dscp_bulk bulk

config class voice
	option ingress CS6
	option egress CS6
	option bulk_trigger_pps 100
	option bulk_trigger_timeout 5
	option dscp_bulk bulk

config class gaming
    option ingress CS4 ## i has make a class for gaming with CS4
    option egress CS4 ## for egress
    
config interface wan
	option name wan
	option disabled 0
	option bandwidth_up 4844kbit
	option bandwidth_down 38693kbit
	option overhead_type none
	# defaults:
	option ingress 1
	option egress 1
	option mode diffserv4
	option nat 1
	option host_isolate 1
	option autorate_ingress 1
	option ingress_options "nowash"
	option egress_options ""
	option options "overhead 38 ptm rtt 30ms" ##just one ligne

config device wandev
	option disabled 1
	option name wan
	option bandwidth 100mbit


It is right or wrong?

No, it doesn't work for now.

It's fine yes, but the bulk options in "defaults" tier doesn't do anything if you set everything to go to other class. You can remove them.

That's my config by the way, i see that no one uses diffserv8.

config defaults
	list defaults /etc/qosify/*.conf
	option dscp_icmp +tin2
	option dscp_default_tcp tin2
	option dscp_default_udp	tin2

config class tin0
	option ingress LE
	option egress LE

config class tin1
	option ingress AF11
	option egress AF11

config class tin2
	option ingress CS0
	option egress CS0
	option bulk_trigger_timeout 5
	option bulk_trigger_pps 100
	option dscp_bulk tin0
	option prio_max_avg_pkt_len 500
	option dscp_prio tin3

config class tin3
	option ingress CS3
	option egress CS3
	option bulk_trigger_timeout 5
	option bulk_trigger_pps 100
	option dscp_bulk tin1
	option prio_max_avg_pkt_len 500
	option dscp_prio tin4

config class tin4
	option ingress AF21
	option egress AF21
	option bulk_trigger_timeout 5
	option bulk_trigger_pps 100
	option dscp_bulk tin2
	option prio_max_avg_pkt_len 500
	option dscp_prio tin5

config class tin5
	option ingress CS2
	option egress CS2
	option bulk_trigger_timeout 5
	option bulk_trigger_pps 100
	option dscp_bulk tin3
	option prio_max_avg_pkt_len 500
	option dscp_prio tin6

config class tin6
	option ingress EF
	option egress EF
	option bulk_trigger_timeout 5
	option bulk_trigger_pps 100
	option dscp_bulk tin4

config class tin7
	option ingress CS6
	option egress CS6
	option bulk_trigger_timeout 5
	option bulk_trigger_pps 100
	option dscp_bulk tin5

config device wandev
	option disabled 0
	option name eth0.1074
	option bandwidth_up 600mbit
	option bandwidth_down 600mbit
	# defaults:
	option mode diffserv8
	option ingress 1
	option egress 1
	option nat 1
	option host_isolate 1
	option autorate_ingress 0
	option ingress_options ""
	option egress_options "ack-filter"
	option options "overhead 42 mpu 64"

I think diffserv8 is broken.It works?

What is for?

And this etc ...

config class tin5
	option ingress CS2
	option egress CS2
	option bulk_trigger_timeout 5
	option bulk_trigger_pps 100
	option dscp_bulk tin3
	option prio_max_avg_pkt_len 500
	option dscp_prio tin6

You trigger above 100 packets to fall in bulk tin (tin3) and then you set dscp_prio tin6....it confuses me!! :thinking:

                  Tin 0        Tin 1        Tin 2        Tin 3        Tin 4        Tin 5        Tin 6        Tin 7
  thresh        600Mbit      525Mbit   459375Kbit   401953Kbit   351708Kbit   307745Kbit   269277Kbit   235617Kbit
  target            5ms          5ms          5ms          5ms          5ms          5ms          5ms          5ms
  interval        100ms        100ms        100ms        100ms        100ms        100ms        100ms        100ms
  pk_delay         61us          4us         40us         40us         14us         66us        245us         10us
  av_delay          6us          2us         13us         14us          5us         11us          9us          5us
  sp_delay          1us          1us          3us          2us          2us          3us          1us          3us
  backlog            0b           0b           0b           0b           0b           0b           0b           0b
  pkts         44594374    560256527      3391230     12887820       553229         1117        90536       114877
  bytes     42413846375  78628982096   4609674894   4309308394    108023948       461786     12711523     34929670
  way_inds       667359       674967       114662      1299514        21413            0            0            0
  way_miss          829         6399         6445      1639284        34935          181          827          625
  way_cols            0            0            0            2            0            0            0            0
  drops            1169          170           18            4            0            0            0            0
  marks               0            0            0            0            0            0            0            0
  ack_drop            0            0            0            0            0            0            0            0
  sp_flows            1            0            1           18            1            3            2            2
  bk_flows            0            1            0            0            0            0            0            0
  un_flows            0            0            0            0            0            0            0            0
  max_len         67616        67778        67792        66788        19778         3438         4870         3020
  quantum          1514         1514         1514         1514         1514         1514         1514         1514

My wan interface

So without setting this we have only for upload?Not both directions?

No, i don't remember why i used device option instead of interface, i think it didn't work with interface option, so i swapped to the other one.

And this i am confused!
You defaults config?To see the logic and maybe understand why this.

If you set a class in default then dscp_prio and bulk doesn't get triggered from default as you are referring to other class. Instead they have to be set in the class you refer to.