<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>

<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="std"
     docName="draft-li-rtgwg-ecmp-hash-combination-00"
     ipr="trust200902"
     obsoletes=""
     updates=""
     submissionType="IETF"
     xml:lang="en"
     version="3">

  <front>
    <title abbrev="Combined Hash for ECMP/LAG">
      Combined Hash Mechanism for ECMP/LAG Load Balancing
    </title>

    <seriesInfo name="Internet-Draft" 
                value="draft-li-rtgwg-ecmp-hash-combination-00"/>

    <author fullname="Zhiqiang Li" initials="Z." surname="Li">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <street>32 Xuanwumen West Street</street>
          <city>Beijing</city>
          <code>100053</code>
          <country>China</country>
        </postal>
        <email>lizhiqiangyjy@chinamobile.com</email>
      </address>
    </author>
    <author fullname="Zongpeng Du" initials="Z." surname="Du">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <street>32 Xuanwumen West Street</street>
          <city>Beijing</city>
          <code>100053</code>
          <country>China</country>
        </postal>
        <email>duzongpeng@chinamobile.com</email>
      </address>
    </author>
    <author fullname="Wei Cheng" initials="W." surname="Cheng">
      <organization>Centec Networks</organization>
      <address>
        <postal>
          <city>Suzhou</city>
          <code>215000</code>
          <country>China</country>
        </postal>
        <email>chengw@centec.com</email>
      </address>
    </author>
    <author fullname="Junjie Wang" initials="J." surname="Wang">
      <organization>Centec Networks</organization>
      <address>
        <postal>
          <city>Suzhou</city>
          <code>215000</code>
          <country>China</country>
        </postal>
        <email>wangjj@centec.com</email>
      </address>
    </author>
    <author fullname="Guoying Zhang" initials="G." surname="Zhang">
      <organization>Centec Networks</organization>
      <address>
        <postal>
          <city>Suzhou</city>
          <code>215000</code>
          <country>China</country>
        </postal>
        <email>zhanggy@centec.com</email>
      </address>
    </author>

