Embarrassingly minor nitpicks follow...

On Sat, Jul 23, 2016 at 3:18 PM, Darrell Ball <dlu...@gmail.com> wrote:

> Some design micro-details (e.g.) register assignments) that may change
> over time were moved from the ovn-architecture.7.xml document to the
> OVN-DESIGN.md document.  A table is added to summarize and quantify
> MFF logical metadata and register usage.  The OVN-DESIGN.md file was
> tested using the following markdown parsers:
>
> https://jbt.github.io/markdown-editor/
> http://dillinger.io/
>
> The new flags register usage is also documented in the new
> OVN-DESIGN.md document.
>
> Signed-off-by: Darrell Ball <dlu...@gmail.com>
> ---
>  ovn/OVN-DESIGN.md          | 199
> +++++++++++++++++++++++++++++++++++++++++++++
>  ovn/automake.mk            |   1 +
>  ovn/ovn-architecture.7.xml | 193
> -------------------------------------------
>  3 files changed, 200 insertions(+), 193 deletions(-)
>  create mode 100644 ovn/OVN-DESIGN.md
>
> diff --git a/ovn/OVN-DESIGN.md b/ovn/OVN-DESIGN.md
> new file mode 100644
> index 0000000..2162c65
> --- /dev/null
> +++ b/ovn/OVN-DESIGN.md
> @@ -0,0 +1,199 @@
> +OVN register and metadata usage:
> +-------------------------------
> +
> +logical datapath field:
> +
> +A field that denotes the logical datapath through which a packet is being
> +processed.
> +*Keep the following in sync with MFF_LOG_DATAPATH in*
> +*ovn/lib/logical-fields.h.*
> +OVN uses the field that OpenFlow 1.1+ simply (and confusingly) calls
> +'metadata' to store the logical datapath.  (This field is passed across
> +tunnels as part of the tunnel key.)
> +
> +
> +logical input port field:
> +
> +A field that denotes the logical port from which the packet entered the
> +logical datapath.
> +*Keep the following in sync with MFF_LOG_INPORT in*
> +*ovn/lib/logical-fields.h.*
> +OVN stores this in Nicira extension register number 14.
> +
> +Geneve and STT tunnels pass this field as part of the tunnel key.
> +Although VXLAN tunnels do not explicitly carry a logical input port,
> +OVN only uses VXLAN to communicate with gateways that from OVN's
> +perspective consist of only a single logical port, so that OVN can set
> +the logical input port field to this one on ingress to the OVN logical
> +pipeline.
> +
> +
> +logical output port field:
> +
> +A field that denotes the logical port from which the packet will leave
> +the logical datapath.  This is initialized to 0 at the beginning of the
> +logical ingress pipeline.
> +*Keep the following in sync with MFF_LOG_OUTPORT in*
> +*ovn/lib/logical-fields.h.*
> +OVN stores this in Nicira extension register number 15.
> +
> +Geneve and STT tunnels pass this field as part of the tunnel key.  VXLAN
> +tunnels do not transmit the logical output port field.
> +
> +
> +conntrack zone field for logical ports:
> +
> +A field that denotes the connection tracking zone for logical ports.
> +The value only has local significance and is not meaningful between
> +chassis.  This is initialized to 0 at the beginning of the logical
> +ingress pipeline.
> +*Keep the following in sync with MFF_LOG_CT_ZONE in*
> +*ovn/lib/logical-fields.h.*
> +OVN stores this in Nicira extension register number 13.
> +
> +
> +conntrack zone fields for Gateway router:
> +
> +Fields that denote the connection tracking zones for Gateway routers.
> +These values only have local significance (only on chassis that have
> +Gateway routers instantiated) and is not meaningful between
> +chassis.
> +*Keep the following in sync with MFF_LOG_DNAT_ZONE and*
> +*MFF_LOG_DNAT_ZONE inovn/lib/logical-fields.h.*
>

Missing space between "in" and "ovn/lib/logical-fields.h.*"



