Modern SDN Stack

The SDN paradigm began with the development of the NOX controller and the OpenFlow forwarding specification. NOX's programming model was based on OpenFlow messages; each incoming OpenFlow message was a NOX event. Thus, "applications" (that is, control programs written on top of NOX) must deal with each of these OpenFlow messages. There has been some research on how to refine this programming model (e.g., Frenetic, Nettle), but the research community is still largely confined to this basic approach.

However, it is clear (as exemplified by the ONIX controller) that there must be a better approach. The goal of this project is to develop a new model that is appropriate for modern SDN control stacks. This research effort involves three separate thrusts: abstractions, distribution, and debugging.


The first step in this process involves building the controller around a set of principled abstractions. We believe there are three key abstractions that should be core to a modern SDN stack.


In order to achieve the necessary scale and resilience, the SDN stack must be distributed. The key here is to understand more fully the consistency requirements at each level of the SDN stack and employ the appropriate coordination techniques to provide that level of consistency. The goal is to enable applications to remain ignorant of this distribution, but to provide simple "design patterns" that enable them to tolerate transient inconsistencies that arise.


The third step in developing a modern controller is providing a tool to validate the SDN stack. We are developing a debugger for this stack that detects when physical switch configurations produce behaviors that are inconsistent with the high-level configurations specified by the control program. This requires two basic pieces:

This modern SDN stack will be built on the POX controller (now under active development), and (once it is further along) will become part of the ONRC prototyping efforts.