<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc category="std" docName="draft-hb-pim-p2mp-policy-ping-03"
     ipr="trust200902">
  <front>
    <title abbrev="P2MP Policy Ping">P2MP Policy Ping</title>

    <author fullname="Hooman Bidgoli" initials="H" role="editor"
            surname="Bidgoli">
      <organization>Nokia</organization>

      <address>
        <postal>
          <street/>

          <city>Ottawa</city>

          <region/>

          <code/>

          <country>Canada</country>
        </postal>

        <phone/>

        <email>hooman.bidgoli@nokia.com</email>
      </address>
    </author>

    <author fullname="Daniel Voyer" initials="V." surname="Voyer">
      <organization>Bell Canada</organization>

      <address>
        <postal>
          <street/>

          <city>Montreal</city>

          <region/>

          <code/>

          <country>Canada</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>daniel.yover@bell.ca</email>

        <uri/>
      </address>
    </author>

    <author fullname="Rishabh Parekh" initials="P." surname="Parekh">
      <organization>Cisco System</organization>

      <address>
        <postal>
          <street/>

          <city>San Jose</city>

          <region/>

          <code/>

          <country>USA</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>riparekh@cisco.com</email>

        <uri/>
      </address>
    </author>

    <author fullname="Zhaohui Zhang" initials="Z." surname="Zhang">
      <organization>Juniper Networks</organization>

      <address>
        <postal>
          <street/>

          <city>Boston</city>

          <region/>

          <code/>

          <country>USA</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>zzhang@juniper.com</email>

        <uri/>
      </address>
    </author>

    <date day="13" month="November" year="2021"/>

    <abstract>
      <t>SR P2MP policies are set of policies that enable architecture for
      P2MP service delivery. A P2MP Policy consists of candidate paths that
      connects the Root of the Tree to a set of Leaves. The P2MP policy is
      composed of replication segments. A replication segment is a forwarding
      instruction for a candidate path which is downloaded to the Root,
      transit nodes and the leaves.</t>

      <t>This document describes a simple and efficient mechanism that can be
      used to detect data plane failures in P2MP Policy Candidate Paths (CPs)
      and Path Instances (PIs).</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <!-- 1 -->

      <t>Each P2MP Policy can have multiple CPs. The CP with highest
      preference is the active CP while all other CPs are the backup CPs. A CP
      can have multiple PIs to allow global optimization of the CP via Make
      Before Break procedures between the active PI and the newly setup and
      optimized PI.</t>

      <t>It is desirable to test the end to end connectivity of a CP, whether
      it is the active CP or a backup CP and all the CP's PIs. This document
      describes a mechanism that can be used to detect data plane failures in
      P2MP Policy Candidate Paths (CP) and its associate Path Instances
      (PI).</t>

      <t>This draft is only for replication SIDs that use MPLS encap for their
      forwarding and not SRv6. It reuses most of the concepts in <xref
      target="RFC6425"/></t>
    </section>

    <section title="Conventions used in this document">
      <!-- 2 -->

      <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 title="Motivation">
      <!-- 3-->

      <t>A P2MP Policy and its corresponding Replication Segments are usually
      setup via a controller, the root and the leaves are discovered as per
      <xref target="draft-ietf-pim-sr-p2mp-policy-02"/>. The tree is
      calculated from the root to the leaves. There is no underlay protocol to
      signal the P2MP Policy from the root to the Leaf routers, as such when a
      P2MP tree fails to deliver user traffic, the failure can be difficult to
      pin point without a ping/traceroute mechanism to isolate the fault in
      the P2MP tree. The P2MP Policy ping/traceroute can be utilize to detect
      faults on the path of the tree and its associated replication segments
      <xref target="draft-ietf-spring-segment-routing-policy-13"/>. These
      tools can be used to periodically ping the leaves to ensure
      connectivity. If the ping fails, trace route can be initiated to
      determine where the failure lies. The ping/traceroute can be initiated
      from the node that initiates the P2MP policy.</t>

      <section title="MPLS P2MP Policy Ping and Traceroute">
        <!-- 3.1 -->

        <t>Ping/Traceroute packets are forwarded on the P2MP Policy, on a
        specific CP or its active PI toward the leaf routers. They are
        replicated at the replication point based on the replication segment
        forwarding information on the corresponding node. This draft only
        addresses the replication segments that use MPLS encap only, future
        drafts will address the SRv6 forwarding. The packet are processed
        accordingly when their TTL expires or when the egress router (leaf) is
        reached. The appropriate respond is send back to the root as per
        procedures in <xref target="RFC6425"/></t>

        <t>This draft reuses most procedures for mLDP in RFC <xref
        target="RFC6425"/></t>

        <t>This draft also reuses the same destination UDP port as <xref
        target="RFC4379"/></t>

        <t>The implementation should take into account that there can be many
        CPs under the P2MP Policy and the implementation should allow each CP
        and its corresponding PI to be tested via Ping and Trace route. The
        Ping and Traceroute packet is forwarded via that specific CP and its
        corresponding replication segments. On the egress node the
        corresponding CP and its PI should respond irrespective if it is the
        active CP or a backup CP.</t>

        <t>Two replication segments can be connected via a unicast SR domain.
        In this scenario the SR tunnel labels need to be programmed with the
        right TTL depending on the which type of hierarchical MPLS TTL mode is
        used. As an example pipe vs uniform mode. When in SR domain the P2MP
        Tree PING and Traceroute will be processed on the two connecting
        replication segments based on the replication SID and its TTL. As such
        the SR domain will act as a single hop on the replication SID and the
        replication SID TTL is subtracted by one before the unicast SR SIDs
        are pushed on the replication SID. To detect failure in SR domain is
        beyond the scope of this draft.</t>
      </section>

      <section title="Packet format and new TLVs">
        <t>The packet format used is as per <xref target="RFC4379"/> section
        3. Some new TLVs and sub-TLVs are required to support the new
        functionality. They are described in the following sections.</t>

        <section title="Identifying a P2MP Policy">
          <!-- 3.1 -->

          <t><xref target="RFC4379"/> defines how an MPLS TE LSP under test
          may be identified in an echo request.In order to identify the
          correct replication segment for the CP and its PI, the echo request
          message MUST carry a Target FEC Stack TLV, and this MUST carry
          exactly one of one new sub-TLV: a P2MP policy MPLS CP FEC Stack
          sub-TLV. The new sub-TLV is assigned Sub-Type identifiers as
          follows, and are described in the following sections.</t>

          <figure>
            <artwork><![CDATA[artwork      
Sub-Type       Length            Value Field
--------       ------            -----------
      42           xx            P2MP Policy MPLS CP
]]></artwork>
          </figure>

          <t/>

          <section title="P2MP Policy CP FEC Stack Sub-TLVs">
            <t>The format of the P2MP Policy Session sub-TLV value field is
            specified in the following figure. The value fields are taken from
            the definitions of the P2MP Policy section 3 of <xref
            target="draft-ietf-pim-sr-p2mp-policy-02"/></t>

            <t><figure>
                <artwork><![CDATA[artwork
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Address Family         | Address Length|   Root Addr   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   ~                   Root Address (Cont.)                        ~
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        TreeId length          |         Tree-ID      ...      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Path-Instance length    |        Path-instance          |                    
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               
]]></artwork>
              </figure></t>

            <t><list style="symbols">
                <t>Address Family: Two-octet quantity, containing a value from
                ADDRESS FAMILY NUMBERS in [IANA-AF] that encodes the address
                family for the Root Address.</t>

                <t>Address Length: Length of the Root Address in octets.</t>

                <t>Root Address: The address of Root node of P2MP tree
                instantiated by the SR P2MP Policy</t>

                <t>TreeId Length: Length of the TreeID in octets. This should
                be set to 4 octets</t>

                <t>Tree-ID: A identifier that is unique in context of the
                Root. This is an unsigned 32-bit number.</t>

                <t>Path-instance Length: Length of the path instance ID in
                octet.</t>

                <t>path-instance: path instance ID to be tested <xref
                target="draft-ietf-spring-segment-routing-policy-13"/></t>
              </list></t>
          </section>
        </section>
      </section>

      <section title="Limiting the Scope of Response">
        <!-- 3.2 -->

        <t>As per <xref target="RFC6425"/> section 3.2 Four sub-TLVs are used
        for the inclusion in the P2MP Responder Identifier TLV carried on the
        echo request message.</t>

        <t>The Sub-TLVs for IPv4 and IPv6 egress address P2MP responder is in
        par with <xref target="RFC6425"/> section 3.2.1</t>

        <t>The Sub-TLVs for IPv4 and IPv6 node address P2MP responder is in
        par with <xref target="RFC6425"> </xref> section 3.2.2</t>
      </section>
    </section>

    <section title="IANA Consideration">
      <!-- 6 -->

      <t>Two new sub-TLV types are defined for inclusion within the LSP ping
      [RFC4379] Target FEC Stack TLV (TLV type 1).</t>
    </section>

    <section title="Security Considerations">
      <!-- 8 -->

      <t>TBD</t>
    </section>

    <section title="Acknowledgments">
      <!-- 9 -->

      <t/>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <reference anchor="RFC2119">
        <front>
          <title>S. Brandner, "Key words for use in RFCs to Indicate
          Requirement Levels"</title>

          <author>
            <organization/>
          </author>

          <date month="March" year="1997"/>
        </front>
      </reference>

      <reference anchor="RFC8174">
        <front>
          <title>B. Leiba, "ambiguity of Uppercase vs Lowercase in RFC 2119
          Key Words"</title>

          <author>
            <organization/>
          </author>

          <date month="May" year="2017"/>
        </front>
      </reference>
    </references>

    <references title="Informative References">
      <!-- 10.2 -->

      <reference anchor="draft-ietf-pim-sr-p2mp-policy-02">
        <front>
          <title>D. Yoyer, C. Filsfils, R.Prekh, H.bidgoli, Z. Zhang,
          "draft-voyer-pim-sr-p2mp-policy"</title>

          <author>
            <organization/>
          </author>

          <date month="October" year="2019"/>
        </front>
      </reference>

      <reference anchor="draft-ietf-spring-segment-routing-policy-13">
        <front>
          <title>D. Yoyer, C. Filsfils, R.Prekh, H.bidgoli, Z. Zhang,
          "draft-voyer-pim-sr-p2mp-policy
          "draft-voyer-spring-sr-replication-segment"</title>

          <author>
            <organization/>
          </author>

          <date month="July" year="2020"/>
        </front>
      </reference>

      <reference anchor="RFC6425">
        <front>
          <title>S. Saxena, G. Swallow, Z. Ali, A. Farrel, S. Yasukawa,
          T.Nadeau "Detecting Data-Plane Failures in Point-to-Multipoint
          MPLS"</title>

          <author>
            <organization/>
          </author>

          <date month="November" year="2011"/>
        </front>
      </reference>

      <reference anchor="RFC4379">
        <front>
          <title>K. Kompella, G. Swallow</title>

          <author>
            <organization/>
          </author>

          <date month="February" year="2006"/>
        </front>
      </reference>
    </references>
  </back>
</rfc>
<!-- generated from file C:\Users\hbidgoli\Downloads\draft-ietf-bier-pim-signaling-08.nroff with nroff2xml 0.1.0 by Tomek Mrugalski -->
