Reference Guide
Table Of Contents
- 1 Introduction
- 2 Establishing Your Test and Development Environments
- 3 Developing Applications
- Introduction
- Authentication
- REST API
- Audit Logging
- Alert Logging
- Configuration
- High Availability
- OpenFlow
- Metrics Framework
- GUI
- SKI Framework - Overview
- SKI Framework - Navigation Tree
- SKI Framework - Hash Navigation
- SKI Framework - View Life-Cycle
- SKI Framework - Live Reference Application
- UI Extension
- Introduction
- Controller Teaming
- Distributed Coordination Service
- Persistence
- Backup and Restore
- Device Driver Framework
- 4 Application Security
- 5 Including Debian Packages with Applications
- 6 Sample Application
- Application Description
- Creating Application Development Workspace
- Application Generator (Automatic Workspace Creation)
- Creating Eclipse Projects
- Updating Project Dependencies
- Building the Application
- Installing the Application
- Application Code
- 7 Testing Applications
- 8 Built-In Applications
- Appendix A
- Appendix B
- Bibliography
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 Controller—listens for connections from, and maintains state information about,
OpenFlow switches (datapaths).
Packet Sequencer—listens for Packet-In messages, orchestrates the processing and
subsequent transmission of Packet-Out replies.
Flow Tracker—provides 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