Chapters

24 OpenFlow Protocol and Flow Tables

reference-architectures
sdn
of
openflow

24.1 Start With a Packet Event

This section: Start With a Packet Event — Picture a building sensor whose packets keep taking an old route after a maintenance change.

Trace One Rule From Request to Removal

Picture a building sensor whose packets keep taking an old route after a maintenance change. The team must show which rule remained, who installed it, and when it should have ended.

A gateway means the boundary system that connects local devices to another network or service. A protocol means shared rules for exchanging messages. OpenFlow carries control messages between a controller and switches.

Send one test packet that misses a rule, install the intended path, change it, then remove it. Keep packet events, rule owner, match, action, priority, counters, time, and errors.

This runway does not prove that the whole software-defined network is correct. The deeper sections explain message roles, flow tables, pipelines, timeouts, barriers, counters, and cleanup evidence.

OpenFlow is easiest to read as a packet event that changes switch state. A packet misses, the controller evaluates intent, a rule is installed, counters move, and later packets follow the programmed path.

Start simple: trace one packet from match to action to evidence. The protocol details matter because they decide whether that trace is correct, timely, and reversible.

In 60 Seconds

OpenFlow is a southbound protocol pattern for letting an SDN controller manage switch behavior with explicit messages and flow-table entries. A switch reports events such as packet misses and port changes. The controller checks state and policy, then installs, modifies, or removes match-action rules. The switch forwards matching packets locally and can report errors and counters; a requested barrier reply confirms processing order.

24.2 Learning Objectives

This section: Learning Objectives

By the end of this chapter, you will be able to:

  • Explain the OpenFlow control-channel boundary between controller decisions and switch forwarding.
  • Trace packet-in, flow-mod, packet-out, barrier, stats, and error message roles without mixing them with user traffic.
  • Inspect a flow entry through match fields, priority, instructions, actions, counters, timeout, owner, and cleanup state.
  • Evaluate table-miss behavior, multi-table pipelines, group-style outputs, and meter-style rate controls.
  • Build a proof record for an OpenFlow-style rule change in an IoT gateway path.

24.3 Quick Check: Gateway Update Rule Proof

This section: Quick Check: Gateway Update Rule Proof

24.4 Minimum Viable Understanding

This section: Minimum Viable Understanding — OpenFlow is useful when every rule change can be traced from event to proof.

OpenFlow is useful when every rule change can be traced from event to proof.

The route in Figure 24.1 follows a switch event through controller policy to flow-mod, local match, and proof cleanup; notice where the installed rule is checked.

OpenFlow check route moves from a switch event or table miss through controller state and policy review to a flow-mod message, local match and forwarding, then proof cleanup after the rule change.
Figure 24.1: OpenFlow protocol check route

Locate Event in the diagram Figure 24.1, then compare flow-mod with proof cleanup. The three labels prevent a one-box minimum viable understanding reading. Their relevance to flow-mod is: OpenFlow protocol check route.

Use this route:

  1. Observe the event: packet miss, port change, counter update, error, or operator request.
  2. Check controller state: topology, host group, existing rules, policy, protected exceptions, and rollback.
  3. Build the message: choose flow-mod, packet-out, stats request, barrier, or no-action response.
  4. Install narrowly: set match, priority, instruction, action, table, timeout, owner, and cleanup trigger.
  5. Confirm behavior: inspect errors, a requested barrier reply, readback, counters, receiver result, and protected-path proof.

The protocol is not just a message vocabulary. It is a way to make forwarding changes traceable.

24.5 Prerequisites

This section: Prerequisites

Revisit these chapters as needed:

24.6 Protocol Boundary

This section: Protocol Boundary — OpenFlow messages travel on a control channel between controller and switch.

OpenFlow messages travel on a control channel between controller and switch. They are not the same as the data packets that the switch forwards for applications.

The practical risk in protocol boundary needs a diagram. Figure 24.2 summarizes it: OpenFlow control-channel boundary. Look at Controller beside control messages.

