Internet Draft MPLS Working Group Heinrich Hummel Internet Draft Siemens AG Expiration Date: August 1999 Swee Loke Nortel Networks Febuary 1999 Explicit Tree Routing draft-hummel-mpls-explicit-tree-00.txt Status of this Memo This document is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026 except that the right to produce derivative works is not granted. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet- Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet- Drafts as reference material or to cite them other than as "work in progress." The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. Abstract This draft proposes the TREE ROUTE TLV that encodes a tree structured route which can be used to carry explicit routing information. It also specifies the progression of the TLV from the root of the tree to the leaf nodes. Every node that the TLV traversed has to decode/process the TLV in such a way that the correct child link/ nodes are determined as well as the respective subtree route information. Individual Information targetted for any specific node can also be packed into this TREE ROUTE TLV. The draft also presents the benefits of using TREE ROUTE TLV in MPLS. Hummel & Loke Febuary 1999 [Page 1] Explicit Tree Routing Exp. Aug 1999 The applications include constrain based routing, traffic engineering, VPN installations and static multicast tree. The capability of carrying targetted information for individual node in the tree is very powerful in MPLS. This allows different nodes in the tree route to use the same tree route for different FECs. The application of this TLV is not mpls-specific. Other Working Groups may consider the proposed TLV as well. 1. Introduction It is agreed that explicit routing is needed in MPLS. Different TLVs and protocols have been designed or enhanced to support explicit routing. Most of the work has been focused on point-to-point LSPs. This draft proposes the TREE ROUTE TLV which can encode a tree structured route. The tree structured route may be provided based on some static configuration information or derived algorithmically from the results of a dynamic route computation. The decision is up to the protocols that use the TLV, and is outside the scope of this draft. The TREE ROUTE TLV can be used in some LSP setup protocol (E.g., LDP with possibly some new message types) to setup explicit point-to- multipoint and multipoint-to-point LSPs. The exact specification of supporting TREE ROUTE TLV in the LSP setup protocol is for further study and is outside the scope of this draft. Section 2 presents different applications of the TREE ROUTE TLV in MPLS and their benefits. The TREE ROUTE TLV is independent of its application. It guides the message/packet to each leaf properly, but besides that, it has no indication of any application-dependent actions to be taken on the way to the leaves. Instead, to give such instructions, that should be the job of the protocol message (e.g., LDP message) that carries the TREE ROUTE TLV (or of any other TLV). Consequently, the TREE ROUTE TLV can be used for MPLS and NON-MPLS applications. Section 3 specifies the TREE ROUTE TLV. The progression of the TLV from the root to the leaf nodes are specified in section 4. When all intermediate routers process the received TREE ROUTE TLV using the same processing algorithm, the TREE ROUTE TLV will be forwarded exactly along the tree route as indicated by the TLV. When the TLV reaches a leave node, the FEC TLV targetted for the leaf node shall be processed as required. Section 5 presents ways to compress the tree route TLV. Appendix A shows the TREE ROUTE TLV encoding algorithm. Appendix B shows the Hummel & Loke Febuary 1999 [Page 2] Explicit Tree Routing Exp. Aug 1999 decoding algorithm to be performed by each transit node. 2. Applications and Benefits The TREE ROUTE TLV can be used to setup different types of MPLS LSPs. The following subsections presents different MPLS applications of the TREE ROUTE TLV and their benefits. 2.1 Egress-rooted Label Switch Tree (ELST) ELST refers to a multipoint-to-point LSP triggered by the Egress LER. This type of Label Switch Tree (LST) is very useful for traffic engineering and VPN configuration. The benefits: - The ELST setup info only needs to to be configured at one node, namely the Egress node. This saves having to configure multiple point-to-point LSRs from the Ingress nodes to Egress. By establishing a multipoint-to-point LST explicitly, we can specify where the merge points are and have more control on the traffic flow. - Since information targetted for each leaf node can be packed into this TREE ROUTE TLV, the leaf nodes (ingress and intermediate routers) can use the same tree for different FECs. Once data traffic enters the ELST, it will be forwarded to the root, regardless what the FEC is. By defining the FEC(s) for the tree route on each node, it allows other point-to-point LSPs of that FEC to join the tree. - The LST will not be triggered if the Egress node is down. In the existing ER LSP, the Ingress node will always try to set up the ER LSP by sending the label request regardless if the Egress is up. Hummel & Loke Febuary 1999 [Page 3] Explicit Tree Routing Exp. Aug 1999 2.2 Ingress-rooted Label Switch Tree (ILST) ILST refers to a point-to-multipoint LSP setup by the Ingress LER. This type of Label Switch Tree (LST) is useful for static multicast tree and VPN. The benefits: - All the same benefits as existing point-to-point ER LSP - The ILST setup info only needs to be configured at one node, namely the Ingress node. This saves having to configure multiple point-to-point LSPs from the Ingress to multiple Egress nodes. - The static tree can be used to deliver multicast traffic across different multicast routing domain. Each leaf node of the LST can be the root of its own multicast tree. The tree can allow dynamic branches by allowing other LSP of the same FEC to merge/join to the tree. The extending/pruning of the LST is for future study. - The point-to-multipoint LST can be used to deliver broadcast type messages to VPN LAN that is emulated across the MPLS backbone. 2.3 Others The TREE ROUTE TLV is also efficient for a tree route that is linear (i.e., a never branching route). There is no extra overhead if it is used to specify a linear point-to-point LSP. Multiple linear LSPs towards the same Egress node can be merged and described with one TREE ROUTE TLV. The following figure shows an example of such LSPs: +-----+ L1 +----+ L2 +----+ L3 +----+ |R0= |<---|R1= |<----|R2= |<-----|R3= | |Root | |Leaf| |Leaf| |Leaf| +-----+ +----+ +----+ +----+ R1 uses R2 uses R3 uses it for it for it for FEC-1 FEC-2 FEC-3 Hummel & Loke Febuary 1999 [Page 4] Explicit Tree Routing Exp. Aug 1999 In this example, R2 uses the linear route (R1,R0) for traffic with FEC-2. At the same time, it also forwards the traffic enterring the LSP from R3. Only one label at each node is required to set up the LSP that carries all traffic flow towards R0. Multiple LSPs of different FECs are implicitly merged. The benefits: - All the same benefits as exisiting point-to-point ER LSP - It is more efficient to set up the LSP this way than setting up multiple mergable point-to-point ER LSPs. - Scalability: Only one lable is required at each node. - It allows the linear point-to-point LSP to grow into a tree as the merge points of different FECs are specified. 3. TREE ROUTE TLV Specification This section presents the definition of a tree route and the notation of a TREE ROUTE TLV. 3.1 Tree Route Definition A TREE ROUTE TLV can encode an explicit routing tree that consists of the following types of nodes: - Root node A root node is the node where the initial TREE ROUTE TLV is generated. It is also where the data traffic enters the tree route (in point-to-multipoint case) or where the data traffic terminates (in multipoint-to-point case). There is only one root node per tree. - Transit Node A Transit node is a node that is responsible for forwarding the data traffic along the tree route. Every node in a tree route, except the root node and the pure leaf nodes, is a transit node. - Leaf Node Hummel & Loke Febuary 1999 [Page 5] Explicit Tree Routing Exp. Aug 1999 A leaf node is a node + which is to receive data traffic sent to the tree route from the root (in point-to-multipoint case), OR + where the data traffic to be delivered to the root enters the tree route (in multipoint-to-point case) For example, a leaf node in the point-to-multipoint multicast tree is a node that is to receive the traffic from the root, whereas a leaf node in a multipoint-to-point tree acts as an Ingress node for data traffic sent towards the root. A leaf node can be also a transit node. Hence, in the point-to-multipoint case, a leaf node that is also a transit node receives the data traffic itself and also forwards the data traffic along the tree route. 3.2 TREE ROUTE TLV Notation The TREE ROUTE TLV contains a sequence of TLVs of the following types: - TYPE "(" - TYPE ")" - TYPE "Linear Sequence of Hops" - TYPE "FEC" The "("-TLVs and the ")"-TLVs have no associated values and have type length of zero, as they are used mainly to shape the tree. The "Linear Sequence of Hops"-TLV contains one or more hops that form a linear section of the tree route. It also contains a Hop type which indicates the uniform way how all containing hops are encoded. For example, the hop type of a "Linear Sequence of Hop"-TLV can indicate that all hops are provided by IPv4 router IDs or IPv4 interface addresses. Other hop types are envisioned as well but are for further study: autonomous system numbers, tunnel ids, IDs for ATM-SVCs, Frame Relay DLCIs and LSP IDs. The FEC-TLV contains the target information for an individual leaf node. It will be embraced by a "("- and ")"-TLV pair, Hummel & Loke Febuary 1999 [Page 6] Explicit Tree Routing Exp. Aug 1999 positioned such that it can be associated with the respective leaf node. Indeed, the last hop of the preceding "Linear Sequence of Hops"-TLV will either denote the respective leaf node itself or the link to the respective leaf node. In all examples presented in this draft, the following notations will be used to represent the different TLVs that comprise the TREE ROUTE TLV: [...] represents a TLV of Type "Linear Sequence of Hops" where the hop type is router-id. Each hop is separated by a period. ) represents a ")"-TLV ( represents a "("-TLV FEC-j indicates an individual FEC-TLV for node j. It may be present only if applicable. Each TLV notation are shown separated by a comma. General rules of how to encode the tree route information: - The first contained TLV is always a "Linear Sequence of Hops"-TLV whose first hop either points to the next receiving node or denotes the link to the next receiving node. - A node is marked to be a leaf node by placing either "(", ")" or "(", FEC, ")" behind that "Linear Sequence of Hops"-TLV whose last hop either denotes this node or denotes the link to this node. - Each entire subtree route following a branching node is embraced with "(" and ")". Here is an example of how to encode a simple tree where no FEC is associated with any node. R0 is the root, R2, R3, R4 are the leaf nodes. +-----+ +----+ +----+ |R0= |----|R1 |--+--|R2= | |Root | | | | |Leaf| +-----+ +----+ | +----+ | | +----+ +----+ +--|R3= |----|R4= | |Leaf| |Leaf| +----+ +----+ Hummel & Loke Febuary 1999 [Page 7] Explicit Tree Routing Exp. Aug 1999 The initial TREE ROUTE TLV generated by the root node R0 is: [R1],(,[R2],(,),) (,[R3],(,),[R4],(,),) Here is the initial TREE ROUTE TLV sent by R0 to R1 in the simple example in section 2.3: [R1],(,FEC-1,),[R2],(,FEC-2,),[R3],(,FEC-3,) Appendix A shows how an initial TREE ROUTE TLV can be derived algorithmically based on some tree specification. 4. The Progressiong of TREE ROUTE TLV This section shows an example of a tree and how the corresponding TREE ROUTE TLV looks like at the beginning. It then shows how each transit node determines the child links and child TLVs. Any node that receives a TREE ROUTE TLV must apply the same decoding algorithm in order to determine its immediate child links and the respective TREE ROUTE TLVs to be sent down these links. A transit node will also determine if it is a leaf node as well. A leaf node may receive an individual FEC TLV that has to be evaluated only by itself and not to be propagated further. The following figure shows a tree of nodes Ri and links Lj. A setup message needs to be sent from router R1 (Root) to all nodes in the tree, and R3, R4, R5 and R7 are leaf nodes that have FEC-3, FEC-4, FEC-5, and FEC-7 targetted for them respectively. +----+ L2 +---+ L3 +----+ L4 +----+ L5 +----+ |R1= |-----|R2 |-----|R3= |-----|R4= |----|R5= | |Root| | | |Leaf| |Leaf| |Leaf| +----+ +---+ +----+ +----+ +----+ | |L6 +----+ +---+ L7 |R7= | |R6 |------|Leaf| +---+ +----+ Router R1 sends a message to Router R2, with a TREE ROUTE TLV that contains the following TLVs (shown separated by commas): Hummel & Loke Febuary 1999 [Page 8] Explicit Tree Routing Exp. Aug 1999 [R2.R3],(,FEC-3,),(,[R4],(,FEC-4,),[R5],(,FEC-5,),), (,[R6.R7],(,FEC-7,),) [...] represents a TLV of Type "Linear Sequence of Hops" where the hop type is router-id. The same example can also be illustrated using the link hop type. ) represents a ")"-TLV ( represents a "("-TLV FEC-j indicates an individual FEC-TLV for node j. R2 decodes the received TREE ROUTE TLV, and sends the following to R3: [R3], (,FEC-3,),(,[R4],(,FEC-4,),[R5],(,FEC-5,),), (,[R6.R7],(,FEC-7,),) R3 recognizes itself being a leaf node, getting FEC-3. It also recognizes that it is a branching nodes and has to send the revised TREE ROUTE TLV to R4 and R6. R3 then sends to R4: [R4],(,FEC-4,),[R5],(,FEC-5,) R3 then sends to R6: [R6.R7],(,FEC-7,) R4 recognizes itself being a leaf node, getting FEC-4. R4 then sends to R5: [R5],(,FEC-5,) R5 recognizes itself being a leaf node, getting FEC-5. R6 sends to R7: [R7],(,FEC-7,) R7 recognizes itself being a leaf node, getting FEC-7. The algorithm of decoding the TREE ROUTE TLV is shown in Appendix B. 5. Compressing the TREE ROUTE TLV It is feasable to optimize the TREE ROUTE TLV and its processing. One possibility is to omit the "("-TLV and enhance the ")"-TLV with a number that indicates how many TLVs is needed to go back to get to the omitted complementary "("-TLV. Furthermore, any cluster of ")"-TLVs could be replaced by the single most right ")"-TLV of the cluster, enhanced with adjusted number. A ")"-TLV at the very end of the TREE ROUTE TLV can be omitted too. As a result the transmitted TREE ROUTE TLV became shorter and the (enhanced) decoding algorithm DA became faster. The exact compression of TREE ROUTE TLV is for further study. Hummel & Loke Febuary 1999 [Page 9] Explicit Tree Routing Exp. Aug 1999 6. Conclusion This draft proposes a generic TREE ROUTE TLV that can be used in different areas, inside and outside of MPLS. In MPLS, it can be used to establish LSPs for point-to-multipoint or multipoint-to-point flows. It is preferred that the TREE ROUTE TLV does not contain information that goes beyond the task of forwarding the message. Instead, the message itself and other TLVs should instruct the traversed nodes what to do additionally. The TREE ROUTE TLV works well also in case of linear routes. In fact it is a powerful way to carry an explicit route information that allows nodes along the linear path to use the route for different FECs without using additional labels. The application of this TLV is not mpls-specific. Other Working Groups (e.g. which are dealing with Multicast) may consider the proposed TLV as well. The specification of handling TREE ROUTE TLV in LSP setup protocols is for further study. 7. Intellectual Property Considerations Siemens AG and Nortel Networks may seek patent or other intellectual property protection for some or all of the technologies disclosed in this document. If any standards arising from this document are or become protected by one or more patents assigned to Siemens AG or Nortel Networks, Siemens AG and Nortel Networks intend to disclose those patents and license them under openly specified and non-discriminatory terms. 8. References [1] Rosen, Viswanathan, Callon: A Proposed Architecture for MPLS, (Work In Progress) Internet Draft, draft-ietf-mpls-arch-04.txt, Feb 1999. Hummel & Loke Febuary 1999 [Page 10] Explicit Tree Routing Exp. Aug 1999 9. Authors' Addresses Heinrich Hummel Siemens AG Hofmannstrasse 51 81379 Munich, Germany Tel: +49 89 722 32057 Email: heinrich.hummel@icn.siemens.de Swee Loke Nortel Networks P.O.Box 3511 Station C Ottawa ON K1Y 4H7 Canada Tel: (613) 763-9658 Email: loke@nortelnetworks.com Hummel & Loke Febuary 1999 [Page 11] Explicit Tree Routing Exp. Aug 1999 APPENDIX A: Encoding Algorithm: Determining the initial child links and respective TREE ROUTE TLVs based on the results of a Dijkstra route computation. Although this example illustrates the encoding algorithm based on the result of Dijkstra route computation, it can be based on some tree specification from configuration. Source node s may have done a Dijkstra route computation that provides the shortest pathes to (at least) all those destination nodes d1, TREE ROUTE TLV. We presume that a Dijkstra route computation has returned for each node i its predecessor node p: P[i]=p, whereby P[s]=s. It is also assumed that all branches of the tree are removed that do not contribute to interlinking source node s and destination nodes d1,...,dr. I.e. by proper actions P[k] is set to 0 for all nodes k that do not contribute to this interlinkage. Based on the resulting vector P and by proper actions - which are not described here - we determine for each Transit Node i: - its parent link, i.e., TN[i].ParentLink (which is = P[i] ) - the number of its child links, i.e., TN[i].ChildLinkCount - and its child links themselves, i.e., TN[i].ChildLink[k] for k=1,...TN[i].ChildLinkCount We mark all leaf nodes k=d1,...,dr: TN[k].IsLeaf := TRUE ; and, if applicable, provide some of them with an individual FEC: TN[k].FEC :=Note that any parent link and any child link is identified by the neighboring node k of node i at the remote end of the link and by its (IPv4-)RouterId[k]. Alternative link identifications are not considered here for reasons of simplification. If the tree branches at the source node s itself, a packet/message is to be sent out, each provided with a different TREE ROUTE TLV. Accordingly we will determine each initial link, stored in linkTo, and the respective initial TREE ROUTE TLV, given by TLV[1],...,TLV[j] that it contains. Hummel & Loke Febuary 1999 [Page 12] Explicit Tree Routing Exp. Aug 1999 The variable j (same scope of the TREE ROUTE TLV) indicates the number of TLVs inside the TREE ROUTE TLV being built. It is initialized to 0 to indicate that TREE ROUTE TLV is empty: - initTreeRouteTLV ( ) { j:=0 } j will be incremented whenever a TLV is added to the TREE ROUTE TLV: - addBracketOpenTLV ( ) { j++; TLV[j] := "("-TLV; }; - addBracketClosedTLV ( ) { j++; TLV[j] := ")"-TLV; }; - addLinearSequenceTLV ( ) { j++; TLV[j] := linearSequenceTLV; }; - addFECTLV ( ) { j++; TLV[j] := TN[currentNode].FEC; }; Temporarily we will build up linearSequenceTLV which contains a sequence of hops given by LINK[1],...,LINK [jj]. It starts being empty by initLinearSequenceTLV ( ) { jj:=0 ; } It is filled with another link by: addChildLink ( INT k ) { INT childNode; jj++; childNode := NT[currentNode].ChildLink [k]; LINK [jj] :=RouterId [childNode]; } You may check whether links are already contained : linearSequenceTLVNotEempty ( ) {returns k >0} By the following loop, source node s sends out the message/packets to the right neighbor nodes conveying the right TREE ROUTE TLVs: for (k := 1; k<= TN[s].ChildLinkCount; k++) { INT LinkTo, j, jj ; initTreeRouteTLV ( ) ; // zero TLVs inside of TREE ROUTE TLV initLinearSequenceTLV ( ) ; // zero links inside of linearSequenceTLV linkTo := NT[s].ChildLink[k]; addChildLink ( k ); // add first child node buildTreeRouteTLV ( LinkTo ); //recursive subroutine ...send out the packet/message with the built TREE ROUTE TLV Hummel & Loke Febuary 1999 [Page 13] Explicit Tree Routing Exp. Aug 1999 to neighbor LSR given by LinkTo. } Note: you may supress sending the TREE ROUTE TLV as well if it only contained "("-TLV, ")"-TLV and no essential information. Definition of subroutine buildTreeRouteTLV: buildTreeRouteTLV ( currentNode ) { if (NT[currentNode].IsLeaf == TRUE ) then { if linearSequenceTLVNotEmpty ( ) then { addLinearSequenceTLV ( ); initLinearSequenceTLV ( ); } addBracketOpenTlv ( ); addFecTlv ( ); //i.e. add NT[currentNode].FEC if present addBracketClosedTlv ( ); } if (NT[currentNode].ChildLinkCount == 1) then { // node is not branching out addChildLink(1) ; // to the link sequence tlv buildTreeRouteTlv (NT[currentNode].ChildLink[1] ); } elseif (NT[currentNode].ChildLinkCount > 1) then { for (k:= 1;k<= NT[currentNode].ChildLinkCount;k++) { addBracketOpenTlv ( ); addChildLink(k) ; // to the link sequence tlv buildTreeRouteTlv ( NT[currentNode].ChildLink[k] ); addBracketClosedTlv ( ); } } } //-----------end of subroutine BuildTreeRouteTLV------------ Hummel & Loke Febuary 1999 [Page 14] Explicit Tree Routing Exp. Aug 1999 APPENDIX B Decoding Algorithm DA, to be called by any node that has received the TREE ROUTE TLV, as to determine: - all child links and respective child TREE ROUTE TLVs, - whether current node is (also) leaf node, - if applicable and if provided, the FEC for current leaf node. An initial analysis of the received TREE ROUTE TLV may fill array incomingTLV [i] for i=1,..,n with all its n TLVs in sequence. incomingTLV [1] will contain a "Linear sequence of hops"-TLV which starts with a "first hop address". If this address does not match the current node's address then a loose route section is traversed and the the message/packet must be forwarded to that address based on the current node's own decision and without changing the TREE ROUTE TLV. Otherwise, DA determines subsequently each adjacent child link, by retrieving the Router Id of each node the message/packet shall be forwarded to - according to the received TREE ROUTE TLV. This IPv4 address information is stored in childNodeRouterId. Simultaneously, DA fills up outgoingTLV[1],...,outgoingTLV[j] which will be contained in /make up the childTreeRouteTLV. childTreeRouteTLV is started as an empty TLV by: initChildTreeRouteTLV ( ) {j:=0;} and is filled by: addCurrentTLV ( ) { if (currentTLV |= NULL) { j++; outgoingTLV [j] := currentTLV; } } The first hop entry of "Linear Sequence of Hops"-TLV While being the currentTLV may be read: readFirstElementOfSequence ( ) { return Router ID of first element of currentTLV // which is a "Linear Sequence of Hops" -TLV Hummel & Loke Febuary 1999 [Page 15] Explicit Tree Routing Exp. Aug 1999 } By calling linearSequenceTLVnotEmpty ( ) { returns number of links > 0; } we can check whether the remaining TLV has become empty or not. currentNodeIsLeaf := FALSE; FECforCurrentNode := NULL; DA ( ); // child -links and -TLVs handled inside if currentNodeIsLeaf then { // handle the received message/packet being a leaf node, // evaluate FECforCurrentNode (if not equal NULL); } DA ( ) //---------Decoding Algorithmus DA------------------ { INT i, nestingLevel, childNodeRouterId; CurrentTLV := incomingTLV [1]; myOwnRouterId:= readFirstSequenceElementOfFirstTLV ( ); if (myOwnRouterId "does not match myself") then { exit; // loose route section | forward message with unchanged // TREE ROUTE TLV based on own decision } else { delete first hop from incomingTLV [1] which is a "Linear sequence of hops"-TLV. if (the remaining incomingTLV [1] has become empty) then i:=1; else i:= 0; j:=0; nestingLevel:=0; childNodeRouterId := NULL; initChildTreeRouteTLV ( ); while (i 0 ) then addCurrentTLV ( ) ; if (currentTLV == "FEC"-TLV & nestingLevel==1 ) then FECforCurrentNode := currentTLV; if ((currentTLV == "Linear Sequence of hops"-TLV) && nestingLevel ==1) then { childNodeRouterId:= readFirstElementOfSequence ( ); addCurrentTLV ( ); } if ((currentTLV == ")"- TLV) && (nestingLevel ==0)) then { if (childNodeRouterId == NULL) then { currentNodeIsLeaf := TRUE; } else { current node is transit node: forward message/packet to child node given by childNodeRouterId, conveying childTreeRouteTLV. processReceivedMessage ( );//e.g. do label binding | initChildTreeRouteTLV ( ); childNodeRouterId := NULL; } } } // ... while loop } // ------------ End of Decoding Algorithm DA ------------ A note about calling processReceivedMessage inside of DA: There may be more information, e.g. a new label, to be forwarded to the next child node. Furthermore,a Next Hop Label Forwarding Entry (NHLFE) may have to be made which relates to the specific child link. Hummel & Loke Febuary 1999 [Page 17]