В опитите си да направя 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 адресите които са в българският локал?
Ще очаквам с нетърпения всякакви полезни идеи '>