Commands

Vendor LSA1 LSA2 LSA5 NAPALM support
Cisco show ip ospf database router show ip ospf database network show ip ospf database external YES
Quagga show ip ospf database router show ip ospf database network show ip ospf database external YES
Juniper show ospf database router extensive | no-more show ospf database network extensive | no-more show ospf database external extensive | no-more YES
Bird show ospf state all show ospf state all show ospf state all NO
Nokia show router ospf database type router detail show router ospf database type network detail show router ospf database type external detail YES
Mikrotik /routing ospf lsa print detail file=lsa.txt /routing ospf lsa print detail file=lsa.txt /routing ospf lsa print detail file=lsa.txt No
Huawei display ospf lsdb router display ospf lsdb network display ospf lsdb ase No
Paloalto show routing protocol ospf dumplsdb show routing protocol ospf dumplsdb show routing protocol ospf dumplsdb No
Mandatory YES YES NO

Save the output from min two commands (for getting LSA1 and LSA2 ) and upload it to Topolograph with .txt or .log extenstion.

GeneralView

Demo network has already uploaded for everyone. Press `Load dynamic graph` in order to upload it. Once you did it - you can see the topology, bold lines show ECMP links. Topolograph demo graph

Press on bold line in order to unflat ECMP and see all nested links. Topolograph Press on bold line in order to unflat ECMP and see all nested links

The shortest path. How to build.

It's possible to build the shortest path from a node. Just right click on a node. The description with all nodes and path cost is available above the topology. Topolograph build the shortest path from a node

Once you set the source and destination - you get colored the shortest path. Topolograph OSPF the shortest paths

All the shortest paths to all nodes. Minimum Shortest Tree.

New feature of v2.11 release. MST allows see all the shortest paths To or From node. Just activate it from this radio-checkbox. Topolograph MST allows see all the shortest paths To or From node

New feature of v2.11 release. All incoming the shortest paths are built to the node. Topolograph all incoming shortest paths

New feature of v2.11 release. All outgoing the shortest paths are built from the node. Topolograph all outgoing shortest paths

New feature of v2.13 release. Difference between incoming and outgoing the shortest paths of selected node. Topolograph difference between incoming and outgoing shortest paths

Network's termination device search

How is it possible to know what networks are terminated on some particular node. Thera are two ways how to know about it. The first one - start typing Node ID in Focus/From field and you will see all terminated networks on the node. Responsive image

The second method is just to press on a node. New form pops up with a list of all backuped and non-backuped networks. The network is trated as backuped if such network is terminated on min two nodes. Responsive image

Backup paths. Link outage emulation.

In order to find out the backup path - just press on colored edge. You will simulate a link outage and the shortest path will be rebuilt passing by a 'failed" edge. Responsive image

Shortest path rebuilding by changing ospf cost on the fly

It's possible to change OSPF cost of any link. Right click on edge, new form pops up. Write new ospf cost in input field. Imagine if we need to redirect a traffic flow from 123.10.10.10 - 123.30.30.30 link to another link. Responsive image

Right click on colored edge and set 12. We get new traffic flow with new OSPF cost. Responsive image

Compare state of your network in different time

When you perform some configuration changes (add new network, redistribute another protocol to OSPF or change filters in existed route-maps) it is highly desire to make sure that results of you action give you expected changes in OSPF network. In order to do this - upload your network before your changes and right after it and compare them. What will be shown:

Responsive image

NetworkReactionOnFailure

In this mode it's possible to simulate a link or router shutdown/outage. The topology will be re-pained with expected changed traffic flow avoiding failed link or router.

Upload a graph if did't do it before and press on NetworkReactionOnFailure.

Topolograph ospf link down simulation

As you can see decreasing rate of traffic from 123.30.30.30 node to 123.123.30.30 and 123.123.31.31 differ from opposite direction [ from 123.123.30.30 to 123.30.30.30 ] upto ~2times. It happens because of the unsymmetric traffic path. Topolograph ospf link down simulation

We also can see an expected increasing rate of blue painted edge. Topolograph ospf link down simulation result

Network reaction if a network devices goes down. Simulate device down.

Right click on a node and choose `shutdown this node`. The algorithm escape this node. Topolograph ospf Network reaction if a network devices goes down

Under NetworkReactionOnFailure tab it is possible to see a network reaction on a OSPF cost change on the fly. Set new OSPF cost in righted-clicked edge menu. Topolograph ospf Network reaction on OSPF link cost changes