OpenFlow boundary showing controller messages on a control channel, switch flow tables in the data plane, user packets on forwarding ports, with acknowledgements and statistics on the control channel and service outcomes at receivers.
Figure 24.2: OpenFlow control-channel boundary

For protocol boundary, the diagram Figure 24.2 uses Controller as the entry and control messages as a later checkpoint. Finish at service outcome. The full reading conveys: OpenFlow control-channel boundary.

Boundary rules:

  • Controller messages: change, query, or confirm switch state through the control channel.
  • User packets: enter and leave forwarding ports according to local rules.
  • Switch state: includes tables, ports, buffers, counters, meters, groups, errors, and connection state.
  • Proof: requested barrier replies, switch readback, counters, errors, and receiver observations help verify whether the change worked.

Keeping this boundary clear prevents a controller-side plan from being mistaken for a data-plane result.

24.7 Message Roles

This section: Message Roles — The protocol uses different messages for different check questions.

The protocol uses different messages for different check questions.

At message roles, Message Roles Answer Different Review Questions makes the architecture testable. In Figure 24.3, Barrier frames this claim: OpenFlow message role map. Read it against Message Roles Answer Different Review Questions.

Message role map showing packet-in events, flow-mod rule changes, packet-out injection, stats request and reply, barrier confirmation, error messages, and port status.
Figure 24.3: OpenFlow message role map

The OpenFlow message role map in Figure 24.3 includes Barrier and the review question “what changed?”.

Packet-in

Switch reports an unmatched packet or configured exception to the controller with enough context for a decision.

Flow-mod

Controller adds, changes, or removes a flow entry in a target table with match, priority, action, and cleanup fields.

Packet-out

Controller asks the switch to emit a specific packet when the first packet or a control workflow needs explicit handling.

Stats

Controller asks for counters and state so a decision or audit is based on observed behavior rather than intent alone.

Barrier

Controller asks the switch to confirm earlier messages have been processed before the next step depends on them.

Error and status

Switch reports rejected messages, table pressure, port changes, and other conditions that affect forwarding proof.

24.8 Reactive Message Loop

This section: Reactive Message Loop — A reactive loop handles a new or exceptional packet by involving the controller once, then keeping later matching packets local.

A reactive loop handles a new or exceptional packet by involving the controller once, then keeping later matching packets local.

Start at Packet Arrives in Figure 24.4. Follow the table miss to packet-in, the controller check, flow-mod, and the accepted-or-error branch. Then use the six panels below to watch that rule reach the switch and the packets move.

Reactive message loop showing packet arrival, table miss and packet-in, controller policy check, flow-mod acceptance or error, local forwarding, counters, and cleanup.
Figure 24.4: Reactive OpenFlow message loop
  1. Blueprint Bina: Bina watches one packet stop at an empty route slot in the switchyard.

    A packet finds no rule in the switch.

  2. Blueprint Bina: A copy of the stopped packet travels up to Bina at the control desk.

    The switch sends the miss to the controller.

  3. Blueprint Bina: Bina compares the packet with a narrow policy map while a protected lane remains fenced off.

    The controller checks intent and protected traffic.

  4. Blueprint Bina: Bina sends one precise route stencil down into the correct switch slot.

    A matching rule is installed in the switch.

  5. Blueprint Bina: The held packet and a short line behind it move through the narrow programmed lane.

    The first and later packets follow the approved path.

  6. Blueprint Bina stands at a tabletop path diagram, touching a glowing blue box marked with a share symbol; a red outlined path and power-station equipment appear nearby.

    Counters show use and support later cleanup.

CW-0019 walkthrough: A missed packet goes to the controller for policy, a narrow rule is installed, the first packet is released, later packets use the rule, and counters support cleanup.

The panels begin with a packet that has no switch rule. The miss goes to the controller, which checks policy and protected traffic before installing a narrow rule. The first packet is released; later matches stay on the switch path. In the SVG, counters and cleanup close the loop: rule acceptance alone does not prove forwarding, and temporary state needs an end. The steps below name each message in that path.

