<?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="info" docName="draft-andersson-mpls-mna-operation-architecture-00"
     ipr="trust200902">
  <front>

    <title abbrev="MNA Operational Architecture">MPLS MNA Operational Architecture</title>

    <author fullname="Loa Andersson" initials="L." surname="Andersson">
      <organization>Bronze Dragon Consulting</organization>
      <address>
        <postal>
          <street/>
          <city/>
          <region/>
          <code/>
          <country/>
        </postal>
        <email>loa@pi.nu</email>
      </address>
    </author>
    
    <author fullname="James N Guichard" initials="J." surname="Guichard">
      <organization>Futurewei Technologies</organization>
      <address>
        <postal>
          <street/>
          <city/>
          <region/>
          <code/>
          <country/>
        </postal>
        <email>james.n.guichard@futurewei.com</email>
      </address>
    </author>
    
<author fullname="Haoyu Song" initials="H." surname="Song">
      <organization>Futurewei Technologies</organization>
      <address>
        <postal>
          <street/>
          <city/>
          <region/>
          <code/>
          <country/>
        </postal>
        <email>haoyu.song@futurewei.com</email>
      </address>
    </author>
    
 <author fullname="Stewart Bryant" initials="S." surname="Bryant">
      <organization>University of Surrey</organization>
      <address>
        <postal>
          <street/>
          <city/>
          <region/>
          <code/>
          <country/>
        </postal>
        <email>stewart.bryant@gmail.com</email>
      </address>
    </author>   
     
    <date />
    
     <workgroup>MPLS Working Group</workgroup>
<abstract>
<t>
   MPLS Network Action (MNA) allows MPLS packet to carry instruction and data for in-network services and
   functions in an MPLS network. This document describes the network operations to support 
   MNAs and what actions an MNA capable Label Switching Router (LSR)
   takes when MNA is present or absent in an packet.
</t>



</abstract>

</front>

<middle>
  <!-- section 1 -->
    <section anchor="intro" title="Introduction">

<t>

   Multi-protocol Label Switching (MPLS) is a widely deployed forwarding
   technology. It uses label stack entries prepended to the payload. The label 
   stack entries are
   used to identify the forwarding actions by each LSR.
   Actions may include pushing, swapping or popping the labels,
   and using the labels to determine the next hop for forwarding the
   packet.  Labels may also be used to establish the context under which
   the packet is forwarded.
</t>

<t>
   MPLS Network Actions (MNA) is used to
   support actions for Label Switched Paths (LSPs) and/or MPLS packets
   in addition to the normal forwarding. <xref target="I-D.ietf-mpls-mna-fwk" />
   provides the architectural framework for MNA and <xref target="I-D.ietf-mpls-mna-requirements" /> 
   provides the design requirements for MNA. MNA can support actions encoded within or below the label stack.
   The presence of MNA is indicated by a bSPL in the label stack.
</t>
 
<t>
   This document specifies the architecture for the extension of MPLS to 
   include MNA. MNAs carry information on in-network services and
   functions in an MPLS network. This document describes an architecture
   for MNAs and what actions an MNA capable Label Switching Router (LSR)
   takes when MNA is present or absent in an packet.
</t>

<t>
   The MNA encoded below the label stack is supported by MPLS Extension Header (EH), which is described in 
   <xref target="I-D.song-mpls-extension-header"/>.
</t>
    
    <t>
    Below some example use cases for MPLS EH are listed. More use cases for MNA in general can be found in
    <xref target="I-D.ietf-mpls-mna-usecases"/>
    <list style="symbols" >
      <t>
      In-situ OAM:  In-situ OAM (IOAM) records flow OAM information within
      user packets while the packets traverse a network.
      </t>
      
      <t>
      Network Telemetry and Measurement:  A network telemetry and
      instruction header can be carried as an extension header to
      instruct a node what type of network measurements should be performed
      on the packets.
      </t>
      
      <t>
      Network Security:  Security related functions may require user
      packets to carry some metadata.
      </t>
      
      <t>
      Segment Routing and Network Programming:  MPLS extension header could
      support MPLS-based segment routing.  The details will be described in 
      a separate draft.
      </t>
      </list>
</t>

<t>
It is possible to distinguish between two types of MPLS MNAs, "Hop by Hop"
(HBH) and "End to end" (E2E).  
</t>
<t>
An HBH MNA is processed by every MNA capable node along 
an LSP, HBH MNAs MAY be inserted by an ingress LER or a transit LSR. A HBH
MNA MUST be removed by an LSR along the LSP or by the egress LER. An LSR 
along the LSP may be configured to ignore HBH MNAs. 
</t>