> +OVN stores the zone information for DNATting in Nicira
> +extension register number 11 and zone information for SNATing in Nicira
> +extension register number 12.
> +
> +
> +flags field:
> +
> +Scratchpad flags that denote the pipeline state between tables.  The
> +values only have local significance and are not meaningful between
> +chassis.  This is initialized to 0 at the beginning of the logical
> +ingress pipeline.
> +*Keep the following in sync with MFF_LOG_FLAGS in*
> +*ovn/lib/logical-fields.h.*
> +OVN stores this in Nicira extension register number 10.
> +
> +
> +VLAN ID:
> +
> +The VLAN ID is used as an interface between OVN and containers nested
> +inside a VM (see Life Cycle of a container interface inside a VM, in
> +ovn-architecture.7.xml, for more information).
> +
> +
> +The following table summarizes the register and metadata usage for OVN.
> +*Keep the following in sync with MFF_LOG_FLAGS in*
> +*ovn/lib/logical-fields.h.*:
> +
> +```
> +
> +  Register/Metadata         Usage                      Bits (Used/Total)
> +  ----------------        ---------                    --------------
> +  MFF_METADATA         logical datapath                      24/64
> +  MFF_REG0             generic scratch                       32/32
> +  MFF_REG1             generic scratch                       32/32
> +  MFF_REG2             generic scratch                       32/32
> +  MFF_REG3             generic scratch                       32/32
> +  MFF_REG4             generic scratch                       32/32
> +  MFF_REG5             generic scratch                       32/32
> +  MFF_REG6             generic scratch                       32/32
> +  MFF_REG7             generic scratch                       32/32
> +  MFF_REG8             unused                                 0/32
> +  MFF_REG9             unused                                 0/32
> +  MFF_REG10            flags                                  1/32
> +  MFF_REG11            conntrack dnat zone gateway           16/32
> +  MFF_REG12            conntrack snat zone gateway           16/32
> +  MFF_REG13            conntrack zone logical ports          16/32
> +  MFF_REG14            logical input port                    15/32
> +  MFF_REG15            logical output port                   16/32
> +
> +```
> +
> +OVN Tunnel Encapsulations:
> +-------------------------
> +
> +tunnel key:
> +
> +When OVN encapsulates a packet in Geneve or another tunnel, it attaches
> +extra data to it to allow the receiving OVN instance to process it
> +correctly.  This takes different forms depending on the particular
> +encapsulation, but in each case we refer to it here as the 'tunnel key'.
> +
> +OVN supports three types of IP tunnel encapsulations used in the IP mesh
> +connecting HVs, physical switches, appliances and/or servers.  OVN passes
> +packet context information across tunnels.
> +
> +OVN annotates logical network packets that it sends from one hypervisor to
> +another with the following three pieces of metadata, which are encoded in
> an
> +encapsulation-specific fashion.
> +
> +
> +24-bit logical datapath identifier:
> +This is derived from the tunnel_key column in the OVN Southbound
> +Datapath_Binding table.
> +
> +15-bit logical ingress port identifier:
> +ID 0 is reserved for internal use within OVN.  IDs 1 through 32767,
> inclusive,
> +may be assigned to logical ports (see the tunnel_key column in the OVN
> +Southbound Port_Binding table).
> +
> +16-bit logical egress port identifier:
> +IDs 0 through 32767 have the same meaning as for logical ingress ports.
> IDs
> +32768 through 65535, inclusive, may be assigned to logical multicast
> groups
> +(see the tunnel_key column in the OVN Southbound Multicast_Group table).
> +
> +For hypervisor-to-hypervisor traffic, OVN supports only Geneve and STT
> +encapsulations, for the following reasons:
> +
> +Only STT and Geneve support the large amounts of metadata (over 32 bits
> per
> +packet) that OVN uses (as described above).
> +
> +STT and Geneve use randomized UDP or TCP source ports that allows
> efficient
>


... source ports that _allow_ efficient

To be fair/clear, this 'issue' was actually in the original location. ;)