Trace the loop:

  1. Packet arrives: the switch checks its tables in the configured order.
  2. No local match: table-miss behavior reports the event, drops it, or follows another configured fallback.
  3. Controller decides: state, policy, protected paths, and existing rules are checked.
  4. Rule is installed: the switch accepts, rejects, times out, or replaces the flow-mod.
  5. Later packets match locally: counters move and receiver behavior provides service proof.

The first event may need controller involvement. The continuing service should not require a live controller decision for every matching packet.

24.9 Switch Components

This section: Switch Components — An OpenFlow switch has one or more flow tables; multiple tables can form a pipeline.

An OpenFlow switch has one or more flow tables; multiple tables can form a pipeline.

For switch components, inspect Figure 24.5 at OpenFlow switch: controller programs, data plane forwards. Its visible premise is: OpenFlow switch components: flow tables, meters, and ports. Then compare Action.

OpenFlow switch components showing an SDN controller connected over OpenFlow and TLS to a switch secure channel, a pipeline of flow tables that match header fields and apply actions, a group table for multi-path output, a meter table for rate limiting and QoS, a packet buffer, and physical ingress and egress ports, with the ingress, lookup, and action packet flow.
Figure 24.5: OpenFlow switch components: flow tables, meters, and ports

Locate OpenFlow switch: controller programs, data plane forwards in the diagram Figure 24.5, then compare Action with Ingress / egress. The three labels prevent a one-box switch components reading. Their relevance to Action is: OpenFlow switch components: flow tables, meters, and ports.

Check these components:

  • Flow tables: ordered match-action entries, often arranged as a pipeline.
  • Group-style outputs: reusable output behavior for replication, selection, or fallback paths.
  • Meter-style controls: rate controls that can drop excess packets or remark DSCP when supported; separate forwarding actions can redirect traffic.
  • Packet buffer: temporary packet storage used when the controller must respond to an event.
  • Ports and queues: data-plane interfaces and scheduling behavior.
  • Counters and status: rule, table, port, and error proof used by operations.

The switch is not a passive wire. It executes checked local behavior and reports proof.

24.10 Flow Entry Anatomy

This section: Flow Entry Anatomy — A flow entry is traceable only when both behavior and proof fields are explicit.

A flow entry is traceable only when both behavior and proof fields are explicit.

Use Figure 24.6 to separate the fields that select a rule, the instructions that act on a packet, and the metadata that proves what happened.

An OpenFlow entry matches packet fields, applies output, drop, or modify actions, and records priority, counters, timeouts, and a cookie.
Figure 24.6: An OpenFlow flow entry pairs match fields and an action set with metadata - priority, counters, timeouts, and a controller cookie - that make the rule auditable.

Read Figure 24.6 from table, match, and priority into the instruction and action block. The first group selects which entry wins when several rules could match; the second decides whether to drop, mirror, modify, queue, meter, forward, or continue into another table. Finish with the proof fields and owner. Counters, timeouts, errors, final values, and the controller cookie make the rule traceable to an application, policy, incident, operator, or maintenance window. A packet action without that evidence may work, yet remain impossible to audit or clean up safely.

Practitioner Knowledge Check

Minimum fields:

  • Match: the packet fields, ingress context, metadata, or traffic class that define scope.
  • Priority: which rule wins when multiple rules could match.
  • Table: where the entry belongs in the processing pipeline.
  • Instruction: whether to apply actions, write actions, jump to another table, meter, or stop.
  • Action: forward or mirror via output/group actions, modify fields, select a queue, or send to the controller; an empty action set drops. Metering is an instruction.
  • Timeout: idle cleanup and hard cleanup behavior for temporary or bounded rules.
  • Owner: application, policy, incident, maintenance window, or operator that requested it.
  • Counters: matched packets, bytes, duration, errors, and final values at cleanup.

Avoid broad entries that cannot name their owner, timeout, and protected exceptions.

