mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2025-12-29 15:49:30 +08:00
Compare commits
1 Commits
ne_map
...
qos_sch_im
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cecd0a02be |
@@ -112,6 +112,11 @@ handle_queue() {
|
||||
config_get bs "$qid" "burst_size"
|
||||
config_get qsize "$qid" "queue_size" 1024
|
||||
|
||||
# no need to configure if scheduling alg configured as different
|
||||
if [ -z "$sc_alg" ] || [ -z "$6" ] || ! [ "$sc_alg" == "$6" ];then
|
||||
return
|
||||
fi
|
||||
|
||||
[ "$rate" == "0" ] && rate="$port_bw"
|
||||
[ "$bs" == "0" ] && bs="$port_bs"
|
||||
|
||||
@@ -594,7 +599,8 @@ get_link_rate() {
|
||||
configure_queue() {
|
||||
qdisc_idx=0
|
||||
local bs=1500
|
||||
local rate=0
|
||||
local rate=0, sc_rate=0, sh_rate=0
|
||||
local sc_salg="SP"
|
||||
# Load UCI file
|
||||
config_load qos
|
||||
config_foreach handle_q_order queue
|
||||
@@ -617,18 +623,45 @@ configure_queue() {
|
||||
return
|
||||
fi
|
||||
|
||||
config_get rate "$sid" "rate"
|
||||
config_get sh_rate "$sid" "rate"
|
||||
# Convert the rate from bps to kbps.
|
||||
if [ $rate -lt 1000 ];then
|
||||
if [ $sh_rate -lt 1000 ];then
|
||||
return
|
||||
fi
|
||||
|
||||
rate=$(( rate / 1000 ))
|
||||
sh_rate=$(( sh_rate / 1000 ))
|
||||
config_get b_size "$sid" "burst_size"
|
||||
if [ "$b_size" == "0" ]; then
|
||||
bs="$b_size"
|
||||
fi
|
||||
}
|
||||
|
||||
get_intf_scheduler_config() {
|
||||
scid="$1" #scheduler section ID
|
||||
|
||||
config_get is_enable "$scid" "enable"
|
||||
# no need to configure disabled scheduler
|
||||
if [ "$is_enable" == "0" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
|
||||
config_get ifname "$scid" "ifname"
|
||||
# if ifname is empty that is good enough to break
|
||||
if [ -z "$ifname" ] || ! [ "$ifname" == "$2" ];then
|
||||
return
|
||||
fi
|
||||
|
||||
config_get sc_rate "$scid" "rate"
|
||||
# Convert the rate from bps to kbps.
|
||||
if [ $sc_rate -lt 1000 ];then
|
||||
return
|
||||
fi
|
||||
sc_rate=$(( sc_rate / 1000 ))
|
||||
|
||||
config_get sc_salg "$scid" "scheduling"
|
||||
}
|
||||
|
||||
local wanport="$(db -q get hw.board.ethernetWanPort)"
|
||||
for interf in $(db -q get hw.board.ethernetPortOrder); do
|
||||
Q_COUNT=0
|
||||
@@ -642,6 +675,18 @@ configure_queue() {
|
||||
link_rate=$(get_link_rate "$interf")
|
||||
# Read the shaper configuration for interface
|
||||
config_foreach get_intf_shaper_config shaper $interf
|
||||
|
||||
# Read the scheduler configuration for interface
|
||||
config_foreach get_intf_scheduler_config scheduler $interf
|
||||
|
||||
# take effect rate value which higher on scheduler/shaper
|
||||
if [ "$sh_rate" -le "$sc_rate" ]; then
|
||||
rate=$sc_rate
|
||||
else
|
||||
rate=$sh_rate
|
||||
fi
|
||||
|
||||
#assign link rate if rate not configured
|
||||
if [ "$rate" == "0" ]; then
|
||||
rate=$(( link_rate * 1000 ))
|
||||
fi
|
||||
@@ -655,7 +700,7 @@ configure_queue() {
|
||||
MAJOR="$qdisc_idx"
|
||||
fi
|
||||
|
||||
config_foreach handle_queue queue $interf $rate $qdisc_idx $bs
|
||||
config_foreach handle_queue queue $interf $rate $qdisc_idx $bs $sc_salg
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user