2 * Copyright (C) James R. Leu 2003
5 * This software is covered under the LGPL, for more
6 * info check out http://www.gnu.org/copyleft/lgpl.html
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
;
38 mpls_cfg_handle lsr_handle
;
40 mpls_mpls_handle mpls_handle
;
44 typedef struct rsvpte_if
{
46 MPLS_LIST_ELEM(rsvpte_if
) _global
;
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
;
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 /**********************************************************************
66 Every object consists of one or more 32-bit words with a one-
67 word header, with the following format:
70 +-------------+-------------+-------------+-------------+
71 | Length (bytes) | Class-Num | C-Type |
72 +-------------+-------------+-------------+-------------+
74 // (Object contents) //
76 +-------------+-------------+-------------+-------------+
78 An object header has the following fields:
82 A 16-bit field containing the total object length in
83 bytes. Must always be a multiple of 4, and at least 4.
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:
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.
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
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.
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.
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.
131 Defines a desired QoS, in a Resv message.
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.
141 Contains a sender IP address and perhaps some
142 additional demultiplexing information to identify a
143 sender. Required in a Path message.
147 Defines the traffic characteristics of a sender's
148 data flow. Required in a Path message.
152 Carries OPWA data, in a Path message.
156 Specifies an error in a PathErr, ResvErr, or a
157 confirmation in a ResvConf message.
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.
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].
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.
185 Carries the IP address of a receiver that requested a
186 confirmation. May appear in a Resv or ResvConf
189 **********************************************************************/
191 #define RSVP_OBJECT_HDRSIZE 4
193 typedef struct rsvpObjectHeader_s
{
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 /**********************************************************************
209 o IPv4/UDP SESSION object: Class = 1, C-Type = 1
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
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 +---------------+---------------+---------------+---------------+
237 The IP unicast or multicast destination address of the
238 session. This field must be non-zero.
242 The IP Protocol Identifier for the data flow. This field
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.
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
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.
285 A 16-bit identifier used in the SESSION that remains constant
286 over the life of the tunnel.
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
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 |
311 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
312 | MUST be zero | Tunnel ID |
313 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
316 | Extended Tunnel ID |
321 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
323 IPv6 tunnel end point address
325 IPv6 address of the egress node for the tunnel.
329 A 16-bit identifier used in the SESSION that remains constant
330 over the life of the tunnel.
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
{
351 #define RSVP_SESSION6_SIZE 20
353 typedef struct rsvpSession6_s
{
360 #define RSVP_SESSION_TUNNEL4_SIZE 12
362 typedef struct rsvpSessionTunnel4_s
{
363 u_int endPointAddress
;
366 u_int extentedTunnelId
;
367 } rsvpSessionTunnel4_t
;
369 #define RSVP_SESSION_TUNNEL6_SIZE 36
371 typedef struct rsvpSessionTunnel6_s
{
372 u_char endPointAddress
[16];
375 u_char extentedTunnelId
[16];
376 } rsvpSessionTunnel6_t
;
378 typedef struct rsvpSessionObject_s
{
379 struct rsvpObjectHeader_s hdr
;
381 struct rsvpSession4_s ipv4
;
382 struct rsvpSession6_s ipv6
;
383 struct rsvpSessionTunnel4_s tunnel4
;
384 struct rsvpSessionTunnel6_s tunnel6
;
386 } rsvpSessionObject_t
;
388 #define RSVP_HOP_CLASS 3
389 #define RSVP_HOP_CTYPE_IPV4 1
390 #define RSVP_HOP_CTYPE_IPV6 2
392 /**********************************************************************
395 o IPv4 RSVP_HOP object: Class = 3, C-Type = 1
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
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
{
438 u_int logicalIfHandle
;
441 #define RSVP_HOP6_SIZE 20
443 typedef struct rsvpHop6_s
{
445 u_int logicalIfHandle
;
448 typedef struct rsvpHopObject_s
{
449 struct rsvpObjectHeader_s hdr
;
451 struct rsvpHop4_s ipv4
;
452 struct rsvpHop6_s ipv6
;
456 #define RSVP_TIME_CLASS 5
457 #define RSVP_TIME_CTYPE 1
459 /**********************************************************************
462 o TIME_VALUES Object: Class = 5, C-Type = 1
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 +---------------+---------------+---------------+---------------+
468 +---------------+---------------+---------------+---------------+
472 The refresh timeout period R used to generate this message;
475 **********************************************************************/
477 #define RSVP_TIME_SIZE 4
479 typedef struct rsvpTimeObject_s
{
480 struct rsvpObjectHeader_s hdr
;
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
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
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 +---------------+---------------+---------------+---------------+
520 The IP address of the node in which the error was detected.
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
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.
541 A one-octet error description.
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
{
560 typedef struct rsvpErrorSpec6_s
{
567 typedef struct rsvpErrorSpecObject_s
{
568 struct rsvpObjectHeader_s hdr
;
570 struct rsvpErrorSpec4_s ipv4
;
571 struct rsvpErrorSpec6_s ipv6
;
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
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 +-------------+-------------+-------------+-------------+
597 +-------------+-------------+-------------+-------------+
598 | IPv4 Src Address (4 bytes) |
599 +-------------+-------------+-------------+-------------+
602 o IPv6 SCOPE list object: Class = 7, C-Type = 2
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 +-------------+-------------+-------------+-------------+
616 +-------------+-------------+-------------+-------------+
620 + IPv6 Src Address (16 bytes) +
624 +-------------+-------------+-------------+-------------+
626 ***********************************************************************/
628 typedef struct rsvpScopeList4_s
{
629 u_int addr
[RSVP_MAX_SCOPE_LIST
];
632 typedef struct rsvpScopeList6_s
{
633 u_char addr
[RSVP_MAX_SCOPE_LIST
][16];
636 typedef struct rsvpScopListObject_s
{
637 struct rsvpObjectHeader_s hdr
;
639 struct rsvpScopeList4_s ipv4
;
640 struct rsvpScopeList6_s ipv6
;
642 } rsvpScopListObject_t
;
643 #define RSVP_STYLE_CLASS 8
644 #define RSVP_STYLE_CTYPE 1
646 /***********************************************************************
650 o STYLE object: Class = 8, C-Type = 1
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 +-----------------+---------------+---------------+-------------+
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
678 2 bits: Sharing control
682 01b: Distinct reservations
684 10b: Shared reservations
688 3 bits: Sender selection control
696 011b - 111b: Reserved
698 The low order bits of the option vector are determined by the
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 */
714 typedef struct rsvpStyleObject_s
{
715 struct rsvpObjectHeader_s hdr
;
718 struct rsvpStyleFlag_s flag
;
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
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
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
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 +---------------+---------------+---------------+---------------+
781 The IP source address for a sender host. Must be non-zero.
785 The UDP/TCP source port for a sender, or zero to indicate
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
{
802 typedef struct rsvpFilterSpec6_s
{
803 u_char sourceAddr
[RSVP_IPV6_ADDR_LEN
];
808 typedef struct rsvpFilterSpecFlags_s
{
809 BITFIELDS_ASCENDING_2(u_int reserved
:8,
811 } rsvpFilterSpecFlags_t
;
813 typedef struct rsvpFilterSpecFlow6_s
{
814 u_char sourceAddr
[RSVP_IPV6_ADDR_LEN
];
817 struct rsvpFilterSpecFlags_s flowLabel
;
819 } rsvpFilterSpecFlow6_t
;
821 typedef struct rsvpFilterSpecObject_s
{
822 struct rsvpObjectHeader_s hdr
;
824 struct rsvpFilterSpec4_s ipv4
;
825 struct rsvpFilterSpec6_s ipv6
;
826 struct rsvpFilterSpecFlow6_s flow
;
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
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
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
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 |
891 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
892 | MUST be zero | LSP ID |
893 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
895 IPv6 tunnel sender address
897 IPv6 address for a sender node
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
{
927 } rsvpSenderTemplateTunnel4_t
;
929 typedef struct rsvpSenderTemplateTunnel6_s
{
930 u_char sender
[RSVP_IPV6_ADDR_LEN
];
933 } rsvpSenderTemplateTunnel6_t
;
935 typedef struct rsvpSenderTemplateObject_s
{
936 struct rsvpObjectHeader_s hdr
;
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
;
944 } rsvpSenderTemplateObject_t
;
946 #define RSVP_SENDER_TSPEC_CLASS 12
947 #define RSVP_SENDER_TSPEC_CTYPE_INTSRV 2
949 /**********************************************************************
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
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
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 /**********************************************************************
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
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
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
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
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
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
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 /**********************************************************************
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 /**********************************************************************
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
;
1282 } rsvpResvConfirmOject_t
;
1285 #define RSVP_LABEL_CLASS 16
1286 #define RSVP_LABEL_CTYPE 1
1288 /**********************************************************************
1290 LABEL class = 16, C_Type = 1
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
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
;
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
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1328 This field is reserved. It MUST be set to zero on transmission
1329 and MUST be ignored on receipt.
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
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1351 This field is reserved. It MUST be set to zero on transmission
1352 and MUST be ignored on receipt.
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
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
1395 Label Request with Frame Relay Label Range Class = 19, C_Type = 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1409 This field is reserved. It MUST be set to zero on transmission
1410 and ignored on receipt.
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:
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.
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
{
1447 } rsvpLabelReqGeneric_t
;
1449 #define RSVP_LABELREQ_ATM_SIZE 12
1451 typedef struct rsvpLabelReqAtmMinFlag_s
{
1452 BITFIELDS_ASCENDING_3(u_short M
:1,
1455 } rsvpLabelReqAtmMinFlag_t
;
1457 typedef struct rsvpLabelReqAtmMaxFlag_s
{
1458 BITFIELDS_ASCENDING_2(u_short reserved
:4,
1460 } rsvpLabelReqAtmMaxFlag_t
;
1462 typedef struct rsvpLabelReqAtm_s
{
1467 struct rsvpLabelReqAtmMinFlag_s flags
;
1473 struct rsvpLabelReqAtmMaxFlag_s flags
;
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,
1488 } rsvpLabelReqFrMinFlag_t
;
1490 typedef struct rsvpLabelReqFrMaxFlag_s
{
1491 BITFIELDS_ASCENDING_2(u_int reserved
:8,
1493 } rsvpLabelReqFrMaxFlag_t
;
1495 typedef struct rsvpLabelReqFr_s
{
1499 struct rsvpLabelReqFrMinFlag_s flags
;
1503 struct rsvpLabelReqFrMaxFlag_s flags
;
1506 } rsvpLabelRequestFr_t
;
1508 typedef struct rsvpLabelRequestObject_s
{
1509 struct rsvpObjectHeader_s hdr
;
1511 struct rsvpLabelReqGeneric_s generic
;
1512 struct rsvpLabelReqAtm_s atm
;
1513 struct rsvpLabelReqFr_s fr
;
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
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
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.
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
1572 The Type indicates the type of contents of the subobject.
1573 Currently defined values are:
1577 32 Autonomous system number
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
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
1608 The Length contains the total length of the subobject in bytes,
1609 including the Type and Length fields. The Length is always 8.
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.
1619 Length in bits of the IPv4 prefix
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
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
1660 The Length contains the total length of the subobject in bytes,
1661 including the Type and Length fields. The Length is always 20.
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.
1671 Length in bits of the IPv6 prefix.
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,
1696 } rsvpExplicitRouteFlag_t
;
1698 #define RSVP_ER4_SIZE 8
1700 typedef struct rsvpExplicitRoute4_s
{
1702 struct rsvpExplicitRouteFlag_s flags
;
1705 u_char address
[RSVP_IPV4_ADDR_LEN
];
1709 /* used only for easy access to contents of 'address' */
1711 } rsvpExplicitRoute4_t
;
1713 #define RSVP_ER6_SIZE 8
1715 typedef struct rsvpExplicitRoute6_s
{
1717 struct rsvpExplicitRouteFlag_s flags
;
1720 u_char address
[RSVP_IPV6_ADDR_LEN
];
1723 } rsvpExplicitRoute6_s
;
1725 #define RSVP_ERASN_SIZE 4
1727 typedef struct rsvpExplicitRouteAsn_s
{
1729 struct rsvpExplicitRouteFlag_s flags
;
1733 } rsvpExplicitRouteAsn_t
;
1735 typedef struct rsvpExplicitRouteObject_s
{
1736 struct rsvpObjectHeader_s hdr
;
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
];
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:
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1778 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
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
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1812 The Length contains the total length of the subobject in bytes,
1813 including the Type and Length fields. The Length is always 8.
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.
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
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
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1864 The Length contains the total length of the subobject in bytes,
1865 including the Type and Length fields. The Length is always 20.
1869 A 128-bit unicast host address.
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
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).
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1908 The Length contains the total length of the subobject in bytes,
1909 including the Type and Length fields.
1914 This flag indicates that the label will be understood
1915 if received on any interface.
1919 The C-Type of the included Label Object. Copied from the Label
1922 Contents of Label Object
1924 The contents of the Label Object. Copied from the Label Object
1925 **********************************************************************/
1927 typedef struct rsvpRecordRoute4_s
{
1934 } rsvpRecordRoute4_t
;
1936 typedef struct rsvpRecordRoute6_s
{
1940 u_char addressMid
[12];
1944 } rsvpRecordRoute6_t
;
1946 typedef struct rsvpRecordRouteLabel_s
{
1951 struct rsvpLabelObject_s label
;
1952 } rsvpRecordRouteLabel_t
;
1954 typedef struct rsvpRecordRouteObject_s
{
1955 struct rsvpObjectHeader_s hdr
;
1957 struct rsvpRecordRoute4_s ipv4
;
1958 struct rsvpRecordRoute6_s ipv6
;
1959 struct rsvpRecordRouteLabel_s label
;
1961 int rrType
[RSVP_MAX_RR
];
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
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
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.
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.
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.
2044 The length of the display string before padding, in bytes.
2048 A null padded string of characters.
2051 Format with resource affinities
2053 SESSION_ATTRIBUTE class = 207, LSP_TUNNEL_RA C-Type = 1
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2059 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2061 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2063 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2064 | Setup Prio | Holding Prio | Flags | Name Length |
2065 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2067 // Session Name (NULL padded display string) //
2069 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2073 A 32-bit vector representing a set of attribute filters
2074 associated with a tunnel any of which renders a link
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.
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.
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.
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.
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.
2129 The length of the display string before padding, in bytes.
2133 A null padded string of characters.
2134 **********************************************************************/
2136 typedef struct rsvpSessionAttribLspTunnel_s
{
2141 u_char name
[RSVP_MAX_SESSION_NAME
];
2142 } rsvpSessionAttribLspTunnel_t
;
2144 typedef struct rsvpSessionAttribLspTunnelRa_s
{
2152 u_char name
[RSVP_MAX_SESSION_NAME
];
2153 } rsvpSessionAttribLspTunnelRa_t
;
2155 typedef struct rsvpSessionAttibObject_s
{
2156 struct rsvpObjectHeader_s hdr
;
2158 struct rsvpSessionAttribLspTunnel_s tunnel
;
2159 struct rsvpSessionAttribLspTunnelRa_s tunnelRa
;
2161 } rsvpSessionAttibObject_t
;
2163 /**********************************************************************
2165 HELLO REQUEST object
2167 Class = HELLO Class, C_Type = 1
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2173 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2175 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2179 Class = HELLO Class, C_Type = 2
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2185 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
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
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
;
2210 } rsvpHelloObject_t
;
2212 /**********************************************************************
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:
2228 Protocol version number. This is version 1.
2234 No flag bits are defined yet.
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.
2261 The IP TTL value with which the message was sent. See
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
2271 **********************************************************************/
2273 typedef struct rsvpHeaderFlag_s
{
2274 BITFIELDS_ASCENDING_2(u_char version
:4,
2278 #define RSVP_HDRSIZE 8
2279 #define RSVP_PDUMAXLEN 4096
2281 typedef struct rsvpHeader_s
{
2284 struct rsvpHeaderFlag_s flag
;
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> ... ]
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;
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>
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
;
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;
2394 u_char numberFfEntry
;
2397 // struct rsvpFlowSpecObject_s flowSpec;
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;
2406 u_char numberSeEntry
;
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;
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> ]
2466 <error flow descriptor> ::= <FF flow descriptor>
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 */