diff --git a/qosmngr/files/etc/uci-defaults/60-qos_queue_generate b/qosmngr/files/etc/uci-defaults/60-qos_queue_generate index 7edd1be72..69d37ecf0 100644 --- a/qosmngr/files/etc/uci-defaults/60-qos_queue_generate +++ b/qosmngr/files/etc/uci-defaults/60-qos_queue_generate @@ -2,20 +2,34 @@ . /lib/functions.sh +ethwan="$(db -q get hw.board.ethernetWanPort)" +is_l2="$(db -q get hw.board.layer2)" generate_queue(){ section="$1" + config_get ifname "$section" "ifname" + + local is_lan=0 + if [ "$ifname" != "$ethwan" ]; then + is_lan=1 + fi + + local no_of_q="0 1 2 3 4 5 6 7" + if [ $is_l2 -eq 1 -a $is_lan -eq 1 ]; then + no_of_q="0 1 2 3" + fi + i=0 - for i in 0 1 2 3 4 5 6 7; do + for i in $no_of_q; do uci add qos queue - uci rename qos.@queue[-1]="q${i}_${ifname}" + uci rename qos.@queue[-1]="q_${i}_${ifname}" + uci set qos.@queue[-1].enable="1" uci set qos.@queue[-1].ifname="$ifname" uci set qos.@queue[-1].precedence="$i" - uci set qos.@queue[-1].scheduling="WRR" - uci set qos.@queue[-1].rate=0 - uci set qos.@queue[-1].burst_size=-1 - uci set qos.@queue[-1].traffic_class="$i" - uci set qos.@queue[-1].weight=1 + uci set qos.@queue[-1].scheduling="SP" + uci set qos.@queue[-1].rate="0" + uci set qos.@queue[-1].burst_size="-1" + uci set qos.@queue[-1].weight="1" done uci commit qos diff --git a/qosmngr/files/lib/qos/broadcom.sh b/qosmngr/files/lib/qos/broadcom.sh index 1617a8970..a0975c2c6 100755 --- a/qosmngr/files/lib/qos/broadcom.sh +++ b/qosmngr/files/lib/qos/broadcom.sh @@ -11,22 +11,22 @@ handle_queue() { local wgt local rate local bs - config_get ifname "$qid" "ifname" + config_get is_enable "$qid" "enable" + # no need to configure disabled queues + if [ $is_enable == '0' ]; then + return + fi + + config_get ifname "$qid" "ifname" # if ifname is empty that is good enough to break if [ -z "$ifname" ];then - break + return fi # lower the value, lower the priority of queue on this chip config_get order "$qid" "precedence" - # on this chip, 8 queues per port exist so values larger than this - # cannot be supported - if [ $order -gt 7 ]; then - continue - fi - config_get tc "$qid" "traffic_class" config_get sc_alg "$qid" "scheduling" config_get wgt "$qid" "weight" @@ -35,10 +35,6 @@ handle_queue() { salg=1 -# if [ $sc_alg == 'WRR' ]; then -# salg=2 -# fi - case "$sc_alg" in "SP") salg=1 ;; @@ -54,6 +50,14 @@ handle_queue() { # Call tmctl which is a broadcomm command to configure queues on a port. tmctl setqcfg --devtype 0 --if $ifname --qid $order --priority $order --weight $wgt --schedmode $salg --shapingrate $rate --burstsize $bs else + if [ $sc_alg == 'WRR' ]; then + return + fi + + if [ -z "$tc" ]; then + return + fi + # Now the mapping of p bit to a queue happens IFS=, for word in $tc; do @@ -69,11 +73,20 @@ handle_shaper() { local rate local bs sid="$1" #queue section ID + + config_get is_enable "$sid" "enable" + # no need to configure disabled queues + if [ $is_enable == '0' ]; then + return + fi + + config_get ifname "$sid" "ifname" # if ifname is empty that is good enough to break if [ -z "$ifname" ];then - break + return fi + config_get rate "$sid" "rate" config_get bs "$sid" "burst_size" tmctl setportshaper --devtype 0 --if $ifname --shapingrate $rate --burstsize $bs