SNMP support for OpenWISP Monitoring: GSoC 2021 Final Project Report

About OpenWISP

Importance of this project:

OpenWISP is already pretty good at collecting monitoring information on OpenWRT. But, in the real world, not all devices would run OpenWRT, and therefore, support needs to be added for other backends.
With OpenWRT, we use the Monitoring Agent to collect information. However, with some proprietary firmware, it’s not possible to install this agent on the device. Many manufacturers provide SNMP agents which makes it possible to communicate with the device without installing any package on it. The entire project is based on adding functionality to OpenWISP to alternatively use SNMP to collect monitoring information.

Project Overview

The project is divided across 3 pre-existing repositories.

  • Netengine: It is a lightweight library written in python that aims to provide a single API to extract common information from network devices with different firwmare (eg: OpenWRT, AirOS).
  • OpenWISP Monitoring: It is a part of the OpenWISP ecosystem which provides monitoring information for devices in a network by the means of charts and metrics.
  • OpenWISP Controller: It is also a crucial part of the OpenWISP ecosystem that provides a means to connect and communicate with devices over a network.

Major Development Milestones

Mocking Unit Tests, Github Actions CI

Netengine’s Github CI Build

NetJSON Compliance for Netengine

A glimpse of data returned by Netengine

Support for SNMP Credentials, Editable Management IP

SNMP Credentials feature
Editable IP feature

SNMP Device Monitoring Check

OpenWISP Monitoring in action

Summary

To summarize the outcomes of the project, we achieved the following goals:

  • Revamp the OpenWRT backend of netengine, making it compliant with NetJSON DeviceMonitoring specification
  • Revamp the backend for Ubiquiti making it compliant with NetJSON DeviceMonitoring
  • Change tests to use mocks (unittest.mock)
  • Port code to python >= 3.7
  • Create a test build on github actions
  • Update docs to reflect the changes introduced in this project
  • Remove any code not being used anymore by the new implementation
  • Modify OpenWISP Controller to allow setting the management IP from the web UI
  • Add an SNMP check in OpenWISP Monitoring that pulls the monitoring information and creates the device status and charts

The Experience

This summer was packed with learning. I got to sharpen my skills with python, and learn some new concepts of OpenWRT and networking.
It was a pleasure to work under the guidance and support of my mentors, Federico Capoano and Gagan Deep. I would like to extend my humble gratitude to my mentors without whom my project wouldn’t be possible. Not only did they help me with the development process, but their support was also extended out to the real world. They provided two devices for me to test my code, about which I posted a while back:

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store