<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<rfc category="exp" ipr="trust200902" docName="draft-ietf-lisp-group-mapping-03">

<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes" ?>
<?rfc iprnotified="no" ?>
<?rfc strict="yes" ?>

  <front>
	<title>LISP Multicast Overlay Group to Underlay RLOC Mappings</title>

   <author fullname="Vengada Prasad Govindan" initials="V" surname="Govindan" role="editor">
     <organization>Cisco</organization>
     <address>
       <email>venggovi@cisco.com</email>
     </address>
   </author>

   <author fullname="Dino Farinacci" initials="D" surname="Farinacci">
     <organization>lispers.net</organization>
     <address>
       <email>farinacci@gmail.com</email>
     </address>
   </author>

   <author fullname="Aswin Kuppusami" initials="A" surname="Kuppusami">
     <organization>Cisco</organization>
     <address>
       <email>aswkuppu@cisco.com</email>
     </address>
   </author>

   <author fullname="Stig Venaas" initials="S" surname="Venaas">
     <organization>Cisco</organization>
     <address>
       <email>stig@cisco.com</email>
     </address>
   </author>

   <date></date>

   <abstract>
	 <t>This draft augments LISP <xref target="RFC9300"/> multicast
	 functionality described in <xref target="I-D.farinacci-lisp-rfc6831bis"/> and
     <xref target="I-D.farinacci-lisp-rfc8378bis"/> to support the mapping of overlay group
	 addresses to underlay RLOC addresses. This draft defines a
	 many-to-1, 1-to-many, and many-to-many relationship between
	 multicast EIDs and the Replication List Entries (RLEs) RLOC
	 records they map to. The mechanisms in this draft allow a
	 multicast LISP overlay to run over a mixed underlay of unicast
	 and/or multicast packet forwarding functionality.</t>
   </abstract>

  </front>

  <middle>
    <section title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
      NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
      "OPTIONAL" in this document are to be interpreted as described
      in <xref target="RFC2119"/>.</t>
    </section>

    <section title="Introduction">
      <t>When a multicast capable underlay connects multiple LISP
      sites, we can take advantage of the multicast capabilities and
      perform replication more efficiently than using head-end
      replication. This draft addresses the problem of selecting the
      underlay multicast group(s) to transport a given overlay
      multicast flow. There are 4 different scenarios possible:</t>

      <t><list style="numbers">
		 <t> A 1:1 mapping of an overlay multicast flow, either a
		 (Source, Group) or (*, Group) to an underlay group. </t>

		 <t> A many:1 mapping where many overlay multicast flows share
		 the same underlay group.</t>

		 <t> A 1:many mapping where a single overlay group is
		 transported over different underlay groups. Note in this
		 case, the "many" means mapping one EID to multiple RLOCs in a
		 RLE-set where the set can be a mix of underlay groups and
		 underlay unicast addresses. It is really important that this
		 algorithm compute unicast RLOCs as well as multicast
		 RLOCs. </t>

         <t>Given the "many" mapping case relationship above, a 4th
         relationship of m:n many-to-many mappings exist and will be
         supported.</t>
      </list></t>

	  <t>There are two methods being proposed to derive an underlay
	  group from an overlay group:</t>

	  <t><list style="symbols">
	    <t>Computation based underlay group assignment using a hash
	    function. Here all ETRs will use the same multicast underlay
	    group, when they are all on the same native multicast
	    forwarding underlay.  The ETRs hash the bits of the group
	    address G for an (S-EID, G) flow. The low-order 24-bits of
	    the hash is used to produce an IPv4 underlay group address.
	    The low-order 120-bits of the hash is used to produce an IPv6
	    underlay group address.</t>
		  
	    <t>Lookup based group assignment where a mapping system lookup
	    is used to coordinate the assignment of the underlay group
	    among ETRs.</t>
      </list></t>

      <t>The scope of this draft covers underlays based on IPv4 and
      IPv6 only. It does not cover other transport mechanisms like
      BIER, multicast MPLS, or layer-2 underlays.</t>
    </section>

    <section title="Definition of Terms">
	  <t>Note all terminology used in this document is based on the
	  formal definitions from <xref target="I-D.farinacci-lisp-rfc6831bis"/> and <xref
	  target="I-D.farinacci-lisp-rfc8378bis"/>.  The definitions below
	  extend these formal definitions to address the introduction of
	  group overlay to group/unicast underlay mappings.</t>

      <t><list style="hanging">
		<t hangText="(S-EID,G):">refers to multicast state in
		multicast source and receiver sites where S-EID is the IP
		address of the multicast source host (its EID). An S-EID can
		appear in an IGMPv3 report, an MSDP SA message or a PIM
		Join/Prune message that travels inside of a site. The notation
		(S-EID,G-EID) is also used to signify that this is an overlay
		source and overlay group entry.</t>

		<t hangText="(S-RLOC G):">refers to multicast state in the
		underlay core where S-RLOC is a source address of the ITR that
		is performing encapsulation.  The notation (S-RLOC,G-RLOC) is
		also used to denote G-RLOC as the underlay group address. The
		(S-RLOC,G-RLOC) is mapped from the (S-EID,G-EID) entry by
		doing a mapping database lookup for (S-EID,G-EID).</t>

		<t hangText="(S-RLOC,U-RLOC):">refers to multicast state in
		the underlay core where S-RLOC is a source address of the ITR
		that is performing encapsulation.  In this case, the underlay
		RLOC is a unicast address and denoted as U-RLOC. A U-RLOC is
		used for encapsulation when it is determined that the ETR has
		no multicast connectivity and cannot be reached via a
		G-RLOC. So the ITR encapsulates to the unicast address U-RLOC
		of the ETR.</t>

        <t hangText="RLE:">is an Replication List Entry encoding used
        for replicating multicast packets which are encapsulated. The
        list can be made up of multiple G-RLOCs and U-RLOCs. The RLE
        appears in control messages in a single RLOC-record.</t>

        <t hangText="Multicast Mapping:">an entry in the mapping
        system that maps a multicast (S-EID,G-EID) or (*,G-EID) entry
        to an RLOC-set. An example would be EID: (S-EID,G-EID) -&gt;
        RLE-set: [G-RLOCa, G-RLOCb, U-RLOCc U-RLOCd] where the S-EID
        is the source of a multicast packet sending to a G-EID
        destination.  The RLOC-record is an RLE entry made up of 4
        replications, the first to G-RLOCa, the second to G-RLOCb, the
        third to U-RLOCc, and finally to U-RLOCd. It is at the
        discretion of the encapsulator (an ITR or RTR) what source
        RLOC address is used as the source address in the outer
        header.</t>
	  </list></t>
    </section>

    <section title="Source Site Procedures">
      <t>The Source Site Procedures from <xref target="I-D.farinacci-lisp-rfc8378bis"/> are
      followed for overlay nodes and <xref target="I-D.farinacci-lisp-rfc6831bis"/> for
      non-overlay nodes. There are no modifications to these
      procedures other than the source multicast site -ITR should be
      capable of replicating to multiple G-RLOC and U-RLOC addresses
      from its map-cache.</t>
    </section>

    <section title="Hashed Based Underlay Group Selection">
      <t>When an ETR receives an IGMP/MLD report it needs to decide
      which G-RLOC to join in the underlay. A hash-based algorithm can be
      used so all ETRs that process the report can join the same
      G-RLOC. Therefore when an (S-EID,G-EID) is reported, the hash
      will be over the pair of 32-bits for IPv4 IGMP reports and over
      the pair of 128-bits for IPv6 MLD reports. When (*,G-EID) is
      being reported, the hash is over just G-EID. The hash function
      used will be sha256 <xref target="RFC6234"/>.</t>

      <t>The hashed based approach creates perfect replication since
      it results in a 1-to-1 mapping, but at the expense of more
      underlay state.</t>
    </section>

    <section title="Mapping System Lookup Based Underlay Group Selection">
      <t>There will be scenarios where native multicast underlay
      provider will want to control what group addresses are used in
      the network. Therefore, a hashed based algorithm may be at
      conflict. In this case G-RLOCs need to be registered to the
      mapping system which are part of the provider supported group
      address block.</t>

      <t>The proposed procedure is for the provider to register the
      G-RLOC as an RLOC record for a distinguished-name EID encoded
      from procedures in <xref
      target="I-D.ietf-lisp-name-encoding"/>. The EID will be
      registered in a well defined and configured instance-id with
      name &quot;group-&lt;group-address&gt;&quot;.</t>

      <t>For example, say there exists a G-EID of 224.1.1.1 and a
      provider G-RLOC of 225.1.1.1.  When a receiver joins G-EID
      224.1.1.1, the receiving ETR lookups up EID
      &quot;group-224.1.1.1&quot; which returns an G-RLOC of
      225.1.1.1. The ETR uses 225.1.1.1 as the G-RLOC to register the
      (S-EID,G-EID) to the mapping system.</t>

      <t>Using this method, the provider can create 1-to-many,
      many-to-1, and many-to-many relationships between G-EID and
      G-RLOC. The provider could also have EID
      &quot;group-224.1.1.1&quot; map to a (S-RLOC,G-RLOC) so an SSM
      based distribution tree can be joined in the underlay, by either
      PIM or IGMP/MLD. This example illustrates how to do a many-to-1
      mapping by having multiple distinguish-name entries (encoded
      with different G-EID addresses) map to a single G-RLOC.</t>

      <t>In a many-to-many scenario, the ETR could be configured with
      a G-EID set of prefixes so a power-of-2 range of G-EIDs would be
      looked up that returns a single G-RLOC.  For example, say
      there exists 224.1.0.0/16 and 224.2.0.0/16 G-EID prefix ranges
      and G-RLOCs 225.1.1.1 and 225.2.2.2. The provider allows only 2
      underlay groups to be used but the overlay has large ranges of
      G-EIDs. So the provider registers to the mapping system
      &quot;group-224.1.0.0-16&quot; with G-RLOC 225.1.1.1 and
      &quot;group-224.2.0.0-16&quot; with G-RLOC 225.2.2.2. When an
      ETR receives an IGMP report for 224.1.1.1, it registers G-EID
      224.1.1.1 with G-RLOC 225.1.1.1. It can even scale better, by
      registering G-EID 224.1.0.0/16 with G-RLOC 225.1.1.1 so
      subsequent IGMP reports in the 224.1.0.0/16 range would not need
      to be registered. But this does come at expense of receiving
      multicast packets for a G-EID when there are no receivers.</t>

      <t>When using multicast and G-EID prefixes, there is a tradeoff
      between state in the underlay and using unnecessary
      bandwidth.</t>
    </section>

    <section title="Receiver Site Procedures">
      <t>The Receiver Site Procedures from <xref target="I-D.farinacci-lisp-rfc8378bis"/>
      are followed. This draft adds an additional step to the
      procedure on how to select the G-RLOC address for registration.</t>

      <t>From the two approaches to obtain a G-RLOC address discussed in the previous sections,
      the ETR can start and complete the (S-EID,G-EID) registration process:</t>

	  <t><list style="numbers">
		<t>When ETR receives either an IGMP or MLD report, be it (S,G)
		or (*,G), the entry is used as the multicast EID to
		Map-Register to the mapping system. Just like <xref
		target="I-D.farinacci-lisp-rfc6831bis"/> and <xref
		target="I-D.farinacci-lisp-rfc8378bis"/> specify.</t>
        
        <t>If the ETR is connected to a native multicast underlay, it
        will register (S-EID,G-EID) or (*,G-EID) with a G-RLOC based
        on one of G-RLOC selection options. All ETRs joining the same
        underlay group for a given overlay group MUST use the same
        G-RLOC selection option.  For early versions of this design,
        the network operator configures the option consistently in all
        ETRs. The ITRs do not need such configuration since they use
        what the mapping system returns.</t>

        <t>If the ETR is configured to know there are ITRs that are
        not on the same native multicast underlay, it MAY also
        register its U-RLOC. The ITR will determine which RLOC to use
        by the testing reachability via RLOC-probing according to
        <xref target="RFC9301"/>.</t>

        <t>Other ETRs registering the same (S-EID,G-EID) or (*,G-EID)
        entries, will choose the same underlay group G-RLOC so when
        the ITR replicates to G-RLOC, all ETRs receive the packet so
        they can deliver to multicast receivers.</t>

        <t>After the registration is performed by ETRs, they need to
        tell the underlay to deliver multicast packets to them for
        G-RLOC. They do that by either sending PIM-Join messages into
        the underlay PIM domain or they send IGMP/MLD reports. This is
        left to the implementation to decide.</t>
      </list></t>

      <t>If ETRs underlay join on more than one interface, they may
      receive duplicate packets. Care must be taken to not IGMP/MLD
      join on multiple interfaces or duplicates will occur. If PIM
      joining occurs on different interfaces, RPF failures will occur
      to stop the duplicates from being delivered to receivers but at
      the expense of using unnecessary underlay bandwidth.</t>

      <t>Packet duplicates can also occur when ETRs register both
      G-RLOC and their own U-RLOC addresses to the mapping
      system. ETRs cannot deregister one or the other when they see
      duplicates because different ITRs use the same mapping, so some
      will be on the multicast underlay and some will not. In the
      case, when they are on a multicast underlay, duplicates will
      occur across the RLOCs. The ETRs must monitor this and not
      answer RLOC probes sent to the U-RLOC so the ITR suppresses
      sending to it.</t>
    </section>

    <section title="Interworking with non-Overlay Receivers">
      <t>If there are multicast receivers that IGMP/MLD join a G-EID but are not attached
      to a native multicast underlay, they cannot receive multicast packets. They cannot
      receive multicast packets from overlay attached sources because the ITR has no
      ETR to encapsulate to. Hence, they are not on the overlay. However, if they are
      attached to a native multicast underlay, they can receive multicast packets.</t>

      <t>There are numerous multicast connectivity combinations which
      are documented in detail in <xref target="I-D.farinacci-lisp-rfc6831bis"/>. Those
      procedures should be followed to deliver multicast packets from
      overlay attached sources to underlay only attached receivers. As
      well as non-overlay attach sources to overlay attached
      receivers.</t>
    </section>

   <section title="IANA Considerations">
     <t>There are no requests for IANA.</t>
   </section>

   <section title="Security Considerations">
     <t>There are no security considerations at this time.</t>
   </section>
 </middle>

 <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119.xml" ?>
      <?rfc include="reference.RFC.9300.xml" ?>
      <?rfc include="reference.RFC.9301.xml" ?>
      <?rfc include="reference.RFC.8060.xml" ?>
      <?rfc include="reference.RFC.6234.xml" ?>
      <?rfc include='http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-lisp-name-encoding.xml'?>
      <?rfc include='http://xml.resource.org/public/rfc/bibxml3/reference.I-D.farinacci-lisp-rfc6831bis.xml'?>
      <?rfc include='http://xml.resource.org/public/rfc/bibxml3/reference.I-D.farinacci-lisp-rfc8378bis.xml'?>
    </references>

   <section title="Acknowledgements">
	 <t>The authors would like to thank the LISP WG for their careful review and commentary.</t>
   </section>

   <section title="Document Change Log">
     <section title="Changes to draft-ietf-lisp-group-mapping-03">
       <t><list style="symbols"> 
         <t>Submitted Dec 2025.</t>
         <t>Update document timer and acknowledegements since Stig is now a co-author</t>
       </list></t>
     </section>


     <section title="Changes to draft-ietf-lisp-group-mapping-02">
       <t><list style="symbols"> 
         <t>Submitted May 2025.</t>
         <t>Update document timer and references.</t>
       </list></t>
     </section>

     <section title="Changes to draft-ietf-lisp-group-mapping-01">
       <t><list style="symbols"> 
         <t>Submitted November 2024.</t>
         <t>Fixed typos found by Raphael Lienard's.</t>
       </list></t>
     </section>

     <section title="Changes to draft-ietf-lisp-group-mapping-00">
       <t><list style="symbols"> 
         <t>Submitted September 2024.</t>
         <t>Renamed draft-vda-lisp-group-mapping to
         draft-ietf-lisp-group-mapping now that the draft has been
         accepted as a working group document.</t>
       </list></t>
     </section>

     <section title="Changes to draft-vda-lisp-group-mapping-03">
       <t><list style="symbols"> 
         <t>Submitted May 2024.</t>
         <t>Added references to 6831bis and 8378bis as we put those RFCs to draft standards
         track.</t>
       </list></t>
     </section>

     <section title="Changes to draft-vda-lisp-group-mapping-02">
       <t><list style="symbols"> 
         <t>Submitted April 2024.</t>
         <t>Update document timer and references.</t>
       </list></t>
     </section>

     <section title="Changes to draft-vda-lisp-group-mapping-01">
       <t><list style="symbols"> 
         <t>Submitted October 2023.</t>
         <t>Update document timer and references.</t>
       </list></t>
     </section>

     <section title="Changes to draft-vda-lisp-group-mapping-00">
       <t><list style="symbols"> 
         <t>Submitted April 2023.</t>
         <t>Completed adding details to compliment <xref
         target="I-D.farinacci-lisp-rfc6831bis"/> and <xref
         target="I-D.farinacci-lisp-rfc8378bis"/>.</t>
	     <t>Changed name to draft-vdas-lisp-group-mapping-00 from
	     draft-vda-lisp-underlay-multicast-trees-00.</t>
       </list></t>
     </section>

     <section title="Changes to draft-vda-lisp-underlay-multicast-trees-00">
       <t><list style="symbols"> 
         <t>Initial posting December 2020.</t>
	   </list></t>
     </section>
   </section>

 </back>

</rfc>
