qosmngr: support percentage ShapingRate

This commit is contained in:
Suvendhu Hansa 2025-01-28 13:56:17 +00:00 committed by IOPSYS Dev
parent 6d6962e02e
commit 2e9942589a
No known key found for this signature in database
3 changed files with 73 additions and 10 deletions

View file

@ -6,13 +6,13 @@ include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=qosmngr
PKG_VERSION:=1.0.17
PKG_VERSION:=1.0.18
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=c723a2c999bb982030df2a47a69f356bfafa0af7
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/qosmngr.git
PKG_SOURCE_VERSION:=19c4b31eefe45bbbee2ba53f5394b5e32691451e
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif
@ -41,7 +41,7 @@ TARGET_CFLAGS += -DBBF_VENDOR_PREFIX=\\\"$(CONFIG_BBF_VENDOR_PREFIX)\\\"
ifeq ($(LOCAL_DEV),1)
define Build/Prepare
$(CP) -rf ./qosmngr/* $(PKG_BUILD_DIR)/
$(CP) -rf ~/git/qosmngr/* $(PKG_BUILD_DIR)/
endef
endif

View file

@ -1,6 +1,22 @@
#!/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"
}
# UCI 'shaper' section handler.
# It will verify shaper configuration sanity and then invoke
# hardware-specific functions
@ -13,7 +29,6 @@ handle_shaper() {
return
fi
config_get ifname "$sid" "ifname"
# if ifname is empty that is good enough to break
if [ -z "$ifname" ] ; then
@ -21,12 +36,28 @@ handle_shaper() {
fi
config_get rate "$sid" "rate"
# Convert the rate from bps to kbps.
if [ -z "${rate}" ] || [ "${rate}" -lt 1000 ] ; then
if [ -z "${rate}" ]; then
return
fi
rate=$((rate / 1000))
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"
if [ "${bs}" -ge 1000 ] ; then

View file

@ -15,6 +15,22 @@ SP_Q_PRIO=7
cfg_name=""
cfg_type=""
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_port_number() {
[ -z "$1" ] && return
local ports="0 1 2 3 4 5 6 7 8"
@ -328,12 +344,28 @@ handle_shaper() {
fi
config_get rate "$sid" "rate"
# Convert the rate from bps to kbps.
if [ $rate -lt 1000 ];then
if [ -z "${rate}" ]; then
return
fi
rate=$(($rate / 1000))
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
}