LINUX.ORG.RU
ФорумAdmin

tc и eth


0

0

Пытаюсь ограничить входящую и исходящую скорость на интерфейсе:
#!/bin/sh

/sbin/tc qdisc add dev eth0 root handle 1: htb default 20 r2q 1
/sbin/tc class add dev eth0 parent 1: classid 1:1 htb rate 1984kbit burst 4k
/sbin/tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1984kbit burst 4k prio 1
/sbin/tc class add dev eth0 parent 1:1 classid 1:20 htb rate 1984kbit burst 4k prio 2
/sbin/tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10 quantum 1500
/sbin/tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10 quantum 1500
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:10
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:10
/sbin/tc filter add dev eth0 parent 1: protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u160x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10

/sbin/tc qdisc add dev eth0 handle ffff: ingress
/sbin/tc filter add dev eth0 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 1984kbit burst 12k drop flowid :1

вылитает ошибка:
Illegal "match"
RTNETLINK answers: File exists
What is "flowid"?
Illegal "police"

что не так?
или может есть проще способ зашейпить интерфейс?

Re: tc и eth

Лови работающий примитив на базе твоего скрипта
С твоей фильтрацией было лень разбираться, поэтому я поставил
фильтр только по IP адресу. На выход/выход ему установлено 90Кbit, для остальных 10Kbit. 

#!/bin/sh

eth="eth1"


# Шейпинг исходящего

# Очищаем
/sbin/tc qdisc del dev ${eth} root


# Создаем рутовый класс для шейпинга. Все, что не словиться фильтрами попадет в подкласс с номером 20
/sbin/tc qdisc add dev ${eth} root handle 1: htb default 20 r2q 1

# Устанавливаем глобальный лимит скорости
/sbin/tc class add dev ${eth} parent 1: classid 1:1 htb rate 100kbit burst 4k

# Создаем два дочерних подкласса и устанавливаем им ограничение скорости
/sbin/tc class add dev ${eth} parent 1:1 classid 1:10 htb rate 90kbit burst 4k prio 1
/sbin/tc class add dev ${eth} parent 1:1 classid 1:20 htb rate 10kbit burst 4k prio 2

# Назначаем дисциплину нарезки
/sbin/tc qdisc add dev ${eth} parent 1:10 handle 10: sfq perturb 10 quantum 1500
/sbin/tc qdisc add dev ${eth} parent 1:20 handle 20: sfq perturb 10 quantum 1500

# В качестве примера создадим самый примитивный фильтр, который будет выбирать нужные нам IP
# Все, что будет выбираться этим фильтром попадет в подкласс 10
# Остальное в дефолтовый подкласс 20
/sbin/tc filter add dev ${eth} parent 1: protocol ip prio 10 u32 match ip src 192.168.0.2 flowid 1:10


# Очищаем
/sbin/tc qdisc del dev ${eth} ingress


# Шейпинг входящего траффика
/sbin/tc qdisc  add  dev ${eth} handle ffff: ingress
/sbin/tc filter add  dev ${eth} parent ffff: protocol ip prio 50 u32 match ip dst 192.168.0.2/32  police rate 90kbit burst 12k drop flowid :1

serjio28 ()

Re: tc и eth

Ошибка в ошибка в match u160x0000 0xffc0 at 2
надо match u16 0x0000 0xffc0 at 2

lioncub ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.