<?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-10"
     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="8" month="July" year="2024"/>

    <workgroup>BESS Workgroup</workgroup>

    <abstract>
      <t>Ethernet Virtual Private Network (EVPN) is commonly used with Network
      Virtualization Overlay (NVO) tunnels, as well as MPLS and Segment
      Routing tunnels. The multi-homing procedures in EVPN may vary based on
      the type of tunnel used within the EVPN Broadcast Domain. Specifically,
      there are two multi-homing Split Horizon procedures designed to prevent
      looped frames on multi-homed Customer Edge (CE) devices: the ESI
      Label-based procedure and the Local Bias procedure. The ESI Label-based
      Split Horizon is applied to MPLS-based tunnels, such as MPLSoUDP, while
      the Local Bias procedure is used for other tunnels, such as VXLAN.</t>

      <t>Current specifications do not allow operators to choose which Split
      Horizon procedure to use for tunnel encapsulations that support both
      methods. Examples of tunnels that may support both procedures include
      MPLSoGRE, MPLSoUDP, GENEVE, and SRv6. This document updates the EVPN
      multi-homing procedures described in RFC 8365 and RFC 7432, enabling
      operators to select the appropriate Split Horizon procedure for a given
      tunnel based on their specific requirements.</t>
    </abstract>
  </front>

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

      <t><list style="symbols">
          <t>Network Virtualization Overlay (NVO) tunnels, where the EVPN
          procedures are specified in <xref target="RFC8365"/>. MPLSoGRE <xref
          target="RFC4023"/>, MPLSoUDP <xref target="RFC7510"/>, GENEVE <xref
          target="RFC8926"/> or VXLAN <xref target="RFC7348"/> tunnels are
          considered NVO tunnels.</t>

          <t>MPLS and Segment Routing with MPLS data plane (SR-MPLS), where
          the relevant EVPN procedures are specified in <xref
          target="RFC7432"/>. Segment Routing with MPLS data plane tunneling
          is specified in <xref target="RFC8660"/>.</t>

          <t>Segment Routing with IPv6 data plane (SRv6), where the relevant
          EVPN procedures are specified in <xref target="RFC9252"/>. SRv6 is
          specified in <xref target="RFC8986"/>.</t>
        </list>The EVPN multihoming procedures may vary depending on the type
      of tunnel utilized within the EVPN Broadcast Domain. Specifically, there
      are two multihoming Split Horizon procedures employed to prevent looped
      frames on multihomed Customer Edge (CE) devices: the ESI Label-based
      procedure and the Local Bias procedure.</t>

      <t>The ESI Label-based Split Horizon procedure is used for MPLS or
      MPLS-over-X (MPLSoX) tunnels, such as MPLS-over-UDP, and its procedures
      are detailed in <xref target="RFC7432"/>. Conversely, the Local Bias
      procedure is used for IP-based tunnels, such as VXLAN tunnels, and it is
      described in <xref target="RFC8365"/>.</t>

      <section anchor="sect-1.1" 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>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>ES and ESI: Ethernet Segment and Ethernet Segment
            Identifier.</t>

            <t>EVI: EVPN Instance</t>

            <t>EVI-RT: 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
            MPLS-over-UDP or MPLS-over-GRE.</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 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 employed
            for MPLS transport tunnels, an MPLS label facilitates Split
            Horizon filtering to support All-Active multihoming. The ingress
            Network Virtualization Edge (NVE) device appends a label
            corresponding to the source Ethernet Segment Identifier (ESI
            label) during packet encapsulation. The egress NVE verifies the
            ESI label when attempting to forward a multi-destination frame
            through a local Ethernet Segment (ES) interface. If the ESI label
            matches the site identifier (ESI) associated with that ES
            interface, the packet is not forwarded. This mechanism effectively
            prevents forwarding loops for Broadcast, Unknown Unicast, and
            Multicast (BUM) traffic. <vspace blankLines="1"/>The ESI Label
            Split Horizon filtering should also be utilized with Single-Active
            multihoming to prevent transient loops for in-flight packets when
            the egress NVE assumes the role of 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, an alternative Split
            Horizon filtering procedure must be implemented for All-Active
            multihoming. This mechanism, known as Local Bias, relies on the
            source IP address of the tunnel to determine whether to forward
            Broadcast, Unknown Unicast, and Multicast (BUM) traffic to a local
            Ethernet Segment (ES) interface at the egress Network
            Virtualization Edge (NVE). <vspace blankLines="1"/>In summary,
            each NVE tracks the IP address(es) of other NVEs with which it
            shares multihomed ESs. Upon receiving a BUM frame encapsulated in
            an IP tunnel, the egress NVE inspects the source IP address in the
            tunnel header, which identifies the ingress NVE. The egress NVE
            then filters out the frame on all local interfaces connected to
            ESs that are shared with the ingress NVE. <vspace
            blankLines="1"/>Due to this behavior at the egress NVE, the
            ingress NVE is required to perform local replication to all
            directly attached ESs, regardless of the Designated Forwarder
            election state, for all BUM traffic ingressing from the access
            Attachment Circuits (ACs). This local replication at the ingress
            NVE is the basis for the term Local Bias. <vspace
            blankLines="1"/>Local Bias is not suitable for Single-Active
            multihoming, as the ingress NVE deactivates the ACs for which it
            is not the Designated Forwarder. Consequently, local replication
            to non-Designated Forwarder ACs cannot occur, leading to transient
            in-flight BUM packets to be looped back to the originating site by
            newly elected Designated Forwarder egress NVEs.</t>
          </list></t>

        <t><xref target="RFC8365"/> specifies that Local Bias is exclusively
        utilized for IP tunnels, while ESI Label-based Split Horizon is
        employed for IP-based MPLS tunnels. However, IP-based MPLS tunnels,
        such as MPLS over GRE (MPLSoGRE) or MPLS over UDP (MPLSoUDP), are also
        categorized as IP tunnels and have the potential to support both
        procedures. These tunnels are capable of carrying ESI labels and also
        utilize a tunnel IP header in which the source IP address identifies
        the ingress Network Virtualization Edge (NVE).</t>

        <t>Similarly, certain IP tunnels - that include an identifier for the
        source Ethernet Segment (ES) in the tunnel header - may also
        potentially support either procedure. Examples of such tunnels include
        GENEVE and 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 identifies the ingress
            NVE. By default, and as outlined in <xref target="RFC9252"/>, the
            ingress PE adds specific information to the SRv6 packet to enable
            the egress PE to identify the source ES of the BUM packet. This
            information is the ESI filtering argument (Arg.FE2) <xref
            target="RFC9252"/><xref target="RFC8986"/> 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"/> presents various tunnel encapsulations
        along with their supported and default Split Horizon methods. For
        GENEVE, the default Split Horizon Type (SHT) is contingent upon the
        negotiation of the Ethernet Option with the Source ID TLV. In the case
        of SRv6, the default SHT is specified as ESI Label filtering in the
        table, as its behavior is analogous to that of ESI Label filtering. In
        this document, ESI Label filtering refers to the Split Horizon
        filtering based on the presence of a source Ethernet Segment (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 tunnel encapsulation not listed in <xref target="Tunnel"/>)
        that can be categorized into one of the four encapsulation groups
        mentioned above will support Split Horizon filtering based on the
        following rules:</t>

        <t><list style="symbols">
            <t>IP-based MPLS tunnels and SRv6 tunnels are capable of
            supporting 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 filtering and may
            also support ESI Label-based Split Horizon filtering, provided
            they incorporate a mechanism 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 is applicable for both All-Active and
        Single-Active configurations, whereas the Local Bias method is
        suitable only for All-Active configurations. Moreover, the ESI Label
        method is effective across different network domains, while Local Bias
        is constrained to networks where there is no change in the next hop
        between the NVEs attached to the same ES. Nonetheless, some operators
        favor the Local Bias method due to its simplification of the
        encapsulation process, reduced resource consumption on NVEs, and the
        fact that the ingress NVE always forwards traffic locally to other
        interfaces, thereby decreasing the delay in reaching multihomed
        hosts.</t>

        <t>This document extends the EVPN multihoming procedures to allow
        operators to select the preferred Split Horizon method for a given NVO
        tunnel according to their specific requirements. The choice between
        Local Bias and ESI Label Split Horizon is now allowed for tunnel
        encapsulations that support both methods, and this selection is
        advertised along with the EVPN A-D per ES route. IP tunnels that do
        not support both methods, such as VXLAN or NVGRE, will continue to
        adhere to the procedures specified in <xref target="RFC8365"/>.</t>
      </section>
    </section>

    <section anchor="sect-2" title="BGP EVPN Extensions">
      <t>Extensions to EVPN are required to enable NVEs to advertise their
      preferred Split Horizon method for a given ES. <xref
      target="esi-label-extended-community"/> illustrates the ESI Label
      extended community (<xref target="RFC7432"/> Section 7.5), which is
      consistently advertised alongside the EVPN A-D per ES route. All NVEs
      connected to an ES advertise an A-D per ES route for that ES, including
      the extended community, which communicates information regarding the
      multihoming mode (either All-Active or Single-Active) and, if necessary,
      specifies the ESI Label to be utilized.</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 multihoming redundancy mode.</t>

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

      <section anchor="sect-2.1" title="The Split Horizon Type">
        <t><xref target="RFC8365"/> does not include any explicit indication
        regarding the Split Horizon method in the A-D per Ethernet Segment
        (ES) route. In this document, the Split Horizon procedure defined in
        <xref target="RFC8365"/> is considered the default behavior, presuming
        that Local Bias is employed exclusively for IP tunnels, while ESI
        Label-based Split Horizon is used for IP-based MPLS tunnels. This
        document specifies that the two high-order bits in the Flags octet
        (bits 6 and 7) constitute 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] and [RFC7432]
        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 <xref target="RFC7432"/>, 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 from 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 follow the treat-as-withdraw
            behavior <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, such
        as MPLSoGRE or MPLSoUDP, will advertise A-D per ES routes for the ES
        along with the BGP Encapsulation extended community, as defined in
        <xref target="RFC9012"/>. This extended community indicates the
        encapsulation type (MPLSoGRE or MPLSoUDP) and may use the SHT value of
        01 or 10 to signify the intent to use Local Bias or ESI Label,
        respectively.</t>

        <t>An egress NVE MUST NOT use an SHT value other than 00 when
        advertising an A-D per ES route with encapsulation types such as
        VXLAN, NVGRE, MPLS, or no BGP tunnel encapsulation extended community,
        as specified in <xref target="RFC9012"/>. In all these cases, it is
        presumed that there is no choice for the Split Horizon method;
        therefore, the SHT value MUST be set to 00. If a route with any of the
        mentioned encapsulation options is received and has an SHT value
        different from 00, it SHOULD apply the treat-as-withdraw behavior.</t>

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

        <t>These 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"/> regarding 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 scenarios where the SHT can be 01. An ESI Label
            value of zero eliminates the need to allocate labels in cases
            where they are not utilized, such as in the Local Bias method.</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 maintains an administrative SHT value for an Ethernet
        Segment (ES), which is advertised alongside the A-D per ES route, and
        an operational SHT value, which is the one actually used regardless of
        what the NVE has 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 implementation of <xref
        target="RFC7432"/> or <xref target="RFC8365"/> that does not support
        the specifications in this document will ignore the values 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
        disregard any SHT value other than 00. If an upgraded NVE receives at
        least one A-D per ES route for the ES with an SHT value of 00, it MUST
        revert its operational SHT to the default Split Horizon method, as
        described in <xref target="Tunnel"/>, irrespective of its
        administrative SHT.</t>

        <t>For instance, 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 an SHT value of 00 and the one from NVE2 has an
        SHT value of 01, the NVE MUST use the default Split Horizon method
        specified in <xref target="Tunnel"/> as its operational SHT,
        regardless of its administrative SHT.</t>

        <t>All NVEs attached to an ES with an 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 exclusively, and the NVEs do not require 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) due to the presence of a new non-upgraded NVE in the
        ES, and it previously advertised a zero ESI Label, it MUST send an
        update with a valid, non-zero ESI Label, unless all the non-upgraded
        NVEs in the ES support only Local Bias. For example, consider NVE1 and
        NVE2 using MPLSoUDP as encapsulation, attached to the same Ethernet
        Segment ES1, and advertising an SHT value of 01 (Local Bias) with a
        zero ESI Label value. Suppose NVE3, which does not support this
        specification, joins ES1 and advertises an SHT value of 00 (default).
        Upon receiving NVE3's A-D per ES route, NVE1 and NVE2 MUST update
        their A-D per ES routes for ES1 to include a valid, non-zero ESI Label
        value. The assumption here is that NVE3 only supports 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 in <xref target="RFC8365"/>, an NVE that supports
      multiple data plane encapsulations (e.g., VXLAN, NVGRE, MPLS, MPLSoUDP,
      GENEVE) must indicate all supported encapsulations using BGP
      Encapsulation extended communities as defined in <xref
      target="RFC9012"/> for all EVPN routes. This section provides
      clarification on the multihoming Split Horizon behavior for NVEs that
      advertise and receive multiple BGP Encapsulation extended communities
      along with the A-D per ES routes. This section uses the notation {x, y}
      to denote the encapsulations advertised in BGP Encapsulation extended
      communities, where x and y represent different encapsulation values.</t>

      <t>It is important to note that an NVE MAY advertise multiple A-D per ES
      routes for the same ES, rather than a single route, with each route
      conveying a set of Route Targets (RT). The total set of Route Targets
      associated with a given ES is referred to as the RT-set for that ES.
      Each 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 distinct
      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 the described behavior as follows:</t>

      <t><list style="letters">
          <t>An A-D per ES route for ES-x may be advertised with multiple
          encapsulations, some of which support a single Split Horizon method.
          In this case, the Split Horizon Type (SHT) value MUST be 00. For
          instance, encapsulations such as {VXLAN, NVGRE}, {VXLAN, GENEVE}, or
          {MPLS, MPLSoGRE, MPLSoUDP} can be advertised in an A-D per ES route.
          In all these cases, the SHT value MUST be 00.</t>

          <t>An A-D per ES route for ES-y may be advertised with multiple
          encapsulations that all support both Split Horizon methods. In this
          case, the SHT value MAY be 01 if the preferred method is Local Bias,
          or 10 if the ESI Label-based method is desired. For example,
          encapsulations such as {MPLSoGRE, MPLSoUDP, GENEVE} (or a subset)
          MAY be advertised in an A-D per ES route with an 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 requiring different Split Horizon methods, a
          distinct A-D per ES route (or group of routes) per Split Horizon
          method MUST be advertised. For example, consider an ES-z with n
          Route Targets (RTs) where:<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 scenario, 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}, and an SHT value of 00. The ESI Label MAY
              be zero.</t>

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

              <t>A-D per ES route group 3, including (RTm+1..RTn), with
              encapsulation {GENEVE}, and an SHT value of 10. The ESI Label
              MUST have a valid, non-zero value, and the Ethernet option as
              defined in <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 within that EVI
      support a common encapsulation. Failure to meet this condition may
      result in service disruption or failure.</t>
    </section>

    <section title="Security Considerations">
      <t>All the security considerations described in <xref target="RFC7432"/>
      are applicable to this document.</t>

      <t>Additionally, this document modifies the procedures for Split Horizon
      filtering as outlined in <xref target="RFC8365"/>, offering operators a
      choice between Local Bias and ESI Label-based filtering for tunnels that
      support both methods. Misconfiguration of the desired Split Horizon Type
      (SHT) could lead to forwarding behaviors that differ from the intended
      configuration. Apart from this risk, this document describes procedures
      to ensure that all Provider Edge (PE) devices or Network Virtualization
      Edges (NVEs) connected to the same Ethernet Segment (ES) agree on a
      common SHT method, with a fallback to a default behavior in case of a
      mismatch in the SHT bits being advertised by any two PEs or NVEs in the
      Ethernet Segment. Consequently, unauthorized changes to the SHT
      configuration by an attacker on a single PE or NVE of the Ethernet
      Segment should not cause traffic disruption (as long as the SHT value is
      valid as per this document) but may result in alterations to 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 <xref target="RFC7432"/>. Initial registrations are made for
      the "Multihoming redundancy mode" field in bits 0 and 1, and the "Split
      Horizon Type" field in bits 6 and 7, as follows:</t>

      <texttable>
        <ttcol>Bit Position</ttcol>

        <ttcol>Name</ttcol>

        <ttcol>Reference</ttcol>

        <c>0-1</c>

        <c>Multihoming redundancy mode</c>

        <c><xref target="RFC7432"/></c>

        <c>2-5</c>

        <c>Unused</c>

        <c/>

        <c>6-7</c>

        <c>Split Horizon Type</c>

        <c>This Document</c>
      </texttable>

      <t>In addition, the "Multihoming redundancy mode" field is initialized
      as follows:</t>

      <texttable>
        <ttcol>Value</ttcol>

        <ttcol>Multihoming redundancy mode</ttcol>

        <c>00</c>

        <c>All-Active mode</c>

        <c>01</c>

        <c>Single-Active mode</c>

        <c>10</c>

        <c>Unused</c>

        <c>11</c>

        <c>Unused</c>
      </texttable>

      <t>And the field "Split Horizon Type" is initialized as follows:</t>

      <texttable>
        <ttcol>Value</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>Unused</c>
      </texttable>

      <t>New registrations in the "EVPN ESI Label Extended Community Flags"
      registry will be made through the "IETF Review" procedure defined in
      <xref target="RFC8126"/>. This registry is located in the "Border
      Gateway Protocol (BGP) Extended Communities" registry.</t>
    </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. Thanks to Gunter van
      de Velde as well, for his thorough review.</t>
    </section>
  </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>
