<blockquote id="quote"><font size="1" id="quote"><b id="quote">цитат:</b id="quote"></font id="quote"><table border="0" id="quote"><tr id="quote"><td class="quote" id="quote"><font size="1" id="quote">...koito e izmislil i e pisal classifiers e bial riadko tupo parche. na vsichki gotini shaperi mojesh da pravish select po IP+MARK...
<div align="right">оргинално мнение на maddog</div id="right">
Въобще не съм съгласен. Не знам какви други шейпъри си ползвал, но ми се струва, че в случая ти е грешно понятието за MARK. Защото вероятно това, което се опитваш да направиш с IP+MARK, се прави с u32 classifier, а този MARK, който визираш, е само едно допълнение към стандартните шейпъри.
В случая рядко тъпото парче си ти не този дето е писал u32 filtera .
etg ти разбра ли какво се опитва да направи Мартин щото ако не си да разясня. Той в случая се опитва да раздели пееринга от външния трафик с маркировка и да комбинира двата филтера fw_mark i u32 за да ограничи едно ип на различна скорост. Това естествено не може да стане понеже принципа на класовете в cbq не го позволява.
Относно моя метод той наистина e супер селски позволява дори най-големия селянин да направи шейпър без дори да е чувал какво е това CBQ.[:D]
ok , blagodaria na vsichki koito naistina iavno razbirat dosta ot shapers !
Opredeleno shaperite koito az sum polzval edvali niakoi den shte gi polzvate
bazirani na suvsem razlichni algoritmi niamashti nishto obshto sus CBQ/HTB,SFQ i vsichki ot tozi clas na principa na TC !
Shaperite koito polzvam sa dalech po hubavi !
i imat funkciata koiato veche utochnih za MARK+SRC/DEST
Niama smisul da sporia sus vas. S ivan e bezmisleno da sporia poprincip a za drugite hora, prosto iskam da im blagodaria che mi kazaha che sus CBQ tova koeto iskam e nevuzmojno !
ОК, ако смяташ, че споровете са приключени, можем да продължим разговора по същество.
По принцип в общия случай за маркиран пакет се смята този, на който му е сетнат някой от битовете в Precedence Field (PF). В стандартните случаи (Cisco примерно) се ползва маркиране на битове 0-2 (precedence) и 3-7 (type of service - TOS). При такова маркиране нямаш никакъв проблем да правиш селектиране и в линукса с u32 classifier, като проверяваш за MARK+SRC+DST+каквото се сетиш. Ползвайки обаче iptables и след това fwmark ти маркираш пакетите по съвсем друг начин, който няма нищо общо с PF. Това маркиране е една добавка към стандартните инструменти за маркиране, и не променя нищо в самия пакет, а само в структурата в кернела, която се заделя за този пакет. Така че този FWMARK не е този MARK, който примерно Cisco имат предвид, това са две съвсем различни неща. И ако за момент "забравиш", че такова нещо като FWMARK съществува, получаваш стандартните инструменти за шейпване и селектиране, които вероятно си ползвал.
Така че в случая не си прав да наричаш тъпи хората, които не са ощетили с нищо функционалността, а просто са измислили един допълнителен инструмент - който иска, да го ползва, който не иска - да си ползва стандартните неща. Все едно да ми кажеш: "Почерпи ме една водка", аз понеже съм в настроение те черпя водка и кола, и ти ми казваш: "Е***и колко си тъп, аз ти исках водка, а не кола"
Значи аз искам да добавя нещо към отговора на Генчо.
fw_mark e възможно най точния класификатор който може да се използва в CBQ по простата причина, че с негова помощ пълната сила на iptables kaто класификатор на трафик може да баде употребена. Що се отнася до u32 филтера когато ползваш маркировка с iptables той практически става излишен.
Ok neka dopusnem che az si izmisliam za moite shaperi
ili ako iskate da dopusnem che te sa USER SPACE shapers !
Ne sa public available i ne rabotiat na tolkova nisko nivo kolkoto CBQ !
Respektivno ne sa i taka dobre optimizirani i po tochno tazi prichina mi se iskashe prosto da probvam CBQ-to.
Zashtoto to opredeleno e dosta po dobre optimizirano kato burzina na deistvie spriamo moite dosegashni shaperi. Sus garancia ne sum se oburkal i znam che sum polzval --set-mark 2 ( fw_mark ) + src/dst
I sega vse pak ivan znae kakvo tochno celia a niakoi moje da mi pomogne i d akaje kak tochno stava, mislia che shte e ot polza ne samo na mene a i na mnogo drugi hora koito shte iskat da napraviat sushtoto.
Ползваш си последните два бита на марка за тип на пакета (bg, int, local), като гледаш в нито един от трите варианта да не са и двата 0, поради bug в iptables (не съм чел да са го оправили, а и не съм се интересувал), пред-пред последния ти показва дали е incoming или outgoing, а останалите битове са специфични за всеки юзър. Пишеш си по едно CBQ правило за всеки марк (съвет - ползвай HTB...) и ако ти трябва някъде да match-ваш типа на пакета го правиш по нужната част от маркировката.
После пращаш тези със съответния марк в отделен chain. Във всеки chain имаш правило за всеки юзър, където ги маркираш отново, съответно със номер_на_юзъра*8+старата_марка (2,6, 3 или 7).
После можеш да си мачваш пакетите както по цялата марка - за tc, така и само по това дали е BG или INT. Примерно -m mark --mark 2/7, това ще са ти BG IN пакети, а пък --mark 2/3 трябва да match-не на всички български изобщо.
Edit: Първото маркиране е по-удобно да се прави преди denat-ването на пакетите, тоест в mangle PREROUTING. Второто трябва ЗАДЪЛЖИТЕЛНО да е след denat, тоест в mangle FORWARD.
При мене е така:
Chain FORWARD (policy ACCEPT)
target prot opt source destination
usr_b_i all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x6/0x7
usr_b_o all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x2/0x7
usr_i_i all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x7/0x7
usr_i_o all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x3/0x7