All Projects → afourmy → Pynms

afourmy / Pynms

Licence: gpl-3.0
A vendor-agnostic NMS for carrier-grade network simulation and automation

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Pynms

Napalm Salt
Modules for event-driven network automation and orchestration using Salt
Stars: ✭ 116 (+58.9%)
Mutual labels:  automation, yaml, network, jinja2
Bash Toolkit
Este proyecto esá destinado a ayudar a los sysadmin
Stars: ✭ 13 (-82.19%)
Mutual labels:  automation, network, networking
Exscript
A Python module making Telnet and SSH easy
Stars: ✭ 337 (+361.64%)
Mutual labels:  automation, network, networking
Xdp
Package xdp allows one to use XDP sockets from the Go programming language.
Stars: ✭ 36 (-50.68%)
Mutual labels:  network, networking, network-programming
Workbase
Grakn Workbase (Knowledge IDE)
Stars: ✭ 106 (+45.21%)
Mutual labels:  network, network-visualization, graph-visualization
Diffios
Cisco IOS diff tool
Stars: ✭ 23 (-68.49%)
Mutual labels:  automation, network, networking
Metta
An information security preparedness tool to do adversarial simulation.
Stars: ✭ 867 (+1087.67%)
Mutual labels:  yaml, network, networking
Td4a
Template designer for automation
Stars: ✭ 139 (+90.41%)
Mutual labels:  automation, network, jinja2
Game Networking Resources
A Curated List of Game Network Programming Resources
Stars: ✭ 4,208 (+5664.38%)
Mutual labels:  network, networking, network-programming
Ubernet
Flexible networking library for Unity
Stars: ✭ 10 (-86.3%)
Mutual labels:  networking, network-programming
Home Assistant Config
Home Assistant config files, rewritten to use the latest features, 100+ documented automations, automatically generated ToC 🏠 🤖
Stars: ✭ 926 (+1168.49%)
Mutual labels:  automation, yaml
Libzmq
ZeroMQ core engine in C++, implements ZMTP/3.1
Stars: ✭ 7,418 (+10061.64%)
Mutual labels:  network, networking
Homeassistant
Example Home Assistant Configs
Stars: ✭ 846 (+1058.9%)
Mutual labels:  automation, yaml
Librg
🚀 Making multi-player gamedev simpler since 2017
Stars: ✭ 813 (+1013.7%)
Mutual labels:  network, networking
Kafka Specs
Tool to ease and automate Apache Kafka cluster configuration management
Stars: ✭ 36 (-50.68%)
Mutual labels:  automation, yaml
Dratini
Dratini is a neat network abstraction layer.
Stars: ✭ 38 (-47.95%)
Mutual labels:  network, networking
Ineter
Fast Java library for working with IP addresses, ranges, and subnets
Stars: ✭ 39 (-46.58%)
Mutual labels:  network, networking
React Native Netinfo
React Native Network Info API for Android & iOS
Stars: ✭ 1,049 (+1336.99%)
Mutual labels:  network, networking
Pnet
High level Java network library
Stars: ✭ 49 (-32.88%)
Mutual labels:  network, networking
Cisco ios
Ansible Network Cisco IOS Provider Role
Stars: ✭ 72 (-1.37%)
Mutual labels:  automation, network

Introduction

pyNMS is a network visualization, simulation and automation software. Check out eNMS, the new version of pyNMS designed for graphical network automation

pyNMS

Features

Network GIS visualization

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.

Network GIS visualization

Export to Google Earth

Networks can be exported as a .KML file to be displayed on Google Earth, with the same icons and link colors as in pyNMS.

Google Earth

Network algorithmic visualization

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

Network force-based visualization

Saving and import/export

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.

Import and export a project (Excel / YAML)

Embedded SSH client

pyNMS uses PuTTY to automatically establish an SSH connection to any SSH-enabled device (router, switch, server, etc).

SSH connection

Send Jinja2 scripts to any SSH-enabled device

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.

Send jinja2 script via SSH with netmiko

Interface to NAPALM

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.

Configuration automation with NAPALM and Jinja2 scripting

Searching objects

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.

Searching objects

Display control

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.

Display

Site system

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.

Site view

Autonomous Systems

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.

AS Management

Routing simulation

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.

Display

Capacity planning

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.

Capacity planning

Failure simulation

It is possible to simulate the failure of one or several devices and see how it impacts the network routing and dimensioning.

Failure simulation

Advanced algorithms

Shortest path algorithms

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)

Transportation problem

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

Maximum-flow algorithms

Four methods were implemented to solve the maximum flow problem:

  • Ford-Fulkerson algorithm
  • Edmond-Karps algorithm
  • Dinic algorithm
  • Linear programming with GLPK

Minimum-cost flow algorithms

Two methods to solve the minimum-cost flow problem:

  • Linear programming with GLPK
  • Cycle-canceling algorithm (~ Klein algorithm)

Shortest link-disjoint paths algorithms

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

Wavelength Assignment Problem

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.

Getting started

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

Credits

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)

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].