<?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. -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?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="exp"
      docName="draft-vda-lisp-underlay-multicast-trees-00"
      ipr="trust200902"
      obsoletes=""
      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="Enhanced Signal-Free LISP"> Enhancements to Signal-Free Locator/ID Separation Protocol (LISP) Multicast
   </title>
   <seriesInfo name="Internet-Draft" value="draft-vda-lisp-underlay-multicast-trees-00.xml"/>
    <!-- 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" 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>





    <date year="2023"/>
    <!-- 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 draft augments the signal-free LISP Multicast RFC 8378 and RFC6831 to support multicast underlays between LISP sites. This draft defines the 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 functionality.</t>
    </abstract>
  </front>
  <middle>
    <section numbered="true" toc="default">
      <name>Introduction</name>
      <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>
      <ol type="%d.">
		 <li> A 1:1 mapping of a overlay multicast flow, either a (Source, Group) or (*, Group) to an underlay group. </li>
		 <li> A many:1 mapping where many overlay multicast flows share the same underlay group.</li>
		 <li> 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 unciast addresses. It is really important that this algorithm compute unicast RLOCs as well as multicast RLOCs. </li>
		 <li>A special (actually realistic) case is the combination of 2 and 3 where m:n mapping is achieved. Typically we expect m>>n.
	 </li>
        </ol>
	 <t>
		 There are two methods proposed to derive such mappings described above:
	 </t>
		 <ul>
			 <li>Computation based underlay group assignment using hash functions: Here all ETRs will use the same multicast underlay group, when they are all on the same underlay e.g we hash (S-EID, G) Multicast EID, and append either 24 bits in terms of IPv4 or 120 bits in terms of IPv6. If we have disjoint native multicast underlays, we may have to discuss more complicated schemes e.g. different address ranges for IPv4 v/s IPv6 or different ranges inside either of these as well. Since this is a very simple and powerful method, we want to include this design in the current draft. </li>
		  
			 <li>Lookup based group assignment:  The LISP signal free mechanism can be extended to have the co-ordinated assignment of underlay group(s) for a given overlay multicast flow. To implement this, we need a signaling mechanism that is independent of any mutlicast routing protocol that runs in the LISP underlay (e.g PIM)</li>
    </ul>
    <t> The scope of this draft covers underlays based on IPv4 and IPv6 only. It does not cover other transport mechanisms like BIER or MPLS or Layer-2 underlays.</t>
	   <t>Note: All terminology used in this document are based on the definitions of <xref target="RFC8378" format="default">RFC8378</xref>.</t>

      <section numbered="true" toc="default">
        <name>Requirements Language</name>
        <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" format="default">RFC 2119</xref>.</t>
      </section>
    </section>


    <section numbered="true" toc="default">
	    <name>Definition of Terms </name>
	    <ol type="%d.">
		    <li>(S-EID,G) State: 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. </li>

		    <li>(S-RLOC,G) State: refers to multicast state in the core where S is
    a source locator (the IP address of a multicast ITR) of a site
    with a multicast source. The (S-RLOC,G) is mapped from the
    (S-EID,G) entry by doing a mapping database lookup for the EID-
    Prefix that S-EID maps to. An S-RLOC can appear in a PIM Join/
    Prune message when it travels from an ETR to an ITR over the
    Internet core.
	    </li>
	    </ol>
    </section>
    <section title="Additions to General Procedures">
		    <t>A set of receivers spread across multiple LISP sites having interest on a given (S-EID, G-EID) can be generically represented by the mapping below:  </t>
		    <ul spacing="compact">
			    <li> (S-EID,G-EID) -> RLE [(S-RLOC1, G-RLOCa), (S-RLOC1, G-RLOCb), (S-RLOC1, U-RLOCc), (S-RLOC2, U-RLOCd)] </li>
		    </ul>
	    <t> The following additions are made to the General Procedures defined in <xref target="RFC8378" format="default">RFC 8378</xref>:</t>

	    <section title="Receiver site procedures">
		    <t> The receiver site procedures require the following extensions to that outlined in <xref target="RFC8378" format="default">RFC 8378</xref>: </t>
		    <t> The Map-Register messages <xref target="RFC8060" format="default">RFC 8060</xref>  sent by the Receiver-ETRs MUST have the following fields set as specified here:</t>
		    <ol type="%d.">
			    <li> The RLOC in the Map-Register message MUST be encoded using the RLE LCAF Type defined in <xref target="RFC8060" format="default">RFC 8060 </xref>. The address encoded indicates that the RLOC is requesting the flow to be mapped to an underlay multicast group.</li>
			    <li><t>want-map-notify bit (M) set to 1.  Unlike the use-case of the unicast underlay, the Receiver-ETR MUST be map-notified about the initial assignment of the underlay multicast group(s) and subsequent changes if any to the replication list. </t>
			    <ul spacing="compact">
				    <li> Comment from Dino: 
 We need the mapping system to tell ITRs when the RLE-set changes so it can updaate its map-cache. This was part of the LISP architecture before we had PubSub, but PubSub uses the same technique. It is just implicit for multicast where with PubSub you send subscribe-requests. So all you have to specifiy is that each ETR that registers mappings sets the M-bit, but now that I am writing this the M-bit is used to acknowledge the Map-Register. So you don't need to set it for updates to mapping entries, because when you register an (S,G) EID encoding, the map-server knows to send RLOC/RLE changes. It knows where to send them because the S-EID is registered in the mapping system, so it knows the RLOCs for that site.
 
