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 <jpet...@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 disc...@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 5f2d1a4..0645102 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 be876b8..75eca57 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 8aa2ddd..1520cb7 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 -- 1.7.5.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev