This section describes the operations that take place when a flow is sent by the controller to be programmed in the OpenFlow
device.
The device has flow tables arranged into a pipeline. The pipeline capabilities information specifies the structure of the
pipeline, such as the number of tables/stages, what each stage is capable of doing (match/actions), and the size of each table.
When the controller sends a flow request, the OpenFlow agent verifies whether the flow can be handled by the hardware. It
compares the flow against the capabilities of the hardware that are defined when the switch is booted up. If the flow is valid,
it is then programmed in the appropriate flow table.
If the new pipeline is validated (whether the hardware can support the pipeline), it becomes the new set of capabilities that
is used to check if a flow can be installed or not.
Once the pipeline is instantiated and flows are installed, packets are forwarded by the switch. Ingress packets are matched
against flows in each flow table, until the highest-priority matching flow entry is found. Packet matching may be exact (match
all fields of the table exactly), or partial (match some or all fields, and fields with bit masks may be partially matched).
Packets may be modified or forwarded based on the configured actions. Actions can be applied at any time in the pipeline.
The action may determine the next flow table to match, the set of egress ports for the packet, and whether the packet should
be routed to the controller.