diff --git a/gestion/midtools.py b/gestion/midtools.py index 9f3faac6..bdca2ba8 100755 --- a/gestion/midtools.py +++ b/gestion/midtools.py @@ -19,7 +19,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from config import mid, prefix, NETs +import config import iptools @@ -28,10 +28,20 @@ class Mid(object): Permet de décortiquer un mid et d'obtenir les IP correspondantes """ - def __init__(self, mid): + def __init__(self, mid=None): + if mid is not None: + self.parse(mid) + else: + self.mid = None + self.reste = False + self.type = None + self.ipv4_dispo = False + self.priv = False + + def parse(self, mid): self.mid = mid self.type = None - for tp in mid: + for tp in config.mid: if mid <= tp[1] and mid >= tp[0]: self.type = tp if self.type is None: @@ -49,6 +59,25 @@ class Mid(object): # if self.type == 'ens': # Inutile pour l'instant # self.reste &= 0xff + def from_ipv4(self, ip): + """ + Met à jour l' instance pour correspondre à l'IPv4 donnée + """ + self.ipv4_dispo = True + self.priv = ip.startswith('10.') + for tp in ['fil', 'wifi', 'adm', 'gratuit', 'ens']: + if iptools.AddrInNet(ip, config.NETs[tp]): + self.type = tp + break + if self.type is None: + raise ValueError("Impossible de convertir l'adresse IP") + + self.mid = iptools.QuadToDec(ip) + self.mid -= iptools.param(config.NETs[self.type], True)['network'] + self.reste = self.mid & 0x7ff + # if self.type == 'ens': # Inutile pour l'instant + # self.reste &= 0xff + def to_ipv4(self): """ Génère l'IPv4 associée à la machine @@ -56,7 +85,7 @@ class Mid(object): if not self.ipv4_dispo: raise ValueError("Pas d'adresse ipv4 disponible pour la machine") - ip = iptools.param(NETs[self.type], True)['network'] + ip = iptools.param(config.NETs[self.type], True)['network'] ip += self.reste return iptools.DecToQuad(ip) @@ -70,7 +99,7 @@ class Mid(object): tp = {'fil': 'fil', 'fil-v6': 'fil', 'wifi': 'wifi', 'wifi-v6': 'wifi', 'adm': 'adm'}[self.type] - ip = prefix[tp][0].split(":/")[0] + ip = config.prefix[tp][0].split(":/")[0] ip += hex(self.mid)[2:] ip += "::/64"