import socket
"""
-Map sites to adjacent sites in topology. Generated manually :-(
-A site is adjacent to itself.
+Links in the physical topology, gleaned from looking at the Internet2
+and NLR topology maps. Link (a, b) connects sites with IDs a and b.
"""
-adjacencies = {
- 1: [1], 2: [2,12], 3: [3], 4: [4,5,6,7,9,10], 5: [4,5,6,8],
- 6: [4,5,6,10], 7: [4,7,8], 8: [5,7,8], 9: [4,9,10], 10: [4,6,9,10],
- 11: [11,13,15,16,17], 12: [2,12,13], 13: [11,12,13,15], 14: [14],
- 15: [11,13,15,19], 16: [11,16], 17: [11,17,19,22], 18: [18],
- 19: [15,17,19,20], 20: [19,20,21,22], 21: [20,21,22], 22: [17,20,21,22]
- }
+links = [(2, 12), # I2 Princeton - New York
+ (4, 5), # NLR Chicago - Houston
+ (4, 6), # NLR Chicago - Atlanta
+ (4, 7), # NLR Chicago - Seattle
+ (4, 9), # NLR Chicago - New York
+ (4, 10), # NLR Chicago - Wash DC
+ (5, 6), # NLR Houston - Atlanta
+ (5, 8), # NLR Houston - Los Angeles
+ (6, 10), # NLR Atlanta - Wash DC
+ (7, 8), # NLR Seattle - Los Angeles
+ (9, 10), # NLR New York - Wash DC
+ (11, 13), # I2 Chicago - Wash DC
+ (11, 15), # I2 Chicago - Atlanta
+ (11, 16), # I2 Chicago - CESNET
+ (11, 17), # I2 Chicago - Kansas City
+ (12, 13), # I2 New York - Wash DC
+ (13, 15), # I2 Wash DC - Atlanta
+ (15, 19), # I2 Atlanta - Houston
+ (17, 19), # I2 Kansas City - Houston
+ (17, 22), # I2 Kansas City - Salt Lake City
+ (19, 20), # I2 Houston - Los Angeles
+ (20, 21), # I2 Los Angeles - Seattle
+ (20, 22), # I2 Los Angeles - Salt Lake City
+ (21, 22)] # I2 Seattle - Salt Lake City
+
+
+"""
+Generate site adjacency map from list of links
+"""
+def gen_adjacencies(links):
+ adj = {}
+ for (a, b) in links:
+ if a in adj:
+ adj[a].append(b)
+ else:
+ adj[a] = [a, b]
+ if b in adj:
+ adj[b].append(a)
+ else:
+ adj[b] = [b, a]
+ return adj
+
"""
Test whether two sites are adjacent to each other in the adjacency graph.
"""
-def is_adjacent(s1, s2):
+def is_adjacent(adjacencies, s1, s2):
set1 = set(adjacencies[s1])
set2 = set(adjacencies[s2])
"""
Check the adjacency graph for discrepancies.
"""
-def check_adjacencies():
+def check_adjacencies(adjacencies):
for site in adjacencies:
for adj in adjacencies[site]:
try:
- test = is_adjacent(site, adj)
+ test = is_adjacent(adjacencies, site, adj)
except Exception, e:
print "Error: ", e, " Fix adjacencies!"
return
tmp.append(t)
return dict(tmp)
-
-check_adjacencies()
+adjacencies = gen_adjacencies(links)
+check_adjacencies(adjacencies)
""" Need global topology information """
sites = get_sites()