#!/bin/bash
modprobe ifb
ip link set ifb0 up
RATE=1000kbit
# reset all qdisc
tc qdisc del dev ifb0 root 2> /dev/null > /dev/null
tc qdisc del dev ppp0 root 2> /dev/null > /dev/null
tc qdisc del dev ppp0 ingress 2> /dev/null > /dev/null
tc qdisc del dev eth1 root 2> /dev/null > /dev/null
tc qdisc del dev eth1 ingress 2> /dev/null > /dev/null
tc qdisc add dev ifb0 root handle 1: htb default 30
tc class add dev ifb0 parent 1: classid 1:1 htb rate $RATE burst 10k
tc class add dev ifb0 parent 1:1 classid 1:10 htb rate 64kbit ceil 128kbit burst 10k prio 2
tc class add dev ifb0 parent 1:1 classid 1:20 htb rate 64kbit ceil $RATE burst 10k prio 2
tc class add dev ifb0 parent 1:1 classid 1:30 htb rate 100kbit ceil 256kbit burst 10k prio 2
tc class add dev ifb0 parent 1:1 classid 1:40 htb rate 200kbit ceil $RATE burst 10k prio 1
tc filter add dev ifb0 parent 1: protocol ip prio 1 u32 match ip dst 192.168.1.0/24 flowid 1:10
#Перенаправление входящих пакетов с ppp0 на ifb0
tc qdisc add dev ppp0 ingress handle ffff:
tc filter add dev ppp0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
Тестирую с компьютера-роутера (где это и делаю) и с ноута в локальной сети. Видно, что по-умолчанию пакеты классифицируются как 1:30, где скорость до 256кбит. Дак вот. эта скорость у меня и на роутере и в сетке держится, то есть ограничение работает. А вот фильтр:
root@gard-area51:/home/gard/run# tc -s filter show dev ifb0
filter parent 1: protocol ip pref 1 u32
filter parent 1: protocol ip pref 1 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 1 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:10
dst 192.168.1.0/24
root@gard-area51:/home/gard/run#
Я уже весь мозг сломал, ну не понимаю в чем дело. С ограничениями без IFB с eth1 (смотрит в подсеть) все работает, в чем же дело? Подскажите, очень жду ответов.
порыл интернеты везде пишут что нельзя заворачивать входящий траффик на ifb устройство.
как я понял, дело в том что tc не может определить куда дальше поступает траффик. очень жаль
для сведений. Fedora 11 ядро 2.6.29.6 iproute2-ss090324 ситуация аналогичная.
imq очень как не охота прикручивать. наверное придется входящий траффик ограничивать политикой, а с исходящим изворачиваться...
tc filter add dev $DEV parent ffff: protocol ip u32 match u32 0 0 action mirred help
Usage: mirred <DIRECTION> <ACTION> [index INDEX] <dev DEVICENAME>
where:
DIRECTION := <ingress | egress>
ACTION := <mirror | redirect>
INDEX is the specific policy instance id
DEVICENAME is the devicename
DIRECTION := <ingress как бы намекает что можно перенаправлять входящий траффик
tc filter add dev $DEV parent ffff: protocol ip u32 match u32 0 0 action mirred ingress mirror dev ifb1
mirred ingress not supported at the moment
bad action parsing
parse_action: bad value (5:mirred)!
Illegal "action"
mirred ingress not supported at the moment .... очень жаль. надеюсь в будущем допилят