OpenFlow rule lookup narrated tour

Play silently with captions on provisional storyboard timing; narration audio is pending. Production pacing is not protocol time. Choose Reduced motion for a complete still at each beat.

Play the tour to open the workbench. Pause, replay a beat, or read the full transcript below. Some situations cannot be shown by this teaching model; those beats keep the existing frame and provide captions only.

Full transcript — OpenFlow rule lookup (8 beats)

B1 — Old-route investigation
You are the engineer investigating a building sensor after maintenance. Its packets still take the old route. Your team needs to identify the rule that remained in the switch. Following a packet through the rules gives you a way to explain the route it takes.

Model caption: You are investigating a building sensor's old route after maintenance. The workbench illustrates lookup, not that incident.

B2 — Local flow rules
OpenFlow carries control messages between a controller and switches. The controller programs rules; the switch uses them to handle matching packets locally. A flow table holds those rules. Each rule pairs conditions for matching a packet with instructions for handling it.

Model caption: OpenFlow carries controller–switch messages. The switch uses programmed match-and-instruction rules locally.

B3 — Example packet
Take the Overlapping Rules example. The packet uses Transmission Control Protocol, or TCP, and its destination service port is five hundred two. Its destination address is ten dot zero dot thirty dot fifty. The packet contains one hundred eighty bytes. Those fields give us a concrete rule lookup to follow.

Model caption: Example packet: TCP; destination 10.0.30.50; service port 502; 180 bytes.

B4 — Highest priority wins
In table zero, the packet matches a specific service rule at priority four hundred twenty. It also matches a broader source network rule at priority two hundred. The table selects the highest priority match. Four hundred twenty wins, and its instruction sends the packet through output port two.

Model caption: Both service and broader source rules match. Priority 420 beats 200; the selected action is Output port 2.

B5 — Output and counter
The broader rule would write a telemetry label and continue to table one. But the selected service rule ends with output, so table one is skipped for our packet. The final counter display reports one packet and one hundred eighty bytes. The selected rule determines both the action and whether processing continues.

Model caption: Output port 2 ends this lookup. Table 1 is skipped. Per-lookup counter: +1 packet, +180 bytes. The unselected broader rule would write telemetry metadata and continue.

B6 — Reporting fallback
Now take the Unknown Device preset as the exception case. No specific forwarding rule matches. In table zero, the explicit fallback rule has priority zero and sends a Packet-In, a report to the controller. That is the fallback configured for this example; the chapter also allows dropping a missed packet or using a limited default path.

Model caption: No specific rule matches. Table 0's priority-0 fallback reports Packet-In to the controller. Other configured miss policies can drop or use a limited default path.

B7 — Local decision misconception
The misconception is that every packet needs a controller decision. Our overlapping packet already has a matching local rule, so the switch selects its output itself. The unknown packet reaches a configured reporting fallback instead. A controller can program the rules without making a fresh decision for every matching packet.

Model caption: Misconception: every packet needs a controller decision. Existing local matches select their action in the switch; the unknown example uses its reporting fallback.

B8 — Winning rule takeaway
Follow the winning rule: its priority selects the instruction, and its instruction decides the packet's next step.

Model caption: Follow the winning rule: its priority selects the instruction, and its instruction decides the packet's next step.

24.11 Table-Miss Behavior

This section: Table-Miss Behavior — Every table should have defined miss behavior.

Every table should have defined miss behavior.

A checklist alone cannot settle table-miss behavior. Inspect Figure 24.7 for this relationship: OpenFlow table-miss behavior. Compare No Match with packet-in event.

OpenFlow table-miss behavior begins when a packet has no matching rule; the explicit miss action can report a packet-in event, drop the packet by default, or use a limited forwarding path.
Figure 24.7: OpenFlow table-miss behavior

