pyNMS is a network visualization, simulation and automation software. Check out eNMS, the new version of pyNMS designed for graphical network automation
Maps can be displayed in pyNMS to draw all network devices at their exact location (longitude and latitude), using the mercator or azimuthal orthographic projections.
Networks can be exported as a .KML file to be displayed on Google Earth, with the same icons and link colors as in pyNMS.
GIS visualization can only be done if we have all GPS coordinates: it is not always the case. Another way to visualize a network is use graph drawing algorithms to display the network. The video below shows that the network converges within a few milliseconds to a visually pleasing shape (ring, tree, hypercube).
Projects can be imported from / exported to an Excel or a YAML file. Any property can be imported, even if it does not natively exist in pyNMS: new properties are automatically created upon importing the project.
pyNMS uses PuTTY to automatically establish an SSH connection to any SSH-enabled device (router, switch, server, etc).
pyNMS uses Netmiko to send Jinja2 scripts to any device that supports SSH. Variables can be imported in a YAML file, and a script can be sent graphically to multiple devices at once with multithreading.
NAPALM is an automation framework that provides a set of functions to interact with different network device Operating Systems using a unified API. NAPALM can be used from within pyNMS to retrieve information about a device, and change the configuration. You can click on the video for a step-by-step explanation of how it works.
With the search function, the user can select a type of object and search a value for any property: all matching objects will be highlighted. Regular expressions allows for specific search like an IP subnet.
The user can select which type of device is displayed, use labels to display any property, and create graphical items like rectangles, ellipses or texts.
When network devices are located in the same building (e.g datacenters), they have the same GPS coordinates. A site displays an internal view of the building, that contains all colocated devices.
Autonomous systems can be created to keep track of which device runs which protocol (OSPF, IS-IS, BGP, etc). Autonomous systems can be divided into multiple areas.
Once an autonomous system has been created, pyNMS can automatically allocate IP and MAC addresses to all interfaces, and generate the configuration (Cisco) of the device, as well as the ARP and routing tables.
Once traffic links are created, they are routed on the physical links. The resulting traffic flow is computed for all for all interfaces. In the following example, the router load-balance the traffic on four equal-cost paths.
It is possible to simulate the failure of one or several devices and see how it impacts the network routing and dimensioning.
Four algorithms have been implemented to find the shortest path between two devices:
- Dijkstra and A* algorithm
- Bellman-Ford algorithm
- Floyd-Warshall algorithm
- Shortest path with linear programming (GLPK)
The transportation problem consists in finding the best way to carry traffic flows through the network. It has a number of variations (maximum flow, minimum-cost flow, traffic-demand constrained flow, etc).
Four methods were implemented to solve the maximum flow problem:
- Ford-Fulkerson algorithm
- Edmond-Karps algorithm
- Dinic algorithm
- Linear programming with GLPK
Two methods to solve the minimum-cost flow problem:
- Linear programming with GLPK
- Cycle-canceling algorithm (~ Klein algorithm)
Another recurrent problem in networking is to find the shortest link-disjoint paths. Four methods were implemented to find the K link-disjoint shortest paths:
- Constrained A*
- Bhandari algorithm
- Suurbale algorithm
- Linear programming with GLPK
In an optical-bypass enabled network, a wavelength can cross an optical switch without Optical-Electrical-Optical (OEO) conversion. While this is a step forward towards cheaper and "greener" networks, a trade-off is that there has to be an end-to-end "wavelength continuity": a wavelength stays the same from the source edge to the destination edge, and it cannot be used by different lightpaths on the same optical fiber.
The wavelength allocation problem consists in finding the minimum number of wavelengths that are required, and how to allocate them to lightpaths. Two methods were implemented to solve the wavelength assignment problem:
- Linear programming with GLPK
- "Largest degree first" heuristic
See SWAP if you're interested in a graphical solution to the Wavelength Assignment Problem.
The following modules are used in pyNMS:
pyQt5 (mandatory: GUI framework)
pyproj (mandatory: used for the geographical system)
xlrd, xlwt, yaml (desirable: used for saving projects)
netmiko, jinja2, NAPALM (optional: used for network automation)
numpy, cvxopt (optional: used for linear programming)
pyshp, shapely (optional: used for drawing map by importing shapefiles)
simplekml (optional: used for exporting project to Google Earth)
In order to use pyNMS, you need to run main.py.
python main.py
Netmiko: A multi-vendor library to simplify Paramiko SSH connections to network devices.
Jinja2: A modern and designer-friendly templating language for Python.
NAPALM: A library that implements a set of functions to interact with different network device Operating Systems using a unified API.
CVXOPT: A library for convex optimization.
pyshp: A library to read and write ESRI Shapefiles.
shapely: A library for the manipulation and analysis of geometric objects in the Cartesian plane.
pyproj: Python interface to PROJ4 library for cartographic transformations
simplekml: Library to generate KML files (Google Earth)