tc am Brückenhafen

8

Ich habe eine 4-Port-Brücke:

root@Linux-Switch:~# brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.000024cd2cb0   no      eth0
                            eth1
                            eth2
                            eth3

Mein Ziel ist es, die Upload-Geschwindigkeit der eth2-Schnittstelle zu begrenzen. (eth0 ist die Uplink-Schnittstelle zum Upstream-Switch). Ich habe versucht, dies über tc und iptables zu tun.

# tried in both the filter table and mangle table
iptables -A FORWARD -t mangle -m physdev --physdev-in eth2 -j MARK --set-mark 5 

tc qdisc add dev eth0 root handle 1:0 htb default 2
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 1mbit ceil 1mbit
tc class add dev eth0 parent 1:0 classid 1:2 htb rate 5mbit ceil 5mbit
tc filter add dev eth0 parent 1:0 handle 5 fw flowid 1:1

Ich kann sehen, dass die iptablesRegel übereinstimmt.

root@Linux-Switch:~# iptables -vL -t mangle
...

Chain FORWARD (policy ACCEPT 107K packets, 96M bytes)
 pkts bytes target     prot opt in     out     source   destination         
38269   11M MARK       all  --  any    any     anywhere anywhere     PHYSDEV match --physdev-in eth2 MARK set 0x5 

...
root@Linux-Switch:~# 

Die tc-Konfiguration liest jedoch nicht die fw-Markierung. Der gesamte Datenverkehr in Port eth2 ist auf die Standardeinstellung von 5 MB beschränkt, nicht auf die 1 MB, die ich konfigurieren möchte.

root@Linux-Switch:~# tc -s class show dev eth0
class htb 1:1 root prio 0 rate 1000Kbit ceil 1000Kbit burst 100Kb cburst 100Kb 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 rate 0bit 0pps backlog 0b 0p requeues 0 
 lended: 0 borrowed: 0 giants: 0
 tokens: 200000 ctokens: 200000

class htb 1:2 root prio 0 rate 5000Kbit ceil 5000Kbit burst 100Kb cburst 100Kb 
 Sent 11465766 bytes 39161 pkt (dropped 0, overlimits 0 requeues 0) 
 rate 6744bit 3pps backlog 0b 0p requeues 0 
 lended: 39161 borrowed: 0 giants: 0
 tokens: 2454400 ctokens: 2454400

root@Linux-Switch:~# 

Was mache ich falsch?

tMC
quelle
Stimmt es überein, wenn Sie es br0stattdessen hinzufügen ? Geben Sie den Filter auch explizit als 0x5 anstelle von nur 5 in der Befehlszeile an (sowohl für tc als auch für iptables).
Frostschutz

Antworten:

4

Ich habe es herausgefunden - ich musste ein 'Protokoll' im Filter angeben. Ich konnte viel Dokumentation dazu finden - alle Beispiele, die ich finden konnte, spezifizierten das Protokoll als 'ip', aber da dies ein Schalter war, dachte ich, ich würde 'alles' versuchen und es funktionierte!

tc qdisc add dev eth0 root handle 1:0 htb default 2
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 1mbit ceil 1mbit
tc class add dev eth0 parent 1:0 classid 1:2 htb rate 5mbit ceil 5mbit
tc filter add dev eth0 parent 1:0 handle protocol all 5 fw flowid 1:1
tMC
quelle