<t>
An E2E MNA will be inserted by an upstream LSR and, processed and MUST be
removed 
by a downstream LSR, 
no other LSR in between will process the E2E MNA.
</t>

<t> Note: This document separates the concepts of LSP and MNA path, and allows an MNA to be applied on any section of
an LSP. Another extreme is to strictly limit that MNAs can only initiate and terminate at LERs. This is simpler
yet inflexible. A decision needs to be made after examining all the potential use cases. </t>  


<t>
Only MNA capable LSRs will process MNAs if they are configured to do so.  LSR that are MNA non-capable will ignore
the MNA and forward the packet as if the information was not there.
</t>

<t>
This document describes the interaction between MNA capable neighbor LSRs, 
and between MNA capable LSRs and a neighbor that is MNA non-capable.
</t>
  

   <section anchor="requirement-language" title="Requirement 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 anchor="spec" title="Specification">
  
<t>
This document specifies the use of MNA with MPLS. 
<!--Further 
information on EH processing and formats will be found in 
<xref target="I-D.song-mpls-extension-header"/>.
-->
</t>

<section anchor="overview" title="MPLS Network Action Overview">
<t>
Applications carried over an MPLS network may require that specific instructions 
and/or metadata are added to user packets. One such example is
In-situ OAM (IOAM) <xref target="RFC9197" />. It is likely that new applications
will emerge over time.
</t>

<t>
One or more MNAs may be added by an ingress node to an MNA Path 
(NAP) and be removed by one or more MNA capable nodes along the NAP. Such 
ingress and egress nodes may be nodes at the head end and tail end of a Label 
Switched Path (LSP), or any other intermediate node of the LSP that is MNA 
capable. For  more details on NAPs see <xref target="mna-example"/>.
</t>

</section>

<section anchor="term" title="MNA Operation Terminology">
<t>
   This section lists the abbreviations and concepts that are used throughout 
   this document in the context of MNA.


<list style="symbols">
<t>
MNA - MPLS Network Action 
</t>

<t>
MNAI - MPLS Network Action Indicator, a bSPL in the label stack.
</t>

<t>
LDP DoD - LDP Downstream on Demand
</t>

<t>
LDP DU - LDP Downstream Unsolicited
</t>

<t>
LSP - Label Switched Path
</t>

<t>
LSR - Label Switching Router
</t>

</list>

</t>
<t>
The following concepts new for MPLS are defined:
<list style="symbols">
<t>
MNA capable node - an LSR that can process MNAs and announce its MNA
capability
</t>

<t>
MNA capable LSR - this may be used interchangeably with MNA capable node.
</t>

<t>
non-MNA-capable node - an LSR that is unaware of and unable to process 
MNAs.
</t>

<t>
NAP - A network action path for a specific network action, which is sub-path of an LSP. An NAP starts at the node adding an MNA and ends at the node 
that removes it.
</t>

</list>

</t>
</section>

</section>

<section anchor="basic" title="MNA Basics">
<section anchor="general" title="General Principles">

<t>
   Any MNA capable node along an LSP may add an MNA as long as it can be verified
   that there is another MNA capable LSR downstream that can remove it. Any MNA
   capable node downstream can be configured to remove an MNA. An NAP starts when an
   MNA
   is added and ends where it is removed. If there is no node
   downstream capable to remove the MNA, it MUST NOT be added. It is assumed 
   that a control plane will make this determination, the specification of 
   which is outside the scope of this document.
</t>

<t>
   In the context of the MNA, an MNA capable node assumes that 
   all user packets on the default LSP carry MNAs. As an optimization a second 
   parallel LSP may be instantiated using a Forwarding Equivalence Class (FEC)
   that does not permit MNAs, thus 
   indicating to the LSR that there are no MNAs in the packet.
</t>

</section>

<section anchor="mna-LSP" title="LSPs in an MNA capable Network">
<t>
For an MNA capable LSP between two MNA capable LSRs there are two label 
mappings:
<list style="symbols">
<t>
first, a label mapping for the FEC that indicates that the packet carries IP
</t>

<t>
second, a label mapping for a new FEC indicating that there are no MNAs in 
the packet
</t>
</list>
</t>
</section>

<section anchor="mna-node" title="MNA capable nodes">
<t>
MNA capable nodes may process MNAs, i.e. add, augment, remove or 
do required
processing.
</t>

