diff options
author | Felix Fietkau <nbd@nbd.name> | 2021-11-01 16:35:16 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2021-11-01 16:39:52 +0100 |
commit | f3a28b6bcf984dc55ec2d675ba75f0d3bc794eb9 (patch) | |
tree | a8d9243429c807b1a72b05eb3a2f077d20afef70 /package/network/config/qosify/files | |
parent | a537d06c72853c054c57d75af4074c1749e47947 (diff) | |
download | upstream-f3a28b6bcf984dc55ec2d675ba75f0d3bc794eb9.tar.gz upstream-f3a28b6bcf984dc55ec2d675ba75f0d3bc794eb9.tar.bz2 upstream-f3a28b6bcf984dc55ec2d675ba75f0d3bc794eb9.zip |
qosify: add package for simple qos based on ebpf+cake
qosify is simple daemon for setting up and managing CAKE along with a custom
eBPF based classifier that sets DSCP fields of packets.
It is configured via UCI and it supports the following features:
- simple TCP/UDP port based mapping
- IP address based mapping
- priority boosting based on average packet size
- bulk flow detection based on number of packets per second
- dynamically add IP entries with timeout
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'package/network/config/qosify/files')
-rw-r--r-- | package/network/config/qosify/files/qosify-defaults.conf | 17 | ||||
-rw-r--r-- | package/network/config/qosify/files/qosify.conf | 30 | ||||
-rw-r--r-- | package/network/config/qosify/files/qosify.hotplug | 2 | ||||
-rw-r--r-- | package/network/config/qosify/files/qosify.init | 105 |
4 files changed, 154 insertions, 0 deletions
diff --git a/package/network/config/qosify/files/qosify-defaults.conf b/package/network/config/qosify/files/qosify-defaults.conf new file mode 100644 index 0000000000..23408d54cc --- /dev/null +++ b/package/network/config/qosify/files/qosify-defaults.conf @@ -0,0 +1,17 @@ +# DNS +tcp:53 CS5 +tcp:5353 CS5 +udp:53 CS5 +udp:5353 CS5 + +# NTP +udp:123 CS6 + +# SSH +tcp:22 +CS4 + +# HTTP/QUIC +tcp:80 +CS3 +tcp:443 +CS3 +udp:80 +CS3 +udp:443 +CS3 diff --git a/package/network/config/qosify/files/qosify.conf b/package/network/config/qosify/files/qosify.conf new file mode 100644 index 0000000000..cf703a3bfb --- /dev/null +++ b/package/network/config/qosify/files/qosify.conf @@ -0,0 +1,30 @@ +config defaults + list defaults /etc/qosify-defaults.conf + option dscp_prio CS5 + option dscp_icmp CS6 + option dscp_bulk CS0 + option dscp_default_udp CS4 + option bulk_trigger_timeout 5 + option bulk_trigger_pps 100 + option prio_max_avg_pkt_len 500 + +config interface wan + option name wan + option disabled 1 + option bandwidth_up 100mbit + option bandwidth_down 100mbit + # defaults: + option ingress 1 + option egress 1 + option mode diffserv4 + option host_isolate 1 + option autorate_ingress 1 + option ingress_options "" + option egress_options "" + option options "" + +config device wandev + option disabled 1 + option name wan + option bandwidth 100mbit + diff --git a/package/network/config/qosify/files/qosify.hotplug b/package/network/config/qosify/files/qosify.hotplug new file mode 100644 index 0000000000..950812c03c --- /dev/null +++ b/package/network/config/qosify/files/qosify.hotplug @@ -0,0 +1,2 @@ +#!/bin/sh +ubus call qosify check_devices diff --git a/package/network/config/qosify/files/qosify.init b/package/network/config/qosify/files/qosify.init new file mode 100644 index 0000000000..c4139d7381 --- /dev/null +++ b/package/network/config/qosify/files/qosify.init @@ -0,0 +1,105 @@ +#!/bin/sh /etc/rc.common +# Copyright (c) 2021 OpenWrt.org + +START=19 + +USE_PROCD=1 +PROG=/usr/sbin/qosify + +add_option() { + local type="$1" + local name="$2" + + config_get val "$cfg" "$name" + + [ -n "$val" ] && json_add_$type "$name" "$val" +} + +add_defaults() { + cfg="$1" + + json_add_boolean reset 1 + + config_get files "$cfg" defaults + json_add_array files + for i in $files; do + json_add_string "" "$i" + done + json_close_array + + add_option int timeout + add_option string dscp_prio + add_option string dscp_bulk + add_option string dscp_icmp + add_option string dscp_default_udp + add_option string dscp_default_tcp + add_option int bulk_trigger_timeout + add_option int bulk_trigger_pps + add_option int prio_max_avg_pkt_len +} + +add_interface() { + local cfg="$1" + + config_get_bool disabled "$cfg" disabled 0 + [ "$disabled" -gt 0 ] && return + + config_get name "$cfg" name + json_add_object "$name" + + config_get bw "$cfg" bandwidth + + config_get bw_up "$cfg" bandwidth_up + bw_up="${bw_up:-$bw}" + [ -n "$bw_up" ] && json_add_string bandwidth_up "$bw_up" + + config_get bw_down "$cfg" bandwidth_down + bw_down="${bw_down:-$bw}" + [ -n "$bw_down" ] && json_add_string bandwidth_down "$bw_down" + + add_option string bandwidth + add_option boolean ingress + add_option boolean egress + add_option string mode + add_option boolean host_isolate + add_option boolean autorate_ingress + add_option string ingress_options + add_option string egress_options + add_option string options + + json_close_object +} + +reload_service() { + json_init + + config_load qosify + + config_foreach add_defaults defaults + + json_add_object interfaces + config_foreach add_interface interface + json_close_object + + json_add_object devices + config_foreach add_interface device + json_close_object + + ubus call qosify config "$(json_dump)" +} + +service_triggers() { + procd_add_reload_trigger qosify +} + +start_service() { + procd_open_instance + procd_set_param command "$PROG" + procd_set_param respawn + procd_close_instance +} + +service_started() { + ubus -t 10 wait_for qosify + [ $? = 0 ] && reload_service +} |