<date year="2026" month="February" day="28"/>

    <area>Routing</area>
    <workgroup>RTGWG</workgroup>

    <keyword>ECMP</keyword>
    <keyword>LAG</keyword>
    <keyword>load balancing</keyword>
    <keyword>hash</keyword>
    <keyword>tunnel</keyword>

    <abstract>
      <t>
        This document specifies a combined hash mechanism for load
        balancing in Equal-Cost Multi-Path (ECMP) and Link Aggregation
        Group (LAG) environments. When processing tunneled traffic,
        traditional hash methods that operate on either outer or inner
        packet fields may result in uneven traffic distribution
        (polarization). This specification defines a method to extend
        effective hash entropy by combining multiple independently
        computed hash values, enabling network devices to consider
        multi-layer packet information for path selection, thereby
        improving traffic distribution uniformity. This mechanism is
        compatible with existing hash computation architectures and does
        not require packet format modifications or new protocol field
        definitions.
      </t>
    </abstract>
  </front>

  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>
        Equal-Cost Multi-Path (ECMP) routing and Link Aggregation Groups
        (LAGs) are widely deployed technologies in modern networks for
        bandwidth scaling and redundancy. As described in
        <xref target="RFC2991"/> and <xref target="RFC2992"/>, these
        technologies improve network performance and reliability by
        distributing traffic across multiple equal-cost paths.
      </t>
      <t>
        In ECMP/LAG environments, routers typically employ hash-based
        methods to select forwarding paths. As analyzed in
        <xref target="RFC2992"/>, hash algorithms extract key information
        from packet header fields to compute hash values used for path
        selection. Typical hash inputs include the 5-tuple
        (source/destination IP addresses, source/destination ports,
        protocol type) or subsets thereof.
      </t>
      <t>
        However, <xref target="RFC6438"/> identifies that in tunnel
        scenarios, when multiple distinct user flows are encapsulated
        within the same tunnel, hashing based solely on outer headers
        causes all encapsulated flows to be mapped to the same path,
        resulting in polarization. While RFC 6438 addresses this by
        setting the flow label in the outer IPv6 header, this requires
        tunnel endpoint cooperation and only applies to IPv6 outer
        encapsulation scenarios.
      </t>
      <t>
        This document defines a complementary combined hash mechanism
        that extends available hash entropy by combining multiple
        independently computed hash values within the forwarding device,
        thereby improving load distribution for tunneled traffic without
        modifying packet formats. This mechanism can be used in
        conjunction with <xref target="RFC6438"/> and
        <xref target="RFC6790"/>, or deployed independently.
      </t>
    </section>

    <section anchor="requirements-language">
      <name>Requirements Language</name>
      <t>
        The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
        "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY",
        and "OPTIONAL" in this document are to be interpreted as described
        in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when,
        and only when, they appear in all capitals, as shown here.
      </t>
    </section>

    <section anchor="terminology">
      <name>Terminology</name>
      <t>
        This section defines terms used in this document. Some terms are
        inherited from <xref target="RFC2991"/>, <xref target="RFC2992"/>,
        <xref target="RFC6438"/>, and <xref target="RFC6790"/>.
      </t>
      <dl>
        <dt>Equal-Cost Multi-Path (ECMP):</dt>
        <dd>
          A routing strategy that allows packet forwarding to a single
          destination over multiple paths with equal routing cost. See
          <xref target="RFC2991"/>.
        </dd>

        <dt>Link Aggregation Group (LAG):</dt>
        <dd>
          A technology that bundles multiple physical links into a single
          logical link, providing bandwidth aggregation and link
          redundancy. See <xref target="IEEE802.1AX"/>.
        </dd>

        <dt>Hash Entropy:</dt>
        <dd>
          The amount of variability in the input to a hash function.
          Higher entropy typically leads to more uniform hash output
          distribution.
        </dd>

        <dt>Polarization:</dt>
        <dd>
          In ECMP/LAG environments, the phenomenon where traffic
          concentrates on a subset of paths due to insufficient
          variability in hash inputs. See <xref target="RFC6438"/>.
        </dd>

        <dt>Base Hash Value:</dt>
        <dd>
          A hash value computed by a single hash computation unit based
          on a specific set of packet fields.
        </dd>

        <dt>Combined Hash Value:</dt>
        <dd>
          A new hash value derived by applying a combination operation
          to two or more base hash values.
        </dd>

        <dt>Hash Field Set:</dt>
        <dd>
          The set of packet fields used as hash input. This document
          defines standard field sets including L2 (source MAC,
          destination MAC, VLAN tag, EtherType), L3 (source IP,
          destination IP, protocol), L4 (source port, destination port),
          OUTER (outer header fields), and INNER (inner/payload header
          fields).
        </dd>
      </dl>
    </section>

    <section anchor="problem-statement">
      <name>Problem Statement</name>

      <section anchor="tunnel-polarization">
        <name>Tunnel Traffic Polarization</name>
        <t>
          As described in Section 1.1 of <xref target="RFC6438"/>, in
          tunnel scenarios, when traffic from multiple sources is
          aggregated into a single tunnel, all encapsulated packets have
          the same outer source and destination addresses. If ECMP/LAG
          paths exist between intermediate routers, and path selection is
          based solely on hashing the outer 5-tuple (or its subset), all
          tunnel traffic will be mapped to the same path, preventing
          effective load sharing.
        </t>
        <figure anchor="fig-tunnel-scenario">
          <name>Tunnel Scenario with ECMP/LAG</name>
          <artwork type="ascii-art"><![CDATA[
     _____        _____                 _____        _____
    | TEP |______| R1  |---------------| R2  |______| TEP |
    |__A__|      |_____|---------------|_____|      |__B__|
                       ECMP or LAG
                         here
          ]]></artwork>
        </figure>
      </section>

      <section anchor="existing-limitations">
        <name>Limitations of Existing Solutions</name>
        <t>
          Existing solutions each have their applicable scenarios and
          limitations:
        </t>
        <ul>
          <li>
            <strong>IPv6 Flow Label Approach [RFC6438]:</strong> Requires
            IPv6 outer encapsulation and cooperation from the ingress
            tunnel endpoint (TEP) to set the flow label.
          </li>
          <li>
            <strong>MPLS Entropy Label Approach [RFC6790]:</strong> Only
            applicable to MPLS networks and requires all LSRs along the
            path to support entropy labels.
          </li>
          <li>
            <strong>Deep Packet Inspection (DPI):</strong> While some
            devices support inspecting inner packet fields for hashing,
            this increases processing complexity and latency, and is
            unavailable when packets are encrypted.
          </li>
        </ul>
      </section>

      <section anchor="motivation">
        <name>Motivation for Combined Hashing</name>
        <t>
          In practical network devices, a common implementation approach
          is to configure multiple parallel hash computation units, each
          independently configurable with its hash field set. However,
          final path selection typically can only use one of these hash
          values. The combined hash mechanism defined in this document
          allows combining multiple base hash values to produce a combined
          hash value that considers multi-layer information for final path
          selection.
        </t>
      </section>
    </section>

    <section anchor="mechanism-overview">
      <name>Combined Hash Mechanism Overview</name>

      <section anchor="basic-principle">
        <name>Basic Principle</name>
        <t>
          The core idea of the combined hash mechanism is to apply
          combination operations to multiple independently computed base
          hash values, producing a new combined hash value. Through this
          approach:
        </t>
        <ol>
          <li>
            Each base hash value can be independently computed from
            different packet field sets (e.g., outer L3, inner L3, L2
            fields).
          </li>
          <li>
            The combination operation merges the entropy of multiple base
            hash values, producing a combined hash value containing more
            information.
          </li>
          <li>
            Final path selection can be based on the combined hash value,
            thus indirectly achieving comprehensive consideration of
            multiple field sets.
          </li>
        </ol>
      </section>

      <section anchor="architecture">
        <name>Architecture</name>
        <figure anchor="fig-architecture">
          <name>Combined Hash Mechanism Architecture</name>
          <artwork type="ascii-art"><![CDATA[
                                 +--------------------+
  +--------+                     | Hash Compute Unit 0|-----> H0
  |        |   +-----------+     +--------------------+        |
  |        |-->| Field Set |---->| Hash Function      |        |
  |        |   |     A     |     +--------------------+        |
  |        |   +-----------+                                   |
  |        |                     +--------------------+        |
  | Packet |   +-----------+     | Hash Compute Unit 1|-----> H1
  |        |-->| Field Set |---->+--------------------+        |
  |        |   |     B     |                                   |
  |        |   +-----------+                                   v
  |        |                     +--------------------+
  |        |   +-----------+     | Hash Compute Unit 2|-----> H2 --+
  |        |-->| Field Set |---->+--------------------+            |
  |        |   |     C     |                                       |
  |        |   +-----------+     +--------------------+            |
  |        |   +-----------+     | Hash Compute Unit 3|-----> H3 --+
  |        |-->| Field Set |---->+--------------------+            |
  +--------+   |     D     |                                       |
               +-----------+                                       v
                                                   +---------------+
                                                   | Combination   |
                                                   | H_c = H2 ^ H3 |
                                                   +---------------+
                                                           |
                                                           v
                                                   +---------------+
                                                   | Path Selection|
                                                   | from {H0..H3, |
                                                   |       H_c}    |
                                                   +---------------+
                                                           |
                                                           v
                                                     Forwarding Path
          ]]></artwork>
        </figure>
      </section>

      <section anchor="existing-relationship-overview">
        <name>Relationship with Existing Mechanisms</name>
        <t>
          This mechanism complements <xref target="RFC6438"/> and
          <xref target="RFC6790"/>. When the outer layer uses IPv6 and
          TEPs support RFC 6438, the flow label approach can be preferred.
          When MPLS networks are deployed with RFC 6790 support, the
          entropy label approach can be preferred. When the above
          conditions are not met, the combined hash mechanism provides a
          purely local implementation alternative. These approaches can be
          used together for optimal results.
        </t>
      </section>
    </section>

    <section anchor="protocol-specification">
      <name>Protocol Specification</name>

      <section anchor="base-hash">
        <name>Base Hash Computation</name>
        <t>
          Devices implementing this specification MUST support at least
          two independent base hash computation units. Each computation
          unit SHOULD support independent configuration of its hash field
          set.
        </t>
        <t>
          RECOMMENDED hash field set configuration options include:
        </t>
        <table anchor="tab-field-sets">
          <name>Hash Field Set Options</name>
          <thead>
            <tr>
              <th>Field Set ID</th>
              <th>Included Fields</th>
              <th>Typical Use Case</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>L2</td>
              <td>Source MAC, Dest MAC, VLAN, EtherType</td>
              <td>Ethernet switching</td>
            </tr>
            <tr>
              <td>L3</td>
              <td>Source IP, Dest IP, Protocol</td>
              <td>IP routing</td>
            </tr>
            <tr>
              <td>L4</td>
              <td>Source Port, Dest Port</td>
              <td>Transport layer differentiation</td>
            </tr>
            <tr>
              <td>OUTER</td>
              <td>Outer packet L2/L3/L4 fields</td>
              <td>Tunneled traffic</td>
            </tr>
            <tr>
              <td>INNER</td>
              <td>Inner packet L2/L3/L4 fields</td>
              <td>Tunneled traffic</td>
            </tr>
          </tbody>
        </table>
        <t>
          Base hash value bit-width SHOULD be at least 16 bits.
          Implementations MAY support larger bit-widths for better
          distribution characteristics.
        </t>
      </section>

      <section anchor="combination-ops">
        <name>Combination Operations</name>
        <t>
          Implementations MUST support XOR combination operation on two
          base hash values:
        </t>
        <artwork type="code"><![CDATA[
H_combined = H_x XOR H_y
        ]]></artwork>
        <t>
          where H_x and H_y are any two selected base hash values.
        </t>
        <t>
          Implementations MAY additionally support the following
          combination operations:
        </t>
        <t>
          <strong>Addition combination:</strong>
        </t>
        <artwork type="code"><![CDATA[
H_combined = (H_x + H_y) mod 2^n
        ]]></artwork>
        <t>
          where n is the hash value bit-width.
        </t>
        <t>
          <strong>Concatenation hash:</strong>
        </t>
        <artwork type="code"><![CDATA[
H_combined = Hash(H_x || H_y)
        ]]></artwork>
        <t>
          where || denotes bit-level concatenation and Hash() is the
          configured hash function.
        </t>
        <t>
          When using XOR operation, implementations MUST detect whether
          H_x and H_y might be identical (computed from the same field
          set). If configured to XOR identical hash values, implementations
          SHOULD generate a warning, as this will result in a combined
          value of zero.
        </t>
      </section>

      <section anchor="path-selection">
        <name>Path Selection</name>
        <t>
          Implementations MUST support selecting the final hash value for
          path selection from any base hash value (H0, H1, H2, H3, ...) or
          the combined hash value (H_combined).
        </t>
        <t>
          Final hash value selection SHOULD be configurable.
        </t>
        <t>
          For ECMP path selection, the hash-threshold algorithm described
          in <xref target="RFC2992"/> or a similar deterministic algorithm
          SHOULD be used to ensure all packets of the same flow are
          forwarded to the same path.
        </t>
      </section>
    </section>

    <section anchor="configuration">
      <name>Configuration Model</name>
      <t>
        This section defines parameters required for configuring the
        combined hash mechanism. Specific configuration interfaces (CLI,
        NETCONF/YANG, etc.) are outside the scope of this document.
      </t>

      <section anchor="config-params">
        <name>Configuration Parameters</name>
        <table anchor="tab-config">
          <name>Configuration Parameters</name>
          <thead>
            <tr>
              <th>Parameter</th>
              <th>Type</th>
              <th>Range</th>
              <th>Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>hash-unit-count</td>
              <td>int</td>
              <td>2-8</td>
              <td>4</td>
            </tr>
            <tr>
              <td>hash-unit[i].field-set</td>
              <td>enum</td>
              <td>L2,L3,L4,OUTER,INNER</td>
              <td>-</td>
            </tr>
            <tr>
              <td>combination.enabled</td>
              <td>bool</td>
              <td>true/false</td>
              <td>false</td>
            </tr>
            <tr>
              <td>combination.input-1</td>
              <td>int</td>
              <td>0 to (count-1)</td>
              <td>-</td>
            </tr>
            <tr>
              <td>combination.input-2</td>
              <td>int</td>
              <td>0 to (count-1)</td>
              <td>-</td>
            </tr>
            <tr>
              <td>combination.operation</td>
              <td>enum</td>
              <td>XOR,ADD,CONCAT-HASH</td>
              <td>XOR</td>
            </tr>
            <tr>
              <td>final-hash-select</td>
              <td>int</td>
              <td>0 to count</td>
              <td>0</td>
            </tr>
          </tbody>
        </table>
      </section>

      <section anchor="config-constraints">
        <name>Configuration Constraints</name>
        <t>
          The following configuration constraints MUST be enforced:
        </t>
        <ol>
          <li>
            <tt>combination.input-1</tt> and <tt>combination.input-2</tt>
            SHOULD NOT be configured to the same value. If configured to
            the same value, implementations MUST generate a warning.
          </li>
          <li>
            When <tt>combination.enabled</tt> is false, the valid range
            for <tt>final-hash-select</tt> is 0 to (hash-unit-count - 1).
          </li>
          <li>
            When <tt>combination.enabled</tt> is true,
            <tt>final-hash-select</tt> MAY additionally select the combined
            hash value.
          </li>
        </ol>
      </section>
    </section>

    <section anchor="operations">
      <name>Operational Procedures</name>

      <section anchor="initialization">
        <name>Initialization</name>
        <t>
          Upon device startup, the following initialization procedure MUST
          be executed:
        </t>
        <ol>
          <li>Read and validate configuration parameter validity.</li>
          <li>
            Configure each hash computation unit with its corresponding
            field set.
          </li>
          <li>
            If combined hashing is enabled, initialize the combination
            operation module.
          </li>
          <li>
            Configure path selection logic to use the specified final hash
            value.
          </li>
        </ol>
      </section>

      <section anchor="packet-processing">
        <name>Packet Processing</name>
        <t>
          For each received packet, the processing procedure is as
          follows:
        </t>
        <t><strong>Step 1: Base Hash Computation</strong></t>
        <ul>
          <li>
            Each hash computation unit extracts configured fields from the
            packet in parallel.
          </li>
          <li>Execute hash function computation on extracted fields.</li>
          <li>Produce base hash values H0, H1, ..., Hn.</li>
        </ul>
        <t><strong>Step 2: Combined Hash Computation (if enabled)</strong></t>
        <ul>
          <li>Select two base hash values according to configuration.</li>
          <li>Execute the configured combination operation.</li>
          <li>Produce combined hash value H_combined.</li>
        </ul>
        <t><strong>Step 3: Path Selection</strong></t>
        <ul>
          <li>
            Select final hash value according to
            <tt>final-hash-select</tt> configuration.
          </li>
          <li>
            Execute path selection algorithm using final hash value (e.g.,
            hash-threshold algorithm from <xref target="RFC2992"/>).
          </li>
          <li>Determine forwarding path and forward packet.</li>
        </ul>
      </section>

      <section anchor="config-change">
        <name>Configuration Change Handling</name>
        <t>
          When configuration changes occur:
        </t>
        <ul>
          <li>
            Implementations SHOULD support online configuration changes
            without device restart.
          </li>
          <li>
            Configuration changes MUST take effect immediately for
            subsequent packets.
          </li>
          <li>
            Implementations SHOULD log configuration change events for
            audit purposes.
          </li>
        </ul>
      </section>
    </section>

    <section anchor="existing-mechanisms">
      <name>Relationship with Existing Mechanisms</name>

      <section anchor="rel-rfc6438">
        <name>Relationship with RFC 6438</name>
        <t>
          <xref target="RFC6438"/> defines a method for using the flow
          label in IPv6 tunnel scenarios for ECMP/LAG load balancing. That
          method requires the ingress tunnel endpoint to set a flow label
          value in the outer IPv6 header based on information computed
          from the inner packet.
        </t>
        <t>
          The combined hash mechanism defined in this document complements
          <xref target="RFC6438"/>: RFC 6438 executes at tunnel endpoints
          and affects all intermediate nodes along the tunnel path, while
          the combined hash mechanism executes locally at a single
          forwarding node and does not affect other nodes. When both
          mechanisms are used together, their effects can accumulate.
        </t>
      </section>

      <section anchor="rel-rfc6790">
        <name>Relationship with RFC 6790</name>
        <t>
          <xref target="RFC6790"/> defines the MPLS entropy label
          mechanism, allowing entropy information for load balancing to be
          carried in the MPLS label stack.
        </t>
        <t>
          The mechanism defined in this document complements
          <xref target="RFC6790"/>: RFC 6790 requires nodes along the path
          to support entropy label parsing, while the combined hash
          mechanism does not require support from other nodes. In MPLS
          networks, both mechanisms can be used simultaneously.
        </t>
      </section>

      <section anchor="rel-rfc2992">
        <name>Relationship with RFC 2992</name>
        <t>
          <xref target="RFC2992"/> analyzes the hash-threshold algorithm
          for ECMP. The final hash value produced by the combined hash
          mechanism defined in this document can be used as input to the
          RFC 2992 algorithm. This document does not modify or replace the
          path selection algorithm defined in <xref target="RFC2992"/>.
        </t>
      </section>
    </section>

    <section anchor="security-considerations">
      <name>Security Considerations</name>

      <section anchor="config-security">
        <name>Configuration Security</name>
        <t>The combined hash mechanism is a local device behavior
        and does not introduce new attack surfaces beyond those
        inherent in hash-based load balancing. However, operators
        should be aware that hash configuration details, if exposed,
        could allow traffic engineering attacks. Implementations
        MUST enforce access control for hash configuration
        parameters. Implementations SHOULD log configuration
        changes for audit purposes.</t>
      </section>
    </section>

    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>
        This document does not require IANA to allocate any protocol
        parameters or create new registries. The combined hash mechanism
        is purely a local implementation optimization and does not involve
        protocol interactions.
      </t>
      <t>
        If future working group consensus determines that configuration
        parameter namespaces need to be standardized (e.g., for YANG
        models), IANA action may be requested at that time.
      </t>
    </section>
  </middle>

  <back>
    <references>
      <name>References</name>

      <references>
        <name>Normative References</name>

        <reference anchor="RFC2119"
                   target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement
                   Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="2026" month="February" day="28"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>

        <reference anchor="RFC8174"
                   target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key
                   Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <date year="2026" month="February" day="28"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>

      <references>
        <name>Informative References</name>

        <reference anchor="RFC2991"
                   target="https://www.rfc-editor.org/info/rfc2991">
          <front>
            <title>Multipath Issues in Unicast and Multicast Next-Hop
                   Selection</title>
            <author initials="D." surname="Thaler" fullname="D. Thaler">
              <organization/>
            </author>
            <author initials="C." surname="Hopps" fullname="C. Hopps">
              <organization/>
            </author>
            <date year="2026" month="February" day="28"/>
          </front>
          <seriesInfo name="RFC" value="2991"/>
          <seriesInfo name="DOI" value="10.17487/RFC2991"/>
        </reference>

        <reference anchor="RFC2992"
                   target="https://www.rfc-editor.org/info/rfc2992">
          <front>
            <title>Analysis of an Equal-Cost Multi-Path Algorithm</title>
            <author initials="C." surname="Hopps" fullname="C. Hopps">
              <organization/>
            </author>
            <date year="2026" month="February" day="28"/>
          </front>
          <seriesInfo name="RFC" value="2992"/>
          <seriesInfo name="DOI" value="10.17487/RFC2992"/>
        </reference>

        <reference anchor="RFC6438"
                   target="https://www.rfc-editor.org/info/rfc6438">
          <front>
            <title>Using the IPv6 Flow Label for Equal Cost Multipath
                   Routing and Link Aggregation in Tunnels</title>
            <author initials="B." surname="Carpenter"
                    fullname="B. Carpenter">
              <organization/>
            </author>
            <author initials="S." surname="Amante" fullname="S. Amante">
              <organization/>
            </author>
            <date year="2026" month="February" day="28"/>
          </front>
          <seriesInfo name="RFC" value="6438"/>
          <seriesInfo name="DOI" value="10.17487/RFC6438"/>
        </reference>

        <reference anchor="RFC6790"
                   target="https://www.rfc-editor.org/info/rfc6790">
          <front>
            <title>The Use of Entropy Labels in MPLS Forwarding</title>
            <author initials="K." surname="Kompella" fullname="K. Kompella">
              <organization/>
            </author>
            <author initials="J." surname="Drake" fullname="J. Drake">
              <organization/>
            </author>
            <author initials="S." surname="Amante" fullname="S. Amante">
              <organization/>
            </author>
            <author initials="W." surname="Henderickx"
                    fullname="W. Henderickx">
              <organization/>
            </author>
            <author initials="L." surname="Yong" fullname="L. Yong">
              <organization/>
            </author>
            <date year="2026" month="February" day="28"/>
          </front>
          <seriesInfo name="RFC" value="6790"/>
          <seriesInfo name="DOI" value="10.17487/RFC6790"/>
        </reference>

        <reference anchor="RFC7424"
                   target="https://www.rfc-editor.org/info/rfc7424">
          <front>
            <title>Mechanisms for Optimizing Link Aggregation Group (LAG)
                   and Equal-Cost Multipath (ECMP) Component Link
                   Utilization in Networks</title>
            <author initials="R." surname="Krishnan" fullname="R. Krishnan">
              <organization/>
            </author>
            <author initials="L." surname="Yong" fullname="L. Yong">
              <organization/>
            </author>
            <author initials="A." surname="Ghanwani" fullname="A. Ghanwani">
              <organization/>
            </author>
            <author initials="N." surname="So" fullname="N. So">
              <organization/>
            </author>
            <author initials="B." surname="Khasnabish"
                    fullname="B. Khasnabish">
              <organization/>
            </author>
            <date year="2026" month="February" day="28"/>
          </front>
          <seriesInfo name="RFC" value="7424"/>
          <seriesInfo name="DOI" value="10.17487/RFC7424"/>
        </reference>

        <reference anchor="IEEE802.1AX">
          <front>
            <title>IEEE Standard for Local and metropolitan area networks -
                   Link Aggregation</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date year="2026" month="February" day="28"/>
          </front>
          <seriesInfo name="IEEE Std" value="802.1AX-2020"/>
        </reference>
      </references>
    </references>

    <section anchor="deployment-examples">
      <name>Deployment Scenario Examples</name>

      <section anchor="datacenter-overlay">
        <name>Data Center Overlay Networks</name>
        <t>
          In overlay networks such as VXLAN/NVGRE, large amounts of tenant
          traffic traverse shared underlay tunnels. Example configuration:
        </t>
        <ul>
          <li>Hash unit 0: OUTER field set (outer IP addresses)</li>
          <li>Hash unit 1: INNER field set (inner IP addresses)</li>
          <li>Combination operation: H0 XOR H1</li>
          <li>Final selection: Combined hash value</li>
        </ul>
        <t>
          This configuration enables path selection to consider both outer
          tunnel information and inner tenant flow information.
        </t>
      </section>

      <section anchor="sp-core">
        <name>Service Provider Core Networks</name>
        <t>
          In MPLS backbone networks, entropy labels may not be fully
          deployed. Example configuration:
        </t>
        <ul>
          <li>Hash unit 0: L3 field set (IP 5-tuple)</li>
          <li>Hash unit 1: MPLS label stack</li>
          <li>Combination operation: H0 XOR H1</li>
          <li>Final selection: Combined hash value</li>
        </ul>
        <t>
          This configuration provides improved load distribution without
          relying on entropy labels.
        </t>
      </section>
    </section>
  </back>
</rfc>