The no-match case in Figure 24.7 forces an explicit action. A packet may create a packet-in report for controller review, be dropped by default, or use a limited default path. Those are different policy choices; none should be an accidental consequence of an empty table. Reporting is useful when a controller must classify an exception, but repeated misses can overload that controller. A default path needs a narrow traffic scope, while a drop needs evidence for diagnosis. Record the chosen miss action and the observed counter or event so the fallback can be tested rather than inferred from a successful rule install.

Miss behavior choices:

Report

Send a packet-in event when the controller must classify or approve the traffic before it is allowed.

Drop

Discard traffic that should not leave the table without an explicit approved match.

Default path

Forward limited traffic to a safe path when the design needs continuity for known low-risk classes.

The unsafe choice is an implicit miss that nobody checked. Make the miss action visible and test it.

24.12 Pipeline Check

This section: Pipeline Check — Multi-table pipelines make rule ownership easier to check when each table has a narrow purpose.

Multi-table pipelines make rule ownership easier to check when each table has a narrow purpose.

Make the pipeline check premise visible in the diagram Figure 24.8: OpenFlow multi-table pipeline. Begin by distinguishing Pipeline Tables Should Have Narrow Jobs from Treatment.

OpenFlow pipeline check showing classification, policy, traffic treatment, forwarding, miss behavior, and proof tracepoints across tables.
Figure 24.8: OpenFlow multi-table pipeline

Begin the diagram Figure 24.8 with Pipeline Tables Should Have Narrow Jobs. Continue through Treatment before checking Checkpoints: miss, winning rule, counters, receiver, cleanup. This path preserves the chapter’s pipeline check argument: OpenFlow multi-table pipeline.

Example table purposes:

  • Classification: identify traffic class, host group, or ingress context.
  • Policy: apply allowed, denied, protected, or approval-required decisions.
  • Treatment: set queue, meter, mirror, rewrite, or group behavior.
  • Forwarding: choose egress port, tunnel, gateway, or receiver path.
  • Proof: counters and events that prove each stage was reached.

The pipeline should make conflicts easier to inspect, not harder.

24.13 Counters and Statistics

This section: Counters and Statistics — Counters are useful proof, but they are not the full service result by themselves.

Counters are useful proof, but they are not the full service result by themselves.

Inspect Figure 24.9 to match each OpenFlow statistic with the operational question it can answer.

OpenFlow statistics collection: a controller polls switches at intervals for five statistics types - flow, port, table, queue, and meter stats - feeding traffic engineering and anomaly detection.
Figure 24.9: OpenFlow exposes five statistics types - flow, port, table, queue, and meter - that a controller polls to prove behavior and detect anomalies.

Follow the polling arrow in Figure 24.9 from the controller to five statistic families. Flow counters show which rule matched; port counters expose received, transmitted, and dropped traffic. Table statistics reveal whether the expected pipeline stage saw a packet, while queue and meter statistics describe scheduling and rate-policy behaviour. These counters support traffic engineering and anomaly review, but they do not prove that a protected message arrived fresh and usable. Pair the chosen counter movement with receiver evidence and a protected-path check before closing a service claim.

Use counters to answer:

  • Which rule matched the traffic?
  • Did the expected table stage see the packet?
  • Did the egress port counter move?
  • Did a drop, meter, or error counter change?
  • Did the receiver observe the expected traffic?
  • Did protected traffic remain unaffected?

Counters support the conclusion; receiver proof and protected-path checks complete it.

Hands-on lab · 120 min · Python 3

Simulate an OpenFlow learning controller

I have explained OpenFlow rules; now let's trace a packet miss, install a rule, and test its expiry.

Open the lab

24.14 Security and Failure Boundaries

This section: Security and Failure Boundaries — OpenFlow centralizes decision authority, so control-channel safety and failure behavior must be part of the check.

OpenFlow centralizes decision authority, so control-channel safety and failure behavior must be part of the check.

Before approving security and failure boundaries, test the depicted proposition in Figure 24.10: OpenFlow security and failure boundaries. Read from Review the Boundary Before Installing Rules toward broad or stale.

