Reference Guide

Table Of Contents
Maintaining information about the state of all OpenFlow ports on connected switches
Conforming to protocol rules for sending messages back to switches
To provide a modular framework for controller sub-components, facilitating extensibility of the
core controller.
To provide an elegant, yet simple, API for Network Service components and SDN
Applications to access the core services.
To provide a certain degree of “sandboxing” of applications to protect them (and the
controller itself) from ill-performing applications.
Design Choices
Some specific design choices were made to establish the underlying principles of the
implementation, to help meet the goals specified above.
The controller will use the OpenFlow Message Library to encode / decode OpenFlow
messages; all APIs will be defined in terms of OpenFlow Java rich data-types.
All OpenFlow messages and structures passed into and out of the controller must be
immutable.
Services and Applications may register as listeners to be notified of events such as:
Datapaths connecting or disconnecting
Messages received from datapaths
Packets received from datapaths (packet-in processing)
Flows being added to or removed from datapaths
The controller will decouple incoming connection events and message events from the
consumption of those events by listeners, using bounded event queues.
This will provide some level of protection for the controller and for the listeners, from an
ill-performing listener implementation.
It is up to each listener to consume events fast enough to keep pace with the rate of
arrival.
In the event that the listener is unable to do so, an out-of-band “queue-full” event will
be posted, and event queuing for that listener will be suspended.
Services and Applications will interact with the controller via the ControllerService API.
The controller will be divided into several modules, each responsible for specific tasks:
Core Controllerlistens for connections from, and maintains state information about,
OpenFlow switches (datapaths).
Packet Sequencerlistens for Packet-In messages, orchestrates the processing and
subsequent transmission of Packet-Out replies.
Flow Trackerprovides basic management of flow rules, meters, and groups.
Controller Service
The ControllerService API provides a common façade for consumers to interact with the controller.
The implementing class (ControllerManager) delegates to the appropriate sub-component or to the
core controller. The following sections briefly describe the API methods, with some code examples
see the Javadocs for more details.
34