<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC7432 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7432.xml">
<!ENTITY RFC8365 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8365.xml">
<!ENTITY RFC8584 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8584.xml">
<!ENTITY I-D.ietf-bess-evpn-geneve SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-bess-evpn-geneve.xml">
<!ENTITY RFC7348 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7348.xml">
<!ENTITY RFC5512 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5512.xml">
<!ENTITY RFC4023 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4023.xml">
<!ENTITY RFC7637 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7637.xml">
<!ENTITY RFC7510 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7510.xml">
<!ENTITY RFC8926 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8926.xml">
<!ENTITY RFC9012 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9012.xml">
<!ENTITY RFC7606 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7606.xml">
<!ENTITY RFC8660 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8660.xml">
<!ENTITY RFC8986 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8986.xml">
<!ENTITY RFC9252 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9252.xml">
<!ENTITY RFC8126 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml">
<!ENTITY I-D.ietf-nvo3-vxlan-gpe SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-nvo3-vxlan-gpe.xml">
]>
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-ietf-bess-evpn-mh-split-horizon-08"
     ipr="trust200902" submissionType="IETF" updates="8365, 7432">
  <!--Generated by id2xml 1.5.0 on 2020-07-31T12:56:54Z -->

  <?rfc strict="yes"?>

  <?rfc compact="yes"?>

  <?rfc subcompact="no"?>

  <?rfc symrefs="yes"?>

  <?rfc sortrefs="no"?>

  <?rfc text-list-symbols="oo*+-"?>

  <?rfc toc="yes"?>

  <front>
    <title abbrev="EVPN MH Split Horizon Extensions">EVPN Multi-Homing
    Extensions for Split Horizon Filtering</title>

    <author fullname="Jorge Rabadan" initials="J." role="editor"
            surname="Rabadan">
      <organization>Nokia</organization>

      <address>
        <postal>
          <street>520 Almanor Avenue</street>

          <city>Sunnyvale</city>

          <region>CA</region>

          <code>94085</code>

          <country>USA</country>
        </postal>

        <email>jorge.rabadan@nokia.com</email>
      </address>
    </author>

    <author fullname="Kiran Nagaraj" initials="K." surname="Nagaraj">
      <organization>Nokia</organization>

      <address>
        <postal>
          <street>520 Almanor Avenue</street>

          <city>Sunnyvale</city>

          <region>CA</region>

          <code>94085</code>

          <country>USA</country>
        </postal>

        <email>kiran.nagaraj@nokia.com</email>
      </address>
    </author>

    <author fullname="Wen Lin" initials="W." surname="Lin">
      <organization abbrev="Juniper">Juniper Networks</organization>

      <address>
        <email>wlin@juniper.net</email>
      </address>
    </author>

    <author fullname="Ali Sajassi" initials="A." surname="Sajassi">
      <organization abbrev="Cisco">Cisco Systems, Inc.</organization>

      <address>
        <email>sajassi@cisco.com</email>
      </address>
    </author>

    <date day="4" month="December" year="2023"/>

    <workgroup>BESS Workgroup</workgroup>

    <abstract>
      <t>Ethernet Virtual Private Network (EVPN) is commonly used along with
      Network Virtualization Overlay (NVO) tunnels, as well as MPLS and
      Segment Routing tunnels. The EVPN multi-homing procedures may be
      different depending on the tunnel type used in the EVPN Broadcast
      Domain. In particular, there are two multi-homing Split Horizon
      procedures to avoid looped frames on the multi-homed CE: ESI Label based
      and Local Bias. ESI Label based Split Horizon is used for MPLSoX
      tunnels, E.g., MPLSoUDP, whereas Local Bias is used for other tunnels,
      E.g., VXLAN tunnels. The existing specifications do not allow the
      operator to decide which Split Horizon procedure to use for tunnel
      encapsulations that could support both. Examples of tunnels that may
      support both procedures are MPLSoGRE, MPLSoUDP, GENEVE or SRv6. This
      document updates the EVPN Multihoming procedures in RFC8365 and RFC7432
      so that an operator can decide the Split Horizon procedure for a given
      tunnel depending on their own requirements.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="sect-1" title="Introduction">
      <t>Ethernet Virtual Private Network (EVPN) is commonly used with the
      following tunnel encapsulations:</t>

      <t><list style="symbols">
          <t>Network Virtualization Overlay (NVO) tunnels as specified in
          <xref target="RFC8365"/></t>

          <t>MPLS and Segment Routing with MPLS data plane (SR-MPLS), as
          specified in <xref target="RFC7432"/></t>

          <t>Segment Routing with IPv6 data plane (SRv6), as specified in
          <xref target="RFC9252"/>.</t>
        </list>The EVPN multihoming procedures may be different depending on
      the tunnel type used in the EVPN Broadcast Domain. In particular, there
      are two multihoming Split Horizon procedures to avoid looped frames on
      the multihomed CE: ESI Label based and Local Bias. ESI Label based Split
      Horizon is used for MPLS or MPLSoX tunnels, E.g., MPLSoUDP <xref
      target="RFC7510"/>, and its procedures described in <xref
      target="RFC7432"/>. Local Bias is used by IP tunnels, E.g., VXLAN
      tunnels, and it is described in <xref target="RFC8365"/>.</t>

      <section title="Split Horizon Filtering and Tunnel Encapsulations">
        <t>EVPN supports two Split Horizon Filtering mechanisms:</t>

        <t><list style="symbols">
            <t>ESI Label based Split Horizon filtering <xref
            target="RFC7432"/><vspace blankLines="1"/>When EVPN is used for
            MPLS transport tunnels, an MPLS label enables the Split Horizon
            filtering capability to support All-Active multihoming. The
            ingress Network Virtualization Edge (NVE) device adds a label
            corresponding to the source ES (an ESI label) when encapsulating
            the packet. The egress NVE checks the ESI label when attempting to
            forward a multi-destination frame out of a local ES interface, and
            if the label corresponds to the same site identifier (ESI)
            associated with that ES interface, the packet is not forwarded.
            This prevents the occurrence of forwarding loops for BUM traffic.
            <vspace blankLines="1"/>The ESI Label Split Horizon filtering
            SHOULD also be used with Single-Active multihoming to avoid
            transient loops for in-flight packets when the egress NVE takes
            over as Designated Forwarder for an ES.</t>

            <t>Local Bias <xref target="RFC8365"/><vspace
            blankLines="1"/>Since IP tunnels (such as VXLAN or NVGRE) do not
            support the ESI label (or any MPLS label at all), a different
            Split Horizon filtering procedure must be used for All-Active
            multihoming. This mechanism is called Local Bias and relies on the
            tunnel source IP address to decide whether to forward BUM traffic
            to a local ES interface at the egress NVE. <vspace
            blankLines="1"/>In a nutshell, every NVE tracks the IP address(es)
            associated with the other NVE(s) with which it has shared
            multihomed ESs. When the egress NVE receives a BUM frame
            encapsulated in a IP tunnel, it examines the source IP address in
            the tunnel header (which identifies the ingress NVE) and filters
            out the frame on all local interfaces connected to ESes that are
            shared with the ingress NVE. <vspace blankLines="1"/>Due to this
            behavior at the egress NVE, the ingress NVE's behavior is also
            changed to perform replication locally to all directly attached
            ESes (regardless of the Designated Forwarder election state) for
            all BUM ingress from the access ACs. Because of this "local"
            replication at the ingress NVE, this approach is referred to as
            Local Bias. <vspace blankLines="1"/>Local Bias cannot be used for
            Single-Active multihoming, since the ingress NVE brings
            operationally down the Attachment Circuits (ACs) for which it is
            non-Designated Forwarder (hence local replication to
            non-Designated Forwarder ACs cannot be done). This means transient
            in-flight BUM packets may be looped back to the originating site
            by new elected Designated Forwarder egress NVEs.</t>
          </list><xref target="RFC8365"/> states that Local Bias is used only
        for IP tunnels, and ESI Label based Split Horizon for IP-based MPLS
        tunnels. However, IP-based MPLS tunnels, such as MPLSoGRE or MPLSoUDP,
        are also IP tunnels and can potentially support both procedures, since
        they can carry ESI Labels and they also use a tunnel IP header where
        the source IP address identifies the ingress NVE.</t>

        <t>Similarly, some IP tunnels that carry an identifier of the source
        ES in the tunnel header, may potentially follow either procedure too.
        Some examples are GENEVE or SRv6:</t>

        <t><list style="symbols">
            <t>In a GENEVE tunnel, the source IP address identifies the
            ingress NVE therefore local bias is possible. Also, <xref
            target="I-D.ietf-bess-evpn-geneve"/> defines an Ethernet option
            TLV (Type Length Value) to encode an ESI label value.</t>

            <t>In an SRv6 tunnel, the source IP address also identifies the
            ingress NVE, however, by default, and as described in <xref
            target="RFC9252"/> the ingress PE will add information in the SRv6
            packet so that the egress PE can identify the source ES of the BUM
            packet. That information is the ESI filtering argument (Arg.FE2)
            of the service Segment Identifier (SID) received on an A-D per ES
            route from the egress PE.</t>
          </list></t>

        <t><xref target="Tunnel"/> shows different tunnel encapsulations and
        their supported and default Split Horizon method. In the case of
        GENEVE, the default Split Horizon Type (SHT) depends on whether the
        Ethernet Option with Source ID TLV is negotiated. In the case of SRv6,
        the default SHT is listed as ESI label filtering in the Table, since
        the behavior is equivalent to that of ESI Label filtering. In this
        document, ESI Label filtering refers to the Split Horizon filtering
        based on the existence of a source ES identifier in the tunnel
        header.</t>

        <t>This document classifies the tunnel encapsulations used by EVPN
        into:<list style="numbers">
            <t>IP-based MPLS tunnels</t>

            <t>(SR-)MPLS tunnels</t>

            <t>IP tunnels</t>

            <t>SRv6 tunnels</t>
          </list></t>

        <t>Any other tunnel encapsulation (different from the encapsulations
        in <xref target="Tunnel"/>) that can be classified into any of the
        four encapsulation groups above, supports Split Horizon based on the
        following rules:</t>

        <t><list style="symbols">
            <t>IP-based MPLS tunnels and SRv6 tunnels can support both Split
            Horizon filtering methods</t>

            <t>(SR-)MPLS tunnels only support ESI Label based Split Horizon
            filtering</t>

            <t>IP tunnels support Local Bias Split Horizon and may support ESI
            Label based Split Horizon, if they include a method to identify
            the source ESI in the header.</t>
          </list></t>

        <texttable align="left" anchor="Tunnel" style="all"
                   title="Tunnel Encapsulations and Split Horizon Types">
          <ttcol>Tunnel Encapsulation</ttcol>

          <ttcol>Default Split Horizon Type (SHT)</ttcol>

          <ttcol>Supports Local Bias</ttcol>

          <ttcol>Supports ESI Label</ttcol>

          <c>MPLSoGRE (IP-based MPLS)</c>

          <c>ESI Label filtering</c>

          <c>Yes</c>

          <c>Yes</c>

          <c>MPLSoUDP (IP-based MPLS)</c>

          <c>ESI Label filtering</c>

          <c>Yes</c>

          <c>Yes</c>

          <c>(SR-)MPLS</c>

          <c>ESI Label filtering</c>

          <c>No</c>

          <c>Yes</c>

          <c>VXLAN (IP tunnels)</c>

          <c>Local Bias</c>

          <c>Yes</c>

          <c>No</c>

          <c>NVGRE (IP tunnels)</c>

          <c>Local Bias</c>

          <c>Yes</c>

          <c>No</c>

          <c>VXLAN-GPE (IP tunnels)</c>

          <c>Local Bias</c>

          <c>Yes</c>

          <c>No</c>

          <c>GENEVE (IP tunnels)</c>

          <c>Local Bias (no ESI Lb) ESI Label (if ESI lb)</c>

          <c>Yes</c>

          <c>Yes</c>

          <c>SRv6</c>

          <c>ESI Label filtering</c>

          <c>Yes</c>

          <c>Yes</c>
        </texttable>

        <t>The ESI Label method works for All-Active and Single-Active, while
        Local Bias only works for All-Active. In addition, the ESI Label
        method works across different network domains, whereas Local Bias is
        limited to networks with no next hop change between the NVEs attached
        to the same ES. However, some operators prefer the Local Bias method,
        since it simplifies the encapsulation, consumes less resources on the
        NVEs and the ingress NVE always forwards locally to other interfaces,
        reducing the delay to reach multihomed hosts.</t>

        <t>This document extends the EVPN multihoming procedures so that an
        operator can decide the Split Horizon procedure for a given NVO tunnel
        depending on their own specific requirements. The choice of Local Bias
        or ESI Label Split Horizon is now allowed for tunnel encapsulations
        that support both methods, and it is advertised along with the EVPN
        A-D per ES route. IP tunnels that do not support both methods, E.g.,
        VXLAN or NVGRE, will keep following <xref target="RFC8365"/>
        procedures.</t>
      </section>

      <section anchor="sect-1.2" title="Conventions and Terminology">
        <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>

        <t><list style="symbols">
            <t>AC: Attachment Circuit.</t>

            <t>A-D per ES route: refers to the EVPN Ethernet Auto-Discovery
            per ES route defined in <xref target="RFC7432"/>.</t>

            <t>Arg.FE2: refers to the ESI filtering argument used for Split
            Horizon as specified in <xref target="RFC9252"/>.</t>

            <t>Broadcast Domain (BD): an emulated ethernet, such that two
            systems on the same BD will receive each other's link-local
            broadcasts. In this document, BD also refers to the instantiation
            of a Broadcast Domain on an EVPN PE. An EVPN PE can be attached to
            one or multiple BDs of the same tenant.</t>

            <t>BUM: Broadcast, Unknown unicast and Multicast traffic.</t>

            <t>ES and ESI: Ethernet Segment and Ethernet Segment
            Identifier.</t>

            <t>Designated Forwarder (DF): as defined in <xref
            target="RFC7432"/>, an ES may be multihomed (attached to more than
            one PE). An ES may also contain multiple BDs, of one or more EVIs.
            For each such EVI, one of the PEs attached to the segment becomes
            that EVI's DF for that segment. Since a BD may belong to only one
            EVI, we can speak unambiguously of the BD's DF for a given
            segment.</t>

            <t>EVI and EVI-RT: EVPN Instance and EVI Route Target. A group of
            NVEs attached to the same EVI will share the same EVI-RT.</t>

            <t>GENEVE: Generic Network Virtualization Encapsulation, <xref
            target="RFC8926"/>.</t>

            <t>MPLS and non-MPLS NVO tunnels: refer to Multi-Protocol Label
            Switching (or the absence of it) Network Virtualization Overlay
            tunnels. Network Virtualization Overlay tunnels use an IP
            encapsulation for overlay frames, where the source IP address
            identifies the ingress NVE and the destination IP address the
            egress NVE.</t>

            <t>MPLSoUDP: Multi-Protocol Label Switching over User Datagram
            Protocol, <xref target="RFC7510"/></t>

            <t>MPLSoGRE: Multi-Protocol Label Switching over Generic Network
            Encapsulation, <xref target="RFC4023"/>.</t>

            <t>MPLSoX: refers to MPLS over any IP encapsulation. Examples are
            MPLSoUDP or MPLSoGRE.</t>

            <t>NVE: Network Virtualization Edge device.</t>

            <t>NVGRE: Network Virtualization Using Generic Routing
            Encapsulation, <xref target="RFC7637"/>.</t>

            <t>VXLAN: Virtual eXtensible Local Area Network, <xref
            target="RFC7348"/>.</t>

            <t>VXLAN-GPE: VXLAN Generic Protocol Extension, <xref
            target="I-D.ietf-nvo3-vxlan-gpe"/>.</t>

            <t>VNI: Virtual Network Identifier. A 24-bit identifier used by
            Network Virtualization Overlay (NVO) over IP encapsulations.
            Examples are VXLAN (Virtual Extended Local Area Network) or GENEVE
            (Generic Network Virtualization Encapsulation).</t>

            <t>SHT: Split Horizon Type, it refers to the Split Horizon method
            that a PE intends to use and advertises in an A-D per ES
            route.</t>

            <t>SR-MPLS: Segment Routing with an MPLS data plane, <xref
            target="RFC8660"/>.</t>

            <t>SRv6: Segment routing with an IPv6 data plane, <xref
            target="RFC8986"/>.</t>
          </list></t>

        <t>This document also assumes familiarity with the terminology of
        <xref target="RFC7432"/> and <xref target="RFC8365"/>.</t>
      </section>
    </section>

    <section anchor="sect-2" title="BGP EVPN Extensions">
      <t>EVPN extensions are needed so that NVEs can advertise their
      preference for the Split Horizon method to be used in the ES. <xref
      target="esi-label-extended-community"/> shows the ESI Label extended
      community that is always advertised along with the EVPN A-D per ES
      route. All the NVEs attached to an ES advertise an A-D per ES route for
      the ES, including this extended community that conveys the information
      for the multihoming mode (All-active or Single-Active), as well as the
      ESI Label to be used (if needed).</t>

      <figure anchor="esi-label-extended-community"
              title="ESI Label extended community">
        <artwork><![CDATA[
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type=0x06     | Sub-Type=0x01 | Flags(1 octet)|  Reserved=0   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Reserved=0   |          ESI Label                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>

      <t><xref target="RFC7432"/> defines the low-order bit of the Flags octet
      (bit 0) as the "Single-Active" bit:</t>

      <t><list style="symbols">
          <t>A value of 0 means that the multihomed ES is operating in
          All-Active mode.</t>

          <t>A value of 1 means that the multihomed ES is operating in
          Single-Active mode.</t>
        </list><xref target="sect-5"/> creates a registry for the Flags octet,
      where the "Single-Active" bit is the low-order bit of the RED
      (multihoming redundancy mode) field. </t>

      <section anchor="sect-2.1" title="The Split Horizon Type (SHT)">
        <t><xref target="RFC8365"/> does not add any explicit indication about
        the Split Horizon method in the A-D per ES route. In this document,
        the <xref target="RFC8365"/> Split Horizon procedure is the default
        behavior and assumes that Local Bias is used only for IP tunnels, and
        ESI Label based Split Horizon for IP-based MPLS tunnels. This document
        defines the two high-order bits in the Flags octet (bits 6 and 7) as
        the "Split Horizon Type" (SHT) field, where:</t>

        <figure>
          <artwork><![CDATA[ 7 6 5 4 3 2 1 0
+-+-+-+-+-+-+-+-+
|SHT|       |RED|
+-+-+-+-+-+-+-+-+
RED = "Multihoming redundancy mode" field

SHT bit 7 6
-----------
        0 0  --> Default SHT. Backwards compatible with [RFC8365]
        0 1  --> Local Bias
        1 0  --> ESI Label based filtering
        1 1  --> reserved for future use
]]></artwork>
        </figure>

        <t><list style="symbols">
            <t>SHT = 00 is backwards compatible with <xref target="RFC8365"/>
            and indicates that the advertising NVE intends to use the default
            or native SHT. The default SHT is shown in <xref target="Tunnel"/>
            for each encapsulation. An egress NVE that follows the <xref
            target="RFC8365"/> behavior and does not support this
            specification will ignore the SHT bits (which is equivalent to
            process them as value of 00).</t>

            <t>SHT = 01 indicates that the advertising NVE intends to use
            Local Bias procedures in the ES for which the AD per-ES route is
            advertised.</t>

            <t>SHT = 10 indicates that the advertising NVE intends to use the
            ESI Label based Split Horizon method procedures in the ES for
            which the AD per-ES route is advertised.</t>

            <t>SHT = 11 is a reserved value, for future use.</t>
          </list></t>
      </section>

      <section anchor="sect-2.2"
               title="Use of the Split Horizon Type In A-D Per ES Routes">
        <t>The following behavior is observed:</t>

        <t><list style="symbols">
            <t>An SHT value of 01 or 10 MUST NOT be used with encapsulations
            that support only one SHT in <xref target="Tunnel"/>, and MAY be
            used by encapsulations that support the two SHTs in <xref
            target="Tunnel"/>.</t>

            <t>An SHT value different than 00 expresses the intent to use a
            specific Split Horizon method, but does not reflect the actual
            operational SHT used by the advertising NVE, unless all the NVEs
            attached to the ES advertise the same SHT.</t>

            <t>In case of inconsistency in the SHT value advertised by the
            NVEs attached to the same ES for a given EVI, all the NVEs MUST
            revert to the <xref target="RFC8365"/> behavior, and use the
            default SHT in <xref target="Tunnel"/>, irrespective of the
            advertised SHT.</t>

            <t>An SHT different from 00 MUST NOT be set if the Single-Active
            bit is set. A received A-D per ES route where Single-Active and
            SHT bits are different from zero MUST be treat-as-withdraw <xref
            target="RFC7606"/>.</t>

            <t>The SHT MUST have the same value in each Ethernet A-D per ES
            route that an NVE advertises for a given ES and a given
            encapsulation (see <xref target="sect-3"/> for NVEs supporting
            multiple encapsulations).</t>
          </list></t>

        <t>As an example, egress NVEs that support IP-based MPLS tunnels,
        E.g., MPLSoGRE or MPLSoUDP, will advertise A-D per ES route(s) for the
        ES along with the BGP Encapsulation extended community <xref
        target="RFC9012"/> indicating the encapsulation (MPLSoGRE or MPLSoUDP)
        and MAY use the SHT = 01 or 10 to indicate the intent to use Local
        Bias or ESI Label, respectively.</t>

        <t>An egress NVE MUST NOT use an SHT value different from 00 when
        advertising an A-D per ES route with encapsulation VXLAN, NVGRE, MPLS
        or no BGP tunnel encapsulation extended community <xref
        target="RFC9012"/>. We assume that, in all these cases, there is no
        Split Horizon method choice, and therefore the SHT value MUST be 00. A
        received route with one of the above encapsulation options and SHT
        value different from 00 SHOULD be treat-as-withdraw.</t>

        <t>An egress NVE advertising A-D per ES route(s) for an ES with
        encapsulation GENEVE MAY use an SHT value of 01 or 10. A value of 01
        indicates the intent to use Local Bias, irrespective of the presence
        of an Ethernet option TLV with a non-zero Source-ID <xref
        target="I-D.ietf-bess-evpn-geneve"/>. A value of 10 indicates the
        intent to use ESI Label based Split Horizon. A value of 00 indicates
        the default behavior in <xref target="Tunnel"/>, that is, use Local
        Bias if no ESI-Label exists in the Ethernet option TLV or no Ethernet
        option TLV whatsoever. Otherwise the ESI Label Split Horizon method is
        used.</t>

        <t>The above procedures assume a single encapsulation supported in the
        egress NVE. <xref target="sect-3"/> describes additional procedures
        for NVEs supporting multiple encapsulations.</t>
      </section>

      <section anchor="sect-2.3" title="ESI Label Value In A-D Per ES Routes">
        <t>This document also updates <xref target="RFC8365"/> in the value
        that is advertised in the ESI Label field of the ESI Label extended
        community, as follows:</t>

        <t><list style="symbols">
            <t>The A-D per ES route(s) for an ES MAY have an ESI Label value
            of zero if the SHT value is 01. <xref target="sect-2.2"/>
            specifies the cases where the SHT can be 01. An ESI Label value of
            zero avoids the allocation of Labels in the cases where they are
            not used (Local Bias).</t>

            <t>The A-D per ES route(s) for an ES MAY have an ESI Label value
            of zero for VXLAN or NVGRE encapsulations.</t>
          </list></t>
      </section>

      <section anchor="sect-2.4"
               title="Backwards Compatibility With RFC8365 NVEs">
        <t>As discussed in <xref target="sect-2.2"/> this specification is
        backwards compatible with the Split Horizon filtering behavior in
        <xref target="RFC8365"/> and a non-upgraded NVE can be attached to the
        same ES as other NVEs supporting this specification.</t>

        <t>An NVE has an administrative SHT value for an ES (the one that is
        advertised along with the A-D per ES route) and an operational SHT
        value (the one that is actually used irrespective of what the NVE
        advertised). The administrative SHT matches the operational SHT if all
        the NVEs attached to the ES have the same administrative SHT.</t>

        <t>This document assumes that an <xref target="RFC7432"/> or <xref
        target="RFC8365"/> implementation that does not support this document,
        ignores the value of all the Flags in the ESI Label extended community
        except for the Single-Active bit. Based on this assumption, a
        non-upgraded NVE will ignore an SHT different from 00. As soon as an
        upgraded NVE receives at least one A-D per ES route for the ES with
        SHT value of 00, it MUST revert its operational SHT to the default
        Split Horizon method, as in <xref target="Tunnel"/>, and irrespective
        of its administrative SHT.</t>

        <t>As an example, consider an NVE attached to ES N that receives two
        A-D per ES routes for N from different NVEs, NVE1 and NVE2. If the
        route from NVE1 has SHT = 00 and the one from NVE2 an SHT = 01, the
        NVE MUST use the default Split Horizon method in <xref
        target="Tunnel"/> as operational SHT, irrespective of its
        administrative SHT.</t>

        <t>All the NVEs attached to an ES with operational SHT value of 10
        MUST advertise a valid non-zero ESI Label. If the operational SHT
        value is 01, the ESI Label MAY be zero. If the operational SHT value
        is 00, the ESI Label MAY be zero only if the default encapsulation
        supports Local Bias only and the NVEs do not check the presence of a
        valid non-zero ESI Label.</t>

        <t>If an NVE changes its operational SHT value from 01 (Local Bias) to
        00 (Default SHT) as a result of a new non-upgraded NVE present in the
        ES, and it previously advertised a zero ESI Label, it MUST send an
        update with a non-zero valid ESI Label, unless all the non-upgraded
        NVEs in the ES support Local Bias only. As an example, suppose NVE1
        and NVE2 use MPLSoUDP as encapsulation, they are attached to the same
        Ethernet Segment ES1 and advertise an SHT value of 01 (Local Bias) and
        a zero ESI label value. Suppose NVE3 does not support this
        specification and joins ES1, therefore advertises an SHT of 00
        (default). Upon receiving NVE3's A-D per ES route, NVE1 and NVE2 MUST
        send an update of their A-D per ES route for ES1 with a non-zero valid
        ESI label value. The assumption is that NVE3 supports only the default
        ESI label based Split Horizon filtering.</t>
      </section>
    </section>

    <section anchor="sect-3"
             title="Procedures for NVEs Supporting Multiple Encapsulations">
      <t>As specified by <xref target="RFC8365"/>, an egress NVE that supports
      multiple data plane encapsulations (I.e., VXLAN, NVGRE, MPLS, MPLSoUDP,
      GENEVE) needs to indicate all the supported encapsulations using BGP
      Encapsulation extended communities defined in <xref target="RFC9012"/>
      with all EVPN routes. This section clarifies the multihoming Split
      Horizon behavior for NVEs advertising and receiving multiple BGP
      Encapsulation extended communities along with the A-D per ES routes.
      This section uses a notation of {x,y} to indicate the encapsulations
      advertised in BGP Encapsulation extended communities <xref
      target="RFC9012"/>, with x and y being different encapsulation
      values.</t>

      <t>It is important to remember that an NVE MAY advertise multiple A-D
      per ES routes for the same ES (and not only one), each route conveying a
      number of Route Targets (RT). We refer to the total number of Route
      Targets in a given ES as RT-set for that ES. Any of the EVIs represented
      in the RT-set will have its RT included in one (and only one) A-D per ES
      route for the ES. When multiple A-D per ES routes are advertised for the
      same ES, each route MUST have a different Route Distinguisher.</t>

      <t>As per <xref target="RFC8365"/>, an NVE that advertises multiple
      encapsulations in the A-D per ES route(s) for an ES MUST advertise
      encapsulations that use the same Split Horizon filtering method in the
      same route. For example:</t>

      <t><list style="symbols">
          <t>An A-D per ES route for ES-x may be advertised with {VXLAN,
          NVGRE} encapsulations.</t>

          <t>An A-D per ES route for ES-y may be advertised with {MPLS,
          MPLSoUDP, MPLSoGRE} encapsulations (or a subset).</t>

          <t>But an A-D per ES route for ES-z MUST NOT be advertised with
          {MPLS, VXLAN} encapsulations.</t>
        </list></t>

      <t>This document extends this behavior as follows:</t>

      <t><list style="letters">
          <t>An A-D per ES route for ES-x may be advertised with multiple
          encapsulations where some support a single Split Horizon method. In
          this case, the SHT value MUST be 00. As an example, {VXLAN, NVGRE},
          {VXLAN, GENEVE} or {MPLS, MPLSoGRE, MPLSoUDP} can be advertised in
          an A-D per ES route. In all those cases SHT MUST be 00.</t>

          <t>An A-D per ES route for ES-y may be advertised with multiple
          encapsulations where all of them support both Split Horizon methods.
          In this case the SHT value MAY be 01 if the desired method is Local
          Bias, or 10 if ESI Label based. For example, {MPLSoGRE, MPLSoUDP,
          GENEVE} (or a subset) may be advertised in an A-D per ES route with
          SHT value of 01. The ESI Label value in this case MAY be zero.</t>

          <t>If ES-z with RT-set composed of (RT1, RT2, RT3.. RTn) supports
          multiple encapsulations that require a different Split Horizon
          method, a different A-D per ES route (or group of routes) per Split
          Horizon method MUST be advertised. For example, consider n RTs in
          ES-z and:<list style="symbols">
              <t>the EVIs corresponding to (RT1..RTi) support VXLAN,</t>

              <t>the ones for (RTi+1..RTm) (with i&lt;m) support MPLSoUDP with
              Local Bias,</t>

              <t>and the ones for (RTm+1..RTn) (with m&lt;n) support GENEVE
              with ESI Label based Split Horizon.</t>
            </list>In this case, three groups of A-D per ES routes MUST be
          advertised for ES-z:<list style="symbols">
              <t>A-D per ES route group 1, including (RT1..RTi), with
              encapsulation {VXLAN}, SHT = 00. The ESI Label MAY be zero.</t>

              <t>A-D per ES route group 2, including (RTi+1..RTm), with
              encapsulation {MPLSoUDP}, SHT = 01. The ESI Label MAY be
              zero.</t>

              <t>A-D per ES route group 3, including (RTm+1..RTn), with
              encapsulation {GENEVE}, SHT = 10. The ESI Label MUST have a
              valid value, different from zero, and the Ethernet option <xref
              target="RFC8926"/> MUST be advertised.</t>
            </list></t>
        </list></t>

      <t>As per <xref target="RFC8365"/>, it is the responsibility of the
      operator of a given EVI to ensure that all of the NVEs in that EVI
      support a common encapsulation. If this condition is violated, it could
      result in service disruption or failure.</t>
    </section>

    <section title="Security Considerations">
      <t>The same security considerations described in <xref
      target="RFC7432"/> relevant to multihoming apply to this document.</t>

      <t>In addition, this document modifies the <xref target="RFC8365"/>
      procedures for Split Horizon filtering, providing the operator with a
      choice between Local Bias and ESI Label based filtering for the tunnels
      that support both methods. A misconfiguration of the desired SHT to be
      used may result in a forwarding behavior that is different from the
      intended one. Other than that, this document describes procedures so
      that all the PEs or NVEs attached to the same ES agree on a common SHT
      method, therefore an attacker changing the configuration of the SHT
      should not cause traffic disruption, only a change in the forwarding
      behavior.</t>
    </section>

    <section anchor="sect-5" title="IANA Considerations">
      <t>This document creates a registry called "EVPN ESI Label Extended
      Community Flags" for the 1-octet Flags field in the ESI Label Extended
      Community. New registrations will be made through the "RFC Required"
      procedure defined in <xref target="RFC8126"/>. Initial registrations are
      made for the "Multihoming redundancy mode" field in bits 0 and 1, as
      follows: </t>

      <texttable>
        <ttcol>RED</ttcol>

        <ttcol>Multihoming redundancy mode</ttcol>

        <c>00</c>

        <c>All-Active mode</c>

        <c>01</c>

        <c>Single-Active mode</c>
      </texttable>

      <t>In addition, this document requests the registration of the "Split
      Horizon Type" field in bits 6 and 7 of the Flags Octet of the EVPN ESI
      Label extended community. This field is called "Split Horizon Type" bits
      and it is defined as follows:</t>

      <texttable>
        <ttcol>SHT</ttcol>

        <ttcol>Split Horizon Type value</ttcol>

        <c>00</c>

        <c>Default SHT</c>

        <c>01</c>

        <c>Local Bias</c>

        <c>10</c>

        <c>ESI Label based filtering</c>

        <c>11</c>

        <c>Reserved</c>
      </texttable>
    </section>

    <section anchor="sect-6" title="Acknowledgments">
      <t>The authors would like to thank Anoop Ghanwani, Gyan Mishra and
      Jeffrey Zhang for their review and useful comments.</t>
    </section>

    <section anchor="sect-7" title="Contributors"/>
  </middle>

  <back>
    <references title="Normative References">
      &RFC2119;

      &RFC8174;

      &RFC8126;

      &RFC7432;

      &RFC8365;

      &RFC9252;
    </references>

    <references title="Informative References">
      &I-D.ietf-bess-evpn-geneve;

      &RFC7348;

      &RFC4023;

      &RFC7637;

      &RFC7510;

      &RFC8926;

      &RFC9012;

      &RFC7606;

      &RFC8660;

      &RFC8986;

      &I-D.ietf-nvo3-vxlan-gpe;
    </references>
  </back>
</rfc>
