<?xml version="1.0" encoding="US-ASCII"?>
<!-- This is built from a template for a generic Internet Draft. Suggestions for
     improvement welcome - write to Brian Carpenter, brian.e.carpenter @ gmail.com -->
<!-- This can be converted using the Web service at http://xml.resource.org/experimental.html
     (which supports the latest, sometimes undocumented and under-tested, features.) -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<!-- You want a table of contents -->
<?rfc symrefs="yes"?>
<!-- Use symbolic labels for references -->
<?rfc sortrefs="yes"?>
<!-- This sorts the references -->
<?rfc iprnotified="no" ?>
<!-- Change to "yes" if someone has disclosed IPR for the draft -->
<?rfc compact="yes"?>
<!-- This defines the specific filename and version number of your draft (and inserts the appropriate IETF boilerplate -->
<rfc category="std"
     docName="draft-dong-spring-srv6-inter-layer-programming-03"
     ipr="trust200902">
  <front>
    <title abbrev="SRv6 Inter-Layer Network Programming">SRv6 for Inter-Layer
    Network Programming</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, 100095</city>

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

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

    <author fullname="Liuyan Han" initials="L." surname="Han">
      <organization>China Mobile</organization>

      <address>
        <postal>
          <street>No.32 XuanWuMen West Street</street>

          <city>Beijing, 100053</city>

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

        <email>hanliuyan@chinamobile.com</email>
      </address>
    </author>

    <author fullname="Zongpeng Du" initials="Z." surname="Du">
      <organization>China Mobile</organization>

      <address>
        <postal>
          <street>No.32 XuanWuMen West Street</street>

          <city>Beijing, 100053</city>

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

        <email>duzongpeng@foxmail.com</email>
      </address>
    </author>

    <author fullname="Minxue Wang" initials="M." surname="Wang">
      <organization>China Mobile</organization>

      <address>
        <postal>
          <street>No.32 XuanWuMen West Street</street>

          <city>Beijing, 100053</city>

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

        <email>wangminxue@chinamobile.com</email>
      </address>
    </author>

    <date day="11" month="July" year="2022"/>

    <area>Routing</area>

    <workgroup>SPRING Working Group</workgroup>

    <keyword>SRv6, Network Programming, Inter-Layer</keyword>

    <abstract>
      <t>This document defines a new SRv6 function which can be used for SRv6
      based inter-layer network programming. It is a variant of the End.X
      behavior. Instead of pointing to an interface with layer-3 adjacency,
      this new End.XU behavior points to an underlay interface which connects
      to a remote layer-3 node via underlying links or connections that may be
      invisible in the L3 topology.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t>In many network scenarios, operator owns a multi-layered network. In
      layer-3, it has been converged to IP technologies, while there can be
      different technologies in the layer-2 and layer-1. In such networks, the
      cross-layer planning and optimization is considered more efficient than
      independent planning and operation of the layer-3 and the underlying
      networks in terms of resource utilization and SLA assurance, but are
      also considered more complicated. Thus a mechanism for flexible
      inter-layer network integration is desired.</t>

      <t>Segment Routing over IPv6 (SRv6) <xref target="RFC8986"/> enables a
      network operator or an application to specify a packet processing
      program by encoding a sequence of instructions in the IPv6 packet
      header. Currently SRv6 does not consider about the network layers under
      the IP layer. However, with the capability of SRv6 network programming,
      it is possible to achieve seamless integration between IP (layer-3) and
      the underlying (layer-2 and layer-1) networks.</t>

      <t>Following the SRv6 network programming concept, a new SRv6 function
      is defined for sending packet through an underlay interface, which
      connects to underlay links or connections between two layer-3 nodes. The
      underlay link or connection may be realized using either a ethernet
      link, a Metro Transport Network (MTN) path<xref target="ITU-T_G.8310">
      </xref>, an ODUk or a DWDM connection. Such a SRv6 behavior can be
      considered as a variant of the SRv6 END.X behavior as defined in <xref
      target="RFC8986"/>. Instead of pointing to an interface with layer-3
      adjacency, this new End.XU behavior points to an underlay interface
      which connects to a remote layer-3 node via an underlying link or
      connection that may be invisible in the L3 topology. The SRv6 End.XU
      SIDs can be used together with other types of SRv6 SIDs to build SRv6
      SID lists for inter-layer network programming.</t>

      <t>This document first describes the typical use cases of SRv6
      inter-layer network programming, then new SRv6 End.XU behavior for
      inter-layer network programming is defined. The application of SRv6
      End.XU in typical scenarios is also illustrated with examples. </t>

      <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 BCP
        14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only
        when, they appear in all capitals, as shown here.</t>
      </section>
    </section>

    <section title="Use Cases of SRv6 Inter-Layer Programming">
      <section title="IP and Optical Inter-layer Programming">
        <t>In many network scenarios, the underlay of the IP network is an
        optical network. The IP network and optical network are usually
        managed separately, the optical network works as an underlay which is
        invisible to the IP network. In some cases, the optical path resource
        and the IP path resource may not be one-to-one mapping, the redundant
        optical paths may not be fully used by the IP layer. In some other
        cases, there may be optical paths between non-adjacent IP nodes thus
        they are not visible in the L3 IP topology, and thus they can not be
        used to carry IP traffic.</t>
      </section>

      <section title="IP and MTN Inter-layer Programming">
        <t>The architecture of Metro Transport Network (MTN) is defined in
        <xref target="ITU-T_G.8310"/>. In an MTN based network, network nodes
        can support two forwarding modes: per-hop IP packet forwarding and the
        MTN Path (MTNP) layer cross-connect. An MTN path is a multi-hop
        transport path which may be established between any two nodes in the
        MTN network, and the intermediate nodes of the MTN path will forward
        the traffic solely based on the pre-established MTN cross-connect
        without IP layer lookup. Thus an MTN path is an underlay connection
        between two remote MTN nodes. Although in some cases it is possible to
        set up a layer-3 adjacency between the two endpoints of the MTN path,
        it will make the provisioning of MTN path complicated. Moreover, in
        some cases the two endpoints may reside in different IGP areas or
        ASes, which makes a layer-3 adjacency between them more challenging.
        Since the MTN paths are not visible to the IP layer topology, it is
        difficult to compute and establish a inter-layer path which consists
        of the layer-3 network segments with the MTN paths.</t>
      </section>

      <section title="Steering Traffic to L2 bundle Member Link">
        <t>In some network scenarios, L2 bundles which consists of a group of
        L2 member links are created to reduce the operational overhead of
        maintaining multiple parallel L3 links. On the L2 bundle, traffic are
        usually load balanced among all the member links. While for the
        purpose of traffic engineering, one specific L2 member link may be
        selected for specific service traffic.</t>

        <t>In section 4.2 of <xref target="RFC8986"/>, it is described that
        for an outgoing bundle interface, End.X SIDs might be allocated for
        both the bundle itself and for each of its member link. However, there
        is difference between the bundle interface and its layer-2 member
        links, as they are at different network layers, and there is no L3
        adjacency on the layer-2 member link.</t>
      </section>
    </section>

    <section title="SRv6 END.XU behavior">
      <t>This section defines a new SRv6 behavior for the underlay
      cross-connect.</t>

      <t>The "Endpoint with Underlay cross-connect" behavior ("End.XU" for
      short) is a variant of the End.X behavior defined in <xref
      target="RFC8986"/>. Its main use is for inter-layer network programming
      and traffic engineering.</t>

      <t>Any SID instance of this behavior is associated with an underlay
      interface, which connects to one or more underlay links or
      connections.</t>

      <t>When N receives a packet destined to S and S is a local End.XU SID, N
      does the following:</t>

      <figure>
        <artwork><![CDATA[   S01. When an SRH is processed {
   S02.   If (Segments Left == 0) {
   S03.      Stop processing the SRH, and proceed to process the next
                header in the packet, whose type is identified by
                the Next Header field in the routing header.
   S04.   }
   S05.   If (IPv6 Hop Limit <= 1) {
   S06.      Send an ICMP Time Exceeded message to the Source Address
                with Code 0 (Hop limit exceeded in transit),
                interrupt packet processing, and discard the packet.
   S07.   }
   S08.   max_LE = (Hdr Ext Len / 2) - 1
   S09.   If ((Last Entry > max_LE) or (Segments Left > Last Entry+1)) {
   S10.      Send an ICMP Parameter Problem to the Source Address
                with Code 0 (Erroneous header field encountered)
                and Pointer set to the Segments Left field,
                interrupt packet processing, and discard the packet.

   S11.   }
   S12.   Decrement IPv6 Hop Limit by 1
   S13.   Decrement Segments Left by 1
   S14.   Update IPv6 DA with Segment List[Segments Left]
   S15.   Forward the packet through the underlay interface associated with SID S
   S16. }
]]></artwork>
      </figure>

      <t/>

      <t>Note that the underlay interface and the associated connection in
      step 15 SHOULD be established before the associated End.XU SID is
      announced into the network.</t>

      <t>End.XU SIDs MAY be announced using IGP or BGP-LS in a similar way to
      the announcement of End.X SIDs, while they need to be distinguished from
      the End.X SID by both the network nodes and the network controller. The
      detailed protocol extension will be described in a separate document.
      Then the network controller or a headend node could use the End.XU SIDs
      together with other types of SRv6 SIDs to build SID lists for
      inter-layer network paths.</t>
    </section>

    <section title="Application of SRv6 End.XU">
      <t/>

      <section anchor="uif" title="IP and Optical Integration">
        <t>Assuming that an operator owns both the IP and optical network, and
        the operator needs to deploy E2E service across IP and optical
        network, with traditional approaches the planning and service
        provisioning would be complex and time consuming due of the manual
        synergy needed between the operator's IP team and optical team. With
        the introduction of SRv6 and the End.XU behavior, one simplified
        approach for IP and optical integration is to build a SID list that
        integrates the path in both the IP layer and the optical layer.</t>

        <t>As the optical layer is not packet based, source routing mechanism
        can not be directly used in the optical network. However, the
        abstracted optical paths (e.g. with ODUk or DWDM) could be exposed to
        the control system of the IP network using the SRv6 End.XU SIDs, and
        some of the attributes of the optical paths may also be provided.
        Based on this information, IP-optical inter-layer paths can be
        programmed to meet some specific service requirements, such as low
        latency.</t>

        <figure>
          <artwork><![CDATA[             -----          -----          -----
            |  P1 |--------|  P2 |--------|  P3 |
             -----          -----          -----
            /  |.             |.             |.  \
    -----  /   | .            | .            | .  \ -----
   |  P7 |     |  .           |  .           |  .  |  P8 |
    ----- \    |   .          |   .          |   ./ -----
           \   |    .         |    .         |  / .
             -----   .      -----   .      -----   .
            |  P4 |-------|  P5 |--------|  P6 |   .
             -----    .     -----     .    -----     .
               .      .       .       .      .       .
               .    =====      .     =====    .     =====
                .  |  O1 |----------|  O2 |--------|  O3 |
                 .  =====        .   =====      .   =====
                  .    |          .    |         .    |
                   .   |           .   |          .   |
                    .  |            .  |           .  |
                     . |             . |            . |
                      .|              .|             .|
                    =====            =====          =====
                   |  O4 |----------|  O5 |--------|  O6 |
                    =====            =====          =====
          Figure 1. IP and Optical Layered Network Topology
]]></artwork>
        </figure>

        <t/>

        <t>In Figure 1, P1 to P8 are IP nodes, and O1 to O6 are optical nodes.
        Assume the operator needs to deploy a low latency path between P7 and
        P8. With normal segment routing, an IP layer path with the segment
        list {P7, P1, P2, P3, P8} can be used. But if an optical path from O1
        to O3 exists, and the End.XU SID defined in this document is used to
        announce this optical path as an underlay connection with specific
        attributes into the IP network, the headend node or the controller in
        IP layer can program an inter-layer path along {P7, P1, End.XU (O1,
        O2, O3), P3, P8} which may provide lower latency.</t>

        <t>The optical path between O1 and O3 may be created in advance or as
        a result of the request from the IP layer. The creation should be done
        by the optical network controller (not shown in the Figure). The
        details of the process are out of scope of this document, and may
        refer to <xref target="I-D.ietf-teas-actn-poi-applicability"/>.</t>

        <t>There is also another case of IP and Optical integration. Assume
        there are two optical paths between P1 and P2. One is {P1, O1, O2, P2}
        , and the other is {P1, O1, O4, O5, O2, P2}. Two separate End.XU SIDs
        are allocated for these two underlay connections separately. One is
        End.XU P1::C2 for the underlay path {P1, O1, O2, P2}, and the other is
        End.XU P1::C45 for the path {P1, O1, O4, O5, O2, P2}. The headend P7
        or the IP network controller will be informed about these two SRv6
        End.XU SIDs and the associated path attributes, so that the headend or
        the controller can program different end-to-end inter-layer paths
        using SID lists with different End.XU SIDs for services with different
        SLA requirements.</t>
      </section>

      <section title="MTN Networks">
        <t>Assuming that an operator owns both an MTN network domain and an IP
        network domain. In the MTN network, each MTN node has both the layer-3
        functionality and the MTN Path layer functionality. In layer-3, all
        the MTN nodes are in a layer-3 network topology, which connects to the
        IP network domain. In the MTN Path Layer, a set of MTN paths are
        provisioned between the selected pairs of MTN nodes. In the MTN
        network, different types of services may be carried using either a
        layer-3 path, or an MTN path, or an inter-layer path comprising of
        both the layer-3 links and the MTN path as different segments. In
        addition, For some type of services, end-to-end paths across the IP
        domain and the MTN domain are needed, which is comprised of both the
        layer-3 paths and the MTN path as different segments.</t>

        <t><figure>
            <artwork><![CDATA[ .......................................... ...........................
 .                                        . .                         .
 .          +----+     +----+     +----+  . . +----+     +----+       .
 .          | M1 |-----| M2 |-----| M3 |------| P1 |-----| P2 |       .
 .          +----+     +----+     +----+  . . +----+     +----+       .
 .         /  |          |          |     . .   |          |  \       .
 . +----+ /   |          |          |     . .   |          |   \+----+.
 . | M7 |/    |          |          |     . .   |          |    | P5 |.
 . +----+\    |          |          |     . .   |          |   /+----+.
 .        \   |          |          |     . .   |          |  /       .
 .         \+----+     +----+     +----+  . . +----+     +----+       .
 .          | M4 |-----| M5 |-----| M6 |------| P3 |-----| P4 |       .
 .          +----+     +----+     +----+  . . +----+     +----+       .
 .                                        . .                         .
 . Layer-3 Topology    MTN Network        . .        IP Network       .
 .                                        . ...........................
 ----------------------------------------------------------------------
 . MTN Path Layer Topology                .
 .                                        .
 .          +----+     +----+     +----+  .
 .          | M1'|################| M3'|  .                          
 .          +----+ ##  +----+  ## +----+  .
 .                   ##      ##           .
 . +----+              ##  ##             .
 . | M7'|                ##               .                 
 . +----+              ##  ##             .
 .                   ##      ##           .
 .          +----+ ##  +----+  ## +----+  .
 .          | M4'|################| M6'|  .
 .          +----+     +----+     +----+  .
 .                                        .
 .                                        .
 .......................................... 
         .
      Figure 2. A network with MTN Domain and IP Domain 
]]></artwork>
          </figure></t>

        <t>Figure 2 gives an example of a network with a MTN domain and an IP
        domain. M1 to M7 are MTN nodes, and P1 to P4 are IP nodes. The same
        set of MTN nodes builds two separate network layers. The topology in
        the IP layer shows the layer-3 connectivity between the MTN nodes and
        the connectivity with the IP network domain, while the topology in the
        MTN Path layer shows the MTN paths between the selected pair of MTN
        nodes. An end-to-end path from M7 to P5 can be established in layer-3
        using a SID list representing the layer-3 path {M7, M1, M2, M3, P1,
        P2, P5}. While for services which require low latency, an end-to-end
        path consisting of both the layer-3 segments and MTN paths could be
        established using an SRv6 SID list representing the path {M7, M1::C3,
        P1, P2, P5}, where the End.XU SID M1::C3 represents the MTN path
        M1'-M3'.</t>

        <t>This shows that it is convenient to use an integrated SID list to
        program an inter-layer path both within the MTN domain, and across the
        IP and MTN domain using the combination of L3 SRv6 SIDs and the End.XU
        SIDs.</t>
      </section>
    </section>

    <section anchor="security" title="Security Considerations">
      <t>TBD</t>
    </section>

    <!-- security -->

    <section anchor="iana" title="IANA Considerations">
      <t>This document defines a new SRv6 Endpoint behavior called END.XU.</t>

      <t>IANA is requested to allocate four new code points from the "SRv6
      Endpoint Behaviors" sub-registry in the "Segment-routing with IPv6 data
      plane (SRv6) Parameters" registry:</t>

      <t><figure>
          <artwork><![CDATA[        +-------+--------+---------------------------+-----------+
        | Value |  Hex   |     Endpoint Behavior     | Reference |
        +-------+--------+---------------------------+-----------+
        |  TBA  |  TBA   |          End.XU           | [This ID] |
        |  TBA  |  TBA   |      End.XU with PSP      | [This ID] |
        |  TBA  |  TBA   |      End.XU with USP      | [This ID] |
        |  TBA  |  TBA   |    End.XU with PSP & USP  | [This ID] |
        +-------+--------+---------------------------+-----------+

]]></artwork>
        </figure></t>
    </section>

    <section anchor="ack" title="Acknowledgements">
      <t>The authors would like to thank Xiaodong Chang and Yongjian Hu for
      their review and comments.</t>
    </section>
  </middle>

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

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

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

    <references title="Informative References">
      <?rfc include='reference.I-D.ietf-teas-actn-poi-applicability'?>

      <reference anchor="ITU-T_G.8310">
        <!-- the following is the minimum to make xml2rfc happy -->

        <front>
          <title>ITU-T G.8310: Architecture of the metro transport
          network</title>

          <author>
            <organization>ITU-T</organization>
          </author>

          <date month="December" year="2020"/>
        </front>

        <seriesInfo name=""
                    value="https://www.itu.int/rec/T-REC-G.8310-202012-I/en"/>
      </reference>
    </references>
  </back>
</rfc>