<t>
An MNA capable node may not add an MNA to a packet if unless it is 
sure that there is a 
downstream node that can remove it.
</t>

<t>
If an LSP forks due to ECMP, the node that does the forking MUST be sure
that all LSP branches (which may be re-merged) eventually terminate at an MNA 
capable 
node which will remove the MNA.
</t>
</section>

<section anchor="mna-path" title="NAP and LSP">
<t>
MNA capable nodes may process MNAs, i.e. add, remove or do required
processing.
</t>

  <t>
  <xref target="mna-example"/> is used for illustration of NAPs.
  
              
      <figure title = "NAP vs. LSP" align="left" anchor="mna-example">
                    <artwork align="left">
                        <![CDATA[


     <------------------LSP-------------------->
     
     A------b------c------D------E------F------G
     
     <------------------NAP1------------------->
     <------------NAP2----------->
                          <--------NAP3-------->
                          <-----NAP4---->
                                        <-NAP5->

A, D, E, F and G are MNA capable nodes

b and c are non-MNA-capable nodes.



                    ]]>
                    </artwork>
     </figure>

</t>

<t>
   <list style="empty">
   <t>
   LSP - the LSP originates at ingress LSR A and terminates at egress LSR G, 
   packets flow from A to G.
   </t>
   
   <t>
   NAP1 - NAP1 originates with the MNA capable node A adding an MNA
   to the packet and terminates when the MNA capable node G removes the 
   MNA. 
   </t>
   
   <t>
   NAP2 - NAP2 originates with the MNA capable node A adding an MNA 
   to the packet and terminates when the MNA capable node E removes the 
   MNA. i.e. the NAP2 is shorter than the LSP.
   </t>
   
   <t>
   NAP3 - NAP3 originates with the MNA capable node D adding an MNA 
   to the packet and terminates when the MNA capable node G removes the 
   MNA.
   </t>
   
   <t>
   NAP4 - NAP4 originates with the MNA capable node D adding an MNA 
   to the packet and terminates when the MNA capable node F removes the 
   MNA, i.e. it is not necessary that an NAP originates or terminate on an
   MPLS LER.
   </t>
   
   <t>
   NAP5 - NAP5 originates with the MNA capable node F adding an MNA 
   to the packet and terminates when the MNA capable node G removes the 
   MNA.
   </t>
   </list>
   
   </t>
<t>
   Further discussion on the information needed in the packet to identify and
   process the post stack MNAs can be found in <xref target="I-D.song-mpls-extension-header"/>.
</t>

</section>



<section anchor="announce" title="Announcement of MNA Capability">
<t>
A node that is MNA capable MUST have a way to announce this capability to other
nodes in the same domain. Additions to the IGPs should be a baseline for such
capabilities.
</t>
</section>


<section anchor="ldp-dod" title="LSP establishment with LDP Downstream on Demand (DoD) in an MNA capable network">
<t>
LSPs for MNA handling and processing in an MPLS network may be set up by LDP
<xref target="RFC5036"/>,
a centralized controller and/or MPLS-SR. To enable this small extensions to the 
protocols are required.
</t>

<t>
In the examples in <xref target="ldp-dod"/> and <xref target="ldp-du"/> we 
for simplicity assume that the payload of the packet is IP. It is of course 
possible that the payload will be a Pseudo-Wire (PW) or a Virtual Private 
Network (VPN). This will be described in a later version of the document.
</t>

<t>
It is anticipated that the difference in establishment procedures for IP, PW 
and VPN will be minor.
</t>

<t>
It is possible to use the simplified physical topology show in 
<xref target="topo-example"/> which uses
LDP Downstream on Demand (DoD) to illustrate how LSP setup work in a network with
a mix of MNA capable and non-MNA-capable nodes. In LDP DoD the action to set up
an LSP is taken by the node at the head-end of the potential LSP.

              
      <figure title = "MNA topology I" align="left" anchor="topo-example">
                    <artwork align="left">
                        <![CDATA[
   +---+      +---+      +---+      +---+      +---+
   |   |      |   |      |   |      |   |      |   |
   | A +------+ b +------+ D +------+ E +------+ G +
   |   |      |   |      |   |      |   |      |   |
   +---+      +---+      +---+      +---+      +---+
A, D, E, and G are MNA capable nodes

b is a non-MNA-capable node.


                    ]]>
                    </artwork>
     </figure>
</t>
<t>
The following steps would be taken assuming that node A wants to set up
connectivity with node G to support MNA handling and processing:
<list style="symbols">
<t>
A sends an LDP Label Request message to b, indicating that an MNA capable LSP
should be set up to G. A keeps track of the outstanding request.
</t>