But the Merge-bit is crucial or else, from above example, RLOCc and RLOCd could not both be added to the RLE set. So the map-server knows to merge in U-RLOCc from RLOCc and U-RLOCd from RLOCd when they come separately from the ETRs. Ditto, for the entity that regsisters G-RLOCa and G-RLOCb (could be ETRs or could be a controller somewhere).
		            </li>
			    </ul>
			    </li>
		          <li> The consolidated replication list of underlay group(s) assigned to transport the overlay (S-EID, G) is constructed as a RLE by the mapping system and sent as Map-notification to the ETR.</li>
			  <li> After the above step, the mapping system sends a Map-notify message containing a list of underlay group addresses encoded as RLE LCAF <xref target="RFC8060" format="default">RFC 8060</xref> elements. </li> 
			  <li> The ETR can then join these underlay group addresses to receive the traffic for the multicast entry EIDs.</li>
	            </ol>
		    <t> Another method of explaining the sequence is as below: </t>
		    <ol type="%d.">
			    <li> The ETR receives an IGMPv3 (S,G) report. That should be spec'ed as (S-EID, G-EID). </li>
			    <li> The ETR will hash that 2-tuple to get a G-RLOC. </li>
			    <li> The ETR sends a Map-Register for (S-EID,G-EID) with G-RLOC. </li>
			    <li> Other ETRs will do the same so only when the last member leaves the G-EID, then there will be no (S-EID,G-EID) registered. </li>
			    <li> If one ETR (call it x) doesnt think it can get packets natively via G-RLOC, then it will register (U-RLOCx). That is, its IP address that can get it multicast packes on the unicast underlay.</li>
                  </ol>
		  <t> TODO: Merge the above two sequences later </t>
	    </section>
	    <section title="Consolidation of the Replication list">
	    <ol type="%d.">
		    <li> After the mapping system merges all Receiver-ETR or delivery-group RLOCs to build the comprehensive replication list, it allocates one or more underlay group addresses to enable underlay multicast transport for the overlay flow. The allocated group(s) are then notified to both ITR and ETR using the procedures listed in the respective sections.</li>
		    <li> The mapping system MUST NOT merge any duplicate RLOC requests for the unicast and multicast level value fields.</li>
		    <li> <t>With a mixed RLE-set, a generic representation of the mapping is of the form below:  </t>
		    <ul spacing="compact">
			    <li>
 (S-EID,G-EID) ->
   RLE [(S-RLOC1, G-RLOCa), (S-RLOC1, G-RLOCb), (S-RLOC1, U-RLOCc), 
					    (S-RLOC2, U-RLOCd)] </li>
		    </ul>
	    </li>
 
		    <li>The above notation is really important because for each replication that is encapsulated, the packet could go out a different interface which means the source address in the outer header is different (e.g. this ITR has RLOC1 and RLOC2 on each interface). There may be different pockets of native multicast connectivity in the underlay, so we may have to replicate to different (G-RLOCi) and hence the notation above of G-RLOCa and G-RLOCb. The unicast RLOCs are included above because RLOCc and RLOCd do not have native multicast connectivity to them so they need the use the unicast underlay.  </li>
 

	    </ol>
	    </section>
	    <section title="Source-site Procedures">
		    <section title="Multicast Tree-building at source site procedures">
			    <t> The following points are added: </t>
			    <ol type="%d.">
				    <li>The source site must include both underlay multicast groups allocated for  and unicast RLOCs in the format TBD.</li>

				    <li>When an ITR receives a packet with header addresses (S-EID, G-EID), it does an (S-EID, G-EID) lookup in the mapping sytstem by sending a Map-Request.</li>

				    <li>When a Map-Reply is returned, there will be 1 RLOC-record in the RLOC-set. The RLOC-record is encoded as an RLE LCAF per <xref target="RFC8060" format="default">RFC 8060</xref>.</li>

				    <li>The ITR will replicate a packet for each entry in the RLE-set and encapsulate the replicated packet to each G-RLOC and U-RLOC in the RLOC-set.</li>

			    </ol>
	            </section>
	    </section>

	    <section title="Combinations for the RLE-set">
		    <t>Placeholder text from Dino: We need a section that just focuses on all the combination of the RLE-set. And we have to recommend how to setup the RLE-set in an ETR when it doesn't know how any ITR will get multicast packets to it (via G-RLOC or U-RLOC).</t>
    </section>
            <section title="Sequence diagram">
		    <t>
			    TBD
		    </t>
	    </section>
    </section>

   <!-- Possibly a 'Contributors' section ... -->

   <section anchor="Acknowledgements" numbered="true" toc="default">
      <name>Acknowledgements</name>
	   <t> TBD
	   </t>
   </section>

   <section anchor="Contributors" numbered="true" toc="default">
      <name>Contributors</name>
   <author fullname="Stig Venaas" initials="S" surname="Venaas">
      <organization>Cisco</organization>
      <address>
        <email>svenaas@cisco.com</email>
     </address>
    </author>
    </section>


   <section anchor="IANA" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>No new requests to IANA </t>
    </section>
    <section anchor="Security" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t> TBD
     </t>

    </section>
  </middle>
  <!--  *****BACK MATTER ***** -->

 <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">
      <?rfc include="reference.RFC.2119.xml" ?>
      <?rfc include="reference.RFC.6831.xml" ?>
      <?rfc include="reference.RFC.8059.xml" ?>
      <?rfc include="reference.RFC.8060.xml" ?>
      <?rfc include="reference.RFC.8378.xml" ?>
    </references>
    <!-- Change Log

v00 2020-12-10  GVP   Initial version

    -->
 </back>
</rfc>

