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_OFPBMC_BAD_FIELD (Bad or unsupported match parameter in the flow)

OFPERR_OFPBAC_BAD_TYPE (Bad or unsupported action in the flow)


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.


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.