<t>
b is not MNA capable and treats the Label Request as a normal request, however,
the information indicating that an MNA capable LSP is requested is transitive
and sent to D. 
</t>

<t>
D receives the Label Request, forwards it to E, and keeps track of the 
outstanding
request. 
</t>

<t>
E treats the label request the same way as D, and forward it to G.
</t>

<t>
G receives the label request, finds out that it is the egress node for this LSP. 
G allocates
two labels one for the IP FEC and one for the new "no MNA present" FEC. G sends a 
label mapping to E with both labels, and asks E to PHP both LSPs.
</t>

<t>
E receives the label mapping and installs PHP for both the IP FEC and for 
the new "no MNA present"-FEC. E allocates two labels one for the IP FEC (label
value 201) and one for the new FEC (label value 301). E sends a label mapping
message to D, with the two labels.
</t>

<t>
D receives the label mapping message and installs label 201 for the IP FEC and 
label value 301 for the new FEC. Since D know that b is not MNA capable it will
only allocate one label (202 for the IP FEC) and send a label mapping message 
to with that label.
</t>

<t>
b receives the label mapping messages and installs label 202 for the IP FEC. 
Since b is not MNA capable it will only allocate one label (203 for the IP FEC).
b sends a label mapping message to A with that label.
</t>

<t>
A receives the label mapping and installs label value 203 for the IP FEC.
</t>


</list>
</t>
<t>
This will result in installed labels like this.
</t>
      <figure title = "MNA topology II" align="left" anchor="mapping-example">
                    <artwork align="left">
                        <![CDATA[
   +---+         +---+         +---+         +---+         +---+
   |   |...203...|   |...202...|   |...201...|   |...php...|   |
   | A +---------+ b +---------+ D +---------+ E +---------+ G +
   |   |         |   |         |   |...301...|   |...php...|   |
   +---+         +---+         +---+         +---+         +---+
A, D, E and G are MNA capable nodes.

b is a non-MNA-capable node.


                    ]]>
                    </artwork>
     </figure>

</section>

<section anchor="ldp-du" title="LSP establishment with LDP Downstream Unsolicited (DU) in an MNA capable network">
<t>
In LDP Downstream Unsolicited (DU) the initiative to establish a LSP is 
taken by the egress router. The egress will establish an LSP to every prefix it 
learns of from the IGP. With the exception from how the set up of the LSP(s) 
are triggered the label mappings are similar to how it is done with 
LDP DoD.
</t>

<t>
The same topology as in the LDP DoD example <xref target="topo-example"/> will 
be used for LDP DU.
<list style="symbols">


<t>
G learns that an MNA capable LSP to egress LSR A is needed. G allocates
two labels one for the IP FEC and one for the new "no MNA present" FEC. G sends a 
label mapping to E with both labels, and asks E to PHP both LSPs.
</t>

<t>
E receives the label mapping and installs PHP for both the IP FEC and for 
the new "no MNA present"-FEC. E allocates two labels one for the IP FEC (label
value 201) and one for the new FEC (label value 301). E sends a label mapping
message to D, with the two labels.
</t>

<t>
D receives the label mapping message and installs label 201 for the IP FEC and 
label value 301 for the new FEC. Since D know that b is not MNA capable it will
only allocate one label (202 for the IP FEC) and send a label mapping message 
to with that label.
</t>

<t>
b receives the label mapping messages and installs label 202 for the IP FEC. 
Since b is not MNA capable it will only allocate one label (203 for the IP FEC).
b sends a label mapping message to A with that label.
</t>

<t>
A receives the label mapping and installs label value 203 for the IP FEC.
</t>

<t>
This will result in the exact the same label mappings as in the DoD Example,
see <xref target="mapping-example"/>.
</t>

</list>
</t>

</section>


<section anchor="node" title="Forwarding Behavior of MNA Capable Nodes">
<t>
An MNA capable node will always search the label stack for MNAs, with the exception 
of when a packet is received on the new "no MNA present" FEC.
</t>

<t>
Non-MNA-capable nodes will never search the label stack for MNAs.
</t>

<t>
Given the configuration in <xref target="mapping-example"/> packets will be 
forwarded as follows through the network.
</t>

<t>
If Node A sends a packet with a post-stack MNA:
<list style="numbers">
<t>
A sends a packet with label 203 with an EH after the label stack to b
</t>

<t>
b receives the packet and swaps the label to 202 and forward it to D.
</t>

