1
0
Fork 0
scripts-admin-quickndirty-p.../script_tc-limit-bandwith.sh

66 lines
2.1 KiB
Bash
Executable file

#!/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