On passe le quantum 1500 pour tout le monde et donc le dbit garanti est

dfini  1500 pour tous en permanence.
Il est donc dsormais immdiatement possible d'ajouter ou supprimer une
classe bittorrent  un adhrent

darcs-hash:20060507194519-72cb0-c97a37acdf4b942079400a89cc302ebc82128b54.gz
This commit is contained in:
salles 2006-05-07 21:45:19 +02:00
parent 018f2d59c4
commit 28e574099e

View file

@ -536,10 +536,6 @@ class firewall_komaz(firewall_crans) :
redirect_chain('mangle', prev_chain, next_chain, subnet) redirect_chain('mangle', prev_chain, next_chain, subnet)
print OK print OK
adherents = db.search('paiement=ok')['adherent']
# On calcule le débit garanti pour un adhérent
debit_adh = p2p.debit_max/(len(adherents)+1)
# Création des classes et qdisc # Création des classes et qdisc
for interface in [self.eth_ext, self.eth_int] : for interface in [self.eth_ext, self.eth_int] :
# On vide les classes et qdisc # On vide les classes et qdisc
@ -549,11 +545,12 @@ class firewall_komaz(firewall_crans) :
warn += str(c) + '\n' warn += str(c) + '\n'
# On construit les classes et qdisc de base # On construit les classes et qdisc de base
# La partie principale qui définit le comportement par défaut # La partie principale qui définit le comportement par défaut
tc("qdisc add dev %s root handle 1: htb" % interface) tc("qdisc add dev %s root handle 1: htb r2q 1" % interface)
tc("class add dev %s parent 1: classid 1:1 htb rate %s ceil %s" % (interface, p2p.debit_max, p2p.debit_max)) tc("class add dev %s parent 1: classid 1:1 htb rate %s ceil %s" % (interface, p2p.debit_max, p2p.debit_max))
tc("class add dev %s parent 1:1 classid 1:9998 htb rate %s ceil %s" % (interface, debit_adh, debit_adh)) tc("class add dev %s parent 1:1 classid 1:9998 htb rate %s ceil %s" % (interface, p2p.debit_adh, p2p.debit_adh))
tc("qdisc add dev %s parent 1:9998 handle 9999: sfq perturb 10" % interface) tc("qdisc add dev %s parent 1:9998 handle 9999: sfq perturb 10" % interface)
adherents = db.search('paiement=ok')['adherent']
self.anim = anim('\tGénération des classes de filtrage p2p', len(adherents)) self.anim = anim('\tGénération des classes de filtrage p2p', len(adherents))
# On construit ensuite les classes et qdisc pour chaque adhérent # On construit ensuite les classes et qdisc pour chaque adhérent
for adherent in adherents : for adherent in adherents :
@ -561,7 +558,7 @@ class firewall_komaz(firewall_crans) :
class_id = int(adherent.id())+1 # On ne peut pas reprendre le numéro 1 class_id = int(adherent.id())+1 # On ne peut pas reprendre le numéro 1
qdisc_id = class_id+5000 # Il nous faut un n° inférieur à 9998 unique qdisc_id = class_id+5000 # Il nous faut un n° inférieur à 9998 unique
for interface in [self.eth_ext, self.eth_int] : for interface in [self.eth_ext, self.eth_int] :
tc("class add dev %s parent 1:1 classid 1:%d htb rate %s ceil %s" % (interface, class_id, debit_adh, p2p.debit_max)) tc("class add dev %s parent 1:1 classid 1:%d htb rate %s ceil %s" % (interface, class_id, p2p.debit_adh, p2p.debit_max))
tc("qdisc add dev %s parent 1:%d handle %d: sfq perturb 10" % (interface, class_id, qdisc_id)) tc("qdisc add dev %s parent 1:%d handle %d: sfq perturb 10" % (interface, class_id, qdisc_id))
# Classification des adhérents dans leur classe respective # Classification des adhérents dans leur classe respective
@ -644,7 +641,8 @@ class firewall_komaz(firewall_crans) :
recherche = db.search('ip=%s'% ip)['machine'] recherche = db.search('ip=%s'% ip)['machine']
if not recherche : if not recherche :
# Il faut supprimer cette entrée # Il faut supprimer cette entrée
option = '-D' iptables_option = '-D'
tc_option = 'del'
subnet = IpSubnet(ip, conf_fw.mask[len(conf_fw.mask)-1]) subnet = IpSubnet(ip, conf_fw.mask[len(conf_fw.mask)-1])
regles = iptables("-t mangle -L SUBNET-%s -n | grep %s" % (subnet, ip)).split('\n') regles = iptables("-t mangle -L SUBNET-%s -n | grep %s" % (subnet, ip)).split('\n')
# On sélectionne la première qui doit contenir ce que l'on veut # On sélectionne la première qui doit contenir ce que l'on veut
@ -653,7 +651,8 @@ class firewall_komaz(firewall_crans) :
class_id = mark.split(':')[1] class_id = mark.split(':')[1]
elif len(recherche) == 1 : elif len(recherche) == 1 :
# Il faut ajouter cette entrée # Il faut ajouter cette entrée
option = '-A' iptables_option = '-A'
tc_option = 'add'
machine = recherche[0] machine = recherche[0]
adherent = machine.proprietaire() adherent = machine.proprietaire()
ip = machine.ip() ip = machine.ip()
@ -661,9 +660,13 @@ class firewall_komaz(firewall_crans) :
class_id = int(adherent.id())+1 # On ne peut pas reprendre le numéro 1 class_id = int(adherent.id())+1 # On ne peut pas reprendre le numéro 1
else : else :
warn += "Plusieurs machines avec l'IP %s\n" % ip warn += "Plusieurs machines avec l'IP %s\n" % ip
iptables("-t mangle %s SUBNET-%s -o crans -d %s -m mark " % (option, subnet, ip) + qdisc_id = class_id+5000 # Il nous faut un n° inférieur à 9998 unique
for interface in [self.eth_ext, self.eth_int] :
tc("class add %s %s parent 1:1 classid 1:%d htb rate %s ceil %s" % (tc_option, interface, class_id, p2p.debit_adh, p2p.debit_max))
tc("qdisc add %s %s parent 1:%d handle %d: sfq perturb 10" % (tc_option, interface, class_id, qdisc_id))
iptables("-t mangle %s SUBNET-%s -o crans -d %s -m mark " % (iptables_option, subnet, ip) +
"--mark %s -j CLASSIFY --set-class 1:%s" % (conf_fw.mark['bittorrent'], class_id)) "--mark %s -j CLASSIFY --set-class 1:%s" % (conf_fw.mark['bittorrent'], class_id))
iptables("-t mangle %s SUBNET-%s -o ens -s %s -m mark " % (option, subnet, ip) + iptables("-t mangle %s SUBNET-%s -o ens -s %s -m mark " % (iptables_option, subnet, ip) +
"--mark %s -j CLASSIFY --set-class 1:%s" % (conf_fw.mark['bittorrent'], class_id)) "--mark %s -j CLASSIFY --set-class 1:%s" % (conf_fw.mark['bittorrent'], class_id))
except IptablesError, c: except IptablesError, c:
warn += str(c) + '\n' warn += str(c) + '\n'