From 4be294f8849317f160cb0f590f44be4a04f8223a Mon Sep 17 00:00:00 2001 From: Nicolas Dandrimont Date: Wed, 3 Mar 2010 18:35:36 +0100 Subject: [PATCH] =?UTF-8?q?[midtools,=20config]=20Gestion=20des=20mid=20sp?= =?UTF-8?q?=C3=A9ciaux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit darcs-hash:20100303173536-ffbb2-4b30bd34e5a8b6e9fd188ac1d0769f4bb256ff0b.gz --- gestion/config.py | 8 ++++++++ gestion/midtools.py | 21 ++++++++++++++++----- 2 files changed, 24 insertions(+), 5 deletions(-) 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