> +distribution among multiple paths in environments that use ECMP in their
> +underlay.
> +
> +NICs are available to offload STT and Geneve encapsulation and
> decapsulation.
> +
> +Due to its flexibility, the preferred encapsulation between hypervisors is
> +Geneve.  For Geneve encapsulation, OVN transmits the logical datapath
> +identifier in the Geneve VNI.
> +
> +*Keep the following in sync with ovn/controller/physical.h.*
> +OVN transmits the logical ingress and logical egress ports in a TLV with
> +class 0x0102, type 0, and a 32-bit value encoded as follows, from MSB to
> +LSB:
> +
> +```
> +
> +      1          15             16
> +  -----------------------------------------
> +  |       |                |              |
> +  |  resv |  ingress port  |  egress port |
> +  |       |                |              |
> +  -----------------------------------------
> + ```
> +
> +Environments whose NICs lack Geneve offload may prefer STT encapsulation
> +for performance reasons.  For STT encapsulation, OVN encodes all three
> +pieces of logical metadata in the STT 64-bit tunnel ID as follows, from
> MSB
> +to LSB:
> +
> +```
> +
> +      9          15              16             24
> +  ------------------------------------------------------
> +  |       |                |              |            |
> +  |  resv |  ingress port  |  egress port |  datapath  |
> +  |       |                |              |            |
> +  ------------------------------------------------------
> +```
> +
> +For connecting to gateways, in addition to Geneve and STT, OVN supports
> +VXLAN, because only VXLAN support is common on top-of-rack (ToR) switches.
> +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.
> +
> diff --git a/ovn/automake.mk b/ovn/automake.mk
> index f3f40e5..39277de 100644
> --- a/ovn/automake.mk
> +++ b/ovn/automake.mk
> @@ -73,6 +73,7 @@ DISTCLEANFILES += ovn/ovn-architecture.7
>  EXTRA_DIST += \
>         ovn/TODO \
>         ovn/CONTAINERS.OpenStack.md \
> +        ovn/OVN-DESIGN.md \
>         ovn/OVN-GW-HA.md
>
>  # Version checking for ovn-nb.ovsschema.
> diff --git a/ovn/ovn-architecture.7.xml b/ovn/ovn-architecture.7.xml
> index ead4feb..e023818 100644
> --- a/ovn/ovn-architecture.7.xml
> +++ b/ovn/ovn-architecture.7.xml
> @@ -609,100 +609,6 @@
>    </p>
>
>    <p>
> -    This section mentions several data and metadata fields, for clarity
> -    summarized here:
> -  </p>
> -
> -  <dl>
> -    <dt>tunnel key</dt>
> -    <dd>
> -      When OVN encapsulates a packet in Geneve or another tunnel, it
> attaches
> -      extra data to it to allow the receiving OVN instance to process it
> -      correctly.  This takes different forms depending on the particular
> -      encapsulation, but in each case we refer to it here as the ``tunnel
> -      key.''  See <code>Tunnel Encapsulations</code>, below, for details.
> -    </dd>
> -
> -    <dt>logical datapath field</dt>
> -    <dd>
> -      A field that denotes the logical datapath through which a packet is
> being
> -      processed.
> -      <!-- Keep the following in sync with MFF_LOG_DATAPATH in
> -           ovn/lib/logical-fields.h. -->
> -      OVN uses the field that OpenFlow 1.1+ simply (and confusingly) calls
> -      ``metadata'' to store the logical datapath.  (This field is passed
> across
> -      tunnels as part of the tunnel key.)
> -    </dd>
> -
> -    <dt>logical input port field</dt>
> -    <dd>
> -      <p>
> -        A field that denotes the logical port from which the packet
> -        entered the logical datapath.
> -        <!-- Keep the following in sync with MFF_LOG_INPORT in
> -             ovn/lib/logical-fields.h. -->
> -        OVN stores this in Nicira extension register number 14.
> -      </p>
> -
> -      <p>
> -        Geneve and STT tunnels pass this field as part of the tunnel key.
> -        Although VXLAN tunnels do not explicitly carry a logical input
> port,
> -        OVN only uses VXLAN to communicate with gateways that from OVN's
> -        perspective consist of only a single logical port, so that OVN
> can set
> -        the logical input port field to this one on ingress to the OVN
> logical
> -        pipeline.
> -      </p>
> -    </dd>
> -
> -    <dt>logical output port field</dt>
> -    <dd>
> -      <p>
> -        A field that denotes the logical port from which the packet will
> -        leave the logical datapath.  This is initialized to 0 at the
> -        beginning of the logical ingress pipeline.
> -        <!-- Keep the following in sync with MFF_LOG_OUTPORT in
> -             ovn/lib/logical-fields.h. -->
> -        OVN stores this in Nicira extension register number 15.
> -      </p>
> -
> -      <p>
> -        Geneve and STT tunnels pass this field as part of the tunnel key.
> -        VXLAN tunnels do not transmit the logical output port field.
> -      </p>
> -    </dd>
> -
> -    <dt>conntrack zone field for logical ports</dt>
> -    <dd>
> -      A field that denotes the connection tracking zone for logical ports.
> -      The value only has local significance and is not meaningful between
> -      chassis.  This is initialized to 0 at the beginning of the logical
> -        <!-- Keep the following in sync with MFF_LOG_CT_ZONE in
> -             ovn/lib/logical-fields.h. -->
> -      ingress pipeline.  OVN stores this in Nicira extension register
> -      number 13.
> -    </dd>
> -
> -    <dt>conntrack zone fields for Gateway router</dt>
> -    <dd>
> -      Fields that denote the connection tracking zones for Gateway
> routers.
> -      These values only have local significance (only on chassis that have
> -      Gateway routers instantiated) and is not meaningful between
> -      chassis.  OVN stores the zone information for DNATting in Nicira
> -        <!-- Keep the following in sync with MFF_LOG_DNAT_ZONE and
> -        MFF_LOG_SNAT_ZONE in ovn/lib/logical-fields.h. -->
> -      extension register number 11 and zone information for SNATing in
> Nicira
> -      extension register number 12.
> -    </dd>
> -
> -    <dt>VLAN ID</dt>
> -    <dd>
> -      The VLAN ID is used as an interface between OVN and containers
> nested
> -      inside a VM (see <code>Life Cycle of a container interface inside a
> -      VM</code>, above, for more information).
> -    </dd>
> -  </dl>
> -
> -  <p>
>      Initially, a VM or container on the ingress hypervisor sends a packet
> on a
>      port attached to the OVN integration bridge.  Then:
>    </p>
> @@ -1003,103 +909,4 @@
>        entries and the <code>Logical_Switch</code> tunnel keys.
>      </li>
>    </ol>
> -
> -  <h1>Design Decisions</h1>
>

