Enable additional basic QoS support, without requiring a full QoS
framework. This commit defines a flow action to rewrite the DiffServ
CodePoint bits of the IP ToS field in the IP header.
Before this spec change, flow expiration messages included a duration
field for the time the flow was active. To find out the amount of time
the flow received traffic would have been much harder - the controller
would need to store a record of all flow mods it has sent, to know the
idle_timeout of this flow. Additionally, both phrases, 'time flow was
active' and 'time traffic was received' were used in the spec for the
duration field.
Now we return the idle timeout in the flow expiration message, and ensure
duration is the time the entry was present in the flow table. The hard
timeout will be obvious if it is the reason for the deletion, since the
reason field will be OFPER_HARD_TIMEOUT, and the duration will be the hard
timeout value. From the duration and the idle_timeout, we can also
compute the time the flow received traffic.
Define a CHECK_OVERLAP flag for flow mods which requires the switch to
check for conflicting entries with the same priority, i.e., those for
which at least one packet could match multiple entries.
This flags is intended to be used for debugging purposes; in the worst
case, it may require a linear check through the flow table.
Add barrier request message, which ensures that all previously received
commands are complete before executing ones past the barrier message. A
barrier reply must be sent for each barrier request.
We expect this command to be useful for testing and wireless handover
purposes.
A number of protocols such as SNMP and STP start counting ports at one. To
increase compatibility, this commit adds a requirement that OpenFlow
ingress port values start at one.
An OpenFlow hypervisor might choose to reject an OpenFlow request, but
currently has no message type defined for this error. It is not a
vendor-specific error, thus we define an _EPERM error code for each error
type.
Also remove unused, commented-out text.
The spec does not currently define how wildcard matching should behave for
flow modification (specifically DELETE and MODIFY commands) and stats.
This commit adds text to define behavior when some fields are wildcarded
and others are left exact.
When a switch receives a barrier message it must first complete all
commands sent before the barrier message before executing any commands
after it. When all commands before the Barrier message have completed,
it must send a barrier reply message back to the controller.
detection handler for table maintanance
Add a CHECK_OVERLAP flag to flow mods which requires the switch to do
the (potentially more costly) check that there doesn't already exist a
conflicting flow with the same priority. If there is one, the mod
fails and an error code is returned.
Flow expiry: Record OFPFF_SEND_FLOW_EXP flag in user data path
Previously, a switch would only notify the controller when flows expired.
Now, when a switch is told to delete flows, it sends a flow expiration
message, enabling the controller to get packet and byte counts from
deleted flows. Without this, the controller must retrieve flow statistics
and then delete the flow, during which time the counts could change. This
could also aid in debugging if multiple applications or programs
controlling the same switch are deleting each others' flows.
This commit adds a OFPER_DELETE as a choice for the reason field of a flow
expiration.