Releases: Vadims06/topolograph
v2.39 (16.04.2024)
v2.38 (03.03.2024)
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 (25.12.2023)
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 (25.10.2023)
v2.36
New features
- Ruckus is onboarded
v2.35.3 (16.10.2023)
v2.35.3
Bug Fix
- IS-IS with DIS might be missed (all vendors).
- Nokia IS-IS templates with TE enabled Issue 42
- Mikrotik OSPF External network templates have been changed
Enhancements
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 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 asbackup
paths.
Paths with backup paths from SPT
Backup paths are not part of SPT
- gunicorn's timeout is increased to
90
sec. Default timeout (30sec) caused worker timeout error during big graph upload.
v2.35.2 (18.09.2023)
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
- 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. - Fix Cisco, Huawei IS-IS templates for redistributed networks with narrow metric.
v2.35 (05.08.2023)
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
- 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.
- Vendors are placed in alphabet order.
v2.34 (20.07.2023)
New features
Multi LSDBs upload support #37, #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.
- Cisco_ospf.txt
- Juniper_ospf.txt
Python sample code:
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 (11.07.2023)
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 (24.06.2023)
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
.
Node attributes
node's name
is mandatory. Should be in IP-address format. To change it to any other value - uselabel
- Tags of node are optional. Any key (type string): value (str, int, float, dictionary, list) pairs.
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.
Select all edges over verizon ISP between10.10.10.2
and10.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.
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).