Перейти к содержимому
Калькуляторы

u32 hashtables

Господа, пытаюсь разобраться с hashtables. Полистал форум, думал написать в какой-то существующей теме, но не нашел подходщей.

 

Прочитал LARTC. Все красиво. Пытаюсь сделать - не работает.

Скажем у меня есть сеть 192.168.2.0/24 и мне надо отфильтровать адрес 192.168.2.161. Все это дело происходит на интерфейсе ppp0.

 

Я говорю:

tc q add dev ppp0 root handle 1 htb

tc cl add dev ppp0 parent 1:0 classid 1:2 htb rate 100Mbit

tc cl add dev ppp0 parent 1:2 classid 1:5000 htb rate 5Mbit

 

Тут все понятно. Дальше идут фильтры:

# рутовый фильтр

tc filter add dev ppp0 parent 1:0 prio 5 protocol ip u32

 

# таблица на 256 адресов

tc filter add dev ppp0 parent 1:0 prio 5 handle 2: protocol ip u32 divisor 256

 

# добавляю в таблицу 1 запись. a1 - это 161 в hex. Фильтруем по плану все в 5000 класс, созданый выше

tc filter add dev ppp0 protocol ip parent 1:0 prio 5 u32 ht 2:a1: match ip dst 192.168.2.161 flowid 1:5000

 

# делаю рутовую таблицу для отфильтровки собственно последнего байта в /24 и говорю идти читать созданную таблицу выше

tc filter add dev ppp0 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip dst 192.168.2.0/24 hashkey mask 0x000000ff at 12 link 2:

 

После выполнения получаю в фильтрах:

 

filter parent 1: protocol ip pref 5 u32

filter parent 1: protocol ip pref 5 u32 fh 2: ht divisor 256

filter parent 1: protocol ip pref 5 u32 fh 2:a1:800 order 2048 key ht 2 bkt a1 flowid 1:5000

match c0a802a1/ffffffff at 16

filter parent 1: protocol ip pref 5 u32 fh 800: ht divisor 1

filter parent 1: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 2:

match c0a80200/ffffff00 at 12

hash mask 000000ff at 12

 

Трафик в класс 5000 не попадает.

 

Если сказать банальное

tc filter add dev ppp0 protocol ip parent 1:0 prio 5 u32 match ip dst 192.168.2.161 flowid 1:5000

 

Трафик в классе появляется.

 

Скажите, пожалуйста, где ошибка в моей конфигурации? Все по LARTC. Читал http://brownian.org.ua/?page_id=6 но там для более сложной структуры и почему-то "hashkey mask 0x000000ff at 16", а в LARTC - 12. Пробовал и так и так - результата нет.

 

Заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Скажите, пожалуйста, где ошибка в моей конфигурации? Все по LARTC. Читал http://brownian.org.ua/?page_id=6 но там для более сложной структуры и почему-то "hashkey mask 0x000000ff at 16", а в LARTC - 12. Пробовал и так и так - результата нет.

Так у вас же IP инкапсулирован в PPP, значит надо ко всем смещениям прибавить размер заголовка PPP-кадра. Если у вас все IP в пределах одной сети /16, то вместо u32 можно использовать фильтр flow. 16 и 12 -- это смещения для destination IP и source IP.

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Насчет 16 и 12 - Вы действительно оказались правы - это смещения для dst и src. Мне, для dst нужно было поставить 16. Хотя я раньше ставил, и оно не срабатывало, возможно, дело было в том, что там уже были фильтры на 12 смещении.

 

Насчет инкапсуляци я с Вами не соглашусь - инкапсуляция есть, на eth0, скажем, на ppp0 пакет уже деинкапсулирован, поэтому там можно работать с нормальными смещениями.

 

Все заработало, спасибо за пояснения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

зачем делатся рутовый фильтр?

# рутовый фильтр

tc filter add dev ppp0 parent 1:0 prio 5 protocol ip u32

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Чтобы последующие filter add с указанием handle нормально отрабатывали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почему-то думал, что стандартная таблица 800 и так всегда существует... нет?

Поэкспериментирую...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.