Internet Draft Internet Draft Daniel Zappala Expiration: January 1999 University of Oregon File: draft-ietf-rsvp-routing-02.txt Jeff Kann USC/ISI RSRR: A Routing Interface For RSVP 1 July 1998 Status of Memo This document is an Internet-Draft. 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." To view the entire list of current Internet-Drafts, please check the "1id-abstracts.txt" listing contained in the Internet-Drafts Shadow Directories on ftp.is.co.za (Africa), ftp.nordu.net (Northern Europe), ftp.nis.garr.it (Southern Europe), munnari.oz.au (Pacific Rim), ftp.ietf.org (US East Coast), or ftp.isi.edu (US West Coast). Abstract This memo describes version 2 of RSRR, a routing interface for RSVP. By using this interface, RSVP may obtain forwarding information from routers and use it to place reservation state within the network. Version 1 of this interface was designed primarily for RSVP interaction with IPv4 multicast routing protocols. Version 2 adds support for IPv4 unicast as well as IPv6 unicast and multicast routing. A backwards compatibility mechanism is provided. Zappala, Kann Expiration: January 1999 [Page 1] Internet Draft RSRR June 1998 1. Introduction This document describes Routing Support for Resource Reservations (RSRR), an abstract interface by which RSVP [5] may obtain routing information. RSVP is a resource reservation protocol used by hosts to request Quality of Service from the network. RSVP does not include a routing protocol; instead it may use any underlying routing protocol(s) to determine where it should carry resource reservations. The RSRR interface provides RSVP with forwarding table entries and notifies it when those entries change. This document elaborates on the routing support described in the RSVP spec [2]. This document describes version 2 of RSRR. In addition to IPv4 multicast routing protocols, which were covered extensively in the version 1 document, version 2 explicitly addresses IPv4 unicast routing and adds support for IPv6 unicast and multicast routing. Version 2, like version 1, also provides RSVP with information on the interfaces known to RSRR. Finally, version 2 includes a backwards- compatibility mechanism that allows RSVP to determine the version of RSRR that a routing daemon is using. Section 2 gives an overview of RSVP functionality and its requirements for routing and kernel support. Section 3 describes RSRR as an abstract service interface. Section 4 describes how this interface might typically be implemented within RSVP. Appendix A gives a specification of RSRR used for communication between RSVP and routing daemons. Appendix B lists the RSRR version 1 specification, which version 2 implementations must also support. This is included for reference, since some implementations may support multiple versions. Appendix C lists the implementation status of RSRR. 2. RSVP Overview and RSRR Motivation Using RSVP, sources send "Path" messages hop-by-hop to the destination (Figure 1a). Each router uses the "Path" message to create reverse-path routing state and forwards the message toward the destination. Receivers send "Resv" messages toward sources, following the reverse-path routing state (Figure 1b). Each router uses the "Resv" message to query admission control to accept or reject the embedded reservation request. Reservation messages utilize various "styles" to allow sharing among different senders. For example, the shared-explicit style targets a reservation at a list of senders, and the wildcard style targets a reservation at all upstream senders (Figure 1c). Zappala, Kann Expiration: January 1999 [Page 2] Internet Draft RSRR June 1998 Sender Sender S2 S1 S3 - - - - - | | | | | | | | | | - P - R - - - | P | R R \ / R / R - P - R R - R - R | | | | | | | | P - P R - R - - P / \ P R / \ R R \ / R P / - R / - R - R P / | | R / | | | | P / P - P R / R - R - R P / P / \ P R / R / \ R | R - - - - - - - R | | | | | | | | | | | | | | - - - - - - - R1 R2 R3 R1 R2 R3 Receiver (a) PATH message (b) RESV message merged (c) RESV message branches multicasted as it follows path as it travels toward downstream state upstream multiple senders Figure 1: RSVP Overview With proper operating system support, a router could pull an RSVP " Path" message out of the forwarding engine, do RSVP processing, and then resume forwarding the message. However, multicast "Path" messages have unique requirements. After RSVP performs its processing, it may need to send a different copy of the "Path" message out each outgoing interface. Normally, IP multicast replicates datagrams and sends identical copies out each of the outgoing interfaces. Thus, RSVP does not use regular IP multicast forwarding and instead needs to replicate the "Path" messages on its own and simulate its own multicast forwarding. To accomplish this objective, RSVP needs to obtain forwarding table entries from the routing protocol; this is what the RSRR interface is for. In addition, the operating system must support several basic functions for RSVP. First, RSVP needs to know which interface a "Path" message arrives on. This allows RSVP to suppress forwarding of multicast packets that routing has determined have arrived via the wrong incoming interface. It also needs to receive all multicast "Path" messages, even if they arrive on the wrong interface; this allows RSVP processing to occur for local receivers. Second, RSVP must be allowed to insert the original source address of the "Path" message in its IP header This allows the "Path" message to be Zappala, Kann Expiration: January 1999 [Page 3] Internet Draft RSRR June 1998 processed by downstream routers as if it came from the original source. Finally, when RSVP sends a multicast packet, it expects that it can tell the operating system to forward the packet directly over a particular interface, without performing any of the usual multicast routing checks and without looping the packet back to other interfaces. These operating system functions, combined with RSRR, allow RSVP to forward distinct packets hop-by-hop over each link in a multicast path between a source and destination(s). When obtaining forwarding table entries from RSRR, RSVP also needs to know whether the multicast routing protocol is using sender-rooted (e.g shortest-path) trees or shared trees (e.g. with the PIM [3] or CBT [1] multicast routing protocols). For shared trees, RSVP only needs to obtain and store one route for all senders to the group. In addition, RSVP must mimic the IP multicast forwarding model. This means that for bidirectional shared trees, a packet can be accepted over any interface and is forwarded over all other interfaces listed in the route. When running over shared trees, RSVP can also significantly decrease the size of the "scope" object in wildcard filter "Resv" messages. RSVP uses a "scope" object, listing all upstream senders, to prevent looping of wildcard filter "Resv" messages [4] (Figure 2a). For shared trees, RSVP can use a " scope" object that includes a wildcard address, greatly reducing the size of the "Resv" message. A "Resv" message with a wildcard address would follow shared tree state but never sender tree state (Figure 2b). Zappala, Kann Expiration: January 1999 [Page 4] Internet Draft RSRR June 1998 S1 S2 S3 S1 S2 S3 - - - - - - | | | | | | | | | | | | - - - - - - R \ / R / R R \ / R / R R[1] - R[2] - R[3] R[*] - R[*] - R[3] | | | | | | | | - - - - R \ / R R \ / R R[1,2] - R[3] R[*] - R[3] | | | | - R - R | R[1,2,3] | R[*,3] - R - R | | | | - - Receiver Receiver (a) wildcard RESV message (b) wildcard RESV message with carrying scope objects senders #1,2 on a shared tree Figure 2: The "Scope" Object in Wildcard Reservations 3. Abstract Service Interface We describe RSRR as an abstract service interface because it may be realized in several different ways. For example, some implementations may use system calls if the operating system can supply the functionality of RSRR. In a typical implementation, RSVP might use the RSRR abstraction as the basis of an interface to a routing support module (see Section 4), in addition to using the RSRR protocol (see Appendix A) to communicate with multicast routing protocol daemons. To achieve this generality, the following interface description uses the term "RSRR client" to indicate the entity requesting routes and the term "RSRR server" to indicate the responding entity. The client is typically the RSVP daemon and the server is typically a routing protocol daemon or the operating system. The first thing an RSRR client must do is determine the set of network interfaces the RSRR server is using. This allows the client to make sense of the routes it acquires from the server. RSRR represents network interfaces -- which may be physical interfaces, tunnels, or any other operating system mechanism -- as "virtual Zappala, Kann Expiration: January 1999 [Page 5] Internet Draft RSRR June 1998 interfaces" or "vifs". A vif has the following attributes: id a unique identifier, threshold a TTL threshold, prefix a CIDR prefix, status a bitmask status vector, family the address family, length the address length, and local_addr a local address. This information represents what the RSRR client (e.g. RSVP) needs to simulate IP multicast forwarding. IP multicast uses the "TTL threshold" to control the scope of packets, checking it on a per-packet basis. A newer form of administrative scoping is enforced on a per-route basis, so it is reflected in the routes themselves and is thus transparent to the RSRR client. The server may also define a "status" vector for any other information it needs to pass to the client. The RSRR client obtains the set of network interfaces by issuing an Interface Query of the form: Interface_Query(). The server responds with an Interface Reply that includes the number of vifs and a list of the vifs with their attributes as defined above: Interface_Reply(num, vif_list). The RSRR server automatically notifies the client if the set of inter- faces or their status changes. Notification is in the form of a sponta- neous Interface Reply. Once the RSRR client has received the Initial Reply, it can begin requesting routes by sending a Route Query for a source-destination pair: Route_Query(source, destination, notification). The RSRR server responds by sending a Route Reply: Zappala, Kann Expiration: January 1999 [Page 6] Internet Draft RSRR June 1998 Route_Reply(source, destination, notification, incoming_vif, outgoing_vif_bitmask, tree_type). Multicast routes consist of an "incoming vif" and an "outgoing vif bit- mask". Unicast routes consist of a single bit set in the "outgoing vif bitmask" to indicate the next hop; the "incoming vif" is always zero and should be ignored by the client. In addition, for unicast queries and replies the "source" address is zero. By setting the "notification" flag in the Route Query, the RSRR client may ask the server to notify it when a route changes. A multicast route change is a change in the "incoming vif" or "outgoing vif bitmask", i.e. joins, prunes, link failures and link recoveries are all included. A unicast route change is a change in the "outgoing vif bitmask". If the server is able to provide this service, it sets a corresponding "notifi- cation" flag in the Route Reply, otherwise it clears the flag. If the client receives a Route Reply with the "notification" flag set, it can assume that routing will notify it -- via a spontaneous Route Reply -- when the route for the source-destination pair changes. In the mean- time, the RSRR client can assume the route has not changed. If the RSRR server can not support route change notification, then the client must poll routing for forwarding table entries in order to learn of route changes. The "tree type" flag in the Route Reply is used only for multicast routes. It has one of the following values: o sender o unidirectional shared o hybrid unidirectional shared o bidirectional shared o hybrid bidirectional shared The tree type indicates how forwarding occurs on the tree and thus how to interpret the route contained in the Route Reply. The "sender" value indicates that a separate multicast tree is constructed for each sender. Typically this is a shortest-path tree, but it may also be built using QoS routing, alternate paths, or other methods. In this case, packets must arrive via the "incoming vif" and are then sent on all of the vifs listed in the "outgoing vif bitmask". A " unidirectional shared" tree is constructed for the entire group, but data flows in only one direc- tion -- from the root of the tree down to all group members. The for- warding model for the "unidirectional shared" tree is the same as for a sender tree; the difference is that senders transmit data to the root of Zappala, Kann Expiration: January 1999 [Page 7] Internet Draft RSRR June 1998 the tree along separate branches. At routers where these branches are located, a Route Reply with the "sender" tree type will be returned. A "bidirectional shared" tree allows data to be sent by any group member. An incoming packet may arrive on any interface, and it is sent on all remaining vifs listed in the "outgoing vif bitmask". For this tree type, the " incoming vif" is set to zero and should be ignored. Hybrid multicast trees are those where some senders use a shared tree and others use a sender tree. If the tree type is set to one of the hybrid types, this indicates that the sender listed in the Route Reply is using the shared tree given by the route. Senders that are using a sender tree will have a "sender" tree type. Note that for hybrid trees the RSRR client must issue queries for each sender in case that sender is using a separate tree. This is in contrast to the case where all senders use a shared tree, in which case the RSRR client does not need to issue separate Route Queries for each of them. Hybrid trees have the further consequence that senders can change tree types over time. Changes of this sort are handled by route change noti- fication. For example, if a sender on a hybrid shared tree later switches to a sender-based tree, the RSRR server will send an updated Route Reply with a new route and a new tree type. Likewise, if all senders are using a shared tree, but later one switches to a shortest- path tree, the RSRR server will send two Route Replies -- one for the shared tree that changes the tree type to hybrid, and one for the sender that is now using a sender tree. 4. Implementing RSRR within RSVP A typical RSVP implementation could use the RSRR abstraction to build a routing support module that handles interface configuration and routing queries for IPv4 and IPv6 unicast and multicast routing information. Figure 3 shows how the routing support module would interact with RSVP and other router components. The module has three interfaces, all of which are modeled on the RSRR abstract service interface. First, RSVP's core processing routines request interface configuration and forwarding table entries from the routing support module. The module then collects this information from several sources. It uses operating system calls when the kernel is able to provide the required information. Otherwise, it uses the RSRR Proto- col to collect this information from a routing protocol daemon. Appendix A specifies the RSRR protocol for interprocess communica- tion. For example, ISI's current implementation gets unicast inter- faces and routes from the kernel, while it gets multicast interfaces and routes using the RSRR protocol. Zappala, Kann Expiration: January 1999 [Page 8] Internet Draft RSRR June 1998 RSVP Daemon ___________ | Core RSVP | | Processing| | Routines | |-----------| | ^ Routing Support Routing Daemon | | Interface (IPv4/IPv6 Unicast/Multicast) | v | ___________________________ | --------- | RSRR | ______ | | | |Routing|<---------->|| | | Core | | |Support| | Protocol || RSRR |<-->| Routing | | |Module | | || Task | | Routines | | |_______| | ||______| | | |___________| |____________|_____________| ^ ^ | Operating System Calls | | | v v ======================================================= Kernel Figure 3: RSVP Routing Support Module 5. Conclusion Using RSRR version 2 and the routing support module has made it eas- ier to upgrade RSVP to include IPv6 support by packaging interface configuration and route acquisition for IPv4 and IPv6 unicast and multicast routing into one module. The impact of RSRR on a routing daemon is low. The daemon only has to handle RSRR protocol queries when an RSVP session is created and when a route for an RSVP session changes. The daemon incurs very lit- tle cost for providing route change notification; essentially it only has to tag the subset of its routes for which RSVP is interested in receiving notification. This amounts to keeping an extra bit for each routing entry. Furthermore, the RSRR services can be provided independently by each router, so its implementation is not subject to any interoperability constraints. 6. Acknowledgments We would like to thank Bob Braden, Deborah Estrin, Bill Fenner, Scott Shenker, and Lixia Zhang for their help with this work. Zappala, Kann Expiration: January 1999 [Page 9] Internet Draft RSRR June 1998 References [1] A. J. Ballardie, P.F. Francis, and J. Crowcroft, "Core Based Trees", In "ACM SIGCOMM", August 1993. [2] R. Braden, L. Zhang, S. Berson, S. Herzog, and S. Jamin, "Resource ReSerVation Protocol (RSVP) - Version 1 Functional Specification", work in progress, March 1997. [3] Stephen Deering, Deborah Estrin, Dino Farinacci, Van Jacobson, Ching-Gung Liu, and Liming Wei, "An Architecture for Wide-Area Mul- ticast Routing", In "ACM SIGCOMM", August 1994. [4] Daniel Zappala, "RSVP Loop Prevention for Wildcard Reservations", Work in Progress, February 1996. [5] Lixia Zhang, Steve Deering, Deborah Estrin, Scott Shenker, and Daniel Zappala, "RSVP: A New Resource ReSerVation Protocol", "IEEE Network", September 1993. Zappala, Kann Expiration: January 1999 [Page 10] Internet Draft RSRR June 1998 Appendices A. RSRR Protocol Specification This section details the RSRR version 2 messages format to be exchanged between RSVP and a routing protocol. RSVP would like to use version 2 of RSRR to communicate with routing protocols, but fall back to version 1 if routing does not support version 2. One way to do this would be to issue an Interface Query for version 2 and wait to see if routing responds. If routing is using version 1 this message will be dropped and, after a timeout, RSVP could send a version 1 query. However, to avoid this delay, we have included a mechanism in RSRR for backwards compatibility. RSVP issues an Interface Query using version 1, but sets the Num field to the maximum version of RSRR that RSVP supports. The routing protocol, if it supports only version 1, will ignore this field and respond with an Interface Reply for ver- sion 1. A routing protocol supporting version 2 and higher should examine this field and respond using a version equal to the minimum of Num and the maximum supported version of RSRR. This mechanism allows RSVP and routing to communicate using the maximum version of RSRR that they both support. Note that routing protocols implement- ing version 2 or higher should also be able to support queries for lower versions of RSRR. For reference, the version 1 RSRR specifica- tion is listed in Appendix A. A.1 RSRR message format An RSRR message consists of: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version | Type | Flags | Num | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |... | | | Version Routing Support for Resource Reservations Version. This document specifies version 2 of RSRR. Type This document defines four message codes for RSRR: 1 = Interface Query 2 = Interface Reply Zappala, Kann Expiration: January 1999 [Page 11] Internet Draft RSRR June 1998 3 = Route Query 4 = Route Reply The rest of the message is defined separately for each RSRR code. A.2 Interface Query +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version | Type | Flags | Num | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Version 1 For compatibility reasons. Type 1 = Interface Query Flags A bit vector that specifies what RSVP requests, currently only Notification bit is defined. +-+-+-+-+-+-+-+-+ | |N| +-+-+-+-+-+-+-+-+ N = 1 if RSVP requests notification of interfaces changes Num Maximum supported RSRR version Zappala, Kann Expiration: January 1999 [Page 12] Internet Draft RSRR June 1998 A.3 Interface Reply +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version | Type | Flags | Num | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Vif ID-1 |Vif Threshold-1| Prefix | Vif Status-1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Address Family | Address Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Vif Local Address-1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |... | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Vif ID-N |Vif Threshold-N| Prefix | Vif Status-N | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Address Family | Address Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Vif Local Address-N | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Version 2 Type 2 = Interface Reply Flags 1 = Error occurred during initial query, 0 otherwise Num Number of vifs being reported Vif ID-N ID for the Nth vif Vif Threshold-N The threshold ttl for the vif; an outgoing message must have a ttl greater than the threshold to be sent Prefix The CIDR prefix for the address Vif Status-N A bit vector representing the vif status: +-+-+-+-+-+-+-+-+ | |N|P|U|M| Zappala, Kann Expiration: January 1999 [Page 13] Internet Draft RSRR June 1998 +-+-+-+-+-+-+-+-+ N = 1 if notification will be made in case of vif changes. P = 1 if vif is physical interface, 0 if it is virtual. U = 1 if vif is unicast-disabled, 0 if it is enabled. M = 1 if vif is multicast-disabled, 0 if it is enabled. The rest of the field is transmitted as zeroes. Address Family The address family of the following address. Address Length The length of the following address in octets. Vif Local Address-N The local address of the physical interface corresponding to the vif A.4 Route Query +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version | Type | Flags | Num | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Address Family | Address Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Query Identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Version 2 Type 3 = Route Query Flags Currently only the Notification Bit is defined: +-+-+-+-+-+-+-+-+ | |N| +-+-+-+-+-+-+-+-+ N = 1 if RSVP requests route change notification for this query, Zappala, Kann Expiration: January 1999 [Page 14] Internet Draft RSRR June 1998 0 otherwise. The rest of the field is transmitted as zeroes. Num 0 Address Family The address family of the following address. Address Length The length of the following address in octets. Destination Address Destination address being queried (unicast or multicast) Source Address Source address being queried (null for unicast) Query Identifier Identifier used by reservation protocol Zappala, Kann Expiration: January 1999 [Page 15] Internet Draft RSRR June 1998 A.5 Route Reply +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version | Type | Flags | Num | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Address Family | Address Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Query Identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Incoming Vif | Tree Type | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + + | | + + | Outgoing Vif Bitmask | + + | | + + | | + + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Version 2 Type 4 = Route Reply Flags The currently defined flags are: +-+-+-+-+-+-+-+-+ | |E|N| +-+-+-+-+-+-+-+-+ N is set if N is set in the corresponding route query and the router can perform route change notification for the query. Otherwise N is cleared. Zappala, Kann Expiration: January 1999 [Page 16] Internet Draft RSRR June 1998 E is set if routing is unable to obtain routing information for the route query. Otherwise E is cleared. The rest of the field is transmitted as zeroes. Address Family The address family of the following address. Address Length The length of the following address in octets. Destination Address destination address of query = destination address of reply Source Address source address of query = source address of reply (null if unicast) Query Identifier identifier used by reservation protocol, copied from query message Incoming Vif incoming Vif for (S,G) or default (S,*) if no group-specific state; invalid if E bit is set Tree Type the currently defined values are: 0 sender tree 1 unidirectional shared tree 2 hybrid unidirectional shared tree 3 bidirectional shared tree 4 hybrid bidirectional shared tree Reserved transmitted as 0 Outgoing Vif Bitmask bitmask of outgoing Vifs for (S,G) or default (S,*) if no group-specific state; invalid if E bit is set; RSVP should handle entire bitmask size or otherwise warn user that some routing information may be lost B. RSRR V1 Protocol Specification Zappala, Kann Expiration: January 1999 [Page 17] Internet Draft RSRR June 1998 B.1 RSRR V1 Message Format An RSRR v1 message consists of: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version | Type | Flags | Num | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |... | | | Version Routing Support for Resource Reservations Version. This appendix specifies version 1 of RSRR. Type This appendix defines four message codes for RSRR: 1 = Initial Query 2 = Initial Reply 3 = Route Query 4 = Route Reply The rest of the message is defined separately for each RSRR code. B.2 Initial Query +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version | Type | Flags | Num | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Version as defined above. Type 1 = Initial Query Flags, Num 0 Zappala, Kann Expiration: January 1999 [Page 18] Internet Draft RSRR June 1998 B.3 Initial Reply +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version | Type | Flags | Num | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Vif ID-1 |Vif Threshold-1| Vif Status-1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Vif Local Address-1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |... | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Vif ID-N |Vif Threshold-N| Vif Status-N | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Vif Local Address-N | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Version as defined above. Type 2 = Initial Reply Flags 0 Num Number of vifs being reported Vif ID-N ID for the Nth vif Vif Threshold-N The threshold ttl for the vif; an outgoing message must have a ttl greater than the threshold to be sent Vif Status-N A bit vector representing the vif status. Currently only the Disabled bit is defined: +-+-+-+-+-+-+-+-+ | |D| +-+-+-+-+-+-+-+-+ D = 1 if vif is administratively disabled, 0 otherwise. The rest of the field is transmitted as zeroes. Vif Local Address-N Zappala, Kann Expiration: January 1999 [Page 19] Internet Draft RSRR June 1998 The local address of the physical interface corresponding to the vif B.4 Route Query +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version | Type | Flags | Num | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Query Identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Version as defined above Type 3 = Route Query Flags Currently only the Notification Bit is defined: +-+-+-+-+-+-+-+-+ | |N| +-+-+-+-+-+-+-+-+ N = 1 if RSVP requests route change notification for this query, 0 otherwise. The rest of the field is transmitted as zeroes. Num 0 Destination Address Group address being queried Source Address Source address being queried Query Identifier Identifier used by reservation protocol Zappala, Kann Expiration: January 1999 [Page 20] Internet Draft RSRR June 1998 B.5 Route Reply +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version | Type | Flags | Num | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Query Identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Incoming Vif | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Outgoing Vif Bitmask | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Version as defined above. Type 4 = Route Reply Flags The currently defined flags are: +-+-+-+-+-+-+-+-+ | | S |E|N| +-+-+-+-+-+-+-+-+ N is set if N is set in the corresponding route query and the router can perform route change notification for the query. Otherwise N is cleared. E is set if routing is unable to obtain routing information for the route query. Otherwise E is cleared. S has the binary value 01 if the listed sender is using a shared tree, but some other senders for the same destination use sender trees. S has the binary value 10 if all senders for the destination use shared trees. Otherwise, S has the value 00. The rest of the field is transmitted as zeroes. Destination Address group address of query = group address of reply Source Address source address of query = source address of reply Zappala, Kann Expiration: January 1999 [Page 21] Internet Draft RSRR June 1998 Query Identifier identifier used by reservation protocol, copied from query message Incoming Vif incoming Vif for (S,G) or default (S,*) if no group-specific state; invalid if E bit is set Reserved transmitted as 0 Outgoing Vif Bitmask bitmask of outgoing Vifs for (S,G) or default (S,*) if no group-specific state; invalid if E bit is set C. Implementations Code supporting RSRR that has been and is being developed includes: o ISI's RSVP version 4.2 and Xerox PARC's distribution of DVMRP/mrouted version 3.8 support RSRR version 1, minus support for shared trees o ISI plans to release a future version of RSVP with support for RSRR version 2, o UO plans to add support for RSRR version 2 to Merit's GateD multi- cast version 5, specifically testing shared tree support with IPv4 PIM sparse mode. This code should be general enough to support other multicast protocols implemented within GateD. Security Considerations Security considerations are not discussed in this memo. Authors' Addresses Daniel Zappala Department of Computer and Information Science University of Oregon Eugene, OR 97403 EMail: zappala@cs.uoregon.edu Jeff Kann USC Information Sciences Institute 4676 Admiralty Way Marina del Rey, CA 90292 EMail: kann@isi.edu Zappala, Kann Expiration: January 1999 [Page 22] Internet Draft RSRR June 1998 Zappala, Kann Expiration: January 1999 [Page 23]