Concernant SFR WiFi : la configuration de la QoS hotspot est gérée par le script /etc/init.d/hotspot, dont voici la section qui opère le bridage de la bande passante (en firmware 3.4.4).
start() {
[...]
# Bandwidth limit
if [ "$(xpath '//qos/@enable')" = "true" ]; then
#
# Hotspot BW is (/autoconf/hotspot/bw_ratio) % of link rates.
# Ftth link rates are supposed Up=250000kbps, Down=500000kbps
# Hotspot BW ceils value are Up=400kbps, Down=8000kbps
#
if [ "$(status get net_data_access)" = "adsl" ]; then
local wan_upstream=$(dsl get adsl_rate_up)
local wan_downstream=$(dsl get adsl_rate_down)
else
local wan_upstream=250000
local wan_downstream=500000
fi
# get hotspot ratio
local bw_ratio="$(xpath '//bw_ratio')"
# upstream limit
local hotspot_bw_max_upstream=$(( 1200 * ${bw_ratio} / 100 ))
local hotspot_bw_upstream=$(( ${wan_upstream} * ${bw_ratio} / 100 ))
if [ "${hotspot_bw_upstream}" -gt "${hotspot_bw_max_upstream}" ]; then
local hotspot_bw_upstream=${hotspot_bw_max_upstream}
fi
${tc} qdisc add dev ${hotspot_ifname} handle ffff: ingress
${tc} filter add dev ${hotspot_ifname} parent ffff: protocol ip prio 50 \
u32 match ip src 0.0.0.0/0 police rate ${hotspot_bw_upstream}kbit burst 10k drop flowid :1
# downstream limit
local hotspot_bw_max_downstream=$(( 24000 * ${bw_ratio} / 100 ))
local hotspot_bw_downstream=$(( ${wan_downstream} * ${bw_ratio} / 100 ))
if [ "${hotspot_bw_downstream}" -gt "${hotspot_bw_max_downstream}" ]; then
local hotspot_bw_downstream=${hotspot_bw_max_downstream}
fi
if [ "$(nvram get qos_ifblan)" != "on" ]; then
${tc} qdisc add dev ${hotspot_ifname} root tbf rate ${hotspot_bw_downstream}kbit burst 50kb latency 10ms
else
[ "$(nvram get net_mode)" = "bridge" ] && mode="-bridge"
local topology_conf=/etc/config/topology${mode}.xml
[ -e ${topology_conf} ] || local topology_conf=/etc/default/topology${mode}.xml
local ifb=$(roxml -q ${topology_conf} '//@type=ifb/@ifname')
if [ "${wan_downstream}" -lt "1000" ]; then
local r2q=5
elif [ "${wan_downstream}" -gt "100000" ]; then
local r2q=100
elif [ "${wan_downstream}" -gt "50000" ]; then
local r2q=50
fi
[...]
}
Il est fait référence à une variable bw_ratio, qui est mise à 30 (à la fois dans la configuration par défaut et celle téléchargée par ma box). Il y a également une variable nommée bwrestrict mais celle-ci est récupérée uniquement par un binaire (/usr/bin/wrapper), je pense investiguer sur sa fonction plus tard.
<bwrestrict enable="true" up="320" down="1280"/>
<bw_ratio>30</bw_ratio>
À première vue en tous cas, le script semble donc limiter SFR WiFi sur ma ligne ADSL2+ bien capable à 7,2 Mb/s descendants et 360 Kb/s montants. Je ferai peut-être des tests empiriques tout à l'heure.
Le fonctionnement des autres hotspots FAI et notamment FreeWifi est sensiblement différent, il me semble que celui-ci applique un seuil de bande passante moins dur (à moins que ce soit l'inverse).