OpenFlow 1.5 Implementation
In this implementation , onos openflow stack is updated with openflow1.5 extension . While we are updating openflow protocol, we have to think about core mechanism.
In 1.5 ; there are new enhancements .For example , flow table is added to handle egress port processing .We have to discuss how we handle this enhancements described below.
In this proposal ; firstly , we are
Updating onos-loxigen with openflow 1.5 integration .
Updating openflow NBI with openflow 1.5 handling .
Creating test cases to handle openflow 1.5 scenarios
Optical Port Enhancement :
A new set of port properties adds support for Optical ports, they include fields to configure and monitor the transmit and receive frequency of a laser, as well as its power .Those new properties can be used to configure and monitor either optical port or optical ports on circuit switches.
- Optical port mod property ofp_port_mod_prop_optical to configure optical ports.
- Optical port stats property ofp_port_stats_prop_optical to monitor optical ports.
- Optical port description property ofp_port_desc_prop_optical to describe optical port capabilities.
Most flow tables have finite capacity. In previous versions of the specification, when a flow table is full, new flow entries are not inserted in the flow table and an error is returned to the controller. However, reaching that point is pretty problematic, as the controller needs time to operate on the flow table and this may cause a disruption of service. Eviction adds a mechanism enabling the switch to automatically eliminate entries of lower importance to make space for newer entries .This enables smoother degradation of behaviour when the table is full.
- Table-mod flag OFPTC_EVICTION to enable or disable eviction on a table.
- Flow-mod importance to optionally denote the importance of a flow entry for eviction.
- Table-desc eviction property ofp_table_mod_prop_eviction to describe the type of eviction performed by the switch.
- Table status event OFPT_TABLE_STATUS with reasons OFPTR_VACANCY_DOWN and OFPTR_VACANCY_UP to inform controller of vacancy change.
- Hysteresis mechanism to avoid spurious events using two threshold, vacancy_down and vacancy_up.
- Table-mod vacancy property to set vacancy thresholds, ofp_table_mod_prop_vacancy.
- Bundle control message OFPT_BUNDLE_CONTROL to create, destroy and commit bundles.
- Bundle add message OFPT_BUNDLE_ADD_MESSAGE to add an OpenFlow message into a bundle.
- Bundle error type OFPET_BUNDLE_FAILED to report bundle operation errors.
Previous versions , All packets must be Ethernet packets.Version 1.5 introduces a packet aware pipeline, enabling processing of other types of packets, such as IP packets or PPP packets . A new OXM pipeline field identifies the packet type. The packet type is defined in an extensible manner, it uses multiple namespaces defined by other standards and allows experimenter packet types.
Extensible flow entry statistics
Previous versions of the specification use a fixed structure for flow entry statistics. Version 1.5 introduces a flexible encoding, OpenFlow eXtensible Statistics (OXS), to encode any arbitrary flow entry statistics . Existing flow entry statistics are redefined as standard OXS fields.
- OXS TLV format to express flow entry statistics, based on OXM and compatible with OXM for simpler implementation.
- Express existing flow entry statistics as standard OXS fields : flow duration, flow count, packet count, byte count.
- Introduce new standard flow entry statistic : flow idle time.
- Enable arbitrary class based or experimenter based flow entry statistics.
- Use OXS in all messages carrying flow entry statistics : flow removed message, flow statistics multipart, flow aggregate multipart.
- Introduce lightweight flow statistics multipart, rename existing flow statistics as flow description.
Polling flow entry statistics can induce high overhead and utilisation for the switch. A new statistics trigger mechanism enable statistics to be automatically sent to the controller based on various statistics thresholds New instruction OFPIT_STAT_TRIGGER to define a set of statistics thresholds using OXS.
- Statistics trigger flags to allow periodic thresholds.
- Efficient batching of statistics threshold to the controller using the lightweight flow statistics multipart.
Copying Oxm Fields
The existing Set-Field action allows to set a header field or pipeline field with a static value. The new Copy-Field action allows to copy the value from one header or pipeline field into another header or pipeline field.
Enhancing group buckets
In previous versions of the specification, group operations can only change the entire set of group buckets in a group. Two new group commands enable the insertion or removal of specific group buckets without impacting the other group buckets in the group .
The previous version of the specification introduced bundle messages. A bundle is a sequence of Open- Flow modification requests from the controller that is applied as a single OpenFlow operation. The current specification extends the bundle feature, allowing:
- Scheduled bundles: a bundle commit message may include an execution time, specifying when the switch is expected to commit the bundle.
- Bundle features request: allows a controller to query a switch about its bundle capabilities, in- cluding whether it supports atomic bundles, ordered bundles, and scheduled bundles.
In previous versions of the specification, the port status message was sent to the controllers only in case the port state changed or if the configuration was changed outside OpenFlow. On the other hand, if one controller changed the configuration, no port status message was sent to the controllers. This is problematic in multi-controller setup, as other controllers can’t be notified of port configuration changes done by one controller.