RSVP -- ReSerVation Protocol USC Information Sciences Institute Marina del Rey, CA CHANGES IN /rsvpd DIRECTORY CHANGES IN RELEASE 4.2a4 rsvp.h: INTEGRITY object Changed format to conform to new specs... - Timestamp based Sequence Number (NTP format, 64 bit). - Key Identifier field size increased to 64 bit. - Sender Address eliminated. - Uniform object type for both IPv4 and IPv6 rsvp_var.h: KEY_ASSOC structure Table entry changed to reflect new INTEGRITY format. MIN_INTGR_SEQ_NO eliminated. rsvp_main.c: cfig_action() Neighbor (sender) address is no longer required and this command has been eliminated. sendkey and recvkey IDs changed to a hex string (8 byte, 16 hex char) and sender address eliminated. These changes have been reflected in the rsvpd man page. rsvp_print.c: fmt_object() Changed to print the new INTGRITY object format. rsvp_bord.c: ntoh_object(), hton_object() Handle network and host formats of INTEGRITY. rsvp_maps.c: check_version_sum(), rsvp_map_packet() Allow both checksum and Integrity to be present. rsvp_key.c: Changes to correspond with the new MD5 draft... - Sender Address not required in INTEGRITY object - Key Identifier field increased to 64b - Sequence number generated using a combination of timestamp and message counter - IPv4 and IPv6 integrity handled uniformly - Key selection procedure sender: virtual interface receiver: keyid - Allow checksum to be present - Handle keys with same keyid - New replay protection algorithm (sans handshake) - Allow Sequence Numbers to wrap around rsvp_path.c: path_refresh() Incrementing of sequence number for an INTEGRITY key association moved from here to set_integrity(). Now it applies to all message types. *.c *.h Updated RSRR interface to RSRR v2. As a result: * rsvp_unicast.c is renamed to rsrr_unicast.c. * rsvp_rsrr.c is renamed to rsrr_rsrr.c. * rsrr.c is added. Changes to various files are intended to adapt to the new RSRR interface which will handle all of IPv4/IPv6 unicast/multicast route queries for rsvpd. All the previous calls to unicast_route() and Route_Query() is now handled by one single rsrr_route_query(). The details of RSRRv2 can be found in the Internet draft draft-ietf-rsvp-routing-02.txt. The definition of bitmap has changed from an unsigned long integer to an array of characters. Consequently, the new bitmap has 64 bits and it can be changed by resetting the BMP_SIZE in rsvp_var.h if this turns out to be insufficient. One example change is, dump_PSB() now prints list of the outgoing interfaces instead of an integer representation of the bitmap. rsa_md5_global.h, rsa_md5c.c, rsa_md5c.h: Implemented as per RFC-1321 : The MD5 Message-Digest Algorithm. rsa_hmac_md5.c, rsa_hmac_md5.h: Implemented as per RFC-2104 : HMAC: Keyed-Hashing for Message Authentication. rsa_md5_mddriver.c: Test vectors and routines for HMAC and MD5 calculations spread over the following Files : rsa_md5_global.h RSAREF types and constants rsa_md5c.c MD5 routines rsa_md5c.h corresponding header rsa_hmac_md5.c HMAC algorithm rsa_hmac_md5.h corresponding header rsvp_key.c: Properly interfaced the HMAC-MD5 algorithm with RSVP Integrity calculations. Integrity implementation tested for Resv, ResvTear, Path, PathTear. rsvp_key.c: Function Modified: set_integrity() Interface changed From : void set_integrity(struct packet *, int, struct in_addr *); To : void set_integrity(struct packet *, int, net_addr *); rsvp_key.c: Function Modified: load_key() Changes to prevent key buffer overflow when given a MD5_LENG Byte key. From : strcpy((char *) (cp = ascikey), keystr); To : strncpy((char *) (cp = ascikey), keystr, 2*MD5_LENG); rsvp_maps.c: Functions Modified: check_version_sum(), rsvp_pkt_map(), rsvp_map_packet() Significant changes to perform integrity check before converting byte order from NET to HOST. The integrity object is pre-processed but care is taken not to perform an extra pass over the entire packet (except in rare cases) rsvp_resv.c: Function Modified: accept_resv_tear() Changes in calculation of interface cause for integrity calculation it matters whether the resv_tear came from the API or over network. From : out_vif = hop_lih(pkt->rsvp_nhop); To : out_vif = IsHopAPI(pkt->rsvp_nhop) ? api_num : hop_lih(pkt->rsvp_nhop); rsvp_path.c: Function Modified: accept_path_tear() Changes to check that INTEGRITY was included if it is required. Similar to accept_path() rsvp_api.c, rsvp_api.h rapi_lib.c: Created a new api_addr structure to pass IP address data between RAPI library and the RSVP daemon. Since the layout and size of a sockaddr_in* can vary on different operating systems, different OS versions, and depending on whether IPv6 support is available, we define and use an OS independent representation. All fields of this new data structure by definition are in network byte order. rsvp_api.c, rsvp_api.h: Major update of API upcall code. (1) When new RAPI session is registered, deliver any existing path state for it in an upcall; but don't send upcall if there is no path state, and don't send upcall to all matching RAPI sessions. (2) Make null PATH_EVENT upcall work (again) for path teardown. (3) Make WF RESV_EVENT upcall work (again). (4) Support API requests/responses in network byte order. (5) Advance to version 5 API but allow range of versions (currently 4 or 5). rapi_lib.c: RAPI now sends out API request through UDP socket at port API_PORT when the attempt to send the request through UNIX domain socket fails. rsvp_netio.c: TTL threshold for multicast forwarding is now enforced for forwarding multicast Path messages. rsvp_resv.c: Fix bug: Teardown of resv state was not resulting in null RESV_EVENT upcall to API. rsvp_resv.c: Fix bug in freeing local copy of filter spec in resv_refresh_PSB(). [Masanobu Yuhara, Fujitsu] rapi_lib.c, rapi_fmt.c: Fix bugs in setting and printing break bits in Adspecs, and reversed parameters to strncpy(). [Masanobu Yuhara, Fujitsu] rtap_cmds.c: Make parsing of CL flowspecs consistent with current int-serv spec (Peak Rate parm is required). [Masanobu Yuhara, Fujitsu] rsvp_err.c: Fix bug in blockade-state processing of ResvErr message for SE style [Masanobu Yuhara, Fujitsu] rapi_lib.h, rsvp_intserv.h: Minor changes to align with expected OpenGroup RAPI standard: Define NON_IS_HOP macro, remove obsolete rapi_set_timo declaration. CHANGES IN RELEASE 4.2a3 February 27, 1998: Makefile: Added the NO_IPV6 macro to provide the ability to compile an IPv4 only version on an IPv6 capable machine. rsvp_LLkern.c: The argument to TC_init() was changed to pass to outgoing interface LIH. It previously passed a file descriptor to a UDP socket used by the TC test stub code. Fixed bug which caused TC_DelFlowspec() to be called with an invalid handle. [Michael Zink , NIST] *.c *.h Init_Object() was changed to set the object size to the exact size of the specified ctype rather than the maximum of all ctypes. IPv4 objects were being sent with IPv6 lengths in IPv6-capable version. Enumerations of the if_vec[] interface table test the type of the interface in addition to the address (phy or vif). IPv6 multicast membership requests now use the interface number rather than the address. rapi_lib.c: Solaris non-blocking code used log() rather than perror(). This caused linking problems for RAPI based applications. rsvp_main.c config.h: API socket now has a definition for the unix file mode which is set on the socket after it has been created. Currently it is set to allow access by non-root users. Added error checking to the command line argument processing code to reject incorrect flags and extra unknown arguments. Fixed the daemon() call to preserve the current working directory. Improved the code which removes files when rsvpd exits. Added logic to pick an alternate log file if the current log file is not writable. rsvp_socks.c, rsvp_socks.h rsvp_trans.c, rsvp_trans.h: Put a fix in the sysctl() parsing of interface messages to eliminate a binary incompatiblity between IPv4 and IPv6 FreeBSD kernels. rsvp_debug.c: Fixed string construction bug in bm_expand(). [Kenjiro Cho, Sony] rsvp_api.c: Fixed a bug which caused a FILTER_SPEC from API to be re-typed as a SENDER_TEMPLATE; result was to send a ResvTear message containing a SENDER_TEMPLATE. rsvp_LLkern.c LL_AddFilter is now being called for a new WF reservation [Noted by Masahiko ENDO, Surigiken] rsvp_rtap.c, rsvp_debug.c Fix bugs in hexmsg command of rtap (injects arbitrary hex message, for testing) and in hexf(). Latter printed words with inverted byte order on a little-endian system. rsvp_var.h, rsvp_resv.c, rsvp_err.c: Make a little more bomb-proof: handle missing Style object in Resv or ResvErr message, with debug printing turned on. CHANGES IN RELEASE 4.2a2 December 31, 1997: rsvp_resv.c, rsvp_LLkern.c, rsvp_TCif.h, rsvp_path.c, rsvp_var.h, rsvp_main.c: Major revision of RSVP interface to link layer, to insert "Link-Layer-Dependent Adaptation Layer" (LLDAL). Should provide generalization needed to support link lauers more complex than simple leased lines or LANs, e.g., ATM. rsvp_api.c, rsvp_debug.c, rsvp_diag.c, rsvp_debug.c, rsvp_util2.c: Ancillary changes to make TCSB code entirely local to LLDAL (module rsvp_LLkern.c). Note: this change has an application-visible consequence: a RESV_EVENT upcall in the API now passes the resv requests (RSBs), not the effective reservation (TCSB). rsvp_main.c, rsvp_rsrr.c: Merged the vif_list into the if_vec. Now all interfaces are in a single common table. rsvp_main.c: A new test_alive() function uses a UDP socket bound to implementation defined port (the lock port) to give an exclusive lock to a single rsvpd process. rsvp_socks.c, rsvp_socks.h: Fixed return values for inet_pton() to be compliant with RFC 2133. Added conditions to remove functions which exist under FreeBSD. Added support for FreeBSD multihoming where multiple addresses can be assigned to a single interface. Incorporated FreeBSD sysctl() code to gather interface information (Kenjiro Cho). rsvp_trans.c, rsvp_trans.h: Fixed bugs with the IPv6 multicast membership and hop option code. Fixed bug where raw outgoing sockets did not have IP_MULTICAST_IF turned on, so Path messages could be actually sent out wrong interface although with correct source address. rsvp_unicast.c: Added IPv6 unicast route support for FreeBSD. Updated Solaris unicast route support (Don Hoffman). rsvp_resv.c: Clean up logic (and perhaps fix some obscure bugs). Define new macro PSBmaps2RSB, to encapsulate complete rules for matching PSBs to RSBs. rsvp_resv.c: Send ResvTear with no filterspec and no flowspec for WF style. rsvp_path.c: Send immediate reservation refresh when new path state appears and there is already reservation state. rsvp_resv.c, rsvp_err.c, rsvp_objs.c, rsvp_objs.h: Change logic so that wildcard filter is represented by NULL pointer, not pointer to all-zero filter. rsvp_resv.c: Fix old bug that allowed route change to go unnoticed if route changed but NHOP address stayed the same: Use LIH (=OIf) as lookup parm for RSBs. [Found by Koutarou Ise, Toshiba] rsvp_timer.c: Use RAND_MAX for range of rand() function. rsvp_util2.c: Fix 4.2a1 bug in form_scope_union(); add IPv6 capability to scope_catf(). rsvp_api.c: Fix old bugs: (1) when report API "Sender addr not my interface", was not setting sender tspec in upcall, which caused rapi_lib to return bad data; (2) confusion between bad sender and bad receiver error codes. rsvp_api.c, rsvp_netio.c: Fix 4.2a1 IPv6 bugs: did not use format IPv6 for filter spec port. Added additional error checking to incoming packets. rsvp_objs.c: Fix 4.2a1 bug: failed to match sender templates correctly. rsvp_path.c: Fix 4.2a1 bug: UDP encapsulated unicast Path message was not setting UDP flag on interface. CHANGES IN RELEASE 4.2a1 Sept 15, 1997: *.c, *.h: All code has been updated to process both IPv4 and IPv6 RSVP protocol datagrams. The network interface table can now contain a mixture of IPv4 and IPv6 interfaces. All object handling is now multiprotocol aware. rsvp_socks.c, rsvp_socks.h: Provides the missing functionality, if any, on a given host or router system with respect to RFC 2133. Also includes simple extensions to the if_nameindex() family of functions to support rsvpd. Includes the definition of an abstract network interface and address which are used for the multiprotocol support now in rsvpd. Utility functions related to these abstract objects are defined, including comparison, parsing strings, and printing to strings. rsvp_trans.c, rsvp_trans.h: Provides an abstraction layer to rsvpd for network and transport layer services. This module provides the functionality to send and receive datagrams using both IP and UDP/IP. All system dependent aspects of these network I/O capabilities are contained in this module. The module is structured to take advantage of the advanced API for sockets outlined in an IETF draft, which is basically the POSIX 1.g ancillary data for sendmsg() and recvmsg() system calls, when it becomes commonly available. rsvp_objs.c, rsvp_objs.h: Provides basic multiprotocol utility functions for RSVP objects. rsvp_objs2.c, rsvp_objs2.h: Provides basic multiprotocol utility functions for RSVP objects which are dependent on data structures which are particular to the rsvpd application (more specifically, the network interface table). rsvp_maps.c: Provides the ability to format RSVP protocol datagrams given a packet structure of RSVP objects. RSVP protocol datagrams can be also parsed back into packet structures. rapi_lib.c, rapi_lib.h, rsvp_api.c: All code for "legacy" API formats, previously ifdef'd with the "OBSOLETE_API" label, was completely removed. rapi_lib.c, rapi_lib.h, rapi_err.h: Make consistency checks called for by IPSEC spec. Also updated RAPI error to include new IPSEC codes. Note that the 3 asynchronous RAPI error codes changed as a result. rsvp_api.c: Complete the handling of GPI sessions: Save GPI_SESSION flag in sid_vec; if it is on, create GPI versions of Path and Resv messages. Also return GPI_SESSION flag in event upcalls. rapi_lib.c, rapi_lib.h, rapi_fmt.c: An additional flag bit XASPEC_FLG_PARM was added to the Simplified format Adspec. This was needed to distinguish Service-is-allowed-but-no-parms-are-supplied from Service-is-disallowed. In addition, the adspec code in rapi_lib.c was completely rewritten to fully support general adspecs in sender commands and path event upcalls. The details are somewhat unpleasantly complicated. rsvp_err.c: INTEGRITY check in accept_path_err was on wrong interface. [Ramesh Pabbati, Microsoft] rapi_lib.c: Miscellaneous bugs were fixed [Kai Krasnodembski] rsvp_path.c: Accept_path now checks for INTEGRITY object when required. ______________________________ Bob Braden Steve Berson Subramanian Vincent Bob Lindell