<t>
D receives the packet, and since D is MNA capable it will search the stack to
find an MNAI. Since there is MNA present, D will decide whether it 
should process
the MNA or not. When that decision is taken and potential 
processing
is done, D will swap the label to 201 and send it to E.
</t>

<t>
E receives the packet on LSP with a FEC that indicates that "MNA may present" 
and will search the packet for an MNA. When the MNA is found by E it will, if 
required, 
process the MNA, after that the top label is popped and the packet is 
forwarded to G.
</t>

<t>
G receives the packet, it will search the label stack to find the MNAI. It will
find the MNA and since
G is the egress node it will do necessary processing and as a last step
remove the MNA. G will forward the packet based on the IP address.
</t>
</list>
</t>

<t>
If Node A sends a packet without any MNA:
<list style="numbers">
<t>
A sends the packet with label 203 to b
</t>

<t>
b receives the packet and swaps the label to 202 and forward it to D.
</t>

<t>
D receives the packet, and since D is MNA capable it will search the stack to
find an MNA. Since there is no MNA present, D will swap the label to 301 and
send it to E (FEC indicates no MNA present).
</t>

<t>
E receives the packet on FEC "no MNA present" and understand that it does not 
need to search the packet for an MNA. E pops the label and forward to G
</t>

<t>
G receives the packet on FEC "no MNA present" and understand that it does not 
need to search the packet for an MNA. G will forward it based on the IP address.
</t>
</list>
</t>

</section>

<section anchor="rsvp-te" title="MNA for RSVP-TE tunnels">
<t>
Extension Headers for RSVP-TE tunnels is for further study.  Essentially it
expected to be similar to the LDP case.
</t>
</section>

</section>

<section anchor="VPN" title="MNA in VPNs">


<t>
   TBA
</t>


</section>


<section anchor="MPLS-SR" title="MNA and MPLS-SR">

<t>
TBA
</t>

</section>

<section anchor="distrib" title="MNA distribution and MNA capability announcement">
    
    <t>
    TBA
    </t>
      
</section>

<section anchor="security" title="Security Considerations">
    
    <t>
    TBA
    </t>
      
</section>

     
    <section anchor="IANA" title="IANA Considerations">
    
    <t>
     MPLS MNA will require code point allocations from 
     more than one IANA registry. It is not yet decided which document that 
     will make which allocation.  However, tentatively the "No MNA present" FEC will be assigned from this
     document.
    </t>
    
    <t>
    IANA is requested to allocate lowest free value from the "IETF Review" range 
    as new FEC from the "Forwarding Equivalence Class (FEC) Type Name Space"
    in the "Label Distribution Protocol (LDP) Parameters", like this:
    </t>

<texttable anchor="table_ex" title="No MNA present">
    <ttcol align='left'>Value</ttcol>
    <ttcol align='left'>Hex</ttcol>
    <ttcol align='left'>Name</ttcol>
    <ttcol align='left'>Label Distribution Discipline</ttcol>
    <ttcol align='left'>Reference</ttcol>
    <ttcol align='left'>Note/Reg. Date</ttcol>
    <c>TBD</c>
    <c>TBD</c>
    <c>No MNA present</c>
    <c>DoD or DU</c>
    <c>This Document</c>
    <c>TBA</c>

</texttable>
                    
   
    </section>    

    <section anchor="Acknowledgments" title="Acknowledgments">
      <t>
      TBA
     </t>
    </section>
    
  </middle>

  <back>
 
    <references title="Normative References">

      <?rfc include="reference.RFC.2119"?>
 <!--     <?rfc include="reference.RFC.2385"?> -->
      <?rfc include="reference.RFC.8174"?> 
      <?rfc include="reference.I-D.song-mpls-extension-header"?>
	  <?rfc include="reference.I-D.ietf-mpls-mna-requirements"?>
	  <?rfc include="reference.I-D.ietf-mpls-mna-fwk"?>
	  <?rfc include="reference.I-D.ietf-mpls-mna-usecases"?>
    </references>

    <references title="Informative References"> 
    
 <!--     <?rfc include="reference.RFC.7274"?> 
      <?rfc include="reference.RFC.6518"?> 
      <?rfc include="reference.RFC.6952"?>
      <?rfc include="reference.RFC.7349"?> 
      <?rfc include="reference.RFC.7454"?>        -->
      <?rfc include="reference.RFC.5036"?>  
	  <?rfc include="reference.RFC.9197"?>	  
    </references>

  </back>
</rfc>
