<?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-lsr-interop-flood-reduction-architecture-00" ipr="trust200902" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="3" symRefs="true" sortRefs="true" version="3">
  <!-- ***** FRONT MATTER ***** -->

    <front>
    <title>Flooding Reduction Algorithms Interoperability Framework</title>
    <author initials="T." surname="Przygienda" fullname="Tony Przygienda">
      <organization>Juniper Networks</organization>
      <address>
        <email>prz@juniper.net</email>
      </address>
    </author>
    <author initials="S." surname="Hegde" fullname="Shraddha Hegde">
      <organization>Juniper Networks</organization>
      <address>
        <email>shraddha@juniper.net</email>
      </address>
    </author>
    <date/>
    <abstract>
      <t>
          This document introduces a framework that makes it possible to deploy multiple flood
          reduction algorithms within the same IGP domain in an interoperable fashion.
      </t>
    </abstract>
  </front>
  <middle>
    <section title="Introduction">
      <t>
              Scenarios exist where multiple distributed (or centralized) flood reduction
              algorithms may be deployed simultaneously within an IGP domain. These scenarios
              necessitate certain co-operative behaviors between the involved
              algorithms to ensure the correctness of the overall solution. This is true
              in both permanent and transient (i.e., migration) deployment cases.
              Fortunately, existing graph theory concepts allow us to provide guidance
              towards design of algorithms
              with the necessary properties to ensure their interoperable co-existence.
      </t>
      <t>
              This document
              presents the necessary requirements for the involved algorithms
              and the details of a framework for their interoperable deployment.
              Though running multiple algorithms simultaneously may not be a preferred operational
              choice,
              it is necessary if the migration from one
              algorithm to another while ensuring minimal network disruption is a priority.
              A migration itself may be caused by discovery of defects in deployed algorithms
              or deployment of new algorithms offering improvements.
      </t>
    </section>
    <section title="Flooding Prunner Framework">
      <section title="Definitions and Axioms">
        <t>
            This section will outline a framework allowing the operation of multiple different
            flood reduction algorithms (called
            "flooding pruners" or "pruners" from here on) in an interoperable fashion.
        </t>
        <t>
            As first important observation upfront, it will become clear later in this section
            that full, non-optimized
            flooding presents a special case of a
            pruner itself. Normal flooding is including all adjacencies without any prunning
            and hence we name it the "zero-pruner"
            or "zero" for short.
        </t>
        <section title="Maximum of One Flooding Prunner on a Node">
          <t>
            This framework
            permits maximum of a single active pruner on each node. It allows to change
            a specific pruner at any time on any subset of nodes in the network while limiting the impact
            to the node itself and possibly the re-convergence of a set of nodes within its component.
          </t>
        </section>
        <section title="Connected Component">
          <t>
            A connected component (or component for short) is defined as subset of nodes
            running the same pruner
            (denoted as A) where each of the nodes can be connected to all  other nodes by a path
            that traverses only nodes that run A.
            Observe that there well  may be in the network multiple components which
            are not connected, but run the same pruner. We denote a component for pruner P as P| and if
            two disjoint components running P are present in the network as P|' and P|''.
          </t>
          <t>
                Observe that zero-pruner also builds components denoted as Z| and its primes.
          </t>
          <t>
                Another way to visualize components is to consider a network running multiple pruners as
                 "islands running non-zero algorithms" that are connected to each other via components
                running zero pruner (i.e. using normal flooding).
          </t>
        </section>
        <section title="Flooding Connected Dominating Sets">
          <t>
            A pruner may choose within its component a subset of links to flood while making sure that the component
            remains connected. In other words, after suppressing flooding on some links within the component
              there must still exist paths consisting of the remaining links that connect each pair of nodes
            in the component. We use for those remaining links the term
              flooding connected dominating set or CDS for short (more precisely,
            an edge dominating set which is not necessarily loop-free).
              Such a CDS is colloquially often called "flooding
              topology" in context of flood reduction algorithms. A simple spanning
            tree is an easily visualized special case of a CDS. We denote such
            a CDS for a component A| as A|*.
            Observe that A|* is not unique for a component (i.e. many different sets of links can
            be a CDS). Nor is it required that a CDS has to be loop-free (i.e. there may be many different
            paths on the CDS between two nodes in a component). Therefore, it is not required that all information
            has to be flooded on the same CDS, for example, LSPs originated by different systems can use a different CDS each.
          </t>
          <t>
              To summarize the section above in simple terms,
            a pruner must choose at least one set of flooding links that guarantees that
            all information
            can reach all the
            nodes in the component.
          </t>
        </section>
        <section title="Flooding Prunner" anchor="rules">
          <t>
            Any flood reduction algorithm expecting to interoperate with other algorithms without
            understanding their semantics MUST follow the
            following rules, otherwise the algorithm is basically
            a ship in the night and cannot be expected to accommodate other algorithms in the network
            at the same time.
          </t>
          <ol spacing="normal">
                <li>
                    Each node of a pruner (except zero-pruner) MUST advertise in its flooded
                    node information the currently active
                    pruner. It MUST
                    also understand such information as advertised by other nodes in the network. A node running
                    a pruner MUST
                    NOT
                    assume implicitly  that a node is a zero pruner or supports or runs the same algorithm.
                    However, any pruner
                    can safely assume that any node that does
                    not advertise any running pruner in its node information
                    MUST be a zero-pruner. Observe that a pruner does not need to understand
                    how the algorithm of another pruner operates or its specific signalling type (or even whether
                    it is centralized, centrally
                    signalled or fully distributed). The only requirement is that every pruner agrees on
                    the same signalling information which indicates the pruner currently running.
                </li>
            <li>
                    A pruner  MUST NOT prune links in components other  than the one
                    it participates in or assume flooding behavior
                    on links in other components
                    (except in the case of a zero pruner where the flooding is well understood). In other words,
                    each pruner is allowed to prune some links
                    from flooding, but only strictly  within its own component.
                </li>
            <li>
                    A flooding pruner A
                    MUST also include in its flooding CDS all links to adjacent components
                    running non zero-pruner different from A. A node running pruner P that is different
                    from zero-pruner SHOULD include in
                    its flooding CDS all links to zero-pruners. It MAY use the known behavior of zero-pruner for
                    further optimizations. Nevertheless, such optimizations 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 CDSes within each component creates
                    an overall flooding CDS over the whole network. In other words, the resulting set of links
                    that still flood connects all nodes in the network.
                </li>
          </ol>
          <t>
                    This document does not consider other approaches
                    that guarantee a pruner property on e.g. a clique but assumes that such "ship in the night
                    components" can be considered zero-pruners due to their implicit guarantee of
                    correct flooding to nodes
                    that are part of their component and floods on the edges to all other components.
          </t>
        </section>
      </section>
      <section title="Desirable Properties of the Flooding Prunner Framework">
        <t>
            Nodes within a component are free to use any kind of pruner to calculate optimized
            flooding. Any mode of computation, distributed or centralized will work fine as long as it adheres to
            <xref target="rules"/>.
        </t>
        <t>
            The framework allows but does not assume any centralized instance or election in a
            component. Computation and communication within each component is completely independent of other
            components.
        </t>
        <t>
            With the exception of a node having to advertise which prunner is active,
            no configuration is necessary
            unless the algorithm itself requires it.
        </t>
        <t>
            A node is free to choose a different pruner or zero-pruner at any point in time independent
            of all other nodes. It may end up in another component or become a zero-pruner with the maximum
            impact consisting of re-computation within two components that see such node leave or join.
            For a distributed algorithm, it is likely that only the adjoining nodes have to
            adjust their pruning decisions.
            That is to say, the framework allows for node-by-node deployment or migration of pruners
            without network-wide re-computation of optimized flooding.
            This is obviously critical to the stability of large networks
            that may not converge within reasonable time if the whole network were to revert back to
            zero-prunning due to network-wide impact. However, such behavior cannot be excluded for example in case of
            election problems due to misconfiguration or topological separation of nodes if the whole
            network runs a single pruner relying on centralized election.
            The network itself cannot ensure correctness of a pruner or
            prevent a pruner having a blast radius of the whole component depending
            upon the algorithm and signalling used.
        </t>
        <t>
            Though the framework provides extreme operational flexibility when deploying pruners,
            the most likely scenarios are a node-by-node deployment of a single pruner in addition to zero-pruner
            or, should the necessity arise, a node-by-node migration to another pruner.
        </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:xlink="http://www.w3.org/1999/xlink" 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="19.737341" cy="18.00219" rx="3.1088121" ry="2.8196204" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <ellipse id="path111-36" ry="2.8196204" rx="3.1088121" cy="32.587246" cx="19.1752" 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-2-5" cx="94.981461" cy="72.80069" rx="3.1088121" ry="2.8196204" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <ellipse id="path111-3-2-56" cx="83.490501" cy="80.923004" rx="3.1088121" ry="2.8196204" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <ellipse id="path111-3-2-3" cx="69.950912" cy="83.516571" 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="40.920647" cy="33.546246" 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="73.165535" y="13.736611" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <rect id="rect229" width="6.2176242" height="5.9284325" x="83.431839" y="37.739529" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <rect id="rect229-2" width="6.2176242" height="5.9284325" x="90.912918" y="10.961498" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <rect id="rect229-9" width="6.2176242" height="5.9284325" x="111.09474" y="14.591333" fill="white" fill-opacity="0.321422" stroke="#000000" stroke-width="0.165"/>
                  <rect id="rect231" width="7.0851998" height="6.9406037" x="100.92794" y="23.424538" 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-5-7" 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(-0.1099928,-28.907841)" 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 22.154166,19.775627 38.503821,31.772808" 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 43.333496,31.768358 6.163586,-4.541589" 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.265" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 22.742015,17.278615 34.445666,14.460186" id="path594" fill="black" fill-opacity="1" fill-rule="evenodd" stroke="black" stroke-width="0.265" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 54.786988,24.380752 73.165535,17.55758" id="path596" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 92.532498,56.331977 87.677128,43.667961" id="path598" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 77.246592,19.231256 8.011041,18.508273" 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 78.949371,17.543568 21.978569,8.053219" 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 100.92794,29.623213 89.649463,38.309458" 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 89.649463,41.23412 21.447657,3.659053" 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.027788,40.923468 74.367923,19.231256" 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.986383,49.192707 39.369285,35.98964" 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.822753,0.8677279 -5.348889,2.6721105 -7.085201,5.0608565 -1.823802,2.509112 -2.7571243,5.609205 -2.8733364,8.708946 -0.1162121,3.099741 0.5580809,6.198888 1.7165704,9.076352 0.458264,1.138238 0.995135,2.251444 1.699838,3.255927 0.704702,1.004483 1.583627,1.900368 2.638039,2.527909 1.25269,0.745548 2.709244,1.088546 4.160558,1.225523 1.451313,0.136976 2.912838,0.07809 4.3706,0.07584 6.563129,-0.01011 13.125121,1.129884 19.665045,0.578384 2.70831,-0.228387 5.420899,-0.756446 7.884885,-1.903563 2.463986,-1.147117 4.675047,-2.951082 5.996321,-5.326232 1.666185,-2.995169 1.783348,-6.712914 0.702586,-9.965477 C 56.881804,18.593062 54.687252,15.786547 52.054527,13.592015 47.558916,9.8446581 41.812504,7.8055518 36.004381,7.0851995 30.34665,6.3834996 24.543252,6.8795162 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 63.043817,14.459591 c -0.573471,1.740083 -0.370165,3.674597 0.308728,5.376321 0.678893,1.701723 1.805499,3.192204 3.066743,4.521121 2.522489,2.657835 5.655524,4.79074 7.613817,7.887855 1.416621,2.24044 2.123535,4.841482 2.949693,7.360182 0.826158,2.518699 1.837447,5.070439 3.70172,6.954814 1.926865,1.947642 4.683961,3.016533 7.423465,2.981372 2.739504,-0.03516 5.433014,-1.149118 7.469914,-2.981372 1.910337,-1.718406 3.21858,-3.98585 4.615263,-6.142603 1.39668,-2.156754 2.98164,-4.303046 5.21726,-5.569668 2.36159,-1.337997 5.17528,-1.544693 7.88359,-1.724806 2.7083,-0.180114 5.52296,-0.394879 7.87736,-1.745495 1.67811,-0.962659 3.02452,-2.473196 3.85043,-4.222665 0.82591,-1.749468 1.13692,-3.728617 0.95555,-5.65472 -0.36273,-3.852206 -2.689,-7.367214 -5.81815,-9.643062 C 116.58192,9.2550886 112.09037,8.1838436 107.67458,7.9251217 103.25878,7.6663998 98.838659,8.1593899 94.421127,8.3865629 92.398626,8.4905707 90.373258,8.5388707 88.348099,8.531158 83.864765,8.5140834 79.381049,8.2226049 74.900681,8.3865629 72.53276,8.4732164 70.125225,8.6975821 67.937488,9.607729 c -1.093868,0.455073 -2.12306,1.081621 -2.98118,1.898487 -0.858119,0.816866 -1.541657,1.828154 -1.912491,2.953375 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 72.587147,58.561342 c -2.061969,0.206517 -4.147318,0.07952 -6.207599,0.302246 -2.060281,0.222728 -4.17136,0.847841 -5.649266,2.30048 -0.762275,0.749243 -1.320513,1.685489 -1.743633,2.667018 -0.423119,0.981529 -0.717446,2.012761 -1.00999,3.040792 -0.292543,1.028031 -0.585652,2.059528 -1.006505,3.042031 -0.420852,0.982503 -0.975709,1.920483 -1.734517,2.673238 -0.903638,0.89643 -2.062949,1.497431 -3.261148,1.926927 -1.198199,0.429496 -2.44638,0.699232 -3.678026,1.020475 -1.231646,0.321243 -2.461061,0.699701 -3.569276,1.325806 -1.108215,0.626105 -2.096994,1.520844 -2.649777,2.667395 -0.701489,1.454989 -0.630258,3.219885 0.03017,4.693965 0.660429,1.47408 1.867878,2.664557 3.268556,3.469032 1.400678,0.804475 2.988315,1.242387 4.588812,1.460302 1.600498,0.217914 3.221693,0.222922 4.836899,0.209226 9.93886,-0.08428 19.857252,-0.862096 29.786757,-1.301368 2.25794,-0.09989 4.525559,-0.183227 6.749384,-0.5868 2.223825,-0.403574 4.420133,-1.142999 6.26425,-2.449713 2.365551,-1.676195 4.031901,-4.212422 5.025311,-6.936132 0.99341,-2.72371 1.35445,-5.639197 1.4815,-8.535629 0.14419,-3.287113 -0.0178,-6.654927 -1.19558,-9.727202 -0.58886,-1.536137 -1.43158,-2.98367 -2.54716,-4.192782 -1.11558,-1.209113 -2.509265,-2.17488 -4.065438,-2.708548 -2.260572,-0.775232 -4.754774,-0.610311 -7.065632,-0.0011 -2.310859,0.609184 -4.483658,1.641147 -6.670977,2.603855 -3.195414,1.406403 -6.503273,2.688589 -9.977116,3.036513 z" id="path785" fill="none" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 18.074489,43.523368 c -2.31696,1.28933 -4.212336,3.259779 -5.639241,5.494644 -2.9440065,4.610999 -3.9122305,10.386252 -2.891918,15.760956 0.709656,3.738259 2.404957,7.369053 5.221032,9.927942 1.408038,1.279444 3.082791,2.275422 4.901766,2.832986 1.818975,0.557564 3.781897,0.669652 5.638157,0.252703 1.996562,-0.448464 3.805958,-1.480273 5.576614,-2.50602 1.770656,-1.025747 3.568701,-2.07216 5.557269,-2.554837 2.260853,-0.548768 4.626934,-0.336077 6.949761,-0.466751 1.161414,-0.06534 2.326276,-0.219371 3.42846,-0.591315 1.102183,-0.371943 2.143746,-0.971637 2.924603,-1.833851 0.959437,-1.0594 1.480972,-2.478346 1.559894,-3.905448 0.07892,-1.427101 -0.267139,-2.859523 -0.875784,-4.152735 -1.217288,-2.586426 -3.408995,-4.565851 -5.60037,-6.401407 C 41.725775,52.784463 38.513023,50.3266 35.425997,47.71665 32.904643,45.584952 30.354457,43.288422 27.18403,42.3666 24.166797,41.48932 20.820179,41.995461 18.074489,43.523368 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="34.703018" y="25.448877" id="text909" font-size="5.64444px" font-family="sans-serif" stroke-width="0.264583">
                    <tspan id="tspan907" x="34.703018" y="25.448877" 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="24.581303" y="73.599312" id="text921" font-size="5.64444px" font-family="sans-serif" stroke-width="0.264583">
                    <tspan id="tspan919" x="24.581303" y="73.599312" 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="72.731743" y="28.051607" id="text933" font-size="5.64444px" font-family="sans-serif" stroke-width="0.264583">
                    <tspan id="tspan931" x="72.731743" y="28.051607" stroke-width="0.264583">B|</tspan>
                  </text>
                  <path d="m 22.280334,32.724186 15.535178,0.68512" id="path1" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 19.283807,29.769374 0.344927,-8.949313" id="path2" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 21.228003,30.469799 35.397537,15.854059" id="path3" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 18.449043,66.801455 15.999387,59.152914" id="path4" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 18.283146,55.248829 7.859255,-2.473181" id="path5" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 56.167534,82.621119 10.682545,0.694003" id="path6" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 70.641123,80.767361 1.545002,-6.153977" id="path7" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 72.992617,82.933919 7.45618,-1.428263" id="path8" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 85.942581,79.189766 6.5868,-4.655839" id="path9" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 94.691107,69.993444 93.843904,61.802382" id="path10" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 101.67463,23.424538 96.409905,16.889931" id="path11" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 87.368775,37.739529 93.193606,16.889931" id="path12" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="m 108.01314,23.495546 3.10123,-2.97578" id="path13" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path d="M 111.09474,16.996409 97.130542,14.484855" id="path14" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="0.264583px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                  <path id="path23" d="m 17.55883,27.300654 3.75949,-4.048685 m -3.4703,0 3.4703,4.048685" fill="#000000" stroke="black" stroke-width="0.264999" stroke-opacity="1"/>
                  <path id="path23-1" d="m 43.253971,22.124764 3.75949,-4.048685 m -3.4703,0 3.4703,4.048685" fill="#000000" stroke="black" stroke-width="0.264999" stroke-opacity="1"/>
                  <path id="path23-2" d="m 30.698568,29.508321 3.75949,-4.048685 m -3.4703,0 3.4703,4.048685" fill="#000000" stroke="black" stroke-width="0.264999" stroke-opacity="1"/>
                  <path id="path23-7" d="m 61.549937,78.864743 3.75949,-4.048685 m -3.4703,0 3.4703,4.048685" fill="#000000" stroke="black" stroke-width="0.264999" stroke-opacity="1"/>
                  <path id="path23-0" d="m 92.305762,67.937059 3.75949,-4.048685 m -3.4703,0 3.4703,4.048685" fill="#000000" stroke="black" stroke-width="0.264999" stroke-opacity="1"/>
                  <path id="path23-9" d="m 101.96908,17.777553 3.75949,-4.048685 m -3.4703,0 3.4703,4.048685" fill="#000000" stroke="black" stroke-width="0.264999" stroke-opacity="1"/>
                  <path id="path23-3" d="m 87.712632,31.797415 3.75949,-4.048685 m -3.4703,0 3.4703,4.048685" fill="#000000" stroke="black" stroke-width="0.264999" stroke-opacity="1"/>
                  <path id="path23-6" d="m 80.664264,33.713822 3.75949,-4.048685 m -3.4703,0 3.4703,4.048685" fill="#000000" stroke="black" stroke-width="0.264999" stroke-opacity="1"/>
                  <path d="m 20.523483,35.127831 7.399985,13.943877" id="path24" fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
                </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"/> illustrates a network with three pruners running. Two components
            run pruner A and are denoted as A|' and A|'' and one component runs pruner B. Remaining
            three components run a zero-pruner (annotated
            as Z|', Z|'' and Z|'''). CDSes within components are shown by indicating the links that were
            pruned from flooding as crossed out. Additionally, the links that are included
            to connect the CDS of the component following
            <xref target="rules"/> have been made thicker. Despite multiple algorithms and components
            being present in the network, the complete graph is obviously still covered by the involved CDSes.
        </t>
        <t>
            <xref target="example1"/> also illustrates why the overall CDS can easily be  more than just a
            spanning tree of the overall network. A node seeing  its neighbor running another algorithm
            cannot always decide  based  on local knowledge whether the link should be included in
            flooding or not. Such a decision could be based on the overall view of the network using some
            global tie-breaking algorithm.
            However, due to the potential long flooding paths and one-link minimal cuts such an algorithm
            is not considered here but could be proposed in the future.
        </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 pruner except zero-pruner and the absence of this Sub-TLV
                    signifies a node being a 'zero-pruner'.
        </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     |  Version      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
        </figure>
        <ul>
          <li>Type: TBD1</li>
          <li>Length: 2</li>
          <li>Algorithm: 8 bits of a numeric identifier in the range 0 .. 255 that
                        identifies the algorithm used to calculate CDS (flooding
                        topology) of the component.
                        <!--
                        from the IGP Flooding Pruner Registry
                        as assigned per <xref target="IGP_IANA"/>.

                        -->
                    </li>
          <li>Version: 8 bits of the algorithm version. Whether versions of the
                    same algorithm can be considered as the same component by the involved
                    algorithm or not is governed by each algorithm independently. All other algorithms
                    MUST consider the versions of an algorithm as different algorithms for the purpose
                    of <xref target="rules"/>. </li>
        </ul>
      </section>
    </section>
    <!-- 1 -->
        <section title="Security Considerations" toc="default">
      <t>
                This document outlines framework for modifications to an IGP protocol for operation on high density network
                topologies. Implementations SHOULD implement the according cryptographic authentication,
                as described in e.g. <xref target="RFC5304"/>, and should enable other security measures
                in accordance with best common
                practices for the relevant IGP 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 Pruner 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-127: Standardized algorithms assigned in the registry.
                </li>

                <li>
                    128-254: Reserved for experimental purposes.
                </li>

                <li>
                    255: 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: Jordan Head, Acee Lindem, Raj Chetan and Tony Li.
      </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>
