Dark_Angel Posted January 30, 2010 Posted January 30, 2010 Господа, пытаюсь разобраться с 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. Пробовал и так и так - результата нет. Заранее спасибо. Вставить ник Quote
photon Posted January 30, 2010 Posted January 30, 2010 (edited) Скажите, пожалуйста, где ошибка в моей конфигурации? Все по 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. Edited January 30, 2010 by photon Вставить ник Quote
Dark_Angel Posted January 30, 2010 Author Posted January 30, 2010 Насчет 16 и 12 - Вы действительно оказались правы - это смещения для dst и src. Мне, для dst нужно было поставить 16. Хотя я раньше ставил, и оно не срабатывало, возможно, дело было в том, что там уже были фильтры на 12 смещении. Насчет инкапсуляци я с Вами не соглашусь - инкапсуляция есть, на eth0, скажем, на ppp0 пакет уже деинкапсулирован, поэтому там можно работать с нормальными смещениями. Все заработало, спасибо за пояснения. Вставить ник Quote
_dx Posted August 14, 2011 Posted August 14, 2011 зачем делатся рутовый фильтр? # рутовый фильтрtc filter add dev ppp0 parent 1:0 prio 5 protocol ip u32 Вставить ник Quote
voron Posted August 14, 2011 Posted August 14, 2011 Чтобы последующие filter add с указанием handle нормально отрабатывали. Вставить ник Quote
_dx Posted August 14, 2011 Posted August 14, 2011 Почему-то думал, что стандартная таблица 800 и так всегда существует... нет? Поэкспериментирую... Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.