Index: tools/gformat.py
===================================================================
--- tools/gformat.py	(revision 13321)
+++ tools/gformat.py	(revision 13324)
@@ -123,4 +123,5 @@
 rc_conf_local_cache = {}
 nameservers_cache = []
+relations_cache = None
 def clear_cache():
   ''' Poor mans cache implementation '''
@@ -132,4 +133,5 @@
   normal_proxies = []
   nameservers_cache = []
+  relations_cache = None
 
 NO_DHCP = 0
@@ -263,22 +265,26 @@
 
 
-def make_relations(datadumps=dict()):
+def make_relations():
   """ Process _ALL_ yaml files to get connection relations """
+  global relations_cache
+
+  if relations_cache:
+    return relations_cache
+
   errors = []
   poel = defaultdict(list)
 
-  if not datadumps:
-    for host in get_hostlist():
-      datadumps[host] = get_yaml(host)
-
-  for host, datadump in datadumps.iteritems():
+  for host in get_hostlist():
+    datadump = get_yaml(host)
     try:
       for iface_key in datadump['autogen_iface_keys']:
         net_addr = network(datadump[iface_key]['ip'])
-        poel[net_addr] += [(host,datadump[iface_key])]
+        poel[net_addr] += [(host,datadump[iface_key].copy())]
     except (KeyError, ValueError), e:
       errors.append("[FOUT] in '%s' interface '%s' (%s)" % (host,iface_key, e))
       continue
-  return (poel, errors)
+
+  relations_cache = (poel, errors)
+  return relations_cache
 
 
@@ -1061,4 +1067,35 @@
   if not has_item:
     output += " - none\n"
+
+  output += '\n'
+  output += """\
+Available neighbours:
+"""
+  (poel, errors) = make_relations()
+  table = []
+  for iface,addrs in sorted(addrs_list.iteritems()):
+    if iface in ['lo0']:
+      continue
+
+    # Some formatting quirks
+    iface_len = max(map(len,addrs_list.keys()))
+    addr_len = max(map(len,[x[0] for x in [x[0] for x in addrs_list.values()]]))
+
+    for addr, comment in sorted(addrs,key=lambda x: parseaddr(x[0].split('/')[0])):
+      if not addr.startswith('172.'):
+        # Avoid listing internet connections as pool
+        continue
+      for neighbour in poel[network(addr)]:
+        if neighbour[0] != datadump['autogen_item']:
+          table.append((iface, neighbour[1]['ip'].split('/')[0], neighbour[0] + " (" + neighbour[1]['autogen_ifname'] + ")", neighbour[1]['comment']))
+
+  if not table:
+    # This should be considered very odd as it indicate no active connections to other nodes
+    output += " - none\n"
+  else:
+    col_width = [max(len(x) for x in col) for col in zip(*table)]
+    for row in table:
+      output += " - " + " || ".join("{:{}}".format(x, col_width[i]) for i, x in enumerate(row)) + "\n"
+
 
   return output
