utilisation de radius pour configurer les switchs en live
Maintenant radius dit aux switchs quel vlan mettre en non taggé. Ça permet de switcher facilement sur le bon vlan suivant le type de compte et ça évite la désynchronisation de la configuration des switchs. darcs-hash:20080904041337-af139-665172ad09d19f439c6aa8ee6c529752c0e80d95.gz
This commit is contained in:
parent
e209f42707
commit
4fd3644f97
4 changed files with 90 additions and 79 deletions
|
@ -23,6 +23,7 @@ from annuaires import chbre_prises, uplink_prises, reverse, bat_manuels, all_swi
|
|||
from random import shuffle
|
||||
from gen_confs import *
|
||||
from time import localtime
|
||||
import config
|
||||
|
||||
from annuaires import bat_switchs
|
||||
|
||||
|
@ -57,31 +58,36 @@ logging 10.231.136.7
|
|||
%(INTERFACES_CONF)s
|
||||
;-------------------------------------------------------- IP du switch
|
||||
ip default-gateway 10.231.136.4
|
||||
vlan 1
|
||||
vlan %(vlan_adherent)s
|
||||
name "DEFAULT_VLAN"
|
||||
%(prises_default)s
|
||||
untagged %(prises_default)s
|
||||
no ip address
|
||||
ip igmp
|
||||
no ip igmp querier
|
||||
exit
|
||||
vlan 2
|
||||
vlan %(vlan_adm)s
|
||||
name "Adm"
|
||||
%(prises_adm)s
|
||||
%(prises_adm)s
|
||||
ip address %(ip)s 255.255.255.0
|
||||
exit
|
||||
vlan 3
|
||||
vlan %(vlan_wifi)s
|
||||
name "Wifi"
|
||||
%(prises_wifi)s
|
||||
no ip address
|
||||
exit
|
||||
vlan 4
|
||||
vlan %(vlan_hotspot)s
|
||||
name "Hotspot"
|
||||
%(prises_hotspot)s
|
||||
no ip address
|
||||
exit
|
||||
vlan 6
|
||||
vlan %(vlan_radin)s
|
||||
name "Radin"
|
||||
%(prises_radin)
|
||||
tagged %(prises_default)s
|
||||
no ip address
|
||||
exit
|
||||
vlan %(vlan_accueil)s
|
||||
name "Accueil"
|
||||
tagged %(prises_default)s
|
||||
no ip address
|
||||
exit
|
||||
;------------------------------------------------------- Accès d'administration
|
||||
|
@ -116,7 +122,7 @@ no cdp run
|
|||
no stack
|
||||
"""
|
||||
|
||||
interface_template = """interface %(prise)i%(etat)s
|
||||
interface_template = """interface %(prise)i enable
|
||||
name "%(nom)s"
|
||||
flow-control%(speed)s
|
||||
no lacp
|
||||
|
@ -283,8 +289,10 @@ exit
|
|||
vlans = { 'wifi_tagged' : [] , 'wifi_untagged' : [] ,
|
||||
'hotspot_tagged' : [], 'hotspot_untagged' : [],
|
||||
'adm_tagged' : [] , 'adm_untagged' : [] ,
|
||||
'default_tagged' : [] , 'default_untagged' : [],
|
||||
'radin_tagged' : [], 'radin_untagged' : [] }
|
||||
|
||||
# VLans pour le reste: le vlan des adhérents, des
|
||||
# inconnus et de ceux qui ne paie pas
|
||||
'default' : [] }
|
||||
|
||||
# Génération de la conf de chaque prise
|
||||
for prise in range(1,nb_prises+1):
|
||||
|
@ -299,11 +307,10 @@ exit
|
|||
### Prise d'uplink
|
||||
prise_params['nom'] = uplink_prises[bat][int(annu_prise)]
|
||||
params['uplinks'].append(prise)
|
||||
vlans['default_untagged'].append(prise)
|
||||
vlans['default'].append(prise)
|
||||
vlans['adm_tagged'].append(prise)
|
||||
vlans['wifi_tagged'].append(prise)
|
||||
vlans['hotspot_tagged'].append(prise)
|
||||
vlans['radin_tagged'].append(prise)
|
||||
params['INTERFACES_CONF'] += self.interface_template % prise_params
|
||||
continue
|
||||
|
||||
|
@ -329,7 +336,7 @@ exit
|
|||
if len(chbres) > 1 : prise_params['nom'] += 's'
|
||||
for chbre in chbres :
|
||||
prise_params['nom'] += '_%s%s' % (bat.upper(), chbre)
|
||||
vlans['default_untagged'].append(prise)
|
||||
vlans['default'].append(prise)
|
||||
else :
|
||||
prise_params['nom'] = "Wifi"
|
||||
vlans['hotspot_tagged'].append(prise)
|
||||
|
@ -344,58 +351,36 @@ exit
|
|||
else :
|
||||
# Tous les vlans
|
||||
prise_params['nom'] = "Prise_crans"
|
||||
vlans['default_untagged'].append(prise)
|
||||
vlans['default'].append(prise)
|
||||
vlans['adm_tagged'].append(prise)
|
||||
vlans['wifi_tagged'].append(prise)
|
||||
vlans['hotspot_tagged'].append(prise)
|
||||
vlans['radin_tagged'].append(prise)
|
||||
|
||||
params['INTERFACES_CONF'] += self.interface_template % prise_params
|
||||
continue
|
||||
|
||||
# A quelle chambre correspond la prise ?
|
||||
if prise_chbres.has_key(annu_prise) :
|
||||
chbres = prise_chbres[annu_prise]
|
||||
elif prise_chbres.has_key(annu_prise+'-') :
|
||||
# Prise en 10
|
||||
prise_params['speed'] = '\n speed-duplex auto-10'
|
||||
chbres = prise_chbres[annu_prise+'-']
|
||||
else :
|
||||
# Prise non référencée dans l'annuaire
|
||||
prise_params['nom'] = "Pas_dans_l'annuaire"
|
||||
prise_params['etat']='\n disable'
|
||||
params['INTERFACES_CONF'] += self.interface_template % prise_params
|
||||
continue
|
||||
|
||||
|
||||
# Quelle(s) chambre(s) est/sont sur la prise. A cause du
|
||||
# cas PDJ il peux y avoir des prises avec plusieurs
|
||||
# chambres.
|
||||
chbres = prise_chbres.get(annu_prise, [])
|
||||
|
||||
# "unauth-vid" est le vlan sur lequel sont envoyé les
|
||||
# inconnus, qui est le vlan d'accueil
|
||||
params['INTERFACES_CONF'] += """aaa port-access mac-based %(prise)s
|
||||
aaa port-access mac-based %(prise)s addr-limit %(nbmac)s
|
||||
aaa port-access mac-based %(prise)s logoff-period 3600
|
||||
aaa port-access mac-based %(prise)s unauth-vid 7
|
||||
""" % { 'nbmac': 1+2*len(chbres), 'prise': prise }
|
||||
|
||||
## Configuration de la prise adhérent
|
||||
# Nom
|
||||
prise_params['nom'] = 'Chambre'
|
||||
if len(chbres) > 1 : prise_params['nom'] += 's'
|
||||
for chbre in chbres :
|
||||
prise_params['nom'] += '_%s%s' % (bat.upper(), chbre)
|
||||
|
||||
# Besoin d'activer la prise ?
|
||||
prise_params['etat']='\n disable'
|
||||
for chbre in chbres :
|
||||
res = self.db.search('chbre=%s%s' % (bat.upper(), chbre) )
|
||||
quelqu_un_a_paye = False
|
||||
for res in res['adherent'] + res['club'] :
|
||||
if res.adherentPayant() :
|
||||
quelqu_un_a_paye = True
|
||||
if 'bloq' not in res.blacklist_actif() :
|
||||
prise_params['etat']=''
|
||||
break
|
||||
if quelqu_un_a_paye :
|
||||
# Si quelqu'un a payé on lui met le vlan default
|
||||
vlans['default_untagged'].append(prise)
|
||||
else :
|
||||
# Sinon tout le monde reste sur le vlan radin
|
||||
vlans['radin_untagged'].append(prise)
|
||||
# On donne à la prise un nom qui dépend des chambres
|
||||
# connectés dessus
|
||||
if chbres :
|
||||
prise_params['nom'] = 'Chambre'
|
||||
if len(chbres) > 1 : prise_params['nom'] += 's'
|
||||
for chbre in chbres :
|
||||
prise_params['nom'] += '_%s%s' % (bat.upper(), chbre)
|
||||
else :
|
||||
prise_params['nom'] = 'Inconnu'
|
||||
|
||||
params['INTERFACES_CONF'] += self.interface_template % prise_params
|
||||
|
||||
|
@ -442,15 +427,18 @@ aaa port-access mac-based %(prise)s logoff-period 3600
|
|||
for key, prises in vlans.items() :
|
||||
vlans[key]=mk_list(prises)
|
||||
|
||||
# Config des vlan
|
||||
for v in ('default', 'adm', 'wifi', 'hotspot', 'radin') :
|
||||
# Config des vlans spéciaux (adm et wifi)
|
||||
for v in ('adm', 'wifi', 'hotspot') :
|
||||
params['prises_%s' % v] = ''
|
||||
for t in ('tagged' , 'untagged') :
|
||||
if vlans['%s_%s' % (v,t)] :
|
||||
params['prises_%s' % v] += '\n %s %s' % (t, vlans['%s_%s' % (v,t)])
|
||||
# Saut de ligne parasite
|
||||
params['prises_%s' % v] = params['prises_%s' % v][4:]
|
||||
|
||||
|
||||
for name, number in config.vlans:
|
||||
params["vlan_%s" % name] = number
|
||||
|
||||
# Ecriture
|
||||
fd = self._open_conf(self.CONF_REP + switch + '.conf')
|
||||
fd.write(self.config % params)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue