Jump to content
Калькуляторы

Проблема с хендлами в tc: решено

Всем привет!

 

В процессе реализации вот этой штуки https://github.com/FastVPSEestiOu/openvz-network-shaper/blob/master/fastvps_openvz_shaper.pl (шейпера для OpenVZ VPS) уже очень давно столкнулся с неприятной штукой, а именно с неработоспособностью хендлов для IPv6 правил.

 

Зачем мне хендлы? Очень просто - с ними очень удобно удалять правила, так как хендл явно связан в нашей системе с номером контейнера и я всегда могу в один подход найти и удалить/заменить правила по конкретному хендлу.

 

Для IPv4 все создается идеально:

/sbin/tc filter add dev eth0 handle 800::39 protocol ip parent 1: prio 1 u32 match ip dst "xx.yy.xx.31" flowid 1:290

А вот при попытке подсунуть тоже самое для IPv6:

/sbin/tc filter add dev venet0 handle 800::66 protocol ipv6 parent 1:  u32 match ip6 dst "1abb:aabb:150:9222::8" flowid 1:290

Вышибает вот такое:

error: RTNETLINK answers: Invalid argument
We have an error talking to the kernel

 

Как только убираю handle все работает на ура:

/sbin/tc filter add dev venet0 protocol ipv6 parent 1:  u32 match ip6 dst "1abb:aabb:150:9222::8" flowid 1:290

 

Платформа: CentOS 6 + 2.6.32 родное.

 

Спасайте =( Пытался разобраться с форматом хендлов в коде ядра, но не оилил :(

 

Уточняю - все фильтры создаю с уникальными handle, то есть src и dst правила получают собственные номера, как для v4, так и для v6.

Edited by pavel.odintsov

Share this post


Link to post
Share on other sites

Как-то это кривовато =( Да и неудобно будет потом разбираться без скрипта, у кого какие правила. Хотелось бы понять, почему оно себя вообще так ведет.

Share this post


Link to post
Share on other sites

сначала нужно проверить на актуальном ядре (3.15.4). да, там нет openvz, но проверить нужно, потом попытаться пропатчить ваше ядро, если в 3.15.4 такой проблемы нет

Share this post


Link to post
Share on other sites

Починено в общем.

 

Баг был в двух местах, что усложняло его исправление.

 

Хендлы для IPv6 должны иметь префикс 801::XX, а для IPv4 - 800::XX, кроме этого, если для одного и того же класса есть правила IPv4 и IPv6, то у них должны быть РАЗНЫЕ приоритеты. При этом допустимо, чтобы приоритет у src/dst правил на один и тот же айпи для одного протокола был идентичен.

 

Вот так. Блин, tc - вечная криптомагия=)

Edited by pavel.odintsov

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.