продолжение про шэйпинг в linux

по следующей ссылке я описывал как в linux управлять приоритетами траффика, однако это действительно только для исходящего трафика, тут я опишу как управлять входящим.
Отличие состоит в том что для того чтобы управлять входящим траффиком его нужно пропустить через еще одно виртуальное устройство, для него нужен драйвер в ядре, лучше собрать его модулем, тогда опцией можно будет задать нужное количество виртуальных устройств, драйвер называется
IFB (Intermediate Functional Block support)

дальше нужно добавить правило
tc qdisc add dev ppp0 ingress
что значит - не помню, читайте маны кому интересно
modprobe ifb numifbs=3

далее по аналогии с правилами для исходящего траффика, пишем правила для входящего

tc qdisc add dev ifb0 root handle 2: htb default 40
tc class add dev ifb0 parent 2: classid 2:1 htb rate 128kbit ceil 128kbit
tc class add dev ifb0 parent 2:1 classid 2:10 htb rate 126kbit prio 1
tc class add dev ifb0 parent 2:1 classid 2:20 htb rate 96kbit prio 2
tc class add dev ifb0 parent 2:1 classid 2:30 htb rate 64kbit prio 3
tc class add dev ifb0 parent 2:1 classid 2:40 htb rate 106kbit prio 4
tc qdisc add dev ifb0 parent 2:10 handle 10: sfq perturb 10
tc qdisc add dev ifb0 parent 2:20 handle 20: sfq perturb 10
tc qdisc add dev ifb0 parent 2:30 handle 30: sfq perturb 10
tc qdisc add dev ifb0 parent 2:40 handle 40: sfq perturb 10

обратите внимание на следующую строку

tc filter add dev ppp0 parent ffff: protocol ip prio 10 u32 match u32 0 0 flowid 2:1 action mirred egress redirect dev ifb0


tc filter add dev ifb0 parent 2: protocol ip u32 match ip dport 22 0xffff flowid 2:10
tc filter add dev ifb0 parent 2: protocol ip u32 match ip dport 1194 0xffff flowid 2:10
tc filter add dev ifb0 parent 2: protocol ip u32 match ip dport 53 0xffff flowid 2:10
tc filter add dev ifb0 parent 2: protocol ip u32 match ip dport 443 0xffff flowid 2:20
tc filter add dev ifb0 parent 2: protocol ip u32 match ip dport 873 0xffff flowid 2:10
tc filter add dev ifb0 parent 2: protocol ip u32 match ip dport 80 0xffff flowid 2:20
tc filter add dev ifb0 parent 2: protocol ip u32 match ip dport 21 0xffff flowid 2:20
tc filter add dev ifb0 parent 2: protocol ip u32 match ip dport 5190 0xffff flowid 2:30
tc filter add dev ifb0 parent 2: protocol ip u32 match ip sport 5269 0xffff flowid 2:10
tc filter add dev ifb0 parent 2: protocol ip u32 match ip dport 5269 0xffff flowid 2:10
tc filter add dev ifb0 parent 2: protocol ip u32 match ip sport 5222 0xffff flowid 2:10
tc filter add dev ifb0 parent 2: protocol ip u32 match ip dport 9418 0xffff flowid 2:10
tc filter add dev ifb0 parent 2: protocol ip u32 match ip dport 3690 0xffff flowid 2:10

после чего запускаем наш виртуальный интрефейс
ifconfig ifb0 up