Skip to content
This repository has been archived by the owner on Nov 13, 2023. It is now read-only.

FlowVisor Project Ideas

leenheer edited this page Apr 13, 2013 · 8 revisions

This page summarizes various ideas for features and future functionality for FlowVisor. It may be used as source material for potential features for any FlowVisor developer (or motivated user!) to implement, as well as potential projects for Google Summer of Code or other mentoring programs or internships.

Google Summer of Code Information

FlowVisor is an interesting and high-impact project which is also fun to work on, and we're excited to be applying to the Google Summer Of Code (GSOC) in the hope of attracting energetic and motivated developers.

Mentoring: A participant in GSOC would choose one or more projects and be advised by a project mentor, either one of the core FlowVisor developers or another contributor to the project.

Projects: We have identified a wide variety of potential GSOC projects for FlowVisor, and the current, detailed list is available at the Ideas page on the FlowVisor wiki at http://github.com/opennetworkinglab/FlowVisor/wiki/FlowVisor-Project-Ideas

Projects are grouped by complexity/difficulty as well as whether we have starter code. The project(s) will be selected by agreement between the potential mentor(s) and participant(s), based on participant interest, experience and knowledge, as well as project impact, project difficulty, and mentor availability and interest.

General Prerequisites: In general, working on FlowVisor requires knowledge of JAVAm, some Python and a sound understanding of computer networks, operating systems, and distributed systems (preferably at the undergraduate, masters or professional level.). And of course the main prerequisites are energy, enthusiasm, and the ability and desire to use your brain, to learn, and to teach yourself by doing background research (including reading documentation, reading code, trying out ideas, and finding and consulting on-line and off-line references). And writing code and using git/github of course.

Specific prerequisites for each project are listed as well - these are the requisite skills and knowledge that you will need (or need to acquire) to actually complete the tasks for the project.

Process: GSOC projects will follow the standard FlowVisor development process.

FlowVisor GUI

FlowVisor currently slices networks but unfortunately provides no mechanism to graphically visualise the slices. Visualising slices is not as trivial as it sounds because FlowVisor slices can be defined on any L1-L4 headers and such slices do not translate naturally to a visual representation. The idea here would be to use the existing API available in FlowVisor (and possibly add some more API) and develop a FlowVisor slice visualizer which will allow an administer and visualize their slices on a web UI.

Expected Results: At the very least the project will be considered successful if the end result is a web interface displaying the various slices configured at the FlowVisor. A nice to have feature would be if interface is interactive and allows users to control their Flowvisor.

Difficulty Level: Medium

Prerequisites: JAVA, Python, JavaScript (Knowledge of D3.js would be nice)

Replace SQL DB by NOSQL DB

FlowVisor currently relies on a SQL database for storing and persisting it's configuration. This is quite complicated and requires a lot of extra code to handle all the database accesses. More importantly, handling updates to the database requires FlowVisor to update the database schema which can be limiting and error prone. Finally, the current backend requires that all request come from the same JVM and incurs a performance hit on the overall system.

The idea of this project is to replace this backend with a NoSQL storage to allow easier handling of the configuration and more flexibility in retrieving the configuration information.

Expected Results: The project will be considered successful if FlowVisor no longer depends on an SQL DB for its configuration.

Difficulty Level: Medium

Prerequisites: JAVA, SQL (preferably Derby DB)

Distinct input and output ports in flowspace entries

FlowVisor creates slices by slicing the OpenFlow header space. Currently ports are implicitly included in the FlowSpace when creating a flowspace entry via the in_port field. The idea of this project is to specifically define ports as either ingress or egress ports on a per flowspace entry basis.

Expected Results: The ability to distinguish what is a valid input port versus a valid output port.

Difficulty Level: Hard

Prerequisites: JAVA

OpenFlow Configuration and Management Protocol

FOAM is being developed at ON.Lab as a provisioning tool for OpenFlow-enabled networks. As of now, it is primarily deployed in the GENI network (http://www.geni.net/), where it allows easy creation of experimental networks over a shared infrastructure.

We believe FOAM can evolve to serve as a general-purpose orchestration tool in any large-scale OpenFlow deployment, and automate the configuration, management and provisioning over large collections of switches. To help wide-spread adoption across a wide range of vendors and systems, a standards-based approach is much preferred. As it happens, the Open Networking Foundation (https://www.opennetworking.org/) has released a standard called OF-Config, short for OpenFlow Configuration and Management Protocol.

The goal of this project is to develop the necessary interfaces and logic to handle automated discovery, configuration, management, and provisioning of OpenFlow-enabled networks. As not all switches support OF-Config out of the box (typically these have a vendor-defined configuration interface), a pluggable architecture is needed to support the widest range of switches and to facilitate future extensions.

This project involves developing a software stack to handle communication between FOAM and networking equipment, as well as an API to allow network administrators to easily acquire, monitor, and change the network's configuration. Students will be exposed to API design, database concepts, networking protocols and general open source software development. Implementation will be done preferentially in either Java or Python, but this might change depending on requirements and the student's background.

Expected Results: An implementation of the OF-CONFIG Protocol.

Difficulty Level: Hard

Prerequisites: Python, API Design

OpenStack Integration

FOAM is being developed at ON.Lab as a provisioning tool for OpenFlow-enabled networks. As of now, it is primarily deployed in the GENI network (http://www.geni.net/), where it allows easy creation of experimental networks over a shared infrastructure.

We believe FOAM can evolve to serve as a general-purpose orchestration tool in any large-scale OpenFlow deployment, and automate the configuration, management and provisioning over large collections of switches. In this context, OpenStack (http://www.openstack.org/) has gained significant traction in both research and commercial networks, where it is viewed as a unifying API for orchestration of compute, storage and networking resources. In particular, the OpenStack Networking interface, called Quantum (https://wiki.openstack.org/wiki/Quantum) is of special interest as it offers "Networking as a Service" features.

The goal of this project is to implement a OpenStack Quantum plugin for FOAM. Time permitting, further developments might include integrating compute and/or storage plugins to render FOAM as an all-encompassing orchestration tool. Students will be exposed to API design and implementation, database concepts, networking protocols and general open source software development. Implementation will be done preferentially in either Java or Python, but this might change depending on requirements and the student's background.

Expected Results: An implementation of a FOAM plugin for the OpenStack Quantum specification.

Difficulty Level: Hard

Prerequisites: Python, API Design