Security and failure boundary map showing controller identity, protected control channel, role permissions, rule validation, switch connection loss, stale rules, and recovery proof.
Figure 24.10: OpenFlow security and failure boundaries

For security and failure boundaries, the diagram Figure 24.10 uses Review the Boundary Before Installing Rules as the entry and broad or stale as a later checkpoint. Finish at Review every flow-mod before install. The full reading conveys: OpenFlow security and failure boundaries.

Check:

  • Controller identity: switches should accept commands only from approved controller endpoints.
  • Protected control channel: message integrity and confidentiality matter because flow-mods change forwarding behavior.
  • Role and request checks: applications should not install rules outside their scope.
  • Rule validation: broad matches, unsafe drops, and missing timeouts must be checked before installation.
  • Connection loss: existing local rules and new unmatched traffic need defined behavior when the controller is unavailable.
  • Recovery: after reconnection, controller state must reconcile with real switch tables and counters.

24.15 Build Gateway Update Paths

This section: Build Gateway Update Paths — A building gateway carries telemetry, door-control events, camera traffic, management access, and update downloads.

A building gateway carries telemetry, door-control events, camera traffic, management access, and update downloads. During a maintenance window, the controller needs to steer update traffic while preserving door-control and management paths.

Request

The application requests a temporary update path for a defined device group.

OpenFlow-style trace

  • Packet event or operator request identifies update traffic and ingress context.
  • Controller checks host group, topology, existing rules, protected exceptions, and rollback.
  • Controller sends a scoped flow-mod for update traffic only.
  • A switch can report an error; a requested barrier reply confirms processing order, and readback verifies installed state.
  • Later matching update traffic increments the expected rule and port counters.
  • Door-control and management receiver checks remain clean.
  • Cleanup removes or expires the temporary update rule and records final counters.

Proof record

Service intent: steer update traffic during a maintenance window
Protected exceptions: door-control events, telemetry, management access
Message path: packet event or operator request, controller state check, flow-mod
Rule fields: match, priority, table, instruction, action, timeout, owner
Switch proof: requested barrier reply and readback or error, rule counter, port counter
Outcome proof: update receiver result and protected-path checks
Cleanup: expiry or removal, rollback result, final table state

24.16 Proof Loop

This section: Proof Loop — The chapter’s protocol knowledge should end in a traceable proof loop.

The chapter’s protocol knowledge should end in a traceable proof loop.

The chapter needs visual evidence for proof loop. Figure 24.11 provides it: OpenFlow proof loop. Examine Event together with Message.

Compact OpenFlow proof-loop diagram links an event such as a miss or request to controller policy and topology state, then a flow-mod or stats message and proof of acknowledgement plus outcome. A cleanup record closes the loop; the drawing does not detail switch counters or receiver checks.
Figure 24.11: OpenFlow proof loop

The proof loop in Figure 24.11 begins with a miss or service request. Controller state supplies policy and topology context before a flow-mod or statistics message is sent. An acknowledgement alone proves only that a protocol step occurred; counters and the receiver outcome show whether the service took the intended path. Capture a rejection or partial change with the same request identity. Cleanup then removes or expires the temporary rule and records the final state. This closes the operational loop: the next operator can compare the event, decision, switch response, forwarding result, and cleanup instead of trusting an isolated controller log entry.

Capture:

  • Event source, reason, ingress context, and traffic class.
  • Controller state used for the decision.
  • Message type and target switch or table.
  • Flow entry fields and owner.
  • Requested barrier reply and switch readback, or an error.
  • Rule, table, and port counter movement.
  • Receiver result and protected-path checks.
  • Cleanup, rollback, and next check trigger.

24.17 Knowledge Check

This section: Knowledge Check

24.18 Check the Protocol Proof

This section: Check the Protocol Proof

24.19 Match the Message to Its Check Role

This section: Match the Message to Its Check Role

24.20 Order an OpenFlow-Style Rule Change

This section: Order an OpenFlow-Style Rule Change

24.21 Common Pitfalls