Analytics

In this mode it's possible to run algorithms in order to check your OSPF network.

Unidirectional and asymmetric links.

Print out any Unidirectional links ( number of IN and OUT links between two neighbors is not equal) Topolograph ospf unidirectional and asymmetric links

The edge is marked as red edge because of cost 1 and cost 10 OSPF metric Topolograph ospf unidirectional and asymmetric links

Asymmetric paths.

Print out any asymmetric paths from different points of views. Topolograph ospf asymmetric paths

We get a list of nodes which have asymmetric paths. Just checking them - we can see difference in incoming and Outgoing paths. Topolograph ospf asymmetric paths

Main and backup paths via the same ECMP.

We suggest that if we have multiple links bounded to ECMP and if the main link in ECMP goes down, the backup path should go via the second link in ECMP.

Passed report

Topolograph ospf paths via ECMP

If backup path goes not via ECMP and chooses completely different path - the report will be treated as failed.

Failed report

Topolograph ospf paths not via second link in ECMP

Network heatmap

Under Analytics tab it is possible to see how many terminated subnets are backuped via terminating the same subnet on different devices. Topolograph ospf analytics network heatmap

Click on a node in order to find out which networks are backuped which not. Topolograph ospf analytics network heatmap

As we can see only own device's loopback is not backuped - it is normal. Topolograph ospf analytics network heatmap

API

It's time not to depends on NAPALM support of the vendor. You are free to choose your favorite NetDevOps tool like Ansible, netmiko, Nornir, etc, and upload your OSPF network graph to Topolograph via a POST request. Once you uploaded the graph - you get the difference with previously uploaded graphs, specifically, you will receive: new/old OSPF adjacencies (edges on the graph) new/old devices in OSPF topology number of backuped and non backuped subnets in the topology

Get credentials.

It's needed to create an account with email/password on Login/Registration page as well as add your source IP/Network to authorised source network list under API tab.

Upload OSPF topology via API

Save the output from commands describing OSPF LSA1, LSA2, LSA2 and save it in the single file - cisco_lsdb_output.txt

      import requests
      from pprint import pprint as pp
      with open('cisco_lsdb_output.txt') as f:
        lsdb_output = f.read()
        r_post = requests.post('https://topolograph.com/api/graph', auth=('youraccount@domain.com', 'your-pass'), 
                                json={'lsdb_output': lsdb_output, 'vendor_device': 'Cisco'})
        pp(r_post.json())
      

Using python we read the content of the file and push it (it's better to say - POST it) to the topolograph.

The output returns:

  • diff with previously uploaded graphs
  • link to get all networks
  • status about passed checks
  •         >>> pp(r_post.json())
            {'diff': {'compared_with_graph_time': '02Jun2021_21h18m04s_13_hosts',
                      'graphs_diff': {'all_edges_stats_ll': [{'dst_node': '123.123.110.110',
                                                              'link_cost': 10,
                                                              'link_status': 'old',
                                                              'src_node': '123.123.100.100'},
                                                             {'dst_node': '123.123.111.111',
                                                              'link_cost': 10,
                                                              'link_status': 'old',
                                                              'src_node': '123.123.101.101'},
                                                             {'dst_node': '123.123.100.100',
                                                              'link_cost': 10,
                                                              'link_status': 'old',
                                                              'src_node': '123.123.110.110'},
                                                             {'dst_node': '123.123.101.101',
                                                              'link_cost': 10,
                                                              'link_status': 'old',
                                                              'src_node': '123.123.111.111'}],
                                      'new_nodes': [],
                                      'old_nodes': []},
                      'networks_diff': {'new_subnets_attr_dd_ll': [{'rid': '123.30.30.30',
                                                                    'subnet': '30.30.30.30/32'}],
                                        'old_subnets_attr_dd_ll': [{'rid': '123.10.10.10',
                                                                    'subnet': '1.2.3.0/30'}]}},
            'graph_time': '08Jun2021_20h15m26s_13_hosts',
            'hosts': {'count': 12},
            'networks': {'backuped': 14,
                          'count': 38,
                          'notbackuped': 24,
                          'url_link': 'https://topolograph.com/api/network/08Jun2021_20h15m26s_13_hosts'},
            'reports': {'asym_edges_pass_status': False},
            'timestamp': '2021-06-8T20:15:26.265000'}
          

    Visual difference between OSPF states. Topolograph ospf state diff

    
            
     
            
    Topolograph 2.21