<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?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-dong-lsr-l2bundle-srv6-01"
     ipr="trust200902">
  <front>
    <title abbrev="IGP L2 bundle for SRv6">Advertising SRv6 SIDs for Layer 2
    Bundle Member Links in IGP</title>

    <author fullname="Jie Dong" initials="J." surname="Dong">
      <organization>Huawei Technologies</organization>

      <address>
        <postal>
          <street>Huawei Campus, No. 156 Beiqing Road</street>

          <city>Beijing</city>

          <code>100095</code>

          <country>China</country>
        </postal>

        <email>jie.dong@huawei.com</email>
      </address>
    </author>

    <author fullname="Zhibo Hu" initials="Z." surname="Hu">
      <organization>Huawei Technologies</organization>

      <address>
        <postal>
          <street>Huawei Campus, No. 156 Beiqing Road</street>

          <city>Beijing</city>

          <code>100095</code>

          <country>China</country>
        </postal>

        <email>huzhibo@huawei.com</email>
      </address>
    </author>

    <date day="24" month="October" year="2021"/>

    <area>Routing Area</area>

    <workgroup>LSR Working Group</workgroup>

    <abstract>
      <t>There are deployments where the Layer-3 interface on which IGP
      operates is a Layer-2 interface bundle. Existing IGP advertisements only
      support advertising link attributes of the Layer-3 interface. If
      entities external to IGP wish to control traffic flows on the individual
      physical links that comprise the Layer-2 interface bundle, link
      attribute information about the bundle members is advertised by IGP
      extensions for Layer-2 (L2) bundle.</t>

      <t>When Segment Routing over IPv6 (SRv6) is used with Layer-2 interface
      bundle to control traffic flows on the individual member links, the SRv6
      SIDs which represent the Layer 2 member links of the L2 bundle needs to
      be advertised in IGP.</t>

      <t>This document proposes the IGP extensions to advertise the SRv6 SIDs
      of the Layer 2 (L2) bundle member links.</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119">RFC 2119</xref>.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>There are deployments where the Layer-3 interface on which an IGP
      adjacency is established is a Layer-2 interface bundle, for instance, a
      Link Aggregation Group (LAG) <xref target="IEEE802.1AX"/>. This reduces
      the number of adjacencies that need to be maintained by the routing
      protocol in cases where there are parallel links between the neighbors.
      Entities external to IS-IS such as Path Computation Elements (PCEs)
      <xref target="RFC4655"/> may wish to control traffic flows on individual
      members of the underlying Layer-2 bundle. In order to do so, link
      attribute information about individual bundle members is required.</t>

      <t><xref target="RFC8668"/> and <xref
      target="I-D.ietf-lsr-ospf-l2bundles"/> specify the IGP extensions to
      advertise link attribute information for each of the L2 Bundle members
      which comprise the Layer-3 interface, in which the encoding and
      advertisement of SR-MPLS adjacency SIDs of each bundle member link is
      defined. When SRv6 is used with Layer-2 interface bundle, to control
      traffic flows on the individual member links, the SRv6 SIDs which
      represent the Layer-2 member links of the L2 bundle needs to be
      advertised.</t>

      <t>This document proposes the IGP extensions to advertise the SRv6 SIDs
      of the Layer-2 (L2) bundle member links.</t>
    </section>

    <section title="Requirements Language">
      <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 BCP14
      <xref target="RFC2119">RFC 2119</xref> <xref target="RFC8174">RFC
      8174</xref> when, and only when, they appear in all capitals, as shown
      here.</t>
    </section>

    <section title="SRv6 Function for L2 Bundle Member Links">
      <t>As defined in <xref target="RFC8986"/>, the SRv6 End.X behavior means
      "Endpoint with cross-connect to an array of layer-3 adjacencies". An
      SRv6 SID associated with a Layer 2 bundle member link of an L3 adjacency
      is considered a variant of the End.X behavior. In order to distinguish
      it from the SIDs associated with a L3 adjacency, it is considered that a
      different type of SRv6 function needs to be used.</t>

      <t><xref target="I-D.dong-spring-srv6-inter-layer-programming"/> defines
      a new End.XU function which means "Endpoint with cross-connect to an
      underlay interface", this function can be used for the L2 bundle member
      links.</t>
    </section>

    <section title="Advertising SRv6 SIDs for L2 Bundle Members">
      <t/>

      <section title="SRv6 SIDs Encodings for IS-IS L2 Bundle">
        <t>This section defines the IS-IS sub-TLVs to advertise SRv6 SIDs for
        L2 Bundle Members. Following the encoding mechanism used in <xref
        target="RFC8668"/> for the advertisement of SR-MPLS adj-SIDs for L2
        Bundle Members, this allows the advertisement of a set of SRv6 SIDs
        (one per L2 Bundle Member) in a single sub-TLV.</t>

        <section title="L2 Bundle Member SRv6 End.XU SID Sub-TLV">
          <t><xref target="I-D.ietf-lsr-isis-srv6-extensions"/> defines the
          SRv6 End.X SID sub-TLV to advertise an SRv6 SID associated with a
          point to point adjacency. This document defines a new sub-TLV of
          called "L2 Bundle Member SRv6 End.XU SIDs" to advertise the SRv6
          End.XU SIDs for the L2 Bundle Members. This sub-TLV is allowed to be
          carried in TLV 25 "L2 Bundle Member Attributes" only. The format of
          the sub-TLV is as below:</t>

          <t><figure>
              <artwork><![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    |   Algorithm   |    Weight     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|         Endpoint Behavior     |    
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SID #1 (128 bits)                                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SID #2 (128 bits)                                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ...                                                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SID #n (128 bits)                                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Sub-sub-tlv-len|         Sub-sub-TLVs (variable) . . .         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
            </figure></t>

          <t>Where:</t>

          <t><list style="symbols">
              <t>Type: TBA.</t>

              <t>Length: Variable.</t>

              <t>Flags: 1 octet. The format is the same as the Flags field in
              the SRv6 End.X SID sub-TLV as defined in <xref
              target="I-D.ietf-lsr-isis-srv6-extensions"/>.</t>

              <t>Algorithm: 1 octet. The algorithm values are defined in the
              IGP Algorithm Type registry.</t>

              <t>Weight: 1 octet. The value represents the weight of the SID
              for the purpose of load balancing.</t>

              <t>Endpoint Behavior: 2 octets. It SHOULD be set to the Endpoint
              functions as defined in <xref
              target="I-D.dong-spring-srv6-inter-layer-programming"/>.</t>

              <t>SIDs. One or multiple 16-octet SRv6 SIDs. The number of the
              SIDs is determined by the "Number of L2 Bundle Member
              Descriptors" field as defined in <xref target="RFC8668"/>.</t>

              <t>Sub-sub-tlv-length: 1 octet. Number of octets used by
              sub-sub-TLVs.</t>
            </list></t>
        </section>

        <section title="L2 Bundle Member SRv6 LAN End.XU SID Sub-TLV">
          <t><xref target="I-D.ietf-lsr-isis-srv6-extensions"/> defines the
          SRv6 LAN End.X SID sub-TLV to advertise an SRv6 SID associated with
          a LAN adjacency. This document defines a new sub-TLV called "L2
          Bundle Member SRv6 LAN End.XU SIDs" to advertise the SRv6 LAN End.XU
          SIDs for the L2 Bundle Members. The format of the sub-TLV is as
          below:</t>

          <t><figure>
              <artwork><![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    |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
|             Neighbor System-ID (ID length octets)             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Flags    |   Algorithm   |    Weight     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|         Endpoint Behavior     |    
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SID #1 (128 bits)                                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SID #2 (128 bits)                                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ...                                                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SID #n (128 bits)                                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Sub-sub-tlv-len|         Sub-sub-TLVs (variable) . . .         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
            </figure></t>

          <t>Where:</t>

          <t><list style="symbols">
              <t>Type: TBA.</t>

              <t>Length: Variable.</t>

              <t>Neighbor System-ID: IS-IS System-ID of length "ID Length" as
              defined in <xref target="ISO10589"/>.</t>

              <t>Flags: 1 octet, the format is the same as the Flags field in
              the SRv6 End.X SID sub-TLV as defined in <xref
              target="I-D.ietf-lsr-isis-srv6-extensions"/>.</t>

              <t>Algorithm: 1 octet. The algorithm values are defined in the
              IGP Algorithm Type registry.</t>

              <t>Weight: 1 octet. The value represents the weight of the End.X
              SID for the purpose of load balancing.</t>

              <t>Endpoint Behavior: 2 octets. It SHOULD be set to the Endpoint
              functions as defined in <xref
              target="I-D.dong-spring-srv6-inter-layer-programming"/>.</t>

              <t>SIDs. One or multiple 16-octet SRv6 SIDs. The number of the
              SIDs is determined by the "Number of L2 Bundle Member
              Descriptors" field as defined in <xref target="RFC8668"/>.</t>

              <t>Sub-sub-tlv-length: 1 octet. Number of octets used by
              sub-sub-TLVs.</t>
            </list></t>
        </section>
      </section>

      <section title="SRv6 SIDs Encodings for OSPF L2 Bundle">
        <t>This section defines the mechanism to advertise SRv6 SIDs for L2
        Bundle Members. In <xref target="I-D.ietf-lsr-ospf-l2bundles"/>, the
        SR-MPLS Adjacency SID sub-TLVs for the L3 adjacency is reused for the
        advertisement of Adjacency SIDs of L2 Bundle Members. For SRv6 data
        plane , the SRv6 End.X SID sub-TLV and SRv6 LAN End.X SID Sub-TLV as
        defined in <xref target="I-D.ietf-lsr-ospfv3-srv6-extensions"/> are
        reused for the advertisement of SRv6 End.XU SIDs of L2 Bundle Members,
        the Endpoint Behavior in the sub-TLV SHOULD be set to the Endpoint
        functions as defined in <xref
        target="I-D.dong-spring-srv6-inter-layer-programming"/>.</t>
      </section>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>IANA is requested to assign two new code points from the IS-IS
      "Sub-TLVs for TLVs 22, 23, 25, 141, 222, and 223" registry.</t>

      <t><figure>
          <artwork><![CDATA[   +------+--------------------------+----+----+----+-----+-----+-----+
   | Type | Description              | 22 | 23 | 25 | 141 | 222 | 223 |
   +======+==========================+====+====+====+=====+=====+=====+
   |  TBD | L2 Bundle Member SRv6    | n  | n  | y  |  n  |  n  |  n  |
   |      | End.XU SID               |    |    |    |     |     |     |                
   +------+--------------------------+----+----+----+-----+-----+-----+
   |  TBD | L2 Bundle Member SRv6    | n  | n  | y  |  n  |  n  |  n  |
   |      | LAN End.XU SID           |    |    |    |     |     |     |
   +------+--------------------------+----+----+----+-----+-----+-----+]]></artwork>
        </figure></t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>The security considerations in <xref target="RFC8668"/> and <xref
      target="I-D.ietf-lsr-ospf-l2bundles"/> apply. This document introduces
      no additional security vulnerabilities to IS-IS and OSPF.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>The authors would like to thank Zhenbin Li for the review and
      discussion of this document.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>

      <?rfc include='reference.RFC.8174'?>

      <?rfc include='reference.RFC.8668'?>

      <?rfc include='reference.I-D.ietf-lsr-ospf-l2bundles'?>

      <?rfc include='reference.I-D.ietf-lsr-isis-srv6-extensions'?>

      <?rfc include='reference.I-D.ietf-lsr-ospfv3-srv6-extensions'?>

      <reference anchor="IEEE802.1AX"
                 target="https://ieeexplore.ieee.org/document/7055197">
        <front>
          <title>IEEE Standard for Local and metropolitan area networks --
          Link Aggregation</title>

          <author>
            <organization>IEEE</organization>
          </author>

          <date year="2016"/>
        </front>
      </reference>

      <reference anchor="ISO10589"
                 target="https://ieeexplore.ieee.org/document/7055197">
        <front>
          <title>Information technology -- Telecommunications and information
          exchange between systems -- Intermediate System to Intermediate
          System intra-domain routing information exchange protocol for use in
          conjunction with the protocol for providing the connectionless-mode
          network service (ISO 8473)</title>

          <author>
            <organization>ISO</organization>
          </author>

          <date month="November" year="2002"/>
        </front>
      </reference>
    </references>

    <references title="Informative References">
      <?rfc include='reference.RFC.4655'?>

      <?rfc include='reference.RFC.8986'?>

      <?rfc include='reference.I-D.dong-spring-srv6-inter-layer-programming'?>
    </references>
  </back>
</rfc>
