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 "mpls_bitfield.h"
165 #include <sys/types.h>
168 #define MEM_COPY(X, Y, Z) memcpy(X, Y, Z)
170 /* macros used to decode the entire LDP; they declare local var for
171 different type of messages */
174 #define PRINT_OUT(args...)
175 #define PRINT_ERR(args...)
178 * MESSAGE TYPE CONSTANS & TLV CONSTANTS
181 #define MPLS_LDP_HDRSIZE 10 /* the size for mpls ldp hdr */
182 #define MPLS_TLVFIXLEN 4 /* type + len */
183 #define MPLS_MSGIDFIXLEN 4 /* type + len */
184 #define MPLS_LDPIDLEN 6
185 #define MPLS_PDUMAXLEN 4096 /* octets */
186 #define MPLS_VERSION 0x0001
187 #define MPLS_IPV4ADDRFAMILYN 0x0100 /* rfc 1700 (network order) */
188 #define MPLS_INIFINITE_TIMEVAL 0xfffff
190 /* for initialize message */
191 #define MPLS_INIT_MSGTYPE 0x0200 /* initialization msg */
192 #define MPLS_CSP_TLVTYPE 0x0500 /* common params for init msg */
193 #define MPLS_ASP_TLVTYPE 0x0501 /* atm session params */
194 #define MPLS_FSP_TLVTYPE 0x0502 /* frame relay session params */
195 #define MPLS_ASPFIXLEN 4 /* M + N + D + res */
196 #define MPLS_FSPFIXLEN 4 /* M + N + res */
197 #define MPLS_CSPFIXLEN 14 /* protocolV + ... + ldp ids */
198 #define MPLS_ATMLBLMAXLEN 10
199 #define MPLS_ATMLRGFIXLEN 8
200 #define MPLS_FRLRGFIXLEN 8
201 #define MPLS_ASP_NOMERGE 0
202 #define MPLS_ASP_VPMERGE 1
203 #define MPLS_ASP_VCMERGE 2
204 #define MPLS_ASP_VPVCMERGE 3
205 #define MPLS_FRLBLMAXLEN 10
206 #define MPLS_FRDLCI10BITS 0
207 #define MPLS_FRDLCI17BITS 1
208 #define MPLS_FRDLCI23BITS 2
210 /* for notification message */
211 #define MPLS_NOT_MSGTYPE 0x0001 /* notification msg */
212 #define MPLS_NOT_ST_TLVTYPE 0x0300 /* status tlv for not msg */
213 #define MPLS_NOT_ES_TLVTYPE 0x0301 /* extended status for not msg */
214 #define MPLS_NOT_RP_TLVTYPE 0x0302 /* returned PDU for not msg */
215 #define MPLS_NOT_RM_TLVTYPE 0x0303 /* returned msg for not msg */
216 #define MPLS_STATUSFIXLEN 10 /* status code + id + type */
217 #define MPLS_EXSTATUSLEN 4
218 #define MPLS_NOT_MAXSIZE MPLS_PDUMAXLEN - MPLS_TLVFIXLEN - \
221 /* for hello message */
222 #define MPLS_HELLO_MSGTYPE 0x0100 /* hello msg */
223 #define MPLS_CHP_TLVTYPE 0x0400 /* Common Hello Param Tlv */
224 #define MPLS_TRADR_TLVTYPE 0x0401 /* Transport Address Param Tlv */
225 #define MPLS_CSN_TLVTYPE 0x0402 /* Conf Seq Number Param Tlv */
226 #define MPLS_CHPFIXLEN 4
227 #define MPLS_CSNFIXLEN 4
228 #define MPLS_TRADRFIXLEN 4
230 /* for keep alive message */
231 #define MPLS_KEEPAL_MSGTYPE 0x0201 /* keep alive msg */
233 /* for address messages */
234 #define MPLS_ADDR_MSGTYPE 0x0300 /* address msg */
235 #define MPLS_ADDRWITH_MSGTYPE 0x0301 /* address withdraw msg */
236 #define MPLS_ADDRLIST_TLVTYPE 0x0101 /* addrss list tlv type */
237 #define MPLS_IPv4LEN 4
238 #define MPLS_ADDFAMFIXLEN 2
239 #define MPLS_ADDLISTMAXLEN (MPLS_PDUMAXLEN - (2*MPLS_TLVFIXLEN) - \
240 MPLS_MSGIDFIXLEN - MPLS_ADDFAMFIXLEN)
241 #define MPLS_MAXNUMBERADR MPLS_ADDLISTMAXLEN / 4
243 /* for label mapping message */
244 #define MPLS_LBLMAP_MSGTYPE 0x0400 /* label mapping msg */
245 #define MPLS_FEC_TLVTYPE 0x0100 /* label mapping msg */
246 #define MPLS_GENLBL_TLVTYPE 0x0200 /* generic label tlv */
247 #define MPLS_ATMLBL_TLVTYPE 0x0201 /* atm label tlv */
248 #define MPLS_FRLBL_TLVTYPE 0x0202 /* frame relay label tlv */
249 #define MPLS_HOPCOUNT_TLVTYPE 0x0103 /* ho count tlv */
250 #define MPLS_PATH_TLVTYPE 0x0104 /* path vector tlv */
251 #define MPLS_REQMSGID_TLVTYPE 0x0600 /* lbl request msg id tlv */
252 #define MPLS_WC_FEC 0x01 /* wildcard fec element */
253 #define MPLS_PREFIX_FEC 0x02 /* prefix fec element */
254 #define MPLS_HOSTADR_FEC 0x03 /* host addr fec element */
255 #define MPLS_CRLSP_FEC 0x04 /* crlsp fec element */
256 #define MPLS_FECMAXLEN (MPLS_PDUMAXLEN - (2*MPLS_TLVFIXLEN) - \
258 #define MPLS_LBLFIXLEN 4 /* v + vpi + vci + res */
259 #define MPLS_HOPCOUNTFIXLEN 1 /* v + vpi + vci + res */
260 #define MPLS_FEC_ELEMTYPELEN 1
261 #define MPLS_FEC_PRELENLEN 1
262 #define MPLS_FEC_ADRFAMLEN 2
263 #define MPLS_FEC_CRLSPLEN 4 /* length of cr lsp fec */
264 #define MPLS_MAXHOPSNUMBER 20 /* max # hops in path vector */
265 #define MPLS_MAXNUMFECELEMENT 10 /* max # of fec elements */
267 /* for label request message */
268 #define MPLS_LBLREQ_MSGTYPE 0x0401 /* label request msg */
269 #define MPLS_LBLMSGID_TLVTYPE 0x0601 /* lbl return msg id tlv */
270 #define MPLS_ADR_FEC_FIXLEN (MPLS_FEC_ELEMTYPELEN + MPLS_FEC_PRELENLEN + MPLS_FEC_ADRFAMLEN)
272 /* for label withdraw and release messages */
273 #define MPLS_LBLWITH_MSGTYPE 0x0402 /* label withdraw msg */
274 #define MPLS_LBLREL_MSGTYPE 0x0403 /* label release msg */
277 #define MPLS_ER_TLVTYPE 0x0800 /* constraint routing tlv */
278 #define MPLS_TRAFFIC_TLVTYPE 0x0810 /* traffic parameters tlv */
279 #define MPLS_PDR_TLVTYPE 0x0811 /* traffic peak data rate tlv */
280 #define MPLS_CDR_TLVTYPE 0x0812 /* committed data rate tlv */
281 #define MPLS_CBT_TLVTYPE 0x0813 /* committed burst tolerance */
282 #define MPLS_PREEMPT_TLVTYPE 0x0820 /* preemption tlv */
283 #define MPLS_LSPID_TLVTYPE 0x0821 /* lspid tlv */
284 #define MPLS_RESCLASS_TLVTYPE 0x0822 /* resource class tlv */
285 #define MPLS_PINNING_TLVTYPE 0x0823 /* route pinning tlv */
286 #define MPLS_ERHOP_IPV4_TLVTYPE 0x801 /* explicit routing ipv4 tlv */
287 #define MPLS_ERHOP_IPV6_TLVTYPE 0x802 /* explicit routing ipv6 tlv */
288 #define MPLS_ERHOP_AS_TLVTYPE 0x803 /* explicit routing autonomous
290 #define MPLS_ERHOP_LSPID_TLVTYPE 0x804 /* explicit routing lspid tlv */
291 #define MPLS_ERHOP_IPV4_FIXLEN 8 /* fix length in bytes */
292 #define MPLS_ERHOP_IPV6_FIXLEN 20 /* fix length in bytes */
293 #define MPLS_ERHOP_AS_FIXLEN 4 /* fix length in bytes */
294 #define MPLS_ERHOP_LSPID_FIXLEN 8 /* fix length in bytes */
295 #define MPLS_IPV6ADRLENGTH 16
296 #define MPLS_MAX_ER_HOPS 20 /* decent number of hops;
297 change if required */
298 #define MPLS_PREEMPTTLV_FIXLEN 4 /* setPrio + holdPrio + res */
299 #define MPLS_LSPIDTLV_FIXLEN 8 /* res + crlspId + routerId */
300 #define MPLS_TRAFFICPARAMLENGTH 4 /* traffic parameters length */
302 /* for label abort request message */
303 #define MPLS_LBLABORT_MSGTYPE 0x0404 /* label abort request msg */
309 #define MPLS_ENC_BUFFTOOSMALL -1
310 #define MPLS_DEC_BUFFTOOSMALL -2
311 #define MPLS_ENC_TLVERROR -3
312 #define MPLS_DEC_TLVERROR -4
313 #define MPLS_ENC_ATMLBLERROR -5
314 #define MPLS_DEC_ATMLBLERROR -6
315 #define MPLS_ENC_BASEMSGERROR -7
316 #define MPLS_DEC_BASEMSGERROR -8
317 #define MPLS_ENC_CSPERROR -9
318 #define MPLS_DEC_CSPERROR -10
319 #define MPLS_ENC_ASPERROR -11
320 #define MPLS_DEC_ASPERROR -12
321 #define MPLS_ENC_FSPERROR -13
322 #define MPLS_DEC_FSPERROR -14
323 #define MPLS_ENC_STATUSERROR -16
324 #define MPLS_DEC_STATUSERROR -17
325 #define MPLS_ENC_EXSTATERROR -18
326 #define MPLS_DEC_EXSTATERROR -19
327 #define MPLS_ENC_RETPDUERROR -20
328 #define MPLS_DEC_RETPDUERROR -21
329 #define MPLS_ENC_RETMSGERROR -22
330 #define MPLS_DEC_RETMSGERROR -23
331 #define MPLS_PDU_LENGTH_ERROR -24
332 #define MPLS_ENC_CHPERROR -25
333 #define MPLS_DEC_CHPERROR -26
334 #define MPLS_ENC_CSNERROR -27
335 #define MPLS_DEC_CSNERROR -28
336 #define MPLS_ENC_TRADRERROR -29
337 #define MPLS_DEC_TRADRERROR -30
338 #define MPLS_ENC_ADRLISTERROR -31
339 #define MPLS_DEC_ADRLISTERROR -32
340 #define MPLS_WC_FECERROR -33
341 #define MPLS_PATHVECTORERROR -34
342 #define MPLS_ENC_FECERROR -35
343 #define MPLS_DEC_FECERROR -36
344 #define MPLS_ENC_GENLBLERROR -37
345 #define MPLS_DEC_GENLBLERROR -38
346 #define MPLS_ENC_MAPATMERROR -39
347 #define MPLS_DEC_MAPATMERROR -40
348 #define MPLS_ENC_FRLBLERROR -41
349 #define MPLS_DEC_FRLBLERROR -42
350 #define MPLS_ENC_COSERROR -43
351 #define MPLS_DEC_COSERROR -44
352 #define MPLS_ENC_HOPCOUNTERROR -45
353 #define MPLS_DEC_HOPCOUNTERROR -46
354 #define MPLS_ENC_PATHVECERROR -47
355 #define MPLS_DEC_PATHVECERROR -48
356 #define MPLS_ENC_LBLMSGIDERROR -49
357 #define MPLS_DEC_LBLMSGIDERROR -50
358 #define MPLS_ENC_HDRTLVERROR -51
359 #define MPLS_DEC_HDRTLVERROR -52
360 #define MPLS_ENC_FECELEMERROR -53
361 #define MPLS_DEC_FECELEMERROR -54
362 #define MPLS_ENC_FSPLBLERROR -55
363 #define MPLS_DEC_FSPLBLERROR -56
364 #define MPLS_ENC_ERHOPERROR -57
365 #define MPLS_DEC_ERHOPERROR -58
366 #define MPLS_ENC_ERTLVERROR -59
367 #define MPLS_DEC_ERTLVERROR -60
368 #define MPLS_ENC_ERHOPLENERROR -61
369 #define MPLS_DEC_ERHOPLENERROR -62
370 #define MPLS_TLVTYPEERROR -63
371 #define MPLS_MSGTYPEERROR -64
372 #define MPLS_FECERROR -65
373 #define MPLS_ENC_TRAFFICERROR -66
374 #define MPLS_DEC_TRAFFICERROR -67
375 #define MPLS_ENC_LSPIDERROR -68
376 #define MPLS_DEC_LSPIDERROR -69
377 #define MPLS_ENC_RESCLSERROR -70
378 #define MPLS_DEC_RESCLSERROR -71
379 #define MPLS_ENC_PREEMPTERROR -72
380 #define MPLS_DEC_PREEMPTERROR -73
381 #define MPLS_ENC_PINNINGERROR -74
382 #define MPLS_DEC_PINNINGERROR -75
383 #define MPLS_FLOATTYPEERROR -76
384 #define MPLS_FECTLVERROR -77
385 #define MPLS_IPV4LENGTHERROR -78
386 #define MPLS_ER_HOPSNUMERROR -79
388 /**********************************************************************
392 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
393 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
394 | Version | PDU Length |
395 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
397 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
399 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
400 **********************************************************************/
402 typedef struct mplsLdpHeader_s
{
403 u_short protocolVersion
;
404 u_short pduLength
; /* length excluding the version and length */
405 u_int lsrAddress
; /* IP address assigned to LSR */
406 u_short labelSpace
; /* within LSR */
410 /**********************************************************************
411 LDP Messages (All LDP messages have the following format:)
414 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
415 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
416 |U| Message Type | Message Length |
417 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
419 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
422 | Mandatory Parameters |
425 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
428 | Optional Parameters |
431 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
432 Note: the U flag is ignored for now. There is not check for its value.
433 **********************************************************************/
435 typedef struct mplsLdpMsgFlag_s
{
436 BITFIELDS_ASCENDING_2(u_short uBit
:1, u_short msgType
:15)
439 typedef struct mplsLdpMsg_s
{
441 struct mplsLdpMsgFlag_s flags
;
445 u_short msgLength
; /* msgId + mandatory param + optional param */
446 u_int msgId
; /* used to identify the notification msg */
450 typedef struct mplsLdpUnknownMsg_s
{
451 struct mplsLdpMsg_s baseMsg
;
452 u_char data
[MPLS_NOT_MAXSIZE
];
454 } mplsLdpUnknownMsg_t
;
456 /**********************************************************************
457 Type-Length-Value Encoding
460 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
461 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
462 |U|F| Type | Length |
463 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
468 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
470 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
471 Note: the decode functions for tlv do not check the values for
472 F flag. They check only the value of the U flag; if
473 it is set will ignore the tlv and keep processing the message;
474 otherwise will ignore the message and return error. Please note
475 that the unknown tlv which is skipped will not be stored anywhere.
476 **********************************************************************/
478 typedef struct mplsLdpTlvFlag_s
{
479 BITFIELDS_ASCENDING_3(u_short uBit
:1, u_short fBit
:1, u_short tBit
:14)
482 typedef struct mplsLdpTlv_s
{
484 struct mplsLdpTlvFlag_s flags
;
488 u_short length
; /* length of the value field */
492 /**********************************************************************
493 Common Session Parameters TLV
496 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
497 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
498 |U|F| Common Sess Parms (0x0500)| Length |
499 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
500 | Protocol Version | Keep Alive Time |
501 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
502 |A|D| Reserved | PVLim | Max PDU Length |
503 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
504 | Receiver LDP Identifer |
505 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
507 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++
508 ***********************************************************************/
510 typedef struct mplsLdpCspFlag_s
{
511 BITFIELDS_ASCENDING_4(u_short lad
:1, /* 1 = downstream on demand */
512 u_short ld
:1, /* loop detection */
513 u_short res
:6, /* reserved */
514 u_short pvl
:8 /* path vec limit */
518 typedef struct mplsLdpCspTlv_s
{
519 struct mplsLdpTlv_s baseTlv
;
520 u_short protocolVersion
;
521 u_short holdTime
; /* proposed keep alive interval */
524 struct mplsLdpCspFlag_s flags
;
534 /***********************************************************************
535 ATM Label Range Component
538 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
539 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
540 | Res | Minimum VPI | Minimum VCI |
541 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
542 | Res | Maximum VPI | Maximum VCI |
543 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
544 ***********************************************************************/
546 typedef struct mplsLdpAtmLblRngFlag_s
{
547 BITFIELDS_ASCENDING_3(u_int res1
:4, /* reserved : 0 on transmision */
548 u_int minVpi
:12, /* if <12 bits right justified */
549 u_int minVci
:16 /* if <16 bits right justified */
551 BITFIELDS_ASCENDING_3(u_int res2
:4, /* reserved : 0 on transmision */
552 u_int maxVpi
:12, /* if <12 bits right justified */
553 u_int maxVci
:16 /* if <16 bits right justified */
555 } mplsLdpAtmLblRngFlag_t
;
557 typedef struct mplsLdpAtmLblRng_s
{
559 struct mplsLdpAtmLblRngFlag_s flags
;
562 } mplsLdpAtmLblRng_t
;
564 /***********************************************************************
565 Flags for ATM Session Parameters TLV and
566 Frame Relay Session Parameters TLV
568 Note: both types of session parameters have the same type of flags;
569 use then the same struct
570 ***********************************************************************/
572 typedef struct mplsLdpSPFlag_s
{
573 BITFIELDS_ASCENDING_4(u_int mergeType
:2, /* merge typ */
574 u_int numLblRng
:4, /* # of label range com */
575 u_int dir
:1, /* 0 => bidirectional */
579 /***********************************************************************
580 ATM Session Parameters TLV
583 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
584 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
585 |U|F| ATM Sess Parms (0x0501) | Length |
586 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
587 | M | N |D| Reserved |
588 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
589 | ATM Label Range Component 1 |
590 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
594 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
595 | ATM Label Range Component N |
596 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
597 ***********************************************************************/
599 typedef struct mplsLdpAspTlv_s
{
600 struct mplsLdpTlv_s baseTlv
;
602 struct mplsLdpSPFlag_s flags
;
605 struct mplsLdpAtmLblRng_s lblRngList
[MPLS_ATMLBLMAXLEN
];
609 /***********************************************************************
610 Frame Relay Label Range Component
613 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
614 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
615 | Reserved |Len| Minimum DLCI |
616 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
617 | Reserved | Maximum DLCI |
618 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
619 ***********************************************************************/
621 typedef struct mplsLdpFrFlag_s
{
622 BITFIELDS_ASCENDING_3(u_int res_min
:7, u_int len
:2, u_int minDlci
:23)
623 BITFIELDS_ASCENDING_2(u_int res_max
:9, u_int maxDlci
:23)
626 typedef struct mplsLdpFrLblRng_s
{
628 struct mplsLdpFrFlag_s flags
;
634 /**********************************************************************
635 Frame Relay Session Parameters TLV
638 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
639 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
640 |U|F| FR Sess Parms (0x0502) | Length |
641 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
642 | M | N |D| Reserved |
643 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
644 | Frame Relay Label Range Component 1 |
645 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
649 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
650 | Frame Relay Label Range Component N |
651 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
652 ***********************************************************************/
654 typedef struct mplsLdpFspTlv_s
{
655 struct mplsLdpTlv_s baseTlv
;
657 struct mplsLdpSPFlag_s flags
;
660 struct mplsLdpFrLblRng_s lblRngList
[MPLS_FRLBLMAXLEN
];
664 /***********************************************************************
665 Initialization Message Encoding
668 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
669 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
670 |U| Initialization (0x0200) | Message Length |
671 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
673 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
674 | Common Session Parameters TLV |
675 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
676 | Optional Parameters |
677 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
678 ***********************************************************************/
680 typedef struct mplsLdpInitMsg_s
{
681 struct mplsLdpMsg_s baseMsg
;
682 struct mplsLdpCspTlv_s csp
;
683 struct mplsLdpAspTlv_s asp
;
684 struct mplsLdpFspTlv_s fsp
;
691 /***********************************************************************
695 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
696 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
698 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
699 ***********************************************************************/
700 typedef struct mplsLdpStautsFlag_s
{
701 BITFIELDS_ASCENDING_3(u_int error
:1, /* E bit */
702 u_int forward
:1, /* F bit */
704 } mplsLdpStautsFlag_t
;
706 /***********************************************************************
707 Status (TLV) Encoding
710 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
711 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
712 |U|F| Status (0x0300) | Length |
713 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
715 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
717 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
719 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
720 ***********************************************************************/
722 typedef struct mplsLdpStatusTlv_s
{
723 struct mplsLdpTlv_s baseTlv
;
725 struct mplsLdpStautsFlag_s flags
;
731 } mplsLdpStatusTlv_t
;
733 /***********************************************************************
734 Extended Status (TLV) Encoding
735 ***********************************************************************/
737 typedef struct mplsLdpExStatusTlv_s
{
738 struct mplsLdpTlv_s baseTlv
;
739 u_int value
; /* additional info for status */
741 } mplsLdpExStatusTlv_t
;
743 /***********************************************************************
744 Returned PDU (TLV) Encoding
745 ***********************************************************************/
747 typedef struct mplsLdpRetPduTlv_s
{
748 struct mplsLdpTlv_s baseTlv
;
749 struct mplsLdpHeader_s headerTlv
;
750 u_char data
[MPLS_NOT_MAXSIZE
];
752 } mplsLdpRetPduTlv_t
;
754 /***********************************************************************
755 Returned MSG (TLV) Encoding
756 ***********************************************************************/
758 typedef struct mplsLdpRetMsgTlv_s
{
759 struct mplsLdpTlv_s baseTlv
;
762 u_char data
[MPLS_NOT_MAXSIZE
];
764 } mplsLdpRetMsgTlv_t
;
766 /***********************************************************************
770 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
771 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
772 |U|F| LSPID-TLV (0x0821) | Length |
773 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
774 | Reserved | Local CRLSP ID |
775 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
776 | Ingress LSR Router ID |
777 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
778 ***********************************************************************/
780 typedef struct mplsLdpLspIdTlv_s
{
781 struct mplsLdpTlv_s baseTlv
;
783 u_short localCrlspId
;
784 u_int routerId
; /* ingress lsr router id */
788 /***********************************************************************
789 Notification Message Encoding
792 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
793 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
794 |U| Notification (0x0001) | Message Length |
795 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
797 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
799 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
800 | Optional Parameters |
801 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
802 | LSPID TLV (optional for CR-LDP) |
803 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
804 ***********************************************************************/
806 typedef struct mplsLdpNotifMsg_s
{
807 struct mplsLdpMsg_s baseMsg
;
808 struct mplsLdpStatusTlv_s status
;
809 struct mplsLdpExStatusTlv_s exStatus
; /* extended status tlv */
810 struct mplsLdpRetPduTlv_s retPdu
; /* returned PDU tlv */
811 struct mplsLdpRetMsgTlv_s retMsg
; /* returned MSG tlv */
812 struct mplsLdpLspIdTlv_s lspidTlv
; /* lspid tlv */
814 u_char statusTlvExists
:1;
815 u_char exStatusTlvExists
:1;
816 u_char retPduTlvExists
:1;
817 u_char retMsgTlvExists
:1;
818 u_char lspidTlvExists
:1;
822 /***********************************************************************
823 Common Hello Parameters Tlv encoding
826 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
827 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
828 |U|F| Common Hello Parms(0x0400)| Length |
829 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
830 | Hold Time |T|R| Reserved |
831 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
832 ***********************************************************************/
833 typedef struct mplsLdpChpFlag_s
{
834 BITFIELDS_ASCENDING_3(u_short target
:1, /* T bit */
835 u_short request
:1, /* R bit */
839 typedef struct mplsLdpChpTlv_s
{
840 struct mplsLdpTlv_s baseTlv
;
843 struct mplsLdpChpFlag_s flags
;
849 /***********************************************************************
850 Transport Address (TLV) Encoding
851 ***********************************************************************/
853 typedef struct mplsLdpTrAdrTlv_s
{
854 struct mplsLdpTlv_s baseTlv
;
859 /***********************************************************************
860 Configuration Sequence Number (TLV) Encoding
861 ***********************************************************************/
863 typedef struct mplsLdpCsnTlv_s
{
864 struct mplsLdpTlv_s baseTlv
;
869 /***********************************************************************
870 Hello message encoding
873 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
874 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
875 |U| Hello (0x0100) | Message Length |
876 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
878 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
879 | Common Hello Parameters TLV |
880 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
881 | Optional Parameters |
882 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
883 ***********************************************************************/
885 typedef struct mplsLdpHelloMsg_s
{
886 struct mplsLdpMsg_s baseMsg
;
887 struct mplsLdpChpTlv_s chp
; /* common hello param tlv */
888 struct mplsLdpTrAdrTlv_s trAdr
; /* transport address tlv */
889 struct mplsLdpCsnTlv_s csn
; /* configuration seq # tlv */
890 u_char chpTlvExists
:1;
891 u_char trAdrTlvExists
:1;
892 u_char csnTlvExists
:1;
896 /***********************************************************************
897 KeepAlive Message encoding
900 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
901 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
902 |U| KeepAlive (0x0201) | Message Length |
903 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
905 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
906 | Optional Parameters |
907 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
909 Note: there are no optional param defined for keep alive.
910 ***********************************************************************/
912 typedef struct mplsLdpKeepAlMsg_s
{
913 struct mplsLdpMsg_s baseMsg
;
915 } mplsLdpKeepAlMsg_t
;
917 /***********************************************************************
918 Address List TLV encoding
921 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
922 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
923 |U|F| Address List (0x0101) | Length |
924 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
926 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
931 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
932 ***********************************************************************/
934 typedef struct mplsLdpAdrTlv_s
{
935 struct mplsLdpTlv_s baseTlv
;
937 u_int address
[MPLS_MAXNUMBERADR
];
941 /***********************************************************************
942 Address (0x0300) / Address Withdraw(0x0301) message encoding
945 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
946 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
947 |U| Address | Message Length |
948 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
950 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
954 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
955 | Optional Parameters |
956 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
958 Note: there are no optional param defined for address message.
959 ***********************************************************************/
961 typedef struct mplsLdpAdrMsg_s
{
962 struct mplsLdpMsg_s baseMsg
;
963 struct mplsLdpAdrTlv_s addressList
;
964 u_char adrListTlvExists
:1;
968 /***********************************************************************
969 Wildcard FEC Element encoding
970 ***********************************************************************/
972 typedef struct mplsLdpWildFec_s
{
977 /***********************************************************************
978 Prefix FEC Element encoding
981 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
982 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
983 | Prefix (2) | Address Family | PreLen |
984 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
986 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
988 Host Address FEC Element encoding
990 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
991 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
992 | Host Addr (3) | Address Family | Host Addr Len |
993 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
995 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
997 Note: the code handles prefixes and host addresses whose length is
998 less or equal to 4 bytes.
999 ***********************************************************************/
1001 typedef struct mplsLdpAddressFec_s
{
1004 u_char preLen
; /* prefix FEC: length of the adr prefix (in bits)
1005 or host adr FEC: length of the host address (in
1009 } mplsLdpAddressFec_t
;
1011 /***********************************************************************
1012 CRLSP FEC Element encoding
1015 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
1016 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1017 | CR-LSP (4) | Reserved |
1018 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1019 ***********************************************************************/
1021 typedef struct mplsLdpCrlspFec_s
{
1023 u_char res1
; /* reserved */
1024 u_short res2
; /* reserved */
1026 } mplsLdpCrlspFec_t
;
1028 /***********************************************************************
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 |U|F| FEC (0x0100) | Length |
1035 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1037 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1041 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1043 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1044 ***********************************************************************/
1046 typedef union mplsFecElement_u
{
1047 struct mplsLdpAddressFec_s addressEl
; /* prefix | host adr */
1048 struct mplsLdpWildFec_s wildcardEl
; /* for wilcard fec */
1049 struct mplsLdpCrlspFec_s crlspEl
; /* CRLSP fec elem */
1053 typedef struct mplsLdpFecTlv_s
{
1054 struct mplsLdpTlv_s baseTlv
;
1055 union mplsFecElement_u fecElArray
[MPLS_MAXNUMFECELEMENT
];
1056 u_short fecElemTypes
[MPLS_MAXNUMFECELEMENT
];
1057 u_char wcElemExists
:1;
1058 u_short numberFecElements
;
1062 /***********************************************************************
1063 Generic Label Tlv encoding
1066 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
1067 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1068 |U|F| Generic Label (0x0200) | Length |
1069 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1071 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1072 ***********************************************************************/
1074 typedef struct mplsLdpGenLblTlv_s
{
1075 struct mplsLdpTlv_s baseTlv
;
1076 u_int label
; /* 20-bit number in 4 octet field */
1078 } mplsLdpGenLblTlv_t
;
1080 /***********************************************************************
1081 Atm Label Tlv encoding
1084 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
1085 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1086 |U|F| ATM Label (0x0201) | Length |
1087 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1088 |Res| V | VPI | VCI |
1089 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1090 ***********************************************************************/
1092 typedef struct mplsLdpAtmLblFlag_s
{
1093 BITFIELDS_ASCENDING_3(u_short res
:2, u_short v
:2, u_short vpi
:12)
1094 } mplsLdpAtmLblFlag_t
;
1096 typedef struct mplsLdpAtmLblTlv_s
{
1097 struct mplsLdpTlv_s baseTlv
;
1100 struct mplsLdpAtmLblFlag_s flags
;
1106 } mplsLdpAtmLblTlv_t
;
1108 /***********************************************************************
1109 Frame Relay Label Tlv encoding
1112 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
1113 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1114 |U|F| Frame Relay Label (0x0202)| Length |
1115 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1116 | Reserved |Len| DLCI |
1117 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1118 ***********************************************************************/
1120 typedef struct mplsLdpFrLblFlag_s
{
1121 BITFIELDS_ASCENDING_3(u_int res
:7, u_int len
:2, u_int dlci
:23)
1123 } mplsLdpFrLblFlag_t
;
1125 typedef struct mplsLdpFrLblTlv_s
{
1126 struct mplsLdpTlv_s baseTlv
;
1129 struct mplsLdpFrLblFlag_s flags
;
1133 } mplsLdpFrLblTlv_t
;
1135 /***********************************************************************
1136 Hop Count Tlv encoding
1139 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
1140 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1141 |U|F| Hop Count (0x0103) | Length |
1142 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1145 ***********************************************************************/
1147 typedef struct mplsLdpHopTlv_s
{
1148 struct mplsLdpTlv_s baseTlv
;
1149 u_char hcValue
; /* hop count value */
1153 /***********************************************************************
1154 Path Vector Tlv encoding
1157 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
1158 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1159 |U|F| Path Vector (0x0104) | Length |
1160 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1162 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1166 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1168 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1169 ***********************************************************************/
1171 typedef struct mplsLdpPathTlv_s
{
1172 struct mplsLdpTlv_s baseTlv
;
1173 u_int lsrId
[MPLS_MAXHOPSNUMBER
];
1177 /***********************************************************************
1178 Lbl request message id Tlv encoding
1179 ***********************************************************************/
1181 typedef struct mplsLdpLblMsgIdTlv_s
{
1182 struct mplsLdpTlv_s baseTlv
;
1185 } mplsLdpLblMsgIdTlv_t
;
1187 /***********************************************************************
1188 Preemption Tlv encoding
1191 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
1192 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1193 |U|F| Preemption-TLV (0x0820) | Length |
1194 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1195 | SetPrio | HoldPrio | Reserved |
1196 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1197 ***********************************************************************/
1199 typedef struct mplsLdpPreemptTlv_s
{
1200 struct mplsLdpTlv_s baseTlv
;
1201 u_char setPrio
; /* 0 => most important path */
1202 u_char holdPrio
; /* 0 => most important path */
1205 } mplsLdpPreemptTlv_t
;
1207 /***********************************************************************
1208 Resource class Tlv encoding
1211 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
1212 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1213 |U|F| ResCls-TLV (0x0822) | Length |
1214 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1216 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1217 ***********************************************************************/
1219 typedef struct mplsLdpResClsTlv_s
{
1220 struct mplsLdpTlv_s baseTlv
;
1221 u_int rsCls
; /* resource class bit mask */
1223 } mplsLdpResClsTlv_t
;
1225 /***********************************************************************
1226 Lbl return message id Tlv encoding
1227 ***********************************************************************/
1229 typedef struct mplsLdpRetMsgIdTlv_s
{
1230 struct mplsLdpTlv_s baseTlv
;
1232 } mplsLdpLblRetMsgIdTlv_t
;
1234 /***********************************************************************
1235 ER flag structure which is common to IPV4 and IPV6 ER TLV
1236 ***********************************************************************/
1238 typedef struct mplsLdpErIPFlag_s
{
1239 BITFIELDS_ASCENDING_3(u_int l
:1, /* 0 => loose hop */
1240 u_int res
:23, u_int preLen
:8)
1241 } mplsLdpErIPFlag_t
;
1243 /***********************************************************************
1244 ER flag structure which is common to AS and LSPID ER TLV
1245 ***********************************************************************/
1246 typedef struct mplsLdpErFlag_s
{
1247 BITFIELDS_ASCENDING_2(u_short l
:1, /* 0 => loose hop */
1251 /***********************************************************************
1252 Explicit Routing IPv4 Tlv encoding
1255 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
1256 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1257 |U|F| 0x801 | Length |
1258 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1259 |L| Reserved | PreLen |
1260 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1261 | IPv4 Address (4 bytes) |
1262 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1263 ***********************************************************************/
1265 typedef struct mplsLdpErIpv4_s
{
1266 struct mplsLdpTlv_s baseTlv
;
1268 struct mplsLdpErIPFlag_s flags
;
1275 /***********************************************************************
1276 Explicit Routing IPv6 Tlv encoding
1279 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
1280 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1281 |U|F| 0x802 | Length |
1282 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1283 |L| Reserved | PreLen |
1284 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1286 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1287 | IPV6 address (continued) |
1288 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1289 | IPV6 address (continued) |
1290 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1291 | IPV6 address (continued) |
1292 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1293 ***********************************************************************/
1295 typedef struct mplsLdpErIpv6_s
{
1296 struct mplsLdpTlv_s baseTlv
;
1298 struct mplsLdpErIPFlag_s flags
;
1301 u_char address
[MPLS_IPV6ADRLENGTH
];
1305 /***********************************************************************
1306 Explicit Routing Autonomous systen number Tlv encoding
1309 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
1310 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1311 |U|F| 0x803 | Length |
1312 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1313 |L| Reserved | AS Number |
1314 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1315 ***********************************************************************/
1317 typedef struct mplsLdpErAs_s
{
1318 struct mplsLdpTlv_s baseTlv
;
1320 struct mplsLdpErFlag_s flags
;
1327 /***********************************************************************
1328 Explicit Routing LSPID Tlv encoding
1331 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
1332 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1333 |U|F| 0x804 | Length |
1334 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1335 |L| Reserved | Local LSPID |
1336 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1337 | Ingress LSR Router ID |
1338 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1339 ***********************************************************************/
1341 typedef struct mplsLdpErLspId_s
{
1342 struct mplsLdpTlv_s baseTlv
;
1344 struct mplsLdpErFlag_s flags
;
1352 /***********************************************************************
1353 Constraint Routing Tlv encoding
1356 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
1357 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1358 |U|F| ER-TLV (0x0800) | Length |
1359 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1361 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1363 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1365 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1367 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1368 ***********************************************************************/
1370 typedef union mplsLdpErHop_u
{
1371 struct mplsLdpErIpv4_s erIpv4
;
1372 struct mplsLdpErIpv6_s erIpv6
;
1373 struct mplsLdpErAs_s erAs
;
1374 struct mplsLdpErLspId_s erLspId
;
1378 typedef struct mplsLdpErTlv_s
{
1379 struct mplsLdpTlv_s baseTlv
;
1380 union mplsLdpErHop_u erHopArray
[MPLS_MAX_ER_HOPS
];
1381 u_short erHopTypes
[MPLS_MAX_ER_HOPS
]; /* need to know the
1384 u_short numberErHops
;
1388 /***********************************************************************
1389 Traffic parameters TLV
1392 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
1393 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1394 |U|F| Traf. Param. TLV (0x0810)| Length |
1395 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1396 | Flags | Frequency | Reserved | Weight |
1397 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1398 | Peak Data Rate (PDR) |
1399 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1400 | Peak Burst Size (PBS) |
1401 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1402 | Committed Data Rate (CDR) |
1403 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1404 | Committed Burst Size (CBS) |
1405 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1406 | Excess Burst Size (EBS) |
1407 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1410 +--+--+--+--+--+--+--+--+
1411 | Res |F6|F5|F4|F3|F2|F1|
1412 +--+--+--+--+--+--+--+--+
1413 ***********************************************************************/
1415 typedef struct mplsLdpTrafficFlag_s
{
1416 BITFIELDS_ASCENDING_7(u_char res
:2,
1419 u_char f4Bit
:1, u_char f3Bit
:1, u_char f2Bit
:1, u_char f1Bit
:1)
1420 } mplsLdpTrafficFlag_t
;
1422 typedef struct mplsLdpTrafficTlv_s
{
1423 struct mplsLdpTlv_s baseTlv
;
1425 struct mplsLdpTrafficFlag_s flags
;
1452 } mplsLdpTrafficTlv_t
;
1454 /***********************************************************************
1458 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
1459 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1460 |U|F| 0x823 | Length |
1461 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1463 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1464 ***********************************************************************/
1466 typedef struct mplsLdpPinningTlvFlag_s
{
1467 BITFIELDS_ASCENDING_2(u_int pBit
:1, /* 1 => route pinning requested */
1469 } mplsLdpPinningTlvFlag_t
;
1471 typedef struct mplsLdpPinningTlv_s
{
1472 struct mplsLdpTlv_s baseTlv
;
1474 struct mplsLdpPinningTlvFlag_s flags
;
1477 } mplsLdpPinningTlv_t
;
1479 /***********************************************************************
1480 Label Mapping Message encoding
1483 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
1484 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1485 |U| Label Mapping (0x0400) | Message Length |
1486 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1488 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1490 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1492 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1493 | Label Request Message ID TLV (mandatory) |
1494 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1495 | LSPID TLV (CR-LDP, mandatory) |
1496 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1497 | Traffic TLV (CR-LDP, optional) |
1498 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1499 ***********************************************************************/
1501 typedef struct mplsLdpLblMapMsg_s
{
1502 struct mplsLdpMsg_s baseMsg
;
1505 struct mplsLdpFecTlv_s fecTlv
;
1508 struct mplsLdpGenLblTlv_s genLblTlv
; /* generic label tlv */
1509 struct mplsLdpAtmLblTlv_s atmLblTlv
; /* atm label tlv */
1510 struct mplsLdpFrLblTlv_s frLblTlv
; /* fr label tlv */
1512 /* Optional parameters */
1513 struct mplsLdpHopTlv_s hopCountTlv
; /* hop count tlv */
1514 struct mplsLdpPathTlv_s pathVecTlv
; /* path vector tlv */
1515 struct mplsLdpLblMsgIdTlv_s lblMsgIdTlv
; /* lbl msg id tlv */
1516 struct mplsLdpLspIdTlv_s lspidTlv
; /* lspid tlv */
1517 struct mplsLdpTrafficTlv_s trafficTlv
; /* traffic tlv */
1519 u_char fecTlvExists
:1;
1520 u_char genLblTlvExists
:1;
1521 u_char atmLblTlvExists
:1;
1522 u_char frLblTlvExists
:1;
1523 u_char hopCountTlvExists
:1;
1524 u_char pathVecTlvExists
:1;
1525 u_char lblMsgIdTlvExists
:1;
1526 u_char lspidTlvExists
:1;
1527 u_char trafficTlvExists
:1;
1529 } mplsLdpLblMapMsg_t
;
1531 /***********************************************************************
1532 Label Request Message encoding
1535 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1536 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1537 |U| Label Request (0x0401) | Message Length |
1538 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1540 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1542 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1543 | Return Message ID TLV (mandatory) |
1544 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1545 | LSPID TLV (CR-LDP, mandatory) |
1546 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1547 | ER-TLV (CR-LDP, optional) |
1548 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1549 | Traffic TLV (CR-LDP, optional) |
1550 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1551 | Pinning TLV (CR-LDP, optional) |
1552 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1553 | Resource Class TLV (CR-LDP, optional) |
1554 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1555 | Pre-emption TLV (CR-LDP, optional) |
1556 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1557 ***********************************************************************/
1559 typedef struct mplsLdpLblReqMsg_s
{
1560 struct mplsLdpMsg_s baseMsg
;
1563 struct mplsLdpFecTlv_s fecTlv
;
1565 /* Optional parameters */
1566 struct mplsLdpHopTlv_s hopCountTlv
; /* hop count tlv */
1567 struct mplsLdpPathTlv_s pathVecTlv
; /* path vector tlv */
1569 /* Optional parameters for CR */
1570 struct mplsLdpRetMsgIdTlv_s lblMsgIdTlv
; /* lbl msg id tlv */
1571 struct mplsLdpErTlv_s erTlv
; /* constraint rtg tlv */
1572 struct mplsLdpTrafficTlv_s trafficTlv
; /* traffic tlv */
1573 struct mplsLdpLspIdTlv_s lspidTlv
; /* lspid tlv */
1574 struct mplsLdpPinningTlv_s pinningTlv
; /* pinning tlv */
1575 struct mplsLdpResClsTlv_s resClassTlv
; /* resource class tlv */
1576 struct mplsLdpPreemptTlv_s preemptTlv
; /* peemtion tlv */
1578 u_char fecTlvExists
:1;
1579 u_char hopCountTlvExists
:1;
1580 u_char pathVecTlvExists
:1;
1581 u_char lblMsgIdTlvExists
:1;
1582 u_char erTlvExists
:1;
1583 u_char trafficTlvExists
:1;
1584 u_char lspidTlvExists
:1;
1585 u_char pinningTlvExists
:1;
1586 u_char recClassTlvExists
:1;
1587 u_char preemptTlvExists
:1;
1589 } mplsLdpLblReqMsg_t
;
1591 /***********************************************************************
1593 Label Withdraw Message encoding
1596 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
1597 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1598 |U| Label Withdraw (0x0402) | Message Length |
1599 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1601 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1603 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1604 | Label TLV (optional) |
1605 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1606 | LSPID TLV (optional for CR-LDP) |
1607 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1609 Label Release Message encoding
1612 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
1613 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1614 |U| Label Release (0x0403) | Message Length |
1615 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1617 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1619 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1620 | Label TLV (optional) |
1621 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1622 | LSPID TLV (optional for CR-LDP) |
1623 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1625 Note: the Label Withdraw Message encoding and the Label Release Message enc
1626 look very much the same. I will create only one type of struct for
1628 The Label Withdraw Message and Label Release Message can optionally
1630 ***********************************************************************/
1632 typedef struct mplsLdpLbl_W_R_Msg_s
{
1633 struct mplsLdpMsg_s baseMsg
;
1636 struct mplsLdpFecTlv_s fecTlv
;
1639 struct mplsLdpGenLblTlv_s genLblTlv
; /* generic label tlv */
1640 struct mplsLdpAtmLblTlv_s atmLblTlv
; /* atm label tlv */
1641 struct mplsLdpFrLblTlv_s frLblTlv
; /* fr label tlv */
1642 struct mplsLdpLspIdTlv_s lspidTlv
; /* lspid tlv */
1644 u_char fecTlvExists
:1;
1645 u_char genLblTlvExists
:1;
1646 u_char atmLblTlvExists
:1;
1647 u_char frLblTlvExists
:1;
1648 u_char lspidTlvExists
:1;
1650 } mplsLdpLbl_W_R_Msg_t
;
1652 /***********************************************************************
1653 Label Abort Request Message encoding
1656 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
1657 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1658 |U| Label Abort Req (0x0404) | Message Length |
1659 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1661 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1663 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1664 | Label Request Message ID TLV |
1665 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1666 ***********************************************************************/
1668 typedef struct mplsLdpLblAbortMsg_s
{
1669 struct mplsLdpMsg_s baseMsg
;
1671 struct mplsLdpFecTlv_s fecTlv
; /* fec tlv */
1672 struct mplsLdpLblMsgIdTlv_s lblMsgIdTlv
; /* lbl msg id tlv */
1674 u_char fecTlvExists
:1;
1675 u_char lblMsgIdTlvExists
:1;
1677 } mplsLdpLblAbortMsg_t
;
1679 /***********************************************************************
1681 * Function declarations
1683 * Note: Encode functions return the length of the data which was encoded.
1684 * The first argument (which is a pointer to the structure which
1685 * contains the data to be encoded) is not modified in the encode functions
1686 * which encode the messages and message headers. All the other encode
1687 * fuctions modify the content of the structures to be encoded (tlvs,
1688 * message parameters, etc).
1690 * Decode functions for tlv return the length of the value.
1693 int Mpls_encodeLdpMsgHeader(mplsLdpHeader_t
*, u_char
*, int);
1694 int Mpls_decodeLdpMsgHeader(mplsLdpHeader_t
*, u_char
*, int);
1695 int Mpls_encodeLdpAtmLblRng(mplsLdpAtmLblRng_t
*, u_char
*, int);
1696 int Mpls_decodeLdpAtmLblRng(mplsLdpAtmLblRng_t
*, u_char
*, int);
1697 int Mpls_encodeLdpAsp(mplsLdpAspTlv_t
*, u_char
*, int);
1698 int Mpls_decodeLdpAsp(mplsLdpAspTlv_t
*, u_char
*, int);
1699 int Mpls_encodeLdpTlv(mplsLdpTlv_t
*, u_char
*, int);
1700 int Mpls_decodeLdpTlv(mplsLdpTlv_t
*, u_char
*, int);
1701 int Mpls_encodeLdpInitMsg(mplsLdpInitMsg_t
*, u_char
*, int);
1702 int Mpls_decodeLdpInitMsg(mplsLdpInitMsg_t
*, u_char
*, int);
1703 int Mpls_encodeLdpCsp(mplsLdpCspTlv_t
*, u_char
*, int);
1704 int Mpls_decodeLdpCsp(mplsLdpCspTlv_t
*, u_char
*, int);
1705 int Mpls_encodeLdpBaseMsg(mplsLdpMsg_t
*, u_char
*, int);
1706 int Mpls_decodeLdpBaseMsg(mplsLdpMsg_t
*, u_char
*, int);
1707 int Mpls_encodeLdpFrLblRng(mplsLdpFrLblRng_t
*, u_char
*, int);
1708 int Mpls_decodeLdpFrLblRng(mplsLdpFrLblRng_t
*, u_char
*, int);
1709 int Mpls_encodeLdpFsp(mplsLdpFspTlv_t
*, u_char
*, int);
1710 int Mpls_decodeLdpFsp(mplsLdpFspTlv_t
*, u_char
*, int);
1711 int Mpls_encodeLdpNotMsg(mplsLdpNotifMsg_t
*, u_char
*, int);
1712 int Mpls_decodeLdpNotMsg(mplsLdpNotifMsg_t
*, u_char
*, int);
1713 int Mpls_encodeLdpStatus(mplsLdpStatusTlv_t
*, u_char
*, int);
1714 int Mpls_decodeLdpStatus(mplsLdpStatusTlv_t
*, u_char
*, int);
1715 int Mpls_encodeLdpExStatus(mplsLdpExStatusTlv_t
*, u_char
*, int);
1716 int Mpls_decodeLdpExStatus(mplsLdpExStatusTlv_t
*, u_char
*, int);
1717 int Mpls_encodeLdpRetPdu(mplsLdpRetPduTlv_t
*, u_char
*, int);
1718 int Mpls_decodeLdpRetPdu(mplsLdpRetPduTlv_t
*, u_char
*, int, u_short
);
1719 int Mpls_encodeLdpRetMsg(mplsLdpRetMsgTlv_t
*, u_char
*, int);
1720 int Mpls_decodeLdpRetMsg(mplsLdpRetMsgTlv_t
*, u_char
*, int, u_short
);
1721 int Mpls_encodeLdpHelloMsg(mplsLdpHelloMsg_t
*, u_char
*, int);
1722 int Mpls_decodeLdpHelloMsg(mplsLdpHelloMsg_t
*, u_char
*, int);
1723 int Mpls_encodeLdpChp(mplsLdpChpTlv_t
*, u_char
*, int);
1724 int Mpls_decodeLdpChp(mplsLdpChpTlv_t
*, u_char
*, int);
1725 int Mpls_encodeLdpCsn(mplsLdpCsnTlv_t
*, u_char
*, int);
1726 int Mpls_decodeLdpCsn(mplsLdpCsnTlv_t
*, u_char
*, int);
1727 int Mpls_encodeLdpTrAdr(mplsLdpTrAdrTlv_t
*, u_char
*, int);
1728 int Mpls_decodeLdpTrAdr(mplsLdpTrAdrTlv_t
*, u_char
*, int);
1729 int Mpls_encodeLdpKeepAliveMsg(mplsLdpKeepAlMsg_t
*, u_char
*, int);
1730 int Mpls_decodeLdpKeepAliveMsg(mplsLdpKeepAlMsg_t
*, u_char
*, int);
1731 int Mpls_encodeLdpAdrTlv(mplsLdpAdrTlv_t
*, u_char
*, int);
1732 int Mpls_decodeLdpAdrTlv(mplsLdpAdrTlv_t
*, u_char
*, int, u_short
);
1733 int Mpls_encodeLdpAdrMsg(mplsLdpAdrMsg_t
*, u_char
*, int);
1734 int Mpls_decodeLdpAdrMsg(mplsLdpAdrMsg_t
*, u_char
*, int);
1735 int Mpls_encodeLdpFecTlv(mplsLdpFecTlv_t
*, u_char
*, int);
1736 int Mpls_decodeLdpFecTlv(mplsLdpFecTlv_t
*, u_char
*, int, u_short
);
1737 int Mpls_encodeLdpGenLblTlv(mplsLdpGenLblTlv_t
*, u_char
*, int);
1738 int Mpls_decodeLdpGenLblTlv(mplsLdpGenLblTlv_t
*, u_char
*, int);
1739 int Mpls_encodeLdpAtmLblTlv(mplsLdpAtmLblTlv_t
*, u_char
*, int);
1740 int Mpls_decodeLdpAtmLblTlv(mplsLdpAtmLblTlv_t
*, u_char
*, int);
1741 int Mpls_encodeLdpFrLblTlv(mplsLdpFrLblTlv_t
*, u_char
*, int);
1742 int Mpls_decodeLdpFrLblTlv(mplsLdpFrLblTlv_t
*, u_char
*, int);
1743 int Mpls_encodeLdpHopTlv(mplsLdpHopTlv_t
*, u_char
*, int);
1744 int Mpls_decodeLdpHopTlv(mplsLdpHopTlv_t
*, u_char
*, int);
1745 int Mpls_encodeLdpLblMsgIdTlv(mplsLdpLblMsgIdTlv_t
*, u_char
*, int);
1746 int Mpls_decodeLdpLblMsgIdTlv(mplsLdpLblMsgIdTlv_t
*, u_char
*, int);
1747 int Mpls_encodeLdpPathVectorTlv(mplsLdpPathTlv_t
*, u_char
*, int);
1748 int Mpls_decodeLdpPathVectorTlv(mplsLdpPathTlv_t
*, u_char
*, int, u_short
);
1749 int Mpls_encodeLdpLblMapMsg(mplsLdpLblMapMsg_t
*, u_char
*, int);
1750 int Mpls_decodeLdpLblMapMsg(mplsLdpLblMapMsg_t
*, u_char
*, int);
1751 int Mpls_encodeLdpFecAdrEl(mplsFecElement_t
*, u_char
*, int, u_char
);
1752 int Mpls_decodeLdpFecAdrEl(mplsFecElement_t
*, u_char
*, int, u_char
);
1753 int Mpls_encodeLdpLblRetMsgIdTlv(mplsLdpLblRetMsgIdTlv_t
*, u_char
*, int);
1754 int Mpls_decodeLdpLblRetMsgIdTlv(mplsLdpLblRetMsgIdTlv_t
*, u_char
*, int);
1755 int Mpls_encodeLdpLbl_W_R_Msg(mplsLdpLbl_W_R_Msg_t
*, u_char
*, int);
1756 int Mpls_decodeLdpLbl_W_R_Msg(mplsLdpLbl_W_R_Msg_t
*, u_char
*, int);
1757 int Mpls_encodeLdpERTlv(mplsLdpErTlv_t
*, u_char
*, int);
1758 int Mpls_decodeLdpERTlv(mplsLdpErTlv_t
*, u_char
*, int, u_short
);
1759 int Mpls_encodeLdpErHop(mplsLdpErHop_t
*, u_char
*, int, u_short
);
1760 int Mpls_decodeLdpErHop(mplsLdpErHop_t
*, u_char
*, int, u_short
*);
1761 int Mpls_encodeLdpTrafficTlv(mplsLdpTrafficTlv_t
*, u_char
*, int);
1762 int Mpls_decodeLdpTrafficTlv(mplsLdpTrafficTlv_t
*, u_char
*, int, u_short
);
1763 int Mpls_encodeLdpLblReqMsg(mplsLdpLblReqMsg_t
*, u_char
*, int);
1764 int Mpls_decodeLdpLblReqMsg(mplsLdpLblReqMsg_t
*, u_char
*, int);
1765 int Mpls_encodeLdpPreemptTlv(mplsLdpPreemptTlv_t
*, u_char
*, int);
1766 int Mpls_decodeLdpPreemptTlv(mplsLdpPreemptTlv_t
*, u_char
*, int);
1767 int Mpls_encodeLdpLspIdTlv(mplsLdpLspIdTlv_t
*, u_char
*, int);
1768 int Mpls_decodeLdpLspIdTlv(mplsLdpLspIdTlv_t
*, u_char
*, int);
1769 int Mpls_encodeLdpResClsTlv(mplsLdpResClsTlv_t
*, u_char
*, int);
1770 int Mpls_decodeLdpResClsTlv(mplsLdpResClsTlv_t
*, u_char
*, int);
1771 int Mpls_encodeLdpPinningTlv(mplsLdpPinningTlv_t
*, u_char
*, int);
1772 int Mpls_decodeLdpPinningTlv(mplsLdpPinningTlv_t
*, u_char
*, int);
1773 int Mpls_encodeLdpLblAbortMsg(mplsLdpLblAbortMsg_t
*, u_char
*, int);
1774 int Mpls_decodeLdpLblAbortMsg(mplsLdpLblAbortMsg_t
*, u_char
*, int);
1777 * DEBUG function declarations
1780 void printTlv(mpls_instance_handle handle
, mplsLdpTlv_t
*);
1781 void printHeader(mpls_instance_handle handle
, mplsLdpHeader_t
*);
1782 void printCspFlags(mpls_instance_handle handle
, mplsLdpCspFlag_t
*);
1783 void printCspFlagsPerByte(mpls_instance_handle handle
, u_short
*);
1784 void printCspTlv(mpls_instance_handle handle
, mplsLdpCspTlv_t
*);
1785 void printAspFlags(mpls_instance_handle handle
, mplsLdpSPFlag_t
*);
1786 void printAspFlagsPerByte(mpls_instance_handle handle
, u_int
*);
1787 void printAspTlv(mpls_instance_handle handle
, mplsLdpAspTlv_t
*);
1788 void printFspFlags(mpls_instance_handle handle
, mplsLdpSPFlag_t
*);
1789 void printFspTlv(mpls_instance_handle handle
, mplsLdpFspTlv_t
*);
1790 void printRetMsgTlv(mpls_instance_handle handle
, mplsLdpRetMsgTlv_t
*);
1791 void printRetPduTlv(mpls_instance_handle handle
, mplsLdpRetPduTlv_t
*);
1792 void printExStatusTlv(mpls_instance_handle handle
, mplsLdpExStatusTlv_t
*);
1793 void printStatusTlv(mpls_instance_handle handle
, mplsLdpStatusTlv_t
*);
1794 void printCsnTlv(mpls_instance_handle handle
, mplsLdpCsnTlv_t
*);
1795 void printTrAdrTlv(mpls_instance_handle handle
, mplsLdpTrAdrTlv_t
*);
1796 void printChpTlv(mpls_instance_handle handle
, mplsLdpChpTlv_t
*);
1797 void printAdrListTlv(mpls_instance_handle handle
, mplsLdpAdrTlv_t
*);
1798 void printFecListTlv(mpls_instance_handle handle
, mplsLdpFecTlv_t
*);
1799 void printLblMsgIdTlv(mpls_instance_handle handle
, mplsLdpLblMsgIdTlv_t
*);
1800 void printPathVecTlv(mpls_instance_handle handle
, mplsLdpPathTlv_t
*);
1801 void printHopTlv(mpls_instance_handle handle
, mplsLdpHopTlv_t
*);
1802 void printFrLblTlv(mpls_instance_handle handle
, mplsLdpFrLblTlv_t
*);
1803 void printAtmLblTlv(mpls_instance_handle handle
, mplsLdpAtmLblTlv_t
*);
1804 void printGenLblTlv(mpls_instance_handle handle
, mplsLdpGenLblTlv_t
*);
1805 void printErFlags(mpls_instance_handle handle
, mplsLdpErFlag_t
*);
1806 void printErIPFlags(mpls_instance_handle handle
, mplsLdpErIPFlag_t
*);
1807 void printErTlv(mpls_instance_handle handle
, mplsLdpErTlv_t
*);
1808 void printTrafficTlv(mpls_instance_handle handle
, mplsLdpTrafficTlv_t
*);
1809 void printAtmLabel(mpls_instance_handle handle
, mplsLdpAtmLblRng_t
*, int);
1810 void printFspLabel(mpls_instance_handle handle
, mplsLdpFrLblRng_t
*, int);
1811 void printErHop(mpls_instance_handle handle
, mplsLdpErHop_t
*, u_short
);
1812 void printPreemptTlv(mpls_instance_handle handle
, mplsLdpPreemptTlv_t
*);
1813 void printLspIdTlv(mpls_instance_handle handle
, mplsLdpLspIdTlv_t
*);
1814 void printResClsTlv(mpls_instance_handle handle
, mplsLdpResClsTlv_t
*);
1815 void printPinningTlv(mpls_instance_handle handle
, mplsLdpPinningTlv_t
*);
1817 void printInitMsg(mpls_instance_handle handle
, mplsLdpInitMsg_t
*);
1818 void printHelloMsg(mpls_instance_handle handle
, mplsLdpHelloMsg_t
*);
1819 void printNotMsg(mpls_instance_handle handle
, mplsLdpNotifMsg_t
*);
1820 void printKeepAliveMsg(mpls_instance_handle handle
, mplsLdpKeepAlMsg_t
*);
1821 void printAddressMsg(mpls_instance_handle handle
, mplsLdpAdrMsg_t
*);
1822 void printLlbMapMsg(mpls_instance_handle handle
, mplsLdpLblMapMsg_t
*);
1823 void printLlbReqMsg(mpls_instance_handle handle
, mplsLdpLblReqMsg_t
*);
1824 void printLbl_W_R_Msg(mpls_instance_handle handle
, mplsLdpLbl_W_R_Msg_t
*);
1825 void printLlbAbortMsg(mpls_instance_handle handle
, mplsLdpLblAbortMsg_t
*);
1827 int converAsciiToHex(u_char
*, int, u_char
*);
1828 int converHexToAscii(u_char
*, int, u_char
*);
1830 #endif /* _LDP_MPLS_H_ */