Le 20/09/2016, Frédéric a écrit :
> Hello,
>
> J'ai des soucis avec mon routeur, qui plante la connexion dès que
> j'utilise toute la bande passante (pendant un gros téléchargement).
>
> Du coup, je voudrais limiter la vitesse de download sur ma machine.
>
> Quelqu'un aurait-il un bout de script qui permet de faire ça simplement ?
> J'en ai trouvé sur le net, mais qui ne fonctionne pas :o(
Bon, j'ai finalement trouvé ; en fait, dans les codes que j'avais vu, il
fallait que ça se fasse sur un routeur (entrée par une interface, sortie
par une autre).
Si on veut le faire sur une machine en bout, il faut créer une interface
de type ifb (Intermediate Functional Block).
Ci-joint le code que j'ai écris, qui est une synthèse de plusieurs codes.
Si vous voyez des trucs louches, n'hésitez pas à commenter ; je ne
maîtrise pas tout, même si j'ai à peu près saisi ce que ça fait...
--------------------------------------------------------------------
#!/bin/bash
# Rates
UPLINK=1Mbps
DOWNLINK=1Mbps
# Interfaces
IFB=ifb0
DEV=eth0
start()
{
modprobe ifb
ip link set dev $IFB up
tc qdisc add dev $DEV ingress
tc filter add dev $DEV parent ffff: protocol ip u32 match ip \
dst 0/0 flowid 1:1 action mirred egress redirect dev $IFB
tc qdisc add dev $DEV root handle 1:0 htb default 1
tc class add dev $DEV parent 1:0 classid 1:1 htb rate ${UPLINK}
tc qdisc add dev $IFB root handle 1:0 htb default 1
tc class add dev $IFB parent 1:0 classid 1:1 htb rate ${DOWNLINK}
}
stop()
{
tc qdisc del dev $DEV root
tc qdisc del dev $DEV ingress
tc qdisc del dev $IFB root
rmmod ifb
}
case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo "Usage: speed_limit.sh {start|stop}"
;;
esac
exit 0
--
Frédéric