|
|
|
@ -13,7 +13,42 @@ if len(sys.argv) > 1:
|
|
|
|
|
with open(ref_topo_file) as ref_file:
|
|
|
|
|
ref_topo = providers.OspfFileTopologyProvider(ref_file).get_topology()
|
|
|
|
|
|
|
|
|
|
cur_topo = providers.RunningBirdTopologyProvider().get_topology()
|
|
|
|
|
try:
|
|
|
|
|
cur_topo = providers.RunningBirdTopologyProvider().get_topology()
|
|
|
|
|
except OSError:
|
|
|
|
|
# HACK!
|
|
|
|
|
import traceback as tb
|
|
|
|
|
tb.print_exc(file=sys.stderr)
|
|
|
|
|
print(f'Could not get current topology from BIRD,\n'
|
|
|
|
|
'will load reference one with random omissions\n----', file=sys.stderr)
|
|
|
|
|
with open(ref_topo_file) as ref_file:
|
|
|
|
|
cur_topo = providers.OspfFileTopologyProvider(ref_file).get_topology()
|
|
|
|
|
import random
|
|
|
|
|
random.seed('birdvisu_demo')
|
|
|
|
|
# Routers:
|
|
|
|
|
for _ in range(random.randint(1, 3)):
|
|
|
|
|
key, router_to_delete = random.choice(list(cur_topo.routers.items()))
|
|
|
|
|
for l in router_to_delete.links:
|
|
|
|
|
lk = (l.router.ident, l.network.ident)
|
|
|
|
|
del cur_topo.links[lk]
|
|
|
|
|
l.network.links.remove(l)
|
|
|
|
|
del cur_topo.routers[key]
|
|
|
|
|
# Networks:
|
|
|
|
|
for _ in range(random.randint(1, 3)):
|
|
|
|
|
key, network_to_delete = random.choice(list(cur_topo.networks.items()))
|
|
|
|
|
for l in network_to_delete.links:
|
|
|
|
|
lk = (l.router.ident, l.network.ident)
|
|
|
|
|
del cur_topo.links[lk]
|
|
|
|
|
l.router.links.remove(l)
|
|
|
|
|
del cur_topo.networks[key]
|
|
|
|
|
# Links:
|
|
|
|
|
for _ in range(random.randint(1, 3)):
|
|
|
|
|
key, link_to_delete = random.choice(list(cur_topo.links.items()))
|
|
|
|
|
link_to_delete.router.links.remove(link_to_delete)
|
|
|
|
|
link_to_delete.network.links.remove(link_to_delete)
|
|
|
|
|
del cur_topo.links[key]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Combine topologies
|
|
|
|
|
|
|
|
|
|