<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<!-- 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' ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-ietf-lsr-distoptflood-06" ipr="trust200902" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="3" symRefs="true" sortRefs="true" version="3">
  <!-- ***** FRONT MATTER ***** -->

    <front>
    <title>IS-IS Distributed Flooding Reduction</title>
    <author initials="R." surname="White" fullname="Russ White">
      <organization>Akamai</organization>
      <address>
        <email>russ@riw.us</email>
      </address>
    </author>
    <author initials="S." surname="Hegde" fullname="Shraddha Hegde">
      <organization>Juniper Networks</organization>
      <address>
        <email>shraddha@juniper.net</email>
      </address>
    </author>
    <author initials="T." surname="Przygienda" fullname="Tony Przygienda">
      <organization>Juniper Networks</organization>
      <address>
        <email>prz@juniper.net</email>
      </address>
    </author>
    <author initials="L." surname="Jalil" fullname="Luay Jalil">
      <organization>Verizon</organization>
      <address>
        <email>luay.jalil@verizon.com</email>
      </address>
    </author>
    <author initials="D." surname="Voyer" fullname="Daniel Voyer">
      <organization>Bell Canada</organization>
      <address>
        <email>daniel.voyer@bell.ca</email>
      </address>
    </author>
    <date/>
    <abstract>
      <t>In dense topologies (such as data center fabrics based on the Clos and butterfly though not
                limited to
                those; in fact any topology with relatively high degree of connectivity qualifies here)
                IGP flooding mechanisms designed originally
                for rather sparse topologies can "overflood", or in other words
                generate too many identical copies of same information
                arriving at a given node from other devices. This normally results in slower
                convergence times and higher resource utilization to process and discard the superfluous copies.
                Distributed algorithms that restrict the amount of flooding performed can be constructed, as long as they
                result in a flooding subgraph connecting all nodes on the network in terms of flooding still.
                Such algorithms can reduce resource utilization significantly, while improving convergence
                performance.

                We denote such algorithm as "distributed flooding prunners" (or "prunner" for short) while requiring
                them to follow
                some simple, additional rules.

                The rules presented in detail later allow to deploy mix of nodes any prunning algorithm and multiple prunners
                at the same time
                if necessary while ensuring correct flood coverage for the whole network. Additionally,
                node by node migration, without flag day, from one algorithm to another if necessary is possible. And assuming the algorithms
                are behaving correctly, the blast radius on algorithm change
                is normally contained to a single node performing the switch
                and obviously the convergence of an algorithm on introduction or removal of node running such algorithm.
      </t>
      <t>
                One such algorithm (modification of previous art), deployable even without configuration, is described in this document.
                Beside reducing the extraneous copies, the proposed solution does "load-balance"
                flooding across different possible paths in the network to prevent build up of flooding hot-spots.
      </t>
    </abstract>
  </front>
  <middle>
    <section title="Flooding Prunner Framework">
      <section title="Definitions and Axioms">
        <t>Following section will outline a framework of definitions and axioms to allow mixing
                different flood reduction algorithms within a network safely. </t>
        <t>As first important observation upfront, it will become clear later in this section that full, non-optimized
                    flooding contains a special case of a
                prunner itself being an operation including all adjacencies and hence we name it the "zero-prunner"
                or "zero" for short.
        </t>
        <section title="Maximum of One Flooding Prunner on a Node">
          <t>This framework
                    allows maximum of a single prunner on each node (which was implied by the previous
                    paragraph silently) while it allows changing
                    a specific prunner at any time on any subset of nodes in the network while limiting the impact
                    to the node and the convergence of nodes in its component.</t>
        </section>
        <section title="Component">
          <t>
                    A component is defined as subset of nodes
                    running a prunner A where each of the nodes is connected to all others by a path
                    traversing adjacencies with A on both sides. Another way to think about this is that by removing
                    all adjacencies with different prunners on both sides of the adjacency creates several
                    non-connected
                    components (partitions), each running a
                    different prunner. Observe that there may be in the network very well multiple components which
                    are not connected but run the same prunner. We denote a component for prunner A as A| and if
                    two disjoint components running A are present in the network as A|' and A|''.
          </t>
          <t>
                        Observe that zero-prunner also builds components denoted as Z| and its primes.
          </t>
        </section>
        <section title="Flooding Connected Dominating Sets">
          <t>
                    A flooding prunner may choose within its component a subset of links to flood on so that the component
                    remains connected. In other words, there must be a path over such links connecting each node
                    in the component of the prunner. We call this a flooding connected dominating set (of which e.g. a simple spanning
                    tree is a special case) or CDS for short, and denote it for a component A| as A|*. Observe that A|* can be different for
                    different information flooded, e.g. LSPs originated by different systems. In simple words again,
                    the algorithm must choose a set of links that guarantee at minimum that flooding reaches all the
                    nodes in the component.
          </t>
        </section>
        <section title="Flooding Prunner" anchor="rules">
          <ol spacing="normal">
                    <li>
                        Each node of a flooding prunner, except zero-prunner, MUST advertise in its node information the
                        prunner currently operating on the node. If a node does not advertise this
                        information, it MUST be a zero-prunner except when <xref target="dynamic-flooding"/> exception
                        applies.
                    </li>
            <li>
                    A flooding prunner is an algorithm A building a CDS denoted as A|* over its component
                    that MUST additionally include in flooding CDS all adjacencies to adjacent components
                    running non zero-prunner algorithm different from A. A node running algorithm A different
                    from zero-prunner SHOULD include in
                    its flooding CDS all links to zero-prunners but MAY use the known behavior of zero-prunner for
                    further optimizations (though the optimization MUST NOT assume that there is
                    just a single Z| in the network). This is sufficient (but strictly
                    speaking, more than necessary) to
                    guarantee that the overall set of flooding CDS within each component creates
                    an overall flooding CDS over the whole network or in other words, the resulting set of links
                    that still flood connects all nodes in the network.

                </li>
            <li anchor="dynamic-flooding">
                        In case <em>dynamic-flooding</em> is deployed in the same network, any node
                        advertising the dynamic flooding sub-TLV MUST be treated like a node advertising
                        a prunner with an unknown active algorithm and hence perform full flooding
                            on adjacencies to it. A prunner node MUST NOT advertise any <em>dynamic flooding </em>
                        information and disregard all such information except dynamic flooding sub-TLVs.
                    </li>
          </ol>
        </section>
      </section>
      <section title="Desirable Properties of the Flooding Prunner Framework">
        <t>
                    Nodes within a component are free to use any kind of prunner algorithm to calculate optimized
                    flooding. Any mode of computation, distributed or centralized will work fine as long as
                    <xref target="rules"/> is respected.
        </t>
        <t>
                    The framework is completely distributed without the need for any centralized instance or election.
                    Computation and communication within each component is completely independent of other
                    components.
        </t>
        <t>
                    Except determining which prunner is run on a node no configuration is necessary if the prunner
                    algorithm itself does not need configuration, i.e. is completely distributed.
        </t>
        <t>A node is free to choose a different prunner or zero-prunner at any point in time independent
                   of all other nodes. It may end up in another component or become a zero-prunner and the maximum
                   impact is re-computation within two components that see such node leave or join but more likely,
                   only adjoining nodes have to adjust their prunning decisions.
                   In simple words, the framework allows for a node by node deployment or even migration of prunners
                   without network wide re-computation of optimized flooding.
                   This is obviously critical to stability of large networks
                   that may not even converge within reasonable time anymore if the whole network reverts back to
                   zero-prunning due to network wide impact based on election, misconfiguration of a single
                   node or deployment of a single node that affects the flooding optimization of the complete network.
        </t>
        <t> Though the network provides extreme flexibility in deployment of prunners operationally
                    the most likely scenario is a node-by-node deployment of a single prunner algorithm in the
                    network in addition to zero-prunner
                    and in case of necessity the node-by-node migration to another new prunner.
        </t>
      </section>
      <section title="Example">
        <figure anchor="example1">
          <name>Network of Mixed Prunners</name>
          <artset>
            <artwork align="center" name="" type="svg" originalSrc="example.svg.post"><svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="119.70596mm" height="86.222839mm" viewBox="0 0 119.70596 86.222839" version="1.1" id="svg5">
                <defs id="defs2">
    </defs>
                <g id="layer1" transform="translate(-7.1479243,-5.3220751)">
                  <ellipse id="path111" cx="18.146786" cy="20.171129" rx="3.1088121" ry="2.8196204" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <ellipse id="path111-3" cx="37.45034" cy="13.736612" rx="3.1088121" ry="2.8196204" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <ellipse id="path111-3-2" cx="72.876335" cy="71.864174" rx="3.1088121" ry="2.8196204" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <ellipse id="path111-3-9" cx="93.553551" cy="58.995136" rx="3.1088121" ry="2.8196204" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <ellipse id="path111-3-1" cx="53.0667" cy="82.41967" rx="3.1088121" ry="2.8196204" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <ellipse id="path111-6" cx="51.909931" cy="25.448881" rx="3.1088121" ry="2.8196204" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <ellipse id="path111-7" cx="33.690849" cy="34.84761" rx="3.1088121" ry="2.8196204" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <rect id="rect227" width="5.7838364" height="5.4946446" x="76.635834" y="16.194742" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <rect id="rect229" width="6.2176242" height="5.9284325" x="87.046738" y="35.425995" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <rect id="rect231" width="7.0851998" height="6.9406037" x="102.2293" y="19.231256" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <path id="path285" d="m 42.944985,72.587144 -3.252018,1.294782 -2.747322,-2.168939 0.504695,-3.463721 3.252017,-1.294781 2.747323,2.168939 z" transform="translate(-10.844693,-18.652872)" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <path id="path285-5" d="m 17.929893,87.335923 -3.252017,1.294782 -2.747323,-2.168939 0.504695,-3.46372 3.252017,-1.294782 2.747323,2.168939 z" transform="translate(4.1932817,-15.471759)" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <path id="path285-3" d="m 44.390942,70.707399 -3.252017,1.294781 -2.747323,-2.168939 0.504695,-3.46372 3.252017,-1.294782 2.747323,2.168939 z" transform="translate(1.5905557,-3.7594905)" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <path id="path285-56" d="m 29.786757,56.536996 -3.252017,1.294782 -2.747323,-2.168939 0.504695,-3.463721 3.252017,-1.294781 2.747323,2.168939 z" transform="translate(32.389485,-10.84469)" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <path id="path285-56-2" d="m 81.552094,57.693765 -3.252017,1.294781 -2.747323,-2.168938 0.504695,-3.463721 3.252017,-1.294781 2.747323,2.168938 z" transform="translate(35.281403,-10.121709)" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <path d="M 20.30039,22.204531 31.537245,32.814209" id="path588" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 36.393104,33.453591 12.814573,-6.61069" id="path590" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 39.769025,15.614747 9.822221,7.955999" id="path592" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 21.064723,19.198484 13.46768,-4.489226" id="path594" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 54.918834,24.739977 21.717,-5.11657" id="path596" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 93.09368,56.206555 90.644385,41.354427" id="path598" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 81.029077,21.689387 7.506622,13.736608" id="path600" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 82.41967,19.356334 19.80963,2.837744" id="path602" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 102.31759,26.17186 -9.211485,9.254135" id="path604" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 93.264362,39.301253 17.883908,5.240906" id="path606" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 96.064613,57.332884 111.42527,47.164564" id="path608" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 90.990219,60.590496 75.439666,70.268814" id="path610" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 55.747114,80.991421 70.195921,73.292423" id="path612" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 71.647432,69.274226 60.731074,46.267695" id="path614" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 40.791332,62.488803 31.795812,54.0555" id="path618" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 22.534032,69.04445 40.075995,65.429745" id="path620" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 20.86901,67.01187 27.859812,54.448689" id="path622" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 61.348012,41.176276 15.9334,-19.486889" id="path643" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 30.176551,48.553366 32.986674,37.593895" id="path645" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 44.722489,67.449179 6.941664,12.454158" id="path647" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 19.086661,8.5311575 c -2.777356,0.2959778 -5.450634,1.4991745 -7.513844,3.3818535 -2.063209,1.882678 -3.5054823,4.434921 -4.0538303,7.173648 -0.5191494,2.592895 -0.2153666,5.402848 1.1517586,7.666382 0.6835626,1.131767 1.6245607,2.113038 2.7509837,2.805371 1.126424,0.692333 2.438676,1.090404 3.760842,1.09592 0.192807,8.04e-4 0.385687,-0.0066 0.578384,0 0.963255,0.03287 1.893252,0.418004 2.674963,0.981803 0.781711,0.563799 1.425061,1.300034 1.986025,2.083781 1.121928,1.567496 1.950333,3.358303 3.291786,4.742596 1.204271,1.242731 2.777953,2.097119 4.443195,2.56788 1.665243,0.47076 3.421066,0.569423 5.146092,0.431819 3.450051,-0.275209 6.747947,-1.470385 10.075758,-2.421315 2.569279,-0.734178 5.190453,-1.331211 7.648177,-2.379926 2.457724,-1.048715 4.784563,-2.604394 6.233029,-4.849869 0.938763,-1.455311 1.474485,-3.15766 1.609678,-4.884197 0.135193,-1.726536 -0.12433,-3.4755 -0.687203,-5.113297 C 57.056711,18.538012 54.751787,15.76494 52.054527,13.592015 47.501759,9.9242848 41.802173,7.8372245 36.004381,7.0851995 30.348427,6.3515722 24.536082,6.8483535 19.086661,8.5311575 Z" id="path769" fill="none" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 50.150304,47.082793 c 0.780267,2.309939 2.696883,4.12583 4.910439,5.147987 2.213557,1.022157 4.703508,1.316395 7.140842,1.252836 2.284886,-0.05958 4.600329,-0.434984 6.64221,-1.462101 2.041882,-1.027118 3.79215,-2.764161 4.496094,-4.938722 0.462043,-1.427303 0.45694,-2.991746 0.05096,-4.435995 -0.405984,-1.444249 -1.20422,-2.76754 -2.243496,-3.849475 -2.078551,-2.163869 -5.050646,-3.312369 -8.032788,-3.643332 -1.739159,-0.193015 -3.514174,-0.127866 -5.215896,0.27965 -1.701722,0.407516 -3.329056,1.162994 -4.684438,2.269731 -1.355382,1.106738 -2.431537,2.570339 -3.002217,4.2245 -0.570681,1.654162 -0.621692,3.497109 -0.06171,5.154921 z" id="path773" fill="none" stroke="#000000" stroke-width="0.298223px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 69.116845,12.146056 c -0.02272,3.163489 1.115904,6.21802 2.447634,9.087632 1.331731,2.869612 2.880752,5.661642 3.769989,8.697665 0.830911,2.836889 1.062849,5.810859 1.654363,8.707143 0.591514,2.896284 1.610295,5.826276 3.695687,7.921388 1.930271,1.939267 4.686207,2.997469 7.422134,2.959974 2.735927,-0.03749 5.424451,-1.144117 7.471245,-2.959974 1.920343,-1.703674 3.252887,-3.952701 4.657063,-6.101775 1.40417,-2.149073 2.97237,-4.292686 5.17546,-5.610496 1.59498,-0.95406 3.42645,-1.416317 5.21331,-1.9275 1.78687,-0.511183 3.60087,-1.105829 5.053,-2.265781 1.54111,-1.231027 2.57398,-3.056942 2.92557,-4.997775 0.3516,-1.940834 0.0363,-3.98238 -0.80087,-5.768314 -0.83719,-1.785935 -2.183,-3.316767 -3.79415,-4.45459 -1.61116,-1.137824 -3.48161,-1.888705 -5.41575,-2.275425 -2.96396,-0.592626 -6.02428,-0.340551 -9.034286,-0.06459 -3.010002,0.275964 -6.060507,0.572181 -9.040207,0.06459 C 87.426133,12.631689 84.518824,11.246739 81.985879,9.3987335 80.562973,8.3605989 79.237307,7.1685983 77.676233,6.3528576 76.895696,5.9449872 76.057348,5.6345954 75.185317,5.5114798 74.313286,5.3883641 73.40535,5.4580476 72.587146,5.7838365 71.395468,6.2583334 70.456597,7.2569079 69.895421,8.4103049 69.334245,9.5637019 69.126056,10.863419 69.116845,12.146056 Z" id="path777" fill="none" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 108.88072,38.607107 c -1.82131,0.874009 -3.51909,2.054275 -4.81472,3.604252 -1.29562,1.549977 -2.1712,3.487568 -2.27048,5.505291 -0.07,1.423387 0.24667,2.8582 0.86696,4.141232 0.62029,1.283032 1.53973,2.414637 2.63873,3.321906 2.19799,1.814538 5.06911,2.698116 7.91739,2.803171 3.84404,0.141782 7.82099,-1.166466 10.48369,-3.94258 1.33135,-1.388057 2.31376,-3.119983 2.75579,-4.991826 0.44203,-1.871843 0.33367,-3.879976 -0.37045,-5.669781 -0.61181,-1.555164 -1.66264,-2.926753 -2.96863,-3.969458 -1.306,-1.042705 -2.86182,-1.759551 -4.49058,-2.133688 -3.25753,-0.748274 -6.73434,-0.114568 -9.7477,1.331481 z" id="path781" fill="none" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 73.165531,60.441089 c -1.902136,0.651396 -3.779946,1.408253 -5.494645,2.45813 -2.247479,1.376088 -4.162198,3.221382 -6.103057,5.004033 -1.940858,1.782651 -3.958721,3.538726 -6.332192,4.683895 -2.288025,1.103943 -4.816819,1.596897 -7.204448,2.464642 -1.193814,0.433872 -2.360235,0.966074 -3.400955,1.694318 -1.04072,0.728245 -1.955054,1.660881 -2.552824,2.781643 -0.676731,1.268806 -0.925157,2.752958 -0.749649,4.180203 0.175508,1.427246 0.767519,2.793969 1.647808,3.931038 1.760579,2.274136 4.618825,3.553632 7.488402,3.745627 3.543015,0.237053 7.041972,-1.058301 10.071885,-2.909995 3.029913,-1.851695 5.680707,-4.249246 8.436391,-6.488745 5.695852,-4.628925 11.981013,-8.662613 18.942066,-10.989287 2.102552,-0.70276 4.259412,-1.247666 6.321092,-2.06257 2.061681,-0.814904 4.054851,-1.926982 5.535772,-3.576669 0.984793,-1.097025 1.723523,-2.420322 2.098253,-3.846109 0.37473,-1.425788 0.38042,-2.952592 -0.0256,-4.369776 -0.40606,-1.417183 -1.228,-2.718814 -2.361055,-3.661933 -1.133057,-0.943119 -2.576136,-1.517924 -4.049438,-1.569604 -1.588811,-0.05573 -3.145544,0.481472 -4.560998,1.205293 -1.415453,0.723821 -2.725801,1.636152 -4.114755,2.409606 -4.217049,2.348309 -9.025553,3.352452 -13.592013,4.91626 z" id="path785" fill="none" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 23.569134,43.957156 c -1.962889,1.662351 -3.10852,4.087431 -3.962889,6.513621 -0.854369,2.42619 -1.484483,4.949968 -2.688524,7.22299 -1.295192,2.445098 -3.204,4.504231 -4.729364,6.812757 -0.762681,1.154262 -1.433317,2.380271 -1.857308,3.697175 -0.4239908,1.316905 -0.5945372,2.731863 -0.3539313,4.094256 0.2713033,1.536214 1.0652923,2.963121 2.1717493,4.062808 1.106457,1.099687 2.515578,1.877066 4.015181,2.306888 2.999208,0.859643 6.261492,0.327885 9.140237,-0.875052 1.887426,-0.788696 3.644671,-1.852444 5.446417,-2.821015 1.801745,-0.968571 3.678785,-1.853038 5.687466,-2.239842 2.288224,-0.440635 4.647346,-0.217993 6.972444,-0.373055 1.16255,-0.07753 2.326784,-0.251997 3.424441,-0.642741 1.097657,-0.390744 2.130175,-1.006798 2.905939,-1.876121 0.953642,-1.068653 1.478687,-2.486079 1.567302,-3.915625 0.08862,-1.429545 -0.243205,-2.868167 -0.842807,-4.168909 C 49.266284,59.153807 47.070658,57.158332 44.824732,55.380235 41.65231,52.868633 38.244681,50.619653 35.425997,47.71665 34.244055,46.499351 33.167219,45.168539 31.843113,44.107621 31.18106,43.577163 30.457518,43.116424 29.67055,42.799592 28.883583,42.482759 28.030666,42.312664 27.18403,42.3666 c -1.33654,0.08515 -2.592903,0.72504 -3.614896,1.590556 z" id="path789" fill="none" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <text xml:space="preserve" x="33.401653" y="31.377314" id="text847" font-style="normal" font-weight="normal" font-size="10.5833px" font-family="sans-serif" fill="#000000" fill-opacity="1" stroke-width="0.264583">
                    <tspan id="tspan845" x="33.401653" y="31.377314" stroke-width="0.264583"/>
                  </text>
                  <text xml:space="preserve" x="31.811098" y="26.027262" id="text909" font-size="5.64444px" font-family="sans-serif" stroke-width="0.264583">
                    <tspan id="tspan907" x="31.811098" y="26.027262" stroke-width="0.264583">A|'</tspan>
                  </text>
                  <text xml:space="preserve" x="73.45472" y="65.212761" id="text913" font-size="5.64444px" font-family="sans-serif" stroke-width="0.264583">
                    <tspan id="tspan911" x="73.45472" y="65.212761" stroke-width="0.264583">A|''</tspan>
                  </text>
                  <text xml:space="preserve" x="30.220545" y="75.189873" id="text917" font-size="5.64444px" font-family="sans-serif" stroke-width="0.264583">
                    <tspan id="tspan915" x="30.220545" y="75.189873" stroke-width="0.264583"/>
                  </text>
                  <text xml:space="preserve" x="28.774584" y="63.333004" id="text921" font-size="5.64444px" font-family="sans-serif" stroke-width="0.264583">
                    <tspan id="tspan919" x="28.774584" y="63.333004" stroke-width="0.264583">Z|'</tspan>
                  </text>
                  <text xml:space="preserve" x="63.477604" y="47.716644" id="text925" font-size="5.64444px" font-family="sans-serif" stroke-width="0.264583">
                    <tspan id="tspan923" x="63.477604" y="47.716644" stroke-width="0.264583">Z|''</tspan>
                  </text>
                  <text xml:space="preserve" x="111.77264" y="54.801846" id="text929" font-size="5.64444px" font-family="sans-serif" stroke-width="0.264583">
                    <tspan id="tspan927" x="111.77264" y="54.801846" stroke-width="0.264583">Z|'''</tspan>
                  </text>
                  <text xml:space="preserve" x="88.637291" y="28.629992" id="text933" font-size="5.64444px" font-family="sans-serif" stroke-width="0.264583">
                    <tspan id="tspan931" x="88.637291" y="28.629992" stroke-width="0.264583">B|</tspan>
                  </text>
                </g>
              </svg>
            </artwork>
            <artwork align="center" name="" type="ascii-art" originalSrc="example.ascii-art">Included in HTML/PDF only</artwork>
          </artset>
        </figure>
        <t>
                    <xref target="example1"/> visualizes a network with three prunners running, two components
                    with prunner A, one with prunner B and three components running zero-prunner, annotated hence
                    as Z|', Z|'' and Z|'''. CDS within components are not visualized since they do not contribute
                    to further understanding but the links that are included to connect the CDS of the component following
                    <xref target="rules"/> are made fat. Obviously the overall graph is connected despite
                    several algorithms and components the network encompasses on such, most likely not very likely,
                    deployment.
        </t>
        <t>
                    <xref target="example1"/> also visualizes why the overall CDS can be easily more than a
                    spanning tree of the overall network. A node seeing locally its neighbor running another algorithm
                    cannot decide easily based simply on local knowledge whether the link should be included in
                    flooding but could do so based on the overall view of the network of course and by some
                    tie-breaking an algorithm to prune overall coverage to a spanning tree could be devised.
                    Due to possible resulting long flooding paths and one link minimal cuts such an algorithm
                    is not considered here. Of course in the future such an algorithm can be proposed with the
                    nodes advertising whether they run such a 'prunner-of-prunners' while the absence of
                    prunning can be denoted as 'zero-meta-prunner' to extend the symmetry of this solution recursively.
        </t>
      </section>
      <section title="Signalling" anchor="tlvs">
        <t>
                    The only signalling necessary is a Sub-TLV of the IS-IS Router Capability TLV-242 that is defined in
                    <xref target="RFC7981"/> with the following format. The Sub-TLV MUST be advertised by a node
                    that is actively running any prunner except zero-prunner and the absence of this Sub-TLV
                    signifies a node being a 'zero-prunner'.
        </t>
        <figure align="left">
          <artwork align="left" type="ascii-art">
   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |     Type      |     Length    |        Algorithm              |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
        </figure>
        <ul>
          <li>Type: TBD1</li>
          <li>Length: 2</li>
          <li>Algorithm: a numeric identifier in the range 0 .. 2^16-1 that
                        identifies the algorithm used to calculate CDS (flooding
                        topology) of the component from the IGP Flooding Prunner Registry
                    as assigned per <xref target="IGP_IANA"/>.</li>
        </ul>
      </section>
    </section>
    <section title="Algorithm 256: MANET-Based, Load-Balancing Algorithm" toc="default">
      <t>
                The following section describes a distributed algorithm similar to and based on
                those implemented in OSPF to support mobile
                ad-hoc networks,
                as described in <xref target="RFC5449"/>,<xref target="RFC5614"/>.
                These solutions
                have been widely implemented and deployed.
      </t>
      <section title="Experimental Evidence" toc="default">
        <t>Laboratory tests based on a well known open source codebase
                    show that modifications similar to the algorithm presented here
                    reduce flooding in a large scale emulated
                    butterfly network topology significantly.
                    Under unmodified flooding procedures intermediate systems receive, on average, 40 copies of any changed LSP
                    fragment in a 2'500 nodes butterfly network.
                    With the changes described in this document said systems received, on average, two
                    copies of any changed LSP fragment.
                    In many cases, only a single copy of each changed LSP was received and processed per node.
                    In terms of performance, overall convergence times were cut  in roughly half.
        </t>
        <t>An early version of mechanisms described here has been implemented in the FR Routing open
                    source routing stack as part of `fabricd` daemon and the described modification has
                    been implement by commercial
                    vendors.
        </t>
      </section>
      <!--end of experience -->



            <section title="Example Network" toc="default">
        <t>Following spine and leaf fabric will be used in further description of
                    the introduced modifications.</t>
        <figure align="center" anchor="is-model">
          <artwork align="left" type="ascii-art">
