Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- SHAPER_SUPPORT=`flash get SHAPER_ENABLE | cut -f 2- -d =`
- OUTIFACE=ppp0
- LOG="logger -t init.d"
- start() {
- if [ "$SHAPER_SUPPORT" = "on" ]; then
- $LOG "Start shaper and stop nat fastpath..."
- echo 0 > /proc/FastPath
- modprobe sch_esfq > /dev/null 2>&1
- modprobe sch_sfq > /dev/null 2>&1
- #get parametrs
- BANDWIDTHUP=`flash get TOTAL_BANDWIDTH_UP | cut -f 2- -d =`
- BANDWIDTHDOWN=`flash get TOTAL_BANDWIDTH_DOWN | cut -f 2- -d =`
- BANDWIDTHUP_LIMIT=`flash get TOTAL_BANDWIDTH_LIMIT_UP | cut -f 2- -d =`
- BANDWIDTHDOWN_LIMIT=`flash get TOTAL_BANDWIDTH_LIMIT_DOWN | cut -f 2- -d =`
- LAN_IP_ADDR=`flash get LAN_IP_ADDR | cut -f 2- -d =`
- LAN_IP_ADDR2=`flash get LAN_IP_ADDR2 | cut -f 2- -d =`
- SHAPER_IN_ENABLE=`flash get SHAPER_IN_ENABLE | cut -f 2- -d =`
- #----------------------------------------------CLEAR---------------------------------------------------------------
- #incoming traffic from all ppp interfaces session balance
- tc qdisc del dev br0 root > /dev/null 2>&1
- tc qdisc del dev $OUTIFACE root > /dev/null 2>&1
- tc qdisc del dev $OUTIFACE ingress > /dev/null 2>&1
- #--------------------------------------------INCOMING---------------------------------------------------------------
- # Оставляем как есть:
- # Пишем в лог значения установленных скоростей
- $LOG "All incoming ppp rate: normal $BANDWIDTHDOWN_LIMIT , maximum $BANDWIDTHDOWN (kbit/s)"
- # Создаем дисциплину и корневой класс с максимальной гарантированной скоростью 90Мбит/с на всех.
- # Весь неклассифицированный трафик пойдет на 21 класс
- tc qdisc add dev br0 root handle 1: htb default 21
- tc class add dev br0 parent 1: classid 1:1 htb rate 90mbit quantum 1500 burst 500k
- # Делим его на два подкласса: 2 - интернет, 3 - локалка.
- # ${BANDWIDTHDOWN} - гарантированная скорость интернета, устанавливается через веб.
- # Для локалки 90Мбит/с максимум, 80Мбит/с гарантированно.
- tc class add dev br0 parent 1:1 classid 1:2 htb rate ${BANDWIDTHDOWN}kbit quantum 1500 burst 300k
- tc class add dev br0 parent 1:1 classid 1:3 htb rate 80mbit ceil 90mbit prio 0 quantum 1500 burst 100k
- # Делим класс с интернетом, например, на четыре подкласса. Каждый подкласс для одного адреса, т.е. пользователя.
- # Приоритет одинаков.
- # Последний подкласс для неклассифицированного трафика.
- # root for WEB and TORRENT
- tc class add dev br0 parent 1:2 classid 1:20 htb rate ${BANDWIDTHDOWN_LIMIT}kbit ceil ${BANDWIDTHDOWN}kbit prio 1 quantum 1500 burst 300k
- # WEB
- tc class add dev br0 parent 1:20 classid 1:201 htb rate 500kbit prio 1 quantum 1500 burst 300k
- # TORRENT
- tc class add dev br0 parent 1:20 classid 1:202 htb rate 240kbit prio 3 quantum 1500 burst 50k
- # UNSPECIFIED
- tc class add dev br0 parent 1:2 classid 1:21 htb rate 1kbit ceil 64kbit prio 2 quantum 1500
- # Дисциплины очередей на классы.
- tc qdisc add dev br0 parent 1:3 handle 3: esfq perturb 10 hash dst quantum 1500
- tc qdisc add dev br0 parent 1:20 handle 20: esfq perturb 10 hash dst quantum 1500
- tc qdisc add dev br0 parent 1:201 handle 201: esfq perturb 10 hash dst quantum 1500
- tc qdisc add dev br0 parent 1:202 handle 202: esfq perturb 10 hash dst quantum 1500
- tc qdisc add dev br0 parent 1:21 handle 21: esfq perturb 10 hash dst quantum 1500
- # Фильтры.
- # TORRENT
- tc filter add dev br0 parent 1:0 prio 3 protocol ip handle 22 fw u32 match ip dst 192.168.1.0/24 flowid 1:202
- # OTHER traffic
- tc filter add dev br0 parent 1:0 prio 1 protocol ip u32 match ip dst 192.168.1.0/24 flowid 1:201
- # UNSPECIFIED
- tc filter add dev br0 parent 1:0 protocol ip prio 2 u32 match ip flowid 1:21
- # Фильтр для локалки.
- tc filter add dev br0 parent 1:0 protocol ip prio 0 u32 match ip src $LAN_IP_ADDR flowid 1:3
- #---------------------------------------------OUTGOING--------------------------------------------------------------
- #all output traffic for ppp0
- $LOG "All outgoing ppp rate: normal $BANDWIDTHUP_LIMIT , maximum $BANDWIDTHUP (kbit/s)"
- tc qdisc add dev $OUTIFACE root handle 1: htb default 24
- tc class add dev $OUTIFACE parent 1: classid 1:1 htb rate ${BANDWIDTHUP}kbit quantum 1500 burst 50k
- tc class add dev $OUTIFACE parent 1:1 classid 1:23 htb rate ${BANDWIDTHUP_LIMIT}kbit \
- ceil ${BANDWIDTHUP}kbit prio 0 quantum 1500
- tc class add dev $OUTIFACE parent 1:1 classid 1:24 htb rate 1kbit ceil 8kbit prio 1 quantum 1500
- tc qdisc add dev $OUTIFACE parent 1:23 handle 23: sfq perturb 10 quantum 1500
- tc qdisc add dev $OUTIFACE parent 1:24 handle 24: sfq perturb 10 quantum 1500
- tc filter add dev $OUTIFACE parent 1:0 protocol ip prio 0 u32 match ip src $LAN_IP_ADDR flowid 1:23
- #-----------------------------------------------BRIDGE---------------------------------------------------------------
- else
- $LOG "Shaper disabled by user."
- fi
- }
- stop() {
- $LOG "Stop shaper..."
- tc qdisc del dev br0 root > /dev/null 2>&1
- tc qdisc del dev $OUTIFACE root > /dev/null 2>&1
- tc qdisc del dev $OUTIFACE ingress > /dev/null 2>&1
- rmmod sch_esfq > /dev/null 2>&1
- rmmod sch_sfq > /dev/null 2>&1
- }
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart)
- stop
- start
- ;;
- *)
- echo $"Usage: $0 {start|stop|restart}"
- exit 1
- esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement