RFC 5284 PROPOSED STANDARD RSVP · ERRORS · SIGNALING

RSVP User Errors: User-Defined Errors for RSVP

A new RSVP object that lets implementers carry their own error codes and descriptions.

On rfc-editor.org ↗
PUBLISHED
August 2008
AUTHORS
G. Swallow, A. Farrel
STREAM
IETF
ERROR CODE
33 (User Error Spec)
OBJECT CLASS
194, C-Type 1
ENTERPRISE NUMBER
32 bits
USER ERROR VALUE
16 bits
SUBOBJECT LENGTH
At least 4, multiple of 4
DOI
10.17487/RFC5284

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Network Working Group                                         G. Swallow
Request for Comments: 5284                           Cisco Systems, Inc.
Category: Standards Track                                      A. Farrel
                                                      Old Dog Consulting
                                                             August 2008


                      User-Defined Errors for RSVP

Status of This Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Abstract

   The Resource ReserVation Protocol (RSVP) defines an ERROR_SPEC object
   for communicating errors.  That object has a defined format that
   permits the definition of 256 error codes.  As RSVP has been
   developed and extended, the convention has been to be conservative in
   defining new error codes.  Further, no provision for user-defined
   errors exists in RSVP.

   This document defines a USER_ERROR_SPEC to be used in addition to the
   ERROR_SPEC to carry additional user information related to errors.

1.  Introduction

   The Resource ReserVation Protocol (RSVP) [RFC2205] defines an
   ERROR_SPEC object for communicating errors.  That object has a
   defined format that permits the definition of 256 error codes.  As
   RSVP has been developed and extended, the convention has been to be
   conservative in communicating errors.  Further, no provision for user
   defined errors exists in RSVP.

   When developing extensions to RSVP, it is often useful for those
   implementing to define error messages to aid both in the initial
   debugging and in testing against older versions or other
   implementations.

   This document defines a new RSVP object to permit user-defined errors
   to be communicated.  This will enable organizations to define errors
   that they can use for internal development.  These error values could
   also be shared with the community at large to aid in promoting
   interoperability between diverse implementations.

   RSVP PathErr and ResvErr messages require the presence of an
   ERROR_SPEC object ([RFC2205]).  [RFC3473] defines the Notify message
   that also requires the presence of an ERROR_SPEC object.  In order to
   not change the mandatory contents of these messages, this document
   defines a new error code value that indicates that the new object is
   present and carries a user-defined error code.

   Note that the ResvConf message defined in [RFC2205] also carries an
   ERROR_SPEC object.  But this usage of the object does not carry
   meaningful Error Codes or Error Values and so the extensions defined
   in this document are not applicable to that message.

1.1.  Conventions

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in RFC 2119 [RFC2119].

2.  User-Defined Error

   A new Error Code is defined for use in an ERROR_SPEC object.

      Error Code = 33: User Error Spec

      This error code is used to signal the presence of a
      USER_ERROR_SPEC.  One Error Value is defined as follows.

        Error Value 0 = Further details in User Error Spec

        Further error values may be defined in future specifications.

   When sending this error code, a USER_ERROR_SPEC object MUST be
   included in the PathErr, ResvErr, or Notify message.

3.  USER_ERROR_SPEC Class

   A new RSVP object class called USER_ERROR_SPEC is defined.  To
   support backwards compatibility, its class number is in the range
   192-247.  As defined in [RFC2205], implementations that do not
   understand such an object will forward it unmodified.

   USER_ERROR_SPEC object: Class = 194, C-Type = 1

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +---------------+---------------+---------------+---------------+
      |                       Enterprise Number                       |
      +---------------+---------------+---------------+---------------+
      |    Sub Org    |  Err Desc Len |        User Error Value       |
      +---------------+---------------+---------------+---------------+
      |                                                               |
      ~                       Error Description                       ~
      |                                                               |
      +---------------+---------------+---------------+---------------+
      |                                                               |
      ~                     User-Defined Subobjects                   ~
      |                                                               |
      +---------------+---------------+---------------+---------------+

      Enterprise Number

         A unique identifier of an organization encoded as a 32-bit
         integer.  Enterprise Numbers (sometimes known as Private
         Enterprise Numbers) are assigned by IANA and managed on a first
         come first served basis through the IANA registry named
         "Enterprise Numbers" [RFC2578].

      Sub Org

         A unique identifier of an organization encoded as an 8-bit
         integer.  An organization MAY use this field to create
         independent Error Value spaces.  This is intended to facilitate
         teams that are doing parallel development.  If independent
         spaces are not required, this field SHOULD be set to zero.

      Err Desc Len

         The length of the error description in the Error Description
         field in bytes excluding any padding.  Zero is a valid length
         if no error description is supplied.

      User Error Value

         A 16-bit integer.  The meaning is specified by the
         (sub-)organization indicated by the Enterprise Number and Sub
         Org fields.

      Error Description

         A string of characters padded with nulls (0x00) to a multiple
         of 4 bytes.  According to the guidance in [RFC2277], this
         string MUST use UTF-8/Net-Unicode encoding [RFC5198].
         Furthermore, it is RECOMMENDED that implementations limit the
         strings that they generate to single-line printable US-ASCII
         [ASCII] whenever feasible to improve the likelihood of easy use
         by the recipient.

         If the Err Desc Len is zero, then no bytes are supplied.

         Note that the content of this field is implementation-specific.
         It is typically printable, but might not be shown to all users
         in all implementations (because of character set choice).
         Therefore, the content of the field SHOULD be limited to
         supplementary information and SHOULD NOT contain information
         critical to operating the network.  Critical information is
         present in the User Error Value field.

      User-Defined Subobjects

         User-defined subobjects MAY be included.  The generic format of
         subobjects is specified in Section 3.1.  The semantics of a
         subobject is indicated by the Type field, but the semantics,
         format, and contents of the Value field are specified by the
         (sub-)organization indicated by the Enterprise Number and Sub
         Org fields of this object.

3.1.  Subobjects

   Each subobject is encoded as a TLV in the following format:

       0                   1
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-------------//----------------+
      |     Type      |     Length    | (Subobject contents)          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-------------//----------------+

      Type

         An 8-bit number assigned by the (sub-)organization indicated by
         the Enterprise Number and Sub Org fields of the USER_ERROR_SPEC
         object.

      Length

         The Length contains the total length of the subobject in bytes,
         including the Type and Length fields.  The Length MUST be at
         least 4, and MUST be a multiple of 4.

4.  Procedures for Using the User Error Spec

4.1.  Procedures for Sending the User Error Spec

   A USER_ERROR_SPEC object MAY be included in any PathErr, ResvErr, or
   Notify message for any defined error code.  The Enterprise Number
   MUST be a valid value assigned by IANA from the "Enterprise Numbers"
   registry.

   As specified in [RFC2205] and [RFC3473], an ERROR_SPEC object with a
   valid error code MUST be included in all PathErr, ResvErr, and Notify
   messages.  This rule is not changed by these procedures even when a
   USER_ERROR_SPEC object is included.  If no other error code applies,
   the Error Code in the ERROR_SPEC object MUST be set to "User Error
   Spec" as defined in Section 2 of this document.  When the Error Code
   in the ERROR_SPEC object is set to "User Error Spec", the Error Value
   sub-code SHOULD be set to "Further details in User Error Spec" as
   defined in Section 2, but further Error Value sub-codes may be
   defined in future specifications.

4.2.  Procedures for Receiving the User Error Spec

   It is RECOMMENDED that implementations that receive a PathErr,
   ResvErr, or Notify message carrying a USER_ERROR_SPEC object log (at
   a minimum) the Enterprise Number, Sub-organization, User Error Value,
   and Error Description.  Note that the character set used for the
   Error Description may mean that it might not be suitable for display
   of logging in all systems.  Implementations capable of interpreting
   the contents of the USER_ERROR_SPEC object SHOULD take further action
   based on the reported error.

   Implementations that are not UTF-8 capable and that receive a
   USER_ERROR_SPEC object SHOULD handle the Error Description according
   to the procedures set out in [RFC5137].

   If a message is received containing an ERROR_SPEC object using the
   "User Error Spec" error code, but not containing a USER_ERROR_SPEC
   object, the message MUST be treated as malformed and handled
   according to [RFC2205].

   Implementations SHOULD ignore repeated occurrences of USER_ERROR_SPEC
   objects, and SHOULD forward them unchanged on any messages that they
   forward.  This provides for forward compatibility.

   Implementations receiving a USER_ERROR_SPEC object on some message
   other than a PathErr, ResvErr, or Notify message MUST treat the error
   as a malformed message and process according to [RFC2205].

5.  IANA Considerations

5.1.  RSVP Error Codes

   This document makes the following assignments from the RSVP Error
   Codes and Globally-Defined Error Value Sub-Codes registry:

        Error Code      Meaning

           33           User Error Spec

   One Error Value sub-code is defined for use with this Error Code as
   follows:

         0 = Further details in User Error Spec

5.2.  RSVP Objects

   This document makes the following assignments from the RSVP Class
   Names, Class Numbers, and Class Types registry:

       Number Space     Value       Name

       Class Numbers     194        USER_ERROR_SPEC

       Class Type         1         User-Defined Error

6.  Security Considerations

   This document makes no changes to the basic message exchanges of
   [RFC2205] and [RFC3473].  It will result in a small increase in the
   number of error messages sent in cases where messages were previously
   silently dropped due to the lack of an appropriate error code.

   The mechanisms defined in this document may be used by
   implementations to report additional error conditions and information
   arising from security issues and attacks on the RSVP network.

   Note that the use of a character string that will be displayed or
   logged opens the potential for certain security attacks through the
   use of overruns or embedded control characters.  Implementations
   SHOULD take precautions against overruns, and (especially where the
   full character set of [RFC5198] is not supported, SHOULD use the
   procedures set out in [RFC5137] to handle unexpected or unknown
   control characters.

7.  Acknowledgments

   The authors would like to thank Elisheva Halevy for motivating this
   document.  Thanks to Tom Nadeau, Magnus Westerlund, Hannes
   Tschofenig, Bruce Davie, Jukka Manner, Francois Le Faucheur, Lars
   Eggert, and Tom Petch for their review and comments.

8.  References

8.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC2205]  Braden, R., Ed., Zhang, L., Berson, S., Herzog, S., and S.
              Jamin, "Resource ReSerVation Protocol (RSVP) -- Version 1
              Functional Specification", RFC 2205, September 1997.

   [RFC3473]  Berger, L., Ed., "Generalized Multi-Protocol Label
              Switching (GMPLS) Signaling Resource ReserVation
              Protocol-Traffic Engineering (RSVP-TE) Extensions", RFC
              3473, January 2003.

   [RFC5137]  Klensin, J., "ASCII Escaping of Unicode Characters", BCP
              137, RFC 5137, February 2008.

   [RFC5198]  Klensin, J. and M. Padlipsky, "Unicode Format for Network
              Interchange", RFC 5198, March 2008.

   [ASCII]    American National Standards Institute, "USA Code for
              Information Interchange", ANSI X3.4, 1968.

8.2.  Informative References

   [RFC2277]  Alvestrand, H., "IETF Policy on Character Sets and
              Languages", BCP 18, RFC 2277, January 1998.

   [RFC2578]  McCloghrie, K., Perkins, D., and J. Schoenwaelder,
              "Structure of Management Information Version 2 (SMIv2)",
              STD 58, RFC 2578, April 1999.

Authors' Addresses

   George Swallow
   Cisco Systems, Inc.
   EMail: swallow@cisco.com

   Adrian Farrel
   Old Dog Consulting
   EMail: adrian@olddog.co.uk

Full Copyright Statement

   Copyright (C) The IETF Trust (2008).

   This document is subject to the rights, licenses and restrictions
   contained in BCP 78, and except as set forth therein, the authors
   retain all their rights.

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Intellectual Property

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an
   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at
   ietf-ipr@ietf.org.

AI ELI5

On this page
PROBLEMRSVP's ERROR_SPEC object allows only 256 error codes, new codes are added sparingly, and there is no provision for user-defined errors.
MECHANISMA new error code, 33 (User Error Spec), signals that a USER_ERROR_SPEC object (class 194, C-Type 1) is present, carrying an enterprise number, a user error value, an optional description and optional subobjects.
WHY IT MATTERSOrganizations can define their own errors for debugging and testing, and can share them to help interoperability, without changing the mandatory contents of RSVP error messages.

§1Why User-Defined Errors

The Resource ReserVation Protocol (RSVP, RFC 2205) reports errors in an ERROR_SPEC object. Its format permits 256 error codes. As RSVP has been extended, the convention has been to be conservative about defining new ones, and there is no provision for user-defined errors.

When developing RSVP extensions, it is often useful to define error messages to help with initial debugging and with testing against older versions or other implementations. This RFC lets organizations define errors for internal development, which could also be shared with the wider community to promote interoperability.

RSVP PathErr and ResvErr messages, and the Notify message from RFC 3473, must carry an ERROR_SPEC. To avoid changing that, a new error code says that the new object is present. The ResvConf message also carries an ERROR_SPEC, but without meaningful codes, so these extensions do not apply to it.

RSVP only knows a short list of things that can go wrong. Teams building new features need a way to say 'something specific to my work went wrong'.

§2The USER_ERROR_SPEC Object

