[ovs-dev] [PATCH ovn v5 12/15] ovn: Constrain supported tunnel types.

Ben Pfaff blp at nicira.com
Thu Apr 30 06:49:06 UTC 2015


From: Justin Pettit <jpettit at nicira.com>

Limit the supported tunnel types to Geneve and STT on hypervisors, and
VXLAN, Geneve, and STT on gateways.  This commit adds "DESIGN.md" that
describes the reasoning.

Signed-off-by: Justin Pettit <jpettit at nicira.com>
Signed-off-by: Ben Pfaff <blp at nicira.com>
---
 ovn/DESIGN.md                       | 45 +++++++++++++++++++++++++++++++++++++
 ovn/TODO                            |  4 ----
 ovn/automake.mk                     |  1 +
 ovn/controller/ovn-controller.8.xml |  6 +++--
 ovn/ovn-sb.ovsschema                |  4 +++-
 ovn/ovn-sb.xml                      |  5 +++--
 tutorial/ovs-sandbox                |  2 +-
 7 files changed, 57 insertions(+), 10 deletions(-)
 create mode 100644 ovn/DESIGN.md

diff --git a/ovn/DESIGN.md b/ovn/DESIGN.md
new file mode 100644
index 0000000..558d663
--- /dev/null
+++ b/ovn/DESIGN.md
@@ -0,0 +1,45 @@
+Design Decision in OVN
+======================
+
+This document describes design decisions that went into implementing
+OVN.  While we believe these to be reasonable decisions, it is
+impossible to predict how OVN will be used in all environments.
+Understanding assumptions made by OVN is critical to a successful
+deployment.  The end of this document contains contact information that
+can be used to let us know how we can make OVN more generally useful.
+
+Tunnel Encapsulations
+=====================
+
+For connecting hypervisors, the only supported tunnel encapsulations are
+Geneve and STT.  We have limited support to these encapsulations for the
+following reasons:
+
+  - They support large amounts of metadata.  In addition to specifying
+    the logical switch, we will likely want to indicate the logical
+    source port and where we are in the logical pipeline.  Geneve
+    supports a 24-bit VNI field and TLV-based extensions.  The header of
+    STT includes a 64-bit context id.
+
+  - They use randomized UDP or TCP source ports that allows efficient
+    distribution among multiple paths in environments that use ECMP in
+    their underlay.
+
+  - NICs are available that accelerate encapsulation and decapsulation.
+
+Due to its flexibility, the preferred encapsulation between hypervisors
+is Geneve.  Some environments may want to use STT for performance
+reasons until the NICs they use support hardware offload of Geneve.
+
+For connecting to gateways, the only supported tunnel encapsulations are
+VXLAN, Geneve, and STT.  While support for Geneve is becoming available
+for TOR (top-of-rack) switches, VXLAN is far more common.  Currently,
+gateways have a feature set that matches the capabilities as defined by
+the VTEP schema, so fewer bits of metadata are necessary.  In the
+future, gateways that do not support encapsulations with large amounts
+of metadata may continue to have a reduced feature set.
+
+Suggestions
+===========
+
+Suggestions to improve OVN are welcome at discuss at openvswitch.org.
diff --git a/ovn/TODO b/ovn/TODO
index 41f4d91..209a315 100644
--- a/ovn/TODO
+++ b/ovn/TODO
@@ -91,10 +91,6 @@
 
 ** ovn-controller parameters and configuration.
 
-*** Tunnel encapsulation to publish.
-
-    Default: VXLAN? Geneve?
-
 *** SSL configuration.
 
     Can probably get this from Open_vSwitch database.
diff --git a/ovn/automake.mk b/ovn/automake.mk
index 4be5381..339018a 100644
--- a/ovn/automake.mk
+++ b/ovn/automake.mk
@@ -75,6 +75,7 @@ SUFFIXES += .xml
 		--version=$(VERSION) $< > $@.tmp && mv $@.tmp $@
 
 EXTRA_DIST += \
+	ovn/DESIGN.md \
 	ovn/TODO \
 	ovn/CONTAINERS.OpenStack.md
 
diff --git a/ovn/controller/ovn-controller.8.xml b/ovn/controller/ovn-controller.8.xml
index 56900b9..c92227f 100644
--- a/ovn/controller/ovn-controller.8.xml
+++ b/ovn/controller/ovn-controller.8.xml
@@ -97,8 +97,10 @@
           <p>
             <code>external_ids:ovn-encap-type</code> specifies the
             encapsulation type that a chassis should use to connect to
-            this node.  Examples include <code>geneve</code>,
-            <code>vxlan</code>, and <code>stt</code>.
+            this node.  Supported tunnel types for connecting
+            hypervisors are <code>geneve</code> and <code>stt</code>.
+            Gateways may use <code>geneve</code>, <code>vxlan</code>,
+            or <code>stt</code>.
           </p>
         </li>
         <li>
diff --git a/ovn/ovn-sb.ovsschema b/ovn/ovn-sb.ovsschema
index db56211..a29e986 100644
--- a/ovn/ovn-sb.ovsschema
+++ b/ovn/ovn-sb.ovsschema
@@ -17,7 +17,9 @@
             "indexes": [["name"]]},
         "Encap": {
             "columns": {
-                "type": {"type": "string"},
+                "type": {"type": {"key": {
+                           "type": "string",
+                           "enum": ["set", ["geneve", "stt", "vxlan"]]}}},
                 "options": {"type": {"key": "string",
                                      "value": "string",
                                      "min": 0,
diff --git a/ovn/ovn-sb.xml b/ovn/ovn-sb.xml
index 127d4f1..7561990 100644
--- a/ovn/ovn-sb.xml
+++ b/ovn/ovn-sb.xml
@@ -166,8 +166,9 @@
 
     <column name="type">
       The encapsulation to use to transmit packets to this chassis.
-      Examples include <code>geneve</code>, <code>vxlan</code>, and
-      <code>stt</code>.
+      Hypervisors must use either <code>geneve</code> or
+      <code>stt</code>.  Gateways may use <code>vxlan</code>,
+      <code>geneve</code>, or <code>stt</code>.
     </column>
 
     <column name="options">
diff --git a/tutorial/ovs-sandbox b/tutorial/ovs-sandbox
index 9a5a4fa..e8339f2 100755
--- a/tutorial/ovs-sandbox
+++ b/tutorial/ovs-sandbox
@@ -289,7 +289,7 @@ rungdb $gdb_vswitchd ovs-vswitchd --detach --no-chdir --pidfile -vconsole:off --
 if $ovn; then
     ovs-vsctl set open . external-ids:system-id=56b18105-5706-46ef-80c4-ff20979ab068
     ovs-vsctl set open . external-ids:ovn-remote=unix:"$sandbox"/db.sock
-    ovs-vsctl set open . external-ids:ovn-encap-type=vxlan
+    ovs-vsctl set open . external-ids:ovn-encap-type=geneve
     ovs-vsctl set open . external-ids:ovn-encap-ip=127.0.0.1
     ovs-vsctl add-br br-int \
         -- set bridge br-int fail-mode=secure other-config:disable-in-band=true
-- 
2.1.3




More information about the dev mailing list