More RSVP packet decode/encode
[mpls-ldp-portable.git] / rsvpte / rsvpte_struct.h
blob302d979851b7f94278cdcaf19c4c4bde07509802
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 struct mpls_inet_addr local_source_address;
50 mpls_if_handle handle;
52 char name[MPLS_MAX_IF_NAME];
53 mpls_oper_state_enum oper_state;
54 mpls_admin_state_enum admin_state;
55 } rsvpte_if;
57 #define RSSPV_RSVP_ENC_OBJECTERROR -1
58 #define RSSPV_RSVP_DEC_OBJECTERROR -2
60 #define RSVP_IPV4_ADDR_LEN 4
61 #define RSVP_IPV6_ADDR_LEN 16
63 /**********************************************************************
64 RSVP Objects
66 Every object consists of one or more 32-bit words with a one-
67 word header, with the following format:
69 0 1 2 3
70 +-------------+-------------+-------------+-------------+
71 | Length (bytes) | Class-Num | C-Type |
72 +-------------+-------------+-------------+-------------+
73 | |
74 // (Object contents) //
75 | |
76 +-------------+-------------+-------------+-------------+
78 An object header has the following fields:
80 Length
82 A 16-bit field containing the total object length in
83 bytes. Must always be a multiple of 4, and at least 4.
85 Class-Num
87 Identifies the object class; values of this field are
88 defined in Appendix A. Each object class has a name,
89 which is always capitalized in this document. An RSVP
90 implementation must recognize the following classes:
92 NULL
94 A NULL object has a Class-Num of zero, and its C-Type
95 is ignored. Its length must be at least 4, but can
96 be any multiple of 4. A NULL object may appear
97 anywhere in a sequence of objects, and its contents
98 will be ignored by the receiver.
100 SESSION
102 Contains the IP destination address (DestAddress),
103 the IP protocol id, and some form of generalized
104 destination port, to define a specific session for
105 the other objects that follow. Required in every
106 RSVP message.
108 RSVP_HOP
110 Carries the IP address of the RSVP-capable node that
111 sent this message and a logical outgoing interface
112 handle (LIH; see Section 3.3). This document refers
113 to a RSVP_HOP object as a PHOP ("previous hop")
114 object for downstream messages or as a NHOP (" next
115 hop") object for upstream messages.
117 TIME_VALUES
119 Contains the value for the refresh period R used by
120 the creator of the message; see Section 3.7.
121 Required in every Path and Resv message.
123 STYLE
125 Defines the reservation style plus style-specific
126 information that is not in FLOWSPEC or FILTER_SPEC
127 objects. Required in every Resv message.
129 FLOWSPEC
131 Defines a desired QoS, in a Resv message.
133 FILTER_SPEC
135 Defines a subset of session data packets that should
136 receive the desired QoS (specified by a FLOWSPEC
137 object), in a Resv message.
139 SENDER_TEMPLATE
141 Contains a sender IP address and perhaps some
142 additional demultiplexing information to identify a
143 sender. Required in a Path message.
145 SENDER_TSPEC
147 Defines the traffic characteristics of a sender's
148 data flow. Required in a Path message.
150 ADSPEC
152 Carries OPWA data, in a Path message.
154 ERROR_SPEC
156 Specifies an error in a PathErr, ResvErr, or a
157 confirmation in a ResvConf message.
159 POLICY_DATA
161 Carries information that will allow a local policy
162 module to decide whether an associated reservation is
163 administratively permitted. May appear in Path,
164 Resv, PathErr, or ResvErr message.
166 The use of POLICY_DATA objects is not fully specified
167 at this time; a future document will fill this gap.
169 INTEGRITY
171 Carries cryptographic data to authenticate the
172 originating node and to verify the contents of this
173 RSVP message. The use of the INTEGRITY object is
174 described in [Baker96].
176 SCOPE
178 Carries an explicit list of sender hosts towards
179 which the information in the message is to be
180 forwarded. May appear in a Resv, ResvErr, or
181 ResvTear message. See Section 3.4.
183 RESV_CONFIRM
185 Carries the IP address of a receiver that requested a
186 confirmation. May appear in a Resv or ResvConf
187 message.
189 **********************************************************************/
191 #define RSVP_OBJECT_HDRSIZE 4
193 typedef struct rsvpObjectHeader_s {
194 u_short length;
195 u_char class;
196 u_char cType;
197 } rsvpObjectHeader_t;
200 #define RSVP_SESSION_CLASS 1
201 #define RSVP_SESSION_CTYPE_IPV4 1
202 #define RSVP_SESSION_CTYPE_IPV6 2
203 #define RSVP_SESSION_CTYPE_TUNNEL4 7
204 #define RSVP_SESSION_CTYPE_TUNNEL6 8
206 /**********************************************************************
207 RSVP SESSION Object
209 o IPv4/UDP SESSION object: Class = 1, C-Type = 1
211 0 1 2 3
212 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
213 +---------------+---------------+---------------+---------------+
214 | IPv4 DestAddress (4 bytes) |
215 +---------------+---------------+---------------+---------------+
216 | Protocol Id | Flags | DstPort |
217 +---------------+---------------+---------------+---------------+
219 o IPv6/UDP SESSION object: Class = 1, C-Type = 2
221 0 1 2 3
222 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
223 +---------------+---------------+---------------+---------------+
227 + IPv6 DestAddress (16 bytes) +
231 +---------------+---------------+---------------+---------------+
232 | Protocol Id | Flags | DstPort |
233 +---------------+---------------+---------------+---------------+
235 DestAddress
237 The IP unicast or multicast destination address of the
238 session. This field must be non-zero.
240 Protocol Id
242 The IP Protocol Identifier for the data flow. This field
243 must be non-zero.
244 Flags
246 0x01 = E_Police flag
248 The E_Police flag is used in Path messages to determine
249 the effective "edge" of the network, to control traffic
250 policing. If the sender host is not itself capable of
251 traffic policing, it will set this bit on in Path
252 messages it sends. The first node whose RSVP is capable
253 of traffic policing will do so (if appropriate to the
254 service) and turn the flag off.
256 DstPort
258 The UDP/TCP destination port for the session. Zero may be
259 used to indicate `none'.
261 Other SESSION C-Types could be defined in the future to
262 support other demultiplexing conventions in the transport-
263 layer or application layer.
265 LSP_TUNNEL_IPv4 Session Object
267 Class = SESSION, LSP_TUNNEL_IPv4 C-Type = 7
269 0 1 2 3
270 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
271 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
272 | IPv4 tunnel end point address |
273 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
274 | MUST be zero | Tunnel ID |
275 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
276 | Extended Tunnel ID |
277 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
279 IPv4 tunnel end point address
281 IPv4 address of the egress node for the tunnel.
283 Tunnel ID
285 A 16-bit identifier used in the SESSION that remains constant
286 over the life of the tunnel.
288 Extended Tunnel ID
290 A 32-bit identifier used in the SESSION that remains constant
291 over the life of the tunnel. Normally set to all zeros.
292 Ingress nodes that wish to narrow the scope of a SESSION to the
293 ingress-egress pair may place their IPv4 address here as a
294 globally unique identifier.
297 LSP_TUNNEL_IPv6 Session Object
299 Class = SESSION, LSP_TUNNEL_IPv6 C_Type = 8
301 0 1 2 3
302 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
303 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
306 | IPv6 tunnel end point address |
308 | (16 bytes) |
311 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
312 | MUST be zero | Tunnel ID |
313 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
316 | Extended Tunnel ID |
318 | (16 bytes) |
321 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
323 IPv6 tunnel end point address
325 IPv6 address of the egress node for the tunnel.
327 Tunnel ID
329 A 16-bit identifier used in the SESSION that remains constant
330 over the life of the tunnel.
332 Extended Tunnel ID
334 A 16-byte identifier used in the SESSION that remains constant
335 over the life of the tunnel. Normally set to all zeros.
336 Ingress nodes that wish to narrow the scope of a SESSION to the
337 ingress-egress pair may place their IPv6 address here as a
338 globally unique identifier.
340 **********************************************************************/
342 #define RSVP_SESSION4_SIZE 8
344 typedef struct rsvpSession4_s {
345 u_int destAddr;
346 u_char protocolId;
347 u_char flags;
348 u_short destPort;
349 } rsvpSession4_t;
351 #define RSVP_SESSION6_SIZE 20
353 typedef struct rsvpSession6_s {
354 u_char destAddr[16];
355 u_char protocolId;
356 u_char flags;
357 u_short destPort;
358 } rsvpSession6_t;
360 #define RSVP_SESSION_TUNNEL4_SIZE 12
362 typedef struct rsvpSessionTunnel4_s {
363 u_int endPointAddress;
364 u_short reserved;
365 u_short tunnelId;
366 u_int extentedTunnelId;
367 } rsvpSessionTunnel4_t;
369 #define RSVP_SESSION_TUNNEL6_SIZE 36
371 typedef struct rsvpSessionTunnel6_s {
372 u_char endPointAddress[16];
373 u_short reserved;
374 u_short tunnelId;
375 u_char extentedTunnelId[16];
376 } rsvpSessionTunnel6_t;
378 typedef struct rsvpSessionObject_s {
379 struct rsvpObjectHeader_s hdr;
380 union {
381 struct rsvpSession4_s ipv4;
382 struct rsvpSession6_s ipv6;
383 struct rsvpSessionTunnel4_s tunnel4;
384 struct rsvpSessionTunnel6_s tunnel6;
385 } u;
386 } rsvpSessionObject_t;
388 #define RSVP_HOP_CLASS 3
389 #define RSVP_HOP_CTYPE_IPV4 1
390 #define RSVP_HOP_CTYPE_IPV6 2
392 /**********************************************************************
393 RSVP HOP Object
395 o IPv4 RSVP_HOP object: Class = 3, C-Type = 1
397 0 1 2 3
398 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
400 +---------------+---------------+---------------+---------------+
401 | IPv4 Next/Previous Hop Address |
402 +---------------+---------------+---------------+---------------+
403 | Logical Interface Handle |
404 +---------------+---------------+---------------+---------------+
406 o IPv6 RSVP_HOP object: Class = 3, C-Type = 2
408 0 1 2 3
409 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
411 +---------------+---------------+---------------+---------------+
415 + IPv6 Next/Previous Hop Address +
419 +---------------+---------------+---------------+---------------+
420 | Logical Interface Handle |
421 +---------------+---------------+---------------+---------------+
423 This object carries the IP address of the interface through which
424 the last RSVP-knowledgeable hop forwarded this message. The
425 Logical Interface Handle (LIH) is used to distinguish logical
426 outgoing interfaces, as discussed in Sections 3.3 and 3.9. A node
427 receiving an LIH in a Path message saves its value and returns it
428 in the HOP objects of subsequent Resv messages sent to the node
429 that originated the LIH. The LIH should be identically zero if
430 there is no logical interface handle.
432 **********************************************************************/
434 #define RSVP_HOP4_SIZE 8
436 typedef struct rsvpHop4_s {
437 u_int hopAddr;
438 u_int logicalIfHandle;
439 } rsvpHop4_t;
441 #define RSVP_HOP6_SIZE 20
443 typedef struct rsvpHop6_s {
444 u_char hopAddr[16];
445 u_int logicalIfHandle;
446 } rsvpHop6_t;
448 typedef struct rsvpHopObject_s {
449 struct rsvpObjectHeader_s hdr;
450 union {
451 struct rsvpHop4_s ipv4;
452 struct rsvpHop6_s ipv6;
453 } u;
454 } rsvpHopObject_t;
456 #define RSVP_TIME_CLASS 5
457 #define RSVP_TIME_CTYPE 1
459 /**********************************************************************
460 RSVP TIME Object
462 o TIME_VALUES Object: Class = 5, C-Type = 1
464 0 1 2 3
465 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
466 +---------------+---------------+---------------+---------------+
467 | Refresh Period R |
468 +---------------+---------------+---------------+---------------+
470 Refresh Period
472 The refresh timeout period R used to generate this message;
473 in milliseconds.
475 **********************************************************************/
477 #define RSVP_TIME_SIZE 4
479 typedef struct rsvpTimeObject_s {
480 struct rsvpObjectHeader_s hdr;
481 u_int refresh;
482 } rsvpTimeObject_t;
484 #define RSVP_ERROR_SPEC_CLASS 6
485 #define RSVP_ERROR_SPEC_CTYPE_IPV4 1
486 #define RSVP_ERROR_SPEC_CTYPE_IPV6 2
488 /**********************************************************************
489 RSVP ERROR_SPEC Object
491 o IPv4 ERROR_SPEC object: Class = 6, C-Type = 1
493 0 1 2 3
494 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
495 +---------------+---------------+---------------+---------------+
496 | IPv4 Error Node Address (4 bytes) |
497 +---------------+---------------+---------------+---------------+
498 | Flags | Error Code | Error Value |
499 +---------------+---------------+---------------+---------------+
502 o IPv6 ERROR_SPEC object: Class = 6, C-Type = 2
504 0 1 2 3
505 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
506 +---------------+---------------+---------------+---------------+
510 + IPv6 Error Node Address (16 bytes) +
514 +---------------+---------------+---------------+---------------+
515 | Flags | Error Code | Error Value |
516 +---------------+---------------+---------------+---------------+
518 Error Node Address
520 The IP address of the node in which the error was detected.
522 Flags
524 0x01 = InPlace
526 This flag is used only for an ERROR_SPEC object in a
527 ResvErr message. If it on, this flag indicates that
528 there was, and still is, a reservation in place at the
529 failure point.
531 0x02 = NotGuilty
533 This flag is used only for an ERROR_SPEC object in a
534 ResvErr message, and it is only set in the interface to
535 the receiver application. If it on, this flag indicates
536 that the FLOWSPEC that failed was strictly greater than
537 the FLOWSPEC requested by this receiver.
539 Error Code
541 A one-octet error description.
543 Error Value
545 A two-octet field containing additional information about the
546 error. Its contents depend upon the Error Type.
548 The values for Error Code and Error Value are defined in Appendix
551 ***********************************************************************/
553 typedef struct rsvpErrorSpec4_s {
554 u_int hopAddr;
555 u_char flag;
556 u_char code;
557 u_short value;
558 } rsvpErrorSpec4_t;
560 typedef struct rsvpErrorSpec6_s {
561 u_char hopAddr[16];
562 u_char flag;
563 u_char code;
564 u_short value;
565 } rsvpErrorSpec6_t;
567 typedef struct rsvpErrorSpecObject_s {
568 struct rsvpObjectHeader_s hdr;
569 union {
570 struct rsvpErrorSpec4_s ipv4;
571 struct rsvpErrorSpec6_s ipv6;
572 } u;
573 } rsvpErrorSpecObject_t;
575 #define RSVP_SCOPE_LIST_CLASS 7
576 #define RSVP_SCOPE_LIST_CTYPE_IPV4 1
577 #define RSVP_SCOPE_LIST_CTYPE_IPV6 2
579 #define RSVP_MAX_SCOPE_LIST 16
581 /***********************************************************************
583 RSVP SCOPE LIST Object
585 This object contains a list of IP addresses, used for routing
586 messages with wildcard scope without loops. The addresses must be
587 listed in ascending numerical order.
589 o IPv4 SCOPE List object: Class = 7, C-Type = 1
591 0 1 2 3
592 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
593 +-------------+-------------+-------------+-------------+
594 | IPv4 Src Address (4 bytes) |
595 +-------------+-------------+-------------+-------------+
596 // //
597 +-------------+-------------+-------------+-------------+
598 | IPv4 Src Address (4 bytes) |
599 +-------------+-------------+-------------+-------------+
602 o IPv6 SCOPE list object: Class = 7, C-Type = 2
604 0 1 2 3
605 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
606 +-------------+-------------+-------------+-------------+
610 + IPv6 Src Address (16 bytes) +
614 +-------------+-------------+-------------+-------------+
615 // //
616 +-------------+-------------+-------------+-------------+
620 + IPv6 Src Address (16 bytes) +
624 +-------------+-------------+-------------+-------------+
626 ***********************************************************************/
628 typedef struct rsvpScopeList4_s {
629 u_int addr[RSVP_MAX_SCOPE_LIST];
630 } rsvpScopeList4_t;
632 typedef struct rsvpScopeList6_s {
633 u_char addr[RSVP_MAX_SCOPE_LIST][16];
634 } rsvpScopeList6_t;
636 typedef struct rsvpScopListObject_s {
637 struct rsvpObjectHeader_s hdr;
638 union {
639 struct rsvpScopeList4_s ipv4;
640 struct rsvpScopeList6_s ipv6;
641 } u;
642 } rsvpScopListObject_t;
643 #define RSVP_STYLE_CLASS 8
644 #define RSVP_STYLE_CTYPE 1
646 /***********************************************************************
648 STYLE class = 8.
650 o STYLE object: Class = 8, C-Type = 1
652 0 1 2 3
653 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
654 +-----------------+---------------+---------------+-------------+
655 | Flags | Option Vector |
656 +-----------------+---------------+---------------+-------------+
660 Flags: 8 bits
662 (None assigned yet)
664 Option Vector: 24 bits
666 A set of bit fields giving values for the reservation
667 options. If new options are added in the future,
668 corresponding fields in the option vector will be assigned
669 from the least-significant end. If a node does not recognize
670 a style ID, it may interpret as much of the option vector as
671 it can, ignoring new fields that may have been defined.
673 The option vector bits are assigned (from the left) as
674 follows:
676 19 bits: Reserved
678 2 bits: Sharing control
680 00b: Reserved
682 01b: Distinct reservations
684 10b: Shared reservations
686 11b: Reserved
688 3 bits: Sender selection control
690 000b: Reserved
692 001b: Wildcard
694 010b: Explicit
696 011b - 111b: Reserved
698 The low order bits of the option vector are determined by the
699 style, as follows:
701 WF 10001b
702 FF 01010b
703 SE 10010b
705 ***********************************************************************/
707 typedef struct rsvpStyleFlag_s {
708 BITFIELDS_ASCENDING_4(u_int flag:8, /* flags */
709 u_int reserved:19, /* reserved */
710 u_int shareControl:2, /* sharing control */
711 u_int senderSelectionControl:3); /* sender selection control */
712 } rsvpStyleFlag_t;
714 typedef struct rsvpStyleObject_s {
715 struct rsvpObjectHeader_s hdr;
717 union {
718 struct rsvpStyleFlag_s flag;
719 u_int mark;
720 } flag;
721 } rsvpStyleObject_t;
723 #define RSVP_FILTER_SPEC_CLASS 10
724 #define RSVP_FILTER_SPEC_CTYPE_IPV4 1
725 #define RSVP_FILTER_SPEC_CTYPE_IPV6 2
726 #define RSVP_FILTER_SPEC_CTYPE_FLOW 3
727 #define RSVP_FILTER_SPEC4_SIZE 8
728 #define RSVP_FILTER_SPEC6_SIZE 20
729 #define RSVP_FILTER_SPEC_FLOW_SIZE 20
731 /***********************************************************************
733 FILTER_SPEC class = 10.
735 o IPv4 FILTER_SPEC object: Class = 10, C-Type = 1
737 0 1 2 3
738 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
739 +---------------+---------------+---------------+---------------+
740 | IPv4 SrcAddress (4 bytes) |
741 +---------------+---------------+---------------+---------------+
742 | ////// | ////// | SrcPort |
743 +---------------+---------------+---------------+---------------+
746 o IPv6 FILTER_SPEC object: Class = 10, C-Type = 2
748 0 1 2 3
749 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
750 +---------------+---------------+---------------+---------------+
754 + IPv6 SrcAddress (16 bytes) +
758 +---------------+---------------+---------------+---------------+
759 | ////// | ////// | SrcPort |
760 +---------------+---------------+---------------+---------------+
763 o IPv6 Flow-label FILTER_SPEC object: Class = 10, C-Type = 3
765 0 1 2 3
766 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
767 +---------------+---------------+---------------+---------------+
771 + IPv6 SrcAddress (16 bytes) +
775 +---------------+---------------+---------------+---------------+
776 | /////// | Flow Label (24 bits) |
777 +---------------+---------------+---------------+---------------+
779 SrcAddress
781 The IP source address for a sender host. Must be non-zero.
783 SrcPort
785 The UDP/TCP source port for a sender, or zero to indicate
786 `none'.
788 Flow Label
790 A 24-bit Flow Label, defined in IPv6. This value may be used
791 by the packet classifier to efficiently identify the packets
792 belonging to a particular (sender->destination) data flow.
794 ***********************************************************************/
796 typedef struct rsvpFilterSpec4_s {
797 u_int sourceAddr;
798 u_short reserved;
799 u_short sourcePort;
800 } rsvpFilterSpec4_t;
802 typedef struct rsvpFilterSpec6_s {
803 u_char sourceAddr[RSVP_IPV6_ADDR_LEN];
804 u_short reserved;
805 u_short sourcePort;
806 } rsvpFilterSpec6_t;
808 typedef struct rsvpFilterSpecFlags_s {
809 BITFIELDS_ASCENDING_2(u_int reserved:8,
810 u_int flowLabel:24);
811 } rsvpFilterSpecFlags_t;
813 typedef struct rsvpFilterSpecFlow6_s {
814 u_char sourceAddr[RSVP_IPV6_ADDR_LEN];
815 union {
816 u_int mark;
817 struct rsvpFilterSpecFlags_s flowLabel;
818 } flag;
819 } rsvpFilterSpecFlow6_t;
821 typedef struct rsvpFilterSpecObject_s {
822 struct rsvpObjectHeader_s hdr;
823 union {
824 struct rsvpFilterSpec4_s ipv4;
825 struct rsvpFilterSpec6_s ipv6;
826 struct rsvpFilterSpecFlow6_s flow;
827 } u;
828 } rsvpFilterSpecObject_t;
830 #define RSVP_SENDER_TEMPLATE_CLASS 11
831 #define RSVP_SENDER_TEMPLATE_CTYPE_IPV4 1
832 #define RSVP_SENDER_TEMPLATE_CTYPE_IPV6 2
833 #define RSVP_SENDER_TEMPLATE_CTYPE_FLOW 3
834 #define RSVP_SENDER_TEMPLATE_CTYPE_TUNNEL4 7
835 #define RSVP_SENDER_TEMPLATE_CTYPE_TUNNEL6 8
836 #define RSVP_SENDER_TEMPLATE_TUNNEL4_SIZE 8
837 #define RSVP_SENDER_TEMPLATE_TUNNEL6_SIZE 20
839 /**********************************************************************
840 SENDER_TEMPLATE Class
842 SENDER_TEMPLATE class = 11.
844 o IPv4 SENDER_TEMPLATE object: Class = 11, C-Type = 1
846 Definition same as IPv4/UDP FILTER_SPEC object.
848 o IPv6 SENDER_TEMPLATE object: Class = 11, C-Type = 2
850 Definition same as IPv6/UDP FILTER_SPEC object.
852 o IPv6 Flow-label SENDER_TEMPLATE object: Class = 11, C-Type = 3
855 LSP_TUNNEL_IPv4 Sender Template Object
857 Class = SENDER_TEMPLATE, LSP_TUNNEL_IPv4 C-Type = 7
859 0 1 2 3
860 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
861 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
862 | IPv4 tunnel sender address |
863 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
864 | MUST be zero | LSP ID |
865 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
867 IPv4 tunnel sender address
869 IPv4 address for a sender node
871 LSP ID
873 A 16-bit identifier used in the SENDER_TEMPLATE and the
874 FILTER_SPEC that can be changed to allow a sender to share
875 resources with itself.
877 LSP_TUNNEL_IPv6 Sender Template Object
879 Class = SENDER_TEMPLATE, LSP_TUNNEL_IPv6 C_Type = 8
881 0 1 2 3
882 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
883 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
886 | IPv6 tunnel sender address |
888 | (16 bytes) |
891 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
892 | MUST be zero | LSP ID |
893 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
895 IPv6 tunnel sender address
897 IPv6 address for a sender node
899 LSP ID
901 A 16-bit identifier used in the SENDER_TEMPLATE and the
902 FILTER_SPEC that can be changed to allow a sender to share
903 resources with itself.
904 **********************************************************************/
906 #define rsvpSenderTemplate4_s rsvpFilterSpec4_s
907 #define rsvpSenderTemplate4_t rsvpFilterSpec4_t
909 #define rsvpSenderTemplate6_s rsvpFilterSpec6_s
910 #define rsvpSenderTemplate6_t rsvpFilterSpec6_t
912 #define rsvpSenderTemplateFlow6_s rsvpFilterSpecFlow6_s
913 #define rsvpSenderTemplateFlow6_t rsvpFilterSpecFlow6_t
915 #define rsvpteEncodeSenderTemplate4 rsvpteEncodeFilterSpec4
916 #define rsvpteEncodeSenderTemplate6 rsvpteEncodeFilterSpec6
917 #define rsvpteEncodeSenderTemplateFlow rsvpteEncodeFilterSpecFlow
919 #define rsvpteDecodeSenderTemplate4 rsvpteDecodeFilterSpec4
920 #define rsvpteDecodeSenderTemplate6 rsvpteDecodeFilterSpec6
921 #define rsvpteDecodeSenderTemplateFlow rsvpteDecodeFilterSpecFlow
923 typedef struct rsvpSenderTemplateTunnel4_s {
924 u_int sender;
925 u_short reserved;
926 u_short lspId;
927 } rsvpSenderTemplateTunnel4_t;
929 typedef struct rsvpSenderTemplateTunnel6_s {
930 u_char sender[RSVP_IPV6_ADDR_LEN];
931 u_short reserved;
932 u_short lspId;
933 } rsvpSenderTemplateTunnel6_t;
935 typedef struct rsvpSenderTemplateObject_s {
936 struct rsvpObjectHeader_s hdr;
937 union {
938 struct rsvpSenderTemplate4_s ipv4;
939 struct rsvpSenderTemplate6_s ipv6;
940 struct rsvpSenderTemplateFlow6_s flow;
941 struct rsvpSenderTemplateTunnel4_s tunnel4;
942 struct rsvpSenderTemplateTunnel6_s tunnel6;
943 } u;
944 } rsvpSenderTemplateObject_t;
946 #define RSVP_SENDER_TSPEC_CLASS 12
947 #define RSVP_SENDER_TSPEC_CTYPE_INTSRV 2
949 /**********************************************************************
950 SENDER_TSPEC Class
952 SENDER_TSPEC class = 12.
954 o Intserv SENDER_TSPEC object: Class = 12, C-Type = 2
956 The RSVP SENDER_TSPEC object carries information about a data
957 source's generated traffic. The required RSVP SENDER_TSPEC object
958 contains a global Token_Bucket_TSpec parameter (service_number 1,
959 parameter 127, as defined in [RFC 2215]). This TSpec carries traffic
960 information usable by either the Guaranteed or Controlled-Load QoS
961 control services.
963 31 24 23 16 15 8 7 0
964 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
965 1 | 0 (a) | reserved | 7 (b) |
966 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
967 2 | 1 (c) |0| reserved | 6 (d) |
968 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
969 3 | 127 (e) | 0 (f) | 5 (g) |
970 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
971 4 | Token Bucket Rate [r] (32-bit IEEE floating point number) |
972 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
973 5 | Token Bucket Size [b] (32-bit IEEE floating point number) |
974 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
975 6 | Peak Data Rate [p] (32-bit IEEE floating point number) |
976 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
977 7 | Minimum Policed Unit [m] (32-bit integer) |
978 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
979 8 | Maximum Packet Size [M] (32-bit integer) |
980 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
982 (a) - Message format version number (0)
983 (b) - Overall length (7 words not including header)
984 (c) - Service header, service number 1 (default/global information)
985 (d) - Length of service 1 data, 6 words not including header
986 (e) - Parameter ID, parameter 127 (Token_Bucket_TSpec)
987 (f) - Parameter 127 flags (none set)
988 (g) - Parameter 127 length, 5 words not including header
991 In this TSpec, the parameters [r] and [b] are set to reflect the
992 sender's view of its generated traffic. The peak rate parameter [p]
993 may be set to the sender's peak traffic generation rate (if known and
994 controlled), the physical interface line rate (if known), or positive
995 infinity (if no better value is available). Positive infinity is
996 represented as an IEEE single-precision floating-point number with an
997 exponent of all ones (255) and a sign and mantissa of all zeros. The
998 format of IEEE floating-point numbers is further summarized in [RFC
999 1832].
1001 The minimum policed unit parameter [m] should generally be set equal
1002 to the size of the smallest packet generated by the application. This
1003 packet size includes the application data and all protocol headers at
1004 or above the IP level (IP, TCP, UDP, RTP, etc.). The size given does
1005 not include any link-level headers, because these headers will change
1006 as the packet crosses different portions of the internetwork.
1009 The [m] parameter is used by nodes within the network to compute the
1010 maximum bandwidth overhead needed to carry a flow's packets over the
1011 particular link-level technology, based on the ratio of [m] to the
1012 link-level header size. This allows the correct amount of bandwidth
1013 to be allocated to the flow at each point in the net. Note that
1014 smaller values of this parameter lead to increased overhead
1015 estimates, and thus increased likelyhood of a reservation request
1016 being rejected by the node. In some cases, an application
1017 transmitting a low percentage of very small packets may therefore
1018 choose to set the value of [m] larger than the actual minimum
1019 transmitted packet size. This will increase the likelyhood of the
1020 reservation succeeding, at the expense of policing packets of size
1021 less than [m] as if they were of size [m].
1023 Note that the an [m] value of zero is illegal. A value of zero would
1024 indicate that no data or IP headers are present, and would give an
1025 infinite amount of link-level overhead.
1027 The maximum packet size parameter [M] should be set to the size of
1028 the largest packet the application might wish to generate, as
1029 described in Section 2.3.2. This value must, by definition, be equal
1030 to or larger than the value of [m].
1033 **********************************************************************/
1034 typedef struct rsvpSenderTSpecOject_s {
1035 struct rsvpObjectHeader_s hdr;
1036 } rsvpSenderTSpecOject_t;
1039 #define RSVP_ADSPEC_CLASS 13
1040 #define RSVP_ADSPEC_CTYPE_INTSRV 2
1041 /**********************************************************************
1042 ADSPEC Class
1044 ADSPEC class = 13.
1046 o Intserv ADSPEC object: Class = 13, C-Type = 2
1048 The basic ADSPEC format is shown below. The message header and the
1049 default general parameters fragment are always present. The fragments
1050 for Guaranteed or Controlled-Load service may be omitted if the
1051 service is not to be used by the RSVP session. Additional data
1052 fragments will be added if new services are defined.
1054 31 24 23 16 15 8 7 0
1055 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1056 | 0 (a) | reserved | Msg length - 1 (b) |
1057 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1059 | Default General Parameters fragment (Service 1) (c) |
1060 | (Always Present) |
1062 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1064 | Guaranteed Service Fragment (Service 2) (d) |
1065 | (Present if application might use Guaranteed Service) |
1067 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1069 | Controlled-Load Service Fragment (Service 5) (e) |
1070 | (Present if application might use Controlled-Load Service) |
1072 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1074 (a) - Message format version number (0)
1075 (b) - Overall message length not including header word
1076 (c, d, e) - Data fragments
1078 3.3.2. Default General Characterization Parameters ADSPEC data fragment
1080 All RSVP ADSPECs carry the general characterization parameters
1081 defined in [RFC 2215]. Values for global or default general
1082 parameters (values which apply to the all services or the path
1083 itself) are carried in the per-service data fragment for service
1084 number 1, as shown in the picture above. This fragment is always
1085 present, and always first in the message.
1087 31 24 23 16 15 8 7 0
1088 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1089 1 | 1 (c) |x| reserved | 8 (d) |
1090 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1091 2 | 4 (e) | (f) | 1 (g) |
1092 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1093 3 | IS hop cnt (32-bit unsigned integer) |
1094 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1095 4 | 6 (h) | (i) | 1 (j) |
1096 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1097 5 | Path b/w estimate (32-bit IEEE floating point number) |
1098 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1099 6 | 8 (k) | (l) | 1 (m) |
1100 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1101 7 | Minimum path latency (32-bit integer) |
1102 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1103 8 | 10 (n) | (o) | 1 (p) |
1104 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1105 9 | Composed MTU (32-bit unsigned integer) |
1106 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1108 (c) - Per-Service header, service number 1 (Default General
1109 Parameters)
1110 (d) - Global Break bit ([RFC 2215], Parameter 2) (marked x) and
1111 length of General Parameters data block.
1112 (e) - Parameter ID, parameter 4 (Number-of-IS-hops param from
1113 [RFC 2215])
1114 (f) - Parameter 4 flag byte
1115 (g) - Parameter 4 length, 1 word not including header
1116 (h) - Parameter ID, parameter 6 (Path-BW param from [RFC 2215])
1117 (i) - Parameter 6 flag byte
1118 (j) - Parameter 6 length, 1 word not including header
1119 (k) - Parameter ID, parameter 8 (minimum path latency from [RFC
1120 2215])
1121 (l) - Parameter 8 flag byte
1122 (m) - Parameter 8 length, 1 word not including header
1123 (n) - Parameter ID, parameter 10 (composed path MTU from [RFC 2215])
1124 (o) - Parameter 10 flag byte
1125 (p) - Parameter 10 length, 1 word not including header
1127 **********************************************************************/
1128 typedef struct rsvpAdSpecOject_s {
1129 struct rsvpObjectHeader_s hdr;
1130 } rsvpAdSpecOject_t;
1132 /**********************************************************************
1134 3.2. RSVP FLOWSPEC Object
1136 The RSVP FLOWSPEC object carries information necessary to make
1137 reservation requests from the receiver(s) into the network. This
1138 includes an indication of which QoS control service is being
1139 requested, and the parameters needed for that service.
1141 The QoS control service requested is indicated by the service_number
1142 in the FLOWSPEC's per-service header.
1144 3.2.1 FLOWSPEC object when requesting Controlled-Load service
1146 The format of an RSVP FLOWSPEC object originating at a receiver
1147 requesting Controlled-Load service is shown below. Each of the TSpec
1148 fields is represented using the preferred concrete representation
1149 specified in the 'Invocation Information' section of [RFC 2211]. The
1150 value of 5 in the per-service header (field (c), below) indicates
1151 that Controlled-Load service is being requested.
1153 31 24 23 16 15 8 7 0
1154 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1155 1 | 0 (a) | reserved | 7 (b) |
1156 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1157 2 | 5 (c) |0| reserved | 6 (d) |
1158 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1159 3 | 127 (e) | 0 (f) | 5 (g) |
1160 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1161 4 | Token Bucket Rate [r] (32-bit IEEE floating point number) |
1162 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1163 5 | Token Bucket Size [b] (32-bit IEEE floating point number) |
1164 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1165 6 | Peak Data Rate [p] (32-bit IEEE floating point number) |
1166 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1167 7 | Minimum Policed Unit [m] (32-bit integer) |
1168 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1169 8 | Maximum Packet Size [M] (32-bit integer) |
1170 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1172 (a) - Message format version number (0)
1173 (b) - Overall length (7 words not including header)
1174 (c) - Service header, service number 5 (Controlled-Load)
1175 (d) - Length of controlled-load data, 6 words not including
1176 per-service header
1177 (e) - Parameter ID, parameter 127 (Token Bucket TSpec)
1178 (f) - Parameter 127 flags (none set)
1179 (g) - Parameter 127 length, 5 words not including per-service
1180 header
1182 In this object, the TSpec parameters [r], [b], and [p] are set to
1183 reflect the traffic parameters of the receiver's desired reservation
1184 (the Reservation TSpec). The meaning of these fields is discussed
1185 fully in [RFC 2211]. Note that it is unlikely to make sense for the
1186 [p] term to be smaller than the [r] term.
1188 The maximum packet size parameter [M] should be set to the value of
1189 the smallest path MTU, which the receiver learns from information in
1190 arriving RSVP ADSPEC objects. Alternatively, if the receiving
1191 application has built-in knowledge of the maximum packet size in use
1192 within the RSVP session, and this value is smaller than the smallest
1193 path MTU, [M] may be set to this value. Note that requesting a value
1194 of [M] larger than the service modules along the data path can
1195 support will cause the reservation to fail. See section 2.3.2 for
1196 further discussion of the MTU value.
1198 The value of [m] can be chosen in several ways. Recall that when a
1199 resource reservation is installed at each intermediate node, the
1200 value used for [m] is the smaller of the receiver's request and the
1201 values in each sender's SENDER_TSPEC.
1203 If the application has a fixed, known minimum packet size, than that
1204 value should be used for [m]. This is the most desirable case.
1206 For a shared reservation style, the receiver may choose between two
1207 options, or pick some intermediate point between them.
1209 - if the receiver chooses a large value for [m], then the
1210 reservation will allocate less overhead for link-level headers.
1211 However, if a new sender with a smaller SENDER_TSPEC [m] joins the
1212 session later, an already-installed reservation may fail at that
1213 time.
1215 - if the receiver chooses a value of [m] equal to the smallest
1216 value which might be used by any sender, then the reservation will
1217 be forced to allocate more overhead for link-level headers.
1218 However it will not fail later if a new sender with a smaller
1219 SENDER_TSPEC [m] joins the session.
1221 For a FF reservation style, if no application-specific value is known
1222 the receiver should simply use the value of [m] arriving in each
1223 sender's SENDER_TSPEC for its reservation request to that sender.
1225 **********************************************************************/
1226 typedef struct rsvpFlowSpecObject_s {
1227 struct rsvpObjectHeader_s hdr;
1228 } rsvpAdSpecOject_t;
1230 #define RSVP_POLICY_DATA_CLASS 14
1231 #define RSVP_POLICY_DATA_CTYPE 1
1233 /**********************************************************************
1234 POLICY_DATA Class
1236 POLICY_DATA class = 14.
1238 o Type 1 POLICY_DATA object: Class = 14, C-Type = 1
1240 The contents of this object are for further study.
1242 **********************************************************************/
1243 typedef struct rsvpPolicyDataOject_s {
1244 struct rsvpObjectHeader_s hdr;
1245 } rsvpPolicyDataOject_t;
1247 #define RSVP_RESV_CONFIRM_CLASS 15
1248 #define RSVP_RESV_CONFIRM_CTYPE_IPV4 1
1249 #define RSVP_RESV_CONFIRM_CTYPE_IPV6 2
1251 /**********************************************************************
1252 Resv_CONFIRM Class
1254 RESV_CONFIRM class = 15.
1256 o IPv4 RESV_CONFIRM object: Class = 15, C-Type = 1
1258 +-------------+-------------+-------------+-------------+
1259 | IPv4 Receiver Address (4 bytes) |
1260 +-------------+-------------+-------------+-------------+
1263 o IPv6 RESV_CONFIRM object: Class = 15, C-Type = 2
1265 +-------------+-------------+-------------+-------------+
1269 + IPv6 Receiver Address (16 bytes) +
1273 +-------------+-------------+-------------+-------------+
1274 **********************************************************************/
1276 typedef struct rsvpResvConfirmOject_s {
1277 struct rsvpObjectHeader_s hdr;
1278 union {
1279 u_int ipv4;
1280 u_char ipv6[16];
1281 } u;
1282 } rsvpResvConfirmOject_t;
1285 #define RSVP_LABEL_CLASS 16
1286 #define RSVP_LABEL_CTYPE 1
1288 /**********************************************************************
1290 LABEL class = 16, C_Type = 1
1292 0 1 2 3
1293 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
1294 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1295 | (top label) |
1296 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1298 The contents of a LABEL is a single label, encoded in 4 octets. Each
1299 generic MPLS label is an unsigned integer in the range 0 through
1300 1048575. Generic MPLS labels and FR labels are encoded right aligned
1301 in 4 octets. ATM labels are encoded with the VPI right justified in
1302 bits 0-15 and the VCI right justified in bits 16-31.
1304 **********************************************************************/
1306 typedef struct rsvpLabelObject_s {
1307 struct rsvpObjectHeader_s hdr;
1308 u_int label;
1309 } rsvpLabelObject_t;
1311 #define RSVP_LABEL_REQUEST_CLASS 19
1312 #define RSVP_LABEL_REQUEST_CTYPE_GENERIC 1
1313 #define RSVP_LABEL_REQUEST_CTYPE_ATM 2
1314 #define RSVP_LABEL_REQUEST_CTYPE_FR 3
1316 /**********************************************************************
1318 Label Request without Label Range Class = 19, C_Type = 1
1320 0 1 2 3
1321 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
1322 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1323 | Reserved | L3PID |
1324 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1326 Reserved
1328 This field is reserved. It MUST be set to zero on transmission
1329 and MUST be ignored on receipt.
1331 L3PID
1333 an identifier of the layer 3 protocol using this path.
1334 Standard Ethertype values are used.
1337 Label Request with ATM Label Range Class = 19, C_Type = 2
1339 0 1 2 3
1340 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
1341 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1342 | Reserved | L3PID |
1343 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1344 |M| Res | Minimum VPI | Minimum VCI |
1345 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1346 | Res | Maximum VPI | Maximum VCI |
1347 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1349 Reserved (Res)
1351 This field is reserved. It MUST be set to zero on transmission
1352 and MUST be ignored on receipt.
1354 L3PID
1356 an identifier of the layer 3 protocol using this path.
1357 Standard Ethertype values are used.
1361 Setting this bit to one indicates that the node is capable of
1362 merging in the data plane
1364 Minimum VPI (12 bits)
1366 This 12 bit field specifies the lower bound of a block of
1367 Virtual Path Identifiers that is supported on the originating
1368 switch. If the VPI is less than 12-bits it MUST be right
1369 justified in this field and preceding bits MUST be set to zero.
1371 Minimum VCI (16 bits)
1373 This 16 bit field specifies the lower bound of a block of
1374 Virtual Connection Identifiers that is supported on the
1375 originating switch. If the VCI is less than 16-bits it MUST be
1376 right justified in this field and preceding bits MUST be set to
1377 zero.
1379 Maximum VPI (12 bits)
1381 This 12 bit field specifies the upper bound of a block of
1382 Virtual Path Identifiers that is supported on the originating
1383 switch. If the VPI is less than 12-bits it MUST be right
1384 justified in this field and preceding bits MUST be set to zero.
1386 Maximum VCI (16 bits)
1388 This 16 bit field specifies the upper bound of a block of
1389 Virtual Connection Identifiers that is supported on the
1390 originating switch. If the VCI is less than 16-bits it MUST be
1391 right justified in this field and preceding bits MUST be set to
1392 zero.
1395 Label Request with Frame Relay Label Range Class = 19, C_Type = 3
1397 0 1 2 3
1398 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
1399 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1400 | Reserved | L3PID |
1401 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1402 | Reserved |DLI| Minimum DLCI |
1403 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1404 | Reserved | Maximum DLCI |
1405 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1407 Reserved
1409 This field is reserved. It MUST be set to zero on transmission
1410 and ignored on receipt.
1412 L3PID
1414 an identifier of the layer 3 protocol using this path.
1415 Standard Ethertype values are used.
1419 DLCI Length Indicator. The number of bits in the DLCI. The
1420 following values are supported:
1422 Len DLCI bits
1424 0 10
1425 2 23
1427 Minimum DLCI
1429 This 23-bit field specifies the lower bound of a block of Data
1430 Link Connection Identifiers (DLCIs) that is supported on the
1431 originating switch. The DLCI MUST be right justified in this
1432 field and unused bits MUST be set to 0.
1434 Maximum DLCI
1436 This 23-bit field specifies the upper bound of a block of Data
1437 Link Connection Identifiers (DLCIs) that is supported on the
1438 originating switch. The DLCI MUST be right justified in this
1439 field and unused bits MUST be set to 0.
1440 **********************************************************************/
1442 #define RSVP_LABELREQ_GENERIC_SIZE 4
1444 typedef struct rsvpLabelReqGeneric_s {
1445 u_short reserved;
1446 u_short l3pid;
1447 } rsvpLabelReqGeneric_t;
1449 #define RSVP_LABELREQ_ATM_SIZE 12
1451 typedef struct rsvpLabelReqAtmMinFlag_s {
1452 BITFIELDS_ASCENDING_3(u_short M:1,
1453 u_short reserved:3,
1454 u_short vpi:12);
1455 } rsvpLabelReqAtmMinFlag_t;
1457 typedef struct rsvpLabelReqAtmMaxFlag_s {
1458 BITFIELDS_ASCENDING_2(u_short reserved:4,
1459 u_short vpi:12);
1460 } rsvpLabelReqAtmMaxFlag_t;
1462 typedef struct rsvpLabelReqAtm_s {
1463 u_short reserved;
1464 u_short l3pid;
1466 union {
1467 struct rsvpLabelReqAtmMinFlag_s flags;
1468 u_short mark;
1469 } minFlags;
1470 u_short minVci;
1472 union {
1473 struct rsvpLabelReqAtmMaxFlag_s flags;
1474 u_short mark;
1475 } maxFlags;
1476 u_short maxVci;
1477 } rsvpLabelRequestAtm_t;
1479 #define RSVP_LABELREQ_FR_SIZE 12
1481 #define RSVP_LABEL_REQUEST_FR_LEN_10 0
1482 #define RSVP_LABEL_REQUEST_FR_LEN_23 2
1484 typedef struct rsvpLabelReqFrMinFlag_s {
1485 BITFIELDS_ASCENDING_3(u_int reserved:6,
1486 u_int dli:2,
1487 u_int min:12);
1488 } rsvpLabelReqFrMinFlag_t;
1490 typedef struct rsvpLabelReqFrMaxFlag_s {
1491 BITFIELDS_ASCENDING_2(u_int reserved:8,
1492 u_int max:24);
1493 } rsvpLabelReqFrMaxFlag_t;
1495 typedef struct rsvpLabelReqFr_s {
1496 u_short reserved;
1497 u_short l3pid;
1498 union {
1499 struct rsvpLabelReqFrMinFlag_s flags;
1500 u_int mark;
1501 } minFlags;
1502 union {
1503 struct rsvpLabelReqFrMaxFlag_s flags;
1504 u_int mark;
1505 } maxFlags;
1506 } rsvpLabelRequestFr_t;
1508 typedef struct rsvpLabelRequestObject_s {
1509 struct rsvpObjectHeader_s hdr;
1510 union {
1511 struct rsvpLabelReqGeneric_s generic;
1512 struct rsvpLabelReqAtm_s atm;
1513 struct rsvpLabelReqFr_s fr;
1514 } u;
1515 } rsvpLabelRequestObject_t;
1518 #define RSVP_EXPLICIT_ROUTE_CLASS 20
1519 #define RSVP_EXPLICIT_ROUTE_CTYPE 1
1521 #define RSVP_ERO_TYPE_IPV4 1
1522 #define RSVP_ERO_TYPE_IPV6 2
1523 #define RSVP_ERO_TYPE_ASN 32
1525 #define RSVP_MAX_ERO 16
1527 /**********************************************************************
1528 Explicit Route Object Class = 20, C_Type = 1
1530 Explicit routes are specified via the EXPLICIT_ROUTE object (ERO).
1531 The Explicit Route Class is 20. Currently one C_Type is defined,
1532 Type 1 Explicit Route. The EXPLICIT_ROUTE object has the following
1533 format:
1536 0 1 2 3
1537 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
1538 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1540 // (Subobjects) //
1542 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1544 The contents of an EXPLICIT_ROUTE object are a series of variable-
1545 length data items called subobjects. The subobjects are defined in
1546 section 4.3.3 below.
1548 If a Path message contains multiple EXPLICIT_ROUTE objects, only the
1549 first object is meaningful. Subsequent EXPLICIT_ROUTE objects MAY be
1550 ignored and SHOULD NOT be propagated.
1552 Subobjects
1554 The contents of an EXPLICIT_ROUTE object are a series of variable-
1555 length data items called subobjects. Each subobject has the form:
1558 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
1559 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-------------//----------------+
1560 |L| Type | Length | (Subobject contents) |
1561 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-------------//----------------+
1565 The L bit is an attribute of the subobject. The L bit is set
1566 if the subobject represents a loose hop in the explicit route.
1567 If the bit is not set, the subobject represents a strict hop in
1568 the explicit route.
1570 Type
1572 The Type indicates the type of contents of the subobject.
1573 Currently defined values are:
1575 1 IPv4 prefix
1576 2 IPv6 prefix
1577 32 Autonomous system number
1579 Length
1581 The Length contains the total length of the subobject in bytes,
1582 including the L, Type and Length fields. The Length MUST be at
1583 least 4, and MUST be a multiple of 4
1585 Subobject 1: IPv4 prefix
1587 0 1 2 3
1588 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
1589 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1590 |L| Type | Length | IPv4 address (4 bytes) |
1591 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1592 | IPv4 address (continued) | Prefix Length | Resvd |
1593 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1597 The L bit is an attribute of the subobject. The L bit is set
1598 if the subobject represents a loose hop in the explicit route.
1599 If the bit is not set, the subobject represents a strict hop in
1600 the explicit route.
1602 Type
1604 0x01 IPv4 address
1606 Length
1608 The Length contains the total length of the subobject in bytes,
1609 including the Type and Length fields. The Length is always 8.
1611 IPv4 address
1613 An IPv4 address. This address is treated as a prefix based on
1614 the prefix length value below. Bits beyond the prefix are
1615 ignored on receipt and SHOULD be set to zero on transmission.
1617 Prefix length
1619 Length in bits of the IPv4 prefix
1621 Padding
1623 Zero on transmission. Ignored on receipt.
1625 The contents of an IPv4 prefix subobject are a 4-octet IPv4 address,
1626 a 1-octet prefix length, and a 1-octet pad. The abstract node
1627 represented by this subobject is the set of nodes that have an IP
1628 address which lies within this prefix. Note that a prefix length of
1629 32 indicates a single IPv4 node.
1631 Subobject 2: IPv6 Prefix
1633 0 1 2 3
1634 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
1635 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1636 |L| Type | Length | IPv6 address (16 bytes) |
1637 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1638 | IPv6 address (continued) |
1639 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1640 | IPv6 address (continued) |
1641 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1642 | IPv6 address (continued) |
1643 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1644 | IPv6 address (continued) | Prefix Length | Resvd |
1645 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1649 The L bit is an attribute of the subobject. The L bit is set
1650 if the subobject represents a loose hop in the explicit route.
1651 If the bit is not set, the subobject represents a strict hop in
1652 the explicit route.
1654 Type
1656 0x02 IPv6 address
1658 Length
1660 The Length contains the total length of the subobject in bytes,
1661 including the Type and Length fields. The Length is always 20.
1663 IPv6 address
1665 An IPv6 address. This address is treated as a prefix based on
1666 the prefix length value below. Bits beyond the prefix are
1667 ignored on receipt and SHOULD be set to zero on transmission.
1669 Prefix Length
1671 Length in bits of the IPv6 prefix.
1673 Padding
1675 Zero on transmission. Ignored on receipt.
1677 The contents of an IPv6 prefix subobject are a 16-octet IPv6 address,
1678 a 1-octet prefix length, and a 1-octet pad. The abstract node
1679 represented by this subobject is the set of nodes that have an IP
1680 address which lies within this prefix. Note that a prefix length of
1681 128 indicates a single IPv6 node.
1683 Subobject 32: Autonomous System Number
1685 The contents of an Autonomous System (AS) number subobject are a 2-
1686 octet AS number. The abstract node represented by this subobject is
1687 the set of nodes belonging to the autonomous system.
1689 The length of the AS number subobject is 4 octets.
1690 **********************************************************************/
1692 typedef struct rsvpExplicitRouteFlag_s {
1693 BITFIELDS_ASCENDING_3(u_short L:1,
1694 u_short type:3,
1695 u_short len:4);
1696 } rsvpExplicitRouteFlag_t;
1698 #define RSVP_ER4_SIZE 8
1700 typedef struct rsvpExplicitRoute4_s {
1701 union {
1702 struct rsvpExplicitRouteFlag_s flags;
1703 u_short mark;
1704 } flags;
1705 u_char address[RSVP_IPV4_ADDR_LEN];
1706 u_char prefixLen;
1707 u_char reserved;
1709 /* used only for easy access to contents of 'address' */
1710 u_int uIntAddress;
1711 } rsvpExplicitRoute4_t;
1713 #define RSVP_ER6_SIZE 8
1715 typedef struct rsvpExplicitRoute6_s {
1716 union {
1717 struct rsvpExplicitRouteFlag_s flags;
1718 u_short mark;
1719 } flags;
1720 u_char address[RSVP_IPV6_ADDR_LEN];
1721 u_char prefixLen;
1722 u_char reserved;
1723 } rsvpExplicitRoute6_s;
1725 #define RSVP_ERASN_SIZE 4
1727 typedef struct rsvpExplicitRouteAsn_s {
1728 union {
1729 struct rsvpExplicitRouteFlag_s flags;
1730 u_short mark;
1731 } flags;
1732 u_short asn;
1733 } rsvpExplicitRouteAsn_t;
1735 typedef struct rsvpExplicitRouteObject_s {
1736 struct rsvpObjectHeader_s hdr;
1737 union {
1738 struct rsvpExplicitRoute4_s ipv4;
1739 struct rsvpExplicitRoute6_s ipv6;
1740 struct rsvpExplicitRouteAsn_s asn;
1741 } ero[RSVP_MAX_ERO];
1742 int eroType[RSVP_MAX_ERO];
1743 int eroLength;
1744 } rsvpExplicitRouteObject_t;
1746 #define RSVP_RECORD_ROUTE_CLASS 21
1747 #define RSVP_RECORD_ROUTE_CTYPE 1
1749 #define RSVP_RECORD_ROUTE_TYPE_IPV4 1
1750 #define RSVP_RECORD_ROUTE_TYPE_IPV6 2
1751 #define RSVP_RECORD_ROUTE_TYPE_LABEL 3
1753 #define RSVP_RECORD_ROUTE_FLAG_LOCOL_PROT_AVAIL 0x1
1754 #define RSVP_RECORD_ROUTE_FLAG_LOCOL_PROT_INUSE 0x2
1756 #define RSVP_RECORD_ROUTE4_SIZE 8
1757 #define RSVP_RECORD_ROUTE6_SIZE 20
1758 #define RSVP_RECORD_ROUTE_LABEL_SIZE 20
1760 #define RSVP_MAX_RR 16
1762 /**********************************************************************
1764 Record Route Object Class = 21, C_Type = 1
1766 Routes can be recorded via the RECORD_ROUTE object (RRO).
1767 Optionally, labels may also be recorded. The Record Route Class is
1768 21. Currently one C_Type is defined, Type 1 Record Route. The
1769 RECORD_ROUTE object has the following format:
1772 0 1 2 3
1773 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
1774 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1776 // (Subobjects) //
1778 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1780 Subobjects
1782 The contents of a RECORD_ROUTE object are a series of
1783 variable-length data items called subobjects. The subobjects
1784 are defined in section 4.4.1 below.
1786 The RRO can be present in both RSVP Path and Resv messages. If a
1787 Path message contains multiple RROs, only the first RRO is
1788 meaningful. Subsequent RROs SHOULD be ignored and SHOULD NOT be
1789 propagated. Similarly, if in a Resv message multiple RROs are
1790 encountered following a FILTER_SPEC before another FILTER_SPEC is
1791 encountered, only the first RRO is meaningful. Subsequent RROs
1792 SHOULD be ignored and SHOULD NOT be propagated.
1796 Subobject 1: IPv4 address
1798 0 1 2 3
1799 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
1800 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1801 | Type | Length | IPv4 address (4 bytes) |
1802 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1803 | IPv4 address (continued) | Prefix Length | Flags |
1804 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1806 Type
1808 0x01 IPv4 address
1810 Length
1812 The Length contains the total length of the subobject in bytes,
1813 including the Type and Length fields. The Length is always 8.
1815 IPv4 address
1817 A 32-bit unicast, host address. Any network-reachable
1818 interface address is allowed here. Illegal addresses, such as
1819 certain loopback addresses, SHOULD NOT be used.
1821 Prefix length
1825 Flags
1827 0x01 Local protection available
1829 Indicates that the link downstream of this node is
1830 protected via a local repair mechanism. This flag can
1831 only be set if the Local protection flag was set in the
1832 SESSION_ATTRIBUTE object of the corresponding Path
1833 message.
1835 0x02 Local protection in use
1837 Indicates that a local repair mechanism is in use to
1838 maintain this tunnel (usually in the face of an outage
1839 of the link it was previously routed over).
1842 Subobject 2: IPv6 address
1844 0 1 2 3
1845 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
1846 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1847 | Type | Length | IPv6 address (16 bytes) |
1848 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1849 | IPv6 address (continued) |
1850 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1851 | IPv6 address (continued) |
1852 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1853 | IPv6 address (continued) |
1854 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1855 | IPv6 address (continued) | Prefix Length | Flags |
1856 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1858 Type
1860 0x02 IPv6 address
1862 Length
1864 The Length contains the total length of the subobject in bytes,
1865 including the Type and Length fields. The Length is always 20.
1867 IPv6 address
1869 A 128-bit unicast host address.
1871 Prefix length
1875 Flags
1877 0x01 Local protection available
1879 Indicates that the link downstream of this node is
1880 protected via a local repair mechanism. This flag can
1881 only be set if the Local protection flag was set in the
1882 SESSION_ATTRIBUTE object of the corresponding Path
1883 message.
1886 0x02 Local protection in use
1888 Indicates that a local repair mechanism is in use to
1889 maintain this tunnel (usually in the face of an outage
1890 of the link it was previously routed over).
1892 Subobject 3, Label
1894 0 1 2 3
1895 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
1896 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1897 | Type | Length | Flags | C-Type |
1898 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1899 | Contents of Label Object |
1900 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1902 Type
1904 0x03 Label
1906 Length
1908 The Length contains the total length of the subobject in bytes,
1909 including the Type and Length fields.
1911 Flags
1913 0x01 = Global label
1914 This flag indicates that the label will be understood
1915 if received on any interface.
1917 C-Type
1919 The C-Type of the included Label Object. Copied from the Label
1920 Object.
1922 Contents of Label Object
1924 The contents of the Label Object. Copied from the Label Object
1925 **********************************************************************/
1927 typedef struct rsvpRecordRoute4_s {
1928 u_char type;
1929 u_char length;
1930 u_short addressMsb;
1931 u_short addressLsb;
1932 u_char prefixLen;
1933 u_char flags;
1934 } rsvpRecordRoute4_t;
1936 typedef struct rsvpRecordRoute6_s {
1937 u_char type;
1938 u_char length;
1939 u_short addressMsb;
1940 u_char addressMid[12];
1941 u_short addressLsb;
1942 u_char prefixLen;
1943 u_char flags;
1944 } rsvpRecordRoute6_t;
1946 typedef struct rsvpRecordRouteLabel_s {
1947 u_char type;
1948 u_char length;
1949 u_char flags;
1950 u_char cType;
1951 struct rsvpLabelObject_s label;
1952 } rsvpRecordRouteLabel_t;
1954 typedef struct rsvpRecordRouteObject_s {
1955 struct rsvpObjectHeader_s hdr;
1956 union {
1957 struct rsvpRecordRoute4_s ipv4;
1958 struct rsvpRecordRoute6_s ipv6;
1959 struct rsvpRecordRouteLabel_s label;
1960 } rr[RSVP_MAX_RR];
1961 int rrType[RSVP_MAX_RR];
1962 int rrLen;
1963 } rsvpRecordRouteObject_t;
1969 #define RSVP_SESSION_ATTRIB_CLASS 207
1970 #define RSVP_SESSION_ATTRIB_CTYPE_LSP_TUNNEL 7
1971 #define RSVP_SESSION_ATTRIB_CLASS_LSP_TUNNEL_RA 1
1973 #define RSVP_MAX_SESSION_NAME 64
1975 #define RSVP_SESSION_ATTRIB_FLAGS_LOCAL_PROTECT 0x1
1976 #define RSVP_SESSION_ATTRIB_FLAGS_LABEL_RECORD 0x2
1977 #define RSVP_SESSION_ATTRIB_FLAGS_SE_STYLE 0x4
1979 #define RSVP_SESSION_ATTRIB_LSP_TUNNEL_BASE_SIZE 4
1980 #define RSVP_SESSION_ATTRIB_LSP_TUNNEL_RA_BASE_SIZE 16
1982 /**********************************************************************
1984 Session Attribute Object
1986 The Session Attribute Class is 207. Two C_Types are defined,
1987 LSP_TUNNEL, C-Type = 7 and LSP_TUNNEL_RA, C-Type = 1. The
1988 LSP_TUNNEL_RA C-Type includes all the same fields as the LSP_TUNNEL
1989 C-Type. Additionally it carries resource affinity information. The
1990 formats are as follows:
1992 Format without resource affinities
1994 SESSION_ATTRIBUTE class = 207, LSP_TUNNEL C-Type = 7
1996 0 1 2 3
1997 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
1998 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1999 | Setup Prio | Holding Prio | Flags | Name Length |
2000 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2002 // Session Name (NULL padded display string) //
2004 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2006 Setup Priority
2008 The priority of the session with respect to taking resources,
2009 in the range of 0 to 7. The value 0 is the highest priority.
2010 The Setup Priority is used in deciding whether this session can
2011 preempt another session.
2013 Holding Priority
2015 The priority of the session with respect to holding resources,
2016 in the range of 0 to 7. The value 0 is the highest priority.
2017 Holding Priority is used in deciding whether this session can
2018 be preempted by another session.
2020 Flags
2022 0x01 Local protection desired
2024 This flag permits transit routers to use a local repair
2025 mechanism which may result in violation of the explicit
2026 route object. When a fault is detected on an adjacent
2027 downstream link or node, a transit router can reroute
2028 traffic for fast service restoration.
2030 0x02 Label recording desired
2032 This flag indicates that label information should be
2033 included when doing a route record.
2035 0x04 SE Style desired
2037 This flag indicates that the tunnel ingress node may
2038 choose to reroute this tunnel without tearing it down.
2039 A tunnel egress node SHOULD use the SE Style when
2040 responding with a Resv message.
2042 Name Length
2044 The length of the display string before padding, in bytes.
2046 Session Name
2048 A null padded string of characters.
2051 Format with resource affinities
2053 SESSION_ATTRIBUTE class = 207, LSP_TUNNEL_RA C-Type = 1
2055 0 1 2 3
2056 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
2057 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2058 | Exclude-any |
2059 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2060 | Include-any |
2061 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2062 | Include-all |
2063 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2064 | Setup Prio | Holding Prio | Flags | Name Length |
2065 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2067 // Session Name (NULL padded display string) //
2069 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2071 Exclude-any
2073 A 32-bit vector representing a set of attribute filters
2074 associated with a tunnel any of which renders a link
2075 unacceptable.
2077 Include-any
2079 A 32-bit vector representing a set of attribute filters
2080 associated with a tunnel any of which renders a link acceptable
2081 (with respect to this test). A null set (all bits set to zero)
2082 automatically passes.
2084 Include-all
2086 A 32-bit vector representing a set of attribute filters
2087 associated with a tunnel all of which must be present for a
2088 link to be acceptable (with respect to this test). A null set
2089 (all bits set to zero) automatically passes.
2091 Setup Priority
2093 The priority of the session with respect to taking resources,
2094 in the range of 0 to 7. The value 0 is the highest priority.
2095 The Setup Priority is used in deciding whether this session can
2096 preempt another session.
2098 Holding Priority
2100 The priority of the session with respect to holding resources,
2101 in the range of 0 to 7. The value 0 is the highest priority.
2102 Holding Priority is used in deciding whether this session can
2103 be preempted by another session.
2105 Flags
2107 0x01 Local protection desired
2109 This flag permits transit routers to use a local repair
2110 mechanism which may result in violation of the explicit
2111 route object. When a fault is detected on an adjacent
2112 downstream link or node, a transit router can reroute
2113 traffic for fast service restoration.
2115 0x02 Label recording desired
2117 This flag indicates that label information should be
2118 included when doing a route record.
2120 0x04 SE Style desired
2122 This flag indicates that the tunnel ingress node may
2123 choose to reroute this tunnel without tearing it down.
2124 A tunnel egress node SHOULD use the SE Style when
2125 responding with a Resv message.
2127 Name Length
2129 The length of the display string before padding, in bytes.
2131 Session Name
2133 A null padded string of characters.
2134 **********************************************************************/
2136 typedef struct rsvpSessionAttribLspTunnel_s {
2137 u_char setupPrio;
2138 u_char holdPrio;
2139 u_char flags;
2140 u_char nameLen;
2141 u_char name[RSVP_MAX_SESSION_NAME];
2142 } rsvpSessionAttribLspTunnel_t;
2144 typedef struct rsvpSessionAttribLspTunnelRa_s {
2145 u_int excludeAny;
2146 u_int includeAny;
2147 u_int includeAll;
2148 u_char setupPrio;
2149 u_char holdPrio;
2150 u_char flags;
2151 u_char nameLen;
2152 u_char name[RSVP_MAX_SESSION_NAME];
2153 } rsvpSessionAttribLspTunnelRa_t;
2155 typedef struct rsvpSessionAttibObject_s {
2156 struct rsvpObjectHeader_s hdr;
2157 union {
2158 struct rsvpSessionAttribLspTunnel_s tunnel;
2159 struct rsvpSessionAttribLspTunnelRa_s tunnelRa;
2160 } u;
2161 } rsvpSessionAttibObject_t;
2163 /**********************************************************************
2165 HELLO REQUEST object
2167 Class = HELLO Class, C_Type = 1
2169 0 1 2 3
2170 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
2171 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2172 | Src_Instance |
2173 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2174 | Dst_Instance |
2175 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2177 HELLO ACK object
2179 Class = HELLO Class, C_Type = 2
2181 0 1 2 3
2182 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
2183 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2184 | Src_Instance |
2185 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2186 | Dst_Instance |
2187 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2189 Src_Instance: 32 bits
2191 a 32 bit value that represents the sender's instance. The
2192 advertiser maintains a per neighbor representation/value. This
2193 value MUST change when the sender is reset, when the node reboots,
2194 or when communication is lost to the neighboring node and
2195 otherwise remains the same. This field MUST NOT be set to zero
2196 (0).
2198 Dst_Instance: 32 bits
2200 The most recently received Src_Instance value received from the
2201 neighbor. This field MUST be set to zero (0) when no value has
2202 ever been seen from the neighbor.
2204 **********************************************************************/
2206 typedef struct rsvpHelloObject_s {
2207 struct rsvpObjectHeader_s hdr;
2208 u_int src;
2209 u_int dst;
2210 } rsvpHelloObject_t;
2212 /**********************************************************************
2213 RSVP Header
2215 0 1 2 3
2216 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
2217 +---------------+---------------+---------------+---------------+
2218 | Vers | Flags | Msg Type | RSVP Checksum |
2219 +---------------+---------------+---------------+---------------+
2220 | Send_TTL | (Reserved) | RSVP Length |
2221 +---------------+---------------+---------------+---------------+
2224 The fields in the common header are as follows:
2226 Vers: 4 bits
2228 Protocol version number. This is version 1.
2230 Flags: 4 bits
2232 0x01-0x08: Reserved
2234 No flag bits are defined yet.
2236 Msg Type: 8 bits
2238 1 = Path
2240 2 = Resv
2242 3 = PathErr
2244 4 = ResvErr
2246 5 = PathTear
2248 6 = ResvTear
2250 7 = ResvConf
2252 RSVP Checksum: 16 bits
2254 The one's complement of the one's complement sum of the
2255 message, with the checksum field replaced by zero for the
2256 purpose of computing the checksum. An all-zero value
2257 means that no checksum was transmitted.
2259 Send_TTL: 8 bits
2261 The IP TTL value with which the message was sent. See
2262 Section 3.8.
2264 RSVP Length: 16 bits
2266 The total length of this RSVP message in bytes, including
2267 the common header and the variable-length objects that
2268 follow.
2271 **********************************************************************/
2273 typedef struct rsvpHeaderFlag_s {
2274 BITFIELDS_ASCENDING_2(u_char version:4,
2275 u_char flags:4);
2276 } rsvpHeaderFlag_s;
2278 #define RSVP_HDRSIZE 8
2279 #define RSVP_PDUMAXLEN 4096
2281 typedef struct rsvpHeader_s {
2282 union {
2283 u_char mark;
2284 struct rsvpHeaderFlag_s flag;
2285 } flag;
2286 u_char messageType;
2287 u_short checksum;
2288 u_char ttl;
2289 u_char resserved;
2290 u_short length;
2291 } rsvpHeader_t;
2293 /**********************************************************************
2295 The format of a Path message is as follows:
2297 <Path Message> ::= <Common Header> [ <INTEGRITY> ]
2298 <SESSION> <RSVP_HOP> <TIME_VALUES>
2299 [ <EXPLICIT_ROUTE> ] <LABEL_REQUEST>
2300 [ <SESSION_ATTRIBUTE> ]
2301 [ <POLICY_DATA> ... ]
2302 <sender descriptor>
2304 <sender descriptor> ::= <SENDER_TEMPLATE> <SENDER_TSPEC>
2305 [ <ADSPEC> ] [ <RECORD_ROUTE> ]
2307 **********************************************************************/
2309 #define RSVP_PATH_MSG 1
2311 typedef struct rsvpPathMsg_s {
2312 struct rsvpHeader_s header;
2313 struct rsvpSessionObject_s session;
2314 struct rsvpHopObject_s hop;
2315 struct rsvpTimeObject_s time;
2316 struct rsvpExplicitRouteObject_s ero;
2317 struct rsvpLabelRequestObject_s labelRequest;
2318 struct rsvpSessionAttibObject_s sessionAttrib;
2319 struct rsvpPolicyDataOject_s policyData;
2320 struct rsvpSenderTemplateObject_s senderTemplate;
2321 struct rsvpSenderTSpecOject_s senderTSpec;
2322 struct rsvpAdSpecOject_s adSpec;
2323 struct rsvpRecordRouteObject_s recordRoute;
2325 u_short sessionExists:1;
2326 u_short hopExists:1;
2327 u_short timeExists:1;
2328 u_short eroExists:1;
2329 u_short labelRequestExists:1;
2330 u_short sessionAttribExists:1;
2331 u_short policyDataExists:1;
2332 u_short senderTemplateExists:1;
2333 u_short senderTSpecExists:1;
2334 u_short adSpecExists:1;
2335 u_short recordRouteExists:1;
2337 } rsvpPathMsg_t;
2339 /**********************************************************************
2340 The Resv message format is as follows:
2342 <Resv Message> ::= <Common Header> [ <INTEGRITY> ]
2343 <SESSION> <RSVP_HOP> <TIME_VALUES>
2344 [ <RESV_CONFIRM> ] [ <SCOPE> ]
2345 [ <POLICY_DATA> ... ]
2346 <STYLE> <flow descriptor list>
2348 <flow descriptor list> ::= <FF flow descriptor list> | <SE flow descriptor>
2350 <FF flow descriptor list> ::= <FLOWSPEC> <FILTER_SPEC> <LABEL>
2351 [ <RECORD_ROUTE> ] | <FF flow descriptor list>
2352 <FF flow descriptor>
2354 <FF flow descriptor> ::= [ <FLOWSPEC> ] <FILTER_SPEC> <LABEL>
2355 [ <RECORD_ROUTE> ]
2357 <SE flow descriptor> ::= <FLOWSPEC> <SE filter spec list>
2359 <SE filter spec list> ::= <SE filter spec> |
2360 <SE filter spec list> <SE filter spec>
2362 <SE filter spec> ::= <FILTER_SPEC> <LABEL> [ <RECORD_ROUTE> ]
2364 Note: LABEL and RECORD_ROUTE (if present), are bound to the
2365 preceding FILTER_SPEC. No more than one LABEL and/or
2366 RECORD_ROUTE may follow each FILTER_SPEC.
2368 **********************************************************************/
2370 #define RSVP_REV_MSG 2
2372 typedef struct rsvpResvMsg_s {
2373 struct rsvpHeader_s header;
2374 struct rsvpSessionObject_s session;
2375 struct rsvpHopObject_s hop;
2376 struct rsvpTimeObject_s time;
2377 // struct rsvpResvConfirm_s resvConfirm;
2378 // struct rsvpScopeObject_s scope;
2379 struct rsvpPolicyDataOject_s policyData;
2380 struct rsvpStyleObject_s style;
2382 union {
2383 struct {
2384 struct {
2385 // struct rsvpFlowSpecObject_s flowSpec;
2386 // struct rsvpFilterSpecOject_s filterSpec;
2387 struct rsvpLabelObject_s label;
2388 struct rsvpRecordRouteObject_s recordRoute;
2389 u_char flowSpecExists:1;
2390 u_char filterSpecExists:1;
2391 u_char labelExists:1;
2392 u_char recordRouteExits:1;
2393 } ffEntry[16];
2394 u_char numberFfEntry;
2395 } ff;
2396 struct {
2397 // struct rsvpFlowSpecObject_s flowSpec;
2398 struct {
2399 // struct rsvpFilterSpecOject_s filterSpec;
2400 struct rsvpLabelObject_s label;
2401 struct rsvpRecordRouteObject_s recordRoute;
2402 u_char filterSpecExists:1;
2403 u_char labelExists:1;
2404 u_char recordRouteExits:1;
2405 } seEntry[16];
2406 u_char numberSeEntry;
2407 } se;
2408 } flowDescr;
2410 u_short sessionExists:1;
2411 u_short hopExists:1;
2412 u_short timeExists:1;
2413 u_short eroExists:1;
2414 u_short resvConfirmExists:1;
2415 u_short scopeExists:1;
2416 u_short policyDataExists:1;
2417 u_short flowDescrExists:1;
2418 u_short senderTSpecExists:1;
2419 u_short adSpecExists:1;
2420 u_short recordRouteExists:1;
2422 } rsvpResvMsg_t;
2423 /**********************************************************************
2424 The Path Tear message format is as follows:
2426 <PathTear Message> ::= <Common Header> [ <INTEGRITY> ]
2427 <SESSION> <RSVP_HOP>
2428 [ <sender descriptor> ]
2430 <sender descriptor> ::= (see earlier definition)
2433 **********************************************************************/
2434 /**********************************************************************
2435 The Resv Tear message format is as follows:
2437 <ResvTear Message> ::= <Common Header> [<INTEGRITY>]
2438 <SESSION> <RSVP_HOP> [ <SCOPE> ] <STYLE>
2439 <flow descriptor list>
2441 <flow descriptor list> ::= (see earlier definition)
2443 **********************************************************************/
2445 /**********************************************************************
2447 The Path Error message format is as follows:
2449 <PathErr message> ::= <Common Header> [ <INTEGRITY> ]
2450 <SESSION> <ERROR_SPEC> [ <POLICY_DATA> ...]
2451 [ <sender descriptor> ]
2453 <sender descriptor> ::= (see earlier definition)
2455 **********************************************************************/
2456 /**********************************************************************
2458 The Resv Error message format is as follows:
2460 <ResvErr Message> ::= <Common Header> [ <INTEGRITY> ]
2461 <SESSION> <RSVP_HOP> <ERROR_SPEC> [ <SCOPE> ]
2462 [ <POLICY_DATA> ...] <STYLE>
2463 [ <error flow descriptor> ]
2465 o FF style:
2466 <error flow descriptor> ::= <FF flow descriptor>
2468 o SE style:
2469 <error flow descriptor> ::= <SE flow descriptor>
2471 **********************************************************************/
2472 /**********************************************************************
2474 The Resv Conf message format is as follows:
2476 <ResvConf message> ::= <Common Header> [ <INTEGRITY> ]
2477 <SESSION> <ERROR_SPEC> <RESV_CONFIRM>
2478 <STYLE> <flow descriptor list>
2480 <flow descriptor list> ::= (see earlier definition)
2482 **********************************************************************/
2484 #endif /* RSVPTE_STRUCT_H */