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:
parent
018f2d59c4
commit
28e574099e
1 changed files with 14 additions and 11 deletions
|
@ -536,10 +536,6 @@ class firewall_komaz(firewall_crans) :
|
|||
redirect_chain('mangle', prev_chain, next_chain, subnet)
|
||||
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
|
||||
for interface in [self.eth_ext, self.eth_int] :
|
||||
# On vide les classes et qdisc
|
||||
|
@ -549,11 +545,12 @@ class firewall_komaz(firewall_crans) :
|
|||
warn += str(c) + '\n'
|
||||
# On construit les classes et qdisc de base
|
||||
# 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: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)
|
||||
|
||||
adherents = db.search('paiement=ok')['adherent']
|
||||
self.anim = anim('\tGénération des classes de filtrage p2p', len(adherents))
|
||||
# On construit ensuite les classes et qdisc pour chaque adhérent
|
||||
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
|
||||
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 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))
|
||||
|
||||
# Classification des adhérents dans leur classe respective
|
||||
|
@ -644,7 +641,8 @@ class firewall_komaz(firewall_crans) :
|
|||
recherche = db.search('ip=%s'% ip)['machine']
|
||||
if not recherche :
|
||||
# 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])
|
||||
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
|
||||
|
@ -653,7 +651,8 @@ class firewall_komaz(firewall_crans) :
|
|||
class_id = mark.split(':')[1]
|
||||
elif len(recherche) == 1 :
|
||||
# Il faut ajouter cette entrée
|
||||
option = '-A'
|
||||
iptables_option = '-A'
|
||||
tc_option = 'add'
|
||||
machine = recherche[0]
|
||||
adherent = machine.proprietaire()
|
||||
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
|
||||
else :
|
||||
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))
|
||||
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))
|
||||
except IptablesError, c:
|
||||
warn += str(c) + '\n'
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue