4 /******************************************************************************
5 * Nortel Networks Software License *
7 * READ THE TERMS OF THIS LICENSE CAREFULLY. BY USING, MODIFYING, OR *
8 * DISTRIBUTING THIS SOFTWARE AND ANY ACCOMPANYING DOCUMENTATION (COLLECTIVELY,*
9 * "SOFTWARE") YOU ARE AGREEING TO ALL OF THE TERMS OF THIS LICENSE. *
11 * 1. Nortel Telecom Limited, on behalf of itself and its subsidiaries *
12 * (collectively "Nortel Networks") grants to you a non-exclusive, perpetual, *
13 * world-wide right to use, copy, modify, and distribute the Software at no *
16 * 2. You may sublicense recipients of redistributed Software to use, *
17 * copy, modify, and distribute the Software on substantially the same terms as*
18 * this License. You may not impose any further restrictions on the *
19 * recipient's exercise of the rights in the Software granted under this *
20 * License. Software distributed to other parties must be accompanied by a *
21 * License containing a grant, disclaimer and limitation of liability *
22 * substantially in the form of 3, 4, and 5 below provided that references to *
23 * "Nortel Networks" may be changed to "Supplier". *
25 * 3. Nortel Networks reserves the right to modify and release new *
26 * versions of the Software from time to time which may include modifications *
27 * made by third parties like you. Accordingly, you agree that you shall *
28 * automatically grant a license to Nortel Networks to include, at its option, *
29 * in any new version of the Software any modifications to the Software made by*
30 * you and made available directly or indirectly to Nortel Networks. Nortel *
31 * Networks shall have the right to use, copy, modify, and distribute any such *
32 * modified Software on substantially the same terms as this License. *
34 * 4. THE SOFTWARE IS PROVIDED ON AN "AS IS" BASIS. NORTEL NETWORKS AND *
35 * ITS AGENTS AND SUPPLIERS DISCLAIM ALL REPRESENTATIONS, WARRANTIES AND *
36 * CONDITIONS RELATING TO THE SOFTWARE, INCLUDING, BUT NOT LIMITED TO, IMPLIED *
37 * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND *
38 * NON-INFRINGEMENT OF THIRD-PARTY INTELLECTUAL PROPERTY RIGHTS. NORTEL *
39 * NETWORKS AND ITS AGENTS AND SUPPLIERS DO NOT WARRANT, GUARANTEE, OR MAKE ANY*
40 * REPRESENTATIONS REGARDING THE USE, OR THE RESULTS OF THE USE, OF THE *
41 * SOFTWARE IN TERMS OR CORRECTNESS, ACCURACY, RELIABILITY, CURRENTNESS, OR *
44 * 5. NEITHER NORTEL NETWORKS NOR ANY OF ITS AGENTS OR SUPPLIERS SHALL BE *
45 * LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR EXEMPLARY *
46 * DAMAGES, OR ECONOMIC LOSSES (INCLUDING DAMAGES FOR LOSS OF BUSINESS PROFITS,*
47 * BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION AND THE LIKE), ARISING *
48 * FROM THE SOFTWARE OR THIS LICENSE AGREEMENT, EVEN IF NORTEL NETWORKS OR SUCH*
49 * AGENT OR SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES OR *
50 * LOSSES, AND WHETHER ANY SUCH DAMAGE OR LOSS ARISES OUT OF CONTRACT, TORT, OR*
53 * 6. This License shall be governed by the laws of the Province of *
55 *******************************************************************************/
57 /******************************************************************************
58 * This file contains the C implementation for encode/decode functions *
59 * for the following types of messages: notification, hello, initialization, *
60 * keepAlive, address, address Withdraw, label Mapping, label Request, label *
61 * Withdraw and label Release. There are also encode/decode methods for all *
62 * tlv types required by the previously enumerated messages. *
63 * Please remember that the pdu will always contain the header followed by 1 *
64 * or more LDP messages. The file contains functions to encode/decode the LDP *
66 * All the messages, header message and the tlvs are in conformity with the *
67 * draft-ietf-mpls-ldp-04 (May 1999) and with draft-ietf-mpls-cr-ldp-01 *
70 * Please note that the U bit in the message and the F bit in the tlv are *
71 * ignored in this version of the code. *
73 * Please note that the traffic parameters for traffic TLV have to be IEEE *
74 * single precision floating point numbers. *
76 * Please note that there might be a small chance for bit field manipulation *
77 * portability inconsistency. If such problems occure, the code requires *
78 * changes for a suitable bit-field manipulation. The code for encoding and *
79 * decoding makes the assumption that the compiler packs the bit fields in a *
80 * structure into adjacent bits of the same unit. *
82 * The usage of the encode/decode functions is described below. *
84 * The encode functions take as arguments: a pointer to the structure which *
85 * implements msg/tlv, a buffer (where the encoding is done) and the buffer *
87 * If the encode is successfull, the function returns the total encoded *
89 * If the encode fails, the function returns an error code. *
90 * The encode functions for messages and message headers do not modify the *
91 * content of the struct which is to be encoded. All the other encode *
92 * functions will change the content of the structure. The pointer which *
93 * points to the beginning of the buffer is not changed. *
95 * The decode functions take as arguments: a pointer to the structure which *
96 * is going to be populated after decoding, a pointer to a buffer and the *
98 * If the decode is successful, the function returns the total decoded length *
99 * If the decode fails, the function returns an error code. The decode *
100 * functions do not modify the pointer to the buffer which contains the data *
103 * Example on how to use the encode/decode functions for a keepAlive message: *
105 * Encode the keep alive message: *
106 * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ *
107 * u_char buffer[500]; *
109 * struct mplsLdpKeepAlMsg_s keepAliveMsg; *
110 * keepAliveMsg.baseMsg.msgType = MPLS_KEEPAL_MSGTYPE; *
111 * keepAliveMsg.baseMsg.msgLength = MPLS_MSGIDFIXLEN; *
112 * keepAliveMsg.baseMsg.msgId = 123; *
113 * bzero(buffer, 500); *
114 * returnCode = Mpls_encodeLdpKeepAliveMsg(&keepAliveMsg, *
117 * if (returnCode < 0) *
118 * check the error code *
120 * write(fd, buffer, returnCode); *
123 * Decode the keep alive meesage: *
124 * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ *
125 * u_char buffer[500]; *
127 * struct mplsLdpKeepAlMsg_s keepAliveMsg; *
128 * read(fd, buffer, length); *
129 * returnCode = Mpls_decodeLdpKeepAliveMsg(&keepAliveMsg, *
132 * if (returnCode < 0) *
133 * check the error code *
136 * printKeepAliveMsg(&keepAliveMsg); *
139 * An example on how to use the decode functions for the header and the *
140 * messages can be found in the main function. *
142 * The code was tested for big endian and little endian for sparc5, linux *
145 * In order to compile for little endian, the LITTLE_ENDIAN_BYTE_ORDER should *
148 * At the end of this file there is an examples of a hex buffers and its *
149 * corresponding values. *
153 * Version Date Authors Description *
154 * =========== ======== ========= ====================== *
155 * mpls_encdec_01.c 99/03/15 Antonela Paraschiv draft-ietf-mpls-ldp-03 and *
156 * draft-ietf-mpls-cr-ldp-01 *
158 * mpls_encdec_02.c 99/05/19 Antonela Paraschiv draft-ietf-mpls-ldp-04 and *
159 * draft-ietf-mpls-cr-ldp-01 *
161 ******************************************************************************/
163 #include "ldp_struct.h"
164 #include <sys/types.h>
168 #if (__BYTE_ORDER == __LITTLE_ENDIAN)
169 #define LITTLE_ENDIAN_BYTE_ORDER 1
172 #define MEM_COPY(X, Y, Z) memcpy(X, Y, Z)
174 /* macros to handle different byte orders (little endian or big endian) */
175 #ifdef LITTLE_ENDIAN_BYTE_ORDER
176 #define BITFIELDS_ASCENDING_2(X, Y) Y; X;
177 #define BITFIELDS_ASCENDING_3(X, Y, Z) Z; Y; X;
178 #define BITFIELDS_ASCENDING_4(X, Y, Z, W) W; Z; Y; X;
179 #define BITFIELDS_ASCENDING_7(X, Y, Z, W, U, A, B) B; A; U; W; Z; Y; X;
181 #define BITFIELDS_ASCENDING_2(X, Y) X; Y;
182 #define BITFIELDS_ASCENDING_3(X, Y, Z) X; Y; Z;
183 #define BITFIELDS_ASCENDING_4(X, Y, Z, W) X; Y; Z; W;
184 #define BITFIELDS_ASCENDING_7(X, Y, Z, W, U, A, B) X; Y; Z; W; U; A; B;
185 #endif /* LITTLE_ENDIAN_BYTE_ORDER */
187 /* macros used to decode the entire LDP; they declare local var for
188 different type of messages */
191 #define PRINT_OUT(args...)
192 #define PRINT_ERR(args...)
195 * MESSAGE TYPE CONSTANS & TLV CONSTANTS
198 #define MPLS_LDP_HDRSIZE 10 /* the size for mpls ldp hdr */
199 #define MPLS_TLVFIXLEN 4 /* type + len */
200 #define MPLS_MSGIDFIXLEN 4 /* type + len */
201 #define MPLS_LDPIDLEN 6
202 #define MPLS_PDUMAXLEN 4096 /* octets */
203 #define MPLS_VERSION 0x0001
204 #define MPLS_IPV4ADDRFAMILYN 0x0100 /* rfc 1700 (network order) */
205 #define MPLS_INIFINITE_TIMEVAL 0xfffff
207 /* for initialize message */
208 #define MPLS_INIT_MSGTYPE 0x0200 /* initialization msg */
209 #define MPLS_CSP_TLVTYPE 0x0500 /* common params for init msg */
210 #define MPLS_ASP_TLVTYPE 0x0501 /* atm session params */
211 #define MPLS_FSP_TLVTYPE 0x0502 /* frame relay session params */
212 #define MPLS_ASPFIXLEN 4 /* M + N + D + res */
213 #define MPLS_FSPFIXLEN 4 /* M + N + res */
214 #define MPLS_CSPFIXLEN 14 /* protocolV + ... + ldp ids */
215 #define MPLS_ATMLBLMAXLEN 10
216 #define MPLS_ATMLRGFIXLEN 8
217 #define MPLS_FRLRGFIXLEN 8
218 #define MPLS_ASP_NOMERGE 0
219 #define MPLS_ASP_VPMERGE 1
220 #define MPLS_ASP_VCMERGE 2
221 #define MPLS_ASP_VPVCMERGE 3
222 #define MPLS_FRLBLMAXLEN 10
223 #define MPLS_FRDLCI10BITS 0
224 #define MPLS_FRDLCI17BITS 1
225 #define MPLS_FRDLCI23BITS 2
227 /* for notification message */
228 #define MPLS_NOT_MSGTYPE 0x0001 /* notification msg */
229 #define MPLS_NOT_ST_TLVTYPE 0x0300 /* status tlv for not msg */
230 #define MPLS_NOT_ES_TLVTYPE 0x0301 /* extended status for not msg */
231 #define MPLS_NOT_RP_TLVTYPE 0x0302 /* returned PDU for not msg */
232 #define MPLS_NOT_RM_TLVTYPE 0x0303 /* returned msg for not msg */
233 #define MPLS_STATUSFIXLEN 10 /* status code + id + type */
234 #define MPLS_EXSTATUSLEN 4
235 #define MPLS_NOT_MAXSIZE MPLS_PDUMAXLEN - MPLS_TLVFIXLEN - \
238 /* for hello message */
239 #define MPLS_HELLO_MSGTYPE 0x0100 /* hello msg */
240 #define MPLS_CHP_TLVTYPE 0x0400 /* Common Hello Param Tlv */
241 #define MPLS_TRADR_TLVTYPE 0x0401 /* Transport Address Param Tlv */
242 #define MPLS_CSN_TLVTYPE 0x0402 /* Conf Seq Number Param Tlv */
243 #define MPLS_CHPFIXLEN 4
244 #define MPLS_CSNFIXLEN 4
245 #define MPLS_TRADRFIXLEN 4
247 /* for keep alive message */
248 #define MPLS_KEEPAL_MSGTYPE 0x0201 /* keep alive msg */
250 /* for address messages */
251 #define MPLS_ADDR_MSGTYPE 0x0300 /* address msg */
252 #define MPLS_ADDRWITH_MSGTYPE 0x0301 /* address withdraw msg */
253 #define MPLS_ADDRLIST_TLVTYPE 0x0101 /* addrss list tlv type */
254 #define MPLS_IPv4LEN 4
255 #define MPLS_ADDFAMFIXLEN 2
256 #define MPLS_ADDLISTMAXLEN (MPLS_PDUMAXLEN - (2*MPLS_TLVFIXLEN) - \
257 MPLS_MSGIDFIXLEN - MPLS_ADDFAMFIXLEN)
258 #define MPLS_MAXNUMBERADR MPLS_ADDLISTMAXLEN / 4
260 /* for label mapping message */
261 #define MPLS_LBLMAP_MSGTYPE 0x0400 /* label mapping msg */
262 #define MPLS_FEC_TLVTYPE 0x0100 /* label mapping msg */
263 #define MPLS_GENLBL_TLVTYPE 0x0200 /* generic label tlv */
264 #define MPLS_ATMLBL_TLVTYPE 0x0201 /* atm label tlv */
265 #define MPLS_FRLBL_TLVTYPE 0x0202 /* frame relay label tlv */
266 #define MPLS_HOPCOUNT_TLVTYPE 0x0103 /* ho count tlv */
267 #define MPLS_PATH_TLVTYPE 0x0104 /* path vector tlv */
268 #define MPLS_REQMSGID_TLVTYPE 0x0600 /* lbl request msg id tlv */
269 #define MPLS_WC_FEC 0x01 /* wildcard fec element */
270 #define MPLS_PREFIX_FEC 0x02 /* prefix fec element */
271 #define MPLS_HOSTADR_FEC 0x03 /* host addr fec element */
272 #define MPLS_CRLSP_FEC 0x04 /* crlsp fec element */
273 #define MPLS_FECMAXLEN (MPLS_PDUMAXLEN - (2*MPLS_TLVFIXLEN) - \
275 #define MPLS_LBLFIXLEN 4 /* v + vpi + vci + res */
276 #define MPLS_HOPCOUNTFIXLEN 1 /* v + vpi + vci + res */
277 #define MPLS_FEC_ELEMTYPELEN 1
278 #define MPLS_FEC_PRELENLEN 1
279 #define MPLS_FEC_ADRFAMLEN 2
280 #define MPLS_FEC_CRLSPLEN 4 /* length of cr lsp fec */
281 #define MPLS_MAXHOPSNUMBER 20 /* max # hops in path vector */
282 #define MPLS_MAXNUMFECELEMENT 10 /* max # of fec elements */
284 /* for label request message */
285 #define MPLS_LBLREQ_MSGTYPE 0x0401 /* label request msg */
286 #define MPLS_LBLMSGID_TLVTYPE 0x0601 /* lbl return msg id tlv */
287 #define MPLS_ADR_FEC_FIXLEN (MPLS_FEC_ELEMTYPELEN + MPLS_FEC_PRELENLEN + MPLS_FEC_ADRFAMLEN)
289 /* for label withdraw and release messages */
290 #define MPLS_LBLWITH_MSGTYPE 0x0402 /* label withdraw msg */
291 #define MPLS_LBLREL_MSGTYPE 0x0403 /* label release msg */
294 #define MPLS_ER_TLVTYPE 0x0800 /* constraint routing tlv */
295 #define MPLS_TRAFFIC_TLVTYPE 0x0810 /* traffic parameters tlv */
296 #define MPLS_PDR_TLVTYPE 0x0811 /* traffic peak data rate tlv */
297 #define MPLS_CDR_TLVTYPE 0x0812 /* committed data rate tlv */
298 #define MPLS_CBT_TLVTYPE 0x0813 /* committed burst tolerance */
299 #define MPLS_PREEMPT_TLVTYPE 0x0820 /* preemption tlv */
300 #define MPLS_LSPID_TLVTYPE 0x0821 /* lspid tlv */
301 #define MPLS_RESCLASS_TLVTYPE 0x0822 /* resource class tlv */
302 #define MPLS_PINNING_TLVTYPE 0x0823 /* route pinning tlv */
303 #define MPLS_ERHOP_IPV4_TLVTYPE 0x801 /* explicit routing ipv4 tlv */
304 #define MPLS_ERHOP_IPV6_TLVTYPE 0x802 /* explicit routing ipv6 tlv */
305 #define MPLS_ERHOP_AS_TLVTYPE 0x803 /* explicit routing autonomous
307 #define MPLS_ERHOP_LSPID_TLVTYPE 0x804 /* explicit routing lspid tlv */
308 #define MPLS_ERHOP_IPV4_FIXLEN 8 /* fix length in bytes */
309 #define MPLS_ERHOP_IPV6_FIXLEN 20 /* fix length in bytes */
310 #define MPLS_ERHOP_AS_FIXLEN 4 /* fix length in bytes */
311 #define MPLS_ERHOP_LSPID_FIXLEN 8 /* fix length in bytes */
312 #define MPLS_IPV6ADRLENGTH 16
313 #define MPLS_MAX_ER_HOPS 20 /* decent number of hops;
314 change if required */
315 #define MPLS_PREEMPTTLV_FIXLEN 4 /* setPrio + holdPrio + res */
316 #define MPLS_LSPIDTLV_FIXLEN 8 /* res + crlspId + routerId */
317 #define MPLS_TRAFFICPARAMLENGTH 4 /* traffic parameters length */
319 /* for label abort request message */
320 #define MPLS_LBLABORT_MSGTYPE 0x0404 /* label abort request msg */
326 #define MPLS_ENC_BUFFTOOSMALL -1
327 #define MPLS_DEC_BUFFTOOSMALL -2
328 #define MPLS_ENC_TLVERROR -3
329 #define MPLS_DEC_TLVERROR -4
330 #define MPLS_ENC_ATMLBLERROR -5
331 #define MPLS_DEC_ATMLBLERROR -6
332 #define MPLS_ENC_BASEMSGERROR -7
333 #define MPLS_DEC_BASEMSGERROR -8
334 #define MPLS_ENC_CSPERROR -9
335 #define MPLS_DEC_CSPERROR -10
336 #define MPLS_ENC_ASPERROR -11
337 #define MPLS_DEC_ASPERROR -12
338 #define MPLS_ENC_FSPERROR -13
339 #define MPLS_DEC_FSPERROR -14
340 #define MPLS_ENC_STATUSERROR -16
341 #define MPLS_DEC_STATUSERROR -17
342 #define MPLS_ENC_EXSTATERROR -18
343 #define MPLS_DEC_EXSTATERROR -19
344 #define MPLS_ENC_RETPDUERROR -20
345 #define MPLS_DEC_RETPDUERROR -21
346 #define MPLS_ENC_RETMSGERROR -22
347 #define MPLS_DEC_RETMSGERROR -23
348 #define MPLS_PDU_LENGTH_ERROR -24
349 #define MPLS_ENC_CHPERROR -25
350 #define MPLS_DEC_CHPERROR -26
351 #define MPLS_ENC_CSNERROR -27
352 #define MPLS_DEC_CSNERROR -28
353 #define MPLS_ENC_TRADRERROR -29
354 #define MPLS_DEC_TRADRERROR -30
355 #define MPLS_ENC_ADRLISTERROR -31
356 #define MPLS_DEC_ADRLISTERROR -32
357 #define MPLS_WC_FECERROR -33
358 #define MPLS_PATHVECTORERROR -34
359 #define MPLS_ENC_FECERROR -35
360 #define MPLS_DEC_FECERROR -36
361 #define MPLS_ENC_GENLBLERROR -37
362 #define MPLS_DEC_GENLBLERROR -38
363 #define MPLS_ENC_MAPATMERROR -39
364 #define MPLS_DEC_MAPATMERROR -40
365 #define MPLS_ENC_FRLBLERROR -41
366 #define MPLS_DEC_FRLBLERROR -42
367 #define MPLS_ENC_COSERROR -43
368 #define MPLS_DEC_COSERROR -44
369 #define MPLS_ENC_HOPCOUNTERROR -45
370 #define MPLS_DEC_HOPCOUNTERROR -46
371 #define MPLS_ENC_PATHVECERROR -47
372 #define MPLS_DEC_PATHVECERROR -48
373 #define MPLS_ENC_LBLMSGIDERROR -49
374 #define MPLS_DEC_LBLMSGIDERROR -50
375 #define MPLS_ENC_HDRTLVERROR -51
376 #define MPLS_DEC_HDRTLVERROR -52
377 #define MPLS_ENC_FECELEMERROR -53
378 #define MPLS_DEC_FECELEMERROR -54
379 #define MPLS_ENC_FSPLBLERROR -55
380 #define MPLS_DEC_FSPLBLERROR -56
381 #define MPLS_ENC_ERHOPERROR -57
382 #define MPLS_DEC_ERHOPERROR -58
383 #define MPLS_ENC_ERTLVERROR -59
384 #define MPLS_DEC_ERTLVERROR -60
385 #define MPLS_ENC_ERHOPLENERROR -61
386 #define MPLS_DEC_ERHOPLENERROR -62
387 #define MPLS_TLVTYPEERROR -63
388 #define MPLS_MSGTYPEERROR -64
389 #define MPLS_FECERROR -65
390 #define MPLS_ENC_TRAFFICERROR -66
391 #define MPLS_DEC_TRAFFICERROR -67
392 #define MPLS_ENC_LSPIDERROR -68
393 #define MPLS_DEC_LSPIDERROR -69
394 #define MPLS_ENC_RESCLSERROR -70
395 #define MPLS_DEC_RESCLSERROR -71
396 #define MPLS_ENC_PREEMPTERROR -72
397 #define MPLS_DEC_PREEMPTERROR -73
398 #define MPLS_ENC_PINNINGERROR -74
399 #define MPLS_DEC_PINNINGERROR -75
400 #define MPLS_FLOATTYPEERROR -76
401 #define MPLS_FECTLVERROR -77
402 #define MPLS_IPV4LENGTHERROR -78
403 #define MPLS_ER_HOPSNUMERROR -79
405 /**********************************************************************
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
410 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
411 | Version | PDU Length |
412 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
414 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
416 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
417 **********************************************************************/
419 typedef struct mplsLdpHeader_s
{
420 u_short protocolVersion
;
421 u_short pduLength
; /* length excluding the version and length */
422 u_int lsrAddress
; /* IP address assigned to LSR */
423 u_short labelSpace
; /* within LSR */
427 /**********************************************************************
428 LDP Messages (All LDP messages have the following format:)
431 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
432 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
433 |U| Message Type | Message Length |
434 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
436 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
439 | Mandatory Parameters |
442 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
445 | Optional Parameters |
448 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
449 Note: the U flag is ignored for now. There is not check for its value.
450 **********************************************************************/
452 typedef struct mplsLdpMsgFlag_s
{
453 BITFIELDS_ASCENDING_2(u_short uBit
:1, u_short msgType
:15)
456 typedef struct mplsLdpMsg_s
{
458 struct mplsLdpMsgFlag_s flags
;
462 u_short msgLength
; /* msgId + mandatory param + optional param */
463 u_int msgId
; /* used to identify the notification msg */
467 typedef struct mplsLdpUnknownMsg_s
{
468 struct mplsLdpMsg_s baseMsg
;
469 u_char data
[MPLS_NOT_MAXSIZE
];
471 } mplsLdpUnknownMsg_t
;
473 /**********************************************************************
474 Type-Length-Value Encoding
477 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
478 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
479 |U|F| Type | Length |
480 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
485 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
487 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
488 Note: the decode functions for tlv do not check the values for
489 F flag. They check only the value of the U flag; if
490 it is set will ignore the tlv and keep processing the message;
491 otherwise will ignore the message and return error. Please note
492 that the unknown tlv which is skipped will not be stored anywhere.
493 **********************************************************************/
495 typedef struct mplsLdpTlvFlag_s
{
496 BITFIELDS_ASCENDING_3(u_short uBit
:1, u_short fBit
:1, u_short tBit
:14)
499 typedef struct mplsLdpTlv_s
{
501 struct mplsLdpTlvFlag_s flags
;
505 u_short length
; /* length of the value field */
509 /**********************************************************************
510 Common Session Parameters TLV
513 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
514 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
515 |U|F| Common Sess Parms (0x0500)| Length |
516 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
517 | Protocol Version | Keep Alive Time |
518 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
519 |A|D| Reserved | PVLim | Max PDU Length |
520 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
521 | Receiver LDP Identifer |
522 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
524 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++
525 ***********************************************************************/
527 typedef struct mplsLdpCspFlag_s
{
528 BITFIELDS_ASCENDING_4(u_short lad
:1, /* 1 = downstream on demand */
529 u_short ld
:1, /* loop detection */
530 u_short res
:6, /* reserved */
531 u_short pvl
:8 /* path vec limit */
535 typedef struct mplsLdpCspTlv_s
{
536 struct mplsLdpTlv_s baseTlv
;
537 u_short protocolVersion
;
538 u_short holdTime
; /* proposed keep alive interval */
541 struct mplsLdpCspFlag_s flags
;
551 /***********************************************************************
552 ATM Label Range Component
555 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
556 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
557 | Res | Minimum VPI | Minimum VCI |
558 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
559 | Res | Maximum VPI | Maximum VCI |
560 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
561 ***********************************************************************/
563 typedef struct mplsLdpAtmLblRngFlag_s
{
564 BITFIELDS_ASCENDING_3(u_int res1
:4, /* reserved : 0 on transmision */
565 u_int minVpi
:12, /* if <12 bits right justified */
566 u_int minVci
:16 /* if <16 bits right justified */
568 BITFIELDS_ASCENDING_3(u_int res2
:4, /* reserved : 0 on transmision */
569 u_int maxVpi
:12, /* if <12 bits right justified */
570 u_int maxVci
:16 /* if <16 bits right justified */
572 } mplsLdpAtmLblRngFlag_t
;
574 typedef struct mplsLdpAtmLblRng_s
{
576 struct mplsLdpAtmLblRngFlag_s flags
;
579 } mplsLdpAtmLblRng_t
;
581 /***********************************************************************
582 Flags for ATM Session Parameters TLV and
583 Frame Relay Session Parameters TLV
585 Note: both types of session parameters have the same type of flags;
586 use then the same struct
587 ***********************************************************************/
589 typedef struct mplsLdpSPFlag_s
{
590 BITFIELDS_ASCENDING_4(u_int mergeType
:2, /* merge typ */
591 u_int numLblRng
:4, /* # of label range com */
592 u_int dir
:1, /* 0 => bidirectional */
596 /***********************************************************************
597 ATM Session Parameters TLV
600 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
601 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
602 |U|F| ATM Sess Parms (0x0501) | Length |
603 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
604 | M | N |D| Reserved |
605 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
606 | ATM Label Range Component 1 |
607 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
611 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
612 | ATM Label Range Component N |
613 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
614 ***********************************************************************/
616 typedef struct mplsLdpAspTlv_s
{
617 struct mplsLdpTlv_s baseTlv
;
619 struct mplsLdpSPFlag_s flags
;
622 struct mplsLdpAtmLblRng_s lblRngList
[MPLS_ATMLBLMAXLEN
];
626 /***********************************************************************
627 Frame Relay Label Range Component
630 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
631 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
632 | Reserved |Len| Minimum DLCI |
633 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
634 | Reserved | Maximum DLCI |
635 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
636 ***********************************************************************/
638 typedef struct mplsLdpFrFlag_s
{
639 BITFIELDS_ASCENDING_3(u_int res_min
:7, u_int len
:2, u_int minDlci
:23)
640 BITFIELDS_ASCENDING_2(u_int res_max
:9, u_int maxDlci
:23)
643 typedef struct mplsLdpFrLblRng_s
{
645 struct mplsLdpFrFlag_s flags
;
651 /**********************************************************************
652 Frame Relay Session Parameters TLV
655 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
656 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
657 |U|F| FR Sess Parms (0x0502) | Length |
658 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
659 | M | N |D| Reserved |
660 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
661 | Frame Relay Label Range Component 1 |
662 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
666 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
667 | Frame Relay Label Range Component N |
668 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
669 ***********************************************************************/
671 typedef struct mplsLdpFspTlv_s
{
672 struct mplsLdpTlv_s baseTlv
;
674 struct mplsLdpSPFlag_s flags
;
677 struct mplsLdpFrLblRng_s lblRngList
[MPLS_FRLBLMAXLEN
];
681 /***********************************************************************
682 Initialization Message Encoding
685 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
686 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
687 |U| Initialization (0x0200) | Message Length |
688 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
690 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
691 | Common Session Parameters TLV |
692 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
693 | Optional Parameters |
694 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
695 ***********************************************************************/
697 typedef struct mplsLdpInitMsg_s
{
698 struct mplsLdpMsg_s baseMsg
;
699 struct mplsLdpCspTlv_s csp
;
700 struct mplsLdpAspTlv_s asp
;
701 struct mplsLdpFspTlv_s fsp
;
708 /***********************************************************************
712 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
713 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
715 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
716 ***********************************************************************/
717 typedef struct mplsLdpStautsFlag_s
{
718 BITFIELDS_ASCENDING_3(u_int error
:1, /* E bit */
719 u_int forward
:1, /* F bit */
721 } mplsLdpStautsFlag_t
;
723 /***********************************************************************
724 Status (TLV) Encoding
727 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
728 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
729 |U|F| Status (0x0300) | Length |
730 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
732 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
734 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
736 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
737 ***********************************************************************/
739 typedef struct mplsLdpStatusTlv_s
{
740 struct mplsLdpTlv_s baseTlv
;
742 struct mplsLdpStautsFlag_s flags
;
748 } mplsLdpStatusTlv_t
;
750 /***********************************************************************
751 Extended Status (TLV) Encoding
752 ***********************************************************************/
754 typedef struct mplsLdpExStatusTlv_s
{
755 struct mplsLdpTlv_s baseTlv
;
756 u_int value
; /* additional info for status */
758 } mplsLdpExStatusTlv_t
;
760 /***********************************************************************
761 Returned PDU (TLV) Encoding
762 ***********************************************************************/
764 typedef struct mplsLdpRetPduTlv_s
{
765 struct mplsLdpTlv_s baseTlv
;
766 struct mplsLdpHeader_s headerTlv
;
767 u_char data
[MPLS_NOT_MAXSIZE
];
769 } mplsLdpRetPduTlv_t
;
771 /***********************************************************************
772 Returned MSG (TLV) Encoding
773 ***********************************************************************/
775 typedef struct mplsLdpRetMsgTlv_s
{
776 struct mplsLdpTlv_s baseTlv
;
779 u_char data
[MPLS_NOT_MAXSIZE
];
781 } mplsLdpRetMsgTlv_t
;
783 /***********************************************************************
787 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
788 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
789 |U|F| LSPID-TLV (0x0821) | Length |
790 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
791 | Reserved | Local CRLSP ID |
792 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
793 | Ingress LSR Router ID |
794 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
795 ***********************************************************************/
797 typedef struct mplsLdpLspIdTlv_s
{
798 struct mplsLdpTlv_s baseTlv
;
800 u_short localCrlspId
;
801 u_int routerId
; /* ingress lsr router id */
805 /***********************************************************************
806 Notification Message Encoding
809 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
810 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
811 |U| Notification (0x0001) | Message Length |
812 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
814 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
816 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
817 | Optional Parameters |
818 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
819 | LSPID TLV (optional for CR-LDP) |
820 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
821 ***********************************************************************/
823 typedef struct mplsLdpNotifMsg_s
{
824 struct mplsLdpMsg_s baseMsg
;
825 struct mplsLdpStatusTlv_s status
;
826 struct mplsLdpExStatusTlv_s exStatus
; /* extended status tlv */
827 struct mplsLdpRetPduTlv_s retPdu
; /* returned PDU tlv */
828 struct mplsLdpRetMsgTlv_s retMsg
; /* returned MSG tlv */
829 struct mplsLdpLspIdTlv_s lspidTlv
; /* lspid tlv */
831 u_char statusTlvExists
:1;
832 u_char exStatusTlvExists
:1;
833 u_char retPduTlvExists
:1;
834 u_char retMsgTlvExists
:1;
835 u_char lspidTlvExists
:1;
839 /***********************************************************************
840 Common Hello Parameters Tlv encoding
843 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
844 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
845 |U|F| Common Hello Parms(0x0400)| Length |
846 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
847 | Hold Time |T|R| Reserved |
848 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
849 ***********************************************************************/
850 typedef struct mplsLdpChpFlag_s
{
851 BITFIELDS_ASCENDING_3(u_short target
:1, /* T bit */
852 u_short request
:1, /* R bit */
856 typedef struct mplsLdpChpTlv_s
{
857 struct mplsLdpTlv_s baseTlv
;
860 struct mplsLdpChpFlag_s flags
;
866 /***********************************************************************
867 Transport Address (TLV) Encoding
868 ***********************************************************************/
870 typedef struct mplsLdpTrAdrTlv_s
{
871 struct mplsLdpTlv_s baseTlv
;
876 /***********************************************************************
877 Configuration Sequence Number (TLV) Encoding
878 ***********************************************************************/
880 typedef struct mplsLdpCsnTlv_s
{
881 struct mplsLdpTlv_s baseTlv
;
886 /***********************************************************************
887 Hello message encoding
890 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
891 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
892 |U| Hello (0x0100) | Message Length |
893 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
895 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
896 | Common Hello Parameters TLV |
897 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
898 | Optional Parameters |
899 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
900 ***********************************************************************/
902 typedef struct mplsLdpHelloMsg_s
{
903 struct mplsLdpMsg_s baseMsg
;
904 struct mplsLdpChpTlv_s chp
; /* common hello param tlv */
905 struct mplsLdpTrAdrTlv_s trAdr
; /* transport address tlv */
906 struct mplsLdpCsnTlv_s csn
; /* configuration seq # tlv */
907 u_char chpTlvExists
:1;
908 u_char trAdrTlvExists
:1;
909 u_char csnTlvExists
:1;
913 /***********************************************************************
914 KeepAlive Message encoding
917 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
918 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
919 |U| KeepAlive (0x0201) | Message Length |
920 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
922 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
923 | Optional Parameters |
924 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
926 Note: there are no optional param defined for keep alive.
927 ***********************************************************************/
929 typedef struct mplsLdpKeepAlMsg_s
{
930 struct mplsLdpMsg_s baseMsg
;
932 } mplsLdpKeepAlMsg_t
;
934 /***********************************************************************
935 Address List TLV encoding
938 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
939 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
940 |U|F| Address List (0x0101) | Length |
941 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
943 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
948 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
949 ***********************************************************************/
951 typedef struct mplsLdpAdrTlv_s
{
952 struct mplsLdpTlv_s baseTlv
;
954 u_int address
[MPLS_MAXNUMBERADR
];
958 /***********************************************************************
959 Address (0x0300) / Address Withdraw(0x0301) message encoding
962 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
963 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
964 |U| Address | Message Length |
965 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
967 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
971 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
972 | Optional Parameters |
973 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
975 Note: there are no optional param defined for address message.
976 ***********************************************************************/
978 typedef struct mplsLdpAdrMsg_s
{
979 struct mplsLdpMsg_s baseMsg
;
980 struct mplsLdpAdrTlv_s addressList
;
981 u_char adrListTlvExists
:1;
985 /***********************************************************************
986 Wildcard FEC Element encoding
987 ***********************************************************************/
989 typedef struct mplsLdpWildFec_s
{
994 /***********************************************************************
995 Prefix FEC Element encoding
998 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
999 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1000 | Prefix (2) | Address Family | PreLen |
1001 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1003 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1005 Host Address FEC Element encoding
1007 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
1008 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1009 | Host Addr (3) | Address Family | Host Addr Len |
1010 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1012 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1014 Note: the code handles prefixes and host addresses whose length is
1015 less or equal to 4 bytes.
1016 ***********************************************************************/
1018 typedef struct mplsLdpAddressFec_s
{
1021 u_char preLen
; /* prefix FEC: length of the adr prefix (in bits)
1022 or host adr FEC: length of the host address (in
1026 } mplsLdpAddressFec_t
;
1028 /***********************************************************************
1029 CRLSP FEC Element encoding
1032 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
1033 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1034 | CR-LSP (4) | Reserved |
1035 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1036 ***********************************************************************/
1038 typedef struct mplsLdpCrlspFec_s
{
1040 u_char res1
; /* reserved */
1041 u_short res2
; /* reserved */
1043 } mplsLdpCrlspFec_t
;
1045 /***********************************************************************
1049 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
1050 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1051 |U|F| FEC (0x0100) | Length |
1052 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1054 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1058 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1060 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1061 ***********************************************************************/
1063 typedef union mplsFecElement_u
{
1064 struct mplsLdpAddressFec_s addressEl
; /* prefix | host adr */
1065 struct mplsLdpWildFec_s wildcardEl
; /* for wilcard fec */
1066 struct mplsLdpCrlspFec_s crlspEl
; /* CRLSP fec elem */
1070 typedef struct mplsLdpFecTlv_s
{
1071 struct mplsLdpTlv_s baseTlv
;
1072 union mplsFecElement_u fecElArray
[MPLS_MAXNUMFECELEMENT
];
1073 u_short fecElemTypes
[MPLS_MAXNUMFECELEMENT
];
1074 u_char wcElemExists
:1;
1075 u_short numberFecElements
;
1079 /***********************************************************************
1080 Generic Label Tlv encoding
1083 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
1084 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1085 |U|F| Generic Label (0x0200) | Length |
1086 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1088 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1089 ***********************************************************************/
1091 typedef struct mplsLdpGenLblTlv_s
{
1092 struct mplsLdpTlv_s baseTlv
;
1093 u_int label
; /* 20-bit number in 4 octet field */
1095 } mplsLdpGenLblTlv_t
;
1097 /***********************************************************************
1098 Atm Label Tlv encoding
1101 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
1102 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1103 |U|F| ATM Label (0x0201) | Length |
1104 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1105 |Res| V | VPI | VCI |
1106 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1107 ***********************************************************************/
1109 typedef struct mplsLdpAtmLblFlag_s
{
1110 BITFIELDS_ASCENDING_3(u_short res
:2, u_short v
:2, u_short vpi
:12)
1111 } mplsLdpAtmLblFlag_t
;
1113 typedef struct mplsLdpAtmLblTlv_s
{
1114 struct mplsLdpTlv_s baseTlv
;
1117 struct mplsLdpAtmLblFlag_s flags
;
1123 } mplsLdpAtmLblTlv_t
;
1125 /***********************************************************************
1126 Frame Relay Label Tlv encoding
1129 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
1130 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1131 |U|F| Frame Relay Label (0x0202)| Length |
1132 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1133 | Reserved |Len| DLCI |
1134 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1135 ***********************************************************************/
1137 typedef struct mplsLdpFrLblFlag_s
{
1138 BITFIELDS_ASCENDING_3(u_int res
:7, u_int len
:2, u_int dlci
:23)
1140 } mplsLdpFrLblFlag_t
;
1142 typedef struct mplsLdpFrLblTlv_s
{
1143 struct mplsLdpTlv_s baseTlv
;
1146 struct mplsLdpFrLblFlag_s flags
;
1150 } mplsLdpFrLblTlv_t
;
1152 /***********************************************************************
1153 Hop Count Tlv encoding
1156 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
1157 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1158 |U|F| Hop Count (0x0103) | Length |
1159 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1162 ***********************************************************************/
1164 typedef struct mplsLdpHopTlv_s
{
1165 struct mplsLdpTlv_s baseTlv
;
1166 u_char hcValue
; /* hop count value */
1170 /***********************************************************************
1171 Path Vector Tlv encoding
1174 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
1175 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1176 |U|F| Path Vector (0x0104) | Length |
1177 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1179 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1183 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1185 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1186 ***********************************************************************/
1188 typedef struct mplsLdpPathTlv_s
{
1189 struct mplsLdpTlv_s baseTlv
;
1190 u_int lsrId
[MPLS_MAXHOPSNUMBER
];
1194 /***********************************************************************
1195 Lbl request message id Tlv encoding
1196 ***********************************************************************/
1198 typedef struct mplsLdpLblMsgIdTlv_s
{
1199 struct mplsLdpTlv_s baseTlv
;
1202 } mplsLdpLblMsgIdTlv_t
;
1204 /***********************************************************************
1205 Preemption Tlv encoding
1208 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
1209 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1210 |U|F| Preemption-TLV (0x0820) | Length |
1211 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1212 | SetPrio | HoldPrio | Reserved |
1213 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1214 ***********************************************************************/
1216 typedef struct mplsLdpPreemptTlv_s
{
1217 struct mplsLdpTlv_s baseTlv
;
1218 u_char setPrio
; /* 0 => most important path */
1219 u_char holdPrio
; /* 0 => most important path */
1222 } mplsLdpPreemptTlv_t
;
1224 /***********************************************************************
1225 Resource class Tlv encoding
1228 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
1229 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1230 |U|F| ResCls-TLV (0x0822) | Length |
1231 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1233 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1234 ***********************************************************************/
1236 typedef struct mplsLdpResClsTlv_s
{
1237 struct mplsLdpTlv_s baseTlv
;
1238 u_int rsCls
; /* resource class bit mask */
1240 } mplsLdpResClsTlv_t
;
1242 /***********************************************************************
1243 Lbl return message id Tlv encoding
1244 ***********************************************************************/
1246 typedef struct mplsLdpRetMsgIdTlv_s
{
1247 struct mplsLdpTlv_s baseTlv
;
1249 } mplsLdpLblRetMsgIdTlv_t
;
1251 /***********************************************************************
1252 ER flag structure which is common to IPV4 and IPV6 ER TLV
1253 ***********************************************************************/
1255 typedef struct mplsLdpErIPFlag_s
{
1256 BITFIELDS_ASCENDING_3(u_int l
:1, /* 0 => loose hop */
1257 u_int res
:23, u_int preLen
:8)
1258 } mplsLdpErIPFlag_t
;
1260 /***********************************************************************
1261 ER flag structure which is common to AS and LSPID ER TLV
1262 ***********************************************************************/
1263 typedef struct mplsLdpErFlag_s
{
1264 BITFIELDS_ASCENDING_2(u_short l
:1, /* 0 => loose hop */
1268 /***********************************************************************
1269 Explicit Routing IPv4 Tlv encoding
1272 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
1273 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1274 |U|F| 0x801 | Length |
1275 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1276 |L| Reserved | PreLen |
1277 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1278 | IPv4 Address (4 bytes) |
1279 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1280 ***********************************************************************/
1282 typedef struct mplsLdpErIpv4_s
{
1283 struct mplsLdpTlv_s baseTlv
;
1285 struct mplsLdpErIPFlag_s flags
;
1292 /***********************************************************************
1293 Explicit Routing IPv6 Tlv encoding
1296 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
1297 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1298 |U|F| 0x802 | Length |
1299 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1300 |L| Reserved | PreLen |
1301 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1303 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1304 | IPV6 address (continued) |
1305 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1306 | IPV6 address (continued) |
1307 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1308 | IPV6 address (continued) |
1309 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1310 ***********************************************************************/
1312 typedef struct mplsLdpErIpv6_s
{
1313 struct mplsLdpTlv_s baseTlv
;
1315 struct mplsLdpErIPFlag_s flags
;
1318 u_char address
[MPLS_IPV6ADRLENGTH
];
1322 /***********************************************************************
1323 Explicit Routing Autonomous systen number Tlv encoding
1326 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
1327 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1328 |U|F| 0x803 | Length |
1329 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1330 |L| Reserved | AS Number |
1331 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1332 ***********************************************************************/
1334 typedef struct mplsLdpErAs_s
{
1335 struct mplsLdpTlv_s baseTlv
;
1337 struct mplsLdpErFlag_s flags
;
1344 /***********************************************************************
1345 Explicit Routing LSPID Tlv encoding
1348 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
1349 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1350 |U|F| 0x804 | Length |
1351 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1352 |L| Reserved | Local LSPID |
1353 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1354 | Ingress LSR Router ID |
1355 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1356 ***********************************************************************/
1358 typedef struct mplsLdpErLspId_s
{
1359 struct mplsLdpTlv_s baseTlv
;
1361 struct mplsLdpErFlag_s flags
;
1369 /***********************************************************************
1370 Constraint Routing Tlv encoding
1373 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
1374 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1375 |U|F| ER-TLV (0x0800) | Length |
1376 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1378 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1380 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1382 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1384 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1385 ***********************************************************************/
1387 typedef union mplsLdpErHop_u
{
1388 struct mplsLdpErIpv4_s erIpv4
;
1389 struct mplsLdpErIpv6_s erIpv6
;
1390 struct mplsLdpErAs_s erAs
;
1391 struct mplsLdpErLspId_s erLspId
;
1395 typedef struct mplsLdpErTlv_s
{
1396 struct mplsLdpTlv_s baseTlv
;
1397 union mplsLdpErHop_u erHopArray
[MPLS_MAX_ER_HOPS
];
1398 u_short erHopTypes
[MPLS_MAX_ER_HOPS
]; /* need to know the
1401 u_short numberErHops
;
1405 /***********************************************************************
1406 Traffic parameters TLV
1409 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
1410 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1411 |U|F| Traf. Param. TLV (0x0810)| Length |
1412 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1413 | Flags | Frequency | Reserved | Weight |
1414 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1415 | Peak Data Rate (PDR) |
1416 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1417 | Peak Burst Size (PBS) |
1418 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1419 | Committed Data Rate (CDR) |
1420 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1421 | Committed Burst Size (CBS) |
1422 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1423 | Excess Burst Size (EBS) |
1424 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1427 +--+--+--+--+--+--+--+--+
1428 | Res |F6|F5|F4|F3|F2|F1|
1429 +--+--+--+--+--+--+--+--+
1430 ***********************************************************************/
1432 typedef struct mplsLdpTrafficFlag_s
{
1433 BITFIELDS_ASCENDING_7(u_char res
:2,
1436 u_char f4Bit
:1, u_char f3Bit
:1, u_char f2Bit
:1, u_char f1Bit
:1)
1437 } mplsLdpTrafficFlag_t
;
1439 typedef struct mplsLdpTrafficTlv_s
{
1440 struct mplsLdpTlv_s baseTlv
;
1442 struct mplsLdpTrafficFlag_s flags
;
1469 } mplsLdpTrafficTlv_t
;
1471 /***********************************************************************
1475 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
1476 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1477 |U|F| 0x823 | Length |
1478 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1480 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1481 ***********************************************************************/
1483 typedef struct mplsLdpPinningTlvFlag_s
{
1484 BITFIELDS_ASCENDING_2(u_int pBit
:1, /* 1 => route pinning requested */
1486 } mplsLdpPinningTlvFlag_t
;
1488 typedef struct mplsLdpPinningTlv_s
{
1489 struct mplsLdpTlv_s baseTlv
;
1491 struct mplsLdpPinningTlvFlag_s flags
;
1494 } mplsLdpPinningTlv_t
;
1496 /***********************************************************************
1497 Label Mapping Message encoding
1500 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
1501 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1502 |U| Label Mapping (0x0400) | Message Length |
1503 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1505 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1507 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1509 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1510 | Label Request Message ID TLV (mandatory) |
1511 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1512 | LSPID TLV (CR-LDP, mandatory) |
1513 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1514 | Traffic TLV (CR-LDP, optional) |
1515 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1516 ***********************************************************************/
1518 typedef struct mplsLdpLblMapMsg_s
{
1519 struct mplsLdpMsg_s baseMsg
;
1522 struct mplsLdpFecTlv_s fecTlv
;
1525 struct mplsLdpGenLblTlv_s genLblTlv
; /* generic label tlv */
1526 struct mplsLdpAtmLblTlv_s atmLblTlv
; /* atm label tlv */
1527 struct mplsLdpFrLblTlv_s frLblTlv
; /* fr label tlv */
1529 /* Optional parameters */
1530 struct mplsLdpHopTlv_s hopCountTlv
; /* hop count tlv */
1531 struct mplsLdpPathTlv_s pathVecTlv
; /* path vector tlv */
1532 struct mplsLdpLblMsgIdTlv_s lblMsgIdTlv
; /* lbl msg id tlv */
1533 struct mplsLdpLspIdTlv_s lspidTlv
; /* lspid tlv */
1534 struct mplsLdpTrafficTlv_s trafficTlv
; /* traffic tlv */
1536 u_char fecTlvExists
:1;
1537 u_char genLblTlvExists
:1;
1538 u_char atmLblTlvExists
:1;
1539 u_char frLblTlvExists
:1;
1540 u_char hopCountTlvExists
:1;
1541 u_char pathVecTlvExists
:1;
1542 u_char lblMsgIdTlvExists
:1;
1543 u_char lspidTlvExists
:1;
1544 u_char trafficTlvExists
:1;
1546 } mplsLdpLblMapMsg_t
;
1548 /***********************************************************************
1549 Label Request Message encoding
1552 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
1553 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1554 |U| Label Request (0x0401) | Message Length |
1555 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1557 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1559 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1560 | Return Message ID TLV (mandatory) |
1561 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1562 | LSPID TLV (CR-LDP, mandatory) |
1563 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1564 | ER-TLV (CR-LDP, optional) |
1565 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1566 | Traffic TLV (CR-LDP, optional) |
1567 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1568 | Pinning TLV (CR-LDP, optional) |
1569 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1570 | Resource Class TLV (CR-LDP, optional) |
1571 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1572 | Pre-emption TLV (CR-LDP, optional) |
1573 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1574 ***********************************************************************/
1576 typedef struct mplsLdpLblReqMsg_s
{
1577 struct mplsLdpMsg_s baseMsg
;
1580 struct mplsLdpFecTlv_s fecTlv
;
1582 /* Optional parameters */
1583 struct mplsLdpHopTlv_s hopCountTlv
; /* hop count tlv */
1584 struct mplsLdpPathTlv_s pathVecTlv
; /* path vector tlv */
1586 /* Optional parameters for CR */
1587 struct mplsLdpRetMsgIdTlv_s lblMsgIdTlv
; /* lbl msg id tlv */
1588 struct mplsLdpErTlv_s erTlv
; /* constraint rtg tlv */
1589 struct mplsLdpTrafficTlv_s trafficTlv
; /* traffic tlv */
1590 struct mplsLdpLspIdTlv_s lspidTlv
; /* lspid tlv */
1591 struct mplsLdpPinningTlv_s pinningTlv
; /* pinning tlv */
1592 struct mplsLdpResClsTlv_s resClassTlv
; /* resource class tlv */
1593 struct mplsLdpPreemptTlv_s preemptTlv
; /* peemtion tlv */
1595 u_char fecTlvExists
:1;
1596 u_char hopCountTlvExists
:1;
1597 u_char pathVecTlvExists
:1;
1598 u_char lblMsgIdTlvExists
:1;
1599 u_char erTlvExists
:1;
1600 u_char trafficTlvExists
:1;
1601 u_char lspidTlvExists
:1;
1602 u_char pinningTlvExists
:1;
1603 u_char recClassTlvExists
:1;
1604 u_char preemptTlvExists
:1;
1606 } mplsLdpLblReqMsg_t
;
1608 /***********************************************************************
1610 Label Withdraw Message encoding
1613 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
1614 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1615 |U| Label Withdraw (0x0402) | Message Length |
1616 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1618 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1620 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1621 | Label TLV (optional) |
1622 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1623 | LSPID TLV (optional for CR-LDP) |
1624 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1626 Label Release Message encoding
1629 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
1630 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1631 |U| Label Release (0x0403) | Message Length |
1632 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1634 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1636 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1637 | Label TLV (optional) |
1638 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1639 | LSPID TLV (optional for CR-LDP) |
1640 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1642 Note: the Label Withdraw Message encoding and the Label Release Message enc
1643 look very much the same. I will create only one type of struct for
1645 The Label Withdraw Message and Label Release Message can optionally
1647 ***********************************************************************/
1649 typedef struct mplsLdpLbl_W_R_Msg_s
{
1650 struct mplsLdpMsg_s baseMsg
;
1653 struct mplsLdpFecTlv_s fecTlv
;
1656 struct mplsLdpGenLblTlv_s genLblTlv
; /* generic label tlv */
1657 struct mplsLdpAtmLblTlv_s atmLblTlv
; /* atm label tlv */
1658 struct mplsLdpFrLblTlv_s frLblTlv
; /* fr label tlv */
1659 struct mplsLdpLspIdTlv_s lspidTlv
; /* lspid tlv */
1661 u_char fecTlvExists
:1;
1662 u_char genLblTlvExists
:1;
1663 u_char atmLblTlvExists
:1;
1664 u_char frLblTlvExists
:1;
1665 u_char lspidTlvExists
:1;
1667 } mplsLdpLbl_W_R_Msg_t
;
1669 /***********************************************************************
1670 Label Abort Request Message encoding
1673 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
1674 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1675 |U| Label Abort Req (0x0404) | Message Length |
1676 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1678 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1680 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1681 | Label Request Message ID TLV |
1682 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1683 ***********************************************************************/
1685 typedef struct mplsLdpLblAbortMsg_s
{
1686 struct mplsLdpMsg_s baseMsg
;
1688 struct mplsLdpFecTlv_s fecTlv
; /* fec tlv */
1689 struct mplsLdpLblMsgIdTlv_s lblMsgIdTlv
; /* lbl msg id tlv */
1691 u_char fecTlvExists
:1;
1692 u_char lblMsgIdTlvExists
:1;
1694 } mplsLdpLblAbortMsg_t
;
1696 /***********************************************************************
1698 * Function declarations
1700 * Note: Encode functions return the length of the data which was encoded.
1701 * The first argument (which is a pointer to the structure which
1702 * contains the data to be encoded) is not modified in the encode functions
1703 * which encode the messages and message headers. All the other encode
1704 * fuctions modify the content of the structures to be encoded (tlvs,
1705 * message parameters, etc).
1707 * Decode functions for tlv return the length of the value.
1710 int Mpls_encodeLdpMsgHeader(mplsLdpHeader_t
*, u_char
*, int);
1711 int Mpls_decodeLdpMsgHeader(mplsLdpHeader_t
*, u_char
*, int);
1712 int Mpls_encodeLdpAtmLblRng(mplsLdpAtmLblRng_t
*, u_char
*, int);
1713 int Mpls_decodeLdpAtmLblRng(mplsLdpAtmLblRng_t
*, u_char
*, int);
1714 int Mpls_encodeLdpAsp(mplsLdpAspTlv_t
*, u_char
*, int);
1715 int Mpls_decodeLdpAsp(mplsLdpAspTlv_t
*, u_char
*, int);
1716 int Mpls_encodeLdpTlv(mplsLdpTlv_t
*, u_char
*, int);
1717 int Mpls_decodeLdpTlv(mplsLdpTlv_t
*, u_char
*, int);
1718 int Mpls_encodeLdpInitMsg(mplsLdpInitMsg_t
*, u_char
*, int);
1719 int Mpls_decodeLdpInitMsg(mplsLdpInitMsg_t
*, u_char
*, int);
1720 int Mpls_encodeLdpCsp(mplsLdpCspTlv_t
*, u_char
*, int);
1721 int Mpls_decodeLdpCsp(mplsLdpCspTlv_t
*, u_char
*, int);
1722 int Mpls_encodeLdpBaseMsg(mplsLdpMsg_t
*, u_char
*, int);
1723 int Mpls_decodeLdpBaseMsg(mplsLdpMsg_t
*, u_char
*, int);
1724 int Mpls_encodeLdpFrLblRng(mplsLdpFrLblRng_t
*, u_char
*, int);
1725 int Mpls_decodeLdpFrLblRng(mplsLdpFrLblRng_t
*, u_char
*, int);
1726 int Mpls_encodeLdpFsp(mplsLdpFspTlv_t
*, u_char
*, int);
1727 int Mpls_decodeLdpFsp(mplsLdpFspTlv_t
*, u_char
*, int);
1728 int Mpls_encodeLdpNotMsg(mplsLdpNotifMsg_t
*, u_char
*, int);
1729 int Mpls_decodeLdpNotMsg(mplsLdpNotifMsg_t
*, u_char
*, int);
1730 int Mpls_encodeLdpStatus(mplsLdpStatusTlv_t
*, u_char
*, int);
1731 int Mpls_decodeLdpStatus(mplsLdpStatusTlv_t
*, u_char
*, int);
1732 int Mpls_encodeLdpExStatus(mplsLdpExStatusTlv_t
*, u_char
*, int);
1733 int Mpls_decodeLdpExStatus(mplsLdpExStatusTlv_t
*, u_char
*, int);
1734 int Mpls_encodeLdpRetPdu(mplsLdpRetPduTlv_t
*, u_char
*, int);
1735 int Mpls_decodeLdpRetPdu(mplsLdpRetPduTlv_t
*, u_char
*, int, u_short
);
1736 int Mpls_encodeLdpRetMsg(mplsLdpRetMsgTlv_t
*, u_char
*, int);
1737 int Mpls_decodeLdpRetMsg(mplsLdpRetMsgTlv_t
*, u_char
*, int, u_short
);
1738 int Mpls_encodeLdpHelloMsg(mplsLdpHelloMsg_t
*, u_char
*, int);
1739 int Mpls_decodeLdpHelloMsg(mplsLdpHelloMsg_t
*, u_char
*, int);
1740 int Mpls_encodeLdpChp(mplsLdpChpTlv_t
*, u_char
*, int);
1741 int Mpls_decodeLdpChp(mplsLdpChpTlv_t
*, u_char
*, int);
1742 int Mpls_encodeLdpCsn(mplsLdpCsnTlv_t
*, u_char
*, int);
1743 int Mpls_decodeLdpCsn(mplsLdpCsnTlv_t
*, u_char
*, int);
1744 int Mpls_encodeLdpTrAdr(mplsLdpTrAdrTlv_t
*, u_char
*, int);
1745 int Mpls_decodeLdpTrAdr(mplsLdpTrAdrTlv_t
*, u_char
*, int);
1746 int Mpls_encodeLdpKeepAliveMsg(mplsLdpKeepAlMsg_t
*, u_char
*, int);
1747 int Mpls_decodeLdpKeepAliveMsg(mplsLdpKeepAlMsg_t
*, u_char
*, int);
1748 int Mpls_encodeLdpAdrTlv(mplsLdpAdrTlv_t
*, u_char
*, int);
1749 int Mpls_decodeLdpAdrTlv(mplsLdpAdrTlv_t
*, u_char
*, int, u_short
);
1750 int Mpls_encodeLdpAdrMsg(mplsLdpAdrMsg_t
*, u_char
*, int);
1751 int Mpls_decodeLdpAdrMsg(mplsLdpAdrMsg_t
*, u_char
*, int);
1752 int Mpls_encodeLdpFecTlv(mplsLdpFecTlv_t
*, u_char
*, int);
1753 int Mpls_decodeLdpFecTlv(mplsLdpFecTlv_t
*, u_char
*, int, u_short
);
1754 int Mpls_encodeLdpGenLblTlv(mplsLdpGenLblTlv_t
*, u_char
*, int);
1755 int Mpls_decodeLdpGenLblTlv(mplsLdpGenLblTlv_t
*, u_char
*, int);
1756 int Mpls_encodeLdpAtmLblTlv(mplsLdpAtmLblTlv_t
*, u_char
*, int);
1757 int Mpls_decodeLdpAtmLblTlv(mplsLdpAtmLblTlv_t
*, u_char
*, int);
1758 int Mpls_encodeLdpFrLblTlv(mplsLdpFrLblTlv_t
*, u_char
*, int);
1759 int Mpls_decodeLdpFrLblTlv(mplsLdpFrLblTlv_t
*, u_char
*, int);
1760 int Mpls_encodeLdpHopTlv(mplsLdpHopTlv_t
*, u_char
*, int);
1761 int Mpls_decodeLdpHopTlv(mplsLdpHopTlv_t
*, u_char
*, int);
1762 int Mpls_encodeLdpLblMsgIdTlv(mplsLdpLblMsgIdTlv_t
*, u_char
*, int);
1763 int Mpls_decodeLdpLblMsgIdTlv(mplsLdpLblMsgIdTlv_t
*, u_char
*, int);
1764 int Mpls_encodeLdpPathVectorTlv(mplsLdpPathTlv_t
*, u_char
*, int);
1765 int Mpls_decodeLdpPathVectorTlv(mplsLdpPathTlv_t
*, u_char
*, int, u_short
);
1766 int Mpls_encodeLdpLblMapMsg(mplsLdpLblMapMsg_t
*, u_char
*, int);
1767 int Mpls_decodeLdpLblMapMsg(mplsLdpLblMapMsg_t
*, u_char
*, int);
1768 int Mpls_encodeLdpFecAdrEl(mplsFecElement_t
*, u_char
*, int, u_char
);
1769 int Mpls_decodeLdpFecAdrEl(mplsFecElement_t
*, u_char
*, int, u_char
);
1770 int Mpls_encodeLdpLblRetMsgIdTlv(mplsLdpLblRetMsgIdTlv_t
*, u_char
*, int);
1771 int Mpls_decodeLdpLblRetMsgIdTlv(mplsLdpLblRetMsgIdTlv_t
*, u_char
*, int);
1772 int Mpls_encodeLdpLbl_W_R_Msg(mplsLdpLbl_W_R_Msg_t
*, u_char
*, int);
1773 int Mpls_decodeLdpLbl_W_R_Msg(mplsLdpLbl_W_R_Msg_t
*, u_char
*, int);
1774 int Mpls_encodeLdpERTlv(mplsLdpErTlv_t
*, u_char
*, int);
1775 int Mpls_decodeLdpERTlv(mplsLdpErTlv_t
*, u_char
*, int, u_short
);
1776 int Mpls_encodeLdpErHop(mplsLdpErHop_t
*, u_char
*, int, u_short
);
1777 int Mpls_decodeLdpErHop(mplsLdpErHop_t
*, u_char
*, int, u_short
*);
1778 int Mpls_encodeLdpTrafficTlv(mplsLdpTrafficTlv_t
*, u_char
*, int);
1779 int Mpls_decodeLdpTrafficTlv(mplsLdpTrafficTlv_t
*, u_char
*, int, u_short
);
1780 int Mpls_encodeLdpLblReqMsg(mplsLdpLblReqMsg_t
*, u_char
*, int);
1781 int Mpls_decodeLdpLblReqMsg(mplsLdpLblReqMsg_t
*, u_char
*, int);
1782 int Mpls_encodeLdpPreemptTlv(mplsLdpPreemptTlv_t
*, u_char
*, int);
1783 int Mpls_decodeLdpPreemptTlv(mplsLdpPreemptTlv_t
*, u_char
*, int);
1784 int Mpls_encodeLdpLspIdTlv(mplsLdpLspIdTlv_t
*, u_char
*, int);
1785 int Mpls_decodeLdpLspIdTlv(mplsLdpLspIdTlv_t
*, u_char
*, int);
1786 int Mpls_encodeLdpResClsTlv(mplsLdpResClsTlv_t
*, u_char
*, int);
1787 int Mpls_decodeLdpResClsTlv(mplsLdpResClsTlv_t
*, u_char
*, int);
1788 int Mpls_encodeLdpPinningTlv(mplsLdpPinningTlv_t
*, u_char
*, int);
1789 int Mpls_decodeLdpPinningTlv(mplsLdpPinningTlv_t
*, u_char
*, int);
1790 int Mpls_encodeLdpLblAbortMsg(mplsLdpLblAbortMsg_t
*, u_char
*, int);
1791 int Mpls_decodeLdpLblAbortMsg(mplsLdpLblAbortMsg_t
*, u_char
*, int);
1794 * DEBUG function declarations
1797 void printTlv(mpls_instance_handle handle
, mplsLdpTlv_t
*);
1798 void printHeader(mpls_instance_handle handle
, mplsLdpHeader_t
*);
1799 void printCspFlags(mpls_instance_handle handle
, mplsLdpCspFlag_t
*);
1800 void printCspFlagsPerByte(mpls_instance_handle handle
, u_short
*);
1801 void printCspTlv(mpls_instance_handle handle
, mplsLdpCspTlv_t
*);
1802 void printAspFlags(mpls_instance_handle handle
, mplsLdpSPFlag_t
*);
1803 void printAspFlagsPerByte(mpls_instance_handle handle
, u_int
*);
1804 void printAspTlv(mpls_instance_handle handle
, mplsLdpAspTlv_t
*);
1805 void printFspFlags(mpls_instance_handle handle
, mplsLdpSPFlag_t
*);
1806 void printFspTlv(mpls_instance_handle handle
, mplsLdpFspTlv_t
*);
1807 void printRetMsgTlv(mpls_instance_handle handle
, mplsLdpRetMsgTlv_t
*);
1808 void printRetPduTlv(mpls_instance_handle handle
, mplsLdpRetPduTlv_t
*);
1809 void printExStatusTlv(mpls_instance_handle handle
, mplsLdpExStatusTlv_t
*);
1810 void printStatusTlv(mpls_instance_handle handle
, mplsLdpStatusTlv_t
*);
1811 void printCsnTlv(mpls_instance_handle handle
, mplsLdpCsnTlv_t
*);
1812 void printTrAdrTlv(mpls_instance_handle handle
, mplsLdpTrAdrTlv_t
*);
1813 void printChpTlv(mpls_instance_handle handle
, mplsLdpChpTlv_t
*);
1814 void printAdrListTlv(mpls_instance_handle handle
, mplsLdpAdrTlv_t
*);
1815 void printFecListTlv(mpls_instance_handle handle
, mplsLdpFecTlv_t
*);
1816 void printLblMsgIdTlv(mpls_instance_handle handle
, mplsLdpLblMsgIdTlv_t
*);
1817 void printPathVecTlv(mpls_instance_handle handle
, mplsLdpPathTlv_t
*);
1818 void printHopTlv(mpls_instance_handle handle
, mplsLdpHopTlv_t
*);
1819 void printFrLblTlv(mpls_instance_handle handle
, mplsLdpFrLblTlv_t
*);
1820 void printAtmLblTlv(mpls_instance_handle handle
, mplsLdpAtmLblTlv_t
*);
1821 void printGenLblTlv(mpls_instance_handle handle
, mplsLdpGenLblTlv_t
*);
1822 void printErFlags(mpls_instance_handle handle
, mplsLdpErFlag_t
*);
1823 void printErIPFlags(mpls_instance_handle handle
, mplsLdpErIPFlag_t
*);
1824 void printErTlv(mpls_instance_handle handle
, mplsLdpErTlv_t
*);
1825 void printTrafficTlv(mpls_instance_handle handle
, mplsLdpTrafficTlv_t
*);
1826 void printAtmLabel(mpls_instance_handle handle
, mplsLdpAtmLblRng_t
*, int);
1827 void printFspLabel(mpls_instance_handle handle
, mplsLdpFrLblRng_t
*, int);
1828 void printErHop(mpls_instance_handle handle
, mplsLdpErHop_t
*, u_short
);
1829 void printPreemptTlv(mpls_instance_handle handle
, mplsLdpPreemptTlv_t
*);
1830 void printLspIdTlv(mpls_instance_handle handle
, mplsLdpLspIdTlv_t
*);
1831 void printResClsTlv(mpls_instance_handle handle
, mplsLdpResClsTlv_t
*);
1832 void printPinningTlv(mpls_instance_handle handle
, mplsLdpPinningTlv_t
*);
1834 void printInitMsg(mpls_instance_handle handle
, mplsLdpInitMsg_t
*);
1835 void printHelloMsg(mpls_instance_handle handle
, mplsLdpHelloMsg_t
*);
1836 void printNotMsg(mpls_instance_handle handle
, mplsLdpNotifMsg_t
*);
1837 void printKeepAliveMsg(mpls_instance_handle handle
, mplsLdpKeepAlMsg_t
*);
1838 void printAddressMsg(mpls_instance_handle handle
, mplsLdpAdrMsg_t
*);
1839 void printLlbMapMsg(mpls_instance_handle handle
, mplsLdpLblMapMsg_t
*);
1840 void printLlbReqMsg(mpls_instance_handle handle
, mplsLdpLblReqMsg_t
*);
1841 void printLbl_W_R_Msg(mpls_instance_handle handle
, mplsLdpLbl_W_R_Msg_t
*);
1842 void printLlbAbortMsg(mpls_instance_handle handle
, mplsLdpLblAbortMsg_t
*);
1844 int converAsciiToHex(u_char
*, int, u_char
*);
1845 int converHexToAscii(u_char
*, int, u_char
*);
1847 #endif /* _LDP_MPLS_H_ */