Google Summer of Code 2017 Idea List

Do you want to apply with us? We have a page that describes how to increase your chances of success. Please read it carefully.

Get started!

OpenWISP 2 Network Topology

Languages & technologies used: python, django, django-rest-framework, javascript, netjson.

One of the use case scenarios of OpenWISP 2 is mesh networking.
In these scenarios being able to collect and visualize topology information is crucial.

The basic work to implement this feature has been already done, read "Network Topology Visualizer: django-netjsongraph" to know more details.

This project idea consists in pulling django-netjsongraph in OpenWISP 2 and adding new features on top of it, in a similar way as the package openwisp-controller pulls in django-netjsonconfig and adds features to it.

To work on this idea, the student will have to create a new django reusable app as well as improve existing components like django-netjsongraph, netdiff and netjsongraph.js.

The new app will be named openwisp-network-topology and must have a code structure similar to the wrapper django apps already shipped with OpenWISP 2: openwisp-controller, openwisp-users.

This app, in substance, will be a web interface to setup the collection of network topology data from mesh networks as well as a mesh network visualizer and very basic monitoring system.

Measurable outcomes:

Ansible plugin for the netjsonconfig library

Languages & technologies used: python, ansible.

Ansible is an IT automation tool that has been recently gaining popularity also in the OpenWrt world.

We want to implement an ansible plugin that integrates netjsonconfig and allows using its two most interesting features, that is templates and context, in ansible.

It should be possible to define configuration templates, assign them to specific playbooks and define specific configurations for hosts.

The configuration format format used by netjsonconfig is NetJSON DeviceConfiguration, but a YAML conversion of NetJSON would be good as well. Support for both would be preferred.

Measurable outcomes:

netjsongraph.js: canvas and geographic data

Languages & technologies used: javascript, ES6, CSS, netjson.

netjsongraph.js is a javascript library based on d3 that allows visualization of NetJSON NetworkGraph objects.

The library uses SVG for visualization, which can be quite slow when many elements are shown, therefore we would like to try switching to canvas. We also need an optional mode in which the network is displayed on a map.

Measurable outcomes:

Implement NetJSON output in ubus (OpenWrt/LEDE)

NetJSON is emerging as a common format to exchange configuration and monitoring information from network devices. Year after year it's becoming easier to achieve interoperability between different software packages for community networks. Now is time to start implementing NetJSON in a lower level of the stack and the next natural step in that direction is to implement it in ubus (OpenWrt micro bus architecture), which is included by default in LEDE and OpenWrt, the two linux distributions commonly used with OpenWISP.

In this project the student will have to develop ubus API extensions that allow retrieving two NetJSON object types: DeviceConfiguration and DeviceMonitoring.

Measurable outcomes:

AirOS backend for OpenWISP 2

Languages & technologies used: python, AirOS, json-schema, netjson.

Implement an AirOS backend in netjsonconfig.

Measurable outcomes:

Raspbian backend for OpenWISP 2

Languages & technologies used: python, raspberry pi, debian, json-schema, netjson.

Implement a Raspbian backend in netjsonconfig.

Measurable outcomes:

PfSense backend for OpenWISP 2

Languages & technologies used: python, pfsense, json-schema, netjson.

Implement a PfSense backend in netjsonconfig.

Measurable outcomes:

netjsonconfig backward conversion

Languages & technologies used: python, json-schema, netjson.

As of today, netjsonconfig is only able to generate a native router configuration (eg: OpenWrt) from a NetJSON DeviceConfiguration object and not vice versa.

We want to add the backward conversion process into the library.

This project will require a thoughtful design, probably involving some serialization and deserialization mechanism.

Measurable outcomes:

django-radius: web interface for freeradius

Languages & technologies used: python, django, freeradius, django-rest-framework.

One of the most important features missing in OpenWISP 2 is the AAA (Authorization, Authenticatio and Accounting), which in OpenWISP 1 is implemented with OpenWISP User Management System from now on (OWUMS).

OWUMS is implemented in ruby on rails and suffers the same limitations that brought us to develop OpenWISP 2: monolithic, hard to extend without changing the core code, hard to maintain, hard to reuse in different contexts than the ones for which it was specifically designed.

For these reasons, in this project we aim to reimplement the basic, "core" features of OWUMS in a new lightweight django reusable app so it can fit with the emergent OpenWISP 2 ecosystem.

The app must have a code structure similar to the core django apps of OpenWISP 2: django-netjsonconfig, django-x509.

This app, in substance, will be a web interface to manage a freeradius database, with an additional RESTful API (using django REST framework) that will be used to retrieve session data from freeradius and to allow new users to register via third party apps.

Measurable outcomes:

Javascript based configuration UI

Languages & technologies used: javascript, css, json-schema, netjson.

The configuration editor present in OpenWISP 2 is built with jsoneditor, a JSON-Schema compatible UI generator that builds a UI from the NetJSON DeviceConfiguration JSON-schema.

This solution has been a first step toward a configuration UI but it's not the best we can achieve.

We want to explore the possibility of using alternative solutions. These are our needs and measureable outcomes:

Apply with us

Do you want to apply with us? We have a page that describes how to increase your chances of success. Please read it carefully.

Get started!