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