mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 17:18:59 +00:00
e9610794fd
Signed-off-by: Felix Fietkau <nbd@nbd.name>
172 lines
3.3 KiB
Bash
172 lines
3.3 KiB
Bash
#!/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_flow_config() {
|
|
local cfg="$1"
|
|
|
|
add_option string dscp_prio
|
|
add_option string dscp_bulk
|
|
add_option int bulk_trigger_timeout
|
|
add_option int bulk_trigger_pps
|
|
add_option int prio_max_avg_pkt_len
|
|
}
|
|
|
|
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_flow_config "$cfg"
|
|
add_option int timeout
|
|
add_option string dscp_icmp
|
|
add_option string dscp_default_udp
|
|
add_option string dscp_default_tcp
|
|
}
|
|
|
|
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 nat
|
|
add_option boolean host_isolate
|
|
add_option boolean autorate_ingress
|
|
add_option string ingress_options
|
|
add_option string egress_options
|
|
|
|
config_get user_options "$cfg" options
|
|
|
|
config_get otype "$cfg" overhead_type
|
|
options=
|
|
case "$otype" in
|
|
none);;
|
|
manual)
|
|
config_get overhead "$cfg" overhead
|
|
[ -n "$overhead" ] && append options "overhead $overhead"
|
|
|
|
config_get encap "$cfg" overhead_encap
|
|
[ -n "$encap" ] && append options "$encap"
|
|
;;
|
|
conservative|\
|
|
pppoa-vcmux|\
|
|
pppoa-llc|\
|
|
pppoe-vcmux|\
|
|
pppoe-llcsnap|\
|
|
bridged-vcmux|\
|
|
bridged-llcsnap|\
|
|
ipoa-vcmux|\
|
|
ipoa-llcsnap|\
|
|
pppoe-ptm|\
|
|
bridged-ptm|\
|
|
docsis|\
|
|
ethernet)
|
|
append options "$otype"
|
|
;;
|
|
esac
|
|
|
|
config_get mpu "$cfg" overhead_mpu
|
|
[ -n "$mpu" ] && append options "mpu $mpu"
|
|
|
|
config_get ovlan "$cfg" overhead_vlan
|
|
[ "${ovlan:-0}" -ge 2 ] && append options "ether-vlan"
|
|
[ "${ovlan:-0}" -ge 1 ] && append options "ether-vlan"
|
|
|
|
[ -n "$user_options" ] && append options "$user_options"
|
|
[ -n "$options" ] && json_add_string options "$options"
|
|
|
|
json_close_object
|
|
}
|
|
|
|
add_class() {
|
|
local cfg="$1"
|
|
|
|
config_get value "$cfg" value
|
|
config_get ingress "$cfg" ingress
|
|
config_get egress "$cfg" egress
|
|
|
|
json_add_object "$cfg"
|
|
json_add_string ingress "${ingress:-$value}"
|
|
json_add_string egress "${egress:-$value}"
|
|
add_flow_config "$cfg"
|
|
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 classes
|
|
config_foreach add_class class
|
|
config_foreach add_class alias
|
|
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
|
|
}
|