This section: Common Pitfalls

  • Confusing control messages with user traffic: packet-in and flow-mod travel on the control channel; application packets still use the forwarding plane.
  • Leaving table-miss behavior implicit: every table needs a checked miss action so unknown traffic does not drift into unsafe behavior.
  • Using broad rules without exceptions: wide matches can capture protected management, command, or safety traffic.
  • Ignoring priority and table order: correct actions can fail when another rule wins first or a packet never reaches the expected table.
  • Treating counters as complete proof: counters show matching behavior, but receiver outcomes and protected-path checks still matter.
  • Skipping reconnection check: after controller or channel recovery, switch tables and controller state must be reconciled.

24.22 The Protocol Changes State

This section: The Protocol Changes State — OpenFlow matters because it turns a controller decision into switch state.

OpenFlow matters because it turns a controller decision into switch state. The protocol message is only the start of the story; the learner should always ask what state changed, which packets now match it, and how the system proves the change stayed inside its intended boundary.

A safe OpenFlow explanation therefore connects the controller request, a requested barrier reply and switch readback or an error, the local forwarding result, the receiver outcome, and the cleanup record. Without that chain, a flow rule can look correct in the controller and still be wrong in the network.

For example, a warehouse gateway group might need a short-lived rule that steers firmware downloads away from the same uplink used by fire-door status events and operator management. The OpenFlow protocol part is the controller sending a flow-mod with explicit match fields, table, priority, action, timeout, and owner. The service part is proving that download packets matched the intended rule while fire-door and management traffic kept their protected paths.

The key distinction is state versus intent. A controller log can show that an application asked for a rule. A requested barrier reply can show that prior messages were processed; switch readback shows the installed state. Counters can show whether packets matched. Receiver proof can show whether the update service and protected services behaved correctly. The chapter's mental model should keep all four facts separate.

A useful beginner check is to read a rule as a sentence: traffic from wh-gw-17 to the update server, in table 10, at priority 420, is sent through the metered update path for 30 minutes, while door-control and management packets keep their normal rules. If that sentence cannot name the match, action, timeout, exception, and proof, the rule is not ready to release.

This sentence also gives reviewers a compact way to compare controller intent against switch state, receiver logs, and the final cleanup record.

24.23 Rule Release Record

This section: Rule Release Record — Before a rule change is released, write a short record that separates intent, installed state, observed behavior, and closure.

Before a rule change is released, write a short record that separates intent, installed state, observed behavior, and closure. This makes the protocol usable in production instead of leaving it as a sequence of controller log lines.

A practical release record for wh-gw-update would name the gateway group, update destination, ingress port or VLAN, match fields, target table, priority, meter or output action, idle timeout, hard timeout, and rollback owner. It would also name protected exceptions such as door-status, mgmt-ssh, and broker telemetry so reviewers can see what the rule must not capture.

Record Field What To Capture Why It Matters
Intent Traffic class, protected exceptions, target switch, table, priority, action, timeout, and owner. Prevents broad rules from silently capturing management, command, or safety traffic.
Install proof Flow-mod result, error result, barrier result where ordering matters, and final table entry. Separates a sent request from a switch state that was actually processed.
Behavior proof Rule counters, table counters, port counters, expected receiver result, and protected-path checks. Shows that the right packets matched locally and that the service result stayed safe.
Closure proof Expiry, explicit removal, rollback, final counters, and owner sign-off. Stops temporary protocol state from becoming permanent hidden network behavior.

After installation, the record should be updated with the flow-mod result, any error code, barrier result when ordering matters, final table entry, and before/after counters. Closure should include receiver evidence from the update service, receiver evidence from protected paths, final counter values, and the cleanup action that removed or expired the temporary entry.

With Open vSwitch, that proof often means comparing the controller's intended rule with a table dump such as ovs-ofctl dump-flows, then checking packet and byte counters before and after the maintenance window. The exact tooling can vary, but the release record should still show intended state, processed state, observed traffic, receiver result, and cleanup.

