<?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" ipr="trust200902" docName="draft-mirsky-spring-bfd-00">

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<front>
	<title abbrev='BFD in SPRING MPLS'>Bidirectional Forwarding Detection (BFD) in Segment Routing Networks Using MPLS Dataplane</title>

	<author initials='G.' surname="Mirsky" fullname='Greg Mirsky'>
		<organization>ZTE Corp.</organization>
		<address>
			<email>gregimirsky@gmail.com</email>
		</address> 
	</author>
    
    <date day="8" month="May" year="2017" />

    <area>Routing</area>

    <workgroup>SPRING Working Group</workgroup>

    <keyword>Internet-Draft</keyword>

   <keyword>LSP Ping</keyword>
   
   <keyword>BFD </keyword>
	
	<abstract>
	<t>
   Segment Routing architecture leverages the paradigm of source routing. It
   can be realized in the Multiprotocol Label Switching (MPLS) network without any change to the data plane. 
   A segment is encoded as an MPLS label and  an ordered list of segments 
   is encoded as a stack of labels.
   Bidirectional Forwarding Detection (BFD) is expected 
   to monitor any kind of paths between systems. This document defines
   how to use Label Switched Path Ping to bootstrap and control path 
   in reverse direction of
   a BFD session on the Segment Routing network over MPLS dataplane.  
	 </t>
	</abstract>
</front>

<middle>
  <section anchor="intro" title="Introduction">
 <t>
 <xref target="RFC5880"/>, <xref target="RFC5881"/>, and <xref target="RFC5883"/> 
 established the Bidirectional Forwarding Detection (BFD) 
 protocol for IP networks. <xref target="RFC5884"/> and <xref target="RFC7726"/> set rules 
 of using BFD Asynchronous mode over Multiprotocol Label Switching (MPLS)
 Label Switched Path (LSP). These latter standards implicitly assume that the egress 
 BFD peer, which is the egress Label Edge Router (LER),
 will use the shortest path route regardless of the path the ingress LER
 uses to send BFD control packets towards it. 
 </t>

 <t>
 This document defines use of LSP Ping for Segment Routing networks over MPLS
 dataplane <xref target="I-D.ietf-mpls-spring-lsp-ping"/> to bootstrap 
 and control path of a BFD session from the egress to ingress LER.
 </t>
         
     <section title="Conventions used in this document">
         <section title="Terminology">

            <t>BFD:         Bidirectional Forwarding Detection</t>
            <t>FEC:         Forwarding Equivalence Class</t>
           <t>MPLS:         Multiprotocol Label Switching</t>
            <t>LSP:         Label Switching Path</t>
            <t>LER:         Label Edge Router</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 
	  <xref target="RFC2119"></xref>.
             </t>
          </section>
      </section>
     </section> 

<section anchor="seg-rout-oper" title="Bootstrapping BFD session over Segment Routed tunnel">
<t>
As discussed in <xref target="I-D.ietf-mpls-spring-lsp-ping"/> 
introduction of Segment Routing network domains
with an MPLS data plane adds three new sub-TLVs that 
MAY be used with Target Forwarding Equivalence Class (FEC) TLV. Section 6.1 addresses use of
the new sub-TLVs in Target FEC TLV in LSP ping and LSP traceroute. 
For the case of LSP ping the <xref target="I-D.ietf-mpls-spring-lsp-ping"/>
states that:
<list>
<t>Initiator MUST include FEC(s) corresponding to the destination segment.</t>

<t>
Initiator, i.e. ingress LSR, MAY include FECs corresponding to some or all of
segments imposed in the label stack by the ingress LSR to
communicate the segments traversed.
</t>
</list>
</t>         
<t>
It has been noted in <xref target="RFC5884"/> that a BFD session monitors for 
defects particular &lt;MPLS LSP, FEC&gt; tuple. <xref target="RFC7726"/> clarified
how to establish and operate mutiple BFD sessions for the same &lt;MPLS LSP, FEC&gt; tuple.
Because only ingress edge router is aware of the SR-based explicit route egress edge router
can associate the LSP ping with BFD Discriminator TLV with only one of the FECs it advertised for
the particular segment. Thus this document defines that:
When LSP ping is used to bootstrap a BFD session this document updates the 
statement and defines that:
<list>
<t>
When LSP Ping is used to bootstrap a BFD session
it MUST include only one FEC corresponding
to the destination segment and SHOULD NOT include FECs corresponding to 
some or all of other segments imposed by the ingress LSR.
</t>
</list>
Operationally such restriction would not cause any problem or uncertainty as LSP ping 
with FECs corresponding to some or all segments or traceroute that validate the
segment route MAY precede the LSP ping that bootstraps the BFD session.
</t>
<t>
Encapsulation of a BFD Control packet in Segment Routing network with MPLS dataplane
MUST follow Section 7 <xref target="RFC5884"/> when IP/UDP header used and
MUST follow Section 3.4 <xref target="RFC6428"/> without IP/UDP header being used. 
</t>
</section>      

