Linux за българи: Форуми

Linux секция за напреднали => Хардуерни и софтуерни проблеми => Темата е започната от: saturn_vk в Dec 11, 2004, 15:40



Титла: препълване на tc filter handle-id
Публикувано от: saturn_vk в Dec 11, 2004, 15:40
В опитите си да направя shaper който да обхваща както външният нет, така и БГ локала, се сблъсках с един сериозен проблем. БГ локала е много голям, в момента аз оформявам 1104 събнета, което покриват целият (или поне почти целият) локал. Проблема идва от това че самото стартиране на оформящият скрипт отнема близо минута, при това само за 6 компютъра в мрежа, а за да прибавя друг трябва да го рестартирам целият (от събнет то компютър, и от компютър до събнет за всеки събнет и вътрешен компютър). Програмата tc от iproute2 поддържа промяна на самите филтри по същият начин както на класове (tc class/filter change dev), но класовете си имат класов номер.
Филтрите също имат класов номер, НО:
1 - Той се задава автоматично
2 - При толкова много филтри настъпва следният проблем
Примерен код

filter parent 1: protocol ip pref 4 u32 fh 801::fff order 4095 key ht 801 bkt 0 flowid 1:20
  match d9c58d00/ffffff00 at 16
  match 0a000004/ffffffff at 12
filter parent 1: protocol ip pref 4 u32 fh 801::fff order 4095 key ht 801 bkt 0 flowid 1:20
  match d9c58d00/ffffff00 at 12
  match 0a000007/ffffffff at 16
filter parent 1: protocol ip pref 4 u32 fh 801::fff order 4095 key ht 801 bkt 0 flowid 1:20
  match d9c58d00/ffffff00 at 16
  match 0a000007/ffffffff at 12
filter parent 1: protocol ip pref 4 u32 fh 801::fff order 4095 key ht 801 bkt 0 flowid 1:20
  match d9c58d00/ffffff00 at 12
  match 0a000009/ffffffff at 16
filter parent 1: protocol ip pref 4 u32 fh 801::fff order 4095 key ht 801 bkt 0 flowid 1:20
  match d9c58d00/ffffff00 at 16
  match 0a000009/ffffffff at 12

Това са само малка част от филтрите, но ако погледнете, fh (filter handle) е станал еднакъв за повечето от този клас, защото се е препълнил. И точно това не го разбирам, ако се опитам да прибавя филтър като ръчно задам филтърният номер, или ще ми напише:
Примерен код

RTNETLINK answers: File exists
We have an error talking to the kernel

ако използвам примерно 801::fff
или
Примерен код

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

ако напиша примерно 802::833 (или fff)

Та въпросите са ми следните:
1 - как точно се задава един филтърен номер така че да е валиден (явно не мога просто да напиша 2 3-цифрени числа)
2 - как така толкова филтри имат еднакви номера, въпреки че такава нагласа е невалидна за ядрото
3 - как мога да редактирам тези филтри след като толкова много са с еднакъв номер
4 - Има ли начин автоматично да получавам IP адресите които са в българският локал?

Ще очаквам с нетърпения всякакви полезни идеи :)


Титла: препълване на tc filter handle-id
Публикувано от: в Dec 11, 2004, 16:02
Цитат (saturn_vk @ Дек. 11 2004,16:40)

Здрасти !
А не е ли по-лесно да огледаш дали неполучаваш маркирани пакети (например от cisco-to на доставчика ти) и на база маркировка да ограничаваш външния трафик ?


Титла: препълване на tc filter handle-id
Публикувано от: saturn_vk в Dec 11, 2004, 17:12
не, предпочитам този метод, защото не ме привързва към определен доставчик или доставчици. Не е гарантирано че различни доставчици ще използват еднакви методи, което разваля много неща.


Титла: препълване на tc filter handle-id
Публикувано от: VladSun в Dec 14, 2004, 23:41
Цитат (Guest @ Дек. 11 2004,17:0)

Здрасти !
А не е ли по-лесно да огледаш дали неполучаваш маркирани пакети (например от cisco-to на доставчика ти) и на база маркировка да ограничаваш външния трафик ?

А на мен ми е интересно как ще шейпваш с htb, когато само download-а ти е маркиран... а download се шейпва като се ограничава upload-a, ако не се лъжа :)


Титла: препълване на tc filter handle-id
Публикувано от: VladSun в Dec 18, 2004, 12:55
Цитат (saturn_vk @ Дек. 11 2004,16:40)
Проблема идва от това че самото стартиране на оформящият скрипт отнема близо минута, при това само за 6 компютъра в мрежа, а за да прибавя друг трябва да го рестартирам целият (от събнет то компютър, и от компютър до събнет за всеки събнет и вътрешен компютър).

:)))))) Е сигурно ще е така . Ти при 100 РС-та ще имаш 100 000 правила ... Направи с iptables верига за БГ-то и верига за международния и след това работи в тези вериги с IP-тата на ПС-тата.