Remove dead code
parent
db8b1414f0
commit
30ac0231e4
@ -1,87 +0,0 @@
|
||||
from birdvisu.ospffile import load
|
||||
import re
|
||||
|
||||
class Topology:
|
||||
"""Basically a graph"""
|
||||
|
||||
def __init__(self):
|
||||
self.routers = [] # Tuples like in ospffile for router section
|
||||
self.networks = [] # Ditto, but the key is the address, not the ad-hoc string from bird
|
||||
self.network_addrs = {} # Keeps mapping from network to address
|
||||
self.links = [] # Tuples (router, network_addr, cost)
|
||||
# FIXME: we are ugly, so everything are strings and I don't care as of now.
|
||||
|
||||
def add_area(self, dirtuple):
|
||||
# FIXME: Do not use BIRD's strings, create an abstraction above them.
|
||||
_area, topo = dirtuple # Ignoring the area
|
||||
for obj in topo:
|
||||
directive, details = obj
|
||||
if directive.startswith('router'):
|
||||
self.routers.append(obj)
|
||||
elif directive.startswith('network'):
|
||||
net_addr = None
|
||||
for d, _ in details:
|
||||
if d.startswith('address'):
|
||||
net_addr = d
|
||||
break
|
||||
assert net_addr is not None
|
||||
fixed_network = (net_addr, details + [directive])
|
||||
self.networks.append(fixed_network)
|
||||
self.network_addrs[directive] = net_addr
|
||||
|
||||
# Fix the topology: find other networks (stubnets, external, ...) and links:
|
||||
known = set()
|
||||
for r, rd in self.routers:
|
||||
for n, nd in rd:
|
||||
if n.startswith(('network', 'stubnet', 'external')):
|
||||
net_id = re.match(r'((network|stubnet|external) [^ ]+)', n).group(1)
|
||||
if n.startswith(('stubnet', 'external')) and net_id not in known:
|
||||
known.add(net_id)
|
||||
self.networks.append((net_id, []))
|
||||
# Add dummy mapping
|
||||
self.network_addrs[net_id] = net_id
|
||||
metric = int(re.search(r'metric ([0-9]+)', n).group(1))
|
||||
net_addr = self.network_addrs[net_id]
|
||||
self.links.append((r, net_addr, metric))
|
||||
|
||||
@classmethod
|
||||
def from_ospffile(cls, f):
|
||||
# FIXME: We should create own classes from the OSPF file as soon as
|
||||
# possible to avoid changing whole codebase when BIRD's format changes.
|
||||
result = cls()
|
||||
parsed = load(f)
|
||||
for directive, details in parsed:
|
||||
if directive.startswith('area'):
|
||||
result.add_area((directive, details))
|
||||
return result
|
||||
|
||||
|
||||
class TopologyDifference:
|
||||
def __init__(self, actual, reference):
|
||||
self.actual = actual
|
||||
self.reference = reference
|
||||
|
||||
def compare(self):
|
||||
# FIXME: This also relies on BIRD's current format.
|
||||
just_ident = lambda x: x[0]
|
||||
act_routers = set(map(just_ident, self.actual.routers))
|
||||
ref_routers = set(map(just_ident, self.reference.routers))
|
||||
act_networks = set(map(just_ident, self.actual.networks))
|
||||
ref_networks = set(map(just_ident, self.reference.networks))
|
||||
act_links = set(self.actual.links)
|
||||
ref_links = set(self.reference.links)
|
||||
|
||||
# *_missing: in reference, not in actual network.
|
||||
# *_extra: in actual network, not in reference.
|
||||
# *_discrepancies: different settings (currently only metrics)
|
||||
self.routers_missing = ref_routers - act_routers
|
||||
self.routers_extra = act_routers - ref_routers
|
||||
self.networks_missing = ref_networks - act_networks
|
||||
self.networks_extra = act_networks - ref_networks
|
||||
|
||||
# FIXME: be more clever. Discrepancy is not missing and extra…
|
||||
self.links_missing = ref_links - act_links
|
||||
self.links_extra = act_links - ref_links
|
||||
self.links_discrepancies = act_links ^ ref_links
|
||||
|
||||
|
Loading…
Reference in New Issue