The OpenFlow specifications describe an abstract packet processing pipeline and a protocol interface for manipulating that pipeline. However, most software developers really care about the underlying data model. While the OpenFlow specifications do not clearly outline the data model, it is present, and is an integral part of any OpenFlow device whether data plane, switch-agent, controller, or application. The OpenFlow data model is a set of relational structures that describe the capabilities, configuration state, and statistics for each OpenFlow abstraction. We present a version agnostic data model that is segmented by these three views:
- Each abstraction has a set of capabilities that describe possible behaviors. With subsequent versions of OpenFlow most capabilities are optional. Therefore applications must interrogate a switch on its capabilities before blindly assuming certain configurations are possible. This view of the data model presents the resulting capabilities of a specific switch.
- Each abstraction has configuration state that governs how the abstraction interacts with packets. Configuration state may be read or written to determine existing configurations or to update a running configuration.
- Finally, abstractions sometimes have the ability to record statistics about their behavior. If these capabilities are supported by a target switch, then the associated abstraction statistics are readable from the statistics view of the data model.