qosmngr: update rate processing for queue

This commit is contained in:
Mohd Mehdi 2025-03-05 06:02:13 +00:00 committed by IOPSYS Dev
parent 1b7fa8ba15
commit ee2165b184
No known key found for this signature in database
6 changed files with 125 additions and 58 deletions

View file

@ -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

View file

@ -0,0 +1,4 @@
uci -q set qos.globals=globals
uci -q set qos.globals.per_queue_shaper=0
exit 0

View 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"
}

View file

@ -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))
}

View file

@ -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"

View file

@ -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
}