Index: /tools/getrange.py
===================================================================
--- /tools/getrange.py	(revision 11513)
+++ /tools/getrange.py	(revision 11514)
@@ -26,39 +26,45 @@
 
 
-def get_ranges(interlink, size, aantal):
+bezet_cache = None
+def get_ranges(interlink, size, aantal, use_history=False):
+  global bezet_cache
   numaddrs = 1 << (32 - size)
   
-  bezet = {}
-  substs = {}
-  def add_ip(address):
-    if '/' not in address:
-      address += "/32"
+  if not use_history or (use_history and not bezet_cache):
+    bezet = {}
+    substs = {}
+    def add_ip(address):
+      if '/' not in address:
+        address += "/32"
 
-    addr, mask = address.split('/')
-    if addr in substs:
-      addr = substs[addr]
-    try:
-      addr = parseaddr(addr)
-      mask = int(mask)
-      addr = addr & ~((1 << (32 - mask)) - 1)
-      for i in range(0, (1 << (32 - mask))):
-        bezet[addr + i] = 1
-    except ValueError, e:
-      print "[FOUT] in address %s node %s" % (address, node)
+      addr, mask = address.split('/')
+      if addr in substs:
+        addr = substs[addr]
+      try:
+        addr = parseaddr(addr)
+        mask = int(mask)
+        addr = addr & ~((1 << (32 - mask)) - 1)
+        for i in range(0, (1 << (32 - mask))):
+          bezet[addr + i] = 1
+      except ValueError, e:
+        print "[FOUT] in address %s node %s" % (address, node)
+    
+    for node in gformat.get_hostlist():
+      datadump = gformat.get_yaml(node)
+
+      add_ip(datadump['masterip'])
+      for key in datadump['autogen_iface_keys']:
+        add_ip(datadump[key]['ip'])
+
+    # Fetching smallest in use IP 
+    # XXX: Currently not used for anything
+    i = parseaddr("255.255.255.255")
+    for k in bezet.keys():
+      if k < i:
+        i = k
+  else:
+    bezet = bezet_cache
   
-  for node in gformat.get_hostlist():
-    datadump = gformat.get_yaml(node)
-
-    add_ip(datadump['masterip'])
-    for key in datadump['autogen_iface_keys']:
-      add_ip(datadump[key]['ip'])
-
-  # Fetching smallest in use IP 
-  # XXX: Currently not used for anything
-  i = parseaddr("255.255.255.255")
-  for k in bezet.keys():
-    if k < i:
-      i = k
-  
+ 
   # Interlinks are living in special ranges usually
   if interlink:
@@ -84,4 +90,5 @@
     bezet[i] = 1
 
+  bezet_cache = bezet
   return ranges
 