A new Error Code, 33 (User Error Spec), is used in an ERROR_SPEC to signal a USER_ERROR_SPEC. One Error Value is defined: 0, meaning further details are in the User Error Spec. When sending this code, a USER_ERROR_SPEC MUST be included in the PathErr, ResvErr or Notify message.

The object is Class = 194, C-Type = 1. Its class number is in the range 192-247 for backward compatibility: implementations that do not understand such an object forward it unmodified. Its fields are:

  • Enterprise Number: a 32-bit identifier of an organization, assigned by IANA in its Enterprise Numbers registry.
  • Sub Org: an 8-bit value that lets an organization create independent Error Value spaces for parallel teams. If not needed, it SHOULD be zero.
  • Err Desc Len: the length in bytes of the description, excluding padding. Zero is valid.
  • User Error Value: a 16-bit integer whose meaning is set by the (sub-)organization.
  • Error Description: a string padded with nulls to a multiple of 4 bytes.
  • User-Defined Subobjects: optional extra data.

Each company gets its own numbered notebook for errors. The object says which company wrote the note, what number the error is, and adds a short sentence in words.

USER_ERROR_SPEC OBJECT (CLASS 194, C-TYPE 1)
USER_ERROR_SPEC
FieldNameSizeValueDescription
ENTERPRISEEnterprise Number4 bytesIANA-assigned identifier of the organization.
SUB-ORGSub Org1 byteCreates independent Error Value spaces; zero if not needed.
DESC-LENErr Desc Len1 byteLength of the description in bytes, excluding padding.
USER-ERRORUser Error Value2 bytesMeaning set by the (sub-)organization.

§3Description Text and Subobjects

The Error Description MUST use UTF-8/Net-Unicode encoding (RFC 5198, following the guidance of RFC 2277). Implementations are RECOMMENDED to limit generated strings to single-line printable US-ASCII where feasible. Because the text may not be displayed everywhere, it SHOULD be limited to supplementary information and SHOULD NOT contain information critical to operating the network. Critical information belongs in the User Error Value.

Each subobject is a type-length-value (TLV) with an 8-bit Type assigned by the (sub-)organization and a Length covering the whole subobject including the Type and Length fields. The Length MUST be at least 4 and MUST be a multiple of 4. The meaning of the value is defined by the organization identified by the Enterprise Number and Sub Org.

The words are a helpful note, but the number is what counts. Anything important goes in the number, since the note may not show up on every screen.

§4Sending and Receiving Procedures

A USER_ERROR_SPEC MAY be included in any PathErr, ResvErr or Notify message for any defined error code, and the Enterprise Number MUST be a valid IANA-assigned value. An ERROR_SPEC with a valid code must still be in every such message. If no other code applies, the code MUST be set to User Error Spec, and the Error Value SHOULD be set to 0.

Receivers are RECOMMENDED to log at least the Enterprise Number, Sub Org, User Error Value and Error Description, and those that can interpret the contents SHOULD act on the error. Implementations that are not UTF-8 capable SHOULD handle the description as described in RFC 5137.

A message with the User Error Spec code but no USER_ERROR_SPEC object, or a USER_ERROR_SPEC on any message other than PathErr, ResvErr or Notify, MUST be treated as malformed and handled according to RFC 2205.

Implementations SHOULD ignore repeated occurrences of the object and SHOULD forward it unchanged on messages they forward, for forward compatibility.

When you get one of these notes, write it down and pass it along unchanged. If the form says 'see attached note' but nothing is attached, treat it as a mistake.

§5IANA Assignments

From the RSVP Error Codes and Globally-Defined Error Value Sub-Codes registry, Error Code 33 (User Error Spec) is assigned, with Error Value sub-code 0 (Further details in User Error Spec). From the RSVP Class Names, Class Numbers, and Class Types registry, Class Number 194 is assigned to USER_ERROR_SPEC, with Class Type 1 named User-Defined Error.

The official list of codes got two new entries so nobody else uses the same numbers.

§6Security Considerations

This RFC makes no changes to the basic message exchanges of RFC 2205 and RFC 3473. It will cause a small increase in error messages in cases where messages were previously silently dropped for lack of a suitable error code. The mechanism may also be used to report extra error conditions arising from security issues and attacks on the RSVP network.

Displaying or logging a character string opens the way to attacks using overruns or embedded control characters. Implementations SHOULD take precautions against overruns and, especially where the full character set of RFC 5198 is not supported, SHOULD use the procedures in RFC 5137 for unexpected or unknown control characters.

Text sent by someone else might contain tricks, so be careful when you print it. Do not trust it blindly.

§7References