[Rift] AD Review of draft-ietf-rift-rift-12 (Part 1)
Alvaro Retana <aretana.ietf@gmail.com> Fri, 15 January 2021 19:56 UTC
Return-Path: <aretana.ietf@gmail.com>
X-Original-To: rift@ietfa.amsl.com
Delivered-To: rift@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 5F98A3A1132; Fri, 15 Jan 2021 11:56:39 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.097
X-Spam-Level:
X-Spam-Status: No, score=-2.097 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id RQkL4Ilubawc; Fri, 15 Jan 2021 11:56:34 -0800 (PST)
Received: from mail-ed1-x532.google.com (mail-ed1-x532.google.com [IPv6:2a00:1450:4864:20::532]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 592F53A112A; Fri, 15 Jan 2021 11:56:30 -0800 (PST)
Received: by mail-ed1-x532.google.com with SMTP id u19so10889280edx.2; Fri, 15 Jan 2021 11:56:30 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:mime-version:date:message-id:subject:to:cc :content-transfer-encoding; bh=bRvUYpkjjueg06PJJx1INOSUyP7jSvHnAMFKJiucOAY=; b=X0j0ci2o+O0eDK/WNPQuw0rILLc+RnELbFRCyJIYVSg7JEbBxoh/jWxu7Ez8wZh2Vb YjZnBwNortz4RnUfxMYe9Y20G2/g/hNXG2MXk8XSQ/mJPIBQ8tVgFxrzS4rRqX2uDZQZ RgzDYBsSqF0Jj+P5V0QD+Vao1rBCGGGO8OAAL6PezFs93fVr76fNe0xzp3RnhjS6hrDn NXcIJKDyFYNWAKhZnKhfuKFzUrLB2d8t4PmKxmwlb44Jj4PV4HxAWPj5cq3awFkyv/du PXEH3L9+PocwsPSCigFnem5V+ApXNObgUw+zZBannKlqdiDeQcZwY1Hq71VYm6RwfdPk T7nQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:mime-version:date:message-id:subject:to:cc :content-transfer-encoding; bh=bRvUYpkjjueg06PJJx1INOSUyP7jSvHnAMFKJiucOAY=; b=EaiGxlvdCSLOjy2F8+8YdOAiRzRq+hK1bSIbZu0yMlCSyfJDKd3M+zm6VRkTSVeJvd 8rDQTWyjn6zNvzIyfOZkNKots1UG5pmGLeZmy/7BHBJoAnAclH58d6xqMEJm2OLsMTl0 dbONgxbxEinyK6SCgoENUyn9V6PpgAJLB+w2dSZUmx+NY1MhBrI7lUkSdIzjJ1bGch2q bh1JRjfY3HiozLral3pXCOkrnLQTabiWITMxKrV4Og/hOCZgOFrnAa7JnluKQxWNf2Tt WVIcNA7QEqnWarREg2q+QkunoR01jYKT4ZZ3kQrLhrZN4mBgU5rJzcDMj31RRbs8I0DX TS3g==
X-Gm-Message-State: AOAM532zoYBh1RRAP8+xvkNlJq5kvLDxjukbPBzeFwhk40qY6W4EMMHE jf4RKJ1kkdv4nHahCGxyAIyfaiM0A7CvXm7Fh3rC+34H9lY=
X-Google-Smtp-Source: ABdhPJwsg0yuTLlTJhmBaggxEqWF6nB26ZFQuhsfkPpKkIUgHIDqIfJWhEd4L1ZwEzgEa/4OytFI30xT9PNdaWZ+xvg=
X-Received: by 2002:aa7:da03:: with SMTP id r3mr10874858eds.155.1610740586588; Fri, 15 Jan 2021 11:56:26 -0800 (PST)
Received: from 1058052472880 named unknown by gmailapi.google.com with HTTPREST; Fri, 15 Jan 2021 11:56:25 -0800
From: Alvaro Retana <aretana.ietf@gmail.com>
MIME-Version: 1.0
Date: Fri, 15 Jan 2021 11:56:25 -0800
Message-ID: <CAMMESsxTQnUDMGRiLPhB+Ci090xkE7Ea9HLC8E4SLQ7rv+qFnQ@mail.gmail.com>
To: "draft-ietf-rift-rift@ietf.org" <draft-ietf-rift-rift@ietf.org>
Cc: zhang.zheng@zte.com.cn, "rift-chairs@ietf.org" <rift-chairs@ietf.org>, "rift@ietf.org" <rift@ietf.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/rift/yTujeIBGVuYcQMgnpTvVN_qPW9Y>
Subject: [Rift] AD Review of draft-ietf-rift-rift-12 (Part 1)
X-BeenThere: rift@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Discussion of Routing in Fat Trees <rift.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/rift>, <mailto:rift-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/rift/>
List-Post: <mailto:rift@ietf.org>
List-Help: <mailto:rift-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/rift>, <mailto:rift-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 15 Jan 2021 19:56:40 -0000
Dear authors: This is Part 1 of my review of this document. Given that it is so long, in order to make progress and not completely block the rest of my publication queue [1], I decided to provide comments in parts. Please address each set of comments as you can and update the document accordingly -- I also expect a reply to this message, especially to any points/comments that you might not agree with or want to discuss further. That will make my review of any changes easier/faster. I will wait for a reply before looking at any document updates. OTOH, even while interleaving my reading with other documents, I won't wait for each part to be addressed before starting on the next one. But I may return to parts I've already reviewed as I get further into the document. Part 1 includes the introductory text through the end of §4.1 (Overview). While I appreciate the overview of the topologies and the protocol, I think that this extended introductory material is at times too long/wordy and complex (for the average reader, sometimes being forced to make assumptions or jump ahead), but also incomplete. To be more specific: - The description of the general topology (§4.1.2) gets in to significant detail and complexity, including the way in which the concepts are depicted in the figures. (ASCII art is not the best, you might want to take advantage of using SVI.) I noticed that none of the figures/sections in §4.1.2 are referenced elsewhere (but the simple Figures 2 and 3 are), which makes me think about the value of the in-depth treatment if it will not be explicitly considered later on. In several places I was under the impression that a DC design guide was being presented. Which brings up the question: does RIFT require the topologies to be exactly as the ones described to operate correctly? - My main expectation of the overview was to get a high-level idea of the operation of RIFT, but that is not done there. Besides a quick mention in §4.1.1 and some text in the introduction, the focus of the overview is on fallen leaves/dissaggregation. I understand that may be a significant issue/feature, but it shouldn't be the dominating topic in the overview. Maybe some of the other pieces are more "well-known" (neighbor discovery, flooding, etc.), but even ZTP (even if optional) is not mentioned. In general, I don't think that the deep-/complex treatment is necessary. You may still decide to keep it (see specific comments inline below), but I think it will represent a significant distraction for other reviewers. Thanks! Alvaro. [1] https://datatracker.ietf.org/doc/ad/alvaro.retana [Line numbers from idnits.] ... 17 Abstract 19 This document defines a specialized, dynamic routing protocol for 20 Clos and fat-tree network topologies optimized towards minimization 21 of configuration and operational complexity. The protocol [opinion] While this is a nice Abstract, I think that it is too long and is not completely reflected in the Introduction. Personally, I consider the first paragraph enough for an Abstract. It would be very nice if the list below was instead moved to the Introduction with pointers to where these protocol characteristics are specified/explained. 23 o deals with no configuration, fully automated construction of fat- 24 tree topologies based on detection of links, 26 o minimizes the amount of routing state held at each level, 28 o automatically prunes and load balances topology flooding exchanges 29 over a sufficient subset of links, 31 o supports automatic disaggregation of prefixes on link and node 32 failures to prevent black-holing and suboptimal routing, 34 o allows traffic steering and re-routing policies, 36 o allows loop-free non-ECMP forwarding, 38 o automatically re-balances traffic towards the spines based on 39 bandwidth available and finally 41 o provides mechanisms to synchronize a limited key-value data-store 42 that can be used after protocol convergence to e.g. bootstrap 43 higher levels of functionality on nodes. ... 77 Table of Contents 79 1. Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 80 2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 6 81 2.1. Requirements Language . . . . . . . . . . . . . . . . . . 8 82 3. Reference Frame . . . . . . . . . . . . . . . . . . . . . . . 8 83 3.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 8 84 3.2. Topology . . . . . . . . . . . . . . . . . . . . . . . . 13 85 4. RIFT: Routing in Fat Trees . . . . . . . . . . . . . . . . . 15 86 4.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 16 87 4.1.1. Properties . . . . . . . . . . . . . . . . . . . . . 16 88 4.1.2. Generalized Topology View . . . . . . . . . . . . . . 17 89 4.1.2.1. Terminology . . . . . . . . . . . . . . . . . . . 17 90 4.1.2.2. Clos as Crossed Crossbars . . . . . . . . . . . . 18 91 4.1.3. Fallen Leaf Problem . . . . . . . . . . . . . . . . . 28 92 4.1.4. Discovering Fallen Leaves . . . . . . . . . . . . . . 30 93 4.1.5. Addressing the Fallen Leaves Problem . . . . . . . . 31 94 4.2. Specification . . . . . . . . . . . . . . . . . . . . . . 32 95 4.2.1. Transport . . . . . . . . . . . . . . . . . . . . . . 33 96 4.2.2. Link (Neighbor) Discovery (LIE Exchange) . . . . . . 33 97 4.2.2.1. LIE FSM . . . . . . . . . . . . . . . . . . . . . 36 [nit] I don't think we need all this detail in the TOC. Maybe limiting the entries to 2 or 3 levels is enough (e.g. 4.2 or 4.2.2). ... 256 1. Authors 258 This work is a product of a list of individuals which are all to be 259 considered major contributors independent of the fact whether their 260 name made it to the limited boilerplate author's list or not. [minor] Please move this section to one called "Contributors" and place it after the Acknowledgments. Only the people not on the front page should be listed there. https://tools.ietf.org/html/rfc7322#section-4.11 ... 273 2. Introduction 275 Clos [CLOS] and Fat-Tree [FATTREE] topologies have gained prominence 276 in today's networking, primarily as result of the paradigm shift 277 towards a centralized data-center based architecture that is poised 278 to deliver a majority of computation and storage services in the 279 future. Today's current routing protocols were geared towards a 280 network with an irregular topology and low degree of connectivity 281 originally but given they were the only available options, 282 consequently several attempts to apply those protocols to Clos have 283 been made. Most successfully BGP [RFC4271] [RFC7938] has been 284 extended to this purpose, not as much due to its inherent suitability 285 but rather because the perceived capability to easily modify BGP and 286 the immanent difficulties with link-state [DIJKSTRA] based protocols 287 to optimize topology exchange and converge quickly in large scale 288 densely meshed topologies. The incumbent protocols precondition 289 normally extensive configuration or provisioning during bring up and 290 re-dimensioning. This tends to be viable only for a set of 291 organizations with according networking operation skills and budgets. 292 For many IP fabric builders a desirable protocol would be one that 293 auto-configures itself and deals with failures and mis-configurations 294 with a minimum of human intervention only. Such a solution would 295 allow local IP fabric bandwidth to be consumed in a 'standard 296 component' fashion, i.e. provision it much faster and operate it at 297 much lower costs than today, much like compute or storage is consumed 298 already. [nit] s/Fat-Tree/Fat Tree/g To be consistent with the terminology section. ... 318 For the visually oriented reader, Figure 1 presents a first level 319 simplified view of the resulting information and routes on a RIFT 320 fabric. The top of the fabric is holding in its link-state database 321 the nodes below it and the routes to them. In the second row of the 322 database table we indicate that partial information of other nodes in 323 the same level is available as well. The details of how this is 324 achieved will be postponed for the moment. When we look at the 325 "bottom" of the fabric, the leaves, we see that the topology is 326 basically empty and they only hold a load balanced default route to 327 the next level under normal conditions. [nit] s/holding...the nodes below/holding...information about the nodes below [style nit] Some portions of the text are written in first person ("we indicate"). Personally, in this type of documents I prefer to not see that treatment ("the table indicates"). This is just a personal preference, a nit. No need to take any action -- unless you really want to. ;-) [minor] "details of how this is achieved will be postponed for the moment." Sure, this is just the Introduction. A pointer to where the details are would be very nice. [nit] s/and they only hold a load balanced default route to the next level under normal conditions./and, under normal conditions, they only hold a load balanced default route to the next level. 329 The balance of this document details a dedicated IP fabric routing 330 protocol, fills in the specification details and ultimately includes 331 resulting security considerations. [] As I mentioned above, moving the list from the Abstract to the Introduction would be beneficial. Given that this is a long document, providing some type of roadmap/reader's guide (based on that list, for example) would be great! ... 357 2.1. Requirements Language 359 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 360 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 361 document are to be interpreted as described in RFC 8174 [RFC8174]. [major] Use the template exactly as written in rfc8174. 363 3. Reference Frame 365 3.1. Terminology [minor] Where possible/appropriate, please add forward references to the sections where the terms are further specified. 367 This section presents the terminology used in this document. It is 368 assumed that the reader is thoroughly familiar with the terms and 369 concepts used in OSPF [RFC2328] and IS-IS [ISO10589-Second-Edition], 370 [ISO10589] as well as the according graph theoretical concepts of 371 shortest path first (SPF) [DIJKSTRA] computation and DAGs. [minor] The two references to ISO10589 look the same to me. Do we need both? ... 383 Directed Acyclic Graph (DAG): A finite directed graph with no 384 directed cycles (loops). If links in Clos are considered as 385 either being all directed towards the top or vice versa, each of 386 such two graphs is a DAG. [nit] s/in Clos/in a Clos 388 Folded Spine-and-Leaf: In case Clos fabric input and output stages 389 are analogous, the fabric can be "folded" to build a "superspine" 390 or top which we will call Top of Fabric (ToF) in this document. [nit] s/In case Clos/In case the Clos [minor] This term is only used in this section. Does it really need to be defined? I'm wondering if the terminology can be simplified. ... 401 Superspine vs. Aggregation and Spine vs. Edge/Leaf: 402 Traditional level names in 5-stages folded Clos for Level 2, 1 and 403 0 respectively. We normalize this language to talk about top-of- 404 fabric (ToF), top-of-pod (ToP) and leaves. [minor] Instead of adding an entry (even if the name uses "vs.", it is not a comparison) for these names just to reference the normalized names, which are also defined later, just mention these traditional names in those entries. 406 Zero Touch Provisioning (ZTP): Optional RIFT mechanism which allows 407 to derive node levels automatically based on minimum configuration 408 (only ToF property has to be provisioned on according nodes). [?] I can't parse the text in parenthesis. 410 Point of Delivery (PoD): A self-contained vertical slice or subset 411 of a Clos or Fat Tree network containing normally only level 0 and 412 level 1 nodes. A node in a PoD communicates with nodes in other 413 PoDs via the Top-of-Fabric. We number PoDs to distinguish them 414 and use PoD #0 to denote "undefined" PoD. [minor] "level 0 and level 1" The definition of level doesn't mention numbers -- maybe add something there to point at the fact that level 0 and a leaf are equivalent (position-wise). ... 429 Leaf: A node without southbound adjacencies. Its level is 0 (except 430 cases where it is deriving its level via ZTP and is running 431 without LEAF_ONLY which will be explained in Section 4.2.7). [minor] s/(except...Section 4.2.7)./(see Section 4.2.7). 433 Top-of-fabric Plane or Partition: In large fabrics top-of-fabric 434 switches may not have enough ports to aggregate all switches south 435 of them and with that, the ToF is 'split' into multiple 436 independent planes. Introduction and Section 4.1.2 explains the 437 concept in more detail. A plane is subset of ToF nodes that see 438 each other through south reflection or E-W links. [minor] "Introduction..." I didn't see related text there. [nit] s/is subset/is a subset 440 Radix: A radix of a switch is basically number of switching ports it 441 provides. It's sometimes called fanout as well. [nit] s/A radix of a switch is basically number of switching ports it provides./The number of switching ports it provides. ... 460 East-West Link: A link between two nodes at the same level. East- 461 West links are normally not part of Clos or "fat-tree" topologies. [minor] s/East-West Link/East-West (E-W) Link [minor] "...normally not part of Clos or "fat-tree" topologies." But they are used by RIFT in several places. To avoid confusion maybe the last sentence is not needed. ... 476 South Reflection: Often abbreviated just as "reflection" it defines 477 a mechanism where South Node TIEs are "reflected" from the level 478 south back up north to allow nodes in the same level without E-W 479 links to "see" each other's node TIEs. [nit] s/"reflection" it/"reflection", it [minor] Please expand TIE. I know the definition is in the very next paragraph, but it is good practice to expand on first use. ... 490 Node TIE: This stands as acronym for a "Node Topology Information 491 Element" that contains all adjacencies the node discovered and 492 information about node itself. Node TIE should NOT be confused 493 with a North TIE since "node" defines the type of TIE rather than 494 its direction. [nit] s/This stands as acronym for a "Node Topology Information Element" that contains/An acronym for a "Node Topology Information Element", which contains [nit] s/about node/about the node [minor] s/NOT/not/g This is not one of the rfc2119 keywords, so it should not be capitalized. I know you're doing it for emphasis, but it will be eventually changed -- so let's take care of it now. ... 501 Key Value TIE: A South TIE that is carrying a set of key value pairs 502 [DYNAMO]. It can be used to distribute information in the 503 southbound direction within the protocol. [minor] "Key Value TIE" is not used anywhere else in the document. Also, the definition talks about a South TIE carrying (only? -- that's what the definition sounds like) key value pairs...but §4.2.3.2 mentions other information and even North TIEs carrying key value pairs. 505 TIDE: Topology Information Description Element, equivalent to CSNP 506 in ISIS. [minor] Please expand CSNP. 508 TIRE: Topology Information Request Element, equivalent to PSNP in 509 ISIS. It can both confirm received and request missing TIEs. [minor] Please expand PSNP. 511 De-aggregation/Disaggregation: Process in which a node decides to 512 advertise more specific prefixes Southwards, either positively to 513 attract the corresponding traffic, or negatively to repel it. 514 Disaggregation is performed to prevent black-holing and suboptimal 515 routing to the more specific prefixes. [nit] "De-aggregation/Disaggregation" It would be very nice if you settled on one word. Disaggregation seems to be used the most, but dis-aggregation also shows up a couple of times. ... 521 Flood Repeater (FR): A node can designate one or more northbound 522 neighbor nodes to be flood repeaters. The flood repeaters are 523 responsible for flooding northbound TIEs further north. They are 524 similar to MPR in OSLR. The document sometimes calls them flood 525 leaders as well. [minor] Please expand both MPR and OLSR. [minor] Also, please add a reference. I see that MPR/OLSR are only mentioned once more (§4.2.3.9), and wonder if we even need to make reference to them. The first paragraph in §4.2.3.9 already pretty much covers the intent of an MPR. 527 Bandwidth Adjusted Distance (BAD): Each RIFT node can calculate the 528 amount of northbound bandwidth available towards a node compared 529 to other nodes at the same level and can modify the route distance 530 accordingly to allow for the lower level to adjust their load 531 balancing towards spines. [minor] A reference to §4.3.6.1 would be very nice. 533 Overloaded: Applies to a node advertising `overload` attribute as 534 set. The semantics closely follow the meaning of the same 535 attribute in [ISO10589-Second-Edition]. [nit] s/advertising `overload` attribute/advertising the `overload` attribute [minor] There is no overload attribute in ISO10589, just an Overload Bit. Also, §4.3.1 (please add a reference) calls it the overload bit. ... 540 Three-Way Adjacency: RIFT tries to form a unique adjacency over an 541 interface and exchange local configuration and necessary ZTP 542 information. An adjacency is only advertised in node TIEs and 543 used for computations after it achieved three-way state, i.e. both 544 routers reflected each other in LIEs including relevant security 545 information. LIEs before three-way state is reached may carry ZTP 546 related information already. [minor] s/tries to form a unique adjacency/forms a unique adjacency [nit] s/and exchange local/and exchanges local [nit] s/after it achieved three-way state/after the three-way state is achieved [minor] Note that three-way, threeway and three way are all used in different places. Please be consistent. ... 554 Neighbor: Once a three-way adjacency has been formed a neighborship 555 relationship contains the neighbor's properties. Multiple 556 adjacencies can be formed to a remote node via parallel interfaces 557 but such adjacencies are NOT sharing a neighbor structure. Saying 558 "neighbor" is thus equivalent to saying "a three-way adjacency". [] How is load balancing achieved through parallel links between the same pair of routers? Just putting this comment here so I don't forget it later. ... 566 Shortest-Path First (SPF): A well-known graph algorithm attributed 567 to Dijkstra that establishes a tree of shortest paths from a 568 source to destinations on the graph. We use SPF acronym due to 569 its familiarity as general term for the node reachability 570 calculations RIFT can employ to ultimately calculate routes of 571 which Dijkstra algorithm is one. 573 North SPF (N-SPF): A reachability calculation that is progressing 574 northbound, as example SPF that is using South Node TIEs only. 575 Normally it progresses a single hop only and installs default 576 routes. 578 South SPF (S-SPF): A reachability calculation that is progressing 579 southbound, as example SPF that is using North Node TIEs only. [minor] Please add a reference to where the specific algorithm used by RIFT is specified. ... 585 3.2. Topology 586 ^ N +--------+ +--------+ 587 Level 2 | |ToF 21| |ToF 22| 588 E <-*-> W ++-+--+-++ ++-+--+-++ 589 | | | | | | | | | 590 S v P111/2 P121/2 | | | | 591 ^ ^ ^ ^ | | | | 592 | | | | | | | | 593 +--------------+ | +-----------+ | | | +---------------+ 594 | | | | | | | | 595 South +-----------------------------+ | | ^ 596 | | | | | | | All TIEs 597 0/0 0/0 0/0 +-----------------------------+ | 598 v v v | | | | | 599 | | +-+ +<-0/0----------+ | | 600 | | | | | | | | 601 +-+----++ optional +-+----++ ++----+-+ ++-----++ 602 Level 1 | | E/W link | | | | | | 603 |Spin111+----------+Spin112| |Spin121| |Spin122| 604 +-+---+-+ ++----+-+ +-+---+-+ ++---+--+ 605 | | | South | | | | 606 | +---0/0--->-----+ 0/0 | +----------------+ | 607 0/0 | | | | | | | 608 | +---<-0/0-----+ | v | +--------------+ | | 609 v | | | | | | | 610 +-+---+-+ +--+--+-+ +-+---+-+ +---+-+-+ 611 Level 0 | | (L2L) | | | | | | 612 |Leaf111+~~~~~~~~~~+Leaf112| |Leaf121| |Leaf122| 613 +-+-----+ +-+---+-+ +--+--+-+ +-+-----+ 614 + + \ / + + 615 Prefix111 Prefix112 \ / Prefix121 Prefix122 616 multi-homed 617 Prefix 618 +---------- PoD 1 ---------+ +---------- PoD 2 ---------+ 620 Figure 2: A Three Level Spine-and-Leaf Topology 621 .+--------+ +--------+ +--------+ +--------+ 622 .|ToF A1| |ToF B1| |ToF B2| |ToF A2| 623 .++-+-----+ ++-+-----+ ++-+-----+ ++-+-----+ 624 . | | | | | | | | 625 . | | | | | +---------------+ 626 . | | | | | | | | 627 . | | | +-------------------------+ | 628 . | | | | | | | | 629 . | +-----------------------+ | | | | 630 . | | | | | | | | 631 . | | +---------+ | +---------+ | | 632 . | | | | | | | | 633 . | +---------------------------------+ | | 634 . | | | | | | | | 635 .++-+-----+ ++-+-----+ +--+-+---+ +----+-+-+ 636 .|Spine111| |Spine112| |Spine121| |Spine122| 637 .+-+---+--+ ++----+--+ +-+---+--+ ++---+---+ 638 . | | | | | | | | 639 . | +--------+ | | +--------+ | 640 . | | | | | | | | 641 . | -------+ | | | +------+ | | 642 . | | | | | | | | 643 .+-+---+-+ +--+--+-+ +-+---+-+ +---+-+-+ 644 .|Leaf111| |Leaf112| |Leaf121| |Leaf122| 645 .+-------+ +-------+ +-------+ +-------+ 647 Figure 3: Topology with Multiple Planes 649 We will use topology in Figure 2 (called commonly a fat tree/network 650 in modern IP fabric considerations [VAHDAT08] as homonym to the 651 original definition of the term [FATTREE]) in all further 652 considerations. This figure depicts a generic "single plane fat- 653 tree" and the concepts explained using three levels apply by 654 induction to further levels and higher degrees of connectivity. 655 Further, this document will deal also with designs that provide only 656 sparser connectivity and "partitioned spines" as shown in Figure 3 657 and explained further in Section 4.1.2. [minor] The first sentence introduces another source to define fat tree, which is not mentioned in the Introduction nor in the Terminology. This is not a huge deal, but it would be nice to keep consistency throughout. IOW, include the new reference somewhere in the first couple of sections, settle on one, or simply just don't add a new reference. [minor] For completeness, it would be nice to explain that the figures are incomplete: for example, Figure 2 shows only some of the TIEs, Figure 3 shows none of them, etc... [] BTW, SVI graphics are now supported in xmltorfcv3. Some of the figures might be easier to visualize that way than using ASCII art. 659 4. RIFT: Routing in Fat Trees 661 We present here a detailed outline of a protocol optimized for 662 Routing in Fat Trees (RIFT) that in most abstract terms has many 663 properties of a modified link-state protocol 664 [RFC2328][ISO10589-Second-Edition] when distributing information 665 northbound and distance vector [RFC4271] protocol when distributing 666 information southbound. While this is an unusual combination, it 667 does quite naturally exhibit the desirable properties we seek. [minor] s/detailed outline/detailed specification [nit] s/and distance vector/and a distance vector [] The references to OSPF/ISIS/BGP seem superfluous because those documents don't define generic link-state or distance vector protocols -- in fact, many would argue that BGP is a path vector protocol. Just my opinion. I would be very happy if the references are not included. I wonder if there are generic references that can be used instead of specific ones (for information purposes). 669 4.1. Overview 671 4.1.1. Properties 673 The most singular property of RIFT is that it floods flat link-state 674 information northbound only so that each level obtains the full 675 topology of levels south of it. Link-State information is, with some 676 exceptions, never flooded East-West or back South again. Exceptions 677 like south reflection is explained in detail in Section 4.2.5.1 and 678 east-west flooding at ToF level in multi-plane fabrics is outlined in 679 Section 4.1.2. In southbound direction, the protocol operates like a 680 "fully summarizing, unidirectional" path vector protocol or rather a 681 distance vector with implicit split horizon. Routing information, 682 normally just the default route, propagates one hop south and is 're- 683 advertised' by nodes at next lower level. However, RIFT uses 684 flooding in the southern direction as well to avoid the overhead of 685 building an update per adjacency. We omit describing the East-West 686 direction for the moment. [minor] What is "flat link-state information"? It looks like this is the only place where "flat" is used. Maybe s/flat/ [nit] s/In southbound direction/In the southbound direction [] "...the protocol operates like a "fully summarizing, unidirectional" path vector protocol or rather a distance vector with implicit split horizon." I hope that the operation is specified elsewhere, and that the document doesn't depend on these descriptions. Personal opinion: simple and direct language may serve you better. 688 Those information flow constraints create not only an anisotropic 689 protocol (i.e. the information is not distributed "evenly" or 690 "clumped" but summarized along the N-S gradient) but also a "smooth" 691 information propagation where nodes do not receive the same 692 information from multiple directions at the same time. Normally, 693 accepting the same reachability on any link, without understanding 694 its topological significance, forces tie-breaking on some kind of 695 distance metric. And such tie-breaking leads ultimately in hop-by- 696 hop forwarding to shortest paths only. In contrast to that, RIFT, 697 under normal conditions, does not need to tie-break same reachability 698 information from multiple directions. Its computation principles 699 (south forwarding direction is always preferred) leads to valley-free 700 forwarding behavior. And since valley free routing is loop-free, it 701 can use all feasible paths which is another highly desirable property 702 if available bandwidth should be utilized to the maximum extent 703 possible. [] "anisotropic" This is my word of the day. I learned a new one! :-) [nit] s/tie-break same/tie-break the same [minor] "valley-free" Reference? 705 To account for the "northern" and the "southern" information split 706 the link state database is partitioned accordingly into "north 707 representation" and "south representation" TIEs. In simplest terms 708 the North TIEs contain a link state topology description of lower 709 levels and and South TIEs carry simply default routes towards the 710 level above. This oversimplified view will be refined gradually in 711 following sections while introducing protocol procedures and state 712 machines at the same time. [nit] s/in following/in the following 714 4.1.2. Generalized Topology View 716 This section will shed some light on the topologies RIFT addresses, 717 including multi plane fabrics and their implications. Readers that 718 are only interested in single plane designs, i.e. all top-of-fabric 719 nodes being topologically equal and initially connected to all the 720 switches at the level below them, can skip the rest of Section 4.1.2 721 and resulting Section 4.2.5.2 as well. [minor] "Readers...can skip the rest of Section 4.1.2 and resulting Section 4.2.5.2 as well." I can see how a reader can skip a part of the overview, but §4.2* is where the specification is. Are you saying that §4.2.5.2 doesn't have to be implemented/supported in some cases? Are there other sections that are also not needed in some cases? Does this result in the ability to implement subsets of RIFT to support specific topologies? Where is that discussed? ... 737 4.1.2.1. Terminology ... 746 K: Denotes the number of ports in radix of a switch pointing north or 747 south. Further, K_LEAF denotes number of ports pointing south, 748 i.e. towards leaves, and K_TOP for number of ports pointing north 749 towards a higher spine level. To simplify the visual aids, 750 notations and further considerations, K will be mostly set to 751 Radix/2. [minor] Radix is defined in §3.1 as the number of ports. s/Denotes the number of ports in radix of a switch/Denotes the radix of a switch ... 757 N: Denote the number of independent ToF planes in a topology. [nit] s/Denote/Denotes ... 766 4.1.2.2. Clos as Crossed Crossbars 768 The typical topology for which RIFT is defined is built of P number 769 of PoDs and connected together by S number of ToF nodes. A PoD node 770 has K number of ports (also called Radix). We consider half of them 771 (K=Radix/2) as connecting host devices from the south, and the other 772 half connecting to interleaved PoD Top-Level switches to the north. 773 Ratio K can be chosen differently without loss of generality when 774 port speeds differ or the fabric is oversubscribed but K=R/2 allows 775 for more readable representation whereby there are as many ports 776 facing north as south on any intermediate node. We represent a node 777 hence in a schematic fashion with ports "sticking out" to its north 778 and south rather than by the usual real-world front faceplate designs 779 of the day. [nit] s/Ratio K can be chosen differently/The K ratio can be chosen differently [minor] "K=R/2" R is defined in §4.1.2.1 as the redundancy, not the radix. 781 Figure 4 provides a view of a leaf node as seen from the north, i.e. 782 showing ports that connect northbound. For lack of a better symbol, 783 we have chosen to use the "o" as ASCII visualisation of a single 784 port. In this example, K_LEAF has 6 ports. Observe that the number 785 of PoDs is not related to Radix unless the ToF Nodes are constrained 786 to be the same as the PoD nodes in a particular deployment. [minor] "showing ports that connect northbound...K_LEAF has 6 ports" The ports that connect north are K_TOP. 788 Top view 789 +---+ 790 | | 791 | o | e.g., Radix = 12, K_LEAF = 6 792 | | 793 | o | 794 | | ------------------------- 795 | o ------- Physical Port (Ethernet) ----+ 796 | | ------------------------- | 797 | o | | 798 | | | 799 | o | | 800 | | | 801 | o | | 802 | | | 803 +---+ | 805 || || || || || || || 806 +----+ +------------------------------------------------+ 807 | | | | 808 +----+ +------------------------------------------------+ 809 || || || || || || || 810 Side views 812 Figure 4: A Leaf Node, K_LEAF=6 814 The Radix of a PoD's top node may be different than that of the leaf 815 node. Though, more often than not, a same type of node is used for 816 both, effectively forming a square (K*K). In general case, we could 817 have switches with K_TOP southern ports on nodes at the top of the 818 PoD which are not necessarily the same as K_LEAF. For instance, in 819 the representations below, we pick a 6 port K_LEAF and a 8 port 820 K_TOP. In order to form a crossbar, we need K_TOP Leaf Nodes as 821 illustrated in Figure 5. [nit] s/In general case/In the general case [minor] "K_TOP southern ports" Aren't K_TOP the ports pointing north? The description is confusing because the terminology from the last section is not used in the same way -- the description mixes the terminology with the number represented. For example, "K_TOP Leaf Nodes" doesn't make sense if the terminology is strictly applied, where K_TOP is the "number of ports pointing north". Also (if I understood Figure 4 correctly), each node below has 6 K_TOP ports -- presumably the node at the top has 8 K_LEAF ports. 823 +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ 824 | | | | | | | | | | | | | | | | 825 | o | | o | | o | | o | | o | | o | | o | | o | 826 | | | | | | | | | | | | | | | | 827 | o | | o | | o | | o | | o | | o | | o | | o | 828 | | | | | | | | | | | | | | | | 829 | o | | o | | o | | o | | o | | o | | o | | o | 830 | | | | | | | | | | | | | | | | 831 | o | | o | | o | | o | | o | | o | | o | | o | 832 | | | | | | | | | | | | | | | | 833 | o | | o | | o | | o | | o | | o | | o | | o | 834 | | | | | | | | | | | | | | | | 835 | o | | o | | o | | o | | o | | o | | o | | o | 836 | | | | | | | | | | | | | | | | 837 +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ 839 Figure 5: Southern View of a PoD, K_TOP=8 841 As further visualized in Figure 6 the K_TOP Leaf Nodes are fully 842 interconnected with the K_LEAF PoD-top nodes, providing connectivity 843 that can be represented as a crossbar when "looked at" from the 844 north. The result is that, in the absence of a failure, a packet 845 entering the PoD from the north on any port can be routed to any port 846 in the south of the PoD and vice versa. And that is precisely why it 847 makes sense to talk about a "switching matrix". [minor] "K_TOP Leaf Nodes are fully interconnected with the K_LEAF PoD-top nodes" Same comment about the terminology... I only see one "PoD top Node" with one connection to a switch, not a full interconnect. [minor] The figure also doesn't show the connection between the switches (if any)...and I'm not sure what the "connectors" (?) on the switch at the top/bottom are (there seem to be more of them than ports). 849 E<-*->W 851 +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ 852 | | | | | | | | | | | | | | | | 853 +--------------------------------------------------------+ 854 | o o o o o o o o | 855 +--------------------------------------------------------+ 856 +--------------------------------------------------------+ 857 | o o o o o o o o | 858 +--------------------------------------------------------+ 859 +--------------------------------------------------------+ 860 | o o o o o o o o | 861 +--------------------------------------------------------+ 862 +--------------------------------------------------------+ 863 | o o o o o o o o | 864 +--------------------------------------------------------+ 865 +--------------------------------------------------------+ 866 | o o o o o o o o |<-+ 867 +--------------------------------------------------------+ | 868 +--------------------------------------------------------+ | 869 | o o o o o o o o | | 870 +--------------------------------------------------------+ | 871 | | | | | | | | | | | | | | | | | 872 +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ | 873 ^ | 874 | | 875 | ---------- --------------------- | 876 +----- Leaf Node PoD top Node (Spine) --+ 877 ---------- --------------------- 879 Figure 6: Northern View of a PoD's Spines, K_TOP=8 881 Side views of this PoD is illustrated in Figure 7 and Figure 8. 883 Connecting to Spine 885 || || || || || || || || 886 +----------------------------------------------------------------+ N 887 | PoD top Node seen sideways | ^ 888 +----------------------------------------------------------------+ | 889 || || || || || || || || * 890 +----+ +----+ +----+ +----+ +----+ +----+ +----+ +----+ | 891 | | | | | | | | | | | | | | | | v 892 +----+ +----+ +----+ +----+ +----+ +----+ +----+ +----+ S 893 || || || || || || || || 895 Connecting to Client nodes 897 Figure 7: Side View of a PoD, K_TOP=8, K_LEAF=6 [minor] I count 8 connections to the south in the top node...and just one on the switches below it. 899 Connecting to Spine 901 || || || || || || 902 +----+ +----+ +----+ +----+ +----+ +----+ N 903 | | | | | | | | | | | PoD top Nodes ^ 904 +----+ +----+ +----+ +----+ +----+ +----+ | 905 || || || || || || * 906 +------------------------------------------------+ | 907 | Leaf seen sideways | v 908 +------------------------------------------------+ S 909 || || || || || || 911 Connecting to Client nodes [minor] A leaf doesn't have southbound ports/adjacencies. What is this leaf connected to? 913 Figure 8: Other Side View of a PoD, K_TOP=8, K_LEAF=6, 90o turn in 914 E-W Plane [minor] In this case I count a leaf with 6 northbound interfaces. [minor] "90o turn in E-W Plane" I don't know what that is. 916 As next step, let us observe that a resulting PoD can be abstracted 917 as a bigger node with a number K of K_POD= K_TOP * K_LEAF, and the 918 design can recurse. [minor] K is already defined as the number of ports (§4.1.2.1). [minor] Lost again. If the PoD is abstracted as a single node, then it would have K_TOP + K_LEAF nodes, not sure where the "*" comes from or what is trying to denote. 920 It will be critical at this point that, before progressing further, 921 the concept and the picture of "crossed crossbars" is clear. Else, 922 the following considerations might be difficult to comprehend. [] The concept is clear to me -- I don't find the explanation and the corresponding pictures specially helpful. ... 929 This topology is also referred to as a single plane configuration and 930 is quite popular due to its simplicity. In order to reach a 1:1 931 connectivity ratio between the ToF and the leaves, it results that 932 there are K_TOP ToF nodes, because each port of a ToP node connects 933 to a different ToF node, and K_LEAF ToP nodes for the same reason. 934 Consequently, it will take (P * K_LEAF) ports on a ToF node to 935 connect to each of the K_LEAF ToP nodes of the P PoDs, as shown in 936 Figure 9. [minor] "there are K_TOP ToF nodes...and K_LEAF ToP nodes" As with other places, the terminology is not used as defined earlier. K_* refer to the number of ports in a specific switch, so their use is relative to that switch. In this case each ToP has K_TOP links, and each ToF has K_LEAF links. The use without the reference point is confusing. [minor] "(P * K_LEAF)" This calculation is clear once one realizes that the previous discussion was for the number of ports per PoD, not total (as the definition of K_* suggests). 938 [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <-----+ 939 | | | | | | | | | 940 [=================================] | ----------- 941 | | | | | | | | +----- Top-of-Fabric 942 [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +----- Node -------+ 943 | ----------- | 944 | v 945 +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ <-----+ +-+ 946 | | | | | | | | | | | | | | | | | | 947 [ |o| |o| |o| |o| |o| |o| |o| |o| ] | | 948 [ |o| |o| |o| |o| |o| |o| |o| |o| ] ------------------------- | | 949 [ |o| |o| |o| |o| |o| |o| |o| |o<--- Physical Port (Ethernet) | | 950 [ |o| |o| |o| |o| |o| |o| |o| |o| ] ------------------------- | | 951 [ |o| |o| |o| |o| |o| |o| |o| |o| ] | | 952 [ |o| |o| |o| |o| |o| |o| |o| |o| ] | | 953 | | | | | | | | | | | | | | | | | | 954 [ |o| |o| |o| |o| |o| |o| |o| |o| ] | | 955 [ |o| |o| |o| |o| |o| |o| |o| |o| ] -------------- | | 956 [ |o| |o| |o| |o| |o| |o| |o| |o| ] <--- PoD top level | | 957 [ |o| |o| |o| |o| |o| |o| |o| |o| ] node (Spine) ---+ | | 958 [ |o| |o| |o| |o| |o| |o| |o| |o| ] -------------- | | | 959 [ |o| |o| |o| |o| |o| |o| |o| |o| ] | | | 960 | | | | | | | | | | | | | | | | -+ +- +-+ v | | 961 [ |o| |o| |o| |o| |o| |o| |o| |o| ] | | --| |--[ ]--| | 962 [ |o| |o| |o| |o| |o| |o| |o| |o| ] | ----- | --| |--[ ]--| | 963 [ |o| |o| |o| |o| |o| |o| |o| |o| ] +--- PoD ---+ --| |--[ ]--| | 964 [ |o| |o| |o| |o| |o| |o| |o| |o| ] | ----- | --| |--[ ]--| | 965 [ |o| |o| |o| |o| |o| |o| |o| |o| ] | | --| |--[ ]--| | 966 [ |o| |o| |o| |o| |o| |o| |o| |o| ] | | --| |--[ ]--| | 967 | | | | | | | | | | | | | | | | -+ +- +-+ | | 968 +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ 970 Figure 9: Fabric Spines and TOFs in Single Plane Design, 3 PoDs [minor] I believe you when you say that this figure shows how "it will take (P * K_LEAF) ports on a ToF node to connect to each of the K_LEAF ToP nodes of the P PoDs", but the drawing is not straight forward to interpret. Among other reasons because there seem to be 3 different connection types/interpretations/? to the ToF -- a different one for each PoD. 972 The top view can be collapsed into a third dimension where the hidden 973 depth index is representing the PoD number. We can then show one PoD 974 as a class of PoDs and hence save one dimension in our 975 representation. The Spine Node expands in the depth and the vertical 976 dimensions, whereas the PoD top level Nodes are constrained, in 977 horizontal dimension. A port in the 2-D representation represents 978 effectively the class of all the ports at the same position in all 979 the PoDs that are projected in its position along the depth axis. 980 This is shown in Figure 10. [] Do we really need this extra representation? ... 1003 As simple as single plane deployment is it introduces a limit due to 1004 the bound on the available radix of the ToF nodes that has to be at 1005 least P * K_LEAF. Nevertheless, we will see that a distinct 1006 advantage of a connected or non-partitioned Top-of-Fabric is that all 1007 failures can be resolved by simple, non-transitive, positive 1008 disaggregation (i.e. nodes advertising more specific prefixes with 1009 the default to the level below them that is however not propagated 1010 further down the fabric) as described in Section 4.2.5.1 . In other 1011 words; non-partitioned ToF nodes can always reach nodes below or 1012 withdraw the routes from PoDs they cannot reach unambiguously. And 1013 with this, positive disaggregation can heal all failures and still 1014 allow all the ToF nodes to see each other via south reflection. 1015 Disaggregation will be explained in further detail in Section 4.2.5. [nit] s/deployment is it introduces/deployment is, it introduces 1017 In order to scale beyond the "single plane limit", the Top-of-Fabric 1018 can be partitioned by a N number of identically wired planes where N 1019 is an integer divider of K_LEAF. The 1:1 ratio and the desired 1020 symmetry are still served, this time with (K_TOP * N) ToF nodes, each 1021 of (P * K_LEAF / N) ports. N=1 represents a non-partitioned Spine 1022 and N=K_LEAF is a maximally partitioned Spine. Further, if R is any 1023 integer divisor of K_LEAF, then N=K_LEAF/R is a feasible number of 1024 planes and R a redundancy factor. If proves convenient for 1025 deployments to use a radix for the leaf nodes that is a power of 2 so 1026 they can pick a number of planes that is a lower power of 2. The 1027 example in Figure 11 splits the Spine in 2 planes with a redundancy 1028 factor R=3, meaning that there are 3 non-intersecting paths between 1029 any leaf node and any ToF node. A ToF node must have, in this case, 1030 at least 3*P ports, and be directly connected to 3 of the 6 PoD-ToP 1031 nodes (spines) in each PoD. [nit] s/by a N number/by an N number [minor] "(K_TOP * N) ToF nodes, each of (P * K_LEAF / N) ports" Again, the use of the terminology without a reference assumes a specific interpretation by the reader. [minor] "if R is any integer divisor of K_LEAF, then N=K_LEAF/R is a feasible number of planes and R a redundancy factor." Please expand on the meaning of the redundancy factor. [minor] "6 PoD-ToP nodes" I count 8. 1033 +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ 1034 +-| |--| |--| |--| |--| |--| |--| |--| |-+ 1035 | | o | | o | | o | | o | | o | | o | | o | | o | | 1036 +-| |--| |--| |--| |--| |--| |--| |--| |-+ 1037 +-| |--| |--| |--| |--| |--| |--| |--| |-+ 1038 | | o | | o | | o | | o | | o | | o | | o | | o | | 1039 +-| |--| |--| |--| |--| |--| |--| |--| |-+ 1040 +-| |--| |--| |--| |--| |--| |--| |--| |-+ 1041 | | o | | o | | o | | o | | o | | o | | o | | o | | 1042 +-| |--| |--| |--| |--| |--| |--| |--| |-+ 1043 +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ 1045 Plane 1 1046 ----------- . ------------ . ------------ . ------------ . -------- 1047 Plane 2 1049 +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ 1050 +-| |--| |--| |--| |--| |--| |--| |--| |-+ 1051 | | o | | o | | o | | o | | o | | o | | o | | o | | 1052 +-| |--| |--| |--| |--| |--| |--| |--| |-+ 1053 +-| |--| |--| |--| |--| |--| |--| |--| |-+ 1054 | | o | | o | | o | | o | | o | | o | | o | | o | | 1055 +-| |--| |--| |--| |--| |--| |--| |--| |-+ 1056 +-| |--| |--| |--| |--| |--| |--| |--| |-+ 1057 | | o | | o | | o | | o | | o | | o | | o | | o | | 1058 +-| |--| |--| |--| |--| |--| |--| |--| |-+ 1059 +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ 1060 ^ 1061 | 1062 | ---------------- 1063 +----- Top-of-Fabric node 1064 "across" depth 1065 ---------------- 1067 Figure 11: Northern View of a Multi-Plane ToF Level, K_LEAF=6, N=2 1069 At the extreme end of the spectrum it is even possible to fully 1070 partition the spine with N = K_LEAF and R=1, while maintaining 1071 connectivity between each leaf node and each Top-of-Fabric node. In 1072 that case the ToF node connects to a single Port per PoD, so it 1073 appears as a single port in the projected view represented in 1074 Figure 12. The number of ports required on the Spine Node is more or 1075 equal to P, the number of PoDs. [minor] "more or equal to P" ?? ... 1121 4.1.3. Fallen Leaf Problem ... 1140 In a maximally partitioned fabric, the redundancy factor is R= 1, so 1141 any breakage in the fabric may cause one or more fallen leaves. 1142 However, not all cases require disaggregation. The following cases 1143 do not require particular action in such scenario: [major] A quick look at §4.2.5.1 doesn't explicitly mention how a node considers the redundancy factor...but that may be included in the "DAG computation" mentioned in the first step. I'm putting this comment here so I don't forget later... 1145 If a southern link on a node goes down, then connectivity through 1146 that node is lost for all nodes south of it. There is no need to 1147 disaggregate since the connectivity to this node is lost for all 1148 spine nodes in a same fashion. 1150 If a ToF Node goes down, then northern traffic towards it is 1151 routed via alternate ToF nodes in the same plane and there is no 1152 need to disaggregate routes. ... 1159 If the breakage is the last northern link from a ToP node to a ToF 1160 node going down, then the fallen leaf problem affects only The ToF 1161 node, and the connectivity to all the nodes in the PoD is lost 1162 from that ToF node. This can be observed by other ToF nodes 1163 within the plane where the ToP node is located and positively 1164 disaggregated within that plane. [nit] s/only The ToF/only the ToF 1166 On the other hand, there is a need to disaggregate the routes to 1167 Fallen Leaves in a transitive fashion, all the way to the other 1168 leaves in the following cases: [] Without having seen the specific mechanism, this overview is hard to digest. 1170 o If the breakage is the last northern link from a leaf node within 1171 a plane (there is only one such link in a maximally partitioned 1172 fabric) that goes down, then connectivity to all unicast prefixes 1173 attached to the leaf node is lost within the plane where the link 1174 is located. Southern Reflection by a leaf node, e.g., between ToP 1175 nodes, if the PoD has only 2 levels, happens in between planes, 1176 allowing the ToP nodes to detect the problem within the PoD where 1177 it occurs and positively disaggregate. The breakage can be 1178 observed by the ToF nodes in the same plane through the North 1179 flooding of TIEs from the ToP nodes. The ToF nodes however need 1180 to be aware of all the affected prefixes for the negative, 1181 possibly transitive disaggregation to be fully effective (i.e. a 1182 node advertising in control plane that it cannot reach a certain 1183 more specific prefix than default whereas such disaggregation must 1184 in extreme condition propagate further down southbound). The 1185 problem can also be observed by the ToF nodes in the other planes 1186 through the flooding of North TIEs from the affected leaf nodes, 1187 together with non-node North TIEs which indicate the affected 1188 prefixes. To be effective in that case, the positive 1189 disaggregation must reach down to the nodes that make the plane 1190 selection, which are typically the ingress leaf nodes. The 1191 information is not useful for routing in the intermediate levels. [nit] s/in control plane/in the control plane [nit] s/in extreme condition/in the extreme condition 1193 o If the breakage is a ToP node in a maximally partitioned fabric - 1194 in which case it is the only ToP node serving the plane in that 1195 PoD - goes down, then the connectivity to all the nodes in the PoD 1196 is lost within the plane where the ToP node is located. 1197 Consequently, all leaves of the PoD fall in this plane. Since the 1198 Southern Reflection between the ToF nodes happens only within a 1199 plane, ToF nodes in other planes cannot discover fallen leaves in 1200 a different plane. They also cannot determine beyond their local 1201 plane whether a leaf node that was initially reachable has become 1202 unreachable. As the breakage can be observed by the ToF nodes in 1203 the plane where the breakage happened, the ToF nodes in the plane 1204 need to be aware of all the affected prefixes for the negative 1205 disaggregation to be fully effective. The problem can also be 1206 observed by the ToF nodes in the other planes through the flooding 1207 of North TIEs from the affected leaf nodes, if there are only 3 1208 levels and the ToP nodes are directly connected to the leaf nodes, 1209 and then again it can only be effective it is propagated 1210 transitively to the leaf, and useless above that level. [nit] s/fabric -...- goes down,/fabric -...-, 1212 For the sake of easy comprehension let us roll the abstractions back 1213 into a simple example and observe that in Figure 3 the loss of link 1214 Spine 122 to Leaf 122 will make Leaf 122 a fallen leaf for Top-of- 1215 Fabric plane B. Worse, if the cabling was never present in first 1216 place, plane B will not even be able to know that such a fallen leaf 1217 exists. Hence partitioning without further treatment results in two 1218 grave problems: [] "For the sake of easy comprehension...Figure 3..." Finally! Hmmm...sorry...I mean, it is a little ironic that after all the new terminology, detailed descriptions and figures, the clearer explanation uses the simplest drawing. [nit] s/in first place/in the first place 1220 o Leaf 111 trying to route to Leaf 122 MUST choose Spine 111 in 1221 plane A as its next hop since plane B will inevitably blackhole 1222 the packet when forwarding using default routes or do excessive 1223 bow tying. This information must be in its routing table. [major] s/MUST/must This is not a Normative statement, just a statement of fact (inside an example). 1225 o Any kind of "flooding" or distance vector trying to deal with the 1226 problem by distributing host routes will be able to converge only 1227 using paths through leaves. The flooding of information on Leaf 1228 122 would have to go up to Top-of-Fabric A and then "loopback" 1229 over other leaves to ToF B leading in extreme cases to traffic for 1230 Leaf 122 when presented to plane B taking an "inverted fabric" 1231 path where leaves start to serve as TOFs, at least for the 1232 duration of a protocol's convergence. [] "Any kind of "flooding" or distance vector..." I can guess the meaning, but it would be better that I don't have to. Maybe something like: "Any advertisement..." [minor] "information on Leaf 122" s/on/ about (?), or maybe from. ?? 1234 4.1.4. Discovering Fallen Leaves 1236 As illustrated later, and without further proof, the way to deal with 1237 fallen leaves in multi-plane designs, when aggregation is used, is 1238 that RIFT requires all the ToF nodes to share the same north topology 1239 database. This happens naturally in single plane design by the means 1240 of northbound flooding and south reflection but needs additional 1241 considerations in multi-plane fabrics. To satisfy this RIFT, in 1242 multi-plane designs, relies at the ToF level on ring interconnection 1243 of switches in multiple planes. Other solutions are possible but 1244 they either need more cabling or end up having much longer flooding 1245 paths and/or single points of failure. [minor] "As illustrated later..." Where? [] "and without further proof" I hope this is at least specified at that later point. [nit] s/To satisfy this RIFT, in multi-plane designs, relies/To satisfy this need in multi-plane designs, RIFT relies 1247 In detail, by reserving two ports on each Top-of-Fabric node it is 1248 possible to connect them together by interplane bi-directional rings 1249 as illustrated in Figure 13. The rings will be used to exchange full 1250 north topology information between planes. All ToFs having same 1251 north topology allows by the means of transitive, negative 1252 disaggregation described in Section 4.2.5.2 to efficiently fix any 1253 possible fallen leaf scenario. Somewhat as a side-effect, the 1254 exchange of information fulfills the ask to present full view of the 1255 fabric topology at the Top-of-Fabric level, without the need to 1256 collate it from multiple points by additional complexity of 1257 technologies like [RFC7752]. [nit] s/fulfills the ask to present full view/fulfills the requirement to have a full view [] "..., without the need to collate it from multiple points by additional complexity of technologies like [RFC7752]." This last phrase is unnecessary: because carrying RIFT information in BGP-LS is not defined, and more importantly, there's no need to criticize other technology to make RIFT look better. 1259 +---+ +---+ +---+ +---+ +---+ +---+ +--------+ 1260 | | | | | | | | | | | | | | 1261 | | | | | | | | 1262 +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ | 1263 +-| |--| |--| |--| |--| |--| |--| |-+ | 1264 | | o | | o | | o | | o | | o | | o | | o | | | Plane A 1265 +-| |--| |--| |--| |--| |--| |--| |-+ | 1266 +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ | 1267 | | | | | | | | 1268 +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ | 1269 +-| |--| |--| |--| |--| |--| |--| |-+ | 1270 | | o | | o | | o | | o | | o | | o | | o | | | Plane B 1271 +-| |--| |--| |--| |--| |--| |--| |-+ | 1272 +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ | 1273 | | | | | | | | 1274 ... | 1275 | | | | | | | | 1276 +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ | 1277 +-| |--| |--| |--| |--| |--| |--| |-+ | 1278 | | o | | o | | o | | o | | o | | o | | o | | | Plane X 1279 +-| |--| |--| |--| |--| |--| |--| |-+ | 1280 +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ +-o-+ | 1281 | | | | | | | | 1282 | | | | | | | | | | | | | | 1283 +---+ +---+ +---+ +---+ +---+ +---+ +--------+ 1284 Rings 1 2 3 4 5 6 7 1286 Figure 13: Connecting Top-of-Fabric Nodes Across Planes by Rings [minor] Is that one ring per plane, multiple rings per plane or a big ring for all the planes? The drawing is not clear to me. :-( 1288 4.1.5. Addressing the Fallen Leaves Problem 1290 One consequence of the "Fallen Leaf" problem is that some prefixes 1291 attached to the fallen leaf become unreachable from some of the ToF 1292 nodes. RIFT proposes two methods to address this issue, the positive 1293 and the negative disaggregation. Both methods flood South TIEs to 1294 advertise the impacted prefix(es). [nit] s/RIFT proposes two methods/RIFT defines two methods [End of Review - Part 1]
- [Rift] AD Review of draft-ietf-rift-rift-12 (Part… Alvaro Retana
- Re: [Rift] AD Review of draft-ietf-rift-rift-12 (… Antoni Przygienda
- Re: [Rift] AD Review of draft-ietf-rift-rift-12 (… Pascal Thubert (pthubert)
- Re: [Rift] AD Review of draft-ietf-rift-rift-12 (… Tony Przygienda
- Re: [Rift] AD Review of draft-ietf-rift-rift-12 (… Alvaro Retana
- Re: [Rift] AD Review of draft-ietf-rift-rift-12 (… Tony Przygienda
- Re: [Rift] AD Review of draft-ietf-rift-rift-12 (… Tony Przygienda
- Re: [Rift] AD Review of draft-ietf-rift-rift-12 (… Pascal Thubert (pthubert)
- [Rift] Fwd: AD Review of draft-ietf-rift-rift-12 … Tony Przygienda
- Re: [Rift] Fwd: AD Review of draft-ietf-rift-rift… Alvaro Retana
- Re: [Rift] AD Review of draft-ietf-rift-rift-12 (… Alvaro Retana
- Re: [Rift] AD Review of draft-ietf-rift-rift-12 (… Jordan Head
- Re: [Rift] AD Review of draft-ietf-rift-rift-12 (… Alvaro Retana
- Re: [Rift] AD Review of draft-ietf-rift-rift-12 (… Jordan Head
- Re: [Rift] AD Review of draft-ietf-rift-rift-12 (… Alvaro Retana
- Re: [Rift] AD Review of draft-ietf-rift-rift-12 (… Jordan Head