<section anchor="seg-rout-return" title="Use BFD Reverse Path TLV over Segment Routed MPLS tunnel">
<t>
   When a BFD session is used to monitor a source routed unidirectional path
   there may be a need to direct egress BFD peer to use specific path
   for the reverse direction of the BFD session by using the BFD Reverse Path TLV
   <xref target="I-D.ietf-mpls-bfd-directed"/>. For the case of MPLS dataplane, 
Segment Routing Architecture <xref target="I-D.ietf-spring-segment-routing"/> 
explains that "a segment is encoded as an MPLS label. 
An ordered list of segments is encoded as a stack of labels." Following on
that this document defines Segment Routing with MPLS dataplane sub-TLV that 
MAY be used with the BFD Reverse Path TLV <xref target="I-D.ietf-mpls-bfd-directed"/>.
The format of the sub-TLV is presented in <xref target="spring-mpls-sub-tlv"/>.
</t>
             <t>
          <figure align="left" anchor="spring-mpls-sub-tlv"
                title="Segment Routing MPLS Tunnel sub-TLV">
          <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
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  SegRouting MPLS sub-TLV Type |          Length             |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                          Label Entry 1                      |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                          Label Entry 2                      |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 ~                                                             ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                          Label Entry N                      |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

]]></artwork>
        </figure>
            </t> 
<t>
The Segment Routing Tunnel sub-TLV Type is two octets in length, and has a value of TBD 
(to be assigned by IANA as requested in <xref target="iana-consider"/>).
</t>
<t>
The egress LSR MUST use the Value field as label stack for BFD control packets
for the BFD session identified by the source IP address of the MPLS LSP Ping packet
and the value in the BFD Discriminator TLV. Label Entries MUST be in network order.
</t>
<t>
Exactly one Segment Routing Tunnel sub-TLV MUST be included in the Reverse Path TLV. 
If more than one Segment Routing Tunnel sub-TLV is present
in the Reverse Path TLV, then, in order to avoid ambiguity of which of TLVs to use,
the egress BFD peer MUST send Echo Reply with the received Reverse Path TLVs and set
the Return Code to "Too Many TLVs Detected" <xref target="I-D.ietf-mpls-bfd-directed"/>
</t>
<t>
The Segment Routing Tunnel sub-TLV MAY be used in Reply Path TLV defined in <xref target="RFC7110"/>
</t>

</section>

     <section anchor="iana-consider" title="IANA Considerations">
    
<t>
The IANA is requested to assign new sub-TLV type from "Multiprotocol Label Switching Architecture (MPLS)
Label Switched Paths (LSPs) Ping Parameters - TLVs" registry, "Sub-TLVs for TLV Types 1, 16, and 21" sub-registry.
</t>
     <texttable anchor="spring-sub-tlv-table" title="New Segment Routing Tunnel sub-TLV">
    <ttcol align='left'>Value</ttcol>
    <ttcol align='left'>Description</ttcol>
    <ttcol align='left'>Reference</ttcol>
    <c>X&nbsp;(TBD)</c>
    <c>Segment Routing MPLS Tunnel sub-TLV</c>
    <c>This&nbsp;document</c>
    </texttable>

     </section>
     
     <section anchor="security" title="Security Considerations">
     <t>
 Security considerations discussed in <xref target="RFC5880"/>, 
 <xref target="RFC5884"/>, <xref target="RFC7726"/>, and <xref target="RFC8029"/> 
 apply to this document. 
     </t>
     </section>
      
     
      <section title="Acknowledgements">
         <t>
         TBD
         </t>  
      </section>

  </middle>
  
    <back>
    <references title="Normative References">
     
  <?rfc include="reference.RFC.2119"?>
  <?rfc include="reference.RFC.5880"?>
  <?rfc include="reference.RFC.5881"?>
  <?rfc include="reference.RFC.5883"?>
  <?rfc include="reference.RFC.5884"?>
  <?rfc include="reference.RFC.8029"?>
  <?rfc include="reference.RFC.7110"?>
  <?rfc include="reference.RFC.7726"?>
  <?rfc include="reference.RFC.6428"?>
       
  <?rfc include='reference.I-D.ietf-mpls-spring-lsp-ping'?>
  <?rfc include='reference.I-D.ietf-spring-segment-routing'?>
  <?rfc include='reference.I-D.ietf-mpls-bfd-directed'?>
  <!--  <?rfc include='reference.I-D.previdi-6man-segment-routing-header'?> -->

   </references>


 </back>
 </rfc>