Eu fiz alguns erros na configuração. Aqui está a versão corrigida:
# Add disciplines for DL device
tc qdisc add dev $devDL root handle 1: htb default 12
# Add classes for DL device
tc class add dev $devDL parent 1: classid 1:1 htb rate $bwDL ceil $bwDL quantum $quantum
tc class add dev $devDL parent 1:1 classid 1:11 htb prio 1 rate $bwPrivateDL ceil $bwDL quantum $quantum
tc class add dev $devDL parent 1:1 classid 1:12 htb prio 2 rate $bwPublicDL ceil $bwPublicDL quantum $quantum
tc qdisc add dev $devDL parent 1:11 handle 11: sfq divisor $divisor perturb $perturb
tc qdisc add dev $devDL parent 1:12 handle 12: sfq divisor $divisor perturb $perturb
tc filter add dev $devDL protocol all prio 1 parent 11: handle 11 flow hash keys dst divisor $divisor baseclass 1:11
tc filter add dev $devDL protocol all prio 2 parent 12: handle 12 flow hash keys dst divisor $divisor baseclass 1:12
# Add filters for DL device
if [ -s $filePrivate ]; then
for ip in 'grep -v "#" $filePrivate'; do
if [ 'expr index $ip :' = 0 ]; then
tc filter add dev $devDL protocol all prio 1 parent 1: u32 match ip dst $ip flowid 1:11
else
echo $ip
tc filter add dev $devDL protocol all prio 1 parent 1: u32 match ip6 dst $ip flowid 1:11
fi
done
fi
tc filter add dev $devDL protocol all prio 2 parent 1: u32 match ip dst 0/0 flowid 1:12
tc filter add dev $devDL protocol all prio 2 parent 1: u32 match ip6 dst ::/0 flowid 1:12
O qdisc do SFQ DEVE ter um identificador, e o classificador externo do SFQ DEVE usar esse identificador para vinculá-lo. O Shaper agora funciona conforme necessário.