<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc>
<?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-ginsberg-lsr-flex-soft-dataplane-01"
     ipr="trust200902" submissionType="IETF" consensus="true">
  <front>
    <title abbrev="Flex-Soft-Dataplane">
      IGP Flex Soft Dataplane
    </title>
    <author fullname="Les Ginsberg" initials="L" surname="Ginsberg">
      <organization>Cisco Systems</organization>
      <address>
        <email>ginsberg@cisco.com</email>
      </address>
    </author>
    <author fullname="Peter Psenak" initials="P." surname="Psenak">
      <organization>Cisco Systems</organization>

      <address>
        <postal>
          <street>Apollo Business Center</street>
          <street>Mlynske nivy 43</street>

          <city>Bratislava</city>

          <code>82109</code>

          <country>Slovakia</country>
        </postal>

        <email>ppsenak@cisco.com</email>
      </address>
    </author>
    <author fullname="Zheng Zhang" initials="Z." surname="Zhang">
      <organization>ZTE Corporation</organization>

      <address>
        <postal>
          <street></street>
          <street></street>

          <city></city>

          <code></code>

          <country>China</country>
        </postal>

        <email> zhang.zheng@zte.com.cn</email>
      </address>
    </author>
    <date year="2025"/>
    <area>Routing Area</area>
    <workgroup>LSR Working Group</workgroup>
    <keyword>Flex</keyword>
    <keyword>Draft</keyword>
    <abstract>
      <t>
        Advertisement of IGP Flex-Algo participation requires a
	dataplane context. This document defines a "soft dataplane"
	usable in cases where existing defined dataplanes are not
	suitable.
      </t>
    </abstract>
  </front>
  <middle>
    <section anchor="Introduction" title="Introduction">
      <t>
        Advertisement of IGP Flex-Algo<xref target="RFC9350"/>
	participation requires a dataplane context. Existing data planes
	which have been defined include:
      </t>

      <t> Segment Routing Dataplane <xref target="RFC8667"/>
      <xref target="RFC8665"/> </t>
      <t> IP Flex Dataplane <xref target="RFC9502"/> </t>
      
      <t>
	The need to use an IGP Flexible Algorithm may occur in
	deployments where none of the existing dataplanes are
	supported or suitable.
      </t>
      <t>
	In such cases a "soft dataplane" MAY be used to provide the
	necessary context for advertisement of Flex-Algo support.
	This document defines the mechanisms to advertise such a dataplane.
      </t>
    </section>
      
    <section anchor="ReqLang" 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 <xref
      target="RFC2119">BCP 14</xref> <xref target="RFC8174"/> when, and only
      when, they appear in all capitals, as shown here.</t>
    </section>

    <section anchor="UseCase" title="Use Case Discussion">
      <t>
	A deployment may require the use of flex-algo to achieve traffic
	flows that meet certain constraints. In some cases, flex-algo paths may 
	be used by an application that does not require the use of any of the 
	currently defined dataplanes supported by flex-algo. The use of these 
	dataplanes may not be desired and/or is not supported in the network. 
	IP Flex-algo extends flex-algo so that it can be used 
	directly with IPv4 and IPv6 forwarding, but the use of IPv4/IPv6 
	Algorithm specific prefix adverisements may not always be possible, 
	especially if the existing deployment does not allow for the lack of  
	reachability using the base IGP SPF (AKA algorithm 0) for these
	prefixes. The use of a soft dataplane
	provides context which still allows flex-algo to be deployed in 
	such cases.
      </t>
      <t>
	The new dataplane is referred to as "soft" because the flex-algo paths 
	computed for this dataplane are not expected to be used by 
	forwarding directly - e.g., they will not be installed in the data path. 
	They may be used by an application to create a forwarding state that
	is maintained by the application itself. One such use case might be to 
	support multicast distribution over a constrained topology in an
	IP only network.
      </t>
      <t>
	Note that multiple flex algorithms - each defined for a different use
	case - can be advertised in the context of a single soft
	dataplane. Therefore, it is expected that a single soft dataplane
	will suffice for all possible use cases.
      </t>
      <t>
	The following sections define how to advertise flex-algorithm support
	in the context of the soft dataplane.
      </t>
    </section>
    
      <section anchor="IS-IS Dataplane" title="IS-IS Soft Dataplane Algorithm Sub-TLV">
	<t>The IS-IS <xref target="ISO10589"/> Soft Dataplane Algorithm Sub-TLV is a sub-TLV of the IS-IS
	Router Capability TLV <xref target="RFC7981"/> and has the following
	format:</t>
        <figure anchor="ISISAlg" align="center" suppress-title="false" pn="figure-1">
          <name slugifiedName="name-is-is-soft-dataplane-algorithm-sub-tlv">IS-IS Soft Dataplane Algorithm Sub-TLV</name>
          <artwork align="center">
 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    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Algorithm 1   |  Algorithm 2  | Algorithm ... |  Algorithm n  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
        </figure>
        <dl spacing="normal" newline="false" indent="3">
          <dt>Type (1 octet):</dt>
          <dd>Soft Dataplane Algorithm Sub-TLV (Value TBD)</dd>
          <dt>Length (1 octet):</dt>
          <dd>Variable</dd>
          <dt>Algorithm (1 octet):</dt>
          <dd>Value from 128 to 255</dd>
        </dl>
        <t indent="0">The IS-IS Soft Dataplane Algorithm Sub-TLV MUST be propagated
        throughout the level and MUST NOT be advertised across
        level boundaries. Therefore, the S bit in the Router Capability TLV,
        in which the IS-IS Soft Dataplane Algorithm Sub-TLV is advertised, MUST NOT be set.</t>
        <t indent="0">The IS-IS Soft Dataplane Algorithm Sub-TLV is optional. It MUST NOT be
        advertised more than once at a given level. A router receiving
        multiple IS-IS Soft Dataplane Algorithm sub-TLVs from the same originator
        MUST select the first advertisement in the
        lowest-numbered Link State PDU (LSP), and subsequent instances of the
	IS-IS Soft Dataplane Algorithm Sub-TLV MUST be ignored.</t>
        <t indent="0">Algorithms outside the Flex-Algorithm range (128-255)
        MUST be ignored by the receiver. This situation
        SHOULD be logged as an error.</t>
        <t indent="0">The Flex-Algorithm participation advertised in
	the IS-IS Soft Dataplane
        Algorithm Sub-TLV is topology independent. When a router advertises
        participation in the IS-IS Soft Dataplane Algorithm Sub-TLV, the
	participation applies to all topologies in which the advertising node
        participates.</t>
	</section>
      <section anchor="OSPF-Dataplane" title="OSPF Soft Dataplane Algorithm TLV">
        <t> The OSPF <xref target="RFC2328"/> Soft Dataplane Algorithm TLV is a top-level
        TLV of the Router Information Opaque Link State Advertisement (LSA)
        <xref target="RFC7770"/> and has the following format: </t>
        <figure anchor="OSPFAlg" align="center" suppress-title="false" pn="figure-2">
          <name slugifiedName="name-ospf-soft-dataplane-algorithm-tlv">OSPF Soft Dataplane Algorithm TLV</name>
          <artwork align="center">
 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            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Algorithm 1 | Algorithm...  |   Algorithm n |               |
