Google Summer of Code 2019 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.

Read our GSoC Quick Start!

General suggestions and warnings

Dockerization of OpenWISP 2

Languages & technologies used: Python, Bash, Docker, Docker Compose, OpenVPN.

The current automated deployment procedure for OpenWISP 2 is based on Ansible and has served us well until today but has some limitations that make it unsuited for more complex deployments that need horizontal scaling, custom setups and easily replicable deployments.

This project idea aims to develop an automated deployment procedure based on Docker and Docker Compose, mixing in also other technologies like Python and Shell scripts to glue together all the pieces needed to achieve it.

We also aim to provide a fully working OpenWISP instance that includes a management VPN (based on OpenVPN) that works out of the box and is pre-configured in OpenWISP.

Keep in mind that some parts of some OpenWISP may need to be changed to make the dockerization easier, so if you want to work on this project you must be familiar with changing the internals of OpenWISP modules.

Feel free to suggest some tools or technologies to solve specific problems if you think it's appropriate and would be beneficial, keeping in mind that we want to keep things as simple as possible.

Measurable outcomes:

React based WiFi Login Page with Auto-Login Feature

Languages & technologies used: ReactJS, NodeJS, HTML5, CSS and Javascript ES6 for the login page app, Python and Django to edit django-freeradius and openwisp-radius.

WiFi services most often make use of a login page (a.k.a captive page) that is used to allow users to authenticate, sign up and know more about the WiFi service they are using.

A few years ago we developed a configurable login page that is configured and built via ansible: ansible-freeitaliawifi-login-page

In this project idea we want to use that work as a base to improve upon that concept and integrate the result in the official OpenWISP toolset.

While using the current login page we encountered limitations that we aim to overcome with a different solution that will allow us to achieve more advanced features and more maintenability.

To achieve the goals of this project some small modifications to django-freeradius/openwisp-radius will be needed, so we encourage students interested in this project idea to become familiar with those two modules of OpenWISP.

Feel free to suggest some tools or technologies to solve specific problems if you think it's appropriate and would be beneficial, keeping in mind that we want to keep things as simple as possible.

Measurable outcomes:

OpenWISP Template Sharing & Template Library

Languages & technologies used: Python and Django on the OpenWISP side, ReactJS, NodeJS, Javascript ES6, HTML5 and CSS for the template library.

The goal of this project idea is to implement features that will allow templates to be shared across different OpenWISP instances, as well as allow templates to be collected in a template library, one of which will be published and linked from the openwisp website.

Measurable outcomes:

netengine: pull monitoring info from network devices

Languages & technologies used: python, NetJSON, SNMP, HTTP, OpenWRT, Linux.

Netengine is a python library that aims to provide a single API to extract common information from network devices using different protocols (eg: SNMP, SSH, HTTP) and different firwmares (eg: OpenWRT, AirOS).

The library kinda worked but was not brought to production level work and since OpenWISP 2 is going to have a monitoring system soon, wa want to rewrite this library to bring its implementation to production level.

NOTE: backward compatibility does not have to be maintained we can freely change and improve the API and internal structure of the library if we think the change is going to improve the quality of the implementation.

WARNING: to work on this project you need an AirOS device; OpenWRT can be installed in a virtual box VM, but AirOS cannot (at least not as easily). If you don't have an AirOS device compatible with the latest version and you do not indend to buy one you cannot work on this project.
If it ever happens that you get accepted but you fail to buy an AirOS device, you will be failed.

Measurable outcomes:

NOTE: this is one of those projects that sounds easy but is not.

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 and a bit of python and django in the last phase.

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.

We aim at building something like mesh viewer with the difference that this is a library and not an application.
We want to give developers the possibility to implement features like those of mesh-viewer in their application without reinventing the weel BUT we also want to integrate these features in OpenWISP 2, infact we are already using the current netjsongraph.js version in our network topology module, for more information see django-netjsongraph (which is the base module wrapped by openwisp-network-topology).

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 networking software. 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 OpenWRT, the two linux distributions commonly used with OpenWISP.

In this project the student will have to develop ubus API extensions that allow retrieving monitoring informatio in NetJSON format (NetJSON DeviceMonitoring) from ubus.

Measurable outcomes:

PfSense backend for OpenWISP 2

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

Implement a PfSense backend in netjsonconfig.

Measurable 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!