blob: a893cbab72ca12e04b2cc4b86c6672b25c8c9f2b [file] [log] [blame]
#!/bin/sh
# ===========================================================
# usage: tc_control.sh
# traffic control by tc_uplink and tc_downlink
path_sh=`nv get path_sh`
. $path_sh/global.sh
echo "Info: tc_tbf $1 $2 start "
echo "Info: tc_tbf $1 $2 start" >> $test_log
#Á÷¿ØÉÏÏÂÐз§Öµ£¬Îª¿Õ»òΪ0±íʾ²»½øÐÐÁ÷¿Ø£¬ÔÝʱֻʵÏÖÉÏÐеÄtc£¬ÏÂÐн«À´¸ù¾Ýʵ¼ÊÐèÒªÔÙÀ©Õ¹ÊµÏÖ
UPLINK=`nv get tc_uplink`
DOWNLINK=`nv get tc_downlink`
def_cid=`nv get default_cid`
tc_enable=`nv get tc_enable`
#tc_enable=0£¬Á÷Á¿¿ØÖƹ¦Äܹرգ¬Ö±½ÓÍ˳ö
if [ "$tc_enable" == "0" ]; then
echo "tc_enable=0"
echo "tc_enable=0" >> $test_log
exit 0
fi
#ÉÏÏÂÐеijö¿ÚdevÐèÒª¸ù¾Ýʵ¼ÊÇé¿öÑ¡Ôñ
need_jilian=`nv get need_jilian`
lanEnable=`nv get LanEnable`
if [ "$need_jilian" == "1" ]; then
if [ "$lanEnable" == "1" ]; then
IN=`nv get lan_name`
elif [ "$lanEnable" == "0" ]; then
IN=`nv get "ps_ext"$def_cid`
fi
elif [ "$need_jilian" == "0" ]; then
IN=`nv get lan_name`
fi
#˫ջʱ£¬ipv4ºÍipv6µÄĬÈÏÍâÍø¿Ú¿ÉÄܲ»Ò»Ö£¬ËäÈ»¶ÌÆÚÄÚ¶¼²»»áÓÐʵ¼Ê³¡¾°
OUT4=$defwan_rel
OUT6=$defwan6_rel
if [ "$lanEnable" == "1" ]; then
GATEWAY=`nv get lan_ipaddr`
fi
echo "IN=$IN, OUT4=$OUT4, OUT6=$OUT6, GATEWAY=$GATEWAY, DOWNLINK=$DOWNLINK, UPLINK=$UPLINK"
echo "IN=$IN, OUT4=$OUT4, OUT6=$OUT6, GATEWAY=$GATEWAY, DOWNLINK=$DOWNLINK, UPLINK=$UPLINK" >> $test_log
#Çå¿ÕÔ­ÏȵÄÁ÷³Ì¹æÔò
tc qdisc del dev $IN root
if [ "$OUT4" != "" ]; then
tc qdisc del dev $OUT4 root
fi
if [ "$OUT6" != "" -a "$OUT6" != "$OUT4" ]; then
echo "clear tc for $OUT6"
tc qdisc del dev $OUT6 root
fi
#¸øÄں˻ָ´¿ìËÙת·¢¼¶±ð
fastnat_level=`nv get fastnat_level`
echo "Info: fastnat_level restore to£º$fastnat_level" >> $test_log
echo $fastnat_level > /proc/net/fastnat_level
ifconfig $IN txqueuelen 10
if [ "$OUT4" != "" ]; then
ifconfig $OUT4 txqueuelen 10
fi
if [ "$OUT6" != "" -a "$OUT6" != "$OUT4" ]; then
ifconfig $OUT6 txqueuelen 10
fi
#ÊÊÅä֮ǰµÄ¿Í»§£ºÈç¹û$1²»µÈÓÚdown/DOWN£¬¾Í°´up/UP´¦Àí
if [ "$1" == "down" -o "$1" == "DOWN" ]; then
echo "traffic control down"
echo "traffic control down" >> $test_log
exit 0
fi
if [ "$DOWNLINK" == "" -o "$DOWNLINK" == "0" ] && [ "$UPLINK" == "" -o "$UPLINK" == "0" ]; then
echo "no need to traffic control"
echo "no need to traffic control" >> $test_log
exit 0
fi
#Ôݶ¨uc/v2¶¼ÐèÒª¹Ø±Õ¿ìËÙת·¢
echo 0 > /proc/net/fastnat_level
if [ "$DOWNLINK" != "0" -a "$DOWNLINK" != "" ]; then
echo "traffic control for down"
echo "traffic control for down" >> $test_log
LOCAL=`nv get tc_local`
SUM=`expr ${DOWNLINK} + ${LOCAL}`
echo "LOCAL=$LOCAL, SUM=$SUM"
echo "LOCAL=$LOCAL, SUM=$SUM" >> $test_log
ifconfig $IN txqueuelen 1000
#ÏÞËٵĴóСµ¥Î»ËäÈ»ÊÇbps£¬µ«Êµ¼ÊÊÇ×Ö½Ú
tc qdisc add dev $IN root handle 1: htb default 20
tc class add dev $IN parent 1: classid 1:1 htb rate ${SUM}bps
tc class add dev $IN parent 1:1 classid 1:20 htb rate ${DOWNLINK}bps
tc class add dev $IN parent 1:1 classid 1:10 htb rate ${LOCAL}bps
tc qdisc add dev $IN parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $IN parent 1:20 handle 20: sfq perturb 10
tc filter add dev $IN protocol ip parent 1:0 prio 1 u32 match ip src ${GATEWAY}/32 match ip sport 80 0xffff flowid 1:10
fi
if [ "$UPLINK" != "0" -a "$UPLINK" != "" ]; then
if [ "$OUT4" != "" ]; then
echo "traffic control for up - ipv4"
echo "traffic control for up - ipv4" >> $test_log
ifconfig $OUT4 txqueuelen 1000
tc qdisc add dev $OUT4 root handle 1: htb default 1
tc class add dev $OUT4 parent 1: classid 1:1 htb rate ${UPLINK}bps
fi
if [ "$OUT6" != "" -a "$OUT6" != "$OUT4" ]; then
echo "traffic control for up - ipv6"
echo "traffic control for up - ipv6" >> $test_log
ifconfig $OUT6 txqueuelen 1000
tc qdisc add dev $OUT6 root handle 1: htb default 1
tc class add dev $OUT6 parent 1: classid 1:1 htb rate ${UPLINK}bps
fi
fi