Требования:
В каждой группе может быть произвольное количество пользователей. Пропускная способность для любой конкретной группы составляет 1000 кбит / с. Пропускная способность для каждого пользователя в группе составляет 70 кбит / с. В любое время ни один пользователь не должен использовать пропускную способность более 70 кбит / с. Я использую tc & iptables & ipset.
ipset -L slowips
Name: slowips
Type: hash:ip
Revision: 1
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 240
References: 3
Members:
172.16.79.3
172.16.79.4
IPTABLES:
iptables -t mangle -I POSTROUTING -m set --match-set slowips dst -j CLASSIFY --set-class 1:12
Мой сценарий для TC:
#!/bin/bash
tc qdisc del dev eth0 root
tc qdisc del dev eth1 root
tc qdisc add dev eth0 parent root handle 1: hfsc default 11
tc class add dev eth0 parent 1: classid 1:1 hfsc sc rate 1000kbps ul rate 1000kbps
tc class add dev eth0 parent 1:1 classid 1:11 hfsc sc rate 1000kbps ul rate 1000kbps
tc class add dev eth0 parent 1:1 classid 1:12 hfsc sc rate 70kbps ul rate 70kbps
tc qdisc add dev eth0 parent 1:11 handle 11:1 pfifo
tc qdisc add dev eth0 parent 1:12 handle 12:1 pfifo
При описанной выше настройке один пользователь получает полосу пропускания 70 кбит / с, когда другой пользователь входит в систему, пропускная способность 70 кбит / с делится между ними. На самом деле я хочу, чтобы только что вошедший пользователь получил пропускную способность 70 кбит / с, поскольку slab - 1000 кбит / с.