+-                                                             -+
|                                                               |
+                                                               +
</artwork>
        </figure>
        <dl spacing="normal" newline="false" indent="3">
          <dt>Type (2 octets):</dt>
          <dd>Soft Dataplane Algorithm TLV (TBD)</dd>
          <dt>Length( 2 octets):</dt>
          <dd>Variable</dd>
          <dt>Algorithm (1 octet):</dt>
          <dd>Value from 128 to 255</dd>
        </dl>
        <t indent="0" >The OSPF Soft Dataplane Algorithm TLV is optional. It MUST only be
        advertised once in the Router Information LSA.</t>
        <t indent="0">Algorithms outside the Flex-Algorithm range (128-255)
        MUST be ignored by the receiver. This situation
        SHOULD be logged as an error.</t>
        <t indent="0">When multiple OSPF Soft Dataplane Algorithm TLVs are received from a given router,
        the receiver MUST use the first occurrence of the TLV
        in the Router Information LSA. If the OSPF Soft Dataplane Algorithm TLV appears in
        multiple Router Information LSAs that have different flooding scopes,
        the OSPF Soft Dataplane Algorithm TLV in the Router Information LSA with the
        area-scoped flooding scope MUST be used. If the OSPF Soft Dataplane
        Algorithm TLV appears in multiple Router Information LSAs that have
        the same flooding scope, the OSPF Soft Dataplane Algorithm TLV in the Router
        Information LSA with the numerically smallest Instance ID (Opaque ID
        for OSPFv2 or Link State ID for OSPFv3) MUST be used,
        and subsequent instances of the OSPF Soft Dataplane Algorithm TLV MUST
        be ignored.</t>
        <t indent="0">The Router Information LSA can be advertised at any of the defined
        flooding scopes (link, area, or Autonomous System (AS)). For the
        purpose of OSPF Soft Dataplane Algorithm TLV advertisement, area or AS-scoped flooding
        is REQUIRED. The AS flooding scope SHOULD NOT be used unless local configuration policy on the
        originating router indicates domain-wide flooding.</t>
        <t indent="0">The Flexible Algorithm participation advertised in the OSPF Soft Dataplane Algorithm
        TLV is topology independent. When a router advertises participation in an
        OSPF Soft Dataplane Algorithm TLV, the participation applies to all topologies in
        which the advertising node participates.</t>
      </section>

      <section anchor="IANA" title="IANA Considerations">
      <section anchor="IANAOSPFRI"
               title="OSPF Router Information TLV Registry">

      <t indent="0"> This document updates the "OSPF Router Information (RI) TLVs"
      registry as follows:</t>
      <table anchor="T1" align="center" pn="table-1">
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Value</th>
            <th align="left" colspan="1" rowspan="1">TLV Name</th>
            <th align="left" colspan="1" rowspan="1">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">TBD</td>
            <td align="left" colspan="1" rowspan="1">Soft Dataplane Algorithm</td>
            <td align="left" colspan="1" rowspan="1">draft-ginsberg-lsr-soft-dataplane</td>
          </tr>
        </tbody>
      </table>
      </section>
      <section anchor="IANAISISRC"
               title="IS-IS Router Capability sub-TLV Registry">
      <t indent="0"> This document updates the "IS-IS Sub-TLVs for IS-IS Router CAPABILITY TLV"
      registry as follows:</t>
      <table anchor="T2" align="center" pn="table-2">
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Value</th>
            <th align="left" colspan="1" rowspan="1">TLV Name</th>
            <th align="left" colspan="1" rowspan="1">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">TBD</td>
            <td align="left" colspan="1" rowspan="1">Soft Dataplane Algorithm</td>
            <td align="left" colspan="1" rowspan="1">draft-ginsberg-lsr-soft-dataplane</td>
          </tr>
        </tbody>
      </table>
     </section>

    <section anchor="Security" title="Security Considerations">
      <t>
        This document creates no new security issues for the IGPs.
      </t>
    </section>
    </section>
  </middle>
  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>
      <?rfc include='reference.RFC.2328'?> 
      <?rfc include='reference.RFC.7770'?>
      <?rfc include='reference.RFC.7981'?> 
      <?rfc include='reference.RFC.8174'?>
      <?rfc include='reference.RFC.8665'?>
      <?rfc include='reference.RFC.8667'?>
      <?rfc include='reference.RFC.9502'?>
      <?rfc include='reference.RFC.9350'?>
      <reference anchor="ISO10589" target="ISO/IEC 10589:2002">
        <front>
          <title>
            Intermediate system to Intermediate system routing information exchange protocol for use in conjunction with the Protocol for providing the Connectionless-mode Network Service (ISO 8473)
          </title>
          <author fullname="ISO" initials="" surname="ISO">
            <organization>IANA</organization>
          </author>
          <date month="August" year="1987"/>
        </front>
      </reference>
    </references>
  </back>
</rfc>
