Hi, es geht um traffic-shaping, tc-htb. Wollte mein Skriptlein (was auf der SuSE-Firewall HTB Geschichte basiert) erweitern, damit TOS "MinCost" auch in der low-prio queue landet. Dachte, ich füge da mal einen Filter ein. Hab's mit google aber nicht hinbekommen. Die man page tc-filters gibts anscheinend immer noch nicht :) Ohh, und sorry für diese unübersichtliche Mail. Ist doch ganz schön viel Kommando-Kram durcheinander. Hatte keine Idee, wie man es besser schreiben könnte. Ich rücke Scriptkram daher 4 Zeichen ein. Da ich damals schon mangels tc-filter Kenntnissen folgenden Workaround gemacht hab: $TC filter add dev $DEV parent 1:0 prio 3 protocol ip \ handle 47 fw flowid 1:47 :-) hab ich jetzt # TOS "mincost" is also considered low priority (to be used with dynamic # port tools) $IPTABLES -A POSTROUTING -t mangle -o $DEV \ -m tos --tos Minimize-Cost \ -j MARK --set-mark 47 hinzugefügt. Im Internet fand ich ähnliche Beispiele, aber in verschiedenen Varianten. Ist das oben richtig so? Wie schreibt man das als Filter? Sowas wie: # This is wrong: $TC filter add dev $DEV parent 1:0 prio 3 protocol ip match u32 ip \ tos $TOS \ 0xff flowid 1:10 Im Internet-Beispiel war u32 evtl. woanders dran. Was macht das? Gibt es sowas an wie "32 byte angucken" oder so? Wo find ich eigentlich den Wert von $TOS? 0x10 ist min-delay, gibts in allen Beispielen :) Raten (mit google-Einsatz) würde ich MinCost == 0x80, stimmt das? iptables scheint "TOS match 0x02 MARK set 0x2f" (0x2f == 47) zu setzen, aber auf der Regel hab ich keine Treffer (null traffic). Fragt sich, ob rTorrent TOS vielleicht nicht setzt? rTorrent scheint ja auch die port_range nicht einzuhalten. Das haut eh nicht hin, der Port, den es mir anzeigt, ist laut "netstat -np --inet|grep ..." nicht da, dafür viele andere. Am Ende ist mein Problem, dass Klasse 1:20 zu viele Packete kriegt und das die TOS Regel anscheinend nie trifft. So. Jetzt noch gaaaaaaaanz viele Fragen :) 1) "prio" Da hab ich sowas wie "$TC filter add dev $DEV parent 1:0 prio 3 ...." prio 3 hat nicht nur der Filter, sondern auch die Klasse: #add a low priority queue $TC class add dev $DEV parent 1:1 classid 1:47 htb \ rate 10kbit ceil 125kbit prio 3 Die anderen Klassen (von SuSE) haben 0, 1 und 2; das kommt von SuSEfirewall2. Kommt aus /etc/sysconfig/scripts/SuSEfirewall2-qdisc Das Script vergibt wohl prio 0 für hoch (ACKs, ...) und 2 für "den Rest". 1 ist dazwischen und für VPN. Ist das nicht falsch? Ist nicht 2 hohe Prio und 0 niedrigere? Dann wäre meine 3 ja noch falscher. Aber ich bin mir ziemlich sicher, damals Effekte getestet zu haben (auch SSH delay optimisation und ACK prioritising). Kann doch also nicht falsch sein, oder hab ich falsch getestet?! Oder hab ich die Doku falsch verstanden? 1b) Prio von Klassen und Regeln Ich verstehe (glaub ich), warum Klassen prio haben. Klar, Packete dieser Klassen haben halt Priorität oder nicht vor Packeten anderer Klassen (mit dessen Prio). Warum haben Filter Regeln Prioritäten? Gelten die innerhalb der Klassen oder "global"? Also, wenn ich ein Paket über eine prio 1 filter regel in Klasse 1:47 packe, und Klasse 1:47 prio 3 hat und "rate voll ist", wird dann das Paket gedroppt, wenn Klasse 1:20 mit prio 2 (default Klasse ist ohne Regeln) etwas hat? Oder wird das Paket vorgezogen? (hier angenommen, prio 1 wäre höher als prio 2) 2) SuSE Klasse 1:20 Die Idee ist, dass es für diese Default-Klasse keine filter-regel gibt, ja? Ich hab jedenfalls keine. 3) SuSE Klasse 1:10 Laut Script # class for small tcp packets 1:10 sollte also hohe prio haben, was auch immer das nu numerisch heisst. Dafür gibts den filter: filter parent 1: protocol ip pref 49152 fw handle 0xa classid 1:10 ist "pref" hier == prio? Die komische Zahl ist 0xc000, wo kommt die her? Find die nicht. Laut Script müsste das # packets, marked with "10" to queue 1:10 $TC filter add dev $DEV parent 1:0 prio 0 protocol ip \ handle 10 fw flowid 1:10 sein. Aber da steht ja prio 0. Was ist pref? Ist prio 0 hier das höchste? oder ist das tatsächlich falsch? 4) Klasse 1:11 Hier passt meine Vermutung mit prio = pref zufällig (class htb 1:11 parent 1:1 prio 1) # packets, marked with "11" to queue 1:11 $TC filter add dev $DEV parent 1:0 prio 1 protocol ip \ handle 11 fw flowid 1:11 filter parent 1: protocol ip pref 1 fw filter parent 1: protocol ip pref 1 fw handle 0xb classid 1:11 Warum wird "protocol ip pref 1 fw" ausgegeben? Es gibt doch nur eine Filterregel, warum werden zwei (oder anderthalb) angezeigt? Ja, und jetzt zu meiner Klasse 1:47: 5) Klasse 1:47 :-) Die soll niedriger als alle anderen sein, bis auf ein bisschen (10 kbit oder so) nur Überkapazitäten verwenden. #add a low priority queue $TC class add dev $DEV parent 1:1 classid 1:47 htb \ rate 10kbit ceil 125kbit prio 3 # packets, marked with "47" to queue 1:47 $TC filter add dev $DEV parent 1:0 prio 3 protocol ip \ handle 47 fw flowid 1:47 Tja, da ist wieder mein prio Problem :) Wie ja oben geschrieben, mach ich mit "-j MARK --set-mark 47" Pakete da rein, weil ich die filter nicht hinkriege. Die können aber auch per Port etc. Gut, mit probieren würd ich vielleicht was zusammenraten, aber komischerweise machen die meisten Beispiele im Internet genau diesen Workaround auch (filter ... handle xxx und --set-mark xxx). Müsste doch mindestens performance kosten, oder ist das egal und macht keinen Unterschied? 6) Klassen-Statistiken Mach ich mit tc -s class show dev dsl0 und da hat Klasse 1:20 ("Rest") ca. doppelt so viele Packet wie 1:47 ("low"), obwohl im Testzeitraum nur "low" Pakete geschickt werden sollten. Oder zählen "verborgte" Packete/Bandbreite etwa mit? Für ein paar Antworten auf hier gestellte Fragen (und hier nicht gestellte, die ich hätte stellen sollen) wäre ich dankbar :) oki, Steffen -- Dieses Schreiben wurde maschinell erstellt, es trägt daher weder Unterschrift noch Siegel. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org