Очередной раз хочу поднять эту тему, так как вразумительного решения так и не нашел (по форуму искал, нашел тока обсуждения, но не решение)
Есть сервер pptp под linux. eth0 смотрит во внутреннюю стеку, eth1 на канал провайдера. У всех клиентов разная скорость, и при подключении pppd запускает скрипт который выставляет эту скорость.
Сейчас это делается таким скриптом:
#!/bin/sh
DOWNLINK=$1
UPLINK=$2
IFNAME=$3
/sbin/tc qdisc del dev $IFNAME root > /dev/null
/sbin/tc qdisc del dev $IFNAME ingress > /dev/null
###### uplink
# install root HTB, point default traffic to 1:20:
/sbin/tc qdisc add dev $IFNAME root handle 1: htb default 20 r2q 1
/sbin/tc class add dev $IFNAME parent 1: classid 1:1 htb rate ${UPLINK}kbit burst 4k
/sbin/tc class add dev $IFNAME parent 1:1 classid 1:10 htb rate ${UPLINK}kbit burst 4k prio 1
/sbin/tc class add dev $IFNAME parent 1:1 classid 1:20 htb rate ${UPLINK}kbit burst 4k prio 2
/sbin/tc qdisc add dev $IFNAME parent 1:10 handle 10: sfq perturb 10 quantum 1500
/sbin/tc qdisc add dev $IFNAME parent 1:20 handle 20: sfq perturb 10 quantum 1500
/sbin/tc filter add dev $IFNAME parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:10
/sbin/tc filter add dev $IFNAME parent 1:0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:10
/sbin/tc filter add dev $IFNAME parent 1: protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10
########## downlink #############
/sbin/tc qdisc add dev $IFNAME handle ffff: ingress
/sbin/tc filter add dev $IFNAME parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${DOWNLINK}kbit burst 12k drop flowid :1
Но ingress дает довольно нестабильную, скачкообразную скорость, да и хотелось бы приоритезацию как и на уходящий клиенту трафик. Понятно что для этого нужно шейпить на интерфейсе eth1, который уходит в инет, так как трафик от клиентов на нем будет уходящим. Но как динамически создавать классы и очереди htb просто абсолютно не ясно... Поделитесь опытом, если кто смог решить.