diff --git a/gestion/config.py b/gestion/config.py index 732bdd72..77db46c2 100644 --- a/gestion/config.py +++ b/gestion/config.py @@ -411,6 +411,14 @@ mid = { 'special' : (4096, 6143), } +# mid pour les machines spéciales (classe 'special' ci-dessus) +mid_machines_speciales = { + # freebox.crans.org + 4096: '82.225.39.54', + # ovh.crans.org + 4097: '91.121.84.138', +} + # Les préfixes ipv6 prefix = { 'subnet' : [ '2a01:240:fe3d::/48' ], 'serveurs' : [ '2a01:240:fe3d:0::/64'], diff --git a/gestion/midtools.py b/gestion/midtools.py index ec3fba88..ed7bfc31 100755 --- a/gestion/midtools.py +++ b/gestion/midtools.py @@ -60,10 +60,11 @@ class Mid(object): for tp, (start, end) in config.mid.iteritems(): if start <= mid <= end: self.type = tp + break else: raise ValueError("mid inconnu : %d" % mid) - self.ipv4_dispo = (mid & (1 << 15)) == 0 and self.type != 'special' + self.ipv4_dispo = (mid & (1 << 15)) == 0 and self.type != 'special' or self.mid in config.mid_machines_speciales self.priv = (mid & (1 << 14)) != 0 @@ -92,9 +93,16 @@ class Mid(object): if self.type: break else: - raise ValueError("%s dans aucun des réseaux gérés par le Cr@ns..." % ip) + for mid, ip_speciale in config.mid_machines_speciales.items(): + if ip == netaddr.IPAddress(ip_speciale): + self.mid = mid + self.type = "special" + break + else: + raise ValueError("%s dans aucun des réseaux gérés par le Cr@ns..." % ip) - self.mid = config.mid[self.type][0] + ip.value - netaddr.IPNetwork(config.NETs[self.type][0]).value + if not self.mid: + self.mid = config.mid[self.type][0] + ip.value - netaddr.IPNetwork(config.NETs[self.type][0]).value if self.mid > config.mid[self.type][1]: raise ValueError("%s trop élevée pour le réseau '%s'" % (ip, self.type)) @@ -113,8 +121,11 @@ class Mid(object): raise ValueError("Pas d'adresse IPv4 disponible pour la machine %r" % self) if not hasattr(self, '__ipv4'): - net = netaddr.IPNetwork(config.NETs[self.type][0]) - self.__ipv4 = netaddr.IPAddress(net.first + self.reste) + if self.type != "special": + net = netaddr.IPNetwork(config.NETs[self.type][0]) + self.__ipv4 = netaddr.IPAddress(net.first + self.reste) + else: + self.__ipv4 = netaddr.IPAddress(config.mid_machines_speciales[self.mid]) return self.__ipv4