Maybe leave a bread crumb here, just to point folks to OVN-DESIGN.md ?


> -
> -  <h2>Tunnel Encapsulations</h2>
> -
> -  <p>
> -    OVN annotates logical network packets that it sends from one
> hypervisor to
> -    another with the following three pieces of metadata, which are
> encoded in
> -    an encapsulation-specific fashion:
> -  </p>
> -
> -  <ul>
> -    <li>
> -      24-bit logical datapath identifier, from the <code>tunnel_key</code>
> -      column in the OVN Southbound <code>Datapath_Binding</code> table.
> -    </li>
> -
> -    <li>
> -      15-bit logical ingress port identifier.  ID 0 is reserved for
> internal
> -      use within OVN.  IDs 1 through 32767, inclusive, may be assigned to
> -      logical ports (see the <code>tunnel_key</code> column in the OVN
> -      Southbound <code>Port_Binding</code> table).
> -    </li>
> -
> -    <li>
> -      16-bit logical egress port identifier.  IDs 0 through 32767 have
> the same
> -      meaning as for logical ingress ports.  IDs 32768 through 65535,
> -      inclusive, may be assigned to logical multicast groups (see the
> -      <code>tunnel_key</code> column in the OVN Southbound
> -      <code>Multicast_Group</code> table).
> -    </li>
> -  </ul>
> -
> -  <p>
> -    For hypervisor-to-hypervisor traffic, OVN supports only Geneve and STT
> -    encapsulations, for the following reasons:
> -  </p>
> -
> -  <ul>
> -    <li>
> -      Only STT and Geneve support the large amounts of metadata (over 32
> bits
> -      per packet) that OVN uses (as described above).
> -    </li>
> -
> -    <li>
> -      STT and Geneve use randomized UDP or TCP source ports that allows
> -      efficient distribution among multiple paths in environments that
> use ECMP
> -      in their underlay.
> -    </li>
> -
> -    <li>
> -      NICs are available to offload STT and Geneve encapsulation and
> -      decapsulation.
> -    </li>
> -  </ul>
> -
> -  <p>
> -    Due to its flexibility, the preferred encapsulation between
> hypervisors is
> -    Geneve.  For Geneve encapsulation, OVN transmits the logical datapath
> -    identifier in the Geneve VNI.
> -
> -    <!-- Keep the following in sync with ovn/controller/physical.h. -->
> -    OVN transmits the logical ingress and logical egress ports in a TLV
> with
> -    class 0x0102, type 0, and a 32-bit value encoded as follows, from MSB
> to
> -    LSB:
> -  </p>
> -
> -  <diagram>
> -    <header name="">
> -      <bits name="rsv" above="1" below="0" width=".25"/>
> -      <bits name="ingress port" above="15" width=".75"/>
> -      <bits name="egress port" above="16" width=".75"/>
> -    </header>
> -  </diagram>
> -
> -  <p>
> -    Environments whose NICs lack Geneve offload may prefer STT
> encapsulation
> -    for performance reasons.  For STT encapsulation, OVN encodes all three
> -    pieces of logical metadata in the STT 64-bit tunnel ID as follows,
> from MSB
> -    to LSB:
> -  </p>
> -
> -  <diagram>
> -    <header name="">
> -      <bits name="reserved" above="9" below="0" width=".5"/>
> -      <bits name="ingress port" above="15" width=".75"/>
> -      <bits name="egress port" above="16" width=".75"/>
> -      <bits name="datapath" above="24" width="1.25"/>
> -    </header>
> -  </diagram>
> -
> -  <p>
> -    For connecting to gateways, in addition to Geneve and STT, OVN
> supports
> -    VXLAN, because only VXLAN support is common on top-of-rack (ToR)
> switches.
> -    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.
> -  </p>
>  </manpage>
> --
> 1.9.1
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to