+====+ +====+ +====+ +====+ +====+ +====+
| 1A | | 1B | | 1C | | 1D | | 1E | | 1F | (T0)
+====+ +====+ +====+ +====+ +====+ +====+

+====+ +====+ +====+ +====+ +====+ +====+
| 2A | | 2B | | 2C | | 2D | | 2E | | 2F | (T1)
+====+ +====+ +====+ +====+ +====+ +====+

+====+ +====+ +====+ +====+ +====+ +====+
| 3A | | 3B | | 3C | | 3D | | 3E | | 3F | (T2)
+====+ +====+ +====+ +====+ +====+ +====+

+====+ +====+ +====+ +====+ +====+ +====+
| 4A | | 4B | | 4C | | 4D | | 4E | | 4F | (T1)
+====+ +====+ +====+ +====+ +====+ +====+

+====+ +====+ +====+ +====+ +====+ +====+
| 5A | | 5B | | 5C | | 5D | | 5E | | 5F | (T0)
+====+ +====+ +====+ +====+ +====+ +====+
</artwork>
        </figure>
        <t>The above picture does not contain the connections between devices for readability purposes.
                    The reader should assume that each device in a given layer
                    is connected to every device in
                    the layer above it in a butterfly network fashion. For instance:
        </t>
        <ul>
          <li>5A is connected to 4A, 4B, 4C, 4D, 4E, and 4F</li>
          <li>5B is connected to 4A, 4B, 4C, 4D, 4E, and 4F</li>
          <li>4A is connected to 3A, 3B, 3C, 3D, 3E, 3F, 5A, 5B, 5C, 5D, 5E, and 5F</li>
          <li>4B is connected to 3A, 3B, 3C, 3D, 3E, 3F, 5A, 5B, 5C, 5D, 5E, and 5F</li>
          <li>etc.</li>
        </ul>
        <t>The tiers or stages of the fabric are marked for easier reference.
                    Alternate representation of this topology is a "folded Clos" with T2 being the
                    "top of the fabric" and T0 representing the leaves.
        </t>
      </section>
      <!-- 1 -->
        <section title="Flooding Modifications" toc="default">
        <t>This section describes detailed modifications to the IS-IS flooding process to reduce
                the full topology to a dominating connected set of links used for flooding.
                It does at the same time balance the remaining flooding across all links in the
                topology to prevent hot-spots.
        </t>
        <!-- 2 -->
            <section title="Optimizing Flooding" toc="default">
          <t>The simplest way to conceive of the solution presented here is in two stages:</t>
          <ul spacing="normal">
            <li>
              <t>Stage 1: Forward Optimization</t>
              <ul spacing="normal">
                <li>Find the group of intermediate systems that will all flood to the same set of
                                        neighbors as the local IS
                                    </li>
                <li>Decide (deterministically) which subset of the intermediate systems within
                                        this group
                                        should re-flood any received LSPs
                                    </li>
              </ul>
            </li>
            <li>
              <t>Stage 2: Reverse Optimization</t>
              <ul>
                <li>Find neighbors on the shortest path towards the origin of the change</li>
                <li>Do not flood towards these neighbors</li>
              </ul>
            </li>
          </ul>
          <t>The first stage is best explained through an illustration. In the network above, if 5A transmits a
                    modified Link State Protocol Data Unit (LSP) to 4A-4F, each of 4A-4F nodes will, in turn, flood this
                    modified LSP to 3A (for instance). With this, 3A will receive 6 copies of the modified LSP,
                    while only one copy
                    is necessary for the intermediate systems shown to converge on the same view of the topology. If
                    4A-4F could determine that all of them will all flood identical copies of the modified LSP to 3A,
                    it would be possible
                    for all of them except one to decide not to flood the changed LSP to 3A.
          </t>
          <t>The technique used in this draft to determine such flooding group is for each intermediate system to
                    calculate
                    a special SPT (shortest-path spanning tree) from the point of view of the transmitting neighbor.
                    As next step, by
                    setting the metric of all links to 1 and truncating the SPT
                    to two hops, the local IS can find the
                    group of neighbors it will flood any changed LSP towards and the set of intermediate systems (not
                    necessarily neighbors) which will also flood to this same set of neighbors. If every intermediate
                    system in the flooding set performs this same calculation, they will all obtain the same flooding
                    group.
          </t>
          <t>Once such a flooding group is determined, the members of the flooding group will each (independently)
                    choose which of the members should re-flood the received information. A
                    common hash function is used across a set
                    of shared
                    variables so each member of the group comes to the same conclusion as to the designated flooding
                    nodes.
                    The group member which is in such a way `selected` to flood the changed LSP does so normally;
                    the remaining group
                    members suppress the flooding of the LSP initially.
          </t>
          <t>
                    Each IS calculates
                    the special, truncated SPT separately, and determines which IS should flood any changed LSPs
                    independently based on a common
                    hash function.
                    Because these calculations are performed using a shared view of the network,
                    however (based on the common link state database) and such a shared hash function, each member of
                    the flooding
                    group will make the same decision under converged conditions. In the transitory state of nodes
                    having potentially different view of topologies the flooding may either overflood or in worse case
                    not flood enough for which we introduce a 'quick-patching' mechanism later but ultimately will
                    converge due to periodic CSNP origination per normal protocol operation.
          </t>
          <t>The second stage is simpler, consisting of a single rule: do not flood modified LSPs along the
                    shortest path towards the origin of the modified LSP. This rule relies on the observation that any
                    IS between the origin of the modified LSP and the local IS should receive the modified LSP from some
                    other IS closer to the source of the modified LSP. It is worth to observe that
                    if all the nodes that should be designated
                    to flood within a peer group are pruned by the second stage the receiving node is at the `tail-end`
                    of the flooding chain and no further flooding will be necessary. Also, per normal protocol
                    procedures flooding to the node from which the LSP has been received will not be performed.
          </t>
        </section>
        <!-- end of optimized flooding -->

            <!-- 2 -->
            <section title="Optimization Process Details" toc="default">
          <t>
                    This section provides normative description of the specification. Any node implementing
                    this solution MUST exhibit external behavior that conforms to the algorithms provided.
          </t>
          <t>Each intermediate system will determine whether it should re-flood LSPs as described below.
                    When a modified LSP arrives from a Transmitting Neighbor (TN), the result of the following
                    algorithm obtains the necessary decision:
          </t>
          <t>Step 1: Build the Two-Hop List (THL) and Remote Neighbor's List (RNL) of nodes running this
                    algorithm or zero-prunner by:</t>
          <ol spacing="normal" type="%C)">
                        <li> Set all link metrics to 1</li>
            <li> Calculate an SPT truncated to 2 hops from the perspective of TN</li>
            <li>
              <t>
                            For each IS that is two hops away (has a metric of two in the truncated SPT) from TN:
              </t>
              <ol spacing="normal" type="%i.">
                                <li>If the IS is the LSP originator, skip</li>
                <li>If the IS is a neighbor of the LSP originator, skip</li>
                <li>If the IS is on the shortest path from the TN towards towards the originator of the modified LSP, skip
                                </li>
                <li>If the IS is *not* on the shortest path from the TN towards the originator of the modified LSP, add
                                    it to THL
                                </li>
              </ol>
            </li>
            <li>Add each IS that is one hop away from TN to the RNL</li>
          </ol>
          <t>Step 2: Sort nodes in RNL by system IDs, from the least value to the greatest.</t>
          <t>Step 3: Calculate a number, H, by taking as initial value the fragment ID, shifting it by 1 bit to the right
                    and starting at last byte of the system ID for all bytes XOR each with the current value and rotate the current
                    value to
                    the left by 4 bits. The shifting of the fragment ID will put 2 sequent fragments onto the same
                    flooding tree to minimize re-ordering and the subsequent XOR'ing and rotating will maximize
                    the amount of entropy obtained for a good hash value. RNum is the number of nodes in the RNL.
                    Consequently, set N to the H MOD of RNum (N=H MOD RNum).
                    With that N will be less than the number of members of RNL.
                    (footnote 1: this allows for some balancing of LSPs coming from same system ID).
          </t>
          <t>Step 4: Starting with the Nth member of RNL:
                    where N is the index into the members in RNL,
                    with index starting from zero (Index zero assigned to the IS with lowest system-id): </t>
          <ol spacing="normal" type="%C)">
                        <li>If THL is empty, move to Step 5</li>
            <li>If this member of RNL is the local calculating IS, it MUST reflood the modified LSP
                            to at least the remaining members in the THL it is adjacent to;
                            move to Step 5
                        </li>
            <li>Remove all members of THL connected to (adjacent to) this member of RNL</li>
            <li>Move to the next member of RNL, wrapping to the beginning of RNL if necessary</li>
          </ol>
          <t>
                    Step 5: To adhere to <xref target="rules"/>
                    include yourself as reflooder for LSPs arriving from all TNs running a
                    different prunner unless it is zero-prunner.
          </t>
          <t>Note 1: This description is leaning towards clarity rather than optimal performance when
                    implemented.</t>
          <t>
                    Note 2: An implementation in a node MAY choose independently of others
                    to provide a configurable parameter to allow for more than
                    one node in RNL to reflood, e.g. it may reflood even if it's only the member that would
                    be chosen from
                    the RNL if a double coverage of THL is required. The modifications to the algorithm
                    are simple enough to not require further text.
          </t>
        </section>
        <!-- end of optimization process -->

            <!-- 2 -->
            <section title="Flooding Failures" toc="default">
          <t>It is possible that during initial convergence or
                    in some failure modes the flooding will be incomplete due to the
                    optimizations outlined.
                    Specifically, if a reflooder fails, or is somehow disconnected from all the links across which it
                    should be reflooding,
                    an LSP could be only partially distributed through the topology. To speed up convergence
                    under such partition
                    failures (observe that periodic CSNPs will under any circumstances converge the topology though
                    at a slower pace),
                    an intermediate system which
                    does not reflood a specific LSP (or fragment) SHOULD:
          </t>
          <ol spacing="normal" type="%C)">
                        <li>Set a short, configurable timer which should be significantly shorter than CSNP interval used.</li>
            <li>When the timer expires, send Partial Sequence Number Packet (PSNP) of all LSPs that have *not*
                            been reflooded during the timer runtime to all neighbors unless an up-to-date PSNP or
                            CSNP has been already received from the neighbor.
                        </li>
            <li>Per normal protocol procedures process any Partial Sequence Number Packets (PSNPs)
                            received that indicate that neighbors
                            still have older versions of the LSP will lead to the usual
                            synchronization of the databases that are out of sync due to optimized flooding.
                        </li>
            <li>If such resynchronizations above a configurable threshold are required (i.e. PSNPs
                            are sent to the neighbors and are answered with requests),
                            an implementation SHOULD notify the network operator via the according mechanism
                            about the condition.
                        </li>
          </ol>
        </section>
        <!-- end of flooding failures -->

            <section title="Signaling Considerations" toc="default">
          <t>
                    It
                    bares repeating that in case the hashing algorithm a node uses is different from this
                    draft a different algorithm number must be assigned and used.
          </t>
        </section>
        <section title="Additional Deployment Considerations" toc="default">
          <t>
                    A node deploying this algorithm on point-to-point links MUST send CSNPs on such links. This does not
                    represent a dramatic change given most deployed implementations today already exhibit this
                    behavior to prevent possible slow synchronization of IS-IS database across such links and to provide
                    additional periodic consistency guarantees.
          </t>
        </section>
        <!-- 2 -->
            <section title="Flooding Example" toc="default">
          <t>Assume, in the network specified, that 5A floods some modified LSP towards 4A-4F and
                    we only use a single node to reflood.
                    To determine whether 4A
                    should flood this LSP to 3A-3F:
          </t>
          <ul>
            <li>5A is TN; 4A calculates a truncated SPT from 5A's perspective with all link metrics set to
                            1
                        </li>
            <li>4A builds THL, which contains 3A, 3B, 3C, 3D, 3E, 3F, 5B, 5C, 5D, 5E and 5F</li>
            <li>4A builds RNL, which contains 4A,4B,4C,4D,4E and 4F, sorting it by the system ID</li>
            <li>4A computes hash on the received LSP-ID to get N; assume N is 1 in this case</li>
            <li>Since 4A is the 1st member of RNL and there are members in THL, 4A must reflood; the loop
                            exits
                        </li>
          </ul>
        </section>
        <!-- end of flooding example -->

            <!-- 2 -->
            <section title="A Note on Performance" toc="default">
          <t>The calculations described here seem complex, which might lead the reader to conclude that the cost of
                    calculation is so much higher than the cost of flooding that this optimization is
                    counter-productive.
                    First, The description provided here is designed for clarity rather than optimal calculation.
                    Second, many of the involved calculations can be easily performed in advance and stored,
                    rather than being performed for
                    each
                    LSP occurence and each neighbor. Optimized versions of the process described here have
                    been implemented,
                    and do result in strong convergence speed gains.
          </t>
        </section>
        <!-- end of performance note -->

        </section>
      <!-- end of optimizing flooding -->

        </section>
    <!-- 1 -->
        <section title="Security Considerations" toc="default">
      <t>This document outlines framework for modifications to the IS-IS protocol for operation on high density network
                topologies. Implementations SHOULD implement IS-IS cryptographic authentication, as described in <xref target="RFC5304"/>, and should enable other security measures in accordance with best common
                practices for the IS-IS protocol.
      </t>
    </section>
    <!-- end of security considerations -->

        <section anchor="IGP_IANA" title="IANA Section">
      <t>IANA is requested to set up a registry called "IGP Flooding Prunner Type" under the existing "Interior Gateway
                Protocol (IGP) Parameters" IANA registry.</t>
      <t>Values in this registry come from the range 0 .. 2^16-1.</t>
      <t>
                The following values are defined:</t>
      <ul>
        <li>
                    0-255: Reserved with values aligned with algorithm numbers in <em>draft-dynamic-flooding</em>.
                </li>
        <li>
                    256: MANET Based Algorithm described in this document.
                </li>
        <li>
                257 .. 32767: Standardized distributed algorithms assigned in the registry.
            </li>
        <li>32767 ..  65534: Private algorithms. Individual
                values are to be assigned according to the "Private Use"
                policy defined in <xref target="RFC8126"/>.</li>
        <li>65535: Reserved</li>
      </ul>
    </section>
    <!-- 2 -->
        <section title="Contributors" toc="default">
      <t>The following people have contributed to this draft and are mentioned without any particular
                order: Abhishek Kumar, Nikos Triantafillis, Ivan
                Pepelnjak, Christian Franke, Hannes Gredler, Les Ginsberg, Naiming Shen, Uma Chunduri, Nick Russo,
                and Rodny Molina.
      </t>
    </section>
    <!-- end of contributors -->

    </middle>
  <back>
    <references title="Normative References">
      <reference anchor="RFC7981" target="https://www.rfc-editor.org/info/rfc7981" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7981.xml">
        <front>
          <title>IS-IS Extensions for Advertising Router Information</title>
          <author fullname="L. Ginsberg" initials="L." surname="Ginsberg"/>
          <author fullname="S. Previdi" initials="S." surname="Previdi"/>
          <author fullname="M. Chen" initials="M." surname="Chen"/>
          <date month="October" year="2016"/>
          <abstract>
            <t>This document defines a new optional Intermediate System to Intermediate System (IS-IS) TLV named CAPABILITY, formed of multiple sub-TLVs, which allows a router to announce its capabilities within an IS-IS level or the entire routing domain. This document obsoletes RFC 4971.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7981"/>
        <seriesInfo name="DOI" value="10.17487/RFC7981"/>
      </reference>
      <!--
            <reference anchor="ISO10589">
                <front>
                    <title>Intermediate system to Intermediate system intra-domain
                        routeing information 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 month="Nov" year="2002"/>
                </front>

                <seriesInfo name="ISO/IEC" value="10589:2002, Second Edition"/>
            </reference>
            -->

        </references>
    <!-- end of normative references -->

        <references title="Informative References">
      <reference anchor="RFC5304" target="https://www.rfc-editor.org/info/rfc5304" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5304.xml">
        <front>
          <title>IS-IS Cryptographic Authentication</title>
          <author fullname="T. Li" initials="T." surname="Li"/>
          <author fullname="R. Atkinson" initials="R." surname="Atkinson"/>
          <date month="October" year="2008"/>
          <abstract>
            <t>This document describes the authentication of Intermediate System to Intermediate System (IS-IS) Protocol Data Units (PDUs) using the Hashed Message Authentication Codes - Message Digest 5 (HMAC-MD5) algorithm as found in RFC 2104. IS-IS is specified in International Standards Organization (ISO) 10589, with extensions to support Internet Protocol version 4 (IPv4) described in RFC 1195. The base specification includes an authentication mechanism that allows for multiple authentication algorithms. The base specification only specifies the algorithm for cleartext passwords. This document replaces RFC 3567.</t>
            <t>This document proposes an extension to that specification that allows the use of the HMAC-MD5 authentication algorithm to be used in conjunction with the existing authentication mechanisms. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5304"/>
        <seriesInfo name="DOI" value="10.17487/RFC5304"/>
      </reference>
      <reference anchor="RFC5449" target="https://www.rfc-editor.org/info/rfc5449" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5449.xml">
        <front>
          <title>OSPF Multipoint Relay (MPR) Extension for Ad Hoc Networks</title>
          <author fullname="E. Baccelli" initials="E." surname="Baccelli"/>
          <author fullname="P. Jacquet" initials="P." surname="Jacquet"/>
          <author fullname="D. Nguyen" initials="D." surname="Nguyen"/>
          <author fullname="T. Clausen" initials="T." surname="Clausen"/>
          <date month="February" year="2009"/>
          <abstract>
            <t>This document specifies an OSPFv3 interface type tailored for mobile ad hoc networks. This interface type is derived from the broadcast interface type, and is denoted the "OSPFv3 MANET interface type". This memo defines an Experimental Protocol for the Internet community.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5449"/>
        <seriesInfo name="DOI" value="10.17487/RFC5449"/>
      </reference>
      <reference anchor="RFC5614" target="https://www.rfc-editor.org/info/rfc5614" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5614.xml">
        <front>
          <title>Mobile Ad Hoc Network (MANET) Extension of OSPF Using Connected Dominating Set (CDS) Flooding</title>
          <author fullname="R. Ogier" initials="R." surname="Ogier"/>
          <author fullname="P. Spagnolo" initials="P." surname="Spagnolo"/>
          <date month="August" year="2009"/>
          <abstract>
            <t>This document specifies an extension of OSPFv3 to support mobile ad hoc networks (MANETs). The extension, called OSPF-MDR, is designed as a new OSPF interface type for MANETs. OSPF-MDR is based on the selection of a subset of MANET routers, consisting of MANET Designated Routers (MDRs) and Backup MDRs. The MDRs form a connected dominating set (CDS), and the MDRs and Backup MDRs together form a biconnected CDS for robustness. This CDS is exploited in two ways. First, to reduce flooding overhead, an optimized flooding procedure is used in which only (Backup) MDRs flood new link state advertisements (LSAs) back out the receiving interface; reliable flooding is ensured by retransmitting LSAs along adjacencies. Second, adjacencies are formed only between (Backup) MDRs and a subset of their neighbors, allowing for much better scaling in dense networks. The CDS is constructed using 2-hop neighbor information provided in a Hello protocol extension. The Hello protocol is further optimized by allowing differential Hellos that report only changes in neighbor states. Options are specified for originating router-LSAs that provide full or partial topology information, allowing overhead to be reduced by advertising less topology information. This memo defines an Experimental Protocol for the Internet community.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5614"/>
        <seriesInfo name="DOI" value="10.17487/RFC5614"/>
      </reference>
      <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml">
        <front>
          <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
          <author fullname="M. Cotton" initials="M." surname="Cotton"/>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <author fullname="T. Narten" initials="T." surname="Narten"/>
          <date month="June" year="2017"/>
          <abstract>
            <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
            <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
            <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="26"/>
        <seriesInfo name="RFC" value="8126"/>
        <seriesInfo name="DOI" value="10.17487/RFC8126"/>
      </reference>
    </references>
    <!-- end of informative references -->

    </back>
</rfc>
