<?xml version="1.0" encoding="UTF-8"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="info"
     docName="draft-garg-l2vpn-over-srv6-02"
     ipr="trust200902"
     submissionType="independent"
     xml:lang="en"
     version="3">

  <front>
    <title abbrev="L2VPN over SRv6">
      Method to enable signaling of L2VPN services using SRv6 extensions
    </title>

    <seriesInfo name="Internet-Draft" value="draft-garg-l2vpn-over-srv6-02"/>

    <author fullname="Abhishek Garg" initials="Abhishek" surname="Garg" asciiFullname="Abhishek Garg">
      <organization>Ciena</organization>
      <address>
        <email>abhishekgarg.vip@gmail.com</email>
      </address>
    </author>

    <author fullname="Vivek Joshi" initials="Vivek" surname="Joshi" asciiFullname="Vivek Joshi">
      <organization>Ciena</organization>
      <address>
        <email>vjoshi@ciena.com</email>
      </address>
    </author>

    <date year="2026" month="September" day="1"/>

    <area>Routing</area>
    <workgroup>Individual Submission</workgroup>

    <keyword>L2VPN</keyword>
    <keyword>SRv6</keyword>
    <keyword>pseudowire</keyword>
    <keyword>IS-IS</keyword>
    <keyword>End.DX2</keyword>
    <keyword>End.DT2U</keyword>
    <keyword>End.DT2M</keyword>

    <abstract>
      <t>
        This document describes a mechanism to provide L2VPN services using
        Segment Routing over IPv6 (SRv6), eliminating the need for a separate
        signaling protocol for VPN label distribution.  In current deployments,
        L2VPN services rely on dedicated protocols such as the Label Distribution
        Protocol (LDP) or Border Gateway Protocol (BGP) for service label
        signaling, which adds control-plane complexity.  The proposed mechanism
        introduces an SRv6-based extension that enables L2VPN service
        identification within the SRv6 framework, reducing control-plane overhead
        and providing a simplified and efficient solution for L2VPN service
        delivery.
      </t>
    </abstract>
  </front>

  <middle>

    <section numbered="true" toc="default">
      <name>Introduction</name>
      <t>
        Layer 2 Virtual Private Network (L2VPN) services are widely deployed
        across service provider (SP) and data center (DC) networks to provide
        connectivity between geographically distributed sites.
      </t>
      <t>
        These services typically rely on two separate mechanisms for transport
        and service signaling.  The transport layer is provided by protocols
        such as MPLS or IP, while the service label (or pseudowire identifier)
        is distributed using dedicated control-plane protocols such as LDP or BGP.
      </t>
      <t>
        With the evolution of networking technologies, Segment Routing over IPv6
        (SRv6) has emerged as a flexible and scalable approach for traffic
        engineering and service delivery, as described in <xref target="RFC8402"/>
        and <xref target="RFC8986"/>.
      </t>
      <t>
        In parallel, network environments continue to include a mix of modern and
        legacy devices with varying capabilities and scalability constraints.  In
        many deployments, lightweight L2VPN services are needed for use cases such
        as management traffic or small-scale data center interconnect (DCI), where
        existing BGP-based solutions may be overly complex.
      </t>
      <t>
        This document focuses on improving L2VPN services by introducing an SRv6
        extension that carries L2VPN service identification natively, without
        requiring a separate service signaling protocol.
      </t>
    </section>

    <section numbered="true" toc="default">
      <name>Requirements Language</name>
      <t>
        The key words <bcp14>MUST</bcp14>, <bcp14>MUST NOT</bcp14>,
        <bcp14>REQUIRED</bcp14>, <bcp14>SHALL</bcp14>, <bcp14>SHALL NOT</bcp14>,
        <bcp14>SHOULD</bcp14>, <bcp14>SHOULD NOT</bcp14>,
        <bcp14>RECOMMENDED</bcp14>, <bcp14>NOT RECOMMENDED</bcp14>,
        <bcp14>MAY</bcp14>, and <bcp14>OPTIONAL</bcp14> 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 numbered="true" toc="default">
      <name>Problem Statement</name>
      <t>
        L2VPN services are widely deployed across SP and DC networks.  Existing
        solutions typically require separate mechanisms for transport and service
        identification, resulting in additional label overhead and dependency on
        multiple control-plane protocols.  These protocols must remain
        synchronized for correct operation, which increases operational complexity
        and may lead to service issues in case of inconsistency.
      </t>
      <t>
        Current approaches, such as Ethernet VPN (EVPN) over SRv6, reduce
        data-plane complexity but rely heavily on BGP, which can introduce
        scalability challenges, particularly on resource-constrained devices.
      </t>
      <t>
        In many deployments, lightweight L2VPN services are required for use
        cases such as management traffic or small-scale DCI, where existing
        solutions may be overly complex.
      </t>
      <t>
        Therefore, there is a need for a simplified and scalable L2VPN mechanism
        with reduced control-plane overhead and improved operational efficiency.
      </t>
    </section>

    <section numbered="true" toc="default">
      <name>Proposed Solution</name>
      <t>
        This document proposes a simplified L2VPN mechanism based on SRv6,
        eliminating the need for separate signaling protocols for transport and
        service identification.
      </t>
      <t>
        In the proposed approach, SRv6 is used for both transport and pseudowire
        (PW) signaling, thereby reducing the dependency on multiple control-plane
        protocols.  This unification simplifies service provisioning and reduces
        operational overhead.
      </t>
      <t>
        In a typical SRv6 deployment, an Endpoint SID (End SID) derived from an
        SRv6 locator is used to provide end-to-end transport connectivity.  This
        document extends the same concept to L2VPN services by introducing SRv6
        endpoint functions that represent the L2VPN service.  These functions
        include End.DX2 for E-LINE forwarding and End.DT2U or End.DT2M for ELAN
        forwarding, depending on whether the traffic requires unicast or
        broadcast/multicast lookup.  They enable both service identification and
        forwarding behavior within the SRv6 framework.
      </t>
      <t>
        By leveraging SRv6 for both transport and service layers, the proposed
        mechanism reduces control-plane complexity and avoids the need for
        maintaining separate label spaces or signaling protocols.
      </t>
    </section>

    <section numbered="true" toc="default">
      <name>Detailed Mechanism</name>
      <t>
        Throughout this document, the term "End.L2VPN SID" is used as a generic
        reference to the SRv6 L2VPN endpoint SID.  It refers to End.DX2,
        End.DT2U, or End.DT2M depending on the service type and forwarding
        behavior indicated by the L2VPN SRv6 Service TLV and its sub-TLVs (see
        <xref target="sec-signaling"/>).  Readers <bcp14>SHOULD</bcp14>
        interpret End.L2VPN SID accordingly wherever it appears in this
        document.
      </t>

      <section numbered="true" toc="default">
        <name>End.L2VPN SID: End.DX2, End.DT2U, and End.DT2M</name>
        <t>
          The SRv6 endpoint behavior assigned to the L2VPN SID depends on the
          L2VPN service type, as follows:
        </t>
        <ul spacing="normal">
          <li>
            <t>
              End.DX2 (Endpoint with decapsulation and Layer-2 cross-connect),
              as defined in Section 4.8 of <xref target="RFC8986"/>:
              Used for E-LINE (point-to-point) services.  The receiving PE
              decapsulates the SRv6 header and forwards the L2 payload directly
              to the attachment circuit associated with the specific pseudowire.
              This behavior is applicable when there is a single, known next-hop
              L2 destination.
            </t>
          </li>
          <li>
            <t>
              End.DT2U (Endpoint with decapsulation and unicast MAC L2 table
              lookup), as defined in Section 4.10 of <xref target="RFC8986"/>:
              Used for ELAN (multipoint) services.  The receiving PE decapsulates
              the SRv6 header and performs a unicast MAC address lookup in the L2
              forwarding table associated with the VPN instance.  This behavior is
              applicable when the destination MAC needs to be resolved from a
              shared L2 forwarding table.
            </t>
          </li>
          <li>
            <t>
              End.DT2M (Endpoint with decapsulation and multicast MAC table
              lookup), as defined in <xref target="RFC8986"/>:
              Used for ELAN broadcast, unknown-unicast, and multicast (BUM)
              traffic.  The receiving PE decapsulates the SRv6 header and
              performs multicast Layer-2 lookup or replication in the ELAN
              forwarding context.
            </t>
          </li>
        </ul>
        <t>
          The Service-Type field in the L2VPN SRv6 Service TLV identifies the
          base L2VPN service model, while the SRv6 service sub-TLVs identify the
          exact forwarding behaviors in use.  Together, these fields allow the
          receiving PE to correctly interpret and install the forwarding state.
        </t>
      </section>

      <section anchor="sec-sid-generation" numbered="true" toc="default">
        <name>SID Generation</name>
        <t>
          A PW-ID that is unique within an L2VPN instance is used to generate an
          End.L2VPN SID.  In the model used by this document, the
          service-specific portion of the SID (the function value) is derived
          by combining the PW-ID with a behavior-type discriminator.  This same
          construction is used for both E-LINE and ELAN services, so that each
          advertised SRv6 endpoint behavior has a distinct SID.
        </t>
        <t>
          In one example encoding, the higher-order function bits carry the
          PW-ID and the lower-order 4 bits carry a behavior-type value.  An
          implementation could use behavior-type value 0x1 for End.DX2, 0x2
          for End.DT2U, and 0x3 for End.DT2M.  Under this model, the function
          value can be computed as: Function = (PW-ID &lt;&lt; 4) | behavior-type.
        </t>
        <t>
          For example, if the Function field is 16 bits long, the lower 4 bits
          are used for the behavior-type discriminator and the upper 12 bits
          are used for the PW-ID.  In that case, the usable PW-ID range is 1
          through 4095.
        </t>
        <t>
          For PW-ID 11 (0xB), the resulting function values are 0xB1 for
          End.DX2, 0xB2 for End.DT2U, and 0xB3 for End.DT2M.  Therefore, an
          E-LINE service that uses End.DX2 advertises a SID whose function
          value is 0xB1, while an ELAN service can advertise 0xB2 for
          End.DT2U and 0xB3 for End.DT2M.  If the local locator is
          2001:db8:bbbb:C::/64, the corresponding SIDs are
          2001:db8:bbbb:C:B1::, 2001:db8:bbbb:C:B2::, and
          2001:db8:bbbb:C:B3::.  The exact encoding of the behavior-type
          discriminator is implementation-defined, but the resulting function
          values <bcp14>MUST</bcp14> be distinct for each advertised behavior
          associated with the same service.  The resulting SID is then
          advertised via the mechanism described in <xref target="sec-signaling"/>.
        </t>
      </section>

      <section anchor="sec-signaling" numbered="true" toc="default">
        <name>Signaling of L2VPN</name>
        <t>
          To signal L2VPN services, this document introduces a new IGP TLV that
          carries L2VPN pseudowire information.  In the example described here,
          the signaling is carried in IS-IS.  Equivalent advertisement in other
          IGPs is outside the scope of this document.
        </t>
        <t>
          An IS-IS LSP carries the L2VPN information in a new TLV, defined as the
          L2VPN SRv6 Service TLV.  The TLV format is as follows:
        </t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
 0                   1                   2                   3
 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      |    Length     |     Flags     |   Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            PW-ID                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|             Neighbor IP Address (128 bits)                    |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Encap-Type   |  Service-Type |          Layer-2 MTU          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~          SRv6 Service Data Sub-TLV (variable)                ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~     SRv6 BUM Service Data Sub-TLV (optional, ELAN only)      ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~        PW Interface Parameters Sub-TLV (optional)            ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~              PW Status Sub-TLV (optional)                    ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <dl newline="true" spacing="normal">
          <dt>Type (8 bits):</dt>
          <dd>The IS-IS TLV type codepoint assigned by IANA (TBD; see
          <xref target="sec-iana"/>).</dd>

          <dt>Length (8 bits):</dt>
          <dd>The total length of the TLV value field in octets, not including
          the Type and Length fields.</dd>

          <dt>Flags (8 bits):</dt>
          <dd>
            <t>Bit 7 (C): Control Word.  When set to 1, indicates that the
            control word is enabled for this pseudowire.  Both PEs
            <bcp14>MUST</bcp14> agree on the value of this bit before the
            pseudowire can be placed in service.</t>
            <t>Bits 6-0 (Reserved): <bcp14>MUST</bcp14> be set to zero on
            transmission and <bcp14>MUST</bcp14> be ignored on receipt.</t>
          </dd>

          <dt>Reserved (8 bits):</dt>
          <dd><bcp14>MUST</bcp14> be set to zero on transmission and
          <bcp14>MUST</bcp14> be ignored on receipt.</dd>

          <dt>PW-ID (32 bits):</dt>
          <dd>A 32-bit unsigned integer that uniquely identifies the pseudowire
          instance within the L2VPN domain.  The value <bcp14>MUST</bcp14> be
          non-zero.  A receiving PE <bcp14>MUST</bcp14> verify that this value
          matches a locally configured PW before installing any forwarding
          state.</dd>

          <dt>Neighbor IP Address (128 bits):</dt>
          <dd>The IPv6 loopback address of the advertising PE.  A receiving PE
          <bcp14>MUST</bcp14> verify that this address matches the expected peer
          address of the locally configured pseudowire before installing
          forwarding state.</dd>

          <dt>Encap-Type (8 bits):</dt>
          <dd>
            <t>Indicates the pseudowire encapsulation type.  Values are
            consistent with the IANA "Pseudowire Types" registry
            <xref target="RFC4446"/>.  Common values include:</t>
            <ul>
              <li>0x01: Ethernet (port mode)</li>
              <li>0x04: Ethernet VLAN</li>
            </ul>
          </dd>

          <dt>Service-Type (8 bits):</dt>
          <dd>
            <t>Indicates the L2VPN service type:</t>
            <ul>
              <li>0x01: E-LINE (point-to-point).  The End.L2VPN SID uses
              End.DX2 behavior as defined in <xref target="RFC8986"/>.</li>
              <li>0x02: ELAN (multipoint).  The End.L2VPN SID uses End.DT2U
              for unicast traffic and <bcp14>MAY</bcp14> additionally use
              End.DT2M for broadcast, unknown-unicast, and multicast traffic
              when the optional SRv6 BUM Service Data Sub-TLV is present.</li>
            </ul>
            <t>Other values are reserved and <bcp14>MUST NOT</bcp14> be used.</t>
          </dd>

          <dt>Layer-2 MTU (16 bits):</dt>
          <dd>The maximum transmission unit of the attachment circuit in bytes.
          A receiving PE <bcp14>SHOULD</bcp14> verify that this value matches
          its locally configured MTU before installing forwarding state.</dd>

          <dt>SRv6 Service Data Sub-TLV:</dt>
          <dd>A mandatory sub-TLV carrying the End.L2VPN SID and associated
          SRv6 service parameters.  Format is defined in
          <xref target="sec-subtlv"/>.</dd>

          <dt>SRv6 BUM Service Data Sub-TLV (optional, ELAN only):</dt>
          <dd>An optional sub-TLV carrying the End.DT2M SID and associated
          SRv6 service parameters for ELAN BUM traffic.  Format is defined in
          <xref target="sec-bum-subtlv"/>.</dd>

          <dt>PW Interface Parameters Sub-TLV (optional):</dt>
          <dd>An optional sub-TLV carrying legacy pseudowire interface
          parameters, encoded using the format defined in
          <xref target="RFC4446"/>.</dd>

          <dt>PW Status Sub-TLV (optional):</dt>
          <dd>An optional sub-TLV that carries pseudowire operational state,
          indicating whether the pseudowire is forwarding and whether
          attachment-circuit or PSN-facing faults have been detected.</dd>
        </dl>
        <t>
          A receiving PE <bcp14>MUST</bcp14> verify that PW-ID, Neighbor IP
          Address, Service-Type, Encap-Type, Layer-2 MTU, and Control Word flag
          are consistent with the locally configured service before installing
          forwarding state for the remote End.L2VPN SID.  If the SRv6 BUM
          Service Data Sub-TLV is present, the receiving PE
          <bcp14>MUST</bcp14> process it only for Service-Type 0x02 (ELAN).
        </t>

        <section anchor="sec-subtlv" numbered="true" toc="default">
          <name>SRv6 Service Data Sub-TLV</name>
          <t>
            The SRv6 Service Data Sub-TLV carries the End.L2VPN SID value and
            its associated SID structure.  The format is as follows:
          </t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
 0                   1                   2                   3
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Sub-TLV Type |    Length     |      Endpoint Behavior        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                   SRv6 SID Value (128 bits)                   |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Loc-Block-Len | Loc-Node-Len  |   Func-Len    |   Arg-Len     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          ]]></artwork>
          <dl newline="true" spacing="normal">
            <dt>Sub-TLV Type (8 bits):</dt>
            <dd>The sub-TLV type codepoint (TBD; see
            <xref target="sec-iana"/>).</dd>

            <dt>Length (8 bits):</dt>
            <dd>The total length of the sub-TLV value field in octets, not
            including the Sub-TLV Type and Length fields.</dd>

            <dt>Endpoint Behavior (16 bits):</dt>
            <dd>
              <t>The SRv6 endpoint behavior code for the advertised SID, taken
              from the IANA "SRv6 Endpoint Behaviors" registry as defined in
              <xref target="RFC8986"/>.  The value <bcp14>MUST</bcp14> be
              consistent with the Service-Type in the enclosing L2VPN SRv6
              Service TLV:</t>
              <ul>
                <li>End.DX2: for E-LINE service (Service-Type 0x01)</li>
                <li>End.DT2U: for ELAN service (Service-Type 0x02)</li>
              </ul>
            </dd>

            <dt>SRv6 SID Value (128 bits):</dt>
            <dd>The SRv6 SID representing the End.L2VPN endpoint function on
            the advertising PE for the associated pseudowire.  The function
            portion of the SID is derived from the PW-ID and behavior-type
            discriminator as described in <xref target="sec-sid-generation"/>.</dd>

            <dt>Loc-Block-Len (8 bits):</dt>
            <dd>Length in bits of the locator block portion of the SID.</dd>

            <dt>Loc-Node-Len (8 bits):</dt>
            <dd>Length in bits of the locator node ID portion of the SID.</dd>

            <dt>Func-Len (8 bits):</dt>
            <dd>Length in bits of the function portion of the SID.  This portion
            encodes the PW-ID value.</dd>

            <dt>Arg-Len (8 bits):</dt>
            <dd>Length in bits of the argument portion of the SID.  Set to zero
            if no argument is present.</dd>
          </dl>
        </section>

        <section anchor="sec-bum-subtlv" numbered="true" toc="default">
          <name>SRv6 BUM Service Data Sub-TLV</name>
          <t>
            The SRv6 BUM Service Data Sub-TLV carries the End.DT2M SID value
            and associated SID structure for ELAN broadcast, unknown-unicast,
            and multicast traffic.  This sub-TLV <bcp14>MUST</bcp14> be
            advertised only when Service-Type is 0x02 (ELAN).  The format is as
            follows:
          </t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
 0                   1                   2                   3
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Sub-TLV Type |    Length     |      Endpoint Behavior        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                BUM SRv6 SID Value (128 bits)                  |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Loc-Block-Len | Loc-Node-Len  |   Func-Len    |   Arg-Len     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          ]]></artwork>
          <dl newline="true" spacing="normal">
            <dt>Sub-TLV Type (8 bits):</dt>
            <dd>The sub-TLV type codepoint (TBD; see
            <xref target="sec-iana"/>).</dd>

            <dt>Length (8 bits):</dt>
            <dd>The total length of the sub-TLV value field in octets, not
            including the Sub-TLV Type and Length fields.</dd>

            <dt>Endpoint Behavior (16 bits):</dt>
            <dd>The SRv6 endpoint behavior code for End.DT2M, taken from the
            IANA "SRv6 Endpoint Behaviors" registry as defined in
            <xref target="RFC8986"/>.</dd>

            <dt>BUM SRv6 SID Value (128 bits):</dt>
            <dd>The SRv6 SID representing the End.DT2M endpoint function on the
            advertising PE for ELAN BUM traffic.  This SID <bcp14>MAY</bcp14>
            be derived from the PW-ID using the same local function
            construction rules as the End.DT2U SID, with a distinct
            behavior-type discriminator.</dd>

            <dt>Loc-Block-Len (8 bits):</dt>
            <dd>Length in bits of the locator block portion of the SID.</dd>

            <dt>Loc-Node-Len (8 bits):</dt>
            <dd>Length in bits of the locator node ID portion of the SID.</dd>

            <dt>Func-Len (8 bits):</dt>
            <dd>Length in bits of the function portion of the SID.</dd>

            <dt>Arg-Len (8 bits):</dt>
            <dd>Length in bits of the argument portion of the SID.  Set to zero
            if no argument is present.</dd>
          </dl>
        </section>
      </section>
    </section>

    <section numbered="true" toc="default">
      <name>Example</name>
      <t>
        Consider a topology with three PE devices (PE1, PE2, PE3) connected
        through one P device.  IS-IS and SRv6 are configured on all nodes, and
        PW configuration is present on the PE devices.
      </t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
                   +--------+
                   |  PE1   |
                   +--------+
                        |
                        |
                   +--------+
                   |   P    |
                   +--------+
                    /       \
                   /         \
                  /           \
            +--------+    +--------+
            |  PE2   |    |  PE3   |
            +--------+    +--------+
      ]]></artwork>
      <t>IS-IS IPv6 and SRv6 are configured on all nodes:</t>
      <ul spacing="normal">
        <li>PW 10 is configured between PE1 and PE2 (E-LINE, End.DX2)</li>
        <li>PW 11 is configured between PE1 and PE3 (E-LINE, End.DX2)</li>
        <li>PW 12 is configured between PE3 and PE2 (E-LINE, End.DX2)</li>
      </ul>
      <t>Node addressing:</t>
      <ul spacing="normal">
        <li>PE1 loopback: 1::1/128,   End SID locator: 2001:db8:bbbb:A::/64</li>
        <li>PE2 loopback: 2::2/128,   End SID locator: 2001:db8:bbbb:B::/64</li>
        <li>PE3 loopback: 3::3/128,   End SID locator: 2001:db8:bbbb:C::/64</li>
      </ul>
      <t>The example below focuses on PW 11 (E-LINE) between PE1 and PE3.</t>
      <t>PE1 configuration:</t>
      <artwork><![CDATA[
   #L2VPN-srv6  pw-id 11 neighbor 3::3 service-type eline
      ]]></artwork>
      <t>PE3 configuration:</t>
      <artwork><![CDATA[
   #L2VPN-srv6  pw-id 11 neighbor 1::1 service-type eline
      ]]></artwork>
      <t>SID derivation:</t>
      <ul spacing="normal">
        <li>PE1 End.DX2 SID for PW 11: 2001:db8:bbbb:A:B1::
        (locator 2001:db8:bbbb:A::/64, function = 0xB1, where 0xB is the
        PW-ID value and 0x1 identifies End.DX2)</li>
        <li>PE3 End.DX2 SID for PW 11: 2001:db8:bbbb:C:B1::
        (locator 2001:db8:bbbb:C::/64, function = 0xB1, where 0xB is the
        PW-ID value and 0x1 identifies End.DX2)</li>
      </ul>

      <section numbered="true" toc="default">
        <name>Control Plane</name>
        <t>
          After pseudowire configuration, each PE advertises an IS-IS LSP
          containing an L2VPN SRv6 Service TLV for the configured PW.
        </t>
        <t>
          When PE1 receives the IS-IS update from PE3, it examines the L2VPN
          SRv6 Service TLV and verifies the following parameters against its
          local configuration:
        </t>
        <ul spacing="normal">
          <li>PW-ID matches a locally configured pseudowire (PW 11)</li>
          <li>Neighbor IP Address matches the expected peer (3::3 for PE1,
          1::1 for PE3)</li>
          <li>Service-Type, Encap-Type, Layer-2 MTU, and Control Word flag are
          consistent with the local service parameters</li>
        </ul>
        <t>
          If all parameters are consistent, PE1 installs PE3's End.DX2 SID
          2001:db8:bbbb:C:B1:: in its SRv6 forwarding table, mapped to the
          PW 11 attachment circuit.
        </t>
        <t>
          The same process occurs on PE3 when it receives the matching
          advertisement from PE1: PE3 installs 2001:db8:bbbb:A:B1:: in its
          SRv6 forwarding table.
        </t>
      </section>

      <section numbered="true" toc="default">
        <name>Data Plane</name>
        <t>
          When PE1 detects traffic on the attachment circuit for PW 11, it looks
          up PW 11 in its SRv6 forwarding table, retrieves PE3's End.DX2 SID
          2001:db8:bbbb:C:B1::, and creates an IPv6 packet with that destination
          address.  The L2VPN payload is encapsulated as the IPv6 payload.
        </t>
        <t>
          When the P device receives the IPv6 packet, it performs a
          longest-prefix match on the destination SID.  Because the SRv6 locator
          for PE3, 2001:db8:bbbb:C::/64, is present in the forwarding table, the
          packet is forwarded toward PE3.
        </t>
        <t>
          When PE3 receives the packet, it matches the destination address
          2001:db8:bbbb:C:B1:: against its End.DX2 SID for PW 11, decapsulates the
          IPv6 header, and forwards the L2 payload toward the PW 11 attachment
          circuit.
        </t>
      </section>
    </section>

    <section numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>
        This document introduces a new signaling element that can influence
        pseudowire forwarding state.  Incorrect, spoofed, or unauthorized L2VPN
        SRv6 Service TLV advertisements could redirect traffic, blackhole
        traffic, or cause unintended pseudowire bindings to be installed.
      </t>
      <t>
        A receiving PE <bcp14>MUST</bcp14> validate that the advertised PW-ID,
        Neighbor IP Address, Service-Type, Encap-Type, Layer-2 MTU, and Control
        Word flag match locally provisioned state before installing any forwarding
        state derived from the received advertisement.
      </t>
      <t>
        Implementations and deployments <bcp14>SHOULD</bcp14> use the
        authentication and integrity mechanisms available for the underlying IGP
        carrying this information (e.g., IS-IS authentication as described in
        <xref target="RFC5304"/>).
      </t>
      <t>
        Operators <bcp14>SHOULD</bcp14> also consider the impact of stale
        advertisements, replayed information, and excessive service advertisements
        on nodes with constrained resources.
      </t>
    </section>

    <section anchor="sec-iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>
        This document requests the following allocations from IANA.
      </t>

      <section numbered="true" toc="default">
        <name>IS-IS TLV Codepoints Registry</name>
        <t>
          This document requests one new codepoint from the "IS-IS TLV
          Codepoints" registry:
        </t>
        <table align="left">
          <thead>
            <tr>
              <th>Value</th>
              <th>Name</th>
              <th>IIH</th>
              <th>LSP</th>
              <th>SNP</th>
              <th>Purge</th>
              <th>Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>TBD</td>
              <td>L2VPN SRv6 Service TLV</td>
              <td>No</td>
              <td>Yes</td>
              <td>No</td>
              <td>No</td>
              <td>This document</td>
            </tr>
          </tbody>
        </table>
        <t>
          The TLV carries L2VPN pseudowire service information for an SRv6-based
          L2VPN signaling mechanism, including PW-ID, Neighbor IP Address,
          End.L2VPN SID, Encap-Type, Service-Type, Layer-2 MTU, Control Word
          flag, and optional sub-TLVs.
        </t>
        <t>
          This document does not request any sub-TLV codepoint assignment.  Such
          allocations <bcp14>MAY</bcp14> be defined by future documents if needed.
        </t>
      </section>
    </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="1997" month="March"/>
          </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="2017" month="May"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>

        <reference anchor="RFC8402" target="https://www.rfc-editor.org/info/rfc8402">
          <front>
            <title>Segment Routing Architecture</title>
            <author initials="C." surname="Filsfils" fullname="C. Filsfils" role="editor">
              <organization/>
            </author>
            <author initials="S." surname="Previdi" fullname="S. Previdi" role="editor">
              <organization/>
            </author>
            <author initials="L." surname="Ginsberg" fullname="L. Ginsberg">
              <organization/>
            </author>
            <author initials="B." surname="Decraene" fullname="B. Decraene">
              <organization/>
            </author>
            <author initials="S." surname="Litkowski" fullname="S. Litkowski">
              <organization/>
            </author>
            <author initials="R." surname="Shakir" fullname="R. Shakir">
              <organization/>
            </author>
            <date year="2018" month="July"/>
          </front>
          <seriesInfo name="RFC" value="8402"/>
          <seriesInfo name="DOI" value="10.17487/RFC8402"/>
        </reference>

        <reference anchor="RFC8986" target="https://www.rfc-editor.org/info/rfc8986">
          <front>
            <title>Segment Routing over IPv6 (SRv6) Network Programming</title>
            <author initials="C." surname="Filsfils" fullname="C. Filsfils" role="editor">
              <organization/>
            </author>
            <author initials="P." surname="Camarillo" fullname="P. Camarillo" role="editor">
              <organization/>
            </author>
            <author initials="J." surname="Leddy" fullname="J. Leddy">
              <organization/>
            </author>
            <author initials="D." surname="Voyer" fullname="D. Voyer">
              <organization/>
            </author>
            <author initials="S." surname="Matsushima" fullname="S. Matsushima">
              <organization/>
            </author>
            <author initials="Z." surname="Li" fullname="Z. Li">
              <organization/>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="RFC" value="8986"/>
          <seriesInfo name="DOI" value="10.17487/RFC8986"/>
        </reference>

      </references>

      <references>
        <name>Informative References</name>

        <reference anchor="RFC4446" target="https://www.rfc-editor.org/info/rfc4446">
          <front>
            <title>IANA Allocations for Pseudowire Edge to Edge Emulation (PWE3)</title>
            <author initials="L." surname="Martini" fullname="L. Martini">
              <organization/>
            </author>
            <date year="2006" month="April"/>
          </front>
          <seriesInfo name="BCP" value="116"/>
          <seriesInfo name="RFC" value="4446"/>
          <seriesInfo name="DOI" value="10.17487/RFC4446"/>
        </reference>

        <reference anchor="RFC5304" target="https://www.rfc-editor.org/info/rfc5304">
          <front>
            <title>IS-IS Cryptographic Authentication</title>
            <author initials="T." surname="Li" fullname="T. Li">
              <organization/>
            </author>
            <author initials="R." surname="Atkinson" fullname="R. Atkinson">
              <organization/>
            </author>
            <date year="2008" month="October"/>
          </front>
          <seriesInfo name="RFC" value="5304"/>
          <seriesInfo name="DOI" value="10.17487/RFC5304"/>
        </reference>

      </references>
    </references>

  </back>
</rfc>