Skip to content

v2.32 (24.06.2023)

Compare
Choose a tag to compare
@Vadims06 Vadims06 released this 24 Jun 22:49
· 34 commits to master since this release
540d9b3

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',

Network reaction on adding new link between devices.

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).