[global/rid] J'ai essayé de mettre en place une bijection realm <-> NETs <-> rid

* Les rid sont maintenant des listes de tuples.
 * Il faut utiliser crans_utils.find_rid_plage, et crans_utils.find_ipv4_plage
 qui renvoient le realm d'un rid/d'une ipv4, et la plage associée (un tuple ou
 un slash ipv4).
 * Pour les anciens scripts, j'ai mis find_rid_plage dans ridtools, il faut l'utiliser
 également à la place des boucles for tp, (begin, end) in config.rid.iteritems()...
 * J'ai essayé de faire attention à tout ce que ça aurait pu casser, mais ce n'est
 pas garanti
This commit is contained in:
Pierre-Elliott Bécue 2013-05-30 01:11:36 +02:00
parent e2a4cfe72a
commit a442fd6b22
7 changed files with 108 additions and 71 deletions

View file

@ -58,11 +58,8 @@ class Rid(object):
"""Peuple les champs de l'instance par rapport au rid"""
self.rid = rid
for tp, (start, end) in config.rid.iteritems():
if start <= rid <= end:
self.type = tp
break
else:
self.type = find_rid_plage(int(rid))
if self.type == 'Inconnu':
raise ValueError("rid inconnu : %d" % rid)
self.ipv4_dispo = (rid & (1 << 15)) == 0 and self.type != 'special' or self.rid in config.rid_machines_speciales
@ -149,3 +146,17 @@ class Rid(object):
def __int__(self):
return self.rid
def find_rid_plage(rid):
"""Trouve la plage du rid fourni"""
for (tp, plages) in config.rid_primaires.iteritems():
if isinstance(plages, list):
for begin, end in plages:
if begin <= rid <= end:
return tp, (begin, end)
else:
(begin, end) = plages
if begin <= rid <= end:
return tp, (begin, end)
else:
return "Inconnu", (0, 0)