I'm trying to prioritize traffic over the Linux-based software bridge in my network. When I generate traffic locally (on the machine hosting the bridge), the traffic is correctly prioritized. However, the "remote" traffic (from other nodes passing through the bridge) is not prioritized (same bandwidth distribution to all senders). Maybe someone knows why?
Bridge is set up as follows for the I350 network adapter (Linux 5.1.8-1-MANJARO #1 SMP PREEMPT Sun Jun 9 20:44:14 UTC 2019 x86_64 GNU/Linux):
brctl addbr br0 ip link set dev enp1s0f0 promisc on ip link set dev enp1s0f1 promisc on ip link set dev enp1s0f2 promisc on ip link set dev enp1s0f3 promisc on brctl addif br0 enp1s0f0 brctl addif br0 enp1s0f1 brctl addif br0 enp1s0f2 brctl addif br0 enp1s0f3 ip link set dev br0 up tc qdisc del dev enp1s0f0 root tc qdisc add dev enp1s0f0 root prio tc qdisc del dev enp1s0f1 root tc qdisc add dev enp1s0f1 root prio tc qdisc del dev enp1s0f2 root tc qdisc add dev enp1s0f2 root prio tc qdisc del dev enp1s0f3 root tc qdisc add dev enp1s0f3 root prio ip addr add 192.168.1.1/24 dev br0 UDP traffic is generated with iperf3 and by setting the TOS field appropriately e.g.
Low-Prio Sender: iperf3 -c 192.168.1.140 -u -b 100m -S 0x2 -p 5201 -t 30 Hi-Prio Sender : iperf3 -c 192.168.1.140 -u -b 100m -S 0x0 -p 5202 -t 30 Prio map is left with default settings: priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Prioritization works for remote traffic if I explicitly classify the traffic:
tc filter add dev enp1s0f1 parent 1: protocol ip prio 10 u32 match ip dst 192.168.1.140 match ip dport 5201 0xffff flowid 1:1 tc filter add dev enp1s0f1 parent 1: protocol ip prio 20 u32 match ip dst 192.168.1.140 match ip dport 5202 0xffff flowid 1:2 but not with default settings.... Maybe it is a Layer 2/ Layer 3 issue?
tcpdumpand checkToS/DSCPvalues in packet headers. And you should attachprioqdisc to the bridge ports too.tcpdumpshows correctToS/DSCPvalues, addingprioqdisc to the bridge didn't change anything.tc -s -s -d q ls dev <iface>andtc -s -s -d c ls dev <iface>andtc -s -s -d -p f ls dev <iface>for every interface (br0and everyenp1s0f*).