[ovs-dev] [PATCH] DESIGN: Describe principles of in-band control.

Ben Pfaff blp at nicira.com
Fri Apr 20 21:30:13 UTC 2012


These principles are drawn from an email I sent to the openflow-spec list
long ago.

Signed-off-by: Ben Pfaff <blp at nicira.com>
---
 DESIGN |  160 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 144 insertions(+), 16 deletions(-)

diff --git a/DESIGN b/DESIGN
index ec29e39..11b052c 100644
--- a/DESIGN
+++ b/DESIGN
@@ -232,22 +232,150 @@ vSwitch doesn't process jumbograms.
 In-Band Control
 ===============
 
-In-band control allows a single network to be used for OpenFlow traffic and
-other data traffic.  See ovs-vswitchd.conf.db(5) for a description of
-configuring in-band control.
-
-This comment is an attempt to describe how in-band control works at a
-wire- and implementation-level.  Correctly implementing in-band
-control has proven difficult due to its many subtleties, and has thus
-gone through many iterations.  Please read through and understand the
-reasoning behind the chosen rules before making modifications.
-
-In Open vSwitch, in-band control is implemented as "hidden" flows (in that
-they are not visible through OpenFlow) and at a higher priority than
-wildcarded flows can be set up by through OpenFlow.  This is done so that
-the OpenFlow controller cannot interfere with them and possibly break
-connectivity with its switches.  It is possible to see all flows, including
-in-band ones, with the ovs-appctl "bridge/dump-flows" command.
+Motivation
+----------
+
+An OpenFlow switch must establish and maintain a TCP network
+connection to its controller.  There are two basic ways to categorize
+the network that this connection traverses: either it is completely
+separate from the one that the switch is otherwise controlling, or its
+path may overlap the network that the switch controls.  We call the
+former case "out-of-band control", the latter case "in-band control".
+
+Out-of-band control has the following benefits:
+
+    - Simplicity: Out-of-band control slightly simplifies the switch
+      implementation.
+
+    - Reliability: Excessive switch traffic volume cannot interfere
+      with control traffic.
+
+    - Integrity: Machines not on the control network cannot
+      impersonate a switch or a controller.
+
+    - Confidentiality: Machines not on the control network cannot
+      snoop on control traffic.
+
+In-band control, on the other hand, has the following advantages:
+
+    - No dedicated port: There is no need to dedicate a physical
+      switch port to control, which is important on switches that have
+      few ports (e.g. wireless routers, low-end embedded platforms).
+
+    - No dedicated network: There is no need to build and maintain a
+      separate control network.  This is important in many
+      environments because it reduces proliferation of switches and
+      wiring.
+
+Open vSwitch supports both out-of-band and in-band control.  This
+section describes the principles behind in-band control.  See the
+description of the Controller table in ovs-vswitchd.conf.db(5) to
+configure OVS for in-band control.
+
+Principles
+----------
+
+The fundamental principle of in-band control is that an OpenFlow
+switch must recognize and switch control traffic without involving the
+OpenFlow controller.  All the details of implementing in-band control
+are special cases of this principle.
+
+The rationale for this principle is simple.  If the switch does not
+handle in-band control traffic itself, then it will be caught in a
+contradiction: it must contact the controller, but it cannot, because
+only the controller can set up the flows that are needed to contact
+the controller.
+
+The following points describe important special cases of this
+principle.
+
+   In-band control must be implemented regardless of whether the
+   switch is connected.
+
+      It is tempting to implement the in-band control rules only when
+      the switch is not connected to the controller, using the
+      reasoning that the controller should have complete control once
+      it has established a connection with the switch.
+
+      This does not work in practice.  Consider the case where the
+      switch is connected to the controller.  Occasionally it can
+      happen that the controller forgets or otherwise needs to obtain
+      the MAC address of the switch.  To do so, the controller sends a
+      broadcast ARP request.  A switch that implements the in-band
+      control rules only when it is disconnected will then send an
+      OFPT_PACKET_IN message up to the controller.  The controller
+      will be unable to respond, because it does not know the MAC
+      address of the switch.  This is a deadlock situation that can
+      only be resolved by the switch noticing that its connection to
+      the controller has hung and reconnecting.
+
+   In-band control must override flows set up by the controller.
+
+      It is reasonable to assume that flows set up by the OpenFlow
+      controller should take precedence over in-band control, on the basis
+      that the controller should be in charge of the switch.
+
+      Again, this does not work in practice.  Reasonable controller
+      implementations may set up a "last resort" fallback rule that
+      wildcards every field and, e.g., sends it up to the controller or
+      discards it.  If a controller does that, then it will isolate itself
+      from the switch.
+
+   The switch must recognize all control traffic.
+
+      The fundamental principle of in-band control states, in part, that a
+      switch must recognize control traffic without involving the OpenFlow
+      controller.  More specifically, the switch must recognize *all*
+      control traffic.  "False negatives", that is, packets that
+      constitute control traffic but that the switch does not recognize as
+      control traffic, lead to control traffic storms.
+
+      Consider an OpenFlow switch that only recognizes control packets
+      sent to or from that switch.  Now suppose that two switches of this
+      type, named A and B, are connected to ports on an Ethernet hub (not
+      a switch) and that an OpenFlow controller is connected to a third
+      hub port.  In this setup, control traffic sent by switch A will be
+      seen by switch B, which will send it to the controller as part of an
+      OFPT_PACKET_IN message.  Switch A will then see the OFPT_PACKET_IN
+      message's packet, re-encapsulate it in another OFPT_PACKET_IN, and
+      send it to the controller.  Switch B will then see that
+      OFPT_PACKET_IN, and so on in an infinite loop.
+
+      Incidentally, the consequences of "false positives", where
+      packets that are not control traffic are nevertheless recognized
+      as control traffic, are much less severe.  The controller will
+      not be able to control their behavior, but the network will
+      remain in working order.  False positives do constitute a
+      security problem.
+
+   The switch should use echo-requests to detect disconnection.
+
+      TCP will notice that a connection has hung, but this can take a
+      considerable amount of time.  For example, with default settings
+      the Linux kernel TCP implementation will retransmit for between
+      13 and 30 minutes, depending on the connection's retransmission
+      timeout, according to kernel documentation.  This is far too
+      long for a switch to be disconnected, so an OpenFlow switch
+      should implement its own connection timeout.  OpenFlow
+      OFPT_ECHO_REQUEST messages are the best way to do this, since
+      they test the OpenFlow connection itself.
+
+Implementation
+--------------
+
+This section describes how Open vSwitch implements in-band control.
+Correctly implementing in-band control has proven difficult due to its
+many subtleties, and has thus gone through many iterations.  Please
+read through and understand the reasoning behind the chosen rules
+before making modifications.
+
+Open vSwitch implements in-band control as "hidden" flows, that is,
+flows that are not visible through OpenFlow, and at a higher priority
+than wildcarded flows can be set up by through OpenFlow.  This is done
+so that the OpenFlow controller cannot interfere with them and
+possibly break connectivity with its switches.  It is possible to see
+all flows, including in-band ones, with the ovs-appctl
+"bridge/dump-flows" command.
 
 The Open vSwitch implementation of in-band control can hide traffic to
 arbitrary "remotes", where each remote is one TCP port on one IP address.
-- 
1.7.2.5




More information about the dev mailing list