<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-chen-isis-black-hole-avoid-03"
     ipr="trust200902">
  <front>
    <title abbrev="IS-IS Black-Hole Avoiding">Avoiding Traffic Black-Holes for
    Route Aggregation in IS-IS</title>

    <author fullname="Zhe Chen" initials="Z." surname="Chen">
      <organization>Huawei</organization>

      <address>
        <postal>
          <street>No. 156 Beiqing Rd</street>

          <city>Beijing</city>

          <region/>

          <code>100095</code>

          <country>China</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>chenzhe17@huawei.com</email>

        <uri/>
      </address>
    </author>

    <author fullname="Xiaohu Xu" initials="X." surname="Xu">
      <organization>Alibaba</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <region/>

          <code/>

          <country/>
        </postal>

        <phone/>

        <facsimile/>

        <email>xiaohu.xxh@alibaba-inc.com</email>

        <uri/>
      </address>
    </author>

    <author fullname="Dean Cheng" initials="D." surname="Cheng">
      <organization>Huawei</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <region/>

          <code/>

          <country/>
        </postal>

        <phone/>

        <facsimile/>

        <email>dean.cheng@huawei.com</email>

        <uri/>
      </address>
    </author>

    <date day="5" month="September" year="2018"/>

    <abstract>
      <t>When the Intermediate System to Intermediate System (IS-IS) routing
      protocol is adopted by a highly symmetric network such as the Leaf-Spine
      or Fat-Tree network, the Leaf nodes (e.g., Top of Rack switches in
      datacenters) are recommended to be prevented from receiving other
      nodes&rsquo; explicit routes in order to achieve scalability. However,
      such a setup would cause traffic black-holes or suboptimal routing if
      link failure happens in the network. This document introduces INFINITE
      cost to IS-IS LSPs to solve this problem.</t>
    </abstract>

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

  <middle>
    <section title="Introduction">
      <t>When running the Intermediate System to Intermediate System (IS-IS)
      routing protocol in a highly symmetric network such as the Leaf-Spine or
      Fat-Tree network, the Leaf nodes (e.g., Top of Rack switches in
      datacenters) are recommended to be prevented from receiving other
      nodes&rsquo; explicit routes in order to achieve scalability, as
      proposed in [IS-IS-SL-Extension], [IS-IS-Overhead-Reduction], [RIFT],
      and [OpenFabric]. In particular, each Leaf node SHOULD simply maintain a
      default (or aggregated) route (e.g., 0.0.0.0/0) in its routing table, of
      which the next hop SHOULD be an Equal Cost Multi Path (ECMP) group
      including all Spines nodes that the Leaf node connects to. However, such
      a setup would cause traffic black-holes or suboptimal routing if link
      failure happens in the network, since the Leaf nodes are not aware of
      any topology information.</t>

      <t>To solve this problem, this document introduces INFINITE cost to
      IS-IS LSPs. When link failure happens between a Spine node and a Leaf
      node, the Spine node SHOULD advertise all prefixes attached to the Leaf
      node, whose costs SHOULD be set to be INFINITE, to every other Leaf node
      it connects to. On receiving the prefixes (with INFINITE cost), each
      Leaf node SHOULD add the prefixes to its routing table, thus avoiding
      traffic black-holes and suboptimal routing.</t>
    </section>

    <section title="Problem Description">
      <t>This section illustrates why link failure would cause traffic
      black-hole or suboptimal routing when Leaf nodes only maintain default
      (or aggregated) routes.</t>

      <t><figure>
          <artwork><![CDATA[         +--------+          +--------+          +--------+
         | Spine1 |          | Spine2 |          | Spine3 |
         +-+-+-+-++          +-+-+-+-++          +-+-+-+-++
    +------+ | | |             | | | |             | | | |
    | +------|-|-|-------------+ | | |             | | | X
    | | +----|-|-|---------------|-|-|-------------+ | | X
    | | |    | | |        +------+ | |               | | X
    | | |    | | |        | +------|-|---------------+ | |
    | | |    | | |        | |      | |                 | |
    | | |    | | |        | |      | |                 | |
    | | |    | | |        | |      | |         +-------+ +-----+
    | | |    | | |        | |      | +---------|-------------+ |
    | | |    | | |        | |      +---------+ |             | |
    | | |    | | +--------|-|----------------|-|-----------+ | |
    | | |    | +----------|-|--------------+ | |           | | |
    | | |    +----------+ | |              | | |           | | |
  +-+-+-+-+           +-+-+-+-+          +-+-+-+-+       +-+-+-+-+
  | Leaf1 |           | Leaf2 |          | Leaf3 |       | Leaf4 |
  +-------+           +-------+          +-------+       +-------+
                                                          |     |
                                                         ---   ---
                                                     prefixA   prefixB

                    Figure 1: Topology Example

]]></artwork>
        </figure></t>

      <t>Figure 1 shows a Spine-Leaf topology example where Leaf1 to Leaf4 are
      connected to Spine1 to Spine3, and prefixA and prefixB are attached to
      Leaf4. To achieve scalability, as proposed in [IS-IS-SL-Extension],
      [IS-IS-Overhead-Reduction], [RIFT], and [OpenFabric], Leaf1 to Leaf4
      SHOULD NOT receive explict routes from each other nor the Spine nodes.
      Instead, each of them maintains a default (or aggregated) route (e.g.,
      0.0.0.0/0) in the routing table, of which the next hop is an ECMP group
      including Spine1, Spine2, and Spine3. Flows from one Leaf node to
      another are shared among Spine1, Spine2, and Spine3 based on the well
      known 5-tuple hashing.</t>

      <t>However, such a setup would cause traffic black-hole or suboptimal
      routing when link failure happens in the network. For example, if the
      link between Spine3 and Leaf4 is broken, Leaf1, Leaf2, and Leaf3 could
      not get aware of the failure. As a result, these Leaf nodes will still
      send a portion of traffic destined for prefixA or prefixB toward Spine3,
      which makes the traffic be discarded at Spine3, causing traffic
      black-hole. On the other hand, if there are a set of links or a higher
      tier of switches interconnecting Spine1, Spine2, and Spine3, the traffic
      will be steered to other spine nodes or the higher-tier switches by
      Spine3, causing suboptimal routing.</t>

      <t>Therefore, this document introduces INFINITE cost to IS-IS LSPs to
      solve this problem.</t>
    </section>

    <section title="Solution">
      <t>This document introduces the INFINITE cost to IS-IS LSPs, whose value
      is to be determined. When link failure happens between a Spine node and
      a Leaf node, the Spine node SHOULD 1) encode all prefixes attached to
      the Leaf node into the IP Reachability TLV, 2) set the cost of the
      prefixes to be INFINITE, 3) append the IP Reachability TLV to the IS-IS
      LSP, and 4) send the LSP to every other Leaf node it connects to.</t>

      <t>When a Leaf node receives the prefixes (with INFINITE cost)
      advertised by a Spine node, it SHOULD install each of the prefixes into
      its routing table, of which the next hop SHOULD be set an ECMP group
      including all Spine nodes it connects to except the one who advertises
      the prefix.</t>

      <t>For example, if the link between Spine3 and Leaf4 in Figure 1 is
      broken, Spine3 SHOULD advertise prefixA and prefixB to Leaf1, Leaf2, and
      Leaf3, by sending them an IS-IS LSP containing the IP Reachability TLV.
      The cost of prefixA and prefixB SHOULD be set INFINITE. On receiving the
      LSP, Leaf1, Leaf2, and Leaf3 SHOULD install prefixA and prefixB into
      their routing tables, and the next hop of prefixA or prefixB SHOULD be
      set an ECMP group including Spine1 and Spine2. For instance, the routing
      table of Leaf1 before and after the link failure is shown in Figure 2
      and Figure 3, respectively.</t>

      <t>Note that the mechanism described above could achieve minimal
      signaling latency, which helps to avoid black-hole or suboptimal routing
      rapidly when link failure happens.</t>

      <t><figure>
          <artwork><![CDATA[+-----------+-----+---+----+-----+-------+--------------+
|Destination|Proto|Pre|Cost|Flags|NextHop|Interface     |
+-----------+-----+---+----+-----+-------+--------------+
|0.0.0.0/0  |ISIS |15 |20  |D    |Spine1 |Ethernet0/0/0 |
|           |ISIS |15 |20  |D    |Spine2 |Ethernet0/0/1 |
|           |ISIS |15 |20  |D    |Spine3 |Ethernet0/0/2 |
+-----------+-----+---+----+-----+-------+--------------+

  Figure 2: Routing Table of Leaf1 before link failure

]]></artwork>
        </figure></t>

      <t><figure>
          <artwork><![CDATA[+-----------+-----+---+----+-----+-------+--------------+
|Destination|Proto|Pre|Cost|Flags|NextHop|Interface     |
+-----------+-----+---+----+-----+-------+--------------+
|0.0.0.0/0  |ISIS |15 |20  |D    |Spine1 |Ethernet0/0/0 |
|           |ISIS |15 |20  |D    |Spine2 |Ethernet0/0/1 |
|           |ISIS |15 |20  |D    |Spine3 |Ethernet0/0/2 |
+-----------+-----+---+----+-----+-------+--------------+
|prefixA    |ISIS |15 |20  |D    |Spine1 |Ethernet0/0/0 |
|           |ISIS |15 |20  |D    |Spine2 |Ethernet0/0/1 |
+-----------+-----+---+----+-----+-------+--------------+
|prefixB    |ISIS |15 |20  |D    |Spine1 |Ethernet0/0/0 |
|           |ISIS |15 |20  |D    |Spine2 |Ethernet0/0/1 |
+-----------+-----+---+----+-----+-------+--------------+

  Figure 3: Routing Table of Leaf1 after link failure

]]></artwork>
        </figure></t>

      <t/>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>TBD.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>TBD.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>TBD.</t>
    </section>
  </middle>

  <back>
    <references title="References">
      <?rfc include="reference.RFC.2119"?>

      <reference anchor="RFC1195">
        <front>
          <title>Use of OSI IS-IS for Routing in TCP/IP and Dual
          Environments</title>

          <author fullname="Ross Callon" initials="R." surname="Callon">
            <organization>asdasa</organization>
          </author>

          <date day="" month="December" year="1990"/>
        </front>

        <seriesInfo name="RFC 1195" value=""/>
      </reference>

      <reference anchor="IS-IS-SL-Extension">
        <front>
          <title>IS-IS Routing for Spine-Leaf Topology</title>

          <author fullname="Naiming Shen" initials="N." surname="Shen">
            <organization/>
          </author>

          <author fullname="Les Ginsberg" initials="L." surname="Ginsberg">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <author fullname="Sanjay Thyamagundalu" initials="S."
                  surname="Thyamagundalu">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <date day="18" month="June" year="2018"/>
        </front>

        <seriesInfo name="draft-shen-isis-spine-leaf-ext-06 (work in progress)"
                    value=""/>
      </reference>

      <reference anchor="IS-IS-Overhead-Reduction">
        <front>
          <title>Overheads Reduction for IS-IS Enabled Spine-Leaf
          Networks</title>

          <author fullname="Zhe Chen" initials="Z." surname="Chen">
            <organization/>
          </author>

          <author fullname="Xiaohu Xu" initials="X." surname="Xu">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <author fullname="Dean Cheng" initials="D." surname="Cheng">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <date day="5" month="March" year="2018"/>
        </front>

        <seriesInfo name="draft-chen-isis-sl-overheads-reduction-03 (work in progress)"
                    value=""/>
      </reference>

      <reference anchor="RIFT">
        <front>
          <title>RIFT: Routing in Fat Trees</title>

          <author fullname="Tony Przygienda" initials="T."
                  surname="Przygienda">
            <organization/>
          </author>

          <author fullname="Alankar Sharma" initials="A." surname="Sharma">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <author fullname="John Drake" initials="J." surname="Drake">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <author fullname="Alia Atlas" initials="A." surname="Atlas">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <date day="22" month="June" year="2018"/>
        </front>

        <seriesInfo name="draft-ietf-rift-rift-02 (work in progress)" value=""/>
      </reference>

      <reference anchor="OpenFabric">
        <front>
          <title>IS-IS Support for Openfabric</title>

          <author fullname="Russ White" initials="R." surname="White">
            <organization/>
          </author>

          <author fullname="Shawn Zandi" initials="S." surname="Zandi">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <date day="15" month="June" year="2018"/>
        </front>

        <seriesInfo name="draft-white-openfabric-06 (work in progress)"
                    value=""/>
      </reference>

      <reference anchor="RFC5305">
        <front>
          <title>IS-IS Extensions for Traffic Engineering</title>

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

          <author fullname="Henk Smit" initials="H." surname="Smit">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <date day="1" month="October" year="2008"/>
        </front>

        <seriesInfo name="RFC 5305" value=""/>
      </reference>
    </references>
  </back>
</rfc>
