|
|
@ -205,6 +205,10 @@ class Vertex:
|
|
|
|
outgoing_edges: set['Edge'] = field(default_factory=set)
|
|
|
|
outgoing_edges: set['Edge'] = field(default_factory=set)
|
|
|
|
incoming_edges: set['Edge'] = field(default_factory=set)
|
|
|
|
incoming_edges: set['Edge'] = field(default_factory=set)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MetricType(IntEnum):
|
|
|
|
|
|
|
|
Type1 = 1
|
|
|
|
|
|
|
|
Type2 = 2
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
|
|
@dataclass(frozen=True)
|
|
|
|
class Edge:
|
|
|
|
class Edge:
|
|
|
|
"""An edge of the topology.
|
|
|
|
"""An edge of the topology.
|
|
|
@ -220,6 +224,8 @@ class Edge:
|
|
|
|
cost: int
|
|
|
|
cost: int
|
|
|
|
# The network is a multigraph, so we need to know how many times to count this edge
|
|
|
|
# The network is a multigraph, so we need to know how many times to count this edge
|
|
|
|
count: int
|
|
|
|
count: int
|
|
|
|
|
|
|
|
# Oh how much I would love to have this near the cost, but dataclasses said No!
|
|
|
|
|
|
|
|
metric_type: MetricType = MetricType.Type1
|
|
|
|
# Virtual links are basically an implementation detail of OSPF.
|
|
|
|
# Virtual links are basically an implementation detail of OSPF.
|
|
|
|
# Nonetheless, it might be useful to be able to show them, so we allow
|
|
|
|
# Nonetheless, it might be useful to be able to show them, so we allow
|
|
|
|
# adding them to a topology.
|
|
|
|
# adding them to a topology.
|
|
|
|