Programming flow errors
When programming flows via a controller, error messages may be returned based on implementation restrictions in the OpenFlow switch. Examples relevant to OpenFlow 1.3 include:
Table 0 restrictions
Table 0, a read-only table, in the OpenFLow 1.3 multiple pipeline represents the start of the pipeline.
IP control table restrictions
The following may have caused the error conditions for Table 50:
Table-miss rule is read-only.
Only unicast IP addresses can be used as match parameters in a flow.
Only “Goto” instruction is supported by this table.
Flow with invalid VLAN match parameter is not allowed. A VLAN that does not exist on the switch is considered invalid.
Possible errors returned to the controller:
OFPERR_OFPMFC_EPERM |
OFPERR_OFPFMFC_TABLE_FULL |
OFPERR_OFPBMC_BAD_FIELD (Bad or unsupported match parameter in the flow) |
OFPERR_OFPBAC_BAD_TYPE (Bad or unsupported action in the flow) |
OFPERR_OFPBIC_BAD_TABLE_ID |
OFPERR_OFPFMFC_UNKNOWN (Any internal system error) |
Policy engine table restrictions
Error conditions for Table 100, 101, or 102 may result from the following:
In Aggregate mode, an Output-Port action is allowed only if the flow has VLAN as a match field or has as a Modify-VLAN action specified.
Modify VLAN-PCP and P-ToS are the only Set-field actions allowed along with Output:NORMAL action.
OpenFlow V1.0 instance
OpenFlow 1.0 exposes a single table to the controller.
The action of the default table-miss rule for such an instance is "Goto Controller"
.
OpenFlow 1.3 instance
OpenFlow 1.3 instance exposes a multi-table model. For every table, the action of the default table-miss rule is “DROP”. The controller must appropriately modify the table-miss rule for every table, for traffic to traverse the multi-table pipeline.
Example
Consider the table model in standard mode comprised of tables 0, 100, 200-201-202-203:
If a rule is programed into table 200 that permits traffic, then unless the default “table-miss rule” for table 100 is modified, traffic does not pass to table 200.
If the default table-miss rule of table 100 is modified with the action given as “Gototable 200”, traffic proceeds to table 200. A table-miss rule must be programmed similarly for table 200, and so on.
A table-miss rule is a flow with priority of 0 and all match fields wild-carded.