Topolograph.com is an online project which can visualize OSPF/ISIS topology based on LSDB output from a single network device. Then you can not only see (and check) the shortest path from source to destination, but also see the outcome from link or node failure along the path to the destination.
Freeze network
button got its descriptionGathered attributes
TLV name | TLV |
---|---|
IS Reachability | 2 |
Extended IS Reachability (new) | 22 |
IPv4 Internal Reachability (old) | 128 |
IPv4 External Reachability (old) | 130 |
Extended IPv4 Reachability (new) | 135 |
IPv6 Reachability | 236 |
Here is a small demo https://github.com/Vadims06/topolograph/blob/bafd52acf8b832eae34db84cf97e629e4dbab45e/docs/release-notes/v2.38/is_is_watcher_demo.mp4
Network | Number of terminated nodes | Node names |
---|---|---|
x.x.x.x/30 | 4 | [172.16.1.2, 172.26.1.2], [172.30.2.1, 178.20.3.1] |
The report shows a group of nodes, where the network is terminated. Additional groupping via []
shows if hosts are direct neighbors.
MAX_EDGE_NUM_TO_SWITCH_TO_SINGLE_SPT_PATH
= 8000 is added to limit the number of ECMP paths. If a graph will be greater than this value, only a single SPT will be shown. ECMP calculation is quite memory consumable for big graphs. If you need ECMP for a big graph - please reach me.backup
if they have paths from the shortest paths, i.e. we have four of the shortest paths and we simulate link outage, two out of four SPT link will become unavailable, so next two paths will not be duplicated as backup
paths.
Paths with backup paths from SPT
Backup paths are not part of SPT
90
sec. Default timeout (30sec) caused worker timeout error during big graph upload.Fix Cisco IS-IS IPv6 templates and revision of existed IS-IS templates for Juniper, Huawei, Zte. Issue 42
Upload Multiple OSPF LSDBs via API
. Elements of a graph from OSPF and IS-IS can be skipped, if they are in the same area.OSPFv3 support is added for Arista.
Vendor | Command | Stub network included | External (redistributed) network |
---|---|---|---|
Arista | show ipv6 ospf database detail | YES | YES |
broadcast
) are included into graph properties. Networks are available via RestAPI /network/{graph_time}
, take into account in graph diff.
Broadcast subnets of 10.0.0.1
node.
Multi LSDBs upload support https://github.com/Vadims06/topolograph/issues/37, https://github.com/Vadims06/topolograph/issues/39. Available via API.
If a network has multiple areas, it is needed to get LSDB output from multiple devices and save it into separate files. Example below uses two LSDB outputs saved in the lsdb_samples
folder.
import requests
TOPOLOGRAPH_HOST="127.0.0.1"
TOPOLOGRAPH_PORT=5000
TOPOLOGRAPH_WEB_API_USERNAME_EMAIL="your login"
TOPOLOGRAPH_WEB_API_PASSWORD="your password"
from pprint import pprint as pp
lsdbs_attr_ll = []
lsdb_dir = os.path.join(os.getcwd(), 'lsdb_samples')
for vendor_name, protocol_name in [('Cisco', 'ospf'), ('Juniper', 'ospf')]:
f_name = os.path.join(lsdb_dir, f"{vendor_name}_{protocol_name}.txt")
with open(f_name) as f:
lsdbs_attr_ll.append({'lsdb_output': f.read(), 'vendor_device': vendor_name, 'igp_protocol': protocol_name})
r_post = requests.post(f'http://{TOPOLOGRAPH_HOST}:{TOPOLOGRAPH_PORT}/api/graphs', auth=(TOPOLOGRAPH_WEB_API_USERNAME_EMAIL, TOPOLOGRAPH_WEB_API_PASSWORD), json=lsdbs_attr_ll, timeout=(5, 30))
pp(r_post.json())
Basic graph analytic's algorithm were added:
Topolograph visualizes topologies based on OSPF/IS-IS LSDB files, but starting from v2.32 it accepts YAML to build a graph. It can be used for building arbitrary topologies (not exactly IGP domains), but moreover it can keep the topology updated via Rest API. It's the first version of Network Diagram as a Service (NDAS)!
OSPF/IS-IS LSDB <-> YAML is interchangeable now in both ways, so it allows to make a design of IGP domain from the scratch or based on uploaded a LSDB, add new links/edges between nodes or change igp's cost and then check network reaction based on our changes.
Build a graph with defined nodes
and edges
.
node's name
is mandatory. Should be in IP-address format. To change it to any other value - use label
ha_role
: primary
) in the first DC (dc1
)import requests
from pprint import pprint as pp
query_params = {'location': 'dc1', 'ha_role': 'primary'}
r_get = requests.get(f'http://{TOPOLOGRAPH_HOST}:{TOPOLOGRAPH_PORT}/api/diagram/{graph_time}/nodes', auth=(' ', ' '), params=query_params, timeout=(5, 30))
Reply
pp(r_get.json())
[{'ha_role': 'primary',
'id': 1,
'label': '10.10.10.2',
'location': 'dc1',
'name': '10.10.10.2',
'size': 15}]
src
, dst
is mandatory.cost
is optional. Default is 1. Equal to OSPF/IS-IS cost.directed
is optional. Default is false.10.10.10.2
and 10.10.10.4
query_params = {'src_node': '10.10.10.2', 'dst_node': '10.10.10.4', 'isp': 'verizon'}
r_get = requests.get(f'http://{TOPOLOGRAPH_HOST}:{TOPOLOGRAPH_PORT}/api/diagram/{graph_time}/edges', auth=(' ', ' '), params=query_params, timeout=(5, 30))
Reply
pp(r_get.json())
[{'bw': 1000,
'cost': 1,
'dst': '10.10.10.4',
'id': 3,
'isp': 'verizon',
'media': 'fiber',
Let's add a new link with cost
1 between R3 (10.10.10.3) and R4 (10.10.10.4) device and see how network will react on it.
Obviously, we see traffic increase on direct link R3<->R4 and traffic decrease to R2 (10.10.10.2) and R5 (10.10.10.5).