<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
    which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
    There has to be one entity for each item to be referenced. 
    An alternate method (rfc include) is described in the references. -->

<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC5340 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5340.xml">
<!ENTITY RFC7938 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7938.xml">
<!ENTITY Segment SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-spring-segment-routing-15.xml">
<!ENTITY Flooding SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.li-dynamic-flooding.xml">
]>
<?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. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
    (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
    (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="info" docName="draft-li-area-abstraction-00" ipr="trust200902">
<!-- 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="Area Abstraction">
     Level 1 Area Abstraction for IS-IS
   </title>

   <!-- add 'role="editor"' below for the editors if appropriate -->

   <!-- Another author who claims to be an editor -->

   <author fullname="Tony Li" initials="T." 
           surname="Li">
     <organization>Arista Networks</organization>

     <address>
       <postal>
         <street>5453 Great America Parkway</street>

         <!-- Reorder these if your country does things differently -->

         <city>Santa Clara</city>

         <region>California</region>

         <code>95054</code>

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

       <phone></phone>

       <email>tony.li@tony.li</email>

       <!-- uri and facsimile elements may also be added -->
     </address>
   </author>

   <date year="2018" />

   <!-- 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>datacenter IGP routing dense graph topology level
   abstraction IS-IS</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>
       Link state routing protocols have hierarchical abstraction
       already built into them. However, when lower levels are used
       for transit, they must expose their internal topologies,
       leading to scale issues.
     </t>
     <t>
       To avoid this, this document discusses extensions to the IS-IS routing
       protocol that would allow level 1 areas to provide transit, yet
       only inject an abstraction of the topology into level 2.
     </t>
   </abstract>
 </front>

 <middle>
   <section title="Introduction">
     <t>
       The IS-IS routing protocol <xref target="ISO10589">IS-IS</xref>
       currently supports a two level hierarchy of abstraction. The
       fundamental unit of abstraction is the 'area', which is a
       (hopefully) connected set of systems running IS-IS at the same
       level. Level 1, the lowest level, is abstracted by routers that
       participate in both Level 1 and Level 2, and they inject area
       information into Level 2.  Level 2 systems seeking to access
       Level 1, use this abstraction to compute the shortest path to
       the Level 1 area. The full topology database of Level 1 is not
       injected into Level 2, only a summary of the address space
       contained within the area, so the scalability of the Level 2
       link state database is protected.
     </t>
     <t>
       This works well if the Level 1 area is tangential to the Level
       2 area. This also works well if there are a number of routers
       in both Level 1 and Level 2 and they are adjacent, so Level 2
       traffic will never need to transit Level 1 only routers.  Level
       1 will not contain any Level 2 topology, and Level 2 will only
       contain area abstractions for Level 1.
     </t>
     <t>
       Unfortunately, this scheme does not work so well if the Level 1
       area needs to provide transit for Level 2 traffic. For Level 2
       shortest path first (SPF) computations to work correctly, the
       transit topology must also appear in the Level 2 link state
       database.  This implies that all routers that could possibly
       provide transit, plus any links that might also provide Level 2
       transit must also become part of the Level 2 topology. If this
       is a relatively tiny portion of the Level 1 area, this is not
       onerous.
     </t>
     <t>
       However, with today's data center topologies, this is
       problematic. A common application is to use a Layer 3
       Leaf-Spine (L3LS) topology, which is a folded 3-stage <xref
       target="Clos">Clos</xref> fabric. It can also be thought of as
       a complete bipartite graph.  In such a topology, the desire is
       to use Level 1 to contain the routing of the entire L3LS
       topology and then to use Level 2 for the remainder of the
       network. Leaves in the L3LS topology are appropriate for
       connection outside of the data center itself, so they would
       provide connectivity for Level 2. If there are multiple
       connections to Level 2 for redundancy, or to other areas, these
       too would also be made to the leaves in the topology. This
       creates a difficulty because there are now multiple Level 2
       leaves in the topology, with connectivity between the leaves
       provide by the spines.
     </t>
     <t>
       Following the rules of IS-IS, all spine routers would
       necessarily be part of the Level 2 topology, plus all links
       between a Level 2 leaf and the spines.  In the limit, where all
       leaves need to support Level 2, it implies that the entire L3LS
       topology becomes part of Level 2. This is seriously problematic
       as it more than doubles the link state database held in the
       L3LS topology and eliminates any benefits of the hierarchy.
     </t>
     <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">RFC 2119</xref>.</t>
     </section>
   </section>

   <section title="Area Abstraction">
     <t>
       We propose to completely abstract away the Level 2 topology of
       the Level 1 area, making the entire area look like a single
       system directly connected to all of the area's Level 2
       neighbors.  By only providing an abstraction of the topology,
       Level 2's requirement for connectivity can be satisfied without
       the full overhead of the area's internal topology. It then
       becomes the responsibility of the Level 1 area to ensure the
       forwarding connectivity that's advertised.
     </t>
     <t>
       We propose to implement Area Abstraction by having a Level 2
       pseudonode that represents the entire Level 1 area.  This is
       the only LSP from the area that will be injected into the
       overall Level 2 link state database.
     </t>
     <t>
       There are three classes of routers that we need to be concerned
       with in this discussion:
       <list style="hanging">
	 <t hangText="Area Leader">
	   The Area Leader is a router in the Level 1 area that is
	   elected to represent the Level 1 area by injecting an LSP
	   into the Level 2 link state database.
	 </t>
	 <t hangText="Area Edge Router">
	   An Area Edge Router is a router that is part of the Level 1
	   area and has at least one Level 2 interface outside of the
	   Area.
	 </t>
	 <t hangText="Area Neighbor">
	   An Area Neighbor is a Level 2 router that is outside of the
	   Level 1 Area.
	 </t>
       </list>
     </t>
     <t>
       The Area Leader has several responsibilities.  First, it must
       inject a pseudonode identifier into the Level 1 link state
       database. This is the Area Pseudonode Identifier. Second, the
       Area Leader must generate the pseudonode LSP for the Area.
     </t>
     <t>
       All Area Edge Routers learn the Area Pseudonode Identifier from
       the Level 1 link state database and use that as the identifier
       in their Level 2 IS-IS Hello PDUs on interfaces outside the
       Level 1 area. The Area Edge Routers MUST also maintain an
       Level 2 adjacency with the Area Leader, either via a direct
       link or via a tunnel.
     </t>
     <t>
       Area Edge Routers MUST be able to provide transit to Level 2
       traffic. We propose that the Area Edge Routers use
       <xref target="I-D.ietf-spring-segment-routing">Segment Routing
       (SR)</xref> and, during Level 2 SPF computation, use the SR
       forwarding path to reach the exit Area Edge Routers.
     </t>
     <section title="Area Leader Election">
       <t>
	 The Area Leader is selected using the election mechanisms
	 described in <xref target="I-D.li-dynamic-flooding">Dynamic
	 Flooding for IS-IS</xref>.
       </t>
     </section>
     <section title="LSP Generation">
       <t>
	 Area Edge Routers generate a Level 2 LSP that includes
	 adjacencies to any Area Neighbors and the Area Leader.  This
	 LSP is not advertised outside of the area.
       </t>
       <t>
	 The Area Leader uses the Level 2 LSPs generated by the Area
	 Edge Routers to generate the Area Pseudonode LSP.  This LSP
	 is originated using the Area Pseudonode Identifier and
	 includes adjacencies for all of the Area Neighbors that have
	 been advertised by the Area Edge Routers. The Area Pseudonode
	 LSP is the only LSP that is injected into the overall Level 2
	 link state database, with all other Level 2 LSPs from the
	 area being filtered out at the area boundary.
       </t>
     </section>
     <section title="Redundancy">
       <t>
	 If the Area Leader fails, another candidate may become Area
	 Leader and MUST regenerate the Area Pseudonode LSP.  The
	 failure of the Area Leader is not visible outside of the area
	 and appears to simply be an update of the Area Pseudonode
	 LSP.
       </t>
     </section>
   </section>

   <section title="Area Pseudonode TLV">
     <t>
       The Area Pseudonode TLV allows the Area Leader to advertise the
       existence of an Area Pseudonode Identifier.  This TLV is
       injected into one of the Area Leader's Level 1 LSPs.
     </t>
     <t>
       The format of the Area Pseudonode TLV is:
     </t>
     <figure align="left">
       <artwork align="left"><![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 
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | TLV Type      | TLV Length    | Pseudonode ID |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Pseudonode ID continued ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
     </figure>
     <t>
       <list>
	 <t>
	   TLV Type: XXX
	 </t>
	 <t>
	   TLV Length: 2 + (length of a system ID + 1)
	 </t>
	 <t>
	   Pseudonode ID: A pseudonode ID, which is the length of a
	   system ID plus one octet. 
	   field.
	 </t>
       </list>
     </t>
   </section>

   <section anchor="Acknowledgements" title="Acknowledgements">
     <t>
       To be written.
     </t>

   </section>

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

   <section anchor="IANA" title="IANA Considerations">
     <t>
       This memo requests that IANA allocate and assign one code
       point from the IS-IS TLV Codepoints registry for the Area
       Pseudonode TLV.
     </t>
   </section>

   <section anchor="Security" title="Security Considerations">
     <t>
       This document introduces no new security issues. Security of routing within
       a domain is already addressed as part of the routing protocols
       themselves. This document proposes no changes to those security
       architectures.
     </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">

     &Segment;

     &Flooding;

     <reference anchor="ISO10589">
       <front>
	 <title>
	   Intermediate System to Intermediate System
	   Intra-Domain Routing Exchange Protocol for use in Conjunction
	   with the Protocol for Providing the Connectionless-mode Network
	   Service (ISO 8473)
	 </title>
	 <author>
	   <organization abbrev="ISO">
	     International Organization for Standardization
	   </organization>
	 </author>
	 <date year="2002" month="Nov."/>
       </front>
       <seriesInfo name="ISO/IEC" value="10589:2002"/>
     </reference>

     <!--?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"?-->
     &RFC2119;

   </references>
   <references title="Informative References">

     <reference anchor="Clos" target="http://dx.doi.org/10.1002/j.1538-7305.1953.tb01433.x">
       <front>
         <title>A Study of Non-Blocking Switching Networks</title>

         <author fullname="Charles Clos" initials="C." surname="Clos">
         </author>
	 <date month="March" year="1953"/>
       </front>
       <seriesInfo name="The Bell System Technical Journal" value="Vol. 32(2), DOI 10.1002/j.1538-7305.1953.tb01433.x"/>
     </reference>

   </references>
</back>
</rfc>
