Назад | Перейти на главную страницу

Невозможно установить ограничение пропускной способности для входящего беспроводного интерфейса с помощью netem и ifb

Я пытаюсь ограничить пропускную способность при входе беспроводного интерфейса с помощью виртуального интерфейса IFB. Я следовал инструкциям Вот

Краткое изложение шагов:

Вспоминая ifb:

sudo modprobe ifb numifbs=1
ip link set dev ifb0 up

перенаправить входящий qdisc wlp3s0 на ifb0:

sudo tc qdisc add dev wlp3s0 handle ffff: ingress
sudo tc filter add dev wlp3s0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0

установка ограничения пропускной способности 1 Мбит / с

sudo tc qdisc add dev ifb0 root handle 1: htb default 10
sudo tc class add dev ifb0 parent 1: classid 1:1 htb rate 1mbit

Я протестировал настройку с помощью iperf, однако я могу получать данные на физическом интерфейсе со скоростью 4 Мбит / с (что превышает установленный мной предел в 1 Мбит / с).

Есть идеи, что я здесь делаю не так? Как я могу это исправить?

Вы определяете HTB по умолчанию для использования classid 1:10, а затем определяете только 1: 1. 1: 1 никогда не используется, поэтому ограничений нет.

Либо определите значение по умолчанию 1, чтобы достичь classid 1: 1, либо добавьте фильтр, чтобы выборочно выбирать, когда достичь 1: 1.

Так что либо перепишите его как:

sudo tc qdisc add dev ifb0 root handle 1: htb default 1
sudo tc class add dev ifb0 parent 1: classid 1:1 htb rate 1mbit

или иначе сохранить default 10, но добавьте специальный фильтр, указывающий на 1: 1, например, для фильтрации только (входящего) порта назначения 5001, который повлияет только на iperf -s запустить в этой системе, например:

sudo tc filter add dev ifb0 parent 1: protocol ip u32 match ip dport 5001 0xffff flowid 1:1