RFC 5284
User-Defined Errors for RSVP
User-Defined Errors for RSVP ๐
okay bestie, grab a drink because this RFC is about giving RSVP its own custom error messages ๐ ๐ฆ
- Number: RFC 5284 ๐
- Category: Standards Track โจ
- Date: August 2008 ๐ธ
- Network Working Group ๐ง
- Authors: G. Swallow (Cisco Systems, Inc.) and A. Farrel (Old Dog Consulting) ๐
- Obsoletes / Updates: nothing listed in the title block ๐
Status of This Memo โจ
this doc is an Internet standards track protocol for the Internet community ๐ it's also asking for discussion and suggestions for improvements, so talk to the group! ๐ซถ to check the current standardization state and status of this protocol, look at the current edition of the "Internet Official Protocol Standards" (STD 1) ๐ and yes, distribution of this memo is unlimited ๐
Abstract ๐ฆ
okay so RSVP has an ERROR_SPEC object for communicating errors ๐จ and that object's format only has room for 256 error codes ๐ญ as RSVP has grown, the vibe has been to be super conservative about adding new error codes ๐ and the ugly truth is RSVP has no way at all for users to define their own errors ๐
so this document defines a USER_ERROR_SPEC that gets used alongside the ERROR_SPEC to carry extra user info about errors โจ it's giving "plus-one" energy ๐ฅ
1. Introduction ๐ธ
ok so the Resource ReserVation Protocol (RSVP) [RFC2205] has that ERROR_SPEC object for communicating errors ๐จ its defined format permits 256 error codes, and just like the Abstract said, RSVP has stayed conservative about communicating errors as it's been developed and extended ๐ and once again, RSVP has no provision for user defined errors. literally none ๐
when people are building extensions to RSVP, they often want to define their own error messages ๐ง those help a ton with the first round of debugging, and with testing against older versions or other implementations ๐
so this doc defines a brand-new RSVP object that lets user-defined errors get communicated ๐ organizations can use these errors for their internal development ๐ข and the error values can also be shared with the wider community to help different implementations play nicely together ๐ซถ interop bestie ๐
PathErr and ResvErr messages both need an ERROR_SPEC object ([RFC2205]) ๐จ and [RFC3473] defines the Notify message, which also needs an ERROR_SPEC object ๐ฆ here's the clever part: to avoid changing the mandatory contents of those messages, this doc defines a new error code value. that value says "hey, the new object is here and it carries a user-defined error code" โจ no structural drama, just a flag ๐
one more thing ๐ the ResvConf message from [RFC2205] also carries an ERROR_SPEC object, BUT that usage doesn't carry meaningful Error Codes or Error Values. so the extensions in this doc don't apply to that message ๐ โโ๏ธ not that one, sorry ResvConf ๐
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] ๐ these are the official requirement words, so read them carefully bestie ๐ค
2. User-Defined Error ๐
a new Error Code is defined for use in an ERROR_SPEC object โจ here's the code and its value:
Error Code = 33: User Error Spec
this error code signals that a USER_ERROR_SPEC is present ๐ฆ one Error Value is defined:
Error Value 0 = Further details in User Error Spec
future specs may define more error values ๐ฎ
okay the big rule for this section: when sending this error code, a USER_ERROR_SPEC object MUST be included in the PathErr, ResvErr, or Notify message ๐จ no skipping it, periodt ๐
3. USER_ERROR_SPEC Class ๐
a new RSVP object class called USER_ERROR_SPEC is defined ๐ for backwards compatibility, its class number lives in the range 192-247 ๐ as [RFC2205] explains, implementations that don't understand this kind of object will forward it unmodified ๐ so older implementations won't break, they just pass it along like a good friend ๐ซถ
here's the object's layout. the class is 194 and the C-Type is 1 ๐ฆ
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 ~
| |
+---------------+---------------+---------------+---------------+
let's break down each field ๐
Enterprise Number ๐ข this is a unique ID for an organization, stored as a 32-bit integer ๐ข these are assigned by IANA and handed out on a first come first served basis through the IANA registry called "Enterprise Numbers" [RFC2578] ๐
Sub Org ๐งฉ this is also a unique org ID, but it's an 8-bit integer โจ an organization MAY use this field to make independent Error Value spaces ๐ฆ that's meant to help teams doing parallel development work without stepping on each other ๐ฏโโ๏ธ if independent spaces aren't needed, this field SHOULD be set to zero ๐
Err Desc Len ๐ this is the length of the error description in the Error Description field, counted in bytes and NOT including any padding ๐ โโ๏ธ zero is a totally valid length if no description is supplied ๐ธ
User Error Value ๐ข a 16-bit integer ๐ its meaning is set by the (sub-)organization shown in the Enterprise Number and Sub Org fields ๐ซถ
Error Description ๐ this is 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] ๐จ non-negotiable, bestie ๐ it's also RECOMMENDED that implementations keep their generated strings to single-line printable US-ASCII [ASCII] whenever that's doable ๐ that helps the recipient actually read it easily โจ
if Err Desc Len is zero, then zero bytes are supplied ๐ซง
heads up though: the content of this field is implementation-specific ๐ it's usually printable, but not every implementation shows it to every user (thanks, character set choices) ๐ญ so the content SHOULD be limited to supplementary info and SHOULD NOT hold anything critical for running the network ๐ซ the critical stuff lives in the User Error Value field ๐
User-Defined Subobjects ๐ง user-defined subobjects MAY be included โจ the generic format of subobjects is in Section 3.1 ๐ a subobject's semantics are shown by its Type field, but the semantics, format, and contents of its Value field are set by the (sub-)organization shown in the Enterprise Number and Sub Org fields of this object ๐ฆ
3.1. Subobjects ๐งฉ
each subobject is a TLV (Type, Length, Value) in this format ๐ฆ
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-------------//----------------+
| Type | Length | (Subobject contents) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-------------//----------------+
Type ๐ท๏ธ this is an 8-bit number assigned by the (sub-)organization shown in the Enterprise Number and Sub Org fields of the USER_ERROR_SPEC object ๐
Length ๐ this is the total length of the subobject in bytes, counting the Type and Length fields too ๐ข the Length MUST be at least 4 ๐จ and it MUST also be a multiple of 4 ๐ no sneaky lengths allowed, bestie ๐ โโ๏ธ
6. Security Considerations ๐
Okay so bestie, this section is the one you really need to read carefully ๐ฅบโจ This document makes no changes to the basic message exchanges of [RFC2205] and [RFC3473]. The protocol flow stays exactly the same, no plot twists ๐ 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. So the only real difference is that some errors that used to vanish into the void will now get sent out, which is lowkey iconic ๐ฆ
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. So it's basically a way to say "hey, something sketchy is happening" ๐จ๐
Heads up, bestie: a character string that gets displayed or logged opens the door to certain security attacks through overruns or embedded control characters ๐ญ๐ Implementations SHOULD take precautions against overruns. Especially where the full character set of [RFC5198] is not supported, implementations 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 also 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.
๐ฆ where this page comes from
- ietf: rfc5284 2008-08
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms