qosify: add support for keeping stats
[project/qosify.git] / README
1 QoSify is simple daemon for setting up and managing CAKE along with a custom
2 eBPF based classifier that sets DSCP fields of packets.
3
4 It supports the following features:
5 - simple TCP/UDP port based mapping
6 - IP address based mapping
7 - priority boosting based on average packet size
8 - bulk flow detection based on number of packets per second
9 - dynamically add IP entries with timeout
10 - dns regex entries and ubus api for providing dns lookup results
11
12 It can be configured via ubus call qosify config.
13
14 This call supports the following parameters:
15 - "reset": BOOL
16 Reset the config to defaults instead of only updating supplied values
17
18 - "files": ARRAY of STRING
19 List of files with port/IP/host mappings
20
21 - "timeout": INT32
22 Default timeout for dynamically added entries
23
24 - "dscp_default_udp": STRING
25 Default DSCP value for UDP packets
26
27 - "dscp_default_tcp": STRING
28 Default DSCP value for TCP packets
29
30 - "dscp_prio": STRING
31 DSCP value for priority-marked packets
32
33 - "dscp_bulk": STRING
34 DSCP value for bulk-marked packets
35
36 - "dscp_icmp": STRING
37 DSCP value for ICMP packets
38
39 - "bulk_trigger_pps": INT32
40 Number of packets per second to trigger bulk flow detection
41
42 - "bulk_trigger_timeout": INT32
43 Time below bulk_trigger_pps threshold until a bulk flow mark is removed
44
45 - "prio_max_avg_pkt_len": INT32
46 Maximum average packet length for marking a flow as priority
47
48 - "interfaces": TABLE of TABLE
49 netifd interfaces to enable QoS on
50
51 - "devices": TABLE of TABLE
52 netdevs to enable QoS on
53
54
55 interface/device properties:
56 - "bandwidth_up": STRING
57 Uplink bandwidth (same format as tc)
58
59 - "bandwidth_down": STRING
60 Downlink bandwidth (same format as tc)
61
62 - "ingress": BOOL
63 Enable ingress shaping
64
65 - "egress": BOOL
66 Enable egress shaping
67
68 - "mode": STRING
69 CAKE diffserv mode
70
71 - "nat": BOOL
72 Enable CAKE NAT host detection via conntrack
73
74 - "host_isolate": BOOL
75 Enable CAKE host isolation
76
77 - "autorate_ingress": BOOL
78 Enable CAKE automatic rate estimation for ingress
79
80 - "ingress_options": STRING
81 CAKE ingress options
82
83 - "egress_options": STRING
84 CAKE egress options
85
86 - "options": STRING
87 CAKE options for ingress + egress
88
89
90 Mapping file syntax:
91
92 Each line has two whitespace separated fields, match and dscp
93 match is one of:
94 - tcp:<port>[-<endport>]
95 TCP single port, or range from <port> to <endport>
96 - udp:<port>[-<endport>]
97 UDP single port, or range from <port> to <endport>
98 - <ipaddr>
99 IPv4 address, e.g. 1.1.1.1
100 - <ipv6addr>
101 IPv6 address, e.g. ff01::1
102 - dns:<pattern>
103 fnmatch() pattern supporting * and ? as wildcard characters
104 - dns:/<regex>
105 POSIX.2 extended regular expression for matching hostnames
106 Only works, if dns lookups are passed to qosify via the add_dns_host ubus call.
107 - dns_c:...
108 Like dns:... but only matches cname entries
109
110 dscp can be a raw value, or a codepoint like CS0
111 Adding a + in front of the value tells qosify to only override the DSCP value if it is zero
112 DNS entries are compared in the order in which they are specified in the config, using the
113 first matching entry.
114
115
116 Planned features:
117 - Support for LAN host based priority