mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2026-01-28 01:47:19 +01:00
qosmngr: update rate processing for queue
This commit is contained in:
parent
1b7fa8ba15
commit
ee2165b184
6 changed files with 125 additions and 58 deletions
|
|
@ -6,13 +6,13 @@ include $(TOPDIR)/rules.mk
|
|||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=qosmngr
|
||||
PKG_VERSION:=1.0.20
|
||||
PKG_VERSION:=1.0.21
|
||||
|
||||
LOCAL_DEV:=0
|
||||
ifneq ($(LOCAL_DEV),1)
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/qosmngr.git
|
||||
PKG_SOURCE_VERSION:=cc1d993b853f360c0aa19f08bfbaf1e05667527a
|
||||
PKG_SOURCE_VERSION:=f03c22f4bae8497bc9c88715ab094e7bef46b59e
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -0,0 +1,4 @@
|
|||
uci -q set qos.globals=globals
|
||||
uci -q set qos.globals.per_queue_shaper=0
|
||||
|
||||
exit 0
|
||||
48
qosmngr/files/airoha/lib/qos/qos_functions.sh
Normal file
48
qosmngr/files/airoha/lib/qos/qos_functions.sh
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
#!/bin/sh
|
||||
|
||||
get_max_linkspeed() {
|
||||
local ifname="$1"
|
||||
local modes="10000 5000 2500 1000 100 10"
|
||||
local speed=""
|
||||
local phycap="$(ethtool $ifname | sed -ne '/Supported link modes:/,/:/p' | sed -e 's/.*://' -e 's/^[[:space:]]*//' -e '$d')"
|
||||
|
||||
for i in $modes; do
|
||||
if echo "${phycap}" | grep -qe "$i\\D"; then
|
||||
speed=$i
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
echo "$speed"
|
||||
}
|
||||
|
||||
get_shaper_rate() {
|
||||
rate="$1"
|
||||
|
||||
if [ -z "${rate}" ]; then
|
||||
echo "-1"
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "${rate}" -eq -1 ]; then
|
||||
#No shaping
|
||||
echo "-1"
|
||||
return
|
||||
fi
|
||||
|
||||
# Convert the rate from bps to kbps.
|
||||
if [ "${rate}" -ge 0 -a "${rate}" -le 100 ];then
|
||||
# set as per percentage
|
||||
speed=$(get_max_linkspeed "$ifname")
|
||||
if [ -z "${speed}" ]; then
|
||||
echo "-1"
|
||||
return
|
||||
fi
|
||||
|
||||
rate=$((speed * rate * 1000 / 100))
|
||||
else
|
||||
rate=$(($rate / 1000))
|
||||
fi
|
||||
|
||||
echo "$rate"
|
||||
}
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
#!/bin/sh
|
||||
# Handle queues and their order
|
||||
|
||||
. /lib/qos/qos_functions.sh
|
||||
|
||||
Q_COUNT=0
|
||||
|
||||
# Preliminary configuration of a queue
|
||||
|
|
@ -21,7 +23,7 @@ handle_queue() {
|
|||
config_get is_enable "$qid" "enable" 1
|
||||
|
||||
# no need to configure disabled queues
|
||||
if [ "${is_enable}" == "0" ]; then
|
||||
if [ "${is_enable}" = "0" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
|
|
@ -38,7 +40,21 @@ handle_queue() {
|
|||
config_get qsize "$qid" "queue_size" 1024
|
||||
config_get precedence "$qid" "precedence"
|
||||
|
||||
hw_queue_set "${ifname}" "${Q_COUNT}" "${precedence}" "$qsize" "$wgt" "$sc_alg" "$shapingrate" "$rate" "$bs"
|
||||
rate=$(get_shaper_rate "$rate")
|
||||
|
||||
if [ "$rate" -eq -1 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
config_get bs "$qid" "burst_size"
|
||||
|
||||
if [ "${bs}" -ge 1000 ] ; then
|
||||
bs=$((bs / 1000))
|
||||
else
|
||||
bs=0
|
||||
fi
|
||||
|
||||
hw_queue_set "${ifname}" "${Q_COUNT}" "${precedence}" "$qsize" "$wgt" "$sc_alg" "$rate" "$bs"
|
||||
Q_COUNT=$((Q_COUNT + 1))
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,21 +1,7 @@
|
|||
#!/bin/sh
|
||||
# Common shaper library
|
||||
|
||||
get_max_linkspeed() {
|
||||
local ifname="$1"
|
||||
local modes="10000 5000 2500 1000 100 10"
|
||||
local speed=""
|
||||
local phycap="$(ethtool $ifname | sed -ne '/Supported link modes:/,/:/p' | sed -e 's/.*://' -e 's/^[[:space:]]*//' -e '$d')"
|
||||
|
||||
for i in $modes; do
|
||||
if echo "${phycap}" | grep -qe "$i\\D"; then
|
||||
speed=$i
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
echo "$speed"
|
||||
}
|
||||
. /lib/qos/qos_functions.sh
|
||||
|
||||
# UCI 'shaper' section handler.
|
||||
# It will verify shaper configuration sanity and then invoke
|
||||
|
|
@ -36,26 +22,10 @@ handle_shaper() {
|
|||
fi
|
||||
|
||||
config_get rate "$sid" "rate"
|
||||
if [ -z "${rate}" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "${rate}" -eq -1 ]; then
|
||||
# No shaping
|
||||
return
|
||||
fi
|
||||
|
||||
# Convert the rate from bps to kbps.
|
||||
if [ "${rate}" -ge 0 -a "${rate}" -le 100 ] ; then
|
||||
# Set as per percentage
|
||||
speed=$(get_max_linkspeed "$ifname")
|
||||
if [ -z "${speed}" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
rate=$((speed * rate * 1000 / 100))
|
||||
else
|
||||
rate=$((rate / 1000))
|
||||
rate=$(get_shaper_rate "$rate")
|
||||
|
||||
if [ "$rate" -eq -1 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
config_get bs "$sid" "burst_size"
|
||||
|
|
|
|||
|
|
@ -31,6 +31,37 @@ get_max_linkspeed() {
|
|||
echo "$speed"
|
||||
}
|
||||
|
||||
get_shaper_rate() {
|
||||
rate="$1"
|
||||
|
||||
if [ -z "${rate}" ]; then
|
||||
echo "-1"
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "${rate}" -eq -1 ]; then
|
||||
#No shaping
|
||||
echo "-1"
|
||||
return
|
||||
fi
|
||||
|
||||
# Convert the rate from bps to kbps.
|
||||
if [ "${rate}" -ge 0 -a "${rate}" -le 100 ];then
|
||||
# set as per percentage
|
||||
speed=$(get_max_linkspeed "$ifname")
|
||||
if [ -z "${speed}" ]; then
|
||||
echo "-1"
|
||||
return
|
||||
fi
|
||||
|
||||
rate=$((speed * rate * 1000 / 100))
|
||||
else
|
||||
rate=$(($rate / 1000))
|
||||
fi
|
||||
|
||||
echo "$rate"
|
||||
}
|
||||
|
||||
get_port_number() {
|
||||
[ -z "$1" ] && return
|
||||
local ports="0 1 2 3 4 5 6 7 8"
|
||||
|
|
@ -125,10 +156,17 @@ handle_queue_shapingrate() {
|
|||
fi
|
||||
|
||||
config_get rate "$qid" "rate"
|
||||
|
||||
rate=$(get_shaper_rate "$rate")
|
||||
if [ "$rate" -eq -1 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
config_get bs "$qid" "burst_size"
|
||||
|
||||
# Call tmctl which is a broadcomm command to configure queues shapingrate.
|
||||
tmctl setqcfg --devtype 0 --if $ifname --qid $Q_COUNT --shapingrate $rate --burstsize $bs &>/dev/null
|
||||
|
||||
Q_COUNT=$((Q_COUNT + 1))
|
||||
}
|
||||
|
||||
|
|
@ -198,6 +236,13 @@ handle_queue() {
|
|||
order=0
|
||||
fi
|
||||
|
||||
rate=$(get_shaper_rate "$rate")
|
||||
if [ "$rate" -eq -1 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
config_get bs "$qid" "burst_size"
|
||||
|
||||
# Call tmctl which is a broadcomm command to configure queues on a port.
|
||||
tmctl setqcfg --devtype 0 --if $ifname --qid $Q_COUNT --priority $order --qsize $qsize --weight $wgt --schedmode $salg --shapingrate $rate --burstsize $bs
|
||||
Q_COUNT=$((Q_COUNT + 1))
|
||||
|
|
@ -344,28 +389,12 @@ handle_shaper() {
|
|||
fi
|
||||
|
||||
config_get rate "$sid" "rate"
|
||||
if [ -z "${rate}" ]; then
|
||||
|
||||
rate=$(get_shaper_rate "$rate")
|
||||
if [ "$rate" -eq -1 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "${rate}" -eq -1 ]; then
|
||||
#No shaping
|
||||
return
|
||||
fi
|
||||
|
||||
# Convert the rate from bps to kbps.
|
||||
if [ "${rate}" -ge 0 -a "${rate}" -le 100 ];then
|
||||
# set as per percentage
|
||||
speed=$(get_max_linkspeed "$ifname")
|
||||
if [ -z "${speed}" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
rate=$((speed * rate * 1000 / 100))
|
||||
else
|
||||
rate=$(($rate / 1000))
|
||||
fi
|
||||
|
||||
config_get bs "$sid" "burst_size"
|
||||
tmctl setportshaper --devtype 0 --if $ifname --shapingrate $rate --burstsize $bs
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue