Есть вопрос по tc.
Изначальная сверхзадача следующая:
Для всех подключений равномерно распределять скорость (не касается медленных клиентов, у которых своя скорость мала – настроить, чтобы такие клиенты не отваливались из-за специфичных сетевых настроек).
Для нового подключения выделять скорость 1 MBit/s, если канал свободен более чем на 30% увеличить скорость до максимальной к клиенту.
При падении общей скорости, участников, менее 256Kbit/s блокировать новые подключения.Написаны соответствующие правила для tc:
$TC qdisc add dev $IF root handle 1: cbq bandwidth 500Mbit avpkt 5000 cell 8 allot 1514
$TC class add dev $IF parent 1:0 classid 1:112 cbq bandwidth 150mbit rate 100mbit cell 8 allot 1514 sharing borrow prio 2
$TC class add dev $IF parent 1:0 classid 1:113 cbq bandwidth 500mbit rate 1mbit cell 8 allot 1514 sharing borrow prio 2
$TC class add dev $IF parent 1:0 classid 1:114 cbq bandwidth 500mbit cell 8 allot 1514 rate 256kbit sharing borrow prio 2
$TC qdisc add dev $IF parent 1:112 handle 20: esfq perturb 5 hash dst
$TC qdisc add dev $IF parent 1:113 handle 30: esfq perturb 5 hash dst
$TC qdisc add dev $IF parent 1:114 handle 40: esfq perturb 5 hash dst
Вроде бы работает, но почему-то трафик попадает только в самый широкий класс. В другие же при нагрузке он не попадает в принципе. Может быть кто-то подскажет, как правильнее реализовать задачку?