24.24 Ordering Is Correctness

This section: Ordering Is Correctness — OpenFlow-style control is stateful.

OpenFlow-style control is stateful. A controller can send several requests, but the service depends on how the switch processes them, how tables are ordered, which priority wins, whether a previous entry still matches, and whether counters prove the expected path after the change.

That is why a barrier reply, switch readback, or error is not just administrative detail. It tells the operator where the proof chain is strong and where it is still missing. A flow-mod accepted before an old broad rule is removed may still fail if the old rule has higher priority or an earlier table sends the packet elsewhere.

Use the repeated flow-entry view to compare intended controller state with the rule and evidence the switch actually holds after ordered changes.
An OpenFlow entry matches packet fields, applies output, drop, or modify actions, and records priority, counters, timeouts, and a cookie.
An OpenFlow flow entry pairs match fields and an action set with metadata - priority, counters, timeouts, and a controller cookie - that make the rule auditable.

Read @embed-flowentry-modern-20260222 from match and priority into instructions and actions, then finish at counters, timeouts, errors, and ownership. During an ordered update, compare those fields with controller intent before the change and the table state after the switch processes it. Next follow the packet through the selected tables and check receiver evidence alongside a requested barrier reply and switch readback. The final cleanup state matters too: an expired or removed maintenance rule should no longer match traffic. The change is complete only when intended rule, installed state, observed path, receiver result, and cleanup agree.

Suppose a controller removes an old ip_dst=update.example rule from table 10 and installs a narrower rule that also matches the gateway VLAN and update TCP port. If the removal is still pending, or if a table-0 jump bypasses table 10, the narrower rule can be technically present but operationally irrelevant. A barrier reply, final table dump, and matched counter movement help prove which state the switch actually used.

Timeouts are part of the same state comparison. An idle timeout cleans up entries that stop matching; a hard timeout removes an entry after a fixed interval even if traffic continues. A maintenance rule should record which timeout applies, what happens on expiry, and whether the controller reconciles switch state after reconnection. Otherwise a temporary OpenFlow action can become invisible production policy.

When the controller reconnects, the same comparison should run again. The switch may still hold rules, counters, meters, or groups that the controller no longer expects. Treat reconciliation as a protocol step, not just an operations chore.

24.25 Summary

This section: Summary — OpenFlow-style protocols let a controller manage switch behavior through explicit control-channel messages and local match-action tables.

OpenFlow-style protocols let a controller manage switch behavior through explicit control-channel messages and local match-action tables. Packet-in messages report events, flow-mod messages change rules, packet-out messages handle specific packets, stats messages return proof, and errors expose rejected requests. Strong designs define table-miss behavior, priority, pipeline stage, owner, timeout, and cleanup for each rule. The proof of success is not the message alone; it is a requested barrier reply and switch readback, local forwarding proof, counters, receiver behavior, protected-path checks, and a recorded cleanup path.

24.26 Key Takeaway

This section: Key Takeaway — OpenFlow protocol work should connect match-action rules, table behavior, counters, and controller interactions to concrete network policy.

OpenFlow protocol work should connect match-action rules, table behavior, counters, and controller interactions to concrete network policy.

24.27 See Also

This section: See Also

24.28 What’s Next

This section: What’s Next — Continue to SDN OpenFlow Challenges to check failure modes, rule-state pressure, and operations risks around OpenFlow-style control.

Continue to SDN OpenFlow Challenges to check failure modes, rule-state pressure, and operations risks around OpenFlow-style control.

Find help

3 reviewed answers.

Where should I start in a module?

Open the module page from the sidebar to see its chapters in order. Use the module map to return to a topic you need.

Modules and paths

Reviewed

What can I try when a project does not work?

Check the symptom, then work through the diagnostic steps. Keep the error message and the smallest example that reproduces it.

When you are stuck

Reviewed

How do interactive examples work?

Use the interactive guide to check how examples and simulations work before changing your project.

Interactive examples guide

Reviewed