У меня есть требование ограничить общий входящий трафик до 5 Мбит. Я знаю, что этого можно достичь, используя следующие tc
команда:
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 police rate 5mbit burst 10k drop flowid :1
Проблема:
У меня два потока трафика, говорят tcp и udp. Моя цель - ограничить общий трафик tcp и udp до 5 Мбит и дать tcp более высокий приоритет, чем udp.
То есть, если общий входящий трафик составляет 7 Мбит, мне нужно только 5 Мбит с меньшими потерями в tcp (поскольку он имеет более высокий приоритет).
Я знаю, что могу написать 2 разных правила, скажем, 3 Мбит и 2 Мбит, например:
tc filter add dev eth0 parent ffff: protocol ip prio 10 u32 match u32 `tcp` 0xff police rate 3mbit burst 10k drop flowid :1
tc filter add dev eth0 parent ffff: protocol ip prio 50 u32 match u32 `udp` 0xff police rate 2mbit burst 10k drop flowid :1
но это ограничит количество пакетов tcp до 3 Мбит, даже если пакетов udp нет.
Вопрос:
Есть ли какой-либо подход, позволяющий ограничить общую входящую полосу пропускания и отбрасывать лишние пакеты в зависимости от приоритета?