Implementations

Configuration Management

OpenWISP 2 controller

OpenWISP 2 is a promising open-source wifi controller and configuration manager for embedded devices and routers running OpenWRT / LEDE.

A demonstration of its usage can be seen above.

django-netjsonconfig

interface2, wireless interface, adhoc, ssid, bssid

django-netjsonconfig is configuration manager for embedded devices, implemented as a reusable django-app which can be used as a standalone web app or integrated in a larger project using the popular django web framework.

The app makes use of the netjsonconfig library behind the scenes and allows administrators to use its features through an easy to use web interface.

The NetJSON DeviceConfiguration objects can also be edited in directly using raw JSON by entering “advanced mode”.

netjsonconfig

netjsonconfig is a network configuration management library that implements the DeviceConfiguration NetJSON type.

The library has support for OpenWRT, OpenWISP Firmware and it ships interesting features like configuration templates, variables and arbitrary file inclusion.

Routing Deamons

OLSRd2 netjsoninfo plugin

The netjsoninfo plugin for the OLSRd2 routing daemon (also known as OLSR.org Network Framework) enables OLSRd2 to produce NetJSON output.

This plugin implements the following NetJSON types:

  • NetworkRoutes
  • NetworkGraph
  • NetworkCollection

OLSRd1 netjson plugin

As of 15th of April 2016, a netjson plugin is available in the master branch of the git repository of the OLSRd1 routing daemon.

This plugin implements the following NetJSON types:

  • NetworkRoutes
  • NetworkGraph
  • NetworkCollection

PopRouting (Prince)

Prince is an open source implementation of the PopRouting Algorithm. It has been developed as a Google Summer of Code Project in collaboration with Freifunk and the University of Trento.

It fetches topology data in NetworkGraph format from the routing deamon, calculates the betweenness centrality for every node of the network and pushes back the optimized timer’s value. Currently (as of December 2016) it only supports OLSRd2 (aka OONF).

Network Topology Visualizers

netjsongraph.js

https://raw.githubusercontent.com/netjson/netjsongraph.js/master/docs/netjsongraph-default.png

netjsongraph.js is a javascript library based on the popular d3.js visualization framework which can be used to visualize NetJSON NetworkGraph objects.

MeshNetSimulator

https://raw.githubusercontent.com/mwarning/MeshnetSimulator/master/docs/screenshot.png

MeshNetSimulator is a simulator for sketching mesh routing algorithms. Supported is the import and export of mesh network topologies via the NetJSON format. The MeshNetSimulator also serves as an editor to change loaded networks and create new network structures.

BGP aspath-graph

link up, link down

aspath-graph is a python library that converts BGP ASPATHs and converts them to NetJSON NetworkGraph so they can be viewed with netjsongraph.js.

Network Topology Monitoring

openwisp-network-topology

OpenWISP Network Topology

OpenWISP Network Topology is the module of the OpenWISP designed to collect, store and visualize network topology data.

Prominent features of this module are:

  • Show information about links and nodes, allowing to add custom properties to nodes and links.
  • Allows collecting information by receiving data via an HTTP API or by fetching the data from a URL.
  • It allows to receive information from multiple nodes to avoid single points of failures and to know if the network was split in multiple parts.
  • It allows to visualize previous states of the network: from days to weeks or even years.
  • Detects and shows links that are failing.
  • Show the last time a link changed its status (eg: down since 3 days)
  • It can be extended to implement custom network topology monitoring solutions eg: it can be programmed to perform actions when the status of the network changes

This implementation has an HTTP API that is able to produce NetworkGraph and NetworkCollection objects, as well as consuming and storing incoming NetworkGraph objects sent in the payload of a POST HTTP request.

This web app uses two other NetJSON implementations behind the scenes: netjsongraph.js and netdiff.

netdiff

netdiff is a simple python library that acts as an abstraction layer for parsing different network topology formats of open source dynamic routing protocols and is also able to detect changes topology changes (added links, removed links, change in metrics).

It is able to produce and consume the NetworkGraph NetJSON type.

Device Monitoring

openwisp-monitoring

OpenWISP Monitoring

OpenWISP Monitoring is the module of the OpenWISP designed to collect, store and visualize network topology data.

Prominent features of this module are:

  • Collects and displays device status information like uptime, RAM status, CPU load averages, Interface properties and addresses, WiFi interface status and associated clients, Neighbors information, DHCP Leases, Disk/Flash status
  • Collection of monitoring information in a timeseries database.
  • Monitoring charts for uptime, packet loss, round trip time (latency), associated wifi clients, interface traffic, RAM usage, CPU load, flash/disk usage
  • Charts can be viewed at resolutions of 1 day, 3 days, a week, a month and a year
  • Configurable alerts
  • CSV Export of monitoring data
  • Possibility to configure additional Metrics and Charts
  • Extensible active check system: it’s possible to write additional checks that are run periodically using python classes
  • API to retrieve the chart metrics and status information of each device. You can read more about it in OpenWISP Monitoring docs.
Device Monitoring data in NetJSON format

Lua Monitoring contains the scripts used to collect data in NetJSON format from OpenWRT and pass the same to the monitoring module.

netengine-utils

netengine-utils: utilities for parsing the output from ifconfig, iwconfig.