Topolograph Versions Save

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.

v2.39

1 month ago

v2.39 (16.04.2024)

Fixes

v2.38

2 months ago

v2.38 (03.03.2024)

Fixes

  • IS-IS templates improvements to avoid missing links between the same nodes.

Improvements

  • IS-IS Watcher is released and integrated into Topolograph!
    IS-IS Watcher is a monitoring tool of IS-IS topology changes for network engineers. It works via passively listening to IS-IS control plane messages through a specially established IS-IS adjacency between IS-IS Watcher and one of the network device. The tool logs IS-IS events and/or export by Logstash to Elastic Stack (ELK), Zabbix, WebHooks and Topolograph monitoring dashboard for keeping the history of events, alerting, instant notification. By encapsulating the solution's elements in containers, it becomes exceptionally quick to start. The only thing is needed to configure manually is GRE tunnel setup on the Linux host.

IS-IS Watcher detects the following network events:

  • IS-IS neighbor adjacency Up/Down
  • IS-IS link cost changes
  • IS-IS networks appearance/disappearance from the topology

Gathered 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

  • Thanks to Duplicate IPs Issue#6 the new report to find duplicated networks (networks're terminated on multiple not-direct connected hosts). For example, consider the following linear topology: router A connects to router B using the IP x.x.x.x/30, router B connects to router C using the IP y.y.y.y/30, and router C connects to router D using the IP z.z.z.z/30. The correct topology should be A<x.x.x.x/30>B<y.y.y.y/30>C<z.z.z.z/30>D, but in fact it has the following topology: A<x.x.x.x/30>B<y.y.y.y/30>C<x.x.x.x/30>D
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.

v2.37

4 months ago

v2.37 (25.12.2023)

Fixes

  • IS-IS regex for DIS nodes has been fixed. Initially, it included only digits and missed any DISes look like this 0100.0001.0001.a8-00, now it matches all cases.

v2.36

6 months ago

v2.36

New features

  • Ruckus is onboarded

v2.35.3

7 months ago

v2.35.3

Bug Fix

  1. IS-IS with DIS might be missed (all vendors).
  2. Nokia IS-IS templates with TE enabled Issue 42
  3. Mikrotik OSPF External network templates have been changed

Enhancements

  1. 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.
  2. Backup paths are not shown as 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
  3. gunicorn's timeout is increased to 90 sec. Default timeout (30sec) caused worker timeout error during big graph upload.

v2.35.2

7 months ago

v2.35.1

Enhancements

Fix Cisco IS-IS IPv6 templates and revision of existed IS-IS templates for Juniper, Huawei, Zte. Issue 42

v2.35.2

Enhancements

  1. Improvement in 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.
  2. Fix Cisco, Huawei IS-IS templates for redistributed networks with narrow metric.

v2.35

9 months ago

New features

OSPFv3 support is added for Arista.

Vendor Command Stub network included External (redistributed) network
Arista show ipv6 ospf database detail YES YES

Enhancements

  1. Subnets from transit interfaces (interfaces with ospf type 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.

  1. Vendors are placed in alphabet order.

v2.34

9 months ago

New features

Multi LSDBs upload support https://github.com/Vadims06/topolograph/issues/37, https://github.com/Vadims06/topolograph/issues/39. Available via API.

Multi LSDBs upload 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())

v2.33

10 months ago

New features

Basic graph analytic's algorithm were added:

  • Find central node/s in the network
  • Find the most N loaded/critical nodes in the network
  • Find the most N loaded/critical edges in the network
  • Find "single point of failure" nodes. If they fail, the network will lose the connection between nodes (become disjointed)
  • Find fault tolerant nodes. If they fail, the network will keep connected.

New features

Central nodes

The most 3 loaded/critical nodes

The most 3 loaded/critical edges

Single point of failure

Fault tolerant nodes

Enhancements

  • "-" Yaml syntax clashed with "zoom in" keyword hotkey of graph
  • Documentation. Cisco NX-OS commands for getting OSPF LSDB were added.

v2.32

10 months ago

New features

  • Extreme OSPF support is added
  • Ericsson OSPF support is added
  • Yaml based topology. Network design mode.

Yaml based topology

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.

Basic YAML based topology.

Build a graph with defined nodes and edges. https://user-images.githubusercontent.com/20796986/144145217-454c1442-ba6c-4337-a6f2-8dde5d337f1e.png

Node attributes

  • node's name is mandatory. Should be in IP-address format. To change it to any other value - use label
  • Tags of node are optional. Any key (type string): value (str, int, float, dictionary, list) pairs. image
    There is a graph with 6 nodes. Select all primary nodes (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}]

Edge attributes

  • src, dst is mandatory.
  • cost is optional. Default is 1. Equal to OSPF/IS-IS cost.
  • directed is optional. Default is false.
  • Tags of edge are optional. Any key (type string): value (str, int, float, dictionary, list) pairs. image
    Select all edges over verizon ISP between 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. image 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).