mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2025-12-10 07:44:50 +01:00
qosmgr: add support for wan ingress and egress rate control
This commit is contained in:
parent
70c823e303
commit
52f554b84d
1 changed files with 65 additions and 7 deletions
|
|
@ -6,6 +6,19 @@ readonly ETHWAN="$(jsonfilter -i /etc/board.json -e @.network.wan.device)"
|
||||||
readonly LANPORTS="$(jsonfilter -i /etc/board.json -e @.network.lan.ports[*] -e @.network.lan.device | xargs)"
|
readonly LANPORTS="$(jsonfilter -i /etc/board.json -e @.network.lan.ports[*] -e @.network.lan.device | xargs)"
|
||||||
readonly OFFSET=32
|
readonly OFFSET=32
|
||||||
|
|
||||||
|
get_wan_type_idx() {
|
||||||
|
case "$(cat "/proc/tc3162/${ETHWAN}_switch_hsgmii_lan")" in
|
||||||
|
pon) echo "3" ;;
|
||||||
|
usb) echo "2" ;;
|
||||||
|
pcie0) echo "0" ;;
|
||||||
|
pcie1) echo "1" ;;
|
||||||
|
eth) echo "4" ;;
|
||||||
|
*) echo "-1" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
readonly WAN_TYPE_IDX="$(get_wan_type_idx)"
|
||||||
|
|
||||||
errmsg() {
|
errmsg() {
|
||||||
echo "$@" >&2
|
echo "$@" >&2
|
||||||
return 0
|
return 0
|
||||||
|
|
@ -53,6 +66,43 @@ hw_intf_init() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_wan_ingress_rate() {
|
||||||
|
local ingress_rate="$1"
|
||||||
|
local pkt_type
|
||||||
|
local wanchannel="$(cat /proc/tc3162/eth_portmap | head -n1)"
|
||||||
|
wanchannel=$((wanchannel))
|
||||||
|
|
||||||
|
rm -rf "/tmp/qos/wan_ingress_shape_speed"
|
||||||
|
if [ "$wanchannel" = "-1" ]; then
|
||||||
|
[ "$WAN_TYPE_IDX" = "-1" -o -z "$ingress_rate" ] && return
|
||||||
|
|
||||||
|
echo "$ingress_rate" > "/tmp/qos/wan_ingress_shape_speed"
|
||||||
|
|
||||||
|
for pkt_type in $(seq 0 3); do
|
||||||
|
echo "$WAN_TYPE_IDX $pkt_type $ingress_rate 0" > "/proc/tc3162/${ETHWAN}_ratelimit"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
set_wan_egress_rate() {
|
||||||
|
local rate="$1"
|
||||||
|
local burstsize="$2"
|
||||||
|
local wanchannel="$(cat /proc/tc3162/eth_portmap | head -n1)"
|
||||||
|
wanchannel=$((wanchannel))
|
||||||
|
[ "$wanchannel" = "-1" ] && wanchannel=0
|
||||||
|
|
||||||
|
if [ "$rate" -gt 0 ]; then
|
||||||
|
/userfs/bin/qdmamgr_wan set general_tx_trtcm config "$wanchannel" enable byte slow enable byte fast
|
||||||
|
/userfs/bin/qdmamgr_wan set general_tx_trtcm value "$wanchannel" "$rate" "$rate"
|
||||||
|
|
||||||
|
if [ "$burstsize" -gt 1000 ]; then
|
||||||
|
/userfs/bin/qdmamgr_wan set general_tx_trtcm bsize "$wanchannel" "$burstsize" "$burstsize"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
/userfs/bin/qdmamgr_wan set general_tx_trtcm config "$wanchannel" disable byte slow disable byte fast
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Initialize the hardware setup library
|
# Initialize the hardware setup library
|
||||||
hw_init_all() {
|
hw_init_all() {
|
||||||
local tc=0
|
local tc=0
|
||||||
|
|
@ -70,6 +120,7 @@ hw_init_all() {
|
||||||
|
|
||||||
/userfs/bin/qdmamgr_lan set general_rx_init enable trtcm 8 125
|
/userfs/bin/qdmamgr_lan set general_rx_init enable trtcm 8 125
|
||||||
/userfs/bin/qdmamgr_wan set general_rx_init enable trtcm 8 125
|
/userfs/bin/qdmamgr_wan set general_rx_init enable trtcm 8 125
|
||||||
|
/userfs/bin/qdmamgr_wan set general_tx_init enable trtcm 40 25
|
||||||
|
|
||||||
for channel in $(seq 0 30); do
|
for channel in $(seq 0 30); do
|
||||||
tsid=$((OFFSET+channel))
|
tsid=$((OFFSET+channel))
|
||||||
|
|
@ -77,6 +128,9 @@ hw_init_all() {
|
||||||
/userfs/bin/qdmamgr_wan set general_rx_trtcm config "$tsid" disable byte slow disable byte fast
|
/userfs/bin/qdmamgr_wan set general_rx_trtcm config "$tsid" disable byte slow disable byte fast
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# set_wan_ingress_rate "0" - Not needed
|
||||||
|
set_wan_egress_rate "0" "0"
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -209,7 +263,7 @@ hw_policer_set_ingress_rate() {
|
||||||
local in_burst_size="$3"
|
local in_burst_size="$3"
|
||||||
|
|
||||||
if [ "$ifname" = "$ETHWAN" ]; then
|
if [ "$ifname" = "$ETHWAN" ]; then
|
||||||
errmsg "cannot set policer for wan interface ${ifname}"
|
set_wan_ingress_rate "$ingress_rate"
|
||||||
else
|
else
|
||||||
set_lan_rate "$ifname" "$ingress_rate" "$in_burst_size" "0"
|
set_lan_rate "$ifname" "$ingress_rate" "$in_burst_size" "0"
|
||||||
fi
|
fi
|
||||||
|
|
@ -226,7 +280,7 @@ hw_shaper_set() {
|
||||||
add)
|
add)
|
||||||
if [ "$ifname" = "$ETHWAN" ]; then
|
if [ "$ifname" = "$ETHWAN" ]; then
|
||||||
export TMP_HW_SHAPE_RATE="$rate"
|
export TMP_HW_SHAPE_RATE="$rate"
|
||||||
export TMP_HW_SHAPE_BURSTSIZE="$burstsize"
|
set_wan_egress_rate "$rate" "$burstsize"
|
||||||
else
|
else
|
||||||
set_lan_rate "$ifname" "$rate" "$burstsize" "1"
|
set_lan_rate "$ifname" "$rate" "$burstsize" "1"
|
||||||
fi
|
fi
|
||||||
|
|
@ -234,7 +288,7 @@ hw_shaper_set() {
|
||||||
del)
|
del)
|
||||||
if [ "$ifname" = "$ETHWAN" ]; then
|
if [ "$ifname" = "$ETHWAN" ]; then
|
||||||
export TMP_HW_SHAPE_RATE=""
|
export TMP_HW_SHAPE_RATE=""
|
||||||
export TMP_HW_SHAPE_BURSTSIZE=""
|
set_wan_egress_rate "0" "0"
|
||||||
else
|
else
|
||||||
set_lan_rate "$ifname" "0" "0" "1"
|
set_lan_rate "$ifname" "0" "0" "1"
|
||||||
fi
|
fi
|
||||||
|
|
@ -309,20 +363,24 @@ hw_commit_all() {
|
||||||
weight_list="$weight_list 1"
|
weight_list="$weight_list 1"
|
||||||
q_count=$((q_count + 1))
|
q_count=$((q_count + 1))
|
||||||
done
|
done
|
||||||
|
|
||||||
|
echo ${mac_qos_flag} > /proc/qdma_wan/mac_qos_flag
|
||||||
|
echo "1 ${weight_list}" > /proc/qdma_wan/mac_qos
|
||||||
;;
|
;;
|
||||||
SP)
|
SP)
|
||||||
mac_qos_flag="8QPQ"
|
mac_qos_flag="8QPQ"
|
||||||
q_count="8"
|
q_count="8"
|
||||||
|
|
||||||
|
echo ${mac_qos_flag} > /proc/qdma_wan/mac_qos_flag
|
||||||
|
echo "0 0 0 0 0 0 0 0 0" > /proc/qdma_wan/mac_qos
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
echo 255 > /proc/qdma_wan/mac_default_queuemask
|
||||||
|
|
||||||
rm -f "/tmp/qos/wan_link_shape_rate"
|
rm -f "/tmp/qos/wan_link_shape_rate"
|
||||||
rm -f "/tmp/qos/wan_link_speed"
|
rm -f "/tmp/qos/wan_link_speed"
|
||||||
if [ "${glob_alg}" != "" ] ; then
|
if [ "${glob_alg}" != "" ] ; then
|
||||||
/userfs/bin/qosrule discpline $(hw_sc_alg2str ${glob_alg}) ${weight_list} \
|
|
||||||
uplink-bandwidth ${shape_rate:-10000000} \
|
|
||||||
queuemask "$(((1 << q_count) - 1))"
|
|
||||||
echo ${mac_qos_flag} > /proc/qdma_wan/mac_qos_flag
|
|
||||||
if [ -n "${shape_rate}" ]; then
|
if [ -n "${shape_rate}" ]; then
|
||||||
echo "${shape_rate}" > "/tmp/qos/wan_link_shape_rate"
|
echo "${shape_rate}" > "/tmp/qos/wan_link_shape_rate"
|
||||||
else
|
else
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue