66 lines
2.1 KiB
Bash
66 lines
2.1 KiB
Bash
|
#!/bin/sh
|
||
|
|
||
|
#
|
||
|
# Petit script de limitation de bande passante fait
|
||
|
# pour des tests pour un projet humanitaire.
|
||
|
#
|
||
|
# L'autre solution est d'utiliser le module mod-bw
|
||
|
# d'Apache avec la configuration suivante :
|
||
|
# # Limitation de bande passante
|
||
|
# BandWidthModule On
|
||
|
# ForceBandWidthModule On
|
||
|
# BandWidth all 7168
|
||
|
#
|
||
|
|
||
|
# TODO: retrouver et citer la source de ce script :-/
|
||
|
|
||
|
#
|
||
|
# Outgoing traffic control
|
||
|
#
|
||
|
DEV=eth0
|
||
|
|
||
|
set -e
|
||
|
|
||
|
# Grosse purge
|
||
|
tc qdisc del dev $DEV root || true
|
||
|
tc qdisc del dev $DEV ingress || true
|
||
|
|
||
|
# ** Sortie **
|
||
|
# Attachement de l'algo HTB à l'interface réseau
|
||
|
# + pointage par défaut vers la classe fille 1:10
|
||
|
tc qdisc add dev $DEV root handle 1: htb default 10
|
||
|
|
||
|
# Création d'une classe racine contenant la totalité de la capacité réseau
|
||
|
# à partager entre les classes filles.
|
||
|
# Note : on crée une root puis des filles car une classe fille peut emprunter
|
||
|
# du trafic aux autres classes filles de la même racine, mais une racine
|
||
|
# ne peut pas aller piocher ailleurs.
|
||
|
# Note 2 : on spécifie un burst au moins égal au max des filles (à creuser
|
||
|
# si la réactivité est un souci)
|
||
|
tc class add dev $DEV parent 1: classid 1:1 htb rate 100mbit burst 15k
|
||
|
|
||
|
# Création des classes filles
|
||
|
tc class add dev $DEV parent 1:1 classid 1:10 htb rate 80mbit ceil 90mbit burst 15k
|
||
|
tc class add dev $DEV parent 1:1 classid 1:20 htb rate 100kbit ceil 200kbit burst 5k
|
||
|
|
||
|
# Une petite couche de renouvellement de la répartition en plus (Stochastic Fairness Queueing)
|
||
|
tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
|
||
|
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
|
||
|
|
||
|
# Ici, on filtre selon les critères souhaités pour classer le flux dans
|
||
|
# une des classes filles précédentes.
|
||
|
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip sport 80 0xffff flowid 1:20
|
||
|
|
||
|
|
||
|
# ** Entrée **
|
||
|
# Petit essai pour trafic entrant. À développer
|
||
|
tc qdisc add dev $DEV handle ffff: ingress
|
||
|
tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 56kbit burst 5k drop flowid :1
|
||
|
|
||
|
|
||
|
# Petit résumé
|
||
|
echo;echo "tc configuration for $DEV:"
|
||
|
tc qdisc show dev $DEV
|
||
|
tc class show dev $DEV
|
||
|
tc filter show dev $DEV
|