Google Summer of Code Ideas (2017)
Statement added on 28th of February 2017
We haven’t been accepted to the GSoC 2017 but you can still apply to a few accepted organizations which are including many of our ideas in their proposals. See:
Netjsongraph.js: canvas and geographic data
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:
Rewrite the visualizer to use canvas
Add an optional map mode
Modernize javascript code organization: you may want to use some modern JS tool for building the library, you may rewrite the code in ES6, up to you
Update documentation and examples in README
Implement NetJSON DeviceMonitoring in ubus (OpenWRT/LEDE)
Implement NetJSON DeviceMonitoring output in ubus (OpenWRT/LEDE).
We need a way to retrieve a NetJSON DeviceMonitoring object directly from the command line interface.
A good way to implement this would be to do it via ubus, like nodewatcher-agent ubus API.
Measurable outcomes:
Implement a way to retrieve a NetJSON DeviceMonitoring object via ubus
Document the compilation/install process and the usage of the module on the README
Convert netengine output to NetJSON DeviceMonitoring
netengine is an abstraction layer for extracting information from network devices. It was developed prior to NetJSON and it has helped us understanding that we needed a common format like NetJSON.
We want to change the library so it can return NetJSON DeviceMonitoring output.
Measurable outcomes:
Change the JSON output to match NetJSON DeviceMonitoring
Implement mocking in tests
Add compatibility for OpenWRT Chaos Calmer, Designated Driver and LEDE
Add compatibility for AirOS 7
Update the documentation contained in the repository
Implement NetJSON NetworkGraph output in B.A.T.M.A.N. Advanced
B.A.T.M.A.N. Advanced is a layer2 routing deamon widely deployed in mesh networks.
It ships a tool called batadv-viz
that returns different output formats
that can be used to visualze the network.
We want to add NetJSON NetworkGraph output to
batadv-viz
.
Measurable outcomes:
Implement NetJSON NetworkGraph output in
batadv-viz
Follow the development conventions used in
batadv-viz
Ansible plugin for netjsonconfig
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:
Implement an ansible module that integrates netjsonconfig in ansible and allows using NetJSON DeviceConfiguration (or its YAML equivalent) to configure OpenWRT devices
Achieve a test coverage higher than 80%
Provide documentation using python-sphinx
Raspbian backend for netjsonconfig
Implement a Raspbian backend in netjsonconfig.
NetJSON DeviceConfiguration has been implemented only on OpenWRT: implementing it on other systems will help to speed up the standardization process.
Measurable outcomes:
The
Raspbian
backend must generate a configuration archive compatible with Raspbian Jessie- The
Raspbian
backend schema must cover at least the following features: general (eg: hostname)
ntp settings
network interface settings
wireless setttings
dns servers
dns search domains
static routes
files
- The
The general test coverage of the library must be kept higher than 95%
The backend must be to be documented inside the python-sphinx docs dir contained in the netjsonconfig repo
PfSense backend for netjsonconfig
Implement a PfSense backend in netjsonconfig.
NetJSON DeviceConfiguration has been implemented only on OpenWRT: implementing it on other systems will help to speed up the standardization process.
Measurable outcomes:
The
PfSense
backend must generate a configuration archive compatible with PfSense 2.2.xThe
PfSense
backend must generate a configuration archive compatible with PfSense 2.3.xThe
PfSense
backend schema must cover at least 75% of the features offered by the PfSense web interface, with particular attention to interfaces, wireless settings, vlans, firewall rules and VPNsThe general test coverage of the library must be kept higher than 95%
The backend must be to be documented inside the python-sphinx docs dir contained in the netjsonconfig repo
AirOS backend for netjsonconfig
Implement an AirOS backend in netjsonconfig.
NetJSON DeviceConfiguration has been implemented only on OpenWRT: implementing it on other systems will help to speed up the standardization process.
Measurable outcomes:
The
AirOs
backend must generate a configuration archive compatible with AirOS 6.x and AirOS 7.x, two separate classes can be created if preferredThe
AirOs
backend schema must cover at least 75% of the configuration features offered by AirOS web interface, with particular attention to interfaces, wireless settings and vlansThe general test coverage of the library must be kept higher than 95%
Both backends must be documented inside the python-sphinx docs dir contained in the netjsonconfig repo
netjsonconfig backward conversion
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:
Backward
generate()
pocess: a configuration archive must be converted to NetJSON DeviceConfiguration through the available backendsBackward
render()
process: a configuration string (eg: uci export in OpenWRT) must be converted to NetJSONThe general test coverage of the library must be kept higher than 95%
The feature must be documented in the documentation files contained in the netjsonconfig repo