Assertting on session is not valid. A route addition that is
[mpls-ldp-portable.git] / rsvpte / rsvpte_struct.h
blob71d19d13c12e0f3c7767e5f0eda05c9a28aa4139
1 /*
2 * Copyright (C) James R. Leu 2003
3 * jleu@mindspring.com
5 * This software is covered under the LGPL, for more
6 * info check out http://www.gnu.org/copyleft/lgpl.html
7 */
9 #ifndef RSVPTE_STRUCT_H
10 #define RSVPTE_STRUCT_H
12 #include "mpls_struct.h"
13 #include "mpls_list.h"
14 #include "mpls_refcnt.h"
15 #include "mpls_bitfield.h"
17 MPLS_LIST_ROOT(rsvpte_if_list, rsvpte_if);
19 typedef struct rsvpte_global {
20 struct rsvpte_if_list iff;
22 struct mpls_inet_addr lsr_identifier;
23 mpls_admin_state_enum admin_state;
25 mpls_lock_handle global_lock;
26 mpls_instance_handle user_data;
28 mpls_tree_handle addr_tree;
30 mpls_socket_handle ra_socket;
32 mpls_timer_mgr_handle timer_handle;
33 mpls_socket_mgr_handle socket_handle;
34 mpls_fib_handle fib_handle;
35 mpls_ifmgr_handle ifmgr_handle;
37 #if MPLS_USE_LSR
38 mpls_cfg_handle lsr_handle;
39 #else
40 mpls_mpls_handle mpls_handle;
41 #endif
42 } rsvpte_global;
44 typedef struct rsvpte_if {
45 MPLS_REFCNT_FIELD;
46 MPLS_LIST_ELEM(rsvpte_if) _global;
47 int label_space;
48 uint32_t index;
49 mpls_if_handle handle;
51 mpls_oper_state_enum oper_state;
52 mpls_admin_state_enum admin_state;
53 } rsvpte_if;
55 #define RSSPV_RSVP_ENC_OBJECTERROR -1
56 #define RSSPV_RSVP_DEC_OBJECTERROR -2
58 #define RSVP_IPV4_ADDR_LEN 4
59 #define RSVP_IPV6_ADDR_LEN 16
61 /**********************************************************************
62 RSVP Objects
64 Every object consists of one or more 32-bit words with a one-
65 word header, with the following format:
67 0 1 2 3
68 +-------------+-------------+-------------+-------------+
69 | Length (bytes) | Class-Num | C-Type |
70 +-------------+-------------+-------------+-------------+
71 | |
72 // (Object contents) //
73 | |
74 +-------------+-------------+-------------+-------------+
76 An object header has the following fields:
78 Length
80 A 16-bit field containing the total object length in
81 bytes. Must always be a multiple of 4, and at least 4.
83 Class-Num
85 Identifies the object class; values of this field are
86 defined in Appendix A. Each object class has a name,
87 which is always capitalized in this document. An RSVP
88 implementation must recognize the following classes:
90 NULL
92 A NULL object has a Class-Num of zero, and its C-Type
93 is ignored. Its length must be at least 4, but can
94 be any multiple of 4. A NULL object may appear
95 anywhere in a sequence of objects, and its contents
96 will be ignored by the receiver.
98 SESSION
100 Contains the IP destination address (DestAddress),
101 the IP protocol id, and some form of generalized
102 destination port, to define a specific session for
103 the other objects that follow. Required in every
104 RSVP message.
106 RSVP_HOP
108 Carries the IP address of the RSVP-capable node that
109 sent this message and a logical outgoing interface
110 handle (LIH; see Section 3.3). This document refers
111 to a RSVP_HOP object as a PHOP ("previous hop")
112 object for downstream messages or as a NHOP (" next
113 hop") object for upstream messages.
115 TIME_VALUES
117 Contains the value for the refresh period R used by
118 the creator of the message; see Section 3.7.
119 Required in every Path and Resv message.
121 STYLE
123 Defines the reservation style plus style-specific
124 information that is not in FLOWSPEC or FILTER_SPEC
125 objects. Required in every Resv message.
127 FLOWSPEC
129 Defines a desired QoS, in a Resv message.
131 FILTER_SPEC
133 Defines a subset of session data packets that should
134 receive the desired QoS (specified by a FLOWSPEC
135 object), in a Resv message.
137 SENDER_TEMPLATE
139 Contains a sender IP address and perhaps some
140 additional demultiplexing information to identify a
141 sender. Required in a Path message.
143 SENDER_TSPEC
145 Defines the traffic characteristics of a sender's
146 data flow. Required in a Path message.
148 ADSPEC
150 Carries OPWA data, in a Path message.
152 ERROR_SPEC
154 Specifies an error in a PathErr, ResvErr, or a
155 confirmation in a ResvConf message.
157 POLICY_DATA
159 Carries information that will allow a local policy
160 module to decide whether an associated reservation is
161 administratively permitted. May appear in Path,
162 Resv, PathErr, or ResvErr message.
164 The use of POLICY_DATA objects is not fully specified
165 at this time; a future document will fill this gap.
167 INTEGRITY
169 Carries cryptographic data to authenticate the
170 originating node and to verify the contents of this
171 RSVP message. The use of the INTEGRITY object is
172 described in [Baker96].
174 SCOPE
176 Carries an explicit list of sender hosts towards
177 which the information in the message is to be
178 forwarded. May appear in a Resv, ResvErr, or
179 ResvTear message. See Section 3.4.
181 RESV_CONFIRM
183 Carries the IP address of a receiver that requested a
184 confirmation. May appear in a Resv or ResvConf
185 message.
187 **********************************************************************/
189 #define RSVP_OBJECT_HDRSIZE 4
191 typedef struct rsvpObjectHeader_s {
192 u_short length;
193 u_char class;
194 u_char cType;
195 } rsvpObjectHeader_t;
198 #define RSVP_SESSION_CLASS 1
199 #define RSVP_SESSION_CTYPE_IPV4 1
200 #define RSVP_SESSION_CTYPE_IPV6 2
201 #define RSVP_SESSION_CTYPE_TUNNEL4 7
202 #define RSVP_SESSION_CTYPE_TUNNEL6 8
204 /**********************************************************************
205 RSVP SESSION Object
207 o IPv4/UDP SESSION object: Class = 1, C-Type = 1
209 0 1 2 3
210 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
211 +---------------+---------------+---------------+---------------+
212 | IPv4 DestAddress (4 bytes) |
213 +---------------+---------------+---------------+---------------+
214 | Protocol Id | Flags | DstPort |
215 +---------------+---------------+---------------+---------------+
217 o IPv6/UDP SESSION object: Class = 1, C-Type = 2
219 0 1 2 3
220 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
221 +---------------+---------------+---------------+---------------+
225 + IPv6 DestAddress (16 bytes) +
229 +---------------+---------------+---------------+---------------+
230 | Protocol Id | Flags | DstPort |
231 +---------------+---------------+---------------+---------------+
233 DestAddress
235 The IP unicast or multicast destination address of the
236 session. This field must be non-zero.
238 Protocol Id
240 The IP Protocol Identifier for the data flow. This field
241 must be non-zero.
242 Flags
244 0x01 = E_Police flag
246 The E_Police flag is used in Path messages to determine
247 the effective "edge" of the network, to control traffic
248 policing. If the sender host is not itself capable of
249 traffic policing, it will set this bit on in Path
250 messages it sends. The first node whose RSVP is capable
251 of traffic policing will do so (if appropriate to the
252 service) and turn the flag off.
254 DstPort
256 The UDP/TCP destination port for the session. Zero may be
257 used to indicate `none'.
259 Other SESSION C-Types could be defined in the future to
260 support other demultiplexing conventions in the transport-
261 layer or application layer.
263 LSP_TUNNEL_IPv4 Session Object
265 Class = SESSION, LSP_TUNNEL_IPv4 C-Type = 7
267 0 1 2 3
268 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
269 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
270 | IPv4 tunnel end point address |
271 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
272 | MUST be zero | Tunnel ID |
273 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
274 | Extended Tunnel ID |
275 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
277 IPv4 tunnel end point address
279 IPv4 address of the egress node for the tunnel.
281 Tunnel ID
283 A 16-bit identifier used in the SESSION that remains constant
284 over the life of the tunnel.
286 Extended Tunnel ID
288 A 32-bit identifier used in the SESSION that remains constant
289 over the life of the tunnel. Normally set to all zeros.
290 Ingress nodes that wish to narrow the scope of a SESSION to the
291 ingress-egress pair may place their IPv4 address here as a
292 globally unique identifier.
295 LSP_TUNNEL_IPv6 Session Object
297 Class = SESSION, LSP_TUNNEL_IPv6 C_Type = 8
299 0 1 2 3
300 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
301 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
304 | IPv6 tunnel end point address |
306 | (16 bytes) |
309 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
310 | MUST be zero | Tunnel ID |
311 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
314 | Extended Tunnel ID |
316 | (16 bytes) |
319 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
321 IPv6 tunnel end point address
323 IPv6 address of the egress node for the tunnel.
325 Tunnel ID
327 A 16-bit identifier used in the SESSION that remains constant
328 over the life of the tunnel.
330 Extended Tunnel ID
332 A 16-byte identifier used in the SESSION that remains constant
333 over the life of the tunnel. Normally set to all zeros.
334 Ingress nodes that wish to narrow the scope of a SESSION to the
335 ingress-egress pair may place their IPv6 address here as a
336 globally unique identifier.
338 **********************************************************************/
340 #define RSVP_SESSION4_SIZE 8
342 typedef struct rsvpSession4_s {
343 u_int destAddr;
344 u_char protocolId;
345 u_char flags;
346 u_short destPort;
347 } rsvpSession4_t;
349 #define RSVP_SESSION6_SIZE 20
351 typedef struct rsvpSession6_s {
352 u_char destAddr[16];
353 u_char protocolId;
354 u_char flags;
355 u_short destPort;
356 } rsvpSession6_t;
358 #define RSVP_SESSION_TUNNEL4_SIZE 12
360 typedef struct rsvpSessionTunnel4_s {
361 u_int endPointAddress;
362 u_short reserved;
363 u_short tunnelId;
364 u_int extentedTunnelId;
365 } rsvpSessionTunnel4_t;
367 #define RSVP_SESSION_TUNNEL6_SIZE 36
369 typedef struct rsvpSessionTunnel6_s {
370 u_char endPointAddress[16];
371 u_short reserved;
372 u_short tunnelId;
373 u_char extentedTunnelId[16];
374 } rsvpSessionTunnel6_t;
376 typedef struct rsvpSessionObject_s {
377 struct rsvpObjectHeader_s hdr;
378 union {
379 struct rsvpSession4_s ipv4;
380 struct rsvpSession6_s ipv6;
381 struct rsvpSessionTunnel4_s tunnel4;
382 struct rsvpSessionTunnel6_s tunnel6;
383 } u;
384 } rsvpSessionObject_t;
386 #define RSVP_HOP_CLASS 3
387 #define RSVP_HOP_CTYPE_IPV4 1
388 #define RSVP_HOP_CTYPE_IPV6 2
390 /**********************************************************************
391 RSVP HOP Object
393 o IPv4 RSVP_HOP object: Class = 3, C-Type = 1
395 0 1 2 3
396 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
398 +---------------+---------------+---------------+---------------+
399 | IPv4 Next/Previous Hop Address |
400 +---------------+---------------+---------------+---------------+
401 | Logical Interface Handle |
402 +---------------+---------------+---------------+---------------+
404 o IPv6 RSVP_HOP object: Class = 3, C-Type = 2
406 0 1 2 3
407 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
409 +---------------+---------------+---------------+---------------+
413 + IPv6 Next/Previous Hop Address +
417 +---------------+---------------+---------------+---------------+
418 | Logical Interface Handle |
419 +---------------+---------------+---------------+---------------+
421 This object carries the IP address of the interface through which
422 the last RSVP-knowledgeable hop forwarded this message. The
423 Logical Interface Handle (LIH) is used to distinguish logical
424 outgoing interfaces, as discussed in Sections 3.3 and 3.9. A node
425 receiving an LIH in a Path message saves its value and returns it
426 in the HOP objects of subsequent Resv messages sent to the node
427 that originated the LIH. The LIH should be identically zero if
428 there is no logical interface handle.
430 **********************************************************************/
432 #define RSVP_HOP4_SIZE 8
434 typedef struct rsvpHop4_s {
435 u_int hopAddr;
436 u_int logicalIfHandle;
437 } rsvpHop4_t;
439 #define RSVP_HOP6_SIZE 20
441 typedef struct rsvpHop6_s {
442 u_char hopAddr[16];
443 u_int logicalIfHandle;
444 } rsvpHop6_t;
446 typedef struct rsvpHopObject_s {
447 struct rsvpObjectHeader_s hdr;
448 union {
449 struct rsvpHop4_s ipv4;
450 struct rsvpHop6_s ipv6;
451 } u;
452 } rsvpHopObject_t;
454 #define RSVP_TIME_CLASS 5
455 #define RSVP_TIME_CTYPE 1
457 /**********************************************************************
458 RSVP TIME Object
460 o TIME_VALUES Object: Class = 5, C-Type = 1
462 0 1 2 3
463 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
464 +---------------+---------------+---------------+---------------+
465 | Refresh Period R |
466 +---------------+---------------+---------------+---------------+
468 Refresh Period
470 The refresh timeout period R used to generate this message;
471 in milliseconds.
473 **********************************************************************/
475 #define RSVP_TIME_SIZE 4
477 typedef struct rsvpTimeObject_s {
478 struct rsvpObjectHeader_s hdr;
479 u_int refresh;
480 } rsvpTimeObject_t;
482 #define RSVP_ERROR_SPEC_CLASS 6
483 #define RSVP_ERROR_SPEC_CTYPE_IPV4 1
484 #define RSVP_ERROR_SPEC_CTYPE_IPV6 2
486 /**********************************************************************
487 RSVP ERROR_SPEC Object
489 o IPv4 ERROR_SPEC object: Class = 6, C-Type = 1
491 0 1 2 3
492 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
493 +---------------+---------------+---------------+---------------+
494 | IPv4 Error Node Address (4 bytes) |
495 +---------------+---------------+---------------+---------------+
496 | Flags | Error Code | Error Value |
497 +---------------+---------------+---------------+---------------+
500 o IPv6 ERROR_SPEC object: Class = 6, C-Type = 2
502 0 1 2 3
503 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
504 +---------------+---------------+---------------+---------------+
508 + IPv6 Error Node Address (16 bytes) +
512 +---------------+---------------+---------------+---------------+
513 | Flags | Error Code | Error Value |
514 +---------------+---------------+---------------+---------------+
516 Error Node Address
518 The IP address of the node in which the error was detected.
520 Flags
522 0x01 = InPlace
524 This flag is used only for an ERROR_SPEC object in a
525 ResvErr message. If it on, this flag indicates that
526 there was, and still is, a reservation in place at the
527 failure point.
529 0x02 = NotGuilty
531 This flag is used only for an ERROR_SPEC object in a
532 ResvErr message, and it is only set in the interface to
533 the receiver application. If it on, this flag indicates
534 that the FLOWSPEC that failed was strictly greater than
535 the FLOWSPEC requested by this receiver.
537 Error Code
539 A one-octet error description.
541 Error Value
543 A two-octet field containing additional information about the
544 error. Its contents depend upon the Error Type.
546 The values for Error Code and Error Value are defined in Appendix
549 ***********************************************************************/
551 typedef struct rsvpErrorSpec4_s {
552 u_int hopAddr;
553 u_char flag;
554 u_char code;
555 u_short value;
556 } rsvpErrorSpec4_t;
558 typedef struct rsvpErrorSpec6_s {
559 u_char hopAddr[16];
560 u_char flag;
561 u_char code;
562 u_short value;
563 } rsvpErrorSpec6_t;
565 typedef struct rsvpErrorSpecObject_s {
566 struct rsvpObjectHeader_s hdr;
567 union {
568 struct rsvpErrorSpec4_s ipv4;
569 struct rsvpErrorSpec6_s ipv6;
570 } u;
571 } rsvpErrorSpecObject_t;
573 #define RSVP_SCOPE_LIST_CLASS 7
574 #define RSVP_SCOPE_LIST_CTYPE_IPV4 1
575 #define RSVP_SCOPE_LIST_CTYPE_IPV6 2
577 #define RSVP_MAX_SCOPE_LIST 16
579 /***********************************************************************
581 RSVP SCOPE LIST Object
583 This object contains a list of IP addresses, used for routing
584 messages with wildcard scope without loops. The addresses must be
585 listed in ascending numerical order.
587 o IPv4 SCOPE List object: Class = 7, C-Type = 1
589 0 1 2 3
590 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
591 +-------------+-------------+-------------+-------------+
592 | IPv4 Src Address (4 bytes) |
593 +-------------+-------------+-------------+-------------+
594 // //
595 +-------------+-------------+-------------+-------------+
596 | IPv4 Src Address (4 bytes) |
597 +-------------+-------------+-------------+-------------+
600 o IPv6 SCOPE list object: Class = 7, C-Type = 2
602 0 1 2 3
603 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
604 +-------------+-------------+-------------+-------------+
608 + IPv6 Src Address (16 bytes) +
612 +-------------+-------------+-------------+-------------+
613 // //
614 +-------------+-------------+-------------+-------------+
618 + IPv6 Src Address (16 bytes) +
622 +-------------+-------------+-------------+-------------+
624 ***********************************************************************/
626 typedef struct rsvpScopeList4_s {
627 u_int addr[RSVP_MAX_SCOPE_LIST];
628 } rsvpScopeList4_t;
630 typedef struct rsvpScopeList6_s {
631 u_char addr[RSVP_MAX_SCOPE_LIST][16];
632 } rsvpScopeList6_t;
634 typedef struct rsvpScopListObject_s {
635 struct rsvpObjectHeader_s hdr;
636 union {
637 struct rsvpScopeList4_s ipv4;
638 struct rsvpScopeList6_s ipv6;
639 } u;
640 } rsvpScopListObject_t;
641 #define RSVP_STYLE_CLASS 8
642 #define RSVP_STYLE_CTYPE 1
644 /***********************************************************************
646 STYLE class = 8.
648 o STYLE object: Class = 8, C-Type = 1
650 0 1 2 3
651 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
652 +-----------------+---------------+---------------+-------------+
653 | Flags | Option Vector |
654 +-----------------+---------------+---------------+-------------+
658 Flags: 8 bits
660 (None assigned yet)
662 Option Vector: 24 bits
664 A set of bit fields giving values for the reservation
665 options. If new options are added in the future,
666 corresponding fields in the option vector will be assigned
667 from the least-significant end. If a node does not recognize
668 a style ID, it may interpret as much of the option vector as
669 it can, ignoring new fields that may have been defined.
671 The option vector bits are assigned (from the left) as
672 follows:
674 19 bits: Reserved
676 2 bits: Sharing control
678 00b: Reserved
680 01b: Distinct reservations
682 10b: Shared reservations
684 11b: Reserved
686 3 bits: Sender selection control
688 000b: Reserved
690 001b: Wildcard
692 010b: Explicit
694 011b - 111b: Reserved
696 The low order bits of the option vector are determined by the
697 style, as follows:
699 WF 10001b
700 FF 01010b
701 SE 10010b
703 ***********************************************************************/
705 typedef struct rsvpStyleFlag_s {
706 BITFIELDS_ASCENDING_4(u_int flag:8, /* flags */
707 u_int reserved:19, /* reserved */
708 u_int shareControl:2, /* sharing control */
709 u_int senderSelectionControl:3); /* sender selection control */
710 } rsvpStyleFlag_t;
712 typedef struct rsvpStyleObject_s {
713 struct rsvpObjectHeader_s hdr;
715 union {
716 struct rsvpStyleFlag_s flag;
717 u_int mark;
718 } flag;
719 } rsvpStyleObject_t;
721 #define RSVP_FILTER_SPEC_CLASS 10
722 #define RSVP_FILTER_SPEC_CTYPE_IPV4 1
723 #define RSVP_FILTER_SPEC_CTYPE_IPV6 2
724 #define RSVP_FILTER_SPEC_CTYPE_FLOW 3
725 #define RSVP_FILTER_SPEC4_SIZE 8
726 #define RSVP_FILTER_SPEC6_SIZE 20
727 #define RSVP_FILTER_SPEC_FLOW_SIZE 20
729 /***********************************************************************
731 FILTER_SPEC class = 10.
733 o IPv4 FILTER_SPEC object: Class = 10, C-Type = 1
735 0 1 2 3
736 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
737 +---------------+---------------+---------------+---------------+
738 | IPv4 SrcAddress (4 bytes) |
739 +---------------+---------------+---------------+---------------+
740 | ////// | ////// | SrcPort |
741 +---------------+---------------+---------------+---------------+
744 o IPv6 FILTER_SPEC object: Class = 10, C-Type = 2
746 0 1 2 3
747 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
748 +---------------+---------------+---------------+---------------+
752 + IPv6 SrcAddress (16 bytes) +
756 +---------------+---------------+---------------+---------------+
757 | ////// | ////// | SrcPort |
758 +---------------+---------------+---------------+---------------+
761 o IPv6 Flow-label FILTER_SPEC object: Class = 10, C-Type = 3
763 0 1 2 3
764 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
765 +---------------+---------------+---------------+---------------+
769 + IPv6 SrcAddress (16 bytes) +
773 +---------------+---------------+---------------+---------------+
774 | /////// | Flow Label (24 bits) |
775 +---------------+---------------+---------------+---------------+
777 SrcAddress
779 The IP source address for a sender host. Must be non-zero.
781 SrcPort
783 The UDP/TCP source port for a sender, or zero to indicate
784 `none'.
786 Flow Label
788 A 24-bit Flow Label, defined in IPv6. This value may be used
789 by the packet classifier to efficiently identify the packets
790 belonging to a particular (sender->destination) data flow.
792 ***********************************************************************/
794 typedef struct rsvpFilterSpec4_s {
795 u_int sourceAddr;
796 u_short reserved;
797 u_short sourcePort;
798 } rsvpFilterSpec4_t;
800 typedef struct rsvpFilterSpec6_s {
801 u_char sourceAddr[RSVP_IPV6_ADDR_LEN];
802 u_short reserved;
803 u_short sourcePort;
804 } rsvpFilterSpec6_t;
806 typedef struct rsvpFilterSpecFlags_s {
807 BITFIELDS_ASCENDING_2(u_int reserved:8,
808 u_int flowLabel:24);
809 } rsvpFilterSpecFlags_t;
811 typedef struct rsvpFilterSpecFlow6_s {
812 u_char sourceAddr[RSVP_IPV6_ADDR_LEN];
813 union {
814 u_int mark;
815 struct rsvpFilterSpecFlags_s flowLabel;
816 } flag;
817 } rsvpFilterSpecFlow6_t;
819 typedef struct rsvpFilterSpecObject_s {
820 struct rsvpObjectHeader_s hdr;
821 union {
822 struct rsvpFilterSpec4_s ipv4;
823 struct rsvpFilterSpec6_s ipv6;
824 struct rsvpFilterSpecFlow6_s flow;
825 } u;
826 } rsvpFilterSpecObject_t;
828 #define RSVP_SENDER_TEMPLATE_CLASS 11
829 #define RSVP_SENDER_TEMPLATE_CTYPE_IPV4 1
830 #define RSVP_SENDER_TEMPLATE_CTYPE_IPV6 2
831 #define RSVP_SENDER_TEMPLATE_CTYPE_FLOW 3
832 #define RSVP_SENDER_TEMPLATE_CTYPE_TUNNEL4 7
833 #define RSVP_SENDER_TEMPLATE_CTYPE_TUNNEL6 8
834 #define RSVP_SENDER_TEMPLATE_TUNNEL4_SIZE 8
835 #define RSVP_SENDER_TEMPLATE_TUNNEL6_SIZE 20
837 /**********************************************************************
838 SENDER_TEMPLATE Class
840 SENDER_TEMPLATE class = 11.
842 o IPv4 SENDER_TEMPLATE object: Class = 11, C-Type = 1
844 Definition same as IPv4/UDP FILTER_SPEC object.
846 o IPv6 SENDER_TEMPLATE object: Class = 11, C-Type = 2
848 Definition same as IPv6/UDP FILTER_SPEC object.
850 o IPv6 Flow-label SENDER_TEMPLATE object: Class = 11, C-Type = 3
853 LSP_TUNNEL_IPv4 Sender Template Object
855 Class = SENDER_TEMPLATE, LSP_TUNNEL_IPv4 C-Type = 7
857 0 1 2 3
858 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
859 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
860 | IPv4 tunnel sender address |
861 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
862 | MUST be zero | LSP ID |
863 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
865 IPv4 tunnel sender address
867 IPv4 address for a sender node
869 LSP ID
871 A 16-bit identifier used in the SENDER_TEMPLATE and the
872 FILTER_SPEC that can be changed to allow a sender to share
873 resources with itself.
875 LSP_TUNNEL_IPv6 Sender Template Object
877 Class = SENDER_TEMPLATE, LSP_TUNNEL_IPv6 C_Type = 8
879 0 1 2 3
880 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
881 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
884 | IPv6 tunnel sender address |
886 | (16 bytes) |
889 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
890 | MUST be zero | LSP ID |
891 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
893 IPv6 tunnel sender address
895 IPv6 address for a sender node
897 LSP ID
899 A 16-bit identifier used in the SENDER_TEMPLATE and the
900 FILTER_SPEC that can be changed to allow a sender to share
901 resources with itself.
902 **********************************************************************/
904 #define rsvpSenderTemplate4_s rsvpFilterSpec4_s
905 #define rsvpSenderTemplate4_t rsvpFilterSpec4_t
907 #define rsvpSenderTemplate6_s rsvpFilterSpec6_s
908 #define rsvpSenderTemplate6_t rsvpFilterSpec6_t
910 #define rsvpSenderTemplateFlow6_s rsvpFilterSpecFlow6_s
911 #define rsvpSenderTemplateFlow6_t rsvpFilterSpecFlow6_t
913 #define rsvpteEncodeSenderTemplate4 rsvpteEncodeFilterSpec4
914 #define rsvpteEncodeSenderTemplate6 rsvpteEncodeFilterSpec6
915 #define rsvpteEncodeSenderTemplateFlow rsvpteEncodeFilterSpecFlow
917 #define rsvpteDecodeSenderTemplate4 rsvpteDecodeFilterSpec4
918 #define rsvpteDecodeSenderTemplate6 rsvpteDecodeFilterSpec6
919 #define rsvpteDecodeSenderTemplateFlow rsvpteDecodeFilterSpecFlow
921 typedef struct rsvpSenderTemplateTunnel4_s {
922 u_int sender;
923 u_short reserved;
924 u_short lspId;
925 } rsvpSenderTemplateTunnel4_t;
927 typedef struct rsvpSenderTemplateTunnel6_s {
928 u_char sender[RSVP_IPV6_ADDR_LEN];
929 u_short reserved;
930 u_short lspId;
931 } rsvpSenderTemplateTunnel6_t;
933 typedef struct rsvpSenderTemplateObject_s {
934 struct rsvpObjectHeader_s hdr;
935 union {
936 struct rsvpSenderTemplate4_s ipv4;
937 struct rsvpSenderTemplate6_s ipv6;
938 struct rsvpSenderTemplateFlow6_s flow;
939 struct rsvpSenderTemplateTunnel4_s tunnel4;
940 struct rsvpSenderTemplateTunnel6_s tunnel6;
941 } u;
942 } rsvpSenderTemplateObject_t;
944 #define RSVP_SENDER_TSPEC_CLASS 12
945 #define RSVP_SENDER_TSPEC_CTYPE_INTSRV 2
947 /**********************************************************************
948 SENDER_TSPEC Class
950 SENDER_TSPEC class = 12.
952 o Intserv SENDER_TSPEC object: Class = 12, C-Type = 2
954 The RSVP SENDER_TSPEC object carries information about a data
955 source's generated traffic. The required RSVP SENDER_TSPEC object
956 contains a global Token_Bucket_TSpec parameter (service_number 1,
957 parameter 127, as defined in [RFC 2215]). This TSpec carries traffic
958 information usable by either the Guaranteed or Controlled-Load QoS
959 control services.
961 31 24 23 16 15 8 7 0
962 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
963 1 | 0 (a) | reserved | 7 (b) |
964 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
965 2 | 1 (c) |0| reserved | 6 (d) |
966 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
967 3 | 127 (e) | 0 (f) | 5 (g) |
968 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
969 4 | Token Bucket Rate [r] (32-bit IEEE floating point number) |
970 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
971 5 | Token Bucket Size [b] (32-bit IEEE floating point number) |
972 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
973 6 | Peak Data Rate [p] (32-bit IEEE floating point number) |
974 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
975 7 | Minimum Policed Unit [m] (32-bit integer) |
976 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
977 8 | Maximum Packet Size [M] (32-bit integer) |
978 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
980 (a) - Message format version number (0)
981 (b) - Overall length (7 words not including header)
982 (c) - Service header, service number 1 (default/global information)
983 (d) - Length of service 1 data, 6 words not including header
984 (e) - Parameter ID, parameter 127 (Token_Bucket_TSpec)
985 (f) - Parameter 127 flags (none set)
986 (g) - Parameter 127 length, 5 words not including header
989 In this TSpec, the parameters [r] and [b] are set to reflect the
990 sender's view of its generated traffic. The peak rate parameter [p]
991 may be set to the sender's peak traffic generation rate (if known and
992 controlled), the physical interface line rate (if known), or positive
993 infinity (if no better value is available). Positive infinity is
994 represented as an IEEE single-precision floating-point number with an
995 exponent of all ones (255) and a sign and mantissa of all zeros. The
996 format of IEEE floating-point numbers is further summarized in [RFC
997 1832].
999 The minimum policed unit parameter [m] should generally be set equal
1000 to the size of the smallest packet generated by the application. This
1001 packet size includes the application data and all protocol headers at
1002 or above the IP level (IP, TCP, UDP, RTP, etc.). The size given does
1003 not include any link-level headers, because these headers will change
1004 as the packet crosses different portions of the internetwork.
1007 The [m] parameter is used by nodes within the network to compute the
1008 maximum bandwidth overhead needed to carry a flow's packets over the
1009 particular link-level technology, based on the ratio of [m] to the
1010 link-level header size. This allows the correct amount of bandwidth
1011 to be allocated to the flow at each point in the net. Note that
1012 smaller values of this parameter lead to increased overhead
1013 estimates, and thus increased likelyhood of a reservation request
1014 being rejected by the node. In some cases, an application
1015 transmitting a low percentage of very small packets may therefore
1016 choose to set the value of [m] larger than the actual minimum
1017 transmitted packet size. This will increase the likelyhood of the
1018 reservation succeeding, at the expense of policing packets of size
1019 less than [m] as if they were of size [m].
1021 Note that the an [m] value of zero is illegal. A value of zero would
1022 indicate that no data or IP headers are present, and would give an
1023 infinite amount of link-level overhead.
1025 The maximum packet size parameter [M] should be set to the size of
1026 the largest packet the application might wish to generate, as
1027 described in Section 2.3.2. This value must, by definition, be equal
1028 to or larger than the value of [m].
1031 **********************************************************************/
1032 typedef struct rsvpSenderTSpecObject_s {
1033 struct rsvpObjectHeader_s hdr;
1034 } rsvpSenderTSpecObject_t;
1037 #define RSVP_ADSPEC_CLASS 13
1038 #define RSVP_ADSPEC_CTYPE_INTSRV 2
1039 /**********************************************************************
1040 ADSPEC Class
1042 ADSPEC class = 13.
1044 o Intserv ADSPEC object: Class = 13, C-Type = 2
1046 The basic ADSPEC format is shown below. The message header and the
1047 default general parameters fragment are always present. The fragments
1048 for Guaranteed or Controlled-Load service may be omitted if the
1049 service is not to be used by the RSVP session. Additional data
1050 fragments will be added if new services are defined.
1052 31 24 23 16 15 8 7 0
1053 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1054 | 0 (a) | reserved | Msg length - 1 (b) |
1055 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1057 | Default General Parameters fragment (Service 1) (c) |
1058 | (Always Present) |
1060 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1062 | Guaranteed Service Fragment (Service 2) (d) |
1063 | (Present if application might use Guaranteed Service) |
1065 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1067 | Controlled-Load Service Fragment (Service 5) (e) |
1068 | (Present if application might use Controlled-Load Service) |
1070 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1072 (a) - Message format version number (0)
1073 (b) - Overall message length not including header word
1074 (c, d, e) - Data fragments
1076 3.3.2. Default General Characterization Parameters ADSPEC data fragment
1078 All RSVP ADSPECs carry the general characterization parameters
1079 defined in [RFC 2215]. Values for global or default general
1080 parameters (values which apply to the all services or the path
1081 itself) are carried in the per-service data fragment for service
1082 number 1, as shown in the picture above. This fragment is always
1083 present, and always first in the message.
1085 31 24 23 16 15 8 7 0
1086 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1087 1 | 1 (c) |x| reserved | 8 (d) |
1088 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1089 2 | 4 (e) | (f) | 1 (g) |
1090 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1091 3 | IS hop cnt (32-bit unsigned integer) |
1092 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1093 4 | 6 (h) | (i) | 1 (j) |
1094 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1095 5 | Path b/w estimate (32-bit IEEE floating point number) |
1096 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1097 6 | 8 (k) | (l) | 1 (m) |
1098 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1099 7 | Minimum path latency (32-bit integer) |
1100 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1101 8 | 10 (n) | (o) | 1 (p) |
1102 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1103 9 | Composed MTU (32-bit unsigned integer) |
1104 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1106 (c) - Per-Service header, service number 1 (Default General
1107 Parameters)
1108 (d) - Global Break bit ([RFC 2215], Parameter 2) (marked x) and
1109 length of General Parameters data block.
1110 (e) - Parameter ID, parameter 4 (Number-of-IS-hops param from
1111 [RFC 2215])
1112 (f) - Parameter 4 flag byte
1113 (g) - Parameter 4 length, 1 word not including header
1114 (h) - Parameter ID, parameter 6 (Path-BW param from [RFC 2215])
1115 (i) - Parameter 6 flag byte
1116 (j) - Parameter 6 length, 1 word not including header
1117 (k) - Parameter ID, parameter 8 (minimum path latency from [RFC
1118 2215])
1119 (l) - Parameter 8 flag byte
1120 (m) - Parameter 8 length, 1 word not including header
1121 (n) - Parameter ID, parameter 10 (composed path MTU from [RFC 2215])
1122 (o) - Parameter 10 flag byte
1123 (p) - Parameter 10 length, 1 word not including header
1125 **********************************************************************/
1126 typedef struct rsvpAdSpecObject_s {
1127 struct rsvpObjectHeader_s hdr;
1128 } rsvpAdSpecObject_t;
1130 /**********************************************************************
1132 3.2. RSVP FLOWSPEC Object
1134 The RSVP FLOWSPEC object carries information necessary to make
1135 reservation requests from the receiver(s) into the network. This
1136 includes an indication of which QoS control service is being
1137 requested, and the parameters needed for that service.
1139 The QoS control service requested is indicated by the service_number
1140 in the FLOWSPEC's per-service header.
1142 3.2.1 FLOWSPEC object when requesting Controlled-Load service
1144 The format of an RSVP FLOWSPEC object originating at a receiver
1145 requesting Controlled-Load service is shown below. Each of the TSpec
1146 fields is represented using the preferred concrete representation
1147 specified in the 'Invocation Information' section of [RFC 2211]. The
1148 value of 5 in the per-service header (field (c), below) indicates
1149 that Controlled-Load service is being requested.
1151 31 24 23 16 15 8 7 0
1152 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1153 1 | 0 (a) | reserved | 7 (b) |
1154 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1155 2 | 5 (c) |0| reserved | 6 (d) |
1156 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1157 3 | 127 (e) | 0 (f) | 5 (g) |
1158 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1159 4 | Token Bucket Rate [r] (32-bit IEEE floating point number) |
1160 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1161 5 | Token Bucket Size [b] (32-bit IEEE floating point number) |
1162 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1163 6 | Peak Data Rate [p] (32-bit IEEE floating point number) |
1164 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1165 7 | Minimum Policed Unit [m] (32-bit integer) |
1166 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1167 8 | Maximum Packet Size [M] (32-bit integer) |
1168 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1170 (a) - Message format version number (0)
1171 (b) - Overall length (7 words not including header)
1172 (c) - Service header, service number 5 (Controlled-Load)
1173 (d) - Length of controlled-load data, 6 words not including
1174 per-service header
1175 (e) - Parameter ID, parameter 127 (Token Bucket TSpec)
1176 (f) - Parameter 127 flags (none set)
1177 (g) - Parameter 127 length, 5 words not including per-service
1178 header
1180 In this object, the TSpec parameters [r], [b], and [p] are set to
1181 reflect the traffic parameters of the receiver's desired reservation
1182 (the Reservation TSpec). The meaning of these fields is discussed
1183 fully in [RFC 2211]. Note that it is unlikely to make sense for the
1184 [p] term to be smaller than the [r] term.
1186 The maximum packet size parameter [M] should be set to the value of
1187 the smallest path MTU, which the receiver learns from information in
1188 arriving RSVP ADSPEC objects. Alternatively, if the receiving
1189 application has built-in knowledge of the maximum packet size in use
1190 within the RSVP session, and this value is smaller than the smallest
1191 path MTU, [M] may be set to this value. Note that requesting a value
1192 of [M] larger than the service modules along the data path can
1193 support will cause the reservation to fail. See section 2.3.2 for
1194 further discussion of the MTU value.
1196 The value of [m] can be chosen in several ways. Recall that when a
1197 resource reservation is installed at each intermediate node, the
1198 value used for [m] is the smaller of the receiver's request and the
1199 values in each sender's SENDER_TSPEC.
1201 If the application has a fixed, known minimum packet size, than that
1202 value should be used for [m]. This is the most desirable case.
1204 For a shared reservation style, the receiver may choose between two
1205 options, or pick some intermediate point between them.
1207 - if the receiver chooses a large value for [m], then the
1208 reservation will allocate less overhead for link-level headers.
1209 However, if a new sender with a smaller SENDER_TSPEC [m] joins the
1210 session later, an already-installed reservation may fail at that
1211 time.
1213 - if the receiver chooses a value of [m] equal to the smallest
1214 value which might be used by any sender, then the reservation will
1215 be forced to allocate more overhead for link-level headers.
1216 However it will not fail later if a new sender with a smaller
1217 SENDER_TSPEC [m] joins the session.
1219 For a FF reservation style, if no application-specific value is known
1220 the receiver should simply use the value of [m] arriving in each
1221 sender's SENDER_TSPEC for its reservation request to that sender.
1223 **********************************************************************/
1224 typedef struct rsvpFlowSpecObject_s {
1225 struct rsvpObjectHeader_s hdr;
1226 } rsvpFlowSpecObject_t;
1228 #define RSVP_POLICY_DATA_CLASS 14
1229 #define RSVP_POLICY_DATA_CTYPE 1
1231 /**********************************************************************
1232 POLICY_DATA Class
1234 POLICY_DATA class = 14.
1236 o Type 1 POLICY_DATA object: Class = 14, C-Type = 1
1238 The contents of this object are for further study.
1240 **********************************************************************/
1241 typedef struct rsvpPolicyDataObject_s {
1242 struct rsvpObjectHeader_s hdr;
1243 } rsvpPolicyDataObject_t;
1245 #define RSVP_RESV_CONFIRM_CLASS 15
1246 #define RSVP_RESV_CONFIRM_CTYPE_IPV4 1
1247 #define RSVP_RESV_CONFIRM_CTYPE_IPV6 2
1249 /**********************************************************************
1250 Resv_CONFIRM Class
1252 RESV_CONFIRM class = 15.
1254 o IPv4 RESV_CONFIRM object: Class = 15, C-Type = 1
1256 +-------------+-------------+-------------+-------------+
1257 | IPv4 Receiver Address (4 bytes) |
1258 +-------------+-------------+-------------+-------------+
1261 o IPv6 RESV_CONFIRM object: Class = 15, C-Type = 2
1263 +-------------+-------------+-------------+-------------+
1267 + IPv6 Receiver Address (16 bytes) +
1271 +-------------+-------------+-------------+-------------+
1272 **********************************************************************/
1274 typedef struct rsvpResvConfirmObject_s {
1275 struct rsvpObjectHeader_s hdr;
1276 union {
1277 u_int ipv4;
1278 u_char ipv6[16];
1279 } u;
1280 } rsvpResvConfirmObject_t;
1283 #define RSVP_LABEL_CLASS 16
1284 #define RSVP_LABEL_CTYPE 1
1286 /**********************************************************************
1288 LABEL class = 16, C_Type = 1
1290 0 1 2 3
1291 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
1292 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1293 | (top label) |
1294 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1296 The contents of a LABEL is a single label, encoded in 4 octets. Each
1297 generic MPLS label is an unsigned integer in the range 0 through
1298 1048575. Generic MPLS labels and FR labels are encoded right aligned
1299 in 4 octets. ATM labels are encoded with the VPI right justified in
1300 bits 0-15 and the VCI right justified in bits 16-31.
1302 **********************************************************************/
1304 typedef struct rsvpLabelObject_s {
1305 struct rsvpObjectHeader_s hdr;
1306 u_int label;
1307 } rsvpLabelObject_t;
1309 #define RSVP_LABEL_REQUEST_CLASS 19
1310 #define RSVP_LABEL_REQUEST_CTYPE_GENERIC 1
1311 #define RSVP_LABEL_REQUEST_CTYPE_ATM 2
1312 #define RSVP_LABEL_REQUEST_CTYPE_FR 3
1314 /**********************************************************************
1316 Label Request without Label Range Class = 19, C_Type = 1
1318 0 1 2 3
1319 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
1320 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1321 | Reserved | L3PID |
1322 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1324 Reserved
1326 This field is reserved. It MUST be set to zero on transmission
1327 and MUST be ignored on receipt.
1329 L3PID
1331 an identifier of the layer 3 protocol using this path.
1332 Standard Ethertype values are used.
1335 Label Request with ATM Label Range Class = 19, C_Type = 2
1337 0 1 2 3
1338 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
1339 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1340 | Reserved | L3PID |
1341 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1342 |M| Res | Minimum VPI | Minimum VCI |
1343 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1344 | Res | Maximum VPI | Maximum VCI |
1345 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1347 Reserved (Res)
1349 This field is reserved. It MUST be set to zero on transmission
1350 and MUST be ignored on receipt.
1352 L3PID
1354 an identifier of the layer 3 protocol using this path.
1355 Standard Ethertype values are used.
1359 Setting this bit to one indicates that the node is capable of
1360 merging in the data plane
1362 Minimum VPI (12 bits)
1364 This 12 bit field specifies the lower bound of a block of
1365 Virtual Path Identifiers that is supported on the originating
1366 switch. If the VPI is less than 12-bits it MUST be right
1367 justified in this field and preceding bits MUST be set to zero.
1369 Minimum VCI (16 bits)
1371 This 16 bit field specifies the lower bound of a block of
1372 Virtual Connection Identifiers that is supported on the
1373 originating switch. If the VCI is less than 16-bits it MUST be
1374 right justified in this field and preceding bits MUST be set to
1375 zero.
1377 Maximum VPI (12 bits)
1379 This 12 bit field specifies the upper bound of a block of
1380 Virtual Path Identifiers that is supported on the originating
1381 switch. If the VPI is less than 12-bits it MUST be right
1382 justified in this field and preceding bits MUST be set to zero.
1384 Maximum VCI (16 bits)
1386 This 16 bit field specifies the upper bound of a block of
1387 Virtual Connection Identifiers that is supported on the
1388 originating switch. If the VCI is less than 16-bits it MUST be
1389 right justified in this field and preceding bits MUST be set to
1390 zero.
1393 Label Request with Frame Relay Label Range Class = 19, C_Type = 3
1395 0 1 2 3
1396 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
1397 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1398 | Reserved | L3PID |
1399 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1400 | Reserved |DLI| Minimum DLCI |
1401 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1402 | Reserved | Maximum DLCI |
1403 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1405 Reserved
1407 This field is reserved. It MUST be set to zero on transmission
1408 and ignored on receipt.
1410 L3PID
1412 an identifier of the layer 3 protocol using this path.
1413 Standard Ethertype values are used.
1417 DLCI Length Indicator. The number of bits in the DLCI. The
1418 following values are supported:
1420 Len DLCI bits
1422 0 10
1423 2 23
1425 Minimum DLCI
1427 This 23-bit field specifies the lower bound of a block of Data
1428 Link Connection Identifiers (DLCIs) that is supported on the
1429 originating switch. The DLCI MUST be right justified in this
1430 field and unused bits MUST be set to 0.
1432 Maximum DLCI
1434 This 23-bit field specifies the upper bound of a block of Data
1435 Link Connection Identifiers (DLCIs) that is supported on the
1436 originating switch. The DLCI MUST be right justified in this
1437 field and unused bits MUST be set to 0.
1438 **********************************************************************/
1440 #define RSVP_LABELREQ_GENERIC_SIZE 4
1442 typedef struct rsvpLabelReqGeneric_s {
1443 u_short reserved;
1444 u_short l3pid;
1445 } rsvpLabelReqGeneric_t;
1447 #define RSVP_LABELREQ_ATM_SIZE 12
1449 typedef struct rsvpLabelReqAtmMinFlag_s {
1450 BITFIELDS_ASCENDING_3(u_short M:1,
1451 u_short reserved:3,
1452 u_short vpi:12);
1453 } rsvpLabelReqAtmMinFlag_t;
1455 typedef struct rsvpLabelReqAtmMaxFlag_s {
1456 BITFIELDS_ASCENDING_2(u_short reserved:4,
1457 u_short vpi:12);
1458 } rsvpLabelReqAtmMaxFlag_t;
1460 typedef struct rsvpLabelReqAtm_s {
1461 u_short reserved;
1462 u_short l3pid;
1464 union {
1465 struct rsvpLabelReqAtmMinFlag_s flags;
1466 u_short mark;
1467 } minFlags;
1468 u_short minVci;
1470 union {
1471 struct rsvpLabelReqAtmMaxFlag_s flags;
1472 u_short mark;
1473 } maxFlags;
1474 u_short maxVci;
1475 } rsvpLabelRequestAtm_t;
1477 #define RSVP_LABELREQ_FR_SIZE 12
1479 #define RSVP_LABEL_REQUEST_FR_LEN_10 0
1480 #define RSVP_LABEL_REQUEST_FR_LEN_23 2
1482 typedef struct rsvpLabelReqFrMinFlag_s {
1483 BITFIELDS_ASCENDING_3(u_int reserved:6,
1484 u_int dli:2,
1485 u_int min:12);
1486 } rsvpLabelReqFrMinFlag_t;
1488 typedef struct rsvpLabelReqFrMaxFlag_s {
1489 BITFIELDS_ASCENDING_2(u_int reserved:8,
1490 u_int max:24);
1491 } rsvpLabelReqFrMaxFlag_t;
1493 typedef struct rsvpLabelReqFr_s {
1494 u_short reserved;
1495 u_short l3pid;
1496 union {
1497 struct rsvpLabelReqFrMinFlag_s flags;
1498 u_int mark;
1499 } minFlags;
1500 union {
1501 struct rsvpLabelReqFrMaxFlag_s flags;
1502 u_int mark;
1503 } maxFlags;
1504 } rsvpLabelRequestFr_t;
1506 typedef struct rsvpLabelRequestObject_s {
1507 struct rsvpObjectHeader_s hdr;
1508 union {
1509 struct rsvpLabelReqGeneric_s generic;
1510 struct rsvpLabelReqAtm_s atm;
1511 struct rsvpLabelReqFr_s fr;
1512 } u;
1513 } rsvpLabelRequestObject_t;
1516 #define RSVP_EXPLICIT_ROUTE_CLASS 20
1517 #define RSVP_EXPLICIT_ROUTE_CTYPE 1
1519 #define RSVP_ERO_TYPE_IPV4 1
1520 #define RSVP_ERO_TYPE_IPV6 2
1521 #define RSVP_ERO_TYPE_ASN 32
1523 #define RSVP_MAX_ERO 16
1525 /**********************************************************************
1526 Explicit Route Object Class = 20, C_Type = 1
1528 Explicit routes are specified via the EXPLICIT_ROUTE object (ERO).
1529 The Explicit Route Class is 20. Currently one C_Type is defined,
1530 Type 1 Explicit Route. The EXPLICIT_ROUTE object has the following
1531 format:
1534 0 1 2 3
1535 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
1536 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1538 // (Subobjects) //
1540 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1542 The contents of an EXPLICIT_ROUTE object are a series of variable-
1543 length data items called subobjects. The subobjects are defined in
1544 section 4.3.3 below.
1546 If a Path message contains multiple EXPLICIT_ROUTE objects, only the
1547 first object is meaningful. Subsequent EXPLICIT_ROUTE objects MAY be
1548 ignored and SHOULD NOT be propagated.
1550 Subobjects
1552 The contents of an EXPLICIT_ROUTE object are a series of variable-
1553 length data items called subobjects. Each subobject has the form:
1556 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
1557 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-------------//----------------+
1558 |L| Type | Length | (Subobject contents) |
1559 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-------------//----------------+
1563 The L bit is an attribute of the subobject. The L bit is set
1564 if the subobject represents a loose hop in the explicit route.
1565 If the bit is not set, the subobject represents a strict hop in
1566 the explicit route.
1568 Type
1570 The Type indicates the type of contents of the subobject.
1571 Currently defined values are:
1573 1 IPv4 prefix
1574 2 IPv6 prefix
1575 32 Autonomous system number
1577 Length
1579 The Length contains the total length of the subobject in bytes,
1580 including the L, Type and Length fields. The Length MUST be at
1581 least 4, and MUST be a multiple of 4
1583 Subobject 1: IPv4 prefix
1585 0 1 2 3
1586 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
1587 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1588 |L| Type | Length | IPv4 address (4 bytes) |
1589 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1590 | IPv4 address (continued) | Prefix Length | Resvd |
1591 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1595 The L bit is an attribute of the subobject. The L bit is set
1596 if the subobject represents a loose hop in the explicit route.
1597 If the bit is not set, the subobject represents a strict hop in
1598 the explicit route.
1600 Type
1602 0x01 IPv4 address
1604 Length
1606 The Length contains the total length of the subobject in bytes,
1607 including the Type and Length fields. The Length is always 8.
1609 IPv4 address
1611 An IPv4 address. This address is treated as a prefix based on
1612 the prefix length value below. Bits beyond the prefix are
1613 ignored on receipt and SHOULD be set to zero on transmission.
1615 Prefix length
1617 Length in bits of the IPv4 prefix
1619 Padding
1621 Zero on transmission. Ignored on receipt.
1623 The contents of an IPv4 prefix subobject are a 4-octet IPv4 address,
1624 a 1-octet prefix length, and a 1-octet pad. The abstract node
1625 represented by this subobject is the set of nodes that have an IP
1626 address which lies within this prefix. Note that a prefix length of
1627 32 indicates a single IPv4 node.
1629 Subobject 2: IPv6 Prefix
1631 0 1 2 3
1632 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
1633 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1634 |L| Type | Length | IPv6 address (16 bytes) |
1635 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1636 | IPv6 address (continued) |
1637 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1638 | IPv6 address (continued) |
1639 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1640 | IPv6 address (continued) |
1641 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1642 | IPv6 address (continued) | Prefix Length | Resvd |
1643 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1647 The L bit is an attribute of the subobject. The L bit is set
1648 if the subobject represents a loose hop in the explicit route.
1649 If the bit is not set, the subobject represents a strict hop in
1650 the explicit route.
1652 Type
1654 0x02 IPv6 address
1656 Length
1658 The Length contains the total length of the subobject in bytes,
1659 including the Type and Length fields. The Length is always 20.
1661 IPv6 address
1663 An IPv6 address. This address is treated as a prefix based on
1664 the prefix length value below. Bits beyond the prefix are
1665 ignored on receipt and SHOULD be set to zero on transmission.
1667 Prefix Length
1669 Length in bits of the IPv6 prefix.
1671 Padding
1673 Zero on transmission. Ignored on receipt.
1675 The contents of an IPv6 prefix subobject are a 16-octet IPv6 address,
1676 a 1-octet prefix length, and a 1-octet pad. The abstract node
1677 represented by this subobject is the set of nodes that have an IP
1678 address which lies within this prefix. Note that a prefix length of
1679 128 indicates a single IPv6 node.
1681 Subobject 32: Autonomous System Number
1683 The contents of an Autonomous System (AS) number subobject are a 2-
1684 octet AS number. The abstract node represented by this subobject is
1685 the set of nodes belonging to the autonomous system.
1687 The length of the AS number subobject is 4 octets.
1688 **********************************************************************/
1690 typedef struct rsvpExplicitRouteFlag_s {
1691 BITFIELDS_ASCENDING_3(u_short L:1,
1692 u_short type:3,
1693 u_short len:4);
1694 } rsvpExplicitRouteFlag_t;
1696 #define RSVP_ER4_SIZE 8
1698 typedef struct rsvpExplicitRoute4_s {
1699 union {
1700 struct rsvpExplicitRouteFlag_s flags;
1701 u_short mark;
1702 } flags;
1703 u_char address[RSVP_IPV4_ADDR_LEN];
1704 u_char prefixLen;
1705 u_char reserved;
1707 /* used only for easy access to contents of 'address' */
1708 u_int uIntAddress;
1709 } rsvpExplicitRoute4_t;
1711 #define RSVP_ER6_SIZE 8
1713 typedef struct rsvpExplicitRoute6_s {
1714 union {
1715 struct rsvpExplicitRouteFlag_s flags;
1716 u_short mark;
1717 } flags;
1718 u_char address[RSVP_IPV6_ADDR_LEN];
1719 u_char prefixLen;
1720 u_char reserved;
1721 } rsvpExplicitRoute6_s;
1723 #define RSVP_ERASN_SIZE 4
1725 typedef struct rsvpExplicitRouteAsn_s {
1726 union {
1727 struct rsvpExplicitRouteFlag_s flags;
1728 u_short mark;
1729 } flags;
1730 u_short asn;
1731 } rsvpExplicitRouteAsn_t;
1733 typedef struct rsvpExplicitRouteObject_s {
1734 struct rsvpObjectHeader_s hdr;
1735 union {
1736 struct rsvpExplicitRoute4_s ipv4;
1737 struct rsvpExplicitRoute6_s ipv6;
1738 struct rsvpExplicitRouteAsn_s asn;
1739 } ero[RSVP_MAX_ERO];
1740 int eroType[RSVP_MAX_ERO];
1741 int eroLength;
1742 } rsvpExplicitRouteObject_t;
1744 #define RSVP_RECORD_ROUTE_CLASS 21
1745 #define RSVP_RECORD_ROUTE_CTYPE 1
1747 #define RSVP_RECORD_ROUTE_TYPE_IPV4 1
1748 #define RSVP_RECORD_ROUTE_TYPE_IPV6 2
1749 #define RSVP_RECORD_ROUTE_TYPE_LABEL 3
1751 #define RSVP_RECORD_ROUTE_FLAG_LOCOL_PROT_AVAIL 0x1
1752 #define RSVP_RECORD_ROUTE_FLAG_LOCOL_PROT_INUSE 0x2
1754 #define RSVP_RECORD_ROUTE4_SIZE 8
1755 #define RSVP_RECORD_ROUTE6_SIZE 20
1756 #define RSVP_RECORD_ROUTE_LABEL_SIZE 20
1758 #define RSVP_MAX_RR 16
1760 /**********************************************************************
1762 Record Route Object Class = 21, C_Type = 1
1764 Routes can be recorded via the RECORD_ROUTE object (RRO).
1765 Optionally, labels may also be recorded. The Record Route Class is
1766 21. Currently one C_Type is defined, Type 1 Record Route. The
1767 RECORD_ROUTE object has the following format:
1770 0 1 2 3
1771 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
1772 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1774 // (Subobjects) //
1776 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1778 Subobjects
1780 The contents of a RECORD_ROUTE object are a series of
1781 variable-length data items called subobjects. The subobjects
1782 are defined in section 4.4.1 below.
1784 The RRO can be present in both RSVP Path and Resv messages. If a
1785 Path message contains multiple RROs, only the first RRO is
1786 meaningful. Subsequent RROs SHOULD be ignored and SHOULD NOT be
1787 propagated. Similarly, if in a Resv message multiple RROs are
1788 encountered following a FILTER_SPEC before another FILTER_SPEC is
1789 encountered, only the first RRO is meaningful. Subsequent RROs
1790 SHOULD be ignored and SHOULD NOT be propagated.
1794 Subobject 1: IPv4 address
1796 0 1 2 3
1797 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
1798 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1799 | Type | Length | IPv4 address (4 bytes) |
1800 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1801 | IPv4 address (continued) | Prefix Length | Flags |
1802 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1804 Type
1806 0x01 IPv4 address
1808 Length
1810 The Length contains the total length of the subobject in bytes,
1811 including the Type and Length fields. The Length is always 8.
1813 IPv4 address
1815 A 32-bit unicast, host address. Any network-reachable
1816 interface address is allowed here. Illegal addresses, such as
1817 certain loopback addresses, SHOULD NOT be used.
1819 Prefix length
1823 Flags
1825 0x01 Local protection available
1827 Indicates that the link downstream of this node is
1828 protected via a local repair mechanism. This flag can
1829 only be set if the Local protection flag was set in the
1830 SESSION_ATTRIBUTE object of the corresponding Path
1831 message.
1833 0x02 Local protection in use
1835 Indicates that a local repair mechanism is in use to
1836 maintain this tunnel (usually in the face of an outage
1837 of the link it was previously routed over).
1840 Subobject 2: IPv6 address
1842 0 1 2 3
1843 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
1844 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1845 | Type | Length | IPv6 address (16 bytes) |
1846 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1847 | IPv6 address (continued) |
1848 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1849 | IPv6 address (continued) |
1850 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1851 | IPv6 address (continued) |
1852 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1853 | IPv6 address (continued) | Prefix Length | Flags |
1854 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1856 Type
1858 0x02 IPv6 address
1860 Length
1862 The Length contains the total length of the subobject in bytes,
1863 including the Type and Length fields. The Length is always 20.
1865 IPv6 address
1867 A 128-bit unicast host address.
1869 Prefix length
1873 Flags
1875 0x01 Local protection available
1877 Indicates that the link downstream of this node is
1878 protected via a local repair mechanism. This flag can
1879 only be set if the Local protection flag was set in the
1880 SESSION_ATTRIBUTE object of the corresponding Path
1881 message.
1884 0x02 Local protection in use
1886 Indicates that a local repair mechanism is in use to
1887 maintain this tunnel (usually in the face of an outage
1888 of the link it was previously routed over).
1890 Subobject 3, Label
1892 0 1 2 3
1893 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
1894 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1895 | Type | Length | Flags | C-Type |
1896 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1897 | Contents of Label Object |
1898 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1900 Type
1902 0x03 Label
1904 Length
1906 The Length contains the total length of the subobject in bytes,
1907 including the Type and Length fields.
1909 Flags
1911 0x01 = Global label
1912 This flag indicates that the label will be understood
1913 if received on any interface.
1915 C-Type
1917 The C-Type of the included Label Object. Copied from the Label
1918 Object.
1920 Contents of Label Object
1922 The contents of the Label Object. Copied from the Label Object
1923 **********************************************************************/
1925 typedef struct rsvpRecordRoute4_s {
1926 u_char type;
1927 u_char length;
1928 u_short addressMsb;
1929 u_short addressLsb;
1930 u_char prefixLen;
1931 u_char flags;
1932 } rsvpRecordRoute4_t;
1934 typedef struct rsvpRecordRoute6_s {
1935 u_char type;
1936 u_char length;
1937 u_short addressMsb;
1938 u_char addressMid[12];
1939 u_short addressLsb;
1940 u_char prefixLen;
1941 u_char flags;
1942 } rsvpRecordRoute6_t;
1944 typedef struct rsvpRecordRouteLabel_s {
1945 u_char type;
1946 u_char length;
1947 u_char flags;
1948 u_char cType;
1949 struct rsvpLabelObject_s label;
1950 } rsvpRecordRouteLabel_t;
1952 typedef struct rsvpRecordRouteObject_s {
1953 struct rsvpObjectHeader_s hdr;
1954 union {
1955 struct rsvpRecordRoute4_s ipv4;
1956 struct rsvpRecordRoute6_s ipv6;
1957 struct rsvpRecordRouteLabel_s label;
1958 } rr[RSVP_MAX_RR];
1959 int rrType[RSVP_MAX_RR];
1960 int rrLen;
1961 } rsvpRecordRouteObject_t;
1967 #define RSVP_SESSION_ATTRIB_CLASS 207
1968 #define RSVP_SESSION_ATTRIB_CTYPE_LSP_TUNNEL 7
1969 #define RSVP_SESSION_ATTRIB_CLASS_LSP_TUNNEL_RA 1
1971 #define RSVP_MAX_SESSION_NAME 64
1973 #define RSVP_SESSION_ATTRIB_FLAGS_LOCAL_PROTECT 0x1
1974 #define RSVP_SESSION_ATTRIB_FLAGS_LABEL_RECORD 0x2
1975 #define RSVP_SESSION_ATTRIB_FLAGS_SE_STYLE 0x4
1977 #define RSVP_SESSION_ATTRIB_LSP_TUNNEL_BASE_SIZE 4
1978 #define RSVP_SESSION_ATTRIB_LSP_TUNNEL_RA_BASE_SIZE 16
1980 /**********************************************************************
1982 Session Attribute Object
1984 The Session Attribute Class is 207. Two C_Types are defined,
1985 LSP_TUNNEL, C-Type = 7 and LSP_TUNNEL_RA, C-Type = 1. The
1986 LSP_TUNNEL_RA C-Type includes all the same fields as the LSP_TUNNEL
1987 C-Type. Additionally it carries resource affinity information. The
1988 formats are as follows:
1990 Format without resource affinities
1992 SESSION_ATTRIBUTE class = 207, LSP_TUNNEL C-Type = 7
1994 0 1 2 3
1995 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
1996 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1997 | Setup Prio | Holding Prio | Flags | Name Length |
1998 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2000 // Session Name (NULL padded display string) //
2002 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2004 Setup Priority
2006 The priority of the session with respect to taking resources,
2007 in the range of 0 to 7. The value 0 is the highest priority.
2008 The Setup Priority is used in deciding whether this session can
2009 preempt another session.
2011 Holding Priority
2013 The priority of the session with respect to holding resources,
2014 in the range of 0 to 7. The value 0 is the highest priority.
2015 Holding Priority is used in deciding whether this session can
2016 be preempted by another session.
2018 Flags
2020 0x01 Local protection desired
2022 This flag permits transit routers to use a local repair
2023 mechanism which may result in violation of the explicit
2024 route object. When a fault is detected on an adjacent
2025 downstream link or node, a transit router can reroute
2026 traffic for fast service restoration.
2028 0x02 Label recording desired
2030 This flag indicates that label information should be
2031 included when doing a route record.
2033 0x04 SE Style desired
2035 This flag indicates that the tunnel ingress node may
2036 choose to reroute this tunnel without tearing it down.
2037 A tunnel egress node SHOULD use the SE Style when
2038 responding with a Resv message.
2040 Name Length
2042 The length of the display string before padding, in bytes.
2044 Session Name
2046 A null padded string of characters.
2049 Format with resource affinities
2051 SESSION_ATTRIBUTE class = 207, LSP_TUNNEL_RA C-Type = 1
2053 0 1 2 3
2054 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
2055 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2056 | Exclude-any |
2057 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2058 | Include-any |
2059 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2060 | Include-all |
2061 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2062 | Setup Prio | Holding Prio | Flags | Name Length |
2063 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2065 // Session Name (NULL padded display string) //
2067 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2069 Exclude-any
2071 A 32-bit vector representing a set of attribute filters
2072 associated with a tunnel any of which renders a link
2073 unacceptable.
2075 Include-any
2077 A 32-bit vector representing a set of attribute filters
2078 associated with a tunnel any of which renders a link acceptable
2079 (with respect to this test). A null set (all bits set to zero)
2080 automatically passes.
2082 Include-all
2084 A 32-bit vector representing a set of attribute filters
2085 associated with a tunnel all of which must be present for a
2086 link to be acceptable (with respect to this test). A null set
2087 (all bits set to zero) automatically passes.
2089 Setup Priority
2091 The priority of the session with respect to taking resources,
2092 in the range of 0 to 7. The value 0 is the highest priority.
2093 The Setup Priority is used in deciding whether this session can
2094 preempt another session.
2096 Holding Priority
2098 The priority of the session with respect to holding resources,
2099 in the range of 0 to 7. The value 0 is the highest priority.
2100 Holding Priority is used in deciding whether this session can
2101 be preempted by another session.
2103 Flags
2105 0x01 Local protection desired
2107 This flag permits transit routers to use a local repair
2108 mechanism which may result in violation of the explicit
2109 route object. When a fault is detected on an adjacent
2110 downstream link or node, a transit router can reroute
2111 traffic for fast service restoration.
2113 0x02 Label recording desired
2115 This flag indicates that label information should be
2116 included when doing a route record.
2118 0x04 SE Style desired
2120 This flag indicates that the tunnel ingress node may
2121 choose to reroute this tunnel without tearing it down.
2122 A tunnel egress node SHOULD use the SE Style when
2123 responding with a Resv message.
2125 Name Length
2127 The length of the display string before padding, in bytes.
2129 Session Name
2131 A null padded string of characters.
2132 **********************************************************************/
2134 typedef struct rsvpSessionAttribLspTunnel_s {
2135 u_char setupPrio;
2136 u_char holdPrio;
2137 u_char flags;
2138 u_char nameLen;
2139 u_char name[RSVP_MAX_SESSION_NAME];
2140 } rsvpSessionAttribLspTunnel_t;
2142 typedef struct rsvpSessionAttribLspTunnelRa_s {
2143 u_int excludeAny;
2144 u_int includeAny;
2145 u_int includeAll;
2146 u_char setupPrio;
2147 u_char holdPrio;
2148 u_char flags;
2149 u_char nameLen;
2150 u_char name[RSVP_MAX_SESSION_NAME];
2151 } rsvpSessionAttribLspTunnelRa_t;
2153 typedef struct rsvpSessionAttibObject_s {
2154 struct rsvpObjectHeader_s hdr;
2155 union {
2156 struct rsvpSessionAttribLspTunnel_s tunnel;
2157 struct rsvpSessionAttribLspTunnelRa_s tunnelRa;
2158 } u;
2159 } rsvpSessionAttibObject_t;
2161 /**********************************************************************
2163 HELLO REQUEST object
2165 Class = HELLO Class, C_Type = 1
2167 0 1 2 3
2168 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
2169 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2170 | Src_Instance |
2171 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2172 | Dst_Instance |
2173 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2175 HELLO ACK object
2177 Class = HELLO Class, C_Type = 2
2179 0 1 2 3
2180 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
2181 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2182 | Src_Instance |
2183 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2184 | Dst_Instance |
2185 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2187 Src_Instance: 32 bits
2189 a 32 bit value that represents the sender's instance. The
2190 advertiser maintains a per neighbor representation/value. This
2191 value MUST change when the sender is reset, when the node reboots,
2192 or when communication is lost to the neighboring node and
2193 otherwise remains the same. This field MUST NOT be set to zero
2194 (0).
2196 Dst_Instance: 32 bits
2198 The most recently received Src_Instance value received from the
2199 neighbor. This field MUST be set to zero (0) when no value has
2200 ever been seen from the neighbor.
2202 **********************************************************************/
2204 typedef struct rsvpHelloObject_s {
2205 struct rsvpObjectHeader_s hdr;
2206 u_int src;
2207 u_int dst;
2208 } rsvpHelloObject_t;
2210 /**********************************************************************
2211 RSVP Header
2213 0 1 2 3
2214 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
2215 +---------------+---------------+---------------+---------------+
2216 | Vers | Flags | Msg Type | RSVP Checksum |
2217 +---------------+---------------+---------------+---------------+
2218 | Send_TTL | (Reserved) | RSVP Length |
2219 +---------------+---------------+---------------+---------------+
2222 The fields in the common header are as follows:
2224 Vers: 4 bits
2226 Protocol version number. This is version 1.
2228 Flags: 4 bits
2230 0x01-0x08: Reserved
2232 No flag bits are defined yet.
2234 Msg Type: 8 bits
2236 1 = Path
2238 2 = Resv
2240 3 = PathErr
2242 4 = ResvErr
2244 5 = PathTear
2246 6 = ResvTear
2248 7 = ResvConf
2250 RSVP Checksum: 16 bits
2252 The one's complement of the one's complement sum of the
2253 message, with the checksum field replaced by zero for the
2254 purpose of computing the checksum. An all-zero value
2255 means that no checksum was transmitted.
2257 Send_TTL: 8 bits
2259 The IP TTL value with which the message was sent. See
2260 Section 3.8.
2262 RSVP Length: 16 bits
2264 The total length of this RSVP message in bytes, including
2265 the common header and the variable-length objects that
2266 follow.
2269 **********************************************************************/
2271 typedef struct rsvpHeaderFlag_s {
2272 BITFIELDS_ASCENDING_2(u_char version:4,
2273 u_char flags:4);
2274 } rsvpHeaderFlag_s;
2276 #define RSVP_HDRSIZE 8
2277 #define RSVP_PDUMAXLEN 4096
2279 typedef struct rsvpHeader_s {
2280 union {
2281 u_char mark;
2282 struct rsvpHeaderFlag_s flag;
2283 } flag;
2284 u_char messageType;
2285 u_short checksum;
2286 u_char ttl;
2287 u_char resserved;
2288 u_short length;
2289 } rsvpHeader_t;
2291 /**********************************************************************
2293 The format of a Path message is as follows:
2295 <Path Message> ::= <Common Header> [ <INTEGRITY> ]
2296 <SESSION> <RSVP_HOP> <TIME_VALUES>
2297 [ <EXPLICIT_ROUTE> ] <LABEL_REQUEST>
2298 [ <SESSION_ATTRIBUTE> ]
2299 [ <POLICY_DATA> ... ]
2300 <sender descriptor>
2302 <sender descriptor> ::= <SENDER_TEMPLATE> <SENDER_TSPEC>
2303 [ <ADSPEC> ] [ <RECORD_ROUTE> ]
2305 **********************************************************************/
2307 #define RSVP_PATH_MSG 1
2309 typedef struct rsvpPathMsg_s {
2310 struct rsvpHeader_s header;
2311 struct rsvpSessionObject_s session;
2312 struct rsvpHopObject_s hop;
2313 struct rsvpTimeObject_s time;
2314 struct rsvpExplicitRouteObject_s ero;
2315 struct rsvpLabelRequestObject_s labelRequest;
2316 struct rsvpSessionAttibObject_s sessionAttrib;
2317 struct rsvpPolicyDataObject_s policyData;
2318 struct rsvpSenderTemplateObject_s senderTemplate;
2319 struct rsvpSenderTSpecObject_s senderTSpec;
2320 struct rsvpAdSpecObject_s adSpec;
2321 struct rsvpRecordRouteObject_s recordRoute;
2323 u_short sessionExists:1;
2324 u_short hopExists:1;
2325 u_short timeExists:1;
2326 u_short eroExists:1;
2327 u_short labelRequestExists:1;
2328 u_short sessionAttribExists:1;
2329 u_short policyDataExists:1;
2330 u_short senderTemplateExists:1;
2331 u_short senderTSpecExists:1;
2332 u_short adSpecExists:1;
2333 u_short recordRouteExists:1;
2335 } rsvpPathMsg_t;
2337 /**********************************************************************
2338 The Resv message format is as follows:
2340 <Resv Message> ::= <Common Header> [ <INTEGRITY> ]
2341 <SESSION> <RSVP_HOP> <TIME_VALUES>
2342 [ <RESV_CONFIRM> ] [ <SCOPE> ]
2343 [ <POLICY_DATA> ... ]
2344 <STYLE> <flow descriptor list>
2346 <flow descriptor list> ::= <FF flow descriptor list> | <SE flow descriptor>
2348 <FF flow descriptor list> ::= <FLOWSPEC> <FILTER_SPEC> <LABEL>
2349 [ <RECORD_ROUTE> ] | <FF flow descriptor list>
2350 <FF flow descriptor>
2352 <FF flow descriptor> ::= [ <FLOWSPEC> ] <FILTER_SPEC> <LABEL>
2353 [ <RECORD_ROUTE> ]
2355 <SE flow descriptor> ::= <FLOWSPEC> <SE filter spec list>
2357 <SE filter spec list> ::= <SE filter spec> |
2358 <SE filter spec list> <SE filter spec>
2360 <SE filter spec> ::= <FILTER_SPEC> <LABEL> [ <RECORD_ROUTE> ]
2362 Note: LABEL and RECORD_ROUTE (if present), are bound to the
2363 preceding FILTER_SPEC. No more than one LABEL and/or
2364 RECORD_ROUTE may follow each FILTER_SPEC.
2366 **********************************************************************/
2368 #define RSVP_REV_MSG 2
2370 typedef struct rsvpResvMsg_s {
2371 struct rsvpHeader_s header;
2372 struct rsvpSessionObject_s session;
2373 struct rsvpHopObject_s hop;
2374 struct rsvpTimeObject_s time;
2375 // struct rsvpResvConfirm_s resvConfirm;
2376 // struct rsvpScopeObject_s scope;
2377 struct rsvpPolicyDataObject_s policyData;
2378 struct rsvpStyleObject_s style;
2380 union {
2381 struct {
2382 struct {
2383 // struct rsvpFlowSpecObject_s flowSpec;
2384 // struct rsvpFilterSpecObject_s filterSpec;
2385 struct rsvpLabelObject_s label;
2386 struct rsvpRecordRouteObject_s recordRoute;
2387 u_char flowSpecExists:1;
2388 u_char filterSpecExists:1;
2389 u_char labelExists:1;
2390 u_char recordRouteExits:1;
2391 } ffEntry[16];
2392 u_char numberFfEntry;
2393 } ff;
2394 struct {
2395 // struct rsvpFlowSpecObject_s flowSpec;
2396 struct {
2397 // struct rsvpFilterSpecObject_s filterSpec;
2398 struct rsvpLabelObject_s label;
2399 struct rsvpRecordRouteObject_s recordRoute;
2400 u_char filterSpecExists:1;
2401 u_char labelExists:1;
2402 u_char recordRouteExits:1;
2403 } seEntry[16];
2404 u_char numberSeEntry;
2405 } se;
2406 } flowDescr;
2408 u_short sessionExists:1;
2409 u_short hopExists:1;
2410 u_short timeExists:1;
2411 u_short eroExists:1;
2412 u_short resvConfirmExists:1;
2413 u_short scopeExists:1;
2414 u_short policyDataExists:1;
2415 u_short flowDescrExists:1;
2416 u_short senderTSpecExists:1;
2417 u_short adSpecExists:1;
2418 u_short recordRouteExists:1;
2420 } rsvpResvMsg_t;
2421 /**********************************************************************
2422 The Path Tear message format is as follows:
2424 <PathTear Message> ::= <Common Header> [ <INTEGRITY> ]
2425 <SESSION> <RSVP_HOP>
2426 [ <sender descriptor> ]
2428 <sender descriptor> ::= (see earlier definition)
2431 **********************************************************************/
2432 /**********************************************************************
2433 The Resv Tear message format is as follows:
2435 <ResvTear Message> ::= <Common Header> [<INTEGRITY>]
2436 <SESSION> <RSVP_HOP> [ <SCOPE> ] <STYLE>
2437 <flow descriptor list>
2439 <flow descriptor list> ::= (see earlier definition)
2441 **********************************************************************/
2443 /**********************************************************************
2445 The Path Error message format is as follows:
2447 <PathErr message> ::= <Common Header> [ <INTEGRITY> ]
2448 <SESSION> <ERROR_SPEC> [ <POLICY_DATA> ...]
2449 [ <sender descriptor> ]
2451 <sender descriptor> ::= (see earlier definition)
2453 **********************************************************************/
2454 /**********************************************************************
2456 The Resv Error message format is as follows:
2458 <ResvErr Message> ::= <Common Header> [ <INTEGRITY> ]
2459 <SESSION> <RSVP_HOP> <ERROR_SPEC> [ <SCOPE> ]
2460 [ <POLICY_DATA> ...] <STYLE>
2461 [ <error flow descriptor> ]
2463 o FF style:
2464 <error flow descriptor> ::= <FF flow descriptor>
2466 o SE style:
2467 <error flow descriptor> ::= <SE flow descriptor>
2469 **********************************************************************/
2470 /**********************************************************************
2472 The Resv Conf message format is as follows:
2474 <ResvConf message> ::= <Common Header> [ <INTEGRITY> ]
2475 <SESSION> <ERROR_SPEC> <RESV_CONFIRM>
2476 <STYLE> <flow descriptor list>
2478 <flow descriptor list> ::= (see earlier definition)
2480 **********************************************************************/
2482 #endif /* RSVPTE_STRUCT_H */