<?xml version='1.0' encoding='utf-8'?>
<!-- This template is for creating an Internet Draft using xml2rfc,
    which is available here: http://xml.resource.org. -->
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
    please see http://xml.resource.org/authoring/README.html. -->
<rfc
      xmlns:xi="http://www.w3.org/2001/XInclude"
      category="std"
      docName="draft-ietf-pim-rfc8059-9798bis-01"
      ipr="trust200902"
      obsoletes="8059, 9798"
      updates=""
      submissionType="IETF"
      xml:lang="en"
      tocInclude="true"
      tocDepth="4"
      symRefs="true"
      sortRefs="true"
      version="3">
  <!-- xml2rfc v2v3 conversion 2.38.1 -->
  <!-- category values: std, bcp, info, exp, and historic
    ipr values: trust200902, noModificationTrust200902, noDerivativesTrust200902,
       or pre5378Trust200902
    you can add the attributes updates="NNNN" and obsoletes="NNNN" 
    they will automatically be output with "(if approved)" -->

 <!-- ***** FRONT MATTER ***** -->

 <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
        full title is longer than 39 characters -->

	 <title abbrev="PIM Join Attributes for LISP Mcast"> PIM Join Attributes for Locator/ID Separation Protocol (LISP) Environments
   </title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-pim-rfc8059-9798bis-01"/>
    <!-- add 'role="editor"' below for the editors if appropriate -->

   <!-- Another author who claims to be an editor -->

   <author fullname="Vengada Prasad Govindan" initials="V" surname="Govindan">
      <organization>Cisco</organization>
      <address>
        <email>venggovi@cisco.com</email>
     </address>
    </author>

   <author fullname="Stig Venaas" initials="S" surname="Venaas">
      <organization>Cisco</organization>
      <address>
        <email>svenaas@cisco.com</email>
     </address>
    </author>


    <date year="2026"/>
    <!-- If the month and year are both specified and are the current ones, xml2rfc will fill 
        in the current day for you. If only the current year is specified, xml2rfc will fill 
	 in the current day and month for you. If the year is not the current one, it is 
	 necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the 
	 purpose of calculating the expiry date).  With drafts it is normally sufficient to 
	 specify just the year. -->

   <!-- Meta-data Declarations -->

   <area>Routing</area>
    <workgroup>Internet Engineering Task Force</workgroup>
    <!-- WG name at the upperleft corner of the doc,
        IETF is fine for individual submissions.  
	 If this element is not present, the default is "Network Working Group",
        which is used by the RFC Editor as a nod to the history of the IETF. -->

   <keyword>template</keyword>
    <!-- Keywords will be incorporated into HTML output
        files in a meta tag but they have no effect on text or nroff
        output. If you submit your draft to the RFC Editor, the
        keywords will be used for the search engine. -->

   <abstract>
   <t>This document defines two PIM Join/Prune attributes that support the
   construction of multicast distribution trees where the root and
   receivers are located in different Locator/ID Separation Protocol
   (LISP) sites.  These attributes allow the receiver site to select
   between unicast and multicast underlying transport, to convey the
   RLOC (Routing Locator) address of the receiver ETR (Egress Tunnel
   Router) to the control plane of the root ITR (Ingress Tunnel Router)
   and to signal the underlay multicast group to the control plane of the 
   root ITR. This document updates RFC 8059 and RFC 9798.</t>
    </abstract>
  </front>
  <middle>
    <section numbered="true" toc="default">
      <name>Introduction</name>
      <t>The construction of multicast distribution trees where the root and
   receivers are located in different LISP sites 
   <xref target="RFC9300" format="default"/> is defined in
   <xref target="I-D.ietf-lisp-rfc6831bis"/>.  Creation of (root-EID,G) state 
   in the root site requires
   that unicast LISP-encapsulated Join/Prune messages be sent from an
   ETR on the receiver site to an ITR on the root site.  The term "EID"
   is short for "Endpoint ID".
   <xref target="RFC9300" format="default"/>
   specifies that (root-EID,G) data packets are to be LISP-
   encapsulated into (root-RLOC,G) multicast packets.  However, a wide
   deployment of multicast connectivity between LISP sites is unlikely
   to happen any time soon.  In fact, some implementations are initially
   focusing on unicast transport with head-end replication between root
   and receiver sites.</t>
   <t>   The unicast LISP-encapsulated Join/Prune message specifies the
   (root-EID,G) state that needs to be established in the root site, but
   conveys nothing about the receiver's capability or desire to use
   multicast as the underlying transport.  This document specifies a
   Join/Prune attribute that allows the receiver ETR to select the
   desired transport.</t>

   <t>The term "transport" in this document is intentionally somewhat
   vague.  Currently, it is used just to indicate whether multicast or
   head-end replication is used; this means that the outer destination
   address is either a unicast or multicast address.  Future documents
   may specify how other types of delivery, encapsulation, or underlay
   are used.</t>

   <t>Knowledge of the receiver ETR's RLOC address is essential to the
   control plane of the root ITR.  The RLOC address determines the
   downstream destination for unicast head-end replication and
   identifies the receiver ETR that needs to be notified should the root
   ITR of the distribution tree move to another site.  The root ITR can
   change when the source EID is roaming to another LISP site.</t>

   <t>Service providers may implement unicast reverse path forwarding
   (uRPF) policies requiring that the outer source address of the LISP-
   encapsulated Join/Prune message be the address of the receiver ETR's
   core-facing interface used to physically transmit the message.
   However, due to policy and load-balancing considerations, the outer
   source address may not be the RLOC on which the receiver site wishes
   to receive a particular flow.  This document specifies a Join/Prune
   attribute that conveys the appropriate receiver ETR's RLOC address to
   the control plane of the root ITR.</t>

   <t> This document uses terminology defined in 
   <xref target="RFC9300" format="default"/> and
   <xref target="RFC9301" format="default"/>, 
   such as EID, RLOC, ITR, and ETR.</t>

   <t> The construction of multicast distribution trees where the root and
   receivers are located in different LISP sites 
   <xref target="RFC9300" format="default"/> is defined in
   <xref target="I-D.ietf-lisp-rfc6831bis"/>.</t>

      <section>
      <name>Requirements Language</name>
        <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>
   <name>PIM Join/Prune Attributes</name>

   <t>PIM Join/Prune attributes are defined in <xref target="RFC5384"/> by 
   introducing a new Encoded-Source type that, in addition to the Join/Prune 
   source, can carry multiple Type-Length-Value (TLV) attributes. These
   attributes apply to the individual Join/Prune sources on which they
   are stored.</t>

   <t>The attributes defined in this document conform to the format of the
   encoding type defined in <xref target="RFC5384"/>.  The attributes would 
   typically be the same for all the sources in the Join/Prune message. Hence,
   we RECOMMEND using the hierarchical Join/Prune attribute scheme defined
   in <xref target="RFC7887"/>.  This hierarchical system allows attributes 
   to be conveyed in the Upstream Neighbor Address field, thus enabling the
   efficient application of a single attribute instance to all the
   sources in the Join/Prune message.</t>

   <t>LISP Tunnel Routers (xTRs) do not exchange PIM Hello Messages, and
   hence no Hello option is defined to negotiate support for these
   attributes.  Systems that support unicast head-end replication are
   assumed to support these attributes.</t>
   </section>

   <section>
   <name>The Transport Attribute</name>

   <t>It is essential that a mechanism be provided by which the desired
   transport can be conveyed by receiver sites.  Root sites with
   multicast connectivity will want to leverage multicast replication.
   However, not all receiver sites can be expected to have multicast
   connectivity.  It is thus desirable that root sites be prepared to
   support (root-EID,G) state with a mixture of multicast and unicast
   output state.  This document specifies a Join/Prune attribute that
   allows the receiver to select the desired underlying transport.</t>

   <section>
   <name>Transport Attribute Format</name>

       <figure>
         <artwork><![CDATA[
       0                   1                   2
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |F|E|  Type = 5 | Length = 1    |  Transport    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

         ]]></artwork>
       </figure>
      <ul spacing="compact">
        <li>F-bit: The Transitive bit. Specifies whether the attribute is 
        transitive or non-transitive. MUST be set to zero. This attribute 
        is ALWAYS non-transitive. </li>
        <li>End-of-Attributes bit. Specifies whether this attribute is the 
        last. Set to zero if there are more attributes. Set to 1 if this is
        the last attribute.</li>
        <li> The Transport Attribute type is TBD.</li>
        <li>Length: The length of the Transport Attribute value. MUST be 
        set to 1.</li>
        <li>Transport: The type of transport being requested. Set to 0 for 
        multicast. Set to 1 for unicast. The values from 2 to 255 may be 
        assigned in the future.</li>
      </ul>
   </section>

   <section>
   <name>Using the Transport Attribute</name>

   <t>Hierarchical Join/Prune attribute instances <xref target="RFC7887"/> 
   SHOULD be used when the same Transport Attribute is to be applied to all 
   the sources within the Join/Prune message or all the sources within a group
   set. The root ITR MUST accept Transport Attributes in the Upstream
   Neighbor Encoded-Unicast address, Encoded-Group addresses, and
   Encoded-Source addresses.</t>

   <t>There MUST NOT be more than one Transport Attribute within the same
   encoded address.  If an encoded address has more than one instance of
   the attribute, the root ITR MUST discard all affected Join/Prune
   sources.  The root ITR MUST also discard all affected Join/Prune
   sources if the Transport Attribute value is unknown.</t>
   </section>
   </section>


   <section title="Receiver ETR RLOC Attribute">

   <section title="Using the Received ETR RLOC Attribute for Unicast Underlays">
   <t>When a receiver ETR requests unicast head-end replication for a given
   (root-EID,G) entry, the PIM control plane of the root ITR must
   maintain an outgoing interface list ("oif-list") entry for the
   receiver ETR and its corresponding RLOC address.  This allows the
   root ITR to perform unicast LISP-encapsulation of multicast data
   packets to each and every receiver ETR that has requested unicast
   head-end replication.</t>

   <t>The PIM control plane of the root ITR could potentially determine the
   RLOC address of the receiver ETR from the outer source address field
   of the LISP-encapsulated Join/Prune message.  However, receiver ETRs
   are subject to uRPF checks by the network providers on each core-
   facing interface.  The outer source address must therefore be the
   RLOC of the core-facing interface used to physically transmit the
   LISP-encapsulated Join/Prune message.  Due to policy and load-
   balancing considerations, that may not be the RLOC on which the
   receiver site wishes to receive a particular flow.  This document
   specifies a Join/Prune attribute that conveys the appropriate
   receiver RLOC address to the PIM control plane of the root ITR.</t>

   <t>To support root-EID mobility, receiver ETRs must also be tracked by
   the LISP control plane of the root ITR, regardless of the underlying
   transport.  When the root-EID moves to a new root ITR in a different
   LISP site, the receiver ETRs do not know the root-EID has moved and
   therefore do not know the RLOC of the new root ITR.  This is true for
   both unicast and multicast transport modes.  The new root ITR does
   not have any receiver ETR state.  Therefore, it is the responsibility
   of the old root ITR to inform the receiver ETRs that the root-EID has
   moved.  When the old root ITR detects that the root-EID has moved, it
   sends a LISP Solicit-Map-Request (SMR) message to each receiver ETR.
   The receiver ETRs do a mapping database lookup to retrieve the RLOC
   of the new root ITR.  The old root ITR detects that the root-EID has
   moved when it receives a Map-Notify from the Map-Server.  The
   transmission of the Map-Notify is triggered when the new root ITR
   registers the root-EID [EID-MOBILITY].  When a receiver ETR
   determines that the root ITR has changed, it will send a LISP-
   encapsulated PIM prune message to the old root xTR and a LISP-
   encapsulated PIM join message to the new root xTR.</t>
   </section>

   <section title="Using the Received ETR RLOC Attribute for Multicast Underlays">
     <t>When LISP based Multicast trees are constructed using IP Multicast 
     in the underlay, the mapping between the overlay group address and 
     the underlay group address becomes a crucial engineering decision: </t>
     <t> Three distinct types of overlay to underlay group mappings are 
      possible:</t>
      <dl newline="true" spacing="normal" indent="2">
      <dt> Many to one mapping: </dt> 
       <dd> Many (root-EID, G) flows originating from an RLOC can be mapped 
       to a single underlay multicast (root-RLOC, G-u) flow.</dd>  
       <dt> One to many mapping: </dt>
       <dd> Conversely  a single same overlay flow can be mapped to two or
        more flows, e.g., (root-RLOC, G-u1) and (root-RLOC, G-u2) to cater 
        to the requirements of downstream xTR nodes.</dd>  
        <dt> One to one mapping: </dt>
       <dd> Every (root-EID, G) flow is mapped to a unique (root-RLOC, G-u) flow.</dd> 
      </dl>
	              
     <section title="Multicast Address Range constraints:">
	<t>Under certain conditions, different subsets of xTRs subscribing to
        the same overlay multicast stream may be constrained to use distinct
        underlay multicast mapping ranges. </t>
	<t> This introduces a trade-off between replication overhead and the
        flexibility of address range assignment, which may be necessary in 
        specific use-cases like Proxy Tunnel Routers or when using nodes with
        limited hardware resources as explained below: </t>
         <dl newline="true" spacing="normal" indent="2">
	 <dt> Inter-site Proxy Tunnel Routers (PxTR):</dt>
         <dd> When multiple LISP sites are interconnected through a LISP-based
         transit, the site border node (PxTR) connects the site-facing 
         interfaces with the external LISP core. In such cases, different
         ranges of multicast group addresses may be used for constructing 
         (S-RLOC, G) trees within the LISP site and in the external LISP core.
          This distinction is desirable for various operational reasons.
         </dd>
	 <dt> Hardware resource restrictions:</dt>
          <dd> Platform limitations may necessitate engineering decisions to 
          restrict multicast address ranges in the underlay due to hardware 
          resource constraints. </dd>
          </dl>
     </section>
   </section>

    
   <section title="Receiver RLOC Attribute format">
     <figure>
         <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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |F|E|  Type = 6 |    Length     |  Addr Family  |  Receiver RLOC
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...

     ]]></artwork>
    </figure>
    <ul spacing="compact">
     <li>F bit:   The Transitive bit.  Specifies whether this attribute is
     transitive or non-transitive.  MUST be set to zero.  This
     attribute is ALWAYS non-transitive.</li>

     <li>E bit:   End-of-Attributes bit.  Specifies whether this attribute is
     the last.  Set to zero if there are more attributes.  Set to 1 if
     this is the last attribute.</li>

     <li>Type:   The Receiver RLOC Attribute type is TBD[suggested: 6].</li>

     <li>Length:   The length in octets of the attribute value.  MUST be set
     to the length in octets of the receiver RLOC address plus 1 octet
     to account for the Address Family field.</li>

     <li>Addr Family:   The PIM Address Family of the receiver RLOC as defined
     in <xref target="RFC7761"/>.</li>

     <li> Receiver RLOC: The RLOC address on which the receiver ETR wishes to
     receive the encapsulated flow. A unicast IP Receiver RLOC address is used
     for unicast-encapsulated flows. Alternately, a multicast IP Receiver 
     RLOC address is used for for multicast-encapsulated flows.  A multicast 
     IP address MUST be used only when the underlay network of the LISP core
     supports IP Multicast transport.</li>
    </ul>

    <t> When the ITR needs to track the list of ETRs from which the PIM joins
    are received, the ITR MUST use the source IP address field of the incoming
    PIM Join/Prune message. The source IP address of the PIM Join/Prune MUST 
    be an ETR RLOC IP address.</t>
   </section>

   <section title="Using the Receiver RLOC Attribute">

   <t>Hierarchical Join/Prune attribute instances [RFC7887] SHOULD be used
   when the same Receiver RLOC Attribute is to be applied to all the
   sources within the message or all the sources within a group set.
   The root ITR MUST accept Transport Attributes in the Upstream
   Neighbor Encoded-Unicast address, Encoded-Group addresses, and
   Encoded-Source addresses.</t>

   <t>There MUST NOT be more than one Receiver RLOC Attribute within the
   same encoded address.  If an encoded address has more than one
   instance of the attribute, the root ITR MUST discard all affected
   Join/Prune sources.  The root ITR MUST also discard all affected
   Join/Prune sources if the address family is unknown or the address
   length is incorrect for the specified address family.</t>
      <t>When the ETR determines to use the multicast underlay:</t>
      <ul>
      <li>It chooses an underlay multicast group that it can join. This is 
        a matter of local decision, beyond the scope of this document.</li>
      <li>It identifies the upstream LISP site where the underlay multicast
        tree needs to be rooted.</li>
      <li>It constructs the PIM Join/Prune message as specified in 
        <xref target="RFC8059" format="default">RFC 8059</xref> and
        <xref target="RFC9798" format="default">RFC 9798</xref>. Only the 
        Receiver RLOC attribute is encoded as above. </li>
      </ul><t></t>
      <t>When the ITR receives a PIM Join/Prune message: </t>
      <ul>
      <li>It allocates a new entry in the OutgoingInterfaceList 
        <xref target="I-D.ietf-lisp-rfc6831bis"/>  for every unique underlay 
        multicast mapping. </li>
      <li>The ITR MAY apply local policy to perform any kind of rate-limiting
        on the number of copies it needs to make in the underlay. Such actions
        are beyond the scope of this document.</li>
      </ul><t></t>

</section>
</section>


   <!-- Possibly a 'Contributors' section ... -->

   <section anchor="Acknowledgements" numbered="true" toc="default">
      <name>Acknowledgements</name>
	 <t>Thanks to Amanda Baber for refining the text in the IANA section.</t>
   </section>

   <section anchor="IANA" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>Following the guidelines of <xref target="RFC8126"/>, IANA is asked
      to update the references for the following registrations as follows:</t>
      <t>Two PIM Join attribute types need to be updated: value 5
      for the Transport Attribute and value 6 for the Receiver RLOC
      Attribute earlier allocated through <xref target="RFC8059"/> and 
     <xref target="RFC9798"/> are to be updated to be owned by this document.</t>
      
      <t>The "PIM Join/Prune Transport Types" registry exists for
      the Join/Prune Transport attribute.  The registration policy is IETF
      Review <xref target="RFC5226"/>, and the values are in the range 0-255. 
      This document should be the updated reference for value 0 for multicast and value 1 for unicast.
      These values were earlier owned by
      <xref target="RFC8059"/> and <xref target="RFC9798"/>.</t>
    </section>

    <section anchor="Security" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>Security of Join/Prune attributes is only guaranteed by the security
      of the PIM packet.  The attributes specified herein do not enhance or
      diminish the privacy or authenticity of a Join/Prune message.  A site
      that legitimately or maliciously sends and delivers a Join/Prune
      message to another site will equally be able to append these and any
      other attributes it wishes.  See [RFC5384] for general security
      considerations for Join/Prune attributes.</t>
      <t> An attack vector arises where an attacker sends numerous PIM 
      Join messages with different group addresses. This could interfere with 
      legitimate multicast traffic if the group addresses overlap. 
      Additionally, resource exhaustion may occur if replication is requested
      for a large number of groups, potentially resulting in significant
      resource consumption.</t>
      <t>To mitigate these risks, PIM authentication mechanisms 
      <xref target="RFC5796" format="default">RFC 5796</xref> could be 
      employed to validate join requests. Furthermore, implementations may 
      consider explicit tracking mechanisms to manage joins more effectively.
      Configurable controls could be introduced, allowing for a maximum 
      permissible number of groups for each ETR RLOC used as the source of 
      overlay joins. These controls would limit the impact of such attacks and
      ensure that resource allocation is managed appropriately. </t>
    </section>
  <!--  *****BACK MATTER ***** -->
   <section anchor="Contributors" numbered="true" toc="default">
      <name>Contributors</name>
   <author fullname="Jesus Arango" initials="J" surname="Arango">
      <organization>TBD</organization>
      <address>
        <email>tbd@tbd.com</email>
     </address>
    </author>
   <author fullname="Isidor Kouvelas" initials="IK" surname="Kouvelas">
      <organization>Arista</organization>
      <address>
        <email>kouvelas@arista.com</email>
     </address>
    </author>
   <author fullname="Dino Farinacci" initials="DF" surname="Farinacci">
      <organization>lispers.net</organization>
      <address>
        <email>farinacci@gmail.com</email>
     </address>
    </author>

    </section>
  </middle>


 <back>
    <!-- References split into informative and normative -->

   <!-- There are 2 ways to insert reference entries from the citation libraries:
    1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
    2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
       (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

    Both are cited textually in the same manner: by using xref elements.
    If you use the PI option, xml2rfc will, by default, try to find included files in the same
    directory as the including file. You can also define the XML_LIBRARY environment variable
    with a value containing a set of directories to search.  These can be either in the local
    filing system or remote ones accessed by http (http://domain/dir/... ).-->

    <references title="Normative References">
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5384.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5796.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9300.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9301.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8059.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5226.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7761.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7887.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9798.xml"/>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-lisp-rfc6831bis.xml"/>
    </references>
    <!-- Change Log

v00 2025-05-31  GVP   Initial version

    -->
 </back>
</rfc>
