Coverage Report

Created: 2025-12-27 06:52

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-pcep.c
Line
Count
Source
1
/* packet-pcep.c
2
 * Routines for PCEP packet disassembly
3
 * draft-ietf-pce-pcep-09
4
 * draft-ietf-pce-pcep-xro-02
5
 * See also RFC 4655, RFC 4657, RFC 5520, RFC 5521, RFC 5440 and RFC 5541
6
 *
7
 * (c) Copyright 2007 Silvia Cristina Tejedor <silviacristina.tejedor@gmail.com>
8
 *
9
 * Wireshark - Network traffic analyzer
10
 * By Gerald Combs <gerald@wireshark.org>
11
 * Copyright 1998 Gerald Combs
12
 *
13
 * SPDX-License-Identifier: GPL-2.0-or-later
14
 *
15
 * Added support of "A Set of Monitoring Tools for Path Computation Element
16
 * (PCE)-Based Architecture" (RFC 5886)
17
 * (c) Copyright 2012 Svetoslav Duhovnikov <duhovnikov[AT]gmail.com>
18
 *
19
 * Added support of "PCEP Extensions for Stateful PCE"
20
 *  (draft-ietf-pce-stateful-pce-09) and
21
 * "PCEP Extensions for PCE-initiated LSP Setup in a Stateful PCE Model"
22
 *  (draft-ietf-pce-pce-initiated-lsp-01) and
23
 * "Optimizations of Label Switched Path State Synchronization Procedures for a Stateful PCE"
24
 *  (draft-ietf-pce-stateful-sync-optimizations-01)
25
 * (c) Copyright 2014 Simon Zhong <szhong[AT]juniper.net>
26
 *
27
 * Added support of "PCEP Extensions for Segment Routing"
28
 *  (draft-ietf-pce-segment-routing-03) and
29
 * "Conveying path setup type in PCEP messages"
30
 *  (draft-ietf-pce-lsp-setup-type-02)
31
 * (c) Copyright 2015 Francesco Fondelli <francesco.fondelli[AT]gmail.com>
32
 *
33
 * Added support of "Extensions to the Path Computation Element Communication Protocol (PCEP)
34
 * for Point-to-Multipoint Traffic Engineering Label Switched Paths" (RFC 6006)
35
 * (c) Copyright 2015 Francesco Paolucci <fr.paolucci[AT].sssup.it>,
36
 * Oscar Gonzalez de Dios <oscar.gonzalezdedios@telefonica.com>,
37
 * ICT EU PACE Project, www.ict-pace.net
38
 *
39
 * Added support of "PCEP Extensions for Establishing Relationships
40
 * Between Sets of LSPs" (draft-ietf-pce-association-group-00)
41
 * (c) Copyright 2015 Francesco Fondelli <francesco.fondelli[AT]gmail.com>
42
 *
43
 * Added support of "Conveying Vendor-Specific Constraints in the
44
 *  Path Computation Element Communication Protocol" (RFC 7470)
45
 * Completed support of RFC 6006
46
 * Added support of "PCE-Based Computation Procedure to Compute Shortest
47
    Constrained Point-to-Multipoint (P2MP) Inter-Domain Traffic Engineering
48
    Label Switched Paths" (RFC 7334)
49
 * (c) Copyright 2016 Simon Zhong <szhong[AT]juniper.net>
50
 *
51
 * Added support of "Extensions to the Path Computation Element Communication Protocol (PCEP)
52
 *  to compute service aware Label Switched Path (LSP)." (draft-ietf-pce-pcep-service-aware-13)
53
 * Updated support of "PCEP Extensions for Segment Routing" (draft-ietf-pce-segment-routing-08)
54
 * (c) Copyright 2017 Simon Zhong <szhong[AT]juniper.net>
55
 * Updated support from draft-ietf-pce-segment-routing-08 to RFC 8664  "PCEP Extensions for Segment Routing"
56
 * Added support of draft-ietf-pce-segment-routing-policy-cp-05 "PCEP extension to support Segment Routing Policy Candidate Paths"
57
 * (c) Copyright 2021 Oscar Gonzalez de Dios <oscar.gonzalezdedios[AT]telefonica.com>
58
 */
59
60
#include "config.h"
61
62
#include <epan/packet.h>
63
#include <epan/expert.h>
64
#include <epan/addr_resolv.h>
65
#include <epan/tfs.h>
66
67
#include <wsutil/array.h>
68
#include <wsutil/ws_padding_to.h>
69
70
#include "packet-tcp.h"
71
72
void proto_register_pcep(void);
73
void proto_reg_handoff_pcep(void);
74
75
static dissector_handle_t pcep_handle;
76
77
/* Object-Class */
78
#define PCEP_OPEN_OBJ                    1 /* RFC 5440 */
79
#define PCEP_RP_OBJ                      2 /* RFC 5440 */
80
#define PCEP_NO_PATH_OBJ                 3 /* RFC 5440 */
81
#define PCEP_END_POINT_OBJ               4 /* RFC 5440, XXX extended by RFC 8306 */
82
#define PCEP_BANDWIDTH_OBJ               5 /* RFC 5440 */
83
#define PCEP_METRIC_OBJ                  6 /* RFC 5440 */
84
78
#define PCEP_EXPLICIT_ROUTE_OBJ          7 /* RFC 5440 */
85
11
#define PCEP_RECORD_ROUTE_OBJ            8 /* RFC 5440 */
86
#define PCEP_LSPA_OBJ                    9 /* RFC 5440 */
87
5
#define PCEP_IRO_OBJ                    10 /* RFC 5440 */
88
#define PCEP_SVEC_OBJ                   11 /* RFC 5440 */
89
#define PCEP_NOTIFICATION_OBJ           12 /* RFC 5440 */
90
#define PCEP_PCEP_ERROR_OBJ             13 /* RFC 5440 */
91
#define PCEP_LOAD_BALANCING_OBJ         14 /* RFC 5440 */
92
#define PCEP_CLOSE_OBJ                  15 /* RFC 5440 */
93
#define PCEP_PATH_KEY_OBJ               16 /* RFC 5520 */
94
128
#define PCEP_XRO_OBJ                    17 /* RFC 5521 */
95
/* 18 is unassigned */
96
#define PCEP_OBJ_MONITORING             19 /* RFC 5886 */
97
#define PCEP_OBJ_PCC_ID_REQ             20 /* RFC 5886 */
98
#define PCEP_OF_OBJ                     21 /* RFC 5541 */
99
#define PCEP_CLASSTYPE_OBJ              22 /* RFC 5455 */
100
/* 23 is unassigned */
101
#define PCEP_GLOBAL_CONSTRAINTS_OBJ     24 /* RFC 5557 */
102
#define PCEP_OBJ_PCE_ID                 25 /* RFC 5886 */
103
#define PCEP_OBJ_PROC_TIME              26 /* RFC 5886 */
104
#define PCEP_OBJ_OVERLOAD               27 /* RFC 5886 */
105
#define PCEP_OBJ_UNREACH_DESTINATION    28 /* RFC 6006 */
106
7
#define PCEP_SERO_OBJ                   29 /* RFC 8306 */
107
2
#define PCEP_SRRO_OBJ                   30 /* RFC 8306 */
108
3
#define PCEP_OBJ_BRANCH_NODE_CAPABILITY 31 /* RFC 6006 XXX RFC 8306 */
109
#define PCEP_OBJ_LSP                    32 /* RFC 8231 */
110
#define PCEP_OBJ_SRP                    33 /* RFC 8231 */
111
#define PCEP_OBJ_VENDOR_INFORMATION     34 /* RFC 7470 */
112
#define PCEP_OBJ_BU                     35 /* draft-ietf-pce-pcep-service-aware XXX RFC 8233 */
113
#define PCEP_INTER_LAYER_OBJ            36 /* RFC 8282 */
114
#define PCEP_SWITCH_LAYER_OBJ           37 /* RFC 8282 */
115
#define PCEP_REQ_ADAP_CAP_OBJ           38 /* RFC 8282 */
116
#define PCEP_SERVER_IND_OBJ             39 /* RFC 8282 */
117
#define PCEP_ASSOCIATION_OBJ            40 /* RFC 8697 */
118
#define PCEP_S2LS_OBJ                   41 /* RFC 8623 */
119
#define PCEP_WA_OBJ                     42 /* RFC 8780 */
120
#define PCEP_FLOWSPEC_OBJ               43 /* RFC 9168 */
121
#define PCEP_CCI_TYPE_OBJ               44 /* RFC 9050 */
122
#define PCEP_PATH_ATTRIB_OBJ            45 /* draft-ietf-pce-multipath-05 */
123
124
/*Subobjects of EXPLICIT ROUTE Object*/
125
13
#define PCEP_SUB_IPv4                    1
126
733
#define PCEP_SUB_IPv6                    2
127
21
#define PCEP_SUB_LABEL_CONTROL           3
128
219
#define PCEP_SUB_UNNUMB_INTERFACE_ID     4
129
44
#define PCEP_SUB_SR_PRE_IANA             5 /* squatted, pre IANA assignment */
130
31
#define PCEP_SUB_AUTONOMOUS_SYS_NUM     32
131
126
#define PCEP_SUB_EXRS                   33
132
8
#define PCEP_SUB_SRLG                   34
133
47
#define PCEP_SUB_SR                     36 /* IANA assigned code point */
134
12
#define PCEP_SUB_SRv6                   40
135
3
#define PCEP_SUB_PKSv4                  64
136
1
#define PCEP_SUB_PKSv6                  65
137
138
/*Possible values of the NI in the NO-PATH object*/
139
#define NO_SATISFYING                    0
140
#define CHAIN_BROKEN                     1
141
142
/*Possible values of L in the ERO and IRO objects */
143
#define STRICT_HOP                       0
144
#define LOOSE_HOP                        1
145
146
/*Possible values of U in the ERO and RRO objects */
147
#define DOWNSTREAM_LABEL                 0
148
#define UPSTREAM_LABEL                   1
149
150
/*Possible values of Notification Type */
151
#define NOT_REQ_CANCEL                   1
152
#define PCEP_CONGESTION                  2
153
154
/*Possible values of Notification Value for NT=1*/
155
#define NOTI_PCC_CANCEL_REQ              1
156
#define NOTI_PCE_CANCEL_REQ              2
157
158
/*Possible values of Notification Value for NT=2*/
159
#define NOTI_PCE_CONGEST                 1
160
#define NOTI_PCE_NO_CONGEST              2
161
162
/*Possible types of errors */
163
0
#define ESTABLISH_FAILURE                1
164
0
#define CAP_NOT_SUPPORTED                2
165
0
#define UNKNOWN_OBJ                      3
166
0
#define NOT_SUPP_OBJ                     4
167
0
#define POLICY_VIOLATION                 5
168
0
#define MANDATORY_OBJ_MIS                6
169
0
#define SYNCH_PCREQ_MIS                  7
170
0
#define UNKNOWN_REQ_REF                  8
171
0
#define ATTEMPT_2_SESSION                9
172
0
#define INVALID_OBJ                     10
173
0
#define UNRECO_EXRS_SUBOBJ              11
174
0
#define DIFFSERV_TE_ERROR               12
175
2
#define BRPC_FAILURE                    13
176
0
#define GCO_ERROR                       15
177
0
#define P2MP_CAPABILITY_ERROR           16
178
0
#define P2MP_END_POINTS_ERROR           17
179
0
#define P2MP_FRAGMENT_ERROR             18
180
0
#define INVALID_OPERATION               19
181
0
#define LSP_STATE_SYNCHRONIZATION_ERROR 20
182
0
#define INVALID_PATH_SETUP_TYPE         21
183
0
#define BAD_PARAMETER_VALUE             23
184
0
#define LSP_INSTANTIATION_ERROR         24
185
0
#define PCEP_STARTTLS_ERROR             25
186
0
#define ASSOCIATION_ERROR               26
187
0
#define WSON_RWA_ERROR                  27
188
0
#define H_PCE_ERROR                     28
189
1
#define PATH_COMPUTATION_FAILURE        29
190
0
#define FLOWSPEC_ERROR                  30
191
0
#define PCECC_FAILURE                   31
192
193
/*Different values of Reason in the CLOSE object */
194
#define NO_EXP_PROV                      1
195
#define DEADTIME_PROV                    2
196
#define RECEP_MALFORM_MSG                3
197
198
/*Different values of Attribute in the XRO object */
199
#define ATTR_INTERFACE                   0
200
#define ATTR_NODE                        1
201
#define ATTR_SRLG                        2
202
203
/*Mask for the flags of HEADER of Messages*/
204
14
#define  PCEP_HDR_MSG_RESERVED          0x1f
205
206
/*Mask for the type of HEADER of Objects*/
207
982
#define  MASK_OBJ_TYPE                  0xF0
208
209
/*Mask for the flags of HEADER of Objects*/
210
14
#define  PCEP_HDR_OBJ_RESERVED          0xC
211
14
#define  PCEP_HDR_OBJ_P                 0x2
212
14
#define  PCEP_HDR_OBJ_I                 0x1
213
214
/*Mask for the flags of OPEN Object*/
215
14
#define  PCEP_OPEN_RES                  0x1F
216
217
/*Mask for the flags of RP Object*/
218
14
#define  PCEP_RP_PRI                    0x000007
219
14
#define  PCEP_RP_R                      0x000008
220
14
#define  PCEP_RP_B                      0x000010
221
14
#define  PCEP_RP_O                      0x000020
222
14
#define  PCEP_RP_V                      0x000040
223
14
#define  PCEP_RP_S                      0x000080
224
14
#define  PCEP_RP_P                      0x000100
225
14
#define  PCEP_RP_D                      0x000200
226
14
#define  PCEP_RP_M                      0x000400
227
14
#define  PCEP_RP_E                      0x000800
228
14
#define  PCEP_RP_N                      0x001000
229
14
#define  PCEP_RP_F                      0x002000
230
14
#define  PCEP_RP_C                      0x004000    /* RFC 7334 */
231
14
#define  PCEP_RP_RESERVED               0xFF8000
232
233
/*Mask for the flags of NO PATH Object*/
234
14
#define  PCEP_NO_PATH_C                 0x8000
235
236
/*Mask for the flags of METRIC Object*/
237
14
#define  PCEP_METRIC_B                  0x01
238
14
#define  PCEP_METRIC_C                  0x02
239
240
/*Mask for the flags of LSPA Object*/
241
14
#define  PCEP_LSPA_L                    0x01
242
243
/* Mask to differentiate the value of L and Type (Explicit Object)*/
244
196
#define Mask_L                          0x80
245
1.46k
#define Mask_Type                       0x7f
246
247
/* RFC 5440 */
248
14
#define TCP_PORT_PCEP                   4189
249
250
243
#define IPv4                            1
251
14
#define IPv6                            2
252
253
/*RFC 6006*/
254
1
#define IPv4_P2MP                       3
255
4
#define IPv6_P2MP                       4
256
/*RFC 6006 - End Points Leaf Types */
257
#define EP_P2MP_NEW_LEAF_TYPE           1
258
#define EP_P2MP_OLD_REMOVE_LEAF_TYPE    2
259
#define EP_P2MP_OLD_MODIFY_LEAF_TYPE    3
260
#define EP_P2MP_OLD_UNCHANGED_LEAF_TYPE 4
261
262
/*Mask for the flags os SVEC Object*/
263
14
#define  PCEP_SVEC_L                    0x000001
264
14
#define  PCEP_SVEC_N                    0x000002
265
14
#define  PCEP_SVEC_S                    0x000004
266
14
#define  PCEP_SVEC_D                    0x000008
267
14
#define  PCEP_SVEC_P                    0x000010
268
269
/*Mask for the flags of XRO Object*/
270
14
#define  PCEP_XRO_F                     0x0001
271
272
/*Mask for the flags of MONITORING Object*/
273
14
#define  PCEP_OBJ_MONITORING_FLAGS_L            0x000001
274
14
#define  PCEP_OBJ_MONITORING_FLAGS_G            0x000002
275
14
#define  PCEP_OBJ_MONITORING_FLAGS_P            0x000004
276
14
#define  PCEP_OBJ_MONITORING_FLAGS_C            0x000008
277
14
#define  PCEP_OBJ_MONITORING_FLAGS_I            0x000010
278
14
#define  PCEP_OBJ_MONITORING_FLAGS_RESERVED     0xFFFFE0
279
280
/*Define types for PCC-ID-REQ Object*/
281
1
#define  PCEP_OBJ_PCC_ID_REQ_IPv4               1
282
0
#define  PCEP_OBJ_PCC_ID_REQ_IPv6               2
283
284
/*Define types for PCE-ID Object*/
285
1
#define  PCEP_OBJ_PCE_ID_IPv4                   1
286
1
#define  PCEP_OBJ_PCE_ID_IPv6                   2
287
288
/*Mask for the flags of PROC-TIME Object*/
289
14
#define  PCEP_OBJ_PROC_TIME_FLAGS_E             0x0001
290
14
#define  PCEP_OBJ_PROC_TIME_FLAGS_RESERVED      0xFFFE
291
292
/*Mask for the flags of IPv4, IPv6 and UNnumbered InterfaceID Subobjects of RRO Object*/
293
14
#define PCEP_SUB_LPA                    0x01
294
14
#define PCEP_SUB_LPU                    0x02
295
296
/*Mask for the flags of Label SubObject*/
297
14
#define PCEP_SUB_LABEL_GL               0x01
298
299
/* Mask for the flags of LSP Object */
300
14
#define PCEP_OBJ_LSP_PLSP_ID            0xFFFFF0
301
14
#define PCEP_OBJ_LSP_FLAGS_D            0x0001
302
14
#define PCEP_OBJ_LSP_FLAGS_S            0x0002
303
14
#define PCEP_OBJ_LSP_FLAGS_R            0x0004
304
14
#define PCEP_OBJ_LSP_FLAGS_A            0x0008
305
14
#define PCEP_OBJ_LSP_FLAGS_O            0x0070
306
14
#define PCEP_OBJ_LSP_FLAGS_C            0x0080
307
14
#define PCEP_OBJ_LSP_FLAGS_RESERVED     0x0F00
308
309
/* Mask for the flags of TE-PATH-BINDING TLV */
310
14
#define PCEP_TLV_TE_PATH_BINDING_FLAGS_R           0x80
311
14
#define PCEP_TLV_TE_PATH_BINDING_FLAGS_RESERVED    0x7F
312
313
/* Mask for the flags of SRP Object */
314
14
#define PCEP_OBJ_SRP_FLAGS_R            0x00000001
315
316
/* Mask for the flags of Stateful PCE Capability TLV */
317
14
#define PCEP_TLV_STATEFUL_PCE_CAPABILITY_U  0x00000001
318
14
#define PCEP_TLV_STATEFUL_PCE_CAPABILITY_S  0x00000002
319
14
#define PCEP_TLV_STATEFUL_PCE_CAPABILITY_I  0x00000004
320
14
#define PCEP_TLV_STATEFUL_PCE_CAPABILITY_T  0x00000008
321
14
#define PCEP_TLV_STATEFUL_PCE_CAPABILITY_D  0x00000010
322
14
#define PCEP_TLV_STATEFUL_PCE_CAPABILITY_F  0x00000020
323
14
#define PCEP_TLV_STATEFUL_PCE_CAPABILITY_COLOR  0x00000800
324
325
/* Mask for the flags of ASSOCIATION Object */
326
14
#define PCEP_OBJ_ASSOCIATION_FLAGS_R 0x0001
327
328
/* Mask for the flags of SR PCE Capability TLV */
329
14
#define PCEP_TLV_SR_PCE_CAPABILITY_L    0x01 // deprecated
330
14
#define PCEP_TLV_SR_PCE_CAPABILITY_X    0x01
331
14
#define PCEP_TLV_SR_PCE_CAPABILITY_N    0x02
332
333
/* Mask for the flags of PATH-ATTRIB Object */
334
14
#define PCEP_OBJ_PATH_ATTRIB_FLAGS_O           0x00000007
335
14
#define PCEP_OBJ_PATH_ATTRIB_FLAGS_R           0x00000008
336
14
#define PCEP_OBJ_PATH_ATTRIB_FLAGS_RESERVED    0xFFFFFFF0
337
338
/* Mask for the flags of Subobjevct SR*/
339
18
#define PCEP_SUBOBJ_SR_FLAGS_M  0x001
340
14
#define PCEP_SUBOBJ_SR_FLAGS_C  0x002
341
28
#define PCEP_SUBOBJ_SR_FLAGS_S  0x004
342
37
#define PCEP_SUBOBJ_SR_FLAGS_F  0x008
343
344
/* Mask for components of a MPLS label stack entry */
345
28
#define PCEP_MPLS_LABEL_STACK_ENTRY_LABEL 0xFFFFF000 // label
346
28
#define PCEP_MPLS_LABEL_STACK_ENTRY_TC    0x00000E00 // traffic class (formerly called EXP)
347
28
#define PCEP_MPLS_LABEL_STACK_ENTRY_S     0x00000100 // bottom of stack
348
28
#define PCEP_MPLS_LABEL_STACK_ENTRY_TTL   0x000000FF // time-to-live
349
350
/* Mask for the flags of Subobject SRv6 */
351
23
#define PCEP_SUBOBJ_SRV6_FLAGS_S    0x001
352
14
#define PCEP_SUBOBJ_SRV6_FLAGS_F    0x002
353
22
#define PCEP_SUBOBJ_SRV6_FLAGS_T    0x004
354
14
#define PCEP_SUBOBJ_SRV6_FLAGS_V    0x008
355
356
/* Mask for the flags of Multipath Capability TLV */
357
14
#define PCEP_TLV_MULTIPATH_CAP_W 0x0001
358
14
#define PCEP_TLV_MULTIPATH_CAP_B 0x0002
359
14
#define PCEP_TLV_MULTIPATH_CAP_O 0x0004
360
14
#define PCEP_TLV_MULTIPATH_CAP_F 0x0008
361
14
#define PCEP_TLV_MULTIPATH_CAP_C 0x0010
362
363
static int proto_pcep;
364
365
static int hf_pcep_endpoint_p2mp_leaf;
366
static int hf_pcep_hdr_msg_flags_reserved;
367
static int hf_pcep_hdr_obj_flags;
368
static int hf_pcep_hdr_obj_flags_reserved;
369
static int hf_pcep_hdr_obj_flags_p;
370
static int hf_pcep_hdr_obj_flags_i;
371
static int hf_pcep_open_flags_res;
372
static int hf_pcep_rp_flags_pri;
373
static int hf_pcep_rp_flags_r;
374
static int hf_pcep_rp_flags_b;
375
static int hf_pcep_rp_flags_o;
376
static int hf_pcep_rp_flags_v;
377
static int hf_pcep_rp_flags_s;
378
static int hf_pcep_rp_flags_p;
379
static int hf_pcep_rp_flags_d;
380
static int hf_pcep_rp_flags_m;
381
static int hf_pcep_rp_flags_e;
382
static int hf_pcep_rp_flags_n;
383
static int hf_pcep_rp_flags_f;
384
static int hf_pcep_rp_flags_c;
385
static int hf_pcep_rp_flags_reserved;
386
static int hf_pcep_no_path_flags_c;
387
static int hf_pcep_metric_flags_c;
388
static int hf_pcep_metric_flags_b;
389
static int hf_pcep_lspa_flags_l;
390
static int hf_pcep_svec_flags_l;
391
static int hf_pcep_svec_flags_n;
392
static int hf_pcep_svec_flags_s;
393
static int hf_pcep_svec_flags_d;
394
static int hf_pcep_svec_flags_p;
395
static int hf_pcep_xro_flags_f;
396
static int hf_pcep_obj_monitoring_flags_reserved;
397
static int hf_pcep_obj_monitoring_flags_l;
398
static int hf_pcep_obj_monitoring_flags_g;
399
static int hf_pcep_obj_monitoring_flags_p;
400
static int hf_pcep_obj_monitoring_flags_c;
401
static int hf_pcep_obj_monitoring_flags_i;
402
static int hf_pcep_obj_monitoring_monitoring_id_number;
403
static int hf_pcep_obj_pcc_id_req_ipv4;
404
static int hf_pcep_obj_pcc_id_req_ipv6;
405
static int hf_pcep_obj_pce_id_ipv4;
406
static int hf_pcep_obj_pce_id_ipv6;
407
static int hf_pcep_obj_proc_time_flags_reserved;
408
static int hf_pcep_obj_proc_time_flags_e;
409
static int hf_pcep_obj_proc_time_cur_proc_time;
410
static int hf_pcep_obj_proc_time_min_proc_time;
411
static int hf_pcep_obj_proc_time_max_proc_time;
412
static int hf_pcep_obj_proc_time_ave_proc_time;
413
static int hf_pcep_obj_proc_time_var_proc_time;
414
static int hf_pcep_obj_overload_duration;
415
static int hf_pcep_subobj_flags_lpa;
416
static int hf_pcep_subobj_flags_lpu;
417
static int hf_pcep_subobj_label_flags_gl;
418
static int hf_pcep_no_path_tlvs_pce;
419
static int hf_pcep_no_path_tlvs_unk_dest;
420
static int hf_pcep_no_path_tlvs_unk_src;
421
static int hf_pcep_no_path_tlvs_brpc;
422
static int hf_pcep_no_path_tlvs_pks;
423
static int hf_pcep_no_path_tlvs_no_gco_migr;
424
static int hf_pcep_no_path_tlvs_no_gco_soln;
425
static int hf_pcep_no_path_tlvs_p2mp;
426
static int hf_PCEPF_MSG;
427
static int hf_PCEPF_OBJECT_CLASS;
428
static int hf_PCEPF_OBJ_OPEN;
429
static int hf_PCEPF_OBJ_RP;
430
static int hf_PCEPF_OBJ_NO_PATH;
431
static int hf_PCEPF_OBJ_END_POINT;
432
static int hf_PCEPF_OBJ_BANDWIDTH;
433
static int hf_PCEPF_OBJ_METRIC;
434
static int hf_PCEPF_OBJ_EXPLICIT_ROUTE;
435
static int hf_PCEPF_OBJ_RECORD_ROUTE;
436
static int hf_PCEPF_OBJ_LSPA;
437
static int hf_PCEPF_OBJ_IRO;
438
static int hf_PCEPF_OBJ_SVEC;
439
static int hf_PCEPF_OBJ_NOTIFICATION;
440
static int hf_PCEPF_OBJ_PCEP_ERROR;
441
static int hf_PCEPF_OBJ_LOAD_BALANCING;
442
static int hf_PCEPF_OBJ_CLOSE;
443
static int hf_PCEPF_OBJ_PATH_KEY;
444
static int hf_PCEPF_OBJ_XRO;
445
static int hf_PCEPF_OBJ_MONITORING;
446
static int hf_PCEPF_OBJ_PCC_ID_REQ;
447
static int hf_PCEPF_OBJ_OF;
448
static int hf_PCEPF_OBJ_CLASSTYPE;
449
static int hf_PCEPF_OBJ_GLOBAL_CONSTRAINTS;
450
static int hf_PCEPF_OBJ_PCE_ID;
451
static int hf_PCEPF_OBJ_PROC_TIME;
452
static int hf_PCEPF_OBJ_OVERLOAD;
453
static int hf_PCEPF_OBJ_UNREACH_DESTINATION;
454
static int hf_PCEPF_OBJ_SERO;
455
static int hf_PCEPF_OBJ_SRRO;
456
static int hf_PCEPF_OBJ_BRANCH_NODE_CAPABILITY;
457
static int hf_PCEPF_OBJ_LSP;
458
static int hf_PCEPF_OBJ_SRP;
459
static int hf_PCEPF_OBJ_VENDOR_INFORMATION;
460
static int hf_PCEPF_OBJ_BU;
461
static int hf_PCEPF_OBJ_INTER_LAYER;
462
static int hf_PCEPF_OBJ_SWITCH_LAYER;
463
static int hf_PCEPF_OBJ_REQ_ADAP_CAP;
464
static int hf_PCEPF_OBJ_SERVER_IND;
465
static int hf_PCEPF_OBJ_ASSOCIATION;
466
static int hf_PCEPF_OBJ_S2LS;
467
static int hf_PCEPF_OBJ_WA;
468
static int hf_PCEPF_OBJ_FLOWSPEC;
469
static int hf_PCEPF_OBJ_CCI_TYPE;
470
static int hf_PCEPF_OBJ_PATH_ATTRIB;
471
static int hf_PCEPF_OBJ_UNKNOWN_TYPE;
472
static int hf_PCEPF_NOTI_TYPE;
473
static int hf_PCEPF_NOTI_VAL1;
474
static int hf_PCEPF_NOTI_VAL2;
475
static int hf_PCEPF_ERROR_TYPE;
476
static int hf_PCEPF_ERROR_VALUE;
477
static int hf_PCEPF_SUBOBJ;
478
static int hf_PCEPF_SUBOBJ_7F;
479
static int hf_PCEPF_SUBOBJ_IPv4;
480
static int hf_PCEPF_SUBOBJ_IPv6;
481
static int hf_PCEPF_SUBOBJ_LABEL_CONTROL;
482
static int hf_PCEPF_SUBOBJ_UNNUM_INTERFACEID;
483
static int hf_PCEPF_SUBOBJ_AUTONOMOUS_SYS_NUM;
484
static int hf_PCEPF_SUBOBJ_SRLG;
485
static int hf_PCEPF_SUBOBJ_EXRS;
486
static int hf_PCEPF_SUBOBJ_PKSv4;
487
static int hf_PCEPF_SUBOBJ_PKSv6;
488
static int hf_PCEPF_SUBOBJ_XRO;
489
static int hf_PCEPF_SUBOBJ_SR;
490
static int hf_PCEPF_SUBOBJ_SRv6;
491
#if 0
492
static int hf_PCEPF_SUB_XRO_ATTRIB;
493
#endif
494
495
static int hf_pcep_obj_open_type;
496
static int hf_pcep_obj_rp_type;
497
static int hf_pcep_obj_no_path_type;
498
static int hf_pcep_obj_end_point_type;
499
static int hf_pcep_obj_bandwidth_type;
500
static int hf_pcep_obj_metric_type;
501
static int hf_pcep_obj_explicit_route_type;
502
static int hf_pcep_obj_record_route_type;
503
static int hf_pcep_obj_lspa_type;
504
static int hf_pcep_obj_iro_type;
505
static int hf_pcep_obj_svec_type;
506
static int hf_pcep_obj_notification_type;
507
static int hf_pcep_obj_pcep_error_type;
508
static int hf_pcep_obj_load_balancing_type;
509
static int hf_pcep_obj_close_type;
510
static int hf_pcep_obj_path_key_type;
511
static int hf_pcep_obj_xro_type;
512
static int hf_pcep_obj_monitoring_type;
513
static int hf_pcep_obj_pcc_id_req_type;
514
static int hf_pcep_obj_of_type;
515
static int hf_pcep_obj_classtype;
516
static int hf_pcep_obj_global_constraints;
517
static int hf_pcep_obj_pce_id_type;
518
static int hf_pcep_obj_proc_time_type;
519
static int hf_pcep_obj_overload_type;
520
static int hf_pcep_obj_unreach_destination_type;
521
static int hf_pcep_obj_sero_type;
522
static int hf_pcep_obj_srro_type;
523
static int hf_pcep_obj_branch_node_capability_type;
524
static int hf_pcep_obj_lsp_type;
525
static int hf_pcep_obj_srp_type;
526
static int hf_pcep_obj_vendor_information_type;
527
static int hf_pcep_obj_bu_type;
528
static int hf_pcep_obj_inter_layer_type;
529
static int hf_pcep_obj_switch_layer_type;
530
static int hf_pcep_obj_req_adap_cap_type;
531
static int hf_pcep_obj_server_ind_type;
532
static int hf_pcep_obj_association_type;
533
static int hf_pcep_obj_s2ls_type;
534
static int hf_pcep_obj_wa_type;
535
static int hf_pcep_obj_flowspec_type;
536
static int hf_pcep_obj_cci_type;
537
static int hf_pcep_obj_path_attrib_type;
538
539
/* Generated from convert_proto_tree_add_text.pl */
540
static int hf_pcep_xro_obj_flags;
541
static int hf_pcep_open_obj_keepalive;
542
static int hf_pcep_request_id;
543
static int hf_pcep_lspa_obj_reserved;
544
static int hf_pcep_rp_obj_reserved;
545
static int hf_pcep_svec_obj_reserved;
546
static int hf_pcep_rp_obj_flags;
547
static int hf_pcep_lspa_obj_exclude_any;
548
static int hf_pcep_subobj_srlg_attribute;
549
static int hf_pcep_end_point_obj_destination_ipv4_address;
550
static int hf_pcep_subobj_unnumb_interfaceID_reserved_xroobj;
551
static int hf_pcep_balancing_obj_flags;
552
static int hf_pcep_subobj_unnumb_interfaceID_reserved;
553
static int hf_pcep_lspa_obj_setup_priority;
554
static int hf_pcep_svec_obj_request_id_number;
555
static int hf_pcep_end_point_obj_source_ipv4_address;
556
static int hf_pcep_open_obj_sid;
557
static int hf_pcep_subobj_ipv6_padding;
558
static int hf_pcep_notification_obj_reserved;
559
static int hf_pcep_close_obj_reason;
560
static int hf_pcep_subobj_ipv4_attribute;
561
static int hf_pcep_obj_overload_flags;
562
static int hf_pcep_balancing_obj_maximum_number_of_te_lsps;
563
static int hf_pcep_subobj_exrs_reserved;
564
static int hf_pcep_subobj_label_control_length;
565
static int hf_pcep_subobj_ipv4_length;
566
static int hf_pcep_subobj_ipv6_ipv6;
567
static int hf_pcep_lspa_obj_holding_priority;
568
static int hf_pcep_rp_obj_requested_id_number;
569
static int hf_pcep_subobj_pksv6_path_key;
570
static int hf_pcep_subobj_unnumb_interfaceID_router_id;
571
static int hf_pcep_subobj_pksv6_pce_id;
572
static int hf_pcep_tlv_padding;
573
static int hf_pcep_subobj_unnumb_interfaceID_flags;
574
static int hf_pcep_subobj_unnumb_interfaceID_length;
575
static int hf_pcep_obj_proc_time_reserved;
576
static int hf_pcep_object_type;
577
static int hf_pcep_subobj_pksv4_length;
578
static int hf_pcep_subobj_ipv6_prefix_length;
579
static int hf_pcep_subobj_ipv6_length;
580
static int hf_pcep_flags;
581
static int hf_pcep_no_path_obj_reserved;
582
static int hf_pcep_subobj_unnumb_interfaceID_interface_id;
583
static int hf_pcep_close_obj_flags;
584
static int hf_pcep_error_obj_flags;
585
static int hf_pcep_metric_obj_flags;
586
static int hf_pcep_subobj_autonomous_sys_num_reserved;
587
static int hf_pcep_subobj_pksv4_path_key;
588
static int hf_pcep_subobj_label_control_flags;
589
static int hf_pcep_notification_obj_value;
590
static int hf_pcep_subobj_label_control_label;
591
static int hf_pcep_metric_obj_metric_value;
592
static int hf_pcep_no_path_obj_flags;
593
static int hf_pcep_obj_monitoring_reserved;
594
static int hf_pcep_obj_of_code;
595
static int hf_pcep_subobj_label_control_u;
596
static int hf_pcep_subobj_autonomous_sys_num_length;
597
static int hf_pcep_message_length;
598
static int hf_pcep_subobj_ipv4_prefix_length;
599
static int hf_pcep_xro_obj_reserved;
600
static int hf_pcep_subobj_pksv4_pce_id;
601
static int hf_pcep_subobj_pksv6_length;
602
static int hf_pcep_end_point_obj_destination_ipv6_address;
603
static int hf_pcep_subobj_autonomous_sys_num_as_number;
604
static int hf_pcep_notification_obj_flags;
605
static int hf_pcep_subobj_unnumb_interfaceID_attribute;
606
static int hf_pcep_object_length;
607
static int hf_pcep_tlv_data;
608
static int hf_pcep_balancing_obj_reserved;
609
static int hf_pcep_subobj_ipv4_flags;
610
static int hf_pcep_subobj_ipv6_attribute;
611
static int hf_pcep_subobj_srlg_id;
612
static int hf_pcep_balancing_obj_minimum_bandwidth;
613
static int hf_pcep_subobj_unnumb_interfaceID_reserved_rrobj;
614
static int hf_pcep_error_obj_reserved;
615
static int hf_pcep_obj_overload_reserved;
616
static int hf_pcep_notification_obj_type;
617
static int hf_pcep_subobj_ipv6_flags;
618
static int hf_pcep_obj_monitoring_flags;
619
static int hf_pcep_subobj_exrs_length;
620
static int hf_pcep_obj_proc_time_flags;
621
static int hf_pcep_subobj_label_control_reserved;
622
static int hf_pcep_version;
623
static int hf_pcep_lspa_obj_flags;
624
static int hf_pcep_subobj_ipv4_ipv4;
625
static int hf_pcep_tlv_type;
626
static int hf_pcep_subobj_autonomous_sys_num_optional_as_number_high_octets;
627
static int hf_pcep_open_obj_deadtime;
628
static int hf_pcep_bandwidth;
629
static int hf_pcep_tlv_length;
630
static int hf_pcep_subobj_srlg_reserved;
631
static int hf_pcep_metric_obj_type;
632
static int hf_pcep_metric_obj_reserved;
633
static int hf_pcep_svec_obj_flags;
634
static int hf_pcep_open_obj_pcep_version;
635
static int hf_pcep_open_obj_flags;
636
static int hf_pcep_end_point_obj_source_ipv6_address;
637
static int hf_pcep_lspa_obj_include_any;
638
static int hf_pcep_lspa_obj_include_all;
639
static int hf_pcep_subobj_ipv4_padding;
640
static int hf_pcep_subobj_srlg_length;
641
static int hf_pcep_subobj_autonomous_sys_num_attribute;
642
static int hf_pcep_close_obj_reserved;
643
static int hf_pcep_subobj_label_control_c_type;
644
static int hf_pcep_subobj_iro_autonomous_sys_num_l;
645
static int hf_pcep_subobj_autonomous_sys_num_x;
646
static int hf_pcep_subobj_label_control_l;
647
static int hf_pcep_subobj_exrs_l;
648
static int hf_pcep_subobj_unnumb_interfaceID_x;
649
static int hf_pcep_subobj_autonomous_sys_num_l;
650
static int hf_pcep_subobj_pksv6_l;
651
static int hf_pcep_subobj_srlg_x;
652
static int hf_pcep_subobj_ipv4_x;
653
static int hf_pcep_subobj_iro_unnumb_interfaceID_l;
654
static int hf_pcep_subobj_exrs_type;
655
static int hf_pcep_subobj_ipv4_l;
656
static int hf_pcep_of_code;
657
static int hf_pcep_subobj_ipv6_x;
658
static int hf_pcep_no_path_obj_nature_of_issue;
659
static int hf_pcep_subobj_ipv6_l;
660
static int hf_pcep_subobj_pksv4_l;
661
static int hf_pcep_subobj_iro_ipv6_l;
662
static int hf_pcep_subobj_unnumb_interfaceID_l;
663
static int hf_pcep_subobj_iro_ipv4_l;
664
static int hf_pcep_subobj_sr_l;
665
static int hf_pcep_subobj_sr_length;
666
static int hf_pcep_subobj_sr_nt;
667
static int hf_pcep_subobj_sr_flags;
668
static int hf_pcep_subobj_sr_flags_m;
669
static int hf_pcep_subobj_sr_flags_c;
670
static int hf_pcep_subobj_sr_flags_s;
671
static int hf_pcep_subobj_sr_flags_f;
672
static int hf_pcep_subobj_sr_sid;
673
static int hf_pcep_subobj_sr_sid_label;
674
static int hf_pcep_subobj_sr_sid_tc;
675
static int hf_pcep_subobj_sr_sid_s;
676
static int hf_pcep_subobj_sr_sid_ttl;
677
static int hf_pcep_subobj_sr_nai_ipv4_node;
678
static int hf_pcep_subobj_sr_nai_ipv6_node;
679
static int hf_pcep_subobj_sr_nai_local_ipv4_addr;
680
static int hf_pcep_subobj_sr_nai_remote_ipv4_addr;
681
static int hf_pcep_subobj_sr_nai_local_ipv6_addr;
682
static int hf_pcep_subobj_sr_nai_remote_ipv6_addr;
683
static int hf_pcep_subobj_sr_nai_local_node_id;
684
static int hf_pcep_subobj_sr_nai_local_interface_id;
685
static int hf_pcep_subobj_sr_nai_remote_node_id;
686
static int hf_pcep_subobj_sr_nai_remote_interface_id;
687
static int hf_pcep_subobj_srv6_l;
688
static int hf_pcep_subobj_srv6_length;
689
static int hf_pcep_subobj_srv6_nt;
690
static int hf_pcep_subobj_srv6_flags;
691
static int hf_pcep_subobj_srv6_flags_s;
692
static int hf_pcep_subobj_srv6_flags_f;
693
static int hf_pcep_subobj_srv6_flags_t;
694
static int hf_pcep_subobj_srv6_flags_v;
695
static int hf_pcep_subobj_srv6_reserved;
696
static int hf_pcep_subobj_srv6_endpoint_behavior;
697
static int hf_pcep_subobj_srv6_sid;
698
static int hf_pcep_subobj_srv6_nai;
699
static int hf_pcep_subobj_srv6_nai_ipv6_node;
700
static int hf_pcep_subobj_srv6_nai_local_ipv6_addr;
701
static int hf_pcep_subobj_srv6_nai_remote_ipv6_addr;
702
static int hf_pcep_subobj_srv6_nai_local_interface_id;
703
static int hf_pcep_subobj_srv6_nai_remote_interface_id;
704
static int hf_pcep_subobj_srv6_sid_struct;
705
static int hf_pcep_subobj_srv6_sid_struct_lb_len;
706
static int hf_pcep_subobj_srv6_sid_struct_ln_len;
707
static int hf_pcep_subobj_srv6_sid_struct_fun_len;
708
static int hf_pcep_subobj_srv6_sid_struct_arg_len;
709
static int hf_pcep_subobj_srv6_sid_struct_reserved;
710
static int hf_pcep_subobj_srv6_sid_struct_flags;
711
712
static int hf_pcep_stateful_pce_capability_flags;
713
static int hf_pcep_lsp_update_capability;
714
static int hf_pcep_include_db_version;
715
static int hf_pcep_lsp_instantiation_capability;
716
static int hf_pcep_triggered_resync;
717
static int hf_pcep_delta_lsp_sync_capability;
718
static int hf_pcep_triggered_initial_sync;
719
static int hf_pcep_color_capability;
720
static int hf_pcep_obj_lsp_flags;
721
static int hf_pcep_obj_lsp_plsp_id;
722
static int hf_pcep_obj_lsp_flags_d;
723
static int hf_pcep_obj_lsp_flags_s;
724
static int hf_pcep_obj_lsp_flags_r;
725
static int hf_pcep_obj_lsp_flags_a;
726
static int hf_pcep_obj_lsp_flags_o;
727
static int hf_pcep_obj_lsp_flags_c;
728
static int hf_pcep_obj_lsp_flags_reserved;
729
static int hf_pcep_obj_srp_flags;
730
static int hf_pcep_obj_srp_flags_r;
731
static int hf_pcep_obj_srp_id_number;
732
static int hf_pcep_symbolic_path_name;
733
static int hf_pcep_ipv4_lsp_id_tunnel_sender_address;
734
static int hf_pcep_ipv4_lsp_id_lsp_id;
735
static int hf_pcep_ipv4_lsp_id_tunnel_id;
736
static int hf_pcep_ipv4_lsp_id_extended_tunnel_id;
737
static int hf_pcep_ipv4_lsp_id_tunnel_endpoint_address;
738
static int hf_pcep_ipv6_lsp_id_tunnel_sender_address;
739
static int hf_pcep_ipv6_lsp_id_lsp_id;
740
static int hf_pcep_ipv6_lsp_id_tunnel_id;
741
static int hf_pcep_ipv6_lsp_id_extended_tunnel_id;
742
static int hf_pcep_ipv6_lsp_id_tunnel_endpoint_address;
743
static int hf_pcep_lsp_error_code;
744
static int hf_pcep_rsvp_user_error_spec;
745
static int hf_pcep_lsp_state_db_version_number;
746
static int hf_pcep_speaker_entity_id;
747
static int hf_pcep_path_setup_type_reserved24;
748
static int hf_pcep_path_setup_type;
749
static int hf_pcep_path_setup_type_capability_reserved24;
750
static int hf_pcep_path_setup_type_capability_psts;
751
static int hf_pcep_path_setup_type_capability_pst;
752
static int hf_pcep_sr_pce_capability_reserved; //deprecated
753
static int hf_pcep_sr_pce_capability_sub_tlv_reserved;
754
static int hf_pcep_sr_pce_capability_flags; //deprecated
755
static int hf_pcep_sr_pce_capability_sub_tlv_flags;
756
static int hf_pcep_sr_pce_capability_flags_l; //deprecated
757
static int hf_pcep_sr_pce_capability_sub_tlv_flags_x;
758
static int hf_pcep_sr_pce_capability_sub_tlv_flags_n;
759
static int hf_pcep_sr_pce_capability_msd; //deprecated
760
static int hf_pcep_sr_pce_capability_sub_tlv_msd;
761
static int hf_pcep_association_reserved;
762
static int hf_pcep_association_flags;
763
static int hf_pcep_association_flags_r;
764
static int hf_pcep_association_type;
765
static int hf_pcep_association_id;
766
static int hf_pcep_association_source_ipv4;
767
static int hf_pcep_association_source_ipv6;
768
static int hf_pcep_association_source_global;
769
static int hf_pcep_association_id_extended;
770
771
static int hf_pcep_association_id_extended_color;
772
static int hf_pcep_association_id_extended_ipv4_endpoint;
773
static int hf_pcep_association_id_extended_ipv6_endpoint;
774
static int hf_pcep_unreach_destination_obj_ipv4_address;
775
static int hf_pcep_unreach_destination_obj_ipv6_address;
776
777
static int hf_pcep_obj_path_attrib_flags;
778
static int hf_pcep_obj_path_attrib_flags_o;
779
static int hf_pcep_obj_path_attrib_flags_r;
780
static int hf_pcep_obj_path_attrib_flags_reserved;
781
static int hf_pcep_obj_path_attrib_path_id;
782
783
static int hf_pcep_op_conf_assoc_range_reserved;
784
static int hf_pcep_op_conf_assoc_range_assoc_type;
785
static int hf_pcep_op_conf_assoc_range_start_assoc;
786
static int hf_pcep_op_conf_assoc_range_range;
787
788
static int hf_pcep_srcpag_info_color;
789
static int hf_pcep_srcpag_info_destination_endpoint;
790
static int hf_pcep_srcpag_info_preference;
791
792
static int hf_pcep_te_path_binding_bt;
793
static int hf_pcep_te_path_binding_flags;
794
static int hf_pcep_te_path_binding_flags_r;
795
static int hf_pcep_te_path_binding_flags_reserved;
796
static int hf_pcep_te_path_binding_reserved;
797
static int hf_pcep_te_path_binding_bsid;
798
static int hf_pcep_te_path_binding_bsid_label;
799
static int hf_pcep_te_path_binding_bsid_tc;
800
static int hf_pcep_te_path_binding_bsid_s;
801
static int hf_pcep_te_path_binding_bsid_ttl;
802
static int hf_pcep_te_path_binding_bsid_value;
803
804
static int hf_pcep_sr_policy_name;
805
static int hf_pcep_sr_policy_cpath_id_proto_origin;
806
static int hf_pcep_sr_policy_cpath_id_originator_asn;
807
static int hf_pcep_sr_policy_cpath_id_originator_address;
808
static int hf_pcep_sr_policy_cpath_id_discriminator;
809
static int hf_pcep_sr_policy_cpath_name;
810
static int hf_pcep_sr_policy_cpath_preference;
811
812
static int hf_pcep_multipath_number_of_multipaths;
813
static int hf_pcep_multipath_cap_flags;
814
static int hf_pcep_multipath_weight_capability;
815
static int hf_pcep_multipath_backup_capability;
816
static int hf_pcep_multipath_oppdir_path_capability;
817
static int hf_pcep_multipath_forward_class_capability;
818
static int hf_pcep_composite_candidate_path_capability;
819
static int hf_pcep_multipath_weight;
820
821
static int hf_pcep_enterprise_number;
822
static int hf_pcep_enterprise_specific_info;
823
static int hf_pcep_tlv_enterprise_number;
824
static int hf_pcep_tlv_enterprise_specific_info;
825
826
static int hf_pcep_bu_reserved;
827
static int hf_pcep_bu_butype;
828
static int hf_pcep_bu_utilization;
829
830
static int hf_pcep_path_setup_type_capability_sub_tlv_type;
831
static int hf_pcep_path_setup_type_capability_sub_tlv_length;
832
833
static int ett_pcep;
834
static int ett_pcep_hdr;
835
static int ett_pcep_obj_open;
836
static int ett_pcep_obj_request_parameters;
837
static int ett_pcep_obj_no_path;
838
static int ett_pcep_obj_end_point;
839
static int ett_pcep_obj_bandwidth;
840
static int ett_pcep_obj_metric;
841
static int ett_pcep_obj_explicit_route;
842
static int ett_pcep_obj_record_route;
843
static int ett_pcep_obj_lspa;
844
static int ett_pcep_obj_iro;
845
static int ett_pcep_obj_svec;
846
static int ett_pcep_obj_notification;
847
static int ett_pcep_obj_error;
848
static int ett_pcep_obj_load_balancing;
849
static int ett_pcep_obj_close;
850
static int ett_pcep_obj_path_key;
851
static int ett_pcep_obj_xro;
852
static int ett_pcep_obj_monitoring;
853
static int ett_pcep_obj_pcc_id_req;
854
static int ett_pcep_obj_of;
855
static int ett_pcep_obj_classtype;
856
static int ett_pcep_obj_global_constraints;
857
static int ett_pcep_obj_pce_id;
858
static int ett_pcep_obj_proc_time;
859
static int ett_pcep_obj_overload;
860
static int ett_pcep_obj_unreach_destination;
861
static int ett_pcep_obj_sero;
862
static int ett_pcep_obj_srro;
863
static int ett_pcep_obj_branch_node_capability;
864
static int ett_pcep_obj_lsp;
865
static int ett_pcep_obj_srp;
866
static int ett_pcep_obj_vendor_information;
867
static int ett_pcep_obj_bu;
868
static int ett_pcep_obj_inter_layer;
869
static int ett_pcep_obj_switch_layer;
870
static int ett_pcep_obj_req_adap_cap;
871
static int ett_pcep_obj_server_ind;
872
static int ett_pcep_obj_association;
873
static int ett_pcep_obj_s2ls;
874
static int ett_pcep_obj_wa;
875
static int ett_pcep_obj_flowspec;
876
static int ett_pcep_obj_cci_type;
877
static int ett_pcep_obj_path_attrib;
878
static int ett_pcep_obj_unknown;
879
880
/* Generated from convert_proto_tree_add_text.pl */
881
static expert_field ei_pcep_pcep_object_body_non_defined;
882
static expert_field ei_pcep_non_defined_object;
883
static expert_field ei_pcep_object_length;
884
static expert_field ei_pcep_subobject_bad_length;
885
static expert_field ei_pcep_non_defined_subobject;
886
static expert_field ei_pcep_unknown_type_object;
887
888
/* PCEP message types.*/
889
typedef enum {
890
    PCEP_MSG_NO_VALID,
891
    PCEP_MSG_OPEN,
892
    PCEP_MSG_KEEPALIVE,
893
    PCEP_MSG_PATH_COMPUTATION_REQUEST,
894
    PCEP_MSG_PATH_COMPUTATION_REPLY,
895
    PCEP_MSG_NOTIFICATION,
896
    PCEP_MSG_ERROR,
897
    PCEP_MSG_CLOSE,
898
    PCEP_MSG_PATH_COMPUTATION_MONITORING_REQUEST,
899
    PCEP_MSG_PATH_COMPUTATION_MONITORING_REPLY,
900
    PCEP_MSG_PATH_COMPUTATION_LSP_STATE_REPORT,
901
    PCEP_MSG_PATH_COMPUTATION_LSP_UPDATE_REQUEST,
902
    PCEP_MSG_INITIATE,
903
    PCEP_MSG_STARTTLS
904
} pcep_message_types;
905
906
static const value_string message_type_vals[] = {
907
    {PCEP_MSG_OPEN,                                "Open"                                           },
908
    {PCEP_MSG_KEEPALIVE,                           "Keepalive"                                      },
909
    {PCEP_MSG_PATH_COMPUTATION_REQUEST,            "Path Computation Request (PCReq)"               },
910
    {PCEP_MSG_PATH_COMPUTATION_REPLY,              "Path Computation Reply (PCRep)"                 },
911
    {PCEP_MSG_NOTIFICATION,                        "Notification (PCNtf)"                           },
912
    {PCEP_MSG_ERROR,                               "Error (PCErr)"                                  },
913
    {PCEP_MSG_CLOSE,                               "Close"                                          },
914
    {PCEP_MSG_PATH_COMPUTATION_MONITORING_REQUEST, "Path Computation Monitoring Request (PCMonReq)" },
915
    {PCEP_MSG_PATH_COMPUTATION_MONITORING_REPLY,   "Path Computation Monitoring Reply (PCMonRep)"   },
916
    {PCEP_MSG_PATH_COMPUTATION_LSP_STATE_REPORT,   "Path Computation LSP State Report (PCRpt)"      },
917
    {PCEP_MSG_PATH_COMPUTATION_LSP_UPDATE_REQUEST, "Path Computation LSP Update Request (PCUpd)"    },
918
    {PCEP_MSG_INITIATE,                            "Path Computation LSP Initiate (PCInitiate)"     },
919
    {PCEP_MSG_STARTTLS,                            "StartTLS"                                       },
920
    {0, NULL }
921
};
922
923
static const value_string pcep_class_vals[] = {
924
    {PCEP_OPEN_OBJ,                   "OPEN OBJECT"                            },
925
    {PCEP_RP_OBJ,                     "RP OBJECT"                              },
926
    {PCEP_NO_PATH_OBJ,                "NO-PATH OBJECT"                         },
927
    {PCEP_END_POINT_OBJ,              "END-POINT OBJECT"                       },
928
    {PCEP_BANDWIDTH_OBJ,              "BANDWIDTH OBJECT"                       },
929
    {PCEP_METRIC_OBJ,                 "METRIC OBJECT"                          },
930
    {PCEP_EXPLICIT_ROUTE_OBJ,         "EXPLICIT ROUTE OBJECT (ERO)"            },
931
    {PCEP_RECORD_ROUTE_OBJ,           "RECORD ROUTE OBJECT (RRO)"              },
932
    {PCEP_LSPA_OBJ,                   "LSPA OBJECT"                            },
933
    {PCEP_IRO_OBJ,                    "IRO OBJECT"                             },
934
    {PCEP_SVEC_OBJ,                   "SVEC OBJECT"                            },
935
    {PCEP_NOTIFICATION_OBJ,           "NOTIFICATION OBJECT"                    },
936
    {PCEP_PCEP_ERROR_OBJ,             "PCEP ERROR OBJECT"                      },
937
    {PCEP_LOAD_BALANCING_OBJ,         "LOAD BALANCING OBJECT"                  },
938
    {PCEP_CLOSE_OBJ,                  "CLOSE OBJECT"                           },
939
    {PCEP_PATH_KEY_OBJ,               "PATH-KEY OBJECT"                        },
940
    {PCEP_XRO_OBJ,                    "EXCLUDE ROUTE OBJECT (XRO)"             },
941
    {PCEP_OBJ_MONITORING,             "MONITORING OBJECT"                      },
942
    {PCEP_OBJ_PCC_ID_REQ,             "PCC-ID-REQ OBJECT"                      },
943
    {PCEP_OF_OBJ,                     "OBJECTIVE FUNCTION OBJECT (OF)"         },
944
    {PCEP_CLASSTYPE_OBJ,              "CLASSTYPE OBJECT"                       },
945
    {PCEP_GLOBAL_CONSTRAINTS_OBJ,     "GLOBAL-CONSTRAINTS OBJECT"              },
946
    {PCEP_OBJ_PCE_ID,                 "PCE-ID OBJECT"                          },
947
    {PCEP_OBJ_PROC_TIME,              "PROC-TIME OBJECT"                       },
948
    {PCEP_OBJ_OVERLOAD,               "OVERLOAD OBJECT"                        },
949
    {PCEP_OBJ_UNREACH_DESTINATION,    "UNREACH-DESTINATION OBJECT"             },
950
    {PCEP_SERO_OBJ,                   "SECONDARY EXPLICIT ROUTE OBJECT (SERO)" },
951
    {PCEP_SRRO_OBJ,                   "SECONDARY RECORD ROUTE OBJECT (SRRO)"   },
952
    {PCEP_OBJ_BRANCH_NODE_CAPABILITY, "BRANCH NODE CAPABILITY OBJECT (BNC)"    },
953
    {PCEP_OBJ_LSP,                    "LSP OBJECT"                             },
954
    {PCEP_OBJ_SRP,                    "SRP OBJECT"                             },
955
    {PCEP_OBJ_VENDOR_INFORMATION,     "VENDOR-INFORMATION OBJECT"              },
956
    {PCEP_OBJ_BU,                     "BU OBJECT"                              },
957
    {PCEP_INTER_LAYER_OBJ,            "INTER-LAYER OBJECT"                     },
958
    {PCEP_SWITCH_LAYER_OBJ,           "SWITCH-LAYER OBJECT"                    },
959
    {PCEP_REQ_ADAP_CAP_OBJ,           "REQ-ADAP-CAP OBJECT"                    },
960
    {PCEP_SERVER_IND_OBJ,             "SERVER-INDICATION OBJECT"               },
961
    {PCEP_ASSOCIATION_OBJ,            "ASSOCIATION OBJECT"                     },
962
    {PCEP_S2LS_OBJ,                   "S2LS OBJECT"                            },
963
    {PCEP_WA_OBJ,                     "WA OBJECT"                              },
964
    {PCEP_FLOWSPEC_OBJ,               "FLOWSPEC OBJECT"                        },
965
    {PCEP_CCI_TYPE_OBJ,               "CCI OBJECT-TYPE"                        },
966
    {PCEP_PATH_ATTRIB_OBJ,            "PATH-ATTRIB OBJECT"                     },
967
    {0, NULL }
968
};
969
static value_string_ext pcep_class_vals_ext = VALUE_STRING_EXT_INIT(pcep_class_vals);
970
971
static const value_string pcep_obj_open_type_vals[] = {
972
    {1, "Open"},
973
    {0, NULL }
974
};
975
976
static const value_string pcep_obj_rp_type_vals[] = {
977
    {1, "Request Parameters"},
978
    {0, NULL }
979
};
980
981
static const value_string pcep_obj_no_path_type_vals[] = {
982
    {1, "No Path"},
983
    {0, NULL }
984
};
985
986
static const value_string pcep_obj_end_point_type_vals[] = {
987
    {1, "IPv4 addresses"},
988
    {2, "IPv6 addresses"},
989
    {3, "IPv4"          },
990
    {4, "IPv6"          },
991
    {0, NULL }
992
};
993
994
static const value_string pcep_obj_bandwidth_type_vals[] = {
995
    {1, "Requested bandwidth"                                                       },
996
    {2, "Bandwidth of an existing TE LSP for which a reoptimization is requested"   },
997
    {0, NULL }
998
};
999
1000
static const value_string pcep_obj_metric_type_vals[] = {
1001
    {1, "Metric"},
1002
    {0, NULL }
1003
};
1004
1005
static const value_string pcep_obj_explicit_route_type_vals[] = {
1006
    {1, "Explicit Route"},
1007
    {0, NULL }
1008
};
1009
1010
static const value_string pcep_obj_record_route_type_vals[] = {
1011
    {1, "Recorded Route"},
1012
    {0, NULL }
1013
};
1014
1015
static const value_string pcep_obj_lspa_type_vals[] = {
1016
    {1, "LSP Attributes"},
1017
    {0, NULL }
1018
};
1019
1020
static const value_string pcep_obj_iro_type_vals[] = {
1021
    {1, "Include Route"},
1022
    {0, NULL }
1023
};
1024
1025
static const value_string pcep_obj_svec_type_vals[] = {
1026
    {1, "Synchronization Vector"},
1027
    {0, NULL }
1028
};
1029
1030
static const value_string pcep_obj_notification_type_vals[] = {
1031
    {1, "Notification"},
1032
    {0, NULL }
1033
};
1034
1035
static const value_string pcep_obj_pcep_error_type_vals[] = {
1036
    {1, "PCEP Error"},
1037
    {0, NULL }
1038
};
1039
1040
static const value_string pcep_obj_load_balancing_type_vals[] = {
1041
    {1, "Load Balancing"},
1042
    {0, NULL }
1043
};
1044
1045
static const value_string pcep_obj_close_type_vals[] = {
1046
    {1, "Close"},
1047
    {0, NULL }
1048
};
1049
1050
static const value_string pcep_obj_path_key_type_vals[] = {
1051
    {1, "Path Key"},
1052
    {0, NULL }
1053
};
1054
1055
static const value_string pcep_obj_xro_type_vals[] = {
1056
    {1, "Route exclusion"},
1057
    {0, NULL }
1058
};
1059
1060
static const value_string pcep_obj_monitoring_type_vals[] = {
1061
    {1, "Monitoring"},
1062
    {0, NULL }
1063
};
1064
1065
static const value_string pcep_obj_pcc_id_req_type_vals[] = {
1066
    {1, "IPv4 addresses"},
1067
    {2, "IPv6 addresses"},
1068
    {0, NULL }
1069
};
1070
1071
static const value_string pcep_obj_of_type_vals[] = {
1072
    {1, "Objective Function"},
1073
    {0, NULL }
1074
};
1075
1076
static const value_string pcep_obj_pce_id_type_vals[] = {
1077
    {1, "IPv4 addresses"},
1078
    {2, "IPv6 addresses"},
1079
    {0, NULL }
1080
};
1081
1082
static const value_string pcep_obj_proc_time_type_vals[] = {
1083
    {1, "PROC-TIME"},
1084
    {0, NULL }
1085
};
1086
1087
static const value_string pcep_obj_overload_type_vals[] = {
1088
    {1, "overload"},
1089
    {0, NULL }
1090
};
1091
1092
static const value_string pcep_obj_unreach_destination_type_vals[] = {
1093
    {1, "IPv4"},
1094
    {2, "IPv6"},
1095
    {0, NULL }
1096
};
1097
1098
static const value_string pcep_obj_sero_type_vals[] = {
1099
    {1, "SERO"},
1100
    {0, NULL }
1101
};
1102
1103
static const value_string pcep_obj_srro_type_vals[] = {
1104
    {1, "SRRO"},
1105
    {0, NULL }
1106
};
1107
1108
static const value_string pcep_obj_branch_node_capability_type_vals[] = {
1109
    {1, "Branch node list"},
1110
    {2, "Non-branch node list"},
1111
    {0, NULL }
1112
};
1113
1114
static const value_string pcep_obj_lsp_type_vals[] = {
1115
    {1, "LSP"},
1116
    {0, NULL }
1117
};
1118
1119
static const value_string pcep_obj_srp_type_vals[] = {
1120
    {1, "SRP"},
1121
    {0, NULL }
1122
};
1123
1124
static const value_string pcep_obj_vendor_information_type_vals[] = {
1125
    {1, "Vendor-Specific Constraints"},
1126
    {0, NULL }
1127
};
1128
1129
static const value_string pcep_obj_bu_type_vals[] = {
1130
    {1, "BU"},
1131
    {0, NULL }
1132
};
1133
1134
static const value_string pcep_obj_association_type_vals[] = {
1135
    {1, "IPv4"},
1136
    {2, "IPv6"},
1137
    {0, NULL }
1138
};
1139
1140
static const value_string pcep_subobj_vals[] = {
1141
    {PCEP_SUB_IPv4,                "SUBOBJECT IPv4"                     },
1142
    {PCEP_SUB_IPv6,                "SUBOBJECT IPv6"                     },
1143
    {PCEP_SUB_LABEL_CONTROL,       "SUBOBJECT LABEL"                    },
1144
    {PCEP_SUB_UNNUMB_INTERFACE_ID, "SUBOBJECT UNNUMBERED INTERFACE-ID"  },
1145
    {PCEP_SUB_AUTONOMOUS_SYS_NUM,  "SUBOBJECT AUTONOMOUS SYSTEM NUMBER" },
1146
    {PCEP_SUB_SRLG,                "SUBOBJECT SRLG"                     },
1147
    {PCEP_SUB_SR_PRE_IANA,         "SUBOBJECT SR"                       },
1148
    {PCEP_SUB_PKSv4,               "SUBOBJECT PATH KEY (IPv4)"          },
1149
    {PCEP_SUB_PKSv6,               "SUBOBJECT PATH KEY (IPv6)"          },
1150
    {PCEP_SUB_SR,                  "SUBOBJECT SR"                       },
1151
    {PCEP_SUB_SRv6,                "SUBOBJECT SRv6"                     },
1152
    {0, NULL }
1153
};
1154
1155
1156
static const value_string pcep_subobj_xro_vals[] = {
1157
    {PCEP_SUB_IPv4,                "SUBOBJECT IPv4"                     },
1158
    {PCEP_SUB_IPv6,                "SUBOBJECT IPv6"                     },
1159
    {PCEP_SUB_UNNUMB_INTERFACE_ID, "SUBOBJECT UNNUMBERED INTERFACE-ID"  },
1160
    {PCEP_SUB_AUTONOMOUS_SYS_NUM,  "SUBOBJECT AUTONOMOUS SYSTEM NUMBER" },
1161
    {PCEP_SUB_SRLG,                "SUBOBJECT SRLG"                     },
1162
    {0, NULL }
1163
};
1164
1165
/*In the NO-PATH Object the two different possibilities that NI can have*/
1166
static const value_string pcep_no_path_obj_vals[] = {
1167
    {NO_SATISFYING,                "No path satisfying the set of constraints could be found" },
1168
    {CHAIN_BROKEN,                 "PCEP Chain Broken"                                        },
1169
    {0, NULL }
1170
};
1171
1172
/*Different values of "Type (T)" in the METRIC Obj */
1173
static const value_string pcep_metric_obj_vals[] = {
1174
    { 0, "Reserved"                        },
1175
    { 1, "IGP Metric"                      },
1176
    { 2, "TE Metric"                       },
1177
    { 3, "Hop Counts"                      },
1178
    { 4, "Aggregate bandwidth consumption" },
1179
    { 5, "Load of the most loaded link"    },
1180
    { 6, "Cumulative IGP cost"             },
1181
    { 7, "Cumulative TE cost"              },
1182
    { 8, "P2MP IGM metric"                 },
1183
    { 9, "P2MP TE metric"                  },
1184
    {10, "P2MP hop count metric"           },
1185
    {11, "Segment-ID (SID) Depth"          },   /* RFC 8664 */
1186
    {12, "Path Delay metric"               },   /* draft-ietf-pce-pcep-service-aware */
1187
    {13, "Path Delay Variation metric"     },   /* draft-ietf-pce-pcep-service-aware */
1188
    {14, "Path Loss metric"                },   /* draft-ietf-pce-pcep-service-aware */
1189
    {15, "P2MP Path Delay metric"          },   /* draft-ietf-pce-pcep-service-aware */
1190
    {16, "P2MP Path Delay variation metric"},   /* draft-ietf-pce-pcep-service-aware */
1191
    {17, "P2MP Path Loss metric"           },   /* draft-ietf-pce-pcep-service-aware */
1192
    {18, "Number of adaptations on a path" },   /* RFC8282 */
1193
    {19, "Number of layers on a path"      },   /* RFC8282 */
1194
    {20, "Domain Count metric"             },   /* RFC8685 */
1195
    {21, "Border Node Count metric"        },   /* RFC8685 */
1196
    {0, NULL }
1197
};
1198
1199
/*Different values for (L) in the ERO and IRO Objs */
1200
static const value_string pcep_route_l_obj_vals[] = {
1201
    {STRICT_HOP,          "Strict Hop"  },
1202
    {LOOSE_HOP,           "Loose Hop"   },
1203
    {0, NULL }
1204
};
1205
1206
/*Different values of the direction of the label (U) in the ERO and RRO Objs */
1207
static const value_string pcep_route_u_obj_vals[] = {
1208
    {DOWNSTREAM_LABEL,    "Downstream Label" },
1209
    {UPSTREAM_LABEL,      "Upstream Label"   },
1210
    {0, NULL }
1211
};
1212
1213
/*Values of Notification type*/
1214
static const value_string pcep_notification_types_vals[] = {
1215
    {NOT_REQ_CANCEL,      "Pending Request Cancelled" },
1216
    {PCEP_CONGESTION,     "PCE Congestion"            },
1217
    {0, NULL }
1218
};
1219
1220
/*Values of Notification value for Notification Type=1*/
1221
static const value_string pcep_notification_values1_vals[] = {
1222
    {NOTI_PCC_CANCEL_REQ, "PCC Cancels a set of Pending Request (s)" },
1223
    {NOTI_PCE_CANCEL_REQ, "PCE Cancels a set of Pending Request (s)" },
1224
    {0, NULL }
1225
};
1226
1227
/*Values of Notification value for Notification Type=2*/
1228
static const value_string pcep_notification_values2_vals[] = {
1229
    {NOTI_PCE_CONGEST,    "PCE in Congested State"           },
1230
    {NOTI_PCE_NO_CONGEST, "PCE no Longer in Congested state" },
1231
    {0, NULL }
1232
};
1233
1234
1235
/* PCEP TLVs */
1236
static const value_string pcep_tlvs_vals[] = {
1237
    {1,  "NO-PATH-VECTOR TLV"                      },
1238
    {2,  "OVERLOAD-DURATION TLV"                   },
1239
    {3,  "REQ-MISSING TLV"                         },
1240
    {4,  "OF-list TLV"                             },
1241
    {5,  "Order TLV"                               },
1242
    {6,  "P2MP Capable"                            },
1243
    {7,  "VENDOR-INFORMATION-TLV"                  },
1244
    {8,  "Wavelength Selection"                    },
1245
    {9,  "Wavelength Restriction"                  },
1246
    {10, "Wavelength Allocation"                   },
1247
    {11, "Optical Interface Class List"            },
1248
    {12, "Client Signal Information"               },
1249
    {13, "H-PCE-CAPABILITY"                        },
1250
    {14, "Domain-ID"                               },
1251
    {15, "H-PCE-FLAG"                              },
1252
    {16, "STATEFUL-PCE-CAPABILITY"                 },
1253
    {17, "SYMBOLIC-PATH-NAME"                      },
1254
    {18, "IPV4-LSP-IDENTIFIERS"                    },
1255
    {19, "IPV6-LSP-IDENTIFIERS"                    },
1256
    {20, "LSP-ERROR-CODE"                          },
1257
    {21, "RSVP-ERROR-SPEC"                         },
1258
    {23, "LSP-DB-VERSION"                          },
1259
    {24, "SPEAKER-ENTITY-ID"                       },
1260
    {26, "SR-PCE-CAPABILITY (deprecated)"          },
1261
    {27, "PATH-SETUP-TYPE (PRE-IANA)"              },
1262
    {28, "PATH-SETUP-TYPE"                         },
1263
    {29, "OP-CONF-ASSOC-RANGE"                     },
1264
    {30, "GLOBAL-ASSOCIATION-SOURCE"               },
1265
    {31, "EXTENDED-ASSOCIATION-ID"                 },
1266
    {32, "P2MP-IPV4-LSP-IDENTIFIERS"               },
1267
    {33, "P2MP-IPV6-LSP-IDENTIFIERS"               },
1268
    {34, "PATH-SETUP-TYPE-CAPABILITY"              },
1269
    {35, "ASSOC-Type-List"                         },
1270
    {36, "AUTO-BANDWIDTH-CAPABILITY"               },
1271
    {37, "AUTO-BANDWIDTH-ATTRIBUTES"               },
1272
    {38, "Path Protection Association Group TLV"   },
1273
    {39, "IPV4-ADDRESS"                            },
1274
    {40, "IPV6-ADDRESS"                            },
1275
    {41, "UNNUMBERED-ENDPOINT"                     },
1276
    {42, "LABEL-REQUEST"                           },
1277
    {43, "LABEL-SET"                               },
1278
    {44, "PROTECTION-ATTRIBUTE"                    },
1279
    {45, "GMPLS-CAPABILITY"                        },
1280
    {46, "DISJOINTNESS-CONFIGURATION"              },
1281
    {47, "DISJOINTNESS-STATUS"                     },
1282
    {48, "POLICY-PARAMETERS-TLV"                   },
1283
    {49, "SCHED-LSP-ATTRIBUTE"                     },
1284
    {50, "SCHED-PD-LSP-ATTRIBUTE"                  },
1285
    {51, "PCE-FLOWSPEC-CAPABILITY TLV"             },
1286
    {52, "FLOW FILTER TLV"                         },
1287
    {53, "L2 FLOW FILTER TLV"                      },
1288
    {54, "Bidirectional LSP Association Group TLV" },
1289
    {55, "TE-PATH-BINDING"                         }, /* TEMPORARY - registered 2021-03-29, expires 2022-03-29 draft-ietf-pce-binding-label-sid-07 */
1290
    {56, "SRPOLICY-POL-NAME"                       }, /* TEMPORARY - registered 2021-03-30, expires 2022-03-30 draft-ietf-pce-segment-routing-policy-cp-04 */
1291
    {57, "SRPOLICY-CPATH-ID"                       }, /* TEMPORARY - registered 2021-03-30, expires 2022-03-30 draft-ietf-pce-segment-routing-policy-cp-04 */
1292
    {58, "SRPOLICY-CPATH-NAME"                     }, /* TEMPORARY - registered 2021-03-30, expires 2022-03-30 draft-ietf-pce-segment-routing-policy-cp-04 */
1293
    {59, "SRPOLICY-CPATH-PREFERENCE"               }, /* TEMPORARY - registered 2021-03-30, expires 2022-03-30 draft-ietf-pce-segment-routing-policy-cp-04 */
1294
    {60, "MULTIPATH-CAP"                           }, /* TEMPORARY - registered 2022-05-09, extension registered 2024-04-25, expires 2025-05-09 draft-ietf-pce-multipath-12 */
1295
    {61, "MULTIPATH-WEIGHT TLV"                    }, /* TEMPORARY - registered 2022-05-09, extension registered 2024-04-25, expires 2025-05-09 draft-ietf-pce-multipath-12 */
1296
    {64, "LSP-EXTENDED-FLAG"                       },
1297
    {65, "VIRTUAL-NETWORK-TLV"                     },
1298
    {0, NULL                                       }
1299
};
1300
1301
1302
/*Values of Objective Functions*/
1303
static const value_string pcep_of_vals[] = {
1304
    { 1, "Minimum Cost Path (MCP)"                              },
1305
    { 2, "Minimum Load Path (MLP)"                              },
1306
    { 3, "Maximum residual Bandwidth Path (MBP)"                },
1307
    { 4, "Minimize aggregate Bandwidth Consumption (MBC)"       },
1308
    { 5, "Minimize the Load of the most loaded Link (MLL)"      },
1309
    { 6, "Minimize the Cumulative Cost of a set of paths (MCC)" },
1310
    { 7, "Shortest Path Tree (SPT)"                             }, /* RFC 6006 */
1311
    { 8, "Minimum Cost Tree (MCT)"                              }, /* RFC 6006 */
1312
    { 9, "Minimum Packet Loss Path (MPLP)"                      }, /* draft-ietf-pce-pcep-service-aware */
1313
    {10, "Maximum Under-Utilized Path (MUP)"                    }, /* draft-ietf-pce-pcep-service-aware */
1314
    {11, "Maximum Reserved Under-Utilized Path (MRUP)"          }, /* draft-ietf-pce-pcep-service-aware */
1315
    {0, NULL }
1316
};
1317
1318
1319
/*Values of Bandwidth Utilization (BU) Object bandwidth utilization Type */
1320
static const value_string pcep_bu_butype_vals[] = {
1321
    {0, "Reserved"                                   }, /* draft-ietf-pce-pcep-service-aware */
1322
    {1, "LBU (Link Bandwidth Utilization)"           }, /* draft-ietf-pce-pcep-service-aware */
1323
    {2, "LRBU (Link Residual Bandwidth Utilization)" }, /* draft-ietf-pce-pcep-service-aware */
1324
    {0, NULL }
1325
};
1326
1327
1328
/*Values of different types of errors*/
1329
static const value_string pcep_error_types_obj_vals[] = {
1330
    {ESTABLISH_FAILURE,                 "PCEP Session Establishment Failure"            },
1331
    {CAP_NOT_SUPPORTED,                 "Capability non supported"                      },
1332
    {UNKNOWN_OBJ,                       "Unknown Object"                                },
1333
    {NOT_SUPP_OBJ,                      "Not Supported Object"                          },
1334
    {POLICY_VIOLATION,                  "Policy Violation"                              },
1335
    {MANDATORY_OBJ_MIS,                 "Mandatory Object Missing"                      },
1336
    {SYNCH_PCREQ_MIS,                   "Synchronized Path Computation Request Missing" },
1337
    {UNKNOWN_REQ_REF,                   "Unknown Request Reference"                     },
1338
    {ATTEMPT_2_SESSION,                 "Attempt to Establish a Second PCEP Session"    },
1339
    {INVALID_OBJ,                       "Reception of an invalid object"                },
1340
    {UNRECO_EXRS_SUBOBJ,                "Unrecognized EXRS Subobject"                   },
1341
    {DIFFSERV_TE_ERROR,                 "Diffserv-aware TE error"                       },
1342
    {BRPC_FAILURE,                      "BRPC procedure completion failure"             },
1343
    {GCO_ERROR,                         "Global Concurrent Optimization error"          },
1344
    {P2MP_CAPABILITY_ERROR,             "P2PM capability error"                         },
1345
    {P2MP_END_POINTS_ERROR,             "P2PM END-POINTS error"                         },
1346
    {P2MP_FRAGMENT_ERROR,               "P2PM Fragmentation error"                      },
1347
    {INVALID_OPERATION,                 "Invalid Operation"                             },
1348
    {LSP_STATE_SYNCHRONIZATION_ERROR,   "LSP State synchronization error"               },
1349
    {BAD_PARAMETER_VALUE,               "Bad parameter value"                           },
1350
    {LSP_INSTANTIATION_ERROR,           "LSP instantiation error"                       },
1351
    {ASSOCIATION_ERROR,                 "Association instantiation error"               },
1352
    {WSON_RWA_ERROR,                    "WSON RWA error"                                },
1353
    {H_PCE_ERROR,                       "H-PCE error"                                   },
1354
    {PATH_COMPUTATION_FAILURE,          "Path computation failure"                      },
1355
    {0, NULL }
1356
};
1357
static value_string_ext pcep_error_types_obj_vals_ext = VALUE_STRING_EXT_INIT(pcep_error_types_obj_vals);
1358
1359
/*Error values for error type 1*/
1360
static const value_string pcep_error_value_1_vals[] = {
1361
    {1, "Reception of an invalid Open msg or a non Open msg"},
1362
    {2, "No Open Message received before the expiration of the OpenWait Timer "},
1363
    {3, "Unacceptable and non Negotiable session characteristics"},
1364
    {4, "Unacceptable but Negotiable session characteristics"},
1365
    {5, "Reception of a second Open Message with still Unacceptable Session characteristics"},
1366
    {6, "Reception of a PCEPrr message proposing unacceptable session characteristics"},
1367
    {7, "NO Keepalive or PCEPrr message received before the expiration of the Keepwait timer supported"},
1368
    {8, "PCEP version not supported"},
1369
    {0, NULL}
1370
};
1371
1372
/*Error values for error type 3*/
1373
static const value_string pcep_error_value_3_vals[] = {
1374
    {1, "Unrecognized object class"},
1375
    {2, "Unrecognized object type"},
1376
    {0, NULL}
1377
};
1378
1379
/*Error values for error type 4*/
1380
static const value_string pcep_error_value_4_vals[] = {
1381
    {1, "Not supported object class"},
1382
    {2, "Not supported object type"},
1383
    {4, "Not supported parameter"},
1384
    {5, "Unsupported network performance constraint"},
1385
    {6, "BANDWIDTH object type 3 or 4 not supported"},
1386
    {7, "Unsupported endpoint type in END-POINTS Generalized Endpoint object type"},
1387
    {8, "Unsupported TLV present in END-POINTS Generalized Endpoint object type"},
1388
    {9, "Unsupported granularity in the RP object flags"},
1389
    {0, NULL}
1390
};
1391
1392
/*Error values for error type 5*/
1393
static const value_string pcep_error_value_5_vals[] = {
1394
    {1, "C bit of the METRIC object set (Request Rejected)"},
1395
    {2, "O bit of the RP object set (Request Rejected)"},
1396
    {3, "Objective Function not allowed (Request Rejected)"},
1397
    {4, "OF bit of the RP object set (Request Rejected)"},
1398
    {5, "Global concurrent optimization not allowed"},
1399
    {6, "Monitoring message supported but rejected due to policy violation"},
1400
    {7, "P2MP path computation is not allowed"},
1401
    {8, "Not allowed network performance constraint"},  /* draft-ietf-pce-pcep-service-aware*/
1402
    {0, NULL}
1403
};
1404
1405
1406
/*Error values for error type 6*/
1407
static const value_string pcep_error_value_6_vals[] = {
1408
    {1,  "RP object missing"},
1409
    {2,  "RRO object missing for a reoptimization request (R bit of the RP Object set)"},
1410
    {3,  "END-POINTS object missing"},
1411
    {4,  "MONITORINS object missing"},
1412
    {8,  "LSP Object missing"},
1413
    {9,  "ERO Object missing"},
1414
    {10, "SRP Object missing"},
1415
    {11, "LSP-IDENTIFIERS TLV missing"},
1416
    {12, "LSP-DB-VERSION TLV missing"},
1417
    {13, "LSP cleanup TLV missing"},
1418
    {14, "SYMBOLIC-PATH-NAME TLV missing"},
1419
    {15, "DISJOINTNESS-CONFIGURATION TLV missing"},
1420
    {16, "Scheduled TLV missing"},
1421
    {17, "CCI object missing"},
1422
    {18, "VIRTUAL-NETWORK-TLV missing"},
1423
    {0, NULL}
1424
};
1425
1426
/*Error values for error type 10*/
1427
static const value_string pcep_error_value_10_vals[] = {
1428
    {1,  "Reception of an object with P flag not set although the P-flag must be set"}, /*RFC 5440*/
1429
    {2,  "Bad label value"},                                                            /* RFC 8664 */
1430
    {3,  "Unsupported number of SR-ERO subobjects"},                                    /* RFC 8664 */
1431
    {4,  "Bad label format"},                                                           /* RFC 8664 */
1432
    {5,  "ERO mixes SR-ERO subobjects with other subobject types"},                     /* RFC 8664 */
1433
    {6,  "Both SID and NAI are absent in ERO subobject"},                               /* RFC 8664 */
1434
    {7,  "Both SID and NAI are absent in RRO subobject"},                               /* RFC 8664 */
1435
    {8,  "SYMBOLIC-PATH-NAME TLV missing"},                                             /* RFC 8281 */
1436
    {9,  "MSD exceeds the default for the PCEP session"},                               /* RFC 8664 */
1437
    {10, "RRO mixes SR-RRO subobjects with other object types"},                        /* RFC 8664 */
1438
    {11, "Malformed object"},                                                           /* RFC 8408 */
1439
    {12, "Missing PCE-SR-CAPABILITY sub-TLV"},                                          /* RFC 8664 */
1440
    {13, "Unsupported NAI Type in the SR-ERO/SR-RRO subobject"},                        /* RFC 8664 */
1441
    {14, "Unknown SID"},                                                                /* RFC 8664 */
1442
    {15, "NAI cannot be resolved to a SID"},                                            /* RFC 8664 */
1443
    {16, "Could not find SRGB"},                                                        /* RFC 8664 */
1444
    {17, "SID index exceeds SRGB size"},                                                /* RFC 8664 */
1445
    {18, "Could not find SRLB"},                                                        /* RFC 8664 */
1446
    {19, "SID index exceeds SRLB size"},                                                /* RFC 8664 */
1447
    {20, "Inconsistent SIDs in SR-ERO/SR-RRO subobjects"},                              /* RFC 8664 */
1448
    {21, "MSD must be nonzero"},                                                        /* RFC 8664 */
1449
    {22, "Mismatch of O field in S2LS and LSP object"},                                 /* RFC 8623 */
1450
    {23, "Incompatible OF codes in H-PCE"},                                             /* RFC 8685 */
1451
    {24, "Bad BANDWIDTH object type 3 or 4"},                                           /* RFC 8779 */
1452
    {25, "Unsupported LSP Protection Flags in PROTECTION-ATTRIBUTE TLV"},               /* RFC 8779 */
1453
    {26, "Unsupported Secondary LSP Protection Flags in PROTECTION-ATTRIBUTE TLV"},     /* RFC 8779 */
1454
    {27, "Unsupported Link Protection Type in PROTECTION-ATTRIBUTE TLV"},               /* RFC 8779 */
1455
    {28, "LABEL-SET TLV present with O bit set but without R bit set in RP"},           /* RFC 8779 */
1456
    {29, "Wrong LABEL-SET TLV present with O and L bits set"},                          /* RFC 8779 */
1457
    {30, "Wrong LABEL-SET TLV present with O bit set and wrong format"},                /* RFC 8779 */
1458
    {31, "Missing GMPLS-CAPABILITY TLV"},                                               /* RFC 8779 */
1459
    {32, "Incompatible OF code"},                                                       /* RFC 8800 */
1460
    {33, "Missing PCECC Capability sub-TLV"},                                           /* RFC 9050 */
1461
    {34, "Missing PCE-SRv6-CAPABILITY sub-TLV"},                                        /* draft-ietf-pce-segment-routing-ipv6-13 */
1462
    {35, "Both SID and NAI are absent in SRv6-RRO subobject "},                         /* draft-ietf-pce-segment-routing-ipv6-13 */
1463
    {36, "RRO mixes SRv6-RRO subobjects with other subobject types"},                   /* draft-ietf-pce-segment-routing-ipv6-13 */
1464
    {37, "Invalid SRv6 SID Structure "},                                                /* draft-ietf-pce-segment-routing-ipv6-13 */
1465
    {38, "Conflicting Path ID"},                                                        /* draft-ietf-pce-multipath-07 */
1466
    {0, NULL}
1467
};
1468
1469
/*Error values for error type 12*/
1470
static const value_string pcep_error_value_12_vals[] = {
1471
    {1, "Unsupported class-type"},
1472
    {2, "Invalid class-type"},
1473
    {3, "Class-type ans setup priority do not form a configured TE-class"},
1474
    {0, NULL}
1475
};
1476
1477
/*Error values for error type 13*/
1478
static const value_string pcep_error_value_13_vals[] = {
1479
    {1, "BRPC procedure not supported by one or more PCEs along the domain path"},
1480
    {0, NULL}
1481
};
1482
1483
/*Error values for error type 15*/
1484
static const value_string pcep_error_value_15_vals[] = {
1485
    {1, "Insufficient memory"},
1486
    {2, "Global concurrent optimization not supported"},
1487
    {0, NULL}
1488
};
1489
1490
/*Error values for error type 16*/
1491
static const value_string pcep_error_value_16_vals[] = {
1492
    {1, "The PCE cannot satisfy the request due to insufficient memory"},
1493
    {2, "The PCE is not capable of P2MP computation"},
1494
    {0, NULL}
1495
};
1496
1497
/*Error values for error type 17*/
1498
static const value_string pcep_error_value_17_vals[] = {
1499
    {1, "The PCE cannot satisfy the request due to no END-POINTS with leaf type 2"},
1500
    {2, "The PCE cannot satisfy the request due to no END-POINTS with leaf type 3"},
1501
    {3, "The PCE cannot satisfy the request due to no END-POINTS with leaf type 4"},
1502
    {4, "The PCE cannot satisfy the request due to inconsistent END-POINTS"},
1503
    {0, NULL}
1504
};
1505
1506
/*Error values for error type 18*/
1507
static const value_string pcep_error_value_18_vals[] = {
1508
    {1, "Fragmented request failure"},
1509
    {2, "Fragmented Report failure"},
1510
    {3, "Fragmented Update failure"},
1511
    {4, "Fragmented Instantiation failure"},
1512
    {0, NULL}
1513
};
1514
1515
/*Error values for error type 19*/
1516
static const value_string pcep_error_value_19_vals[] = {
1517
    {1,  "Attempted LSP Update Request for a non-delegated LSP. The PCEP-ERROR Object is followed by the LSP Object that identifies the LSP"},
1518
    {2,  "Attempted LSP Update Request if active stateful PCE capability was not advertised"},
1519
    {3,  "Attempted LSP Update Request for an LSP identified by an unknown PLSP-ID"},
1520
    {4,  "Unassigned"},
1521
    {5,  "Attempted LSP State Report if active stateful PCE capability was not advertised"},
1522
    {6,  "PCE-initiated LSP limit reached"},                    /* draft-ietf-pce-pce-initiated-lsp */
1523
    {7,  "Delegation for PCE-initiated LSP cannot be revoked"}, /* draft-ietf-pce-pce-initiated-lsp */
1524
    {8,  "Non-zero PLSP-ID in LSP initiation request"},         /* draft-ietf-pce-pce-initiated-lsp */
1525
    {9,  "LSP is not PCE-initiated"},                           /* draft-ietf-pce-pce-initiated-lsp */
1526
    {10, "PCE-initiated operation-frequency limit reached"},    /* draft-ietf-pce-pce-initiated-lsp */
1527
    {11, "Attempted LSP State Report for P2MP if stateful PCE capability for P2MP was not advertised"},
1528
    {12, "Attempted LSP Update Request for P2MP if active stateful PCE capability for P2MP was not advertised"},
1529
    {13, "Attempted LSP Instantiation Request for P2MP if stateful PCE instantiation capability for P2MP was not advertised"},
1530
    {14, "Auto-Bandwidth capability was not advertised"},
1531
    {15, "Attempted LSP scheduling while the scheduling capability was not advertised"},
1532
    {16, "Attempted PCECC operations when PCECC capability was not advertised"},
1533
    {17, "Stateful PCE capability was not advertised"},
1534
    {18, "Unknown Label"},
1535
    {19, "Attempted SRv6 when the capability was not advertised"},
1536
    {20, "Not supported path backup"},
1537
    {21, "Non-empty path"},
1538
    {0, NULL}
1539
};
1540
1541
/*Error values for error type 20*/
1542
static const value_string pcep_error_value_20_vals[] = {
1543
    {1, "A PCE indicates to a PCC that it cannot process (an otherwise valid) LSP State Report. The PCEP-ERROR Object is followed by the LSP Object that identifies the LSP"},
1544
    {2, "LSP Database version mismatch."},
1545
    {3, "The LSP-DB-VERSION TLV Missing when state synchronization avoidance is enabled."},
1546
    {4, "Attempt to trigger a synchronization when the TRIGGERED-SYNC capability has not been advertised."},
1547
    {5, "A PCC indicates to a PCE that it cannot complete the state synchronization"},
1548
    {6, "No sufficient LSP change information for incremental LSP state synchronization."},
1549
    {7, "Received an invalid LSP DB Version Number"},
1550
    {0, NULL}
1551
};
1552
1553
/* Error values for error type 21 */
1554
static const value_string pcep_error_value_21_vals[] = {
1555
    {1, "Unsupported path setup type"},
1556
    {2, "Mismatched path setup type"},
1557
    {0, NULL}
1558
};
1559
1560
/*Error values for error type 23*/
1561
static const value_string pcep_error_value_23_vals[] = {
1562
    {1, "SYMBOLIC-PATH-NAME in use"},                                       /* draft-ietf-pce-pce-initiated-lsp */
1563
    {2, "Speaker identity included for an LSP that is not PCE-initiated"},  /* draft-ietf-pce-pce-initiated-lsp */
1564
    {0, NULL}
1565
};
1566
1567
/*Error values for error type 24*/
1568
static const value_string pcep_error_value_24_vals[] = {
1569
    {1, "Unacceptable instantiation parameters"},   /* draft-ietf-pce-pce-initiated-lsp */
1570
    {2, "Internal error"},                          /* draft-ietf-pce-pce-initiated-lsp */
1571
    {3, "Signaling error"},                         /* draft-ietf-pce-pce-initiated-lsp */
1572
    {0, NULL}
1573
};
1574
1575
/*Error values for error type 25*/
1576
static const value_string pcep_error_value_25_vals[] = {
1577
    {1, "Reception of StartTLS after any PCEP exchange"},
1578
    {2, "Reception of any other message apart from StartTLS, Open, or PCErr"},
1579
    {3, "Failure, connection without TLS is not possible"},
1580
    {4, "Failure, connection without TLS is possible"},
1581
    {5, "No StartTLS message (nor PCErr/Open) before StartTLSWait timer expiry"},
1582
    {0, NULL}
1583
};
1584
1585
/*Error values for error type 26*/
1586
static const value_string pcep_error_value_26_vals[] = {
1587
    {1, "Association-type is not supported"},                                              /* [RFC8697] */
1588
    {2, "Too many LSPs in the association group"},                                         /* [RFC8697] */
1589
    {3, "Too many association groups"},                                                    /* [RFC8697] */
1590
    {4, "Association unknown"},                                                            /* [RFC8697] */
1591
    {5, "Operator-configured association information mismatch "},                          /* [RFC8697] */
1592
    {6, "Association information mismatch"},                                               /* [RFC8697] */
1593
    {7, "Cannot join the association group"},                                              /* [RFC8697] */
1594
    {8, "Association ID not in range"},                                                    /* [RFC8697] */
1595
    {9, "Tunnel ID or End points mismatch for Path Protection Association"},               /* [RFC8745] */
1596
    {10, "Attempt to add another working/protection LSP for Path Protection Association"}, /* [RFC8745] */
1597
    {11, "Protection type is not supported"},                                              /* [RFC8745] */
1598
    {12, "Not expecting policy parameters"},                                               /* [RFC9005] */
1599
    {13, "Unacceptable policy parameters"},                                                /* [RFC9005] */
1600
    {14, "Association group mismatch"},                                                    /* [RFC9059] */
1601
    {15, "Tunnel mismatch in the association group"},                                      /* [RFC9059] */
1602
    {16, "Path Setup Type not supported"},                                                 /* [RFC9059] */
1603
    {17, "Bidirectional LSP direction mismatch"},                                          /* [RFC9059] */
1604
    {18, "Bidirectional LSP co-routed mismatch"},                                          /* [RFC9059] */
1605
    {19, "Endpoint mismatch in the association group"},                                    /* [RFC9059] */
1606
    {0, NULL}
1607
};
1608
1609
/*Error values for error type 27*/
1610
static const value_string pcep_error_value_27_vals[] = {
1611
    {1, "Insufficient memory"},           /* [RFC8780] */
1612
    {2, "RWA computation not supported"}, /* [RFC8780] */
1613
    {3, "Syntactical encoding error"},    /* [RFC8780] */
1614
    {0, NULL}
1615
};
1616
1617
/*Error values for error type 28*/
1618
static const value_string pcep_error_value_28_vals[] = {
1619
    {1, "H-PCE Capability not advertised"},          /* [RFC8685] */
1620
    {2, "Parent PCE Capability cannot be provided"}, /* [RFC8685] */
1621
    {0, NULL}
1622
};
1623
1624
/*Error values for error type 29*/
1625
static const value_string pcep_error_value_29_vals[] = {
1626
    {1, "Unacceptable request message"},                    /* [RFC8779] */
1627
    {2, "Generalized bandwidth value not supported"},       /* [RFC8779] */
1628
    {3, "Label set constraint could not be met"},           /* [RFC8779] */
1629
    {4, "Label constraint could not be met"},               /* [RFC8779] */
1630
    {5, "Constraints could not be met for some intervals"}, /* [RFC8934] */
1631
    {0, NULL}
1632
};
1633
1634
/*Error values for error type 30*/
1635
static const value_string pcep_error_value_30_vals[] = {
1636
    {1, "Unsupported FlowSpec"},  /* [RFC9168] */
1637
    {2, "Malformed FlowSpec"},    /* [RFC9168] */
1638
    {3, "Unresolvable Conflict"}, /* [RFC9168] */
1639
    {4, "Unknown FlowSpec"},      /* [RFC9168] */
1640
    {5, "Unsupported LPM Route"}, /* [RFC9168] */
1641
    {0, NULL}
1642
};
1643
1644
/*Error values for error type 31*/
1645
static const value_string pcep_error_value_31_vals[] = {
1646
    {1, "Label out of range"},                   /* [RFC9050] */
1647
    {2, "Instruction failed"},                   /* [RFC9050] */
1648
    {3, "Invalid CCI"},                          /* [RFC9050] */
1649
    {4, "Unable to allocate the specified CCI"}, /* [RFC9050] */
1650
    {5, "Invalid next-hop information"},         /* [RFC9050] */
1651
    {0, NULL}
1652
};
1653
1654
static const value_string pcep_close_reason_obj_vals[] = {
1655
    {0,                         "Not defined"                           },
1656
    {NO_EXP_PROV,               "No Explanation Provided"               },
1657
    {DEADTIME_PROV,             "Deadtime Expired"                      },
1658
    {RECEP_MALFORM_MSG,         "Reception of a Malformed PCEP Message" },
1659
    {0, NULL }
1660
};
1661
1662
static const value_string pcep_xro_attribute_obj_vals[] = {
1663
    {ATTR_INTERFACE,            "Interface"     },
1664
    {ATTR_NODE,                 "Node"          },
1665
    {ATTR_SRLG,                 "SRLG"          },
1666
    {0, NULL }
1667
};
1668
1669
static const value_string pcep_object_lsp_flags_operational_vals[] = {
1670
    {0, "DOWN"          },
1671
    {1, "UP"            },
1672
    {2, "ACTIVE"        },
1673
    {3, "GOING-DOWN"    },
1674
    {4, "GOING-UP"      },
1675
    {5, "Reserved"      },
1676
    {6, "Reserved"      },
1677
    {7, "Reserved"      },
1678
    {0, NULL }
1679
};
1680
1681
static const value_string pcep_tlv_lsp_error_code_vals[] = {
1682
    {1, "Unknown reason"                        },
1683
    {2, "Limit reached for PCE-controlled LSPs" },
1684
    {3, "Too many pending LSP update requests"  },
1685
    {4, "Unacceptable parameters"               },
1686
    {5, "Internal error"                        },
1687
    {6, "LSP administratively brought down"     },
1688
    {7, "LSP preempted"                         },
1689
    {8, "RSVP signaling error"                  },
1690
    {0, NULL }
1691
};
1692
1693
static const value_string pcep_pst_vals[] = {
1694
    {0, "Path is setup via RSVP-TE signaling (default)" },
1695
    {1, "Path is setup using Segment Routing" },
1696
    {3, "Path is setup using SRv6" },
1697
    {0, NULL }
1698
};
1699
1700
static const value_string pcep_sr_nt_vals[] = {
1701
    {0, "NAI is absent" },
1702
    {1, "IPv4 Node ID" },
1703
    {2, "IPv6 Node ID" },
1704
    {3, "IPv4 Adjacency" },
1705
    {4, "IPv6 Adjacency with global IPv6 addresses" },
1706
    {5, "Unnumbered Adjacency with IPv4 NodeIDs" },
1707
    {6, "IPv6 Adjacency with link-local IPv6 addresses" },
1708
    {0, NULL }
1709
};
1710
1711
/* types of leaves in a P2MP request */
1712
static const value_string pcep_p2mp_leaf_type_vals[] = {
1713
    {EP_P2MP_NEW_LEAF_TYPE, "New leaves to add"                                        },
1714
    {EP_P2MP_OLD_REMOVE_LEAF_TYPE , "Old leaves to remove"                             },
1715
    {EP_P2MP_OLD_MODIFY_LEAF_TYPE, "Old leaves whose path can be modified/reoptimized" },
1716
    {EP_P2MP_OLD_UNCHANGED_LEAF_TYPE, "Old leaves whose path must be left unchanged"   },
1717
    {0, NULL }
1718
};
1719
1720
/* Association Type Fields.  */
1721
/* https://www.iana.org/assignments/pcep/pcep.xhtml#association-type-field */
1722
static const value_string pcep_association_type_field_vals[] = {
1723
    {0, "Reserved"}, /* RFC 8697*/
1724
    {1, "Path Protection Association"}, /* RFC 8745 */
1725
    {2, "Disjoint Association"}, /* RFC 8800 */
1726
    {3, "Policy Association"}, /* RFC 9005 */
1727
    {4, "Single-Sided Bidirectional LSP Association"}, /* RFC 9059 */
1728
    {5, "Double-Sided Bidirectional LSP Association"}, /* RFC 9059 */
1729
    {6, "SR Policy Association"}, /* TEMPORARY registered 2021-03-30 expires 2022-03-30 draft-ietf-pce-segment-routing-policy-cp-04 */
1730
    {7, "VN Association"}, /* RFC 9358 */
1731
    {0, NULL }
1732
};
1733
1734
/* Path Setup Type Capability Sub TLV Type Indicators */
1735
static const value_string pcep_path_setup_type_capability_sub_tlv_vals[] = {
1736
    {0,  "Reserved"                                 }, /* RFC 8664*/
1737
    {1,  "PCECC-CAPABILITY"                        }, /* RFC 9050*/
1738
    {26, "SR-PCE-CAPABILITY"                       }, /* RFC 8664*/
1739
    {0,  NULL }
1740
};
1741
1742
/* Binding Type (BT) values in TE-PATH-BINDING TLV, RFC 9604 */
1743
static const value_string pcep_te_path_binding_bt_vals[] = {
1744
    {0, "MPLS label value"},
1745
    {1, "MPLS label stack entry"},
1746
    {2, "SRv6 SID"},
1747
    {3, "SRv6 SID and endpoint behavior"},
1748
    {0, NULL}
1749
};
1750
1751
/* Protocol Origin values in SR Policy Candidate Path Identifiers TLV*/
1752
static const value_string pcep_sr_policy_id_proto_origin_vals[] = {
1753
    {10, "PCEP"                        }, /*  draft-ietf-spring-segment-routing-policy section 2.3 */
1754
    {20, "BGP SR Policy"               }, /*  draft-ietf-spring-segment-routing-policy section 2.3 */
1755
    {30, "Via Configuration"           }, /*  draft-ietf-spring-segment-routing-policy section 2.3 */
1756
    {0,  NULL }
1757
};
1758
1759
/* SRv6 Endpoint behavior */
1760
/* https://www.iana.org/assignments/segment-routing/segment-routing.xhtml */
1761
static const value_string srv6_endpoint_behavior_vals[] = {
1762
    {1,     "End" },
1763
    {2,     "End with PSP" },
1764
    {3,     "End with USP" },
1765
    {4,     "End with PSP & USP" },
1766
    {5,     "End.X" },
1767
    {6,     "End.X with PSP" },
1768
    {7,     "End.X with USP" },
1769
    {8,     "End.X with PSP & USP" },
1770
    {9,     "End.T" },
1771
    {10,    "End.T with PSP" },
1772
    {11,    "End.T with USP" },
1773
    {12,    "End.T with PSP & USP" },
1774
    {13,    "Unassigned" },
1775
    {14,    "End.B6.Encaps" },
1776
    {15,    "End.BM" },
1777
    {16,    "End.DX6" },
1778
    {17,    "End.DX4" },
1779
    {18,    "End.DT6" },
1780
    {19,    "End.DT4" },
1781
    {20,    "End.DT46" },
1782
    {21,    "End.DX2" },
1783
    {22,    "End.DX2V" },
1784
    {23,    "End.DT2U" },
1785
    {24,    "End.DT2M" },
1786
    {25,    "Reserved" },
1787
    {26,    "Unassigned" },
1788
    {27,    "End.B6.Encaps.Red" },
1789
    {28,    "End with USD" },
1790
    {29,    "End with PSP & USD" },
1791
    {30,    "End with USP & USD" },
1792
    {31,    "End with PSP, USP & USD" },
1793
    {32,    "End.X with USD" },
1794
    {33,    "End.X with PSP & USD" },
1795
    {34,    "End.X with USP & USD" },
1796
    {35,    "End.X with PSP, USP & USD" },
1797
    {36,    "End.T with USD" },
1798
    {37,    "End.T with PSP & USD" },
1799
    {38,    "End.T with USP & USD" },
1800
    {39,    "End.T with PSP, USP & USD" },
1801
    {40,    "End.MAP" },
1802
    {41,    "End.Limit" },
1803
    {42,    "End with NEXT-ONLY-CSID" },
1804
    {43,    "End with NEXT-CSID" },
1805
    {44,    "End with NEXT-CSID & PSP" },
1806
    {45,    "End with NEXT-CSID & USP" },
1807
    {46,    "End with NEXT-CSID, PSP & USP" },
1808
    {47,    "End with NEXT-CSID & USD" },
1809
    {48,    "End with NEXT-CSID, PSP & USD" },
1810
    {49,    "End with NEXT-CSID, USP & USD" },
1811
    {50,    "End with NEXT-CSID, PSP, USP & USD" },
1812
    {51,    "End.X with NEXT-ONLY-CSID" },
1813
    {52,    "End.X with NEXT-CSID" },
1814
    {53,    "End.X with NEXT-CSID & PSP" },
1815
    {54,    "End.X with NEXT-CSID & USP" },
1816
    {55,    "End.X with NEXT-CSID, PSP & USP" },
1817
    {56,    "End.X with NEXT-CSID & USD" },
1818
    {57,    "End.X with NEXT-CSID, PSP & USD" },
1819
    {58,    "End.X with NEXT-CSID, USP & USD" },
1820
    {59,    "End.X with NEXT-CSID, PSP, USP & USD" },
1821
    {60,    "End.DX6 with NEXT-CSID" },
1822
    {61,    "End.DX4 with NEXT-CSID" },
1823
    {62,    "End.DT6 with NEXT-CSID" },
1824
    {63,    "End.DT4 with NEXT-CSID" },
1825
    {64,    "End.DT46 with NEXT-CSID" },
1826
    {65,    "End.DX2 with NEXT-CSID" },
1827
    {66,    "End.DX2V with NEXT-CSID" },
1828
    {67,    "End.DT2U with NEXT-CSID" },
1829
    {68,    "End.DT2M with NEXT-CSID" },
1830
    {69,    "End.M.GTP6.D" },
1831
    {70,    "End.M.GTP6.Di" },
1832
    {71,    "End.M.GTP6.E" },
1833
    {72,    "End.M.GTP4.E" },
1834
    { 0,  NULL }
1835
};
1836
1837
601
#define OBJ_HDR_LEN  4       /* length of object header */
1838
1839
/*------------------------------------------------------------
1840
 * SUB-TLVS
1841
 * ----------------------------------------------------------------*/
1842
static void
1843
dissect_pcep_path_setup_capabilities_sub_tlvs(proto_tree *pcep_tlv, packet_info* pinfo, tvbuff_t *tvb, int offset, int length, int ett_pcep_obj)
1844
0
{
1845
0
    proto_tree *sub_tlv;
1846
0
    uint16_t    sub_tlv_length, sub_tlv_type;
1847
0
    int         j;
1848
0
    int         padding = 0;
1849
1850
0
    static int * const sr_pce_capability_sub_tlv_flags[] = {
1851
0
        &hf_pcep_sr_pce_capability_sub_tlv_flags_n,
1852
0
        &hf_pcep_sr_pce_capability_sub_tlv_flags_x,
1853
0
        NULL
1854
0
    };
1855
1856
0
    for (j = 0; j < length; j += 4 + sub_tlv_length + padding) {
1857
0
        sub_tlv_type = tvb_get_ntohs(tvb, offset+j);
1858
0
        sub_tlv_length = tvb_get_ntohs(tvb, offset + j + 2);
1859
0
        sub_tlv = proto_tree_add_subtree(pcep_tlv, tvb, offset + j, sub_tlv_length+4,
1860
0
                    ett_pcep_obj, NULL, val_to_str(pinfo->pool, sub_tlv_type, pcep_path_setup_type_capability_sub_tlv_vals, "Unknown SubTLV (%u). "));
1861
0
        proto_tree_add_item(sub_tlv, hf_pcep_path_setup_type_capability_sub_tlv_type, tvb, offset + j, 2, ENC_BIG_ENDIAN);
1862
0
        proto_tree_add_item(sub_tlv, hf_pcep_path_setup_type_capability_sub_tlv_length, tvb, offset + 2 + j, 2, ENC_BIG_ENDIAN);
1863
0
        switch (sub_tlv_type)
1864
0
        {
1865
0
            case 1:    /* PCECC-CAPABILITY */
1866
               //TODO
1867
0
               break;
1868
1869
0
            case 26:  /* SR PCE CAPABILITY */
1870
0
               proto_tree_add_item(sub_tlv, hf_pcep_sr_pce_capability_sub_tlv_reserved, tvb, offset + 4 + j, 2, ENC_BIG_ENDIAN);
1871
0
               proto_tree_add_bitmask(sub_tlv, tvb, offset+4+j+2, hf_pcep_sr_pce_capability_sub_tlv_flags, ett_pcep_obj, sr_pce_capability_sub_tlv_flags, ENC_NA);
1872
0
               proto_tree_add_item(sub_tlv, hf_pcep_sr_pce_capability_sub_tlv_msd, tvb, offset + 4 + j + 3, 1, ENC_NA);
1873
0
               break;
1874
0
        }
1875
0
    }
1876
1877
0
}
1878
1879
/*------------------------------------------------------------
1880
 * PCEP TLVS
1881
 *----------------------------------------------------------------*/
1882
1883
/* The content of Extended Association ID TLV, type = 31 is scoped
1884
 *  on the association type. The TLV dissection receives such
1885
 *  information to be able to decode properly the TLV
1886
 *  All the other TLVs do not need scope at the moment.
1887
*/
1888
static void
1889
dissect_pcep_tlvs_with_scope(proto_tree *pcep_obj, packet_info* pinfo, tvbuff_t *tvb, int offset, int length, int ett_pcep_obj, uint16_t association_type)
1890
61
{
1891
61
    proto_tree *tlv;
1892
61
    uint16_t    tlv_length, tlv_type, of_code, assoc_type;
1893
61
    uint32_t psts;
1894
61
    int         i, j;
1895
61
    int         padding = 0;
1896
1897
61
    uint32_t     binding_type;
1898
61
    proto_item *bsid_item = NULL;
1899
61
    proto_tree *bsid_tree = NULL;
1900
61
    uint32_t label, tc, bos, ttl;
1901
1902
61
    static int * const tlv_stateful_pce_capability_flags[] = {
1903
61
        &hf_pcep_lsp_update_capability,
1904
61
        &hf_pcep_include_db_version,
1905
61
        &hf_pcep_lsp_instantiation_capability,
1906
61
        &hf_pcep_triggered_resync,
1907
61
        &hf_pcep_delta_lsp_sync_capability,
1908
61
        &hf_pcep_triggered_initial_sync,
1909
61
        &hf_pcep_color_capability,
1910
61
        NULL
1911
61
    };
1912
1913
61
    static int * const tlv_sr_pce_capability_flags[] = {
1914
61
        &hf_pcep_sr_pce_capability_flags_l,
1915
61
        NULL
1916
61
    };
1917
1918
61
    static int * const tlv_te_path_binding_flags[] = {
1919
61
        &hf_pcep_te_path_binding_flags_r,
1920
61
        &hf_pcep_te_path_binding_flags_reserved,
1921
61
        NULL
1922
61
    };
1923
1924
61
    static int * const tlv_multipath_cap_flags[] = {
1925
61
        &hf_pcep_multipath_weight_capability,
1926
61
        &hf_pcep_multipath_backup_capability,
1927
61
        &hf_pcep_multipath_oppdir_path_capability,
1928
61
        &hf_pcep_multipath_forward_class_capability,
1929
61
        &hf_pcep_composite_candidate_path_capability,
1930
61
        NULL
1931
61
    };
1932
1933
217
    for (j = 0; j < length; j += 4 + tlv_length + padding) {
1934
215
        tlv_type = tvb_get_ntohs(tvb, offset+j);
1935
215
        tlv_length = tvb_get_ntohs(tvb, offset + j + 2);
1936
215
        tlv = proto_tree_add_subtree(pcep_obj, tvb, offset + j, tlv_length+4,
1937
215
                    ett_pcep_obj, NULL, val_to_str(pinfo->pool, tlv_type, pcep_tlvs_vals, "Unknown TLV (%u). "));
1938
215
        proto_tree_add_item(tlv, hf_pcep_tlv_type, tvb, offset + j, 2, ENC_BIG_ENDIAN);
1939
215
        proto_tree_add_item(tlv, hf_pcep_tlv_length, tvb, offset + 2 + j, 2, ENC_BIG_ENDIAN);
1940
215
        switch (tlv_type)
1941
215
        {
1942
1
            case 1:    /* NO-PATH TLV */
1943
1
                proto_tree_add_item(tlv, hf_pcep_no_path_tlvs_pce,          tvb, offset+4+j, tlv_length, ENC_BIG_ENDIAN);   /* RFC 5440 */
1944
1
                proto_tree_add_item(tlv, hf_pcep_no_path_tlvs_unk_dest,     tvb, offset+4+j, tlv_length, ENC_BIG_ENDIAN);   /* RFC 5440 */
1945
1
                proto_tree_add_item(tlv, hf_pcep_no_path_tlvs_unk_src,      tvb, offset+4+j, tlv_length, ENC_BIG_ENDIAN);   /* RFC 5440 */
1946
1
                proto_tree_add_item(tlv, hf_pcep_no_path_tlvs_brpc,         tvb, offset+4+j, tlv_length, ENC_BIG_ENDIAN);   /* RFC 5441 */
1947
1
                proto_tree_add_item(tlv, hf_pcep_no_path_tlvs_pks,          tvb, offset+4+j, tlv_length, ENC_BIG_ENDIAN);   /* RFC 5520 */
1948
1
                proto_tree_add_item(tlv, hf_pcep_no_path_tlvs_no_gco_migr,  tvb, offset+4+j, tlv_length, ENC_BIG_ENDIAN);   /* RFC 5557 */
1949
1
                proto_tree_add_item(tlv, hf_pcep_no_path_tlvs_no_gco_soln,  tvb, offset+4+j, tlv_length, ENC_BIG_ENDIAN);   /* RFC 5557 */
1950
1
                proto_tree_add_item(tlv, hf_pcep_no_path_tlvs_p2mp,         tvb, offset+4+j, tlv_length, ENC_BIG_ENDIAN);   /* RFC 6006 */
1951
1
                break;
1952
1953
1
            case 3:   /* REQ-MISSING TLV */
1954
1
                proto_tree_add_item(tlv, hf_pcep_request_id, tvb, offset+4+j, tlv_length, ENC_BIG_ENDIAN);
1955
1
                break;
1956
1957
3
            case 4:   /* OF TLV */
1958
208
                for (i=0; i<tlv_length/2; i++) {
1959
205
                    of_code = tvb_get_ntohs(tvb, offset+4+j+i*2);
1960
205
                    proto_tree_add_uint_format(tlv, hf_pcep_of_code, tvb, offset+4+j+i*2, 2, of_code, "OF-Code #%d: %s (%u)",
1961
205
                                               i+1, val_to_str_const(of_code, pcep_of_vals, "Unknown"), of_code);
1962
205
                }
1963
3
                break;
1964
1965
1
            case 7:   /* VENDOR-INFORMATION-TLV (RFC7470)*/
1966
1
                proto_tree_add_item(tlv, hf_pcep_tlv_enterprise_number, tvb, offset+4+j, 4, ENC_BIG_ENDIAN);
1967
1
                proto_tree_add_item(tlv, hf_pcep_tlv_enterprise_specific_info, tvb, offset+4+j + 4, tlv_length - 4, ENC_NA);
1968
1
                break;
1969
1970
1
            case 16:    /* STATEFUL-PCE-CAPABILITY TLV */
1971
1
                proto_tree_add_bitmask(tlv, tvb, offset+4+j, hf_pcep_stateful_pce_capability_flags, ett_pcep_obj, tlv_stateful_pce_capability_flags, ENC_NA);
1972
1
                break;
1973
1974
0
            case 17:    /* SYMBOLIC-PATH-NAME TLV */
1975
0
                proto_tree_add_item(tlv, hf_pcep_symbolic_path_name, tvb, offset+4+j, tlv_length, ENC_ASCII);
1976
0
                break;
1977
1978
0
            case 18:    /* IPV4-LSP-IDENTIFIERS TLV */
1979
0
                proto_tree_add_item(tlv, hf_pcep_ipv4_lsp_id_tunnel_sender_address, tvb, offset+4+j, 4, ENC_BIG_ENDIAN);
1980
0
                proto_tree_add_item(tlv, hf_pcep_ipv4_lsp_id_lsp_id, tvb, offset+4+j + 4, 2, ENC_BIG_ENDIAN);
1981
0
                proto_tree_add_item(tlv, hf_pcep_ipv4_lsp_id_tunnel_id, tvb, offset+4+j + 6, 2, ENC_BIG_ENDIAN);
1982
0
                proto_tree_add_item(tlv, hf_pcep_ipv4_lsp_id_extended_tunnel_id, tvb, offset+4+j + 8, 4, ENC_BIG_ENDIAN);
1983
0
                proto_tree_add_item(tlv, hf_pcep_ipv4_lsp_id_tunnel_endpoint_address, tvb, offset+4+j + 12, 4, ENC_BIG_ENDIAN);
1984
0
                break;
1985
1986
1
            case 19:    /* IPV6-LSP-IDENTIFIERS TLV */
1987
1
                proto_tree_add_item(tlv, hf_pcep_ipv6_lsp_id_tunnel_sender_address, tvb, offset+4+j, 16, ENC_NA);
1988
1
                proto_tree_add_item(tlv, hf_pcep_ipv6_lsp_id_lsp_id, tvb, offset+4+j + 16, 2, ENC_BIG_ENDIAN);
1989
1
                proto_tree_add_item(tlv, hf_pcep_ipv6_lsp_id_tunnel_id, tvb, offset+4+j + 18, 2, ENC_BIG_ENDIAN);
1990
1
                proto_tree_add_item(tlv, hf_pcep_ipv6_lsp_id_extended_tunnel_id, tvb, offset+4+j + 20, 16, ENC_NA);
1991
1
                proto_tree_add_item(tlv, hf_pcep_ipv6_lsp_id_tunnel_endpoint_address, tvb, offset+4+j + 36, 16, ENC_NA);
1992
1
                break;
1993
1994
0
            case 20:    /* LSP-ERROR-CODE TLV */
1995
0
                proto_tree_add_item(tlv, hf_pcep_lsp_error_code, tvb, offset+4+j, 4, ENC_BIG_ENDIAN);
1996
0
                break;
1997
1998
0
            case 21:    /* RSVP-ERROR-SPEC TLV */
1999
0
                proto_tree_add_item(tlv, hf_pcep_rsvp_user_error_spec, tvb, offset+4+j, tlv_length, ENC_ASCII);
2000
0
                break;
2001
2002
0
            case 23:    /* LSP-DB-VERSION TLV */
2003
0
                proto_tree_add_item(tlv, hf_pcep_lsp_state_db_version_number, tvb, offset+4+j, 8, ENC_BIG_ENDIAN);
2004
0
                break;
2005
2006
1
            case 24:    /* SPEAKER-ENTITY-ID TLV */
2007
1
                proto_tree_add_item(tlv, hf_pcep_speaker_entity_id, tvb, offset+4+j, tlv_length, ENC_ASCII);
2008
1
                break;
2009
2010
0
            case 26:    /* SR-PCE-CAPABILITY TLV Deprecated */
2011
0
                proto_tree_add_item(tlv, hf_pcep_sr_pce_capability_reserved, tvb, offset + 4 + j, 2, ENC_BIG_ENDIAN);
2012
0
                proto_tree_add_bitmask(tlv, tvb, offset+4+j+2, hf_pcep_sr_pce_capability_flags, ett_pcep_obj, tlv_sr_pce_capability_flags, ENC_NA);
2013
0
                proto_tree_add_item(tlv, hf_pcep_sr_pce_capability_msd, tvb, offset + 4 + j + 3, 1, ENC_NA);
2014
0
                break;
2015
2016
0
            case 27:    /* PATH-SETUP-TYPE TLV (FF: squatted pre IANA assignment) */
2017
1
            case 28:    /* PATH-SETUP-TYPE TLV (FF: IANA code point) */
2018
1
                proto_tree_add_item(tlv, hf_pcep_path_setup_type_reserved24, tvb, offset + 4 + j, 3, ENC_BIG_ENDIAN);
2019
1
                proto_tree_add_item(tlv, hf_pcep_path_setup_type, tvb, offset + 4 + j + 3, 1, ENC_NA);
2020
1
                break;
2021
2022
7
            case 29:    /* OP-CONF-ASSOC-RANGE */
2023
7
                offset += 4 + j;
2024
94
                while(tlv_length > 0) {
2025
87
                    proto_tree_add_item(tlv, hf_pcep_op_conf_assoc_range_reserved, tvb, offset, 2, ENC_NA);
2026
87
                    offset += 2;
2027
87
                    tlv_length -= 2;
2028
87
                    proto_tree_add_item(tlv, hf_pcep_op_conf_assoc_range_assoc_type, tvb, offset, 2, ENC_BIG_ENDIAN);
2029
87
                    offset += 2;
2030
87
                    tlv_length -= 2;
2031
87
                    proto_tree_add_item(tlv, hf_pcep_op_conf_assoc_range_start_assoc, tvb, offset, 2, ENC_BIG_ENDIAN);
2032
87
                    offset += 2;
2033
87
                    tlv_length -= 2;
2034
87
                    proto_tree_add_item(tlv, hf_pcep_op_conf_assoc_range_range, tvb, offset, 2, ENC_BIG_ENDIAN);
2035
87
                    offset += 2;
2036
87
                    tlv_length -= 2;
2037
87
                }
2038
7
                break;
2039
2040
0
            case 30:    /* GLOBAL-ASSOCIATION-SOURCE */
2041
0
                proto_tree_add_item(tlv, hf_pcep_association_source_global, tvb, offset + 4 + j, 4, ENC_BIG_ENDIAN);
2042
0
                break;
2043
2044
0
            case 31:    /* EXTENDED-ASSOCIATION-ID TLV */
2045
                /* The extend association ID is scoped depending on the association type of the object
2046
                in which the TLV is present */
2047
0
                if (association_type==6) {
2048
0
                  if (tlv_length==8) {
2049
0
                    proto_tree_add_item(tlv, hf_pcep_association_id_extended_color, tvb, offset + 4 + j, 4, ENC_BIG_ENDIAN);
2050
0
                    proto_tree_add_item(tlv, hf_pcep_association_id_extended_ipv4_endpoint, tvb, offset + 8 + j, 4, ENC_BIG_ENDIAN);
2051
0
                  } else if (tlv_length==20) {
2052
0
                     proto_tree_add_item(tlv, hf_pcep_association_id_extended_color, tvb, offset + 4 + j, 4, ENC_BIG_ENDIAN);
2053
0
                     proto_tree_add_item(tlv, hf_pcep_association_id_extended_ipv6_endpoint, tvb, offset + 8 + j, 16, ENC_NA);
2054
0
                  } else {
2055
0
                    proto_tree_add_item(tlv, hf_pcep_association_id_extended, tvb, offset + 4 + j, tlv_length, ENC_NA);
2056
0
                  }
2057
0
                } else {
2058
0
                  proto_tree_add_item(tlv, hf_pcep_association_id_extended, tvb, offset + 4 + j, tlv_length, ENC_NA);
2059
0
                }
2060
0
                break;
2061
2062
0
            case 34:    /* PATH-SETUP-TYPE-CAPABILITY TLV */
2063
0
                proto_tree_add_item(tlv, hf_pcep_path_setup_type_capability_reserved24, tvb, offset + 4 + j, 3, ENC_BIG_ENDIAN);
2064
0
                proto_tree_add_item_ret_uint(tlv, hf_pcep_path_setup_type_capability_psts, tvb, offset + 4 + j + 3, 1, ENC_NA, &psts);
2065
0
                for (i = 0; i < (int)psts; i++) {
2066
0
                    proto_tree_add_item(tlv, hf_pcep_path_setup_type_capability_pst, tvb, offset + 4 + j + 4 + i, 1, ENC_NA);
2067
0
                }
2068
2069
0
                padding = WS_PADDING_TO_4(psts);
2070
0
                if (padding != 0) {
2071
0
                    proto_tree_add_item(tlv, hf_pcep_tlv_padding, tvb, offset + 4 + j + 4 + psts, padding, ENC_NA);
2072
0
                }
2073
0
                if (tlv_length>8+psts+padding) {
2074
                    //There are sub-TLVs to decode
2075
0
                    dissect_pcep_path_setup_capabilities_sub_tlvs(tlv, pinfo, tvb, offset+j+8+psts+padding, tlv_length -psts- padding-4, ett_pcep_obj);
2076
0
                }
2077
0
                break;
2078
2079
0
            case 35:    /* ASSOC-Type-List TLV */
2080
0
                for (i=0; i<tlv_length/2; i++) {
2081
0
                    assoc_type = tvb_get_ntohs(tvb, offset+4+j+i*2);
2082
0
                    proto_tree_add_uint_format(tlv, hf_pcep_association_type, tvb, offset+4+j+i*2, 2, assoc_type, "Assoc-Type #%d: %s (%u)",
2083
0
                                               i+1, val_to_str_const(assoc_type, pcep_association_type_field_vals, "Unknown"), assoc_type);
2084
0
                }
2085
0
                break;
2086
2087
0
            case 40:    /* SRCPAG-INFO TLV */
2088
0
                proto_tree_add_item(tlv, hf_pcep_srcpag_info_color, tvb, offset + 4 + j, 4, ENC_BIG_ENDIAN);
2089
0
                proto_tree_add_item(tlv, hf_pcep_srcpag_info_destination_endpoint, tvb, offset + 4 + j + 4, 4, ENC_BIG_ENDIAN);
2090
0
                proto_tree_add_item(tlv, hf_pcep_srcpag_info_preference, tvb, offset + 4 + j + 8, 4, ENC_BIG_ENDIAN);
2091
0
                break;
2092
2093
0
            case 55:   /* TE-PATH-BINDING TLV */
2094
0
                proto_tree_add_item_ret_uint(tlv, hf_pcep_te_path_binding_bt, tvb, offset + 4 + j, 1, ENC_BIG_ENDIAN, &binding_type);
2095
0
                proto_tree_add_bitmask(tlv, tvb, offset + 4 + j + 1, hf_pcep_te_path_binding_flags, ett_pcep_obj, tlv_te_path_binding_flags, ENC_NA);
2096
0
                proto_tree_add_item(tlv, hf_pcep_te_path_binding_reserved, tvb, offset + 4 + j + 2, 2, ENC_BIG_ENDIAN);
2097
2098
0
                if (tlv_length <= 4) {
2099
                    // No binding value; for example, PCE is requesting PCC to allocate a binding SID.
2100
                    // Cf. RFC 9604, Section 5 "Operation", paragraph 8
2101
0
                    break;
2102
0
                }
2103
2104
0
                bsid_item = proto_tree_add_item(tlv, hf_pcep_te_path_binding_bsid, tvb, offset + 4 + j + 4, tlv_length - 4, ENC_NA);
2105
0
                bsid_tree = proto_item_add_subtree(bsid_item, ett_pcep_obj);
2106
0
                switch(binding_type)
2107
0
                {
2108
0
                    case 0: // MPLS label value
2109
0
                        proto_tree_add_item_ret_uint(bsid_tree, hf_pcep_te_path_binding_bsid_label, tvb,
2110
0
                                                     offset + 4 + j + 4, 4, ENC_BIG_ENDIAN, &label);
2111
0
                        proto_item_append_text(bsid_tree, ", Label: %u", label);
2112
0
                        break;
2113
0
                    case 1: // MPLS label stack entry
2114
0
                        proto_tree_add_item_ret_uint(bsid_tree, hf_pcep_te_path_binding_bsid_label, tvb,
2115
0
                                                     offset + 4 + j + 4, 4, ENC_BIG_ENDIAN, &label);
2116
0
                        proto_tree_add_item_ret_uint(bsid_tree, hf_pcep_te_path_binding_bsid_tc, tvb,
2117
0
                                                     offset + 4 + j + 4, 4, ENC_BIG_ENDIAN, &tc);
2118
0
                        proto_tree_add_item_ret_uint(bsid_tree, hf_pcep_te_path_binding_bsid_s, tvb,
2119
0
                                                     offset + 4 + j + 4, 4, ENC_BIG_ENDIAN, &bos);
2120
0
                        proto_tree_add_item_ret_uint(bsid_tree, hf_pcep_te_path_binding_bsid_ttl, tvb,
2121
0
                                                     offset + 4 + j + 4, 4, ENC_BIG_ENDIAN, &ttl);
2122
0
                        proto_item_append_text(bsid_tree, ", Label: %u, TC: %u, S: %u, TTL: %u", label, tc, bos, ttl);
2123
0
                        break;
2124
0
                    case 2: // SRv6 SID
2125
                        // Not implemented; fall through
2126
0
                    case 3: // SRv6 SID and endpoint behavior
2127
                        // Not implemented; fall through
2128
0
                    default:
2129
0
                        proto_tree_add_item(bsid_tree, hf_pcep_te_path_binding_bsid_value, tvb, offset + 4 + j + 4, tlv_length - 4, ENC_NA);
2130
0
                }
2131
0
                break;
2132
2133
1
            case 56:   /* SRPOLICY-POL-NAME */
2134
1
                proto_tree_add_item(tlv, hf_pcep_sr_policy_name, tvb, offset+4+j, tlv_length, ENC_ASCII);
2135
1
                break;
2136
2137
0
            case 57:   /* SRPOLICY-CPATH-ID */
2138
0
                proto_tree_add_item(tlv, hf_pcep_sr_policy_cpath_id_proto_origin, tvb, offset + 4 + j, 1, ENC_BIG_ENDIAN);
2139
0
                proto_tree_add_item(tlv, hf_pcep_sr_policy_cpath_id_originator_asn, tvb, offset + 8 + j, 4, ENC_BIG_ENDIAN);
2140
0
                proto_tree_add_item(tlv, hf_pcep_sr_policy_cpath_id_originator_address, tvb, offset + 24+ j, 4, ENC_BIG_ENDIAN);
2141
0
                proto_tree_add_item(tlv, hf_pcep_sr_policy_cpath_id_discriminator, tvb, offset + 28 + j, 4, ENC_BIG_ENDIAN);
2142
0
                break;
2143
2144
0
            case 58:   /* SRPOLICY-CPATH-NAME */
2145
0
                proto_tree_add_item(tlv, hf_pcep_sr_policy_cpath_name, tvb, offset+4+j, tlv_length, ENC_ASCII);
2146
0
                break;
2147
2148
0
            case 59:   /* SRPOLICY-CPATH-PREFERENCE */
2149
0
                proto_tree_add_item(tlv, hf_pcep_sr_policy_cpath_preference, tvb, offset + 4 + j, 4, ENC_BIG_ENDIAN);
2150
0
                break;
2151
2152
0
            case 60:    /* MULTIPATH-CAP TLV */
2153
0
                proto_tree_add_item(tlv, hf_pcep_multipath_number_of_multipaths, tvb, offset + 4 + j, 2, ENC_BIG_ENDIAN);
2154
0
                proto_tree_add_bitmask(tlv, tvb, offset + 4 + j + 2, hf_pcep_multipath_cap_flags, ett_pcep_obj, tlv_multipath_cap_flags, ENC_NA);
2155
0
                break;
2156
0
            case 61:    /* MULTIPATH-WEIGHT TLV */
2157
0
                proto_tree_add_item(tlv, hf_pcep_multipath_weight, tvb, offset + 4 + j, 4, ENC_BIG_ENDIAN);
2158
0
                break;
2159
2160
191
            default:
2161
191
                proto_tree_add_item(tlv, hf_pcep_tlv_data, tvb, offset+4+j, tlv_length, ENC_NA);
2162
215
        }
2163
2164
156
        padding = WS_PADDING_TO_4(tlv_length);
2165
156
        if (padding != 0) {
2166
6
            proto_tree_add_item(tlv, hf_pcep_tlv_padding, tvb, offset+4+j+tlv_length, padding, ENC_NA);
2167
6
        }
2168
156
    }
2169
61
}
2170
2171
static void
2172
dissect_pcep_tlvs(proto_tree *pcep_obj, packet_info* pinfo, tvbuff_t *tvb, int offset, int length, int ett_pcep_obj)
2173
59
{
2174
59
  dissect_pcep_tlvs_with_scope(pcep_obj, pinfo, tvb, offset, length, ett_pcep_obj,0);
2175
59
}
2176
2177
/*------------------------------------------------------------------------------
2178
 *SUBOBJECTS
2179
 *------------------------------------------------------------------------------*/
2180
static void
2181
dissect_subobj_ipv4(proto_tree *pcep_subobj_tree, packet_info *pinfo, tvbuff_t *tvb, int offset, int obj_class, int ett_pcep_obj, unsigned length)
2182
13
{
2183
13
    proto_tree *pcep_subobj_ipv4;
2184
13
    proto_tree *pcep_subobj_ipv4_flags;
2185
13
    proto_item *ti;
2186
13
    uint8_t     prefix_length;
2187
2188
13
    ti = proto_tree_add_item(pcep_subobj_tree, hf_PCEPF_SUBOBJ_IPv4, tvb, offset, length, ENC_NA);
2189
13
    pcep_subobj_ipv4 = proto_item_add_subtree(ti, ett_pcep_obj);
2190
2191
13
    if (length != 8) {
2192
10
        expert_add_info_format(pinfo, ti, &ei_pcep_subobject_bad_length,
2193
10
                               "Bad IPv4 subobject: length %u != 8", length);
2194
10
        return;
2195
10
    }
2196
2197
3
    prefix_length = tvb_get_uint8(tvb, offset+6);
2198
3
    proto_item_append_text(ti, ": %s/%u", tvb_ip_to_str(pinfo->pool, tvb, offset+2),
2199
3
                           prefix_length);
2200
2201
3
    switch (obj_class) {
2202
2203
0
        case PCEP_EXPLICIT_ROUTE_OBJ:
2204
0
        case PCEP_SERO_OBJ:
2205
0
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_l,             tvb, offset,   1, ENC_NA);
2206
0
            proto_tree_add_item(pcep_subobj_ipv4, hf_PCEPF_SUBOBJ_7F,                tvb, offset,   1, ENC_NA);
2207
0
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_length,        tvb, offset+1, 1, ENC_NA);
2208
0
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_ipv4,          tvb, offset+2, 4, ENC_BIG_ENDIAN);
2209
0
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_prefix_length, tvb, offset+6, 1, ENC_NA);
2210
0
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_padding,       tvb, offset+7, 1, ENC_NA);
2211
0
            break;
2212
2213
0
        case PCEP_RECORD_ROUTE_OBJ:
2214
0
        case PCEP_SRRO_OBJ:
2215
0
            proto_tree_add_item(pcep_subobj_ipv4, hf_PCEPF_SUBOBJ,                   tvb, offset,   1, ENC_NA);
2216
0
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_length,        tvb, offset+1, 1, ENC_NA);
2217
0
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_ipv4,          tvb, offset+2, 4, ENC_BIG_ENDIAN);
2218
0
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_prefix_length, tvb, offset+6, 1, ENC_NA);
2219
0
            ti = proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_flags,    tvb, offset+7, 1, ENC_NA);
2220
0
            pcep_subobj_ipv4_flags = proto_item_add_subtree(ti, ett_pcep_obj);
2221
0
            proto_tree_add_item(pcep_subobj_ipv4_flags, hf_pcep_subobj_flags_lpa,       tvb, offset+7, 1, ENC_NA);
2222
0
            proto_tree_add_item(pcep_subobj_ipv4_flags, hf_pcep_subobj_flags_lpu,       tvb, offset+7, 1, ENC_NA);
2223
0
            break;
2224
2225
3
        case PCEP_IRO_OBJ:
2226
3
        case PCEP_OBJ_BRANCH_NODE_CAPABILITY:
2227
3
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_iro_ipv4_l,         tvb, offset,   1, ENC_NA);
2228
3
            proto_tree_add_item(pcep_subobj_ipv4, hf_PCEPF_SUBOBJ_7F,                tvb, offset,   1, ENC_NA);
2229
3
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_length,        tvb, offset+1, 1, ENC_NA);
2230
3
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_ipv4,          tvb, offset+2, 4, ENC_BIG_ENDIAN);
2231
3
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_prefix_length, tvb, offset+6, 1, ENC_NA);
2232
3
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_padding,       tvb, offset+7, 1, ENC_NA);
2233
3
            break;
2234
2235
0
        case PCEP_XRO_OBJ:
2236
0
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_x,             tvb, offset,   1, ENC_NA);
2237
0
            proto_tree_add_item(pcep_subobj_ipv4, hf_PCEPF_SUBOBJ_XRO,               tvb, offset,   1, ENC_NA);
2238
0
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_length,        tvb, offset+1, 1, ENC_NA);
2239
0
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_ipv4,          tvb, offset+2, 4, ENC_BIG_ENDIAN);
2240
0
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_prefix_length, tvb, offset+6, 1, ENC_NA);
2241
0
            proto_tree_add_item(pcep_subobj_ipv4, hf_pcep_subobj_ipv4_attribute,     tvb, offset+7, 1, ENC_NA);
2242
0
            break;
2243
2244
0
        default:
2245
0
            expert_add_info_format(pinfo, ti, &ei_pcep_non_defined_subobject,
2246
0
                                   "Non defined subobject for this object");
2247
0
            break;
2248
3
    }
2249
3
}
2250
2251
static void
2252
dissect_subobj_ipv6(proto_tree *pcep_subobj_tree, packet_info *pinfo, tvbuff_t *tvb, int offset, int obj_class, int ett_pcep_obj, unsigned length)
2253
733
{
2254
733
    proto_tree *pcep_subobj_ipv6;
2255
733
    proto_tree *pcep_subobj_ipv6_flags;
2256
733
    proto_item *ti;
2257
733
    uint8_t     prefix_length;
2258
2259
733
    ti = proto_tree_add_item(pcep_subobj_tree, hf_PCEPF_SUBOBJ_IPv6, tvb, offset, length, ENC_NA);
2260
733
    pcep_subobj_ipv6 = proto_item_add_subtree(ti, ett_pcep_obj);
2261
2262
733
    if (length != 20) {
2263
733
        expert_add_info_format(pinfo, ti, &ei_pcep_subobject_bad_length,
2264
733
                               "Bad IPv6 subobject: length %u != 20", length);
2265
733
        return;
2266
733
    }
2267
2268
0
    prefix_length = tvb_get_uint8(tvb, offset+18);
2269
0
    proto_item_append_text(ti, ": %s/%u", tvb_ip6_to_str(pinfo->pool, tvb, offset+2),
2270
0
                           prefix_length);
2271
2272
0
    switch (obj_class) {
2273
0
        case PCEP_EXPLICIT_ROUTE_OBJ:
2274
0
        case PCEP_SERO_OBJ:
2275
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_l,             tvb, offset,    1, ENC_NA);
2276
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_PCEPF_SUBOBJ_7F,                tvb, offset,    1, ENC_NA);
2277
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_length,        tvb, offset+1,  1, ENC_NA);
2278
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_ipv6,          tvb, offset+2, 16, ENC_NA);
2279
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_prefix_length, tvb, offset+18, 1, ENC_NA);
2280
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_padding,       tvb, offset+19, 1, ENC_NA);
2281
0
            break;
2282
2283
0
        case PCEP_RECORD_ROUTE_OBJ:
2284
0
        case PCEP_SRRO_OBJ:
2285
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_PCEPF_SUBOBJ,                   tvb, offset,    1, ENC_NA);
2286
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_length,        tvb, offset+1,  1, ENC_NA);
2287
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_ipv6,          tvb, offset+2, 16, ENC_NA);
2288
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_prefix_length, tvb, offset+18, 1, ENC_NA);
2289
0
            ti = proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_flags,    tvb, offset+19, 1, ENC_NA);
2290
0
            pcep_subobj_ipv6_flags = proto_item_add_subtree(ti, ett_pcep_obj);
2291
0
            proto_tree_add_item(pcep_subobj_ipv6_flags, hf_pcep_subobj_flags_lpa,       tvb, offset+19, 1, ENC_NA);
2292
0
            proto_tree_add_item(pcep_subobj_ipv6_flags, hf_pcep_subobj_flags_lpu,       tvb, offset+19, 1, ENC_NA);
2293
0
            break;
2294
2295
0
        case PCEP_IRO_OBJ:
2296
0
        case PCEP_OBJ_BRANCH_NODE_CAPABILITY:
2297
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_iro_ipv6_l,         tvb, offset,    1, ENC_NA);
2298
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_PCEPF_SUBOBJ_7F,                tvb, offset,    1, ENC_NA);
2299
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_length,        tvb, offset+1,  1, ENC_NA);
2300
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_ipv6,          tvb, offset+2, 16, ENC_NA);
2301
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_prefix_length, tvb, offset+18, 1, ENC_NA);
2302
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_padding,       tvb, offset+19, 1, ENC_NA);
2303
0
            break;
2304
2305
0
        case PCEP_XRO_OBJ:
2306
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_x,             tvb, offset,    1, ENC_NA);
2307
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_PCEPF_SUBOBJ_XRO,               tvb, offset,    1, ENC_NA);
2308
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_length,        tvb, offset+1,  1, ENC_NA);
2309
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_ipv6,          tvb, offset+2, 16, ENC_NA);
2310
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_prefix_length, tvb, offset+18, 1, ENC_NA);
2311
0
            proto_tree_add_item(pcep_subobj_ipv6, hf_pcep_subobj_ipv6_attribute,     tvb, offset+19, 1, ENC_NA);
2312
0
            break;
2313
2314
0
        default:
2315
0
            expert_add_info_format(pinfo, ti, &ei_pcep_non_defined_subobject,
2316
0
                                   "Non defined subobject for this object");
2317
0
            break;
2318
0
    }
2319
0
}
2320
2321
static void
2322
dissect_subobj_label_control(proto_tree *pcep_subobj_tree,  packet_info *pinfo, tvbuff_t *tvb,  int offset, int obj_class, int ett_pcep_obj, unsigned length)
2323
21
{
2324
21
    proto_tree *pcep_subobj_label_control;
2325
21
    proto_tree *pcep_subobj_label_flags;
2326
21
    proto_item *ti;
2327
2328
21
    ti = proto_tree_add_item(pcep_subobj_tree, hf_PCEPF_SUBOBJ_LABEL_CONTROL, tvb, offset, length, ENC_NA);
2329
21
    pcep_subobj_label_control = proto_item_add_subtree(ti, ett_pcep_obj);
2330
2331
21
    if (length < 5) {
2332
12
        expert_add_info_format(pinfo, ti, &ei_pcep_subobject_bad_length,
2333
12
                               "Bad label control subobject: length %u < 5", length);
2334
12
        return;
2335
12
    }
2336
2337
9
    switch (obj_class) {
2338
2339
1
        case PCEP_EXPLICIT_ROUTE_OBJ:
2340
7
        case PCEP_SERO_OBJ:
2341
7
            proto_tree_add_item(pcep_subobj_label_control, hf_pcep_subobj_label_control_l,          tvb, offset,   1, ENC_NA);
2342
7
            proto_tree_add_item(pcep_subobj_label_control, hf_PCEPF_SUBOBJ_7F,                      tvb, offset,   1, ENC_NA);
2343
7
            proto_tree_add_item(pcep_subobj_label_control, hf_pcep_subobj_label_control_length,     tvb, offset+1, 1, ENC_NA);
2344
7
            proto_tree_add_item(pcep_subobj_label_control, hf_pcep_subobj_label_control_u,          tvb, offset+2, 1, ENC_NA);
2345
7
            proto_tree_add_item(pcep_subobj_label_control, hf_pcep_subobj_label_control_reserved,   tvb, offset+2, 1, ENC_NA);
2346
7
            proto_tree_add_item(pcep_subobj_label_control, hf_pcep_subobj_label_control_c_type,     tvb, offset+3, 1, ENC_NA);
2347
7
            proto_tree_add_item(pcep_subobj_label_control, hf_pcep_subobj_label_control_label,      tvb, offset+4, length-4, ENC_NA);
2348
7
            break;
2349
2350
2
        case PCEP_RECORD_ROUTE_OBJ:
2351
2
        case PCEP_SRRO_OBJ:
2352
2
            proto_tree_add_item(pcep_subobj_label_control, hf_PCEPF_SUBOBJ,                         tvb, offset,   1, ENC_NA);
2353
2
            proto_tree_add_item(pcep_subobj_label_control, hf_pcep_subobj_label_control_length,     tvb, offset+1, 1, ENC_NA);
2354
2
            proto_tree_add_item(pcep_subobj_label_control, hf_pcep_subobj_label_control_u,          tvb, offset+2, 1, ENC_NA);
2355
2356
2
            ti = proto_tree_add_item(pcep_subobj_label_control, hf_pcep_subobj_label_control_flags, tvb, offset+2, 1, ENC_NA);
2357
2
            pcep_subobj_label_flags = proto_item_add_subtree(ti, ett_pcep_obj);
2358
2
            proto_tree_add_item(pcep_subobj_label_flags, hf_pcep_subobj_label_flags_gl,                tvb, offset+2, 1, ENC_NA);
2359
2
            proto_tree_add_item(pcep_subobj_label_control, hf_pcep_subobj_label_control_c_type,     tvb, offset+3, 1, ENC_NA);
2360
2
            proto_tree_add_item(pcep_subobj_label_control, hf_pcep_subobj_label_control_label,      tvb, offset+4, length-4, ENC_NA);
2361
2
            break;
2362
2363
0
        default:
2364
0
            expert_add_info_format(pinfo, ti, &ei_pcep_non_defined_subobject,
2365
0
                                   "Non defined subobject for this object");
2366
0
            break;
2367
9
    }
2368
9
}
2369
2370
static void
2371
dissect_subobj_sr(proto_tree *pcep_subobj_tree, packet_info *pinfo, tvbuff_t *tvb, int offset, int obj_class, int ett_pcep_obj, unsigned length)
2372
47
{
2373
47
    proto_tree *pcep_subobj_sr_tree = NULL;
2374
47
    proto_item *ti = NULL;
2375
47
    proto_tree *sid_tree = NULL;
2376
47
    proto_item *sid_item = NULL;
2377
47
    uint16_t flags;
2378
47
    uint8_t j = 0, nt = 0;
2379
47
    uint8_t octet0, octet1, octet2;
2380
47
    uint32_t label;
2381
47
    uint8_t tc, bos, ttl;
2382
2383
47
    static int * const subobj_sr_flags[] = {
2384
47
        &hf_pcep_subobj_sr_flags_m,
2385
47
        &hf_pcep_subobj_sr_flags_c,
2386
47
        &hf_pcep_subobj_sr_flags_s,
2387
47
        &hf_pcep_subobj_sr_flags_f,
2388
47
        NULL
2389
47
    };
2390
2391
47
    ti = proto_tree_add_item(pcep_subobj_tree, hf_PCEPF_SUBOBJ_SR, tvb, offset, length, ENC_NA);
2392
47
    pcep_subobj_sr_tree = proto_item_add_subtree(ti, ett_pcep_obj);
2393
2394
47
    if (length < 8) {
2395
31
        expert_add_info_format(pinfo, ti, &ei_pcep_subobject_bad_length,
2396
31
                               "Bad SR subobject: length %u < 8", length);
2397
31
        return;
2398
31
    }
2399
2400
16
    flags = tvb_get_uint16(tvb, offset+2, ENC_NA);
2401
16
    nt = ((tvb_get_uint8(tvb, offset + 2)) >> 4);
2402
2403
16
    if (obj_class == PCEP_EXPLICIT_ROUTE_OBJ || obj_class == PCEP_RECORD_ROUTE_OBJ) {
2404
14
        if (obj_class == PCEP_EXPLICIT_ROUTE_OBJ) {
2405
11
            proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_l, tvb, offset, 1, ENC_NA);
2406
11
            proto_tree_add_item(pcep_subobj_sr_tree, hf_PCEPF_SUBOBJ_7F, tvb, offset, 1, ENC_NA);
2407
11
        }
2408
3
        else {
2409
3
            proto_tree_add_item(pcep_subobj_sr_tree, hf_PCEPF_SUBOBJ, tvb, offset, 1, ENC_NA);
2410
3
        }
2411
2412
14
        proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_length, tvb, offset + 1, 1, ENC_NA);
2413
14
        proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_nt, tvb, offset + 2, 1, ENC_NA);
2414
14
        proto_tree_add_bitmask(pcep_subobj_sr_tree, tvb, offset + 2, hf_pcep_subobj_sr_flags, ett_pcep_obj, subobj_sr_flags, ENC_NA);
2415
2416
14
        if ( ! (flags & PCEP_SUBOBJ_SR_FLAGS_S) ) { /* S flag is not set, SID exists */
2417
4
            j = 4;
2418
4
            sid_item = proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_sid, tvb, offset + 4, 4, ENC_BIG_ENDIAN);
2419
2420
4
            if (flags & PCEP_SUBOBJ_SR_FLAGS_M) { /* M flag is set, SID represents MPLS label stack */
2421
1
                sid_tree = proto_item_add_subtree(sid_item, ett_pcep_obj);
2422
1
                proto_tree_add_item(sid_tree, hf_pcep_subobj_sr_sid_label, tvb, offset+4, 4, ENC_BIG_ENDIAN);
2423
1
                proto_tree_add_item(sid_tree, hf_pcep_subobj_sr_sid_tc,    tvb, offset+4, 4, ENC_BIG_ENDIAN);
2424
1
                proto_tree_add_item(sid_tree, hf_pcep_subobj_sr_sid_s ,    tvb, offset+4, 4, ENC_BIG_ENDIAN);
2425
1
                proto_tree_add_item(sid_tree, hf_pcep_subobj_sr_sid_ttl,   tvb, offset+4, 4, ENC_BIG_ENDIAN);
2426
2427
1
                octet0 = tvb_get_uint8(tvb, offset+4);
2428
1
                octet1 = tvb_get_uint8(tvb, offset+5);
2429
1
                octet2 = tvb_get_uint8(tvb, offset+6);
2430
1
                label = (octet0 << 12) + (octet1 << 4) + ((octet2 >> 4) & 0xff);
2431
1
                tc = (octet2 >> 1) & 0x7;
2432
1
                bos = (octet2 & 0x1);
2433
1
                ttl = tvb_get_uint8(tvb, offset+7);
2434
1
                proto_item_append_text(sid_tree, " (Label: %u, TC: %u, S: %u, TTL: %u)", label, tc, bos, ttl);
2435
1
            }
2436
4
        }
2437
2438
14
        if ( ! (flags & PCEP_SUBOBJ_SR_FLAGS_F) ) { /* F flag is not set, NAI exists */
2439
13
            switch (nt) {
2440
0
                case 1: /* IPv4 Node ID */
2441
0
                    proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_nai_ipv4_node, tvb, offset+j+4, 4, ENC_BIG_ENDIAN);
2442
0
                    break;
2443
2444
1
                case 2: /* IPv6 Node ID */
2445
1
                    proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_nai_ipv6_node, tvb, offset+j+4, 16, ENC_NA);
2446
1
                    break;
2447
2448
0
                case 3: /* IPv4 Adjacency */
2449
0
                    proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_nai_local_ipv4_addr,  tvb, offset+j+4, 4, ENC_BIG_ENDIAN);
2450
0
                    proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_nai_remote_ipv4_addr, tvb, offset+j+8, 4, ENC_BIG_ENDIAN);
2451
0
                    break;
2452
2453
0
                case 4: /* IPv6 Adjacency with global IPv6 addresses */
2454
0
                    proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_nai_local_ipv6_addr,  tvb, offset+j+4,  16, ENC_NA);
2455
0
                    proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_nai_remote_ipv6_addr, tvb, offset+j+20, 16, ENC_NA);
2456
0
                    break;
2457
2458
1
                case 5: /* Unnumbered Adjacency with IPv4 Node IDs */
2459
1
                    proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_nai_local_node_id,       tvb, offset+j+4,  4, ENC_BIG_ENDIAN);
2460
1
                    proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_nai_local_interface_id,  tvb, offset+j+8,  4, ENC_BIG_ENDIAN);
2461
1
                    proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_nai_remote_node_id,      tvb, offset+j+12, 4, ENC_BIG_ENDIAN);
2462
1
                    proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_nai_remote_interface_id, tvb, offset+j+16, 4, ENC_BIG_ENDIAN);
2463
1
                    break;
2464
2465
1
                case 6: /* IPv6 Adjacency with link-local IPv6 addresses */
2466
1
                 proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_nai_local_ipv6_addr,  tvb, offset+j+4,  16, ENC_NA);
2467
1
                 proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_nai_local_interface_id,  tvb, offset+j+20,  4, ENC_BIG_ENDIAN);
2468
1
                 proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_nai_remote_ipv6_addr, tvb, offset+j+24, 16, ENC_NA);
2469
1
                 proto_tree_add_item(pcep_subobj_sr_tree, hf_pcep_subobj_sr_nai_remote_interface_id, tvb, offset+j+40, 4, ENC_BIG_ENDIAN);
2470
2471
11
                default:
2472
11
                    break;
2473
13
            }
2474
13
        }
2475
14
    }
2476
2
    else {
2477
2
        expert_add_info_format(pinfo, ti, &ei_pcep_non_defined_subobject, "Non defined subobject for this object");
2478
2
    }
2479
16
}
2480
2481
static void
2482
dissect_subobj_srv6(proto_tree *pcep_subobj_tree, packet_info *pinfo, tvbuff_t *tvb, int offset, int obj_class, int ett_pcep_obj, unsigned length)
2483
12
{
2484
12
    proto_tree *subtree = NULL;
2485
12
    proto_tree *subsub_tree = NULL;
2486
12
    proto_item *ti = NULL, *ti_nai = NULL;
2487
12
    uint16_t flags;
2488
12
    uint8_t j = 0, nt = 0;
2489
12
    uint32_t lb_len = 0, ln_len = 0, fun_len = 0, arg_len = 0;
2490
2491
12
    static int * const subobj_srv6_flags[] = {
2492
12
        &hf_pcep_subobj_srv6_flags_s,
2493
12
        &hf_pcep_subobj_srv6_flags_f,
2494
12
        &hf_pcep_subobj_srv6_flags_t,
2495
12
        &hf_pcep_subobj_srv6_flags_v,
2496
12
        NULL
2497
12
    };
2498
2499
12
    ti = proto_tree_add_item(pcep_subobj_tree, hf_PCEPF_SUBOBJ_SRv6, tvb, offset, length, ENC_NA);
2500
12
    subtree = proto_item_add_subtree(ti, ett_pcep_obj);
2501
2502
12
    if (length < 8) {
2503
1
        expert_add_info_format(pinfo, ti, &ei_pcep_subobject_bad_length,
2504
1
                               "Bad SRv6 subobject: length %u < 8", length);
2505
1
        return;
2506
1
    }
2507
2508
11
    flags = tvb_get_uint16(tvb, offset+2, ENC_NA);
2509
11
    nt = ((tvb_get_uint8(tvb, offset + 2)) >> 4);
2510
2511
11
    if (obj_class != PCEP_EXPLICIT_ROUTE_OBJ && obj_class != PCEP_RECORD_ROUTE_OBJ) {
2512
2
        expert_add_info_format(pinfo, ti, &ei_pcep_non_defined_subobject, "Non defined subobject for this object");
2513
2
        return;
2514
2
    }
2515
9
    if (obj_class == PCEP_EXPLICIT_ROUTE_OBJ) {
2516
7
        proto_tree_add_item(subtree, hf_pcep_subobj_srv6_l, tvb, offset, 1, ENC_NA);
2517
7
        proto_tree_add_item(subtree, hf_PCEPF_SUBOBJ_7F, tvb, offset, 1, ENC_NA);
2518
7
    }
2519
2
    else {
2520
2
        proto_tree_add_item(subtree, hf_PCEPF_SUBOBJ, tvb, offset, 1, ENC_NA);
2521
2
    }
2522
2523
9
    proto_tree_add_item(subtree, hf_pcep_subobj_srv6_length, tvb, offset + 1, 1, ENC_NA);
2524
9
    ti_nai = proto_tree_add_item(subtree, hf_pcep_subobj_srv6_nt, tvb, offset + 2, 1, ENC_NA);
2525
9
    proto_tree_add_bitmask(subtree, tvb, offset + 2, hf_pcep_subobj_srv6_flags, ett_pcep_obj, subobj_srv6_flags, ENC_NA);
2526
9
    proto_tree_add_item(subtree, hf_pcep_subobj_srv6_reserved, tvb, offset + 4, 2, ENC_BIG_ENDIAN);
2527
9
    proto_tree_add_item(subtree, hf_pcep_subobj_srv6_endpoint_behavior, tvb, offset + 6, 2, ENC_BIG_ENDIAN);
2528
2529
9
    if ( ! (flags & PCEP_SUBOBJ_SRV6_FLAGS_S) ) { /* S flag is not set, SID exists */
2530
4
        proto_tree_add_item(subtree, hf_pcep_subobj_srv6_sid, tvb, offset + 8, 16, ENC_NA);
2531
4
        j += 16;
2532
4
    }
2533
2534
9
    if ( ! (flags & PCEP_SUBOBJ_SR_FLAGS_F) ) { /* F flag is not set, NAI exists */
2535
4
        switch (nt) {
2536
1
        case 2: /* IPv6 Node ID */
2537
1
            ti = proto_tree_add_item(subtree, hf_pcep_subobj_srv6_nai, tvb, offset+j+8, 16, ENC_NA);
2538
1
            subsub_tree = proto_item_add_subtree(ti, ett_pcep_obj);
2539
1
            proto_tree_add_item(subsub_tree, hf_pcep_subobj_srv6_nai_ipv6_node, tvb, offset+j+8, 16, ENC_NA);
2540
1
            j += 16;
2541
1
            break;
2542
2543
2
        case 4: /* IPv6 Adjacency with global IPv6 addresses */
2544
2
            ti = proto_tree_add_item(subtree, hf_pcep_subobj_srv6_nai, tvb, offset+j+8, 32, ENC_NA);
2545
2
            subsub_tree = proto_item_add_subtree(ti, ett_pcep_obj);
2546
2
            proto_tree_add_item(subsub_tree, hf_pcep_subobj_srv6_nai_local_ipv6_addr, tvb, offset+j+8, 16, ENC_NA);
2547
2
            proto_tree_add_item(subsub_tree, hf_pcep_subobj_srv6_nai_remote_ipv6_addr, tvb, offset+j+24, 16, ENC_NA);
2548
2
            j += 32;
2549
2
            break;
2550
2551
0
        case 6: /* IPv6 Adjacency with link-local IPv6 addresses */
2552
0
            ti = proto_tree_add_item(subtree, hf_pcep_subobj_srv6_nai, tvb, offset+j+8, 40, ENC_NA);
2553
0
            subsub_tree = proto_item_add_subtree(ti, ett_pcep_obj);
2554
0
            proto_tree_add_item(subsub_tree, hf_pcep_subobj_srv6_nai_local_ipv6_addr, tvb, offset+j+8, 16, ENC_NA);
2555
0
            proto_tree_add_item(subsub_tree, hf_pcep_subobj_srv6_nai_local_interface_id, tvb, offset+j+24, 4, ENC_BIG_ENDIAN);
2556
0
            proto_tree_add_item(subsub_tree, hf_pcep_subobj_srv6_nai_remote_ipv6_addr, tvb, offset+j+28, 16, ENC_NA);
2557
0
            proto_tree_add_item(subsub_tree, hf_pcep_subobj_srv6_nai_remote_interface_id, tvb, offset+j+44, 4, ENC_BIG_ENDIAN);
2558
0
            j += 40;
2559
0
            break;
2560
2561
1
        default:
2562
1
            expert_add_info_format(pinfo, ti_nai, &ei_pcep_non_defined_subobject,
2563
1
                                   "Non defined NAI type (%u) for this subobject", nt);
2564
1
            return;
2565
4
        }
2566
4
    }
2567
2568
8
    if (flags & PCEP_SUBOBJ_SRV6_FLAGS_T) { /* T flag is set, SID Structure exists */
2569
6
        ti = proto_tree_add_item(subtree, hf_pcep_subobj_srv6_sid_struct, tvb, offset+j+8, 8, ENC_NA);
2570
6
        subsub_tree = proto_item_add_subtree(ti, ett_pcep_obj);
2571
6
        proto_tree_add_item_ret_uint(subsub_tree, hf_pcep_subobj_srv6_sid_struct_lb_len, tvb, offset+j+8, 1, ENC_NA, &lb_len);
2572
6
        proto_tree_add_item_ret_uint(subsub_tree, hf_pcep_subobj_srv6_sid_struct_ln_len, tvb, offset+j+8+1, 1, ENC_NA, &ln_len);
2573
6
        proto_tree_add_item_ret_uint(subsub_tree, hf_pcep_subobj_srv6_sid_struct_fun_len, tvb, offset+j+8+2, 1, ENC_NA, &fun_len);
2574
6
        proto_tree_add_item_ret_uint(subsub_tree, hf_pcep_subobj_srv6_sid_struct_arg_len, tvb, offset+j+8+3, 1, ENC_NA, &arg_len);
2575
6
        proto_tree_add_item(subsub_tree, hf_pcep_subobj_srv6_sid_struct_reserved, tvb, offset+j+8+4, 3, ENC_BIG_ENDIAN);
2576
6
        proto_tree_add_item(subsub_tree, hf_pcep_subobj_srv6_sid_struct_flags, tvb, offset+j+8+7, 1, ENC_NA);
2577
6
        proto_item_append_text(ti, " (LB: %u, LN: %u, Fun: %u, Arg: %u)", lb_len, ln_len, fun_len, arg_len);
2578
6
    }
2579
8
}
2580
2581
static void
2582
dissect_subobj_unnumb_interfaceID(proto_tree *pcep_subobj_tree, packet_info *pinfo, tvbuff_t *tvb, int offset, int obj_class, int ett_pcep_obj, unsigned length)
2583
219
{
2584
219
    proto_tree *pcep_subobj_unnumb_interfaceID;
2585
219
    proto_item *ti;
2586
219
    uint32_t    interface_ID;
2587
2588
219
    ti = proto_tree_add_item(pcep_subobj_tree, hf_PCEPF_SUBOBJ_UNNUM_INTERFACEID, tvb, offset, length, ENC_NA);
2589
219
    pcep_subobj_unnumb_interfaceID = proto_item_add_subtree(ti, ett_pcep_obj);
2590
2591
219
    if (length != 12) {
2592
218
        expert_add_info_format(pinfo, ti, &ei_pcep_subobject_bad_length,
2593
218
                               "Bad unnumbered interface ID subobject: length %u != 12", length);
2594
218
        return;
2595
218
    }
2596
2597
1
    interface_ID = tvb_get_ntohl(tvb, offset+8);
2598
1
    proto_item_append_text(ti, ": %s:%u", tvb_ip_to_str(pinfo->pool, tvb, offset+4),
2599
1
                           interface_ID);
2600
2601
1
    switch (obj_class) {
2602
2603
0
        case PCEP_EXPLICIT_ROUTE_OBJ:
2604
0
        case PCEP_SERO_OBJ:
2605
0
            proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_pcep_subobj_unnumb_interfaceID_l, tvb, offset, 1, ENC_NA);
2606
0
            proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_PCEPF_SUBOBJ_7F, tvb, offset, 1, ENC_NA);
2607
0
            proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_pcep_subobj_unnumb_interfaceID_length, tvb, offset+1, 1, ENC_NA);
2608
0
            proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_pcep_subobj_unnumb_interfaceID_reserved, tvb, offset+2, 2, ENC_BIG_ENDIAN);
2609
0
            break;
2610
2611
0
        case PCEP_RECORD_ROUTE_OBJ:
2612
0
        case PCEP_SRRO_OBJ:
2613
0
            {
2614
0
            static int * const flags[] = {
2615
0
                &hf_pcep_subobj_flags_lpa,
2616
0
                &hf_pcep_subobj_flags_lpu,
2617
0
                NULL
2618
0
            };
2619
2620
0
            proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_PCEPF_SUBOBJ, tvb, offset, 1, ENC_NA);
2621
0
            proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_pcep_subobj_unnumb_interfaceID_length, tvb, offset+1, 1, ENC_NA);
2622
0
            proto_tree_add_bitmask(pcep_subobj_unnumb_interfaceID, tvb, offset+2, hf_pcep_subobj_unnumb_interfaceID_flags, ett_pcep_obj, flags, ENC_BIG_ENDIAN);
2623
0
            proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_pcep_subobj_unnumb_interfaceID_reserved_rrobj, tvb, offset+3, 1, ENC_BIG_ENDIAN);
2624
0
            }
2625
0
            break;
2626
2627
1
        case PCEP_IRO_OBJ:
2628
1
            proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_pcep_subobj_iro_unnumb_interfaceID_l, tvb, offset, 1, ENC_NA);
2629
1
            proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_PCEPF_SUBOBJ_7F, tvb, offset, 1, ENC_NA);
2630
1
            proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_pcep_subobj_unnumb_interfaceID_length, tvb, offset+1, 1, ENC_NA);
2631
1
            proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_pcep_subobj_unnumb_interfaceID_reserved, tvb, offset+2, 2, ENC_BIG_ENDIAN);
2632
1
            break;
2633
2634
0
        case PCEP_XRO_OBJ:
2635
0
            proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_pcep_subobj_unnumb_interfaceID_x, tvb, offset, 1, ENC_NA);
2636
0
            proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_PCEPF_SUBOBJ_XRO, tvb, offset, 1, ENC_NA);
2637
0
            proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_pcep_subobj_unnumb_interfaceID_reserved_xroobj, tvb, offset+2, 1, ENC_NA);
2638
0
            proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_pcep_subobj_unnumb_interfaceID_attribute, tvb, offset+3, 1, ENC_NA);
2639
0
            break;
2640
2641
0
        default:
2642
0
            expert_add_info_format(pinfo, ti, &ei_pcep_non_defined_subobject,
2643
0
                                   "Non defined subobject for this object");
2644
0
            break;
2645
1
    }
2646
2647
1
    proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_pcep_subobj_unnumb_interfaceID_router_id, tvb, offset+4, 4, ENC_BIG_ENDIAN);
2648
1
    proto_tree_add_item(pcep_subobj_unnumb_interfaceID, hf_pcep_subobj_unnumb_interfaceID_interface_id, tvb, offset+8, 4, ENC_BIG_ENDIAN);
2649
1
}
2650
2651
static void
2652
dissect_subobj_autonomous_sys_num(proto_tree *pcep_subobj_tree, packet_info *pinfo, tvbuff_t *tvb, int offset, int obj_class, unsigned ett_pcep_obj, unsigned length)
2653
31
{
2654
31
    proto_tree *pcep_subobj_autonomous_sys_num;
2655
31
    proto_item *ti;
2656
2657
31
    if (obj_class == PCEP_XRO_OBJ) {
2658
3
        ti = proto_tree_add_item(pcep_subobj_tree, hf_PCEPF_SUBOBJ_AUTONOMOUS_SYS_NUM, tvb, offset, length, ENC_NA);
2659
3
        pcep_subobj_autonomous_sys_num = proto_item_add_subtree(ti, ett_pcep_obj);
2660
3
        if (length != 8) {
2661
3
            expert_add_info_format(pinfo, ti, &ei_pcep_subobject_bad_length,
2662
3
                                   "Bad autonomous system number subobject: length %u != 8", length);
2663
3
            return;
2664
3
        }
2665
2666
0
        proto_tree_add_item(pcep_subobj_autonomous_sys_num, hf_pcep_subobj_autonomous_sys_num_x,         tvb, offset,   1, ENC_NA);
2667
0
        proto_tree_add_item(pcep_subobj_autonomous_sys_num, hf_PCEPF_SUBOBJ_XRO,                         tvb, offset,   1, ENC_NA);
2668
0
        proto_tree_add_item(pcep_subobj_autonomous_sys_num, hf_pcep_subobj_autonomous_sys_num_length,    tvb, offset+1, 1, ENC_NA);
2669
2670
0
        proto_tree_add_item(pcep_subobj_autonomous_sys_num, hf_pcep_subobj_autonomous_sys_num_reserved,  tvb, offset+2, 1, ENC_NA);
2671
0
        proto_tree_add_item(pcep_subobj_autonomous_sys_num, hf_pcep_subobj_autonomous_sys_num_attribute, tvb, offset+3, 1, ENC_NA);
2672
0
        proto_tree_add_item(pcep_subobj_autonomous_sys_num, hf_pcep_subobj_autonomous_sys_num_optional_as_number_high_octets, tvb, offset+4, 2, ENC_BIG_ENDIAN);
2673
0
        proto_tree_add_item(pcep_subobj_autonomous_sys_num, hf_pcep_subobj_autonomous_sys_num_as_number, tvb, offset+6, 2, ENC_BIG_ENDIAN);
2674
28
    } else {
2675
28
        ti = proto_tree_add_item(pcep_subobj_tree, hf_PCEPF_SUBOBJ_AUTONOMOUS_SYS_NUM,                   tvb, offset, length, ENC_NA);
2676
28
        pcep_subobj_autonomous_sys_num = proto_item_add_subtree(ti, ett_pcep_obj);
2677
2678
28
        if (length != 4) {
2679
27
            expert_add_info_format(pinfo, ti, &ei_pcep_subobject_bad_length,
2680
27
                                   "Bad autonomous system number subobject: length %u != 4", length);
2681
27
            return;
2682
27
        }
2683
2684
1
        if (obj_class == PCEP_IRO_OBJ)
2685
1
            proto_tree_add_item(pcep_subobj_autonomous_sys_num, hf_pcep_subobj_iro_autonomous_sys_num_l, tvb, offset, 1, ENC_NA);
2686
0
        else
2687
0
            proto_tree_add_item(pcep_subobj_autonomous_sys_num, hf_pcep_subobj_autonomous_sys_num_l,     tvb, offset, 1, ENC_NA);
2688
1
        proto_tree_add_item(pcep_subobj_autonomous_sys_num, hf_PCEPF_SUBOBJ_7F,                          tvb, offset,   1, ENC_NA);
2689
1
        proto_tree_add_item(pcep_subobj_autonomous_sys_num, hf_pcep_subobj_autonomous_sys_num_length,    tvb, offset+1, 1, ENC_NA);
2690
1
        proto_tree_add_item(pcep_subobj_autonomous_sys_num, hf_pcep_subobj_autonomous_sys_num_as_number, tvb, offset+2, 2, ENC_BIG_ENDIAN);
2691
1
    }
2692
31
}
2693
2694
static void
2695
dissect_subobj_srlg(proto_tree *pcep_subobj_tree, packet_info *pinfo, tvbuff_t *tvb, int offset, unsigned ett_pcep_obj, unsigned length)
2696
8
{
2697
8
    proto_tree *pcep_subobj_srlg;
2698
8
    proto_item *ti;
2699
2700
8
    ti = proto_tree_add_item(pcep_subobj_tree, hf_PCEPF_SUBOBJ_SRLG, tvb, offset, length, ENC_NA);
2701
8
    pcep_subobj_srlg = proto_item_add_subtree(ti, ett_pcep_obj);
2702
2703
8
    if (length != 8) {
2704
8
        expert_add_info_format(pinfo, ti, &ei_pcep_subobject_bad_length,
2705
8
                               "Bad SRLG subobject: length %u != 8", length);
2706
8
        return;
2707
8
    }
2708
2709
0
    proto_tree_add_item(pcep_subobj_srlg, hf_pcep_subobj_srlg_x,         tvb, offset,   1, ENC_NA);
2710
0
    proto_tree_add_item(pcep_subobj_srlg, hf_PCEPF_SUBOBJ_XRO,           tvb, offset,   1, ENC_NA);
2711
0
    proto_tree_add_item(pcep_subobj_srlg, hf_pcep_subobj_srlg_length,    tvb, offset+1, 1, ENC_NA);
2712
2713
0
    proto_tree_add_item(pcep_subobj_srlg, hf_pcep_subobj_srlg_id,        tvb, offset+2, 4, ENC_BIG_ENDIAN);
2714
0
    proto_tree_add_item(pcep_subobj_srlg, hf_pcep_subobj_srlg_reserved,  tvb, offset+6, 1, ENC_NA);
2715
0
    proto_tree_add_item(pcep_subobj_srlg, hf_pcep_subobj_srlg_attribute, tvb, offset+7, 1, ENC_NA);
2716
0
}
2717
2718
static void
2719
dissect_subobj_exrs(proto_tree *pcep_subobj_tree, packet_info *pinfo, tvbuff_t *tvb, int offset, int obj_class, unsigned ett_pcep_obj, unsigned type_iro, unsigned length)
2720
29
{
2721
29
    proto_tree *pcep_subobj_exrs;
2722
29
    proto_item *ti;
2723
29
    uint8_t     l_type;
2724
29
    uint8_t     length2;
2725
29
    unsigned    type_exrs;
2726
29
    unsigned    offset_exrs = 0;
2727
2728
29
    ti = proto_tree_add_item(pcep_subobj_tree, hf_PCEPF_SUBOBJ_EXRS, tvb, offset, length, ENC_NA);
2729
29
    pcep_subobj_exrs = proto_item_add_subtree(ti, ett_pcep_obj);
2730
2731
29
    if (length < 4) {
2732
2
        expert_add_info_format(pinfo, ti, &ei_pcep_subobject_bad_length,
2733
2
                               "Bad EXRS subobject: length %u < 4", length);
2734
2
        return;
2735
2
    }
2736
2737
27
    proto_tree_add_item(pcep_subobj_exrs, hf_pcep_subobj_exrs_l,        tvb, offset,   1, ENC_NA);
2738
27
    proto_tree_add_item(pcep_subobj_exrs, hf_pcep_subobj_exrs_type,     tvb, offset,   1, ENC_NA);
2739
27
    proto_tree_add_item(pcep_subobj_exrs, hf_pcep_subobj_exrs_length,   tvb, offset+1, 1, ENC_NA);
2740
2741
27
    proto_tree_add_item(pcep_subobj_exrs, hf_pcep_subobj_exrs_reserved, tvb, offset+2, 2, ENC_BIG_ENDIAN);
2742
2743
27
    offset += 4;
2744
2745
122
    while (offset_exrs<length-4) {
2746
2747
98
        l_type  = tvb_get_uint8(tvb, offset);
2748
98
        length2 = tvb_get_uint8(tvb, offset+1);
2749
2750
98
        if (length2 < 2) {
2751
1
            expert_add_info_format(pinfo, ti, &ei_pcep_subobject_bad_length,
2752
1
                                   "Bad packet: subobject length %u < 2", length2);
2753
1
            break;
2754
1
        }
2755
2756
97
        type_exrs = (l_type & Mask_Type);
2757
2758
97
        if (type_iro == PCEP_SUB_EXRS)
2759
97
            obj_class = PCEP_XRO_OBJ;
2760
2761
97
        switch (type_exrs) {
2762
2763
1
            case PCEP_SUB_IPv4:
2764
1
                dissect_subobj_ipv4(pcep_subobj_exrs, pinfo, tvb, offset,  obj_class, ett_pcep_obj, length2);
2765
1
                break;
2766
42
            case PCEP_SUB_IPv6:
2767
42
                dissect_subobj_ipv6(pcep_subobj_exrs, pinfo, tvb, offset, obj_class, ett_pcep_obj, length2);
2768
42
                break;
2769
31
            case PCEP_SUB_UNNUMB_INTERFACE_ID:
2770
31
                dissect_subobj_unnumb_interfaceID(pcep_subobj_exrs, pinfo, tvb, offset, obj_class, ett_pcep_obj, length2);
2771
31
                break;
2772
1
            case PCEP_SUB_AUTONOMOUS_SYS_NUM:
2773
1
                dissect_subobj_autonomous_sys_num(pcep_subobj_exrs, pinfo, tvb, offset, obj_class, ett_pcep_obj, length2);
2774
1
                break;
2775
0
            case PCEP_SUB_SRLG:
2776
0
                dissect_subobj_srlg(pcep_subobj_exrs, pinfo, tvb, offset, ett_pcep_obj, length2);
2777
0
                break;
2778
22
            default:
2779
22
                proto_tree_add_expert_format(pcep_subobj_exrs, pinfo, &ei_pcep_non_defined_subobject,
2780
22
                                             tvb, offset+2, length-2,
2781
22
                                             "Non defined subobject (%d)", type_exrs);
2782
22
                break;
2783
97
        }
2784
95
        offset_exrs += length2;
2785
95
        offset += length2;
2786
95
    }
2787
27
}
2788
2789
static void
2790
dissect_subobj_pksv4(proto_tree *pcep_subobj_tree, packet_info *pinfo, tvbuff_t *tvb, int offset, int ett_pcep_obj, unsigned length)
2791
3
{
2792
3
    proto_tree *pcep_subobj_pksv4;
2793
3
    proto_item *ti;
2794
3
    uint16_t    path_key;
2795
2796
3
    ti = proto_tree_add_item(pcep_subobj_tree, hf_PCEPF_SUBOBJ_PKSv4, tvb, offset, length, ENC_NA);
2797
3
    pcep_subobj_pksv4 = proto_item_add_subtree(ti, ett_pcep_obj);
2798
2799
3
    if (length != 8) {
2800
3
        expert_add_info_format(pinfo, ti, &ei_pcep_subobject_bad_length,
2801
3
                               "Bad path key subobject: length %u != 8", length);
2802
3
        return;
2803
3
    }
2804
2805
0
    path_key = tvb_get_ntohs(tvb, offset+2);
2806
0
    proto_item_append_text(ti, ": %s, Path Key %u", tvb_ip_to_str(pinfo->pool, tvb, offset+4), path_key);
2807
0
    proto_tree_add_item(pcep_subobj_pksv4, hf_pcep_subobj_pksv4_l,        tvb, offset,   1, ENC_NA);
2808
0
    proto_tree_add_item(pcep_subobj_pksv4, hf_PCEPF_SUBOBJ_7F,            tvb, offset,   1, ENC_NA);
2809
0
    proto_tree_add_item(pcep_subobj_pksv4, hf_pcep_subobj_pksv4_length,   tvb, offset+1, 1, ENC_NA);
2810
0
    proto_tree_add_item(pcep_subobj_pksv4, hf_pcep_subobj_pksv4_path_key, tvb, offset+2, 2, ENC_BIG_ENDIAN);
2811
0
    proto_tree_add_item(pcep_subobj_pksv4, hf_pcep_subobj_pksv4_pce_id,   tvb, offset+4, 4, ENC_BIG_ENDIAN);
2812
0
}
2813
2814
static void
2815
dissect_subobj_pksv6(proto_tree *pcep_subobj_tree, packet_info *pinfo, tvbuff_t *tvb, int offset, int ett_pcep_obj, unsigned length)
2816
1
{
2817
1
    proto_tree *pcep_subobj_pksv6;
2818
1
    proto_item *ti;
2819
1
    uint16_t    path_key;
2820
2821
1
    ti = proto_tree_add_item(pcep_subobj_tree, hf_PCEPF_SUBOBJ_PKSv6, tvb, offset, length, ENC_NA);
2822
1
    pcep_subobj_pksv6 = proto_item_add_subtree(ti, ett_pcep_obj);
2823
2824
1
    if (length != 20) {
2825
1
        expert_add_info_format(pinfo, ti, &ei_pcep_subobject_bad_length,
2826
1
                               "Bad path key subobject: length %u != 20", length);
2827
1
        return;
2828
1
    }
2829
2830
0
    path_key = tvb_get_ntohs(tvb, offset+2);
2831
0
    proto_item_append_text(ti, ": %s, Path Key %u", tvb_ip6_to_str(pinfo->pool, tvb, offset+4), path_key);
2832
2833
0
    proto_tree_add_item(pcep_subobj_pksv6, hf_pcep_subobj_pksv6_l,        tvb, offset,   1, ENC_NA);
2834
0
    proto_tree_add_item(pcep_subobj_pksv6, hf_PCEPF_SUBOBJ_7F,            tvb, offset,   1, ENC_NA);
2835
0
    proto_tree_add_item(pcep_subobj_pksv6, hf_pcep_subobj_pksv6_length,   tvb, offset+1, 1, ENC_NA);
2836
0
    proto_tree_add_item(pcep_subobj_pksv6, hf_pcep_subobj_pksv6_path_key, tvb, offset+2, 2, ENC_BIG_ENDIAN);
2837
0
    proto_tree_add_item(pcep_subobj_pksv6, hf_pcep_subobj_pksv6_pce_id,   tvb, offset+4, 4, ENC_NA);
2838
0
}
2839
2840
/*------------------------------------------------------------------------------
2841
 * Pointer to an object dissector function.
2842
 * All functions which dissect a single object type must match this signature.
2843
 *------------------------------------------------------------------------------*/
2844
typedef void (pcep_obj_dissector_t)(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class, int obj_type);
2845
2846
/*------------------------------------------------------------------------------
2847
 * OPEN OBJECT
2848
 *------------------------------------------------------------------------------*/
2849
39
#define OPEN_OBJ_MIN_LEN    4
2850
2851
static void
2852
dissect_pcep_open_obj (proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
2853
13
{
2854
13
    proto_tree *pcep_open_obj_flags;
2855
13
    proto_item *ti;
2856
2857
13
    if (obj_length < OBJ_HDR_LEN+OPEN_OBJ_MIN_LEN) {
2858
1
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
2859
1
                                     tvb, offset2, obj_length,
2860
1
                                     "Bad OPEN object length %u, should be >= %u",
2861
1
                                     obj_length, OBJ_HDR_LEN+OPEN_OBJ_MIN_LEN);
2862
1
        return;
2863
1
    }
2864
2865
12
    proto_tree_add_item(pcep_object_tree, hf_pcep_open_obj_pcep_version, tvb, offset2, 1, ENC_NA);
2866
2867
12
    ti = proto_tree_add_item(pcep_object_tree, hf_pcep_open_obj_flags, tvb, offset2, 1, ENC_NA);
2868
12
    pcep_open_obj_flags = proto_item_add_subtree(ti, ett_pcep_obj_open);
2869
12
    proto_tree_add_item(pcep_open_obj_flags, hf_pcep_open_flags_res,  tvb, offset2,   1, ENC_NA);
2870
2871
12
    proto_tree_add_item(pcep_object_tree, hf_pcep_open_obj_keepalive, tvb, offset2+1, 1, ENC_NA);
2872
12
    proto_tree_add_item(pcep_object_tree, hf_pcep_open_obj_deadtime,  tvb, offset2+2, 1, ENC_NA);
2873
12
    proto_tree_add_item(pcep_object_tree, hf_pcep_open_obj_sid,       tvb, offset2+3, 1, ENC_NA);
2874
2875
    /*it's suppose that obj_length is a valid date. The object can have optional TLV(s)*/
2876
12
    offset2 += OPEN_OBJ_MIN_LEN;
2877
12
    obj_length -= OBJ_HDR_LEN+OPEN_OBJ_MIN_LEN;
2878
12
    dissect_pcep_tlvs(pcep_object_tree, pinfo, tvb, offset2, obj_length, ett_pcep_obj_open);
2879
12
}
2880
2881
/*------------------------------------------------------------------------------
2882
 * RP OBJECT
2883
 *------------------------------------------------------------------------------*/
2884
37
#define RP_OBJ_MIN_LEN  8
2885
2886
static void
2887
dissect_pcep_rp_obj(proto_tree *pcep_object_tree, packet_info *pinfo,
2888
                    tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
2889
13
{
2890
13
    static int* const flags[] = {
2891
13
      &hf_pcep_rp_flags_reserved,
2892
13
      &hf_pcep_rp_flags_c,
2893
13
      &hf_pcep_rp_flags_f,
2894
13
      &hf_pcep_rp_flags_n,
2895
13
      &hf_pcep_rp_flags_e,
2896
13
      &hf_pcep_rp_flags_m,
2897
13
      &hf_pcep_rp_flags_d,
2898
13
      &hf_pcep_rp_flags_p,
2899
13
      &hf_pcep_rp_flags_s,
2900
13
      &hf_pcep_rp_flags_v,
2901
13
      &hf_pcep_rp_flags_o,
2902
13
      &hf_pcep_rp_flags_b,
2903
13
      &hf_pcep_rp_flags_r,
2904
13
      &hf_pcep_rp_flags_pri,
2905
13
      NULL
2906
13
    };
2907
2908
13
    if (obj_length < OBJ_HDR_LEN+RP_OBJ_MIN_LEN) {
2909
2
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
2910
2
                                     tvb, offset2, obj_length,
2911
2
                                     "Bad RP object length %u, should be >= %u",
2912
2
                                     obj_length, OBJ_HDR_LEN+RP_OBJ_MIN_LEN);
2913
2
        return;
2914
2
    }
2915
2916
11
    proto_tree_add_item(pcep_object_tree, hf_pcep_rp_obj_reserved, tvb, offset2, 1, ENC_NA);
2917
11
    proto_tree_add_bitmask(pcep_object_tree, tvb, offset2+1, hf_pcep_rp_obj_flags, ett_pcep_obj_request_parameters, flags, ENC_BIG_ENDIAN);
2918
2919
11
    proto_tree_add_item(pcep_object_tree, hf_pcep_rp_obj_requested_id_number, tvb, offset2+4, 4, ENC_BIG_ENDIAN);
2920
2921
    /*it's suppose that obj_length is a valid date. The object can have optional TLV(s)*/
2922
11
    offset2 += RP_OBJ_MIN_LEN;
2923
11
    obj_length -= OBJ_HDR_LEN+RP_OBJ_MIN_LEN;
2924
    /* RFC 8408 allows PATH_SETUP_TYPE TLV in the RP object */
2925
11
    dissect_pcep_tlvs(pcep_object_tree, pinfo, tvb, offset2, obj_length, ett_pcep_obj_request_parameters);
2926
11
}
2927
2928
/*------------------------------------------------------------------------------
2929
 * NO PATH OBJECT
2930
 *------------------------------------------------------------------------------*/
2931
30
#define NO_PATH_OBJ_MIN_LEN  4
2932
2933
static void
2934
dissect_pcep_no_path_obj(proto_tree *pcep_object_tree, packet_info *pinfo,
2935
                         tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
2936
10
{
2937
10
    proto_tree *pcep_no_path_obj_flags;
2938
10
    proto_item *ti;
2939
2940
10
    if (obj_length < OBJ_HDR_LEN+NO_PATH_OBJ_MIN_LEN) {
2941
0
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
2942
0
                                     tvb, offset2, obj_length,
2943
0
                                     "Bad NO-PATH object length %u, should be >= %u",
2944
0
                                     obj_length, OBJ_HDR_LEN+NO_PATH_OBJ_MIN_LEN);
2945
0
        return;
2946
0
    }
2947
2948
10
    proto_tree_add_item(pcep_object_tree, hf_pcep_no_path_obj_nature_of_issue, tvb, offset2, 1, ENC_NA);
2949
2950
10
    ti = proto_tree_add_item(pcep_object_tree, hf_pcep_no_path_obj_flags, tvb, offset2+1, 2, ENC_BIG_ENDIAN);
2951
10
    pcep_no_path_obj_flags = proto_item_add_subtree(ti, ett_pcep_obj_no_path);
2952
10
    proto_tree_add_item(pcep_no_path_obj_flags, hf_pcep_no_path_flags_c, tvb, offset2+1, 2, ENC_BIG_ENDIAN);
2953
2954
10
    proto_tree_add_item(pcep_object_tree, hf_pcep_no_path_obj_reserved, tvb, offset2+3, 1, ENC_NA);
2955
2956
    /*it's suppose that obj_length is a valid date. The object can have optional TLV(s)*/
2957
10
    offset2 += NO_PATH_OBJ_MIN_LEN;
2958
10
    obj_length -= OBJ_HDR_LEN+NO_PATH_OBJ_MIN_LEN;
2959
10
    dissect_pcep_tlvs(pcep_object_tree, pinfo, tvb, offset2, obj_length, ett_pcep_obj_no_path);
2960
10
}
2961
2962
/*------------------------------------------------------------------------------
2963
 * END POINT OBJECT
2964
 *------------------------------------------------------------------------------*/
2965
2
#define END_POINT_IPV4_OBJ_LEN   8
2966
2
#define END_POINT_IPV6_OBJ_LEN  32
2967
2968
static void
2969
dissect_pcep_end_point_obj(proto_tree *pcep_object_tree, packet_info *pinfo,
2970
                           tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type)
2971
13
{
2972
13
    int dest_leafs;
2973
13
    int i=0;
2974
13
    switch (obj_type)
2975
13
    {
2976
1
        case IPv4:
2977
1
            if (obj_length != OBJ_HDR_LEN+END_POINT_IPV4_OBJ_LEN) {
2978
1
                proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
2979
1
                                             tvb, offset2, obj_length,
2980
1
                                             "Bad IPv4 END-POINTS object length %u, should be %u",
2981
1
                                             obj_length, OBJ_HDR_LEN+END_POINT_IPV4_OBJ_LEN);
2982
1
                return;
2983
1
            }
2984
2985
0
            proto_tree_add_item(pcep_object_tree, hf_pcep_end_point_obj_source_ipv4_address,      tvb, offset2,   4, ENC_BIG_ENDIAN);
2986
0
            proto_tree_add_item(pcep_object_tree, hf_pcep_end_point_obj_destination_ipv4_address, tvb, offset2+4, 4, ENC_BIG_ENDIAN);
2987
0
            break;
2988
2989
1
        case IPv6:
2990
1
            if (obj_length != OBJ_HDR_LEN+END_POINT_IPV6_OBJ_LEN) {
2991
1
                proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
2992
1
                                             tvb, offset2, obj_length,
2993
1
                                             "Bad IPv6 END-POINTS object length %u, should be %u",
2994
1
                                             obj_length, OBJ_HDR_LEN+END_POINT_IPV6_OBJ_LEN);
2995
1
                return;
2996
1
            }
2997
2998
0
            proto_tree_add_item(pcep_object_tree, hf_pcep_end_point_obj_source_ipv6_address,      tvb, offset2,    16, ENC_NA);
2999
0
            proto_tree_add_item(pcep_object_tree, hf_pcep_end_point_obj_destination_ipv6_address, tvb, offset2+16, 16, ENC_NA);
3000
0
            break;
3001
3002
1
        case IPv4_P2MP:
3003
1
            proto_tree_add_item(pcep_object_tree, hf_pcep_endpoint_p2mp_leaf, tvb, offset2, 4, ENC_BIG_ENDIAN);
3004
1
            proto_tree_add_item(pcep_object_tree, hf_pcep_end_point_obj_source_ipv4_address, tvb, offset2+4, 4, ENC_BIG_ENDIAN);
3005
1
            dest_leafs = (obj_length - OBJ_HDR_LEN - 8)/4;
3006
50
            for (i=0; i<dest_leafs; i++)
3007
49
                proto_tree_add_item(pcep_object_tree, hf_pcep_end_point_obj_destination_ipv4_address, tvb, offset2+8+(4*i), 4, ENC_BIG_ENDIAN);
3008
1
            break;
3009
3010
4
       case IPv6_P2MP:
3011
4
            proto_tree_add_item(pcep_object_tree, hf_pcep_endpoint_p2mp_leaf, tvb, offset2, 4, ENC_BIG_ENDIAN);
3012
4
            proto_tree_add_item(pcep_object_tree, hf_pcep_end_point_obj_source_ipv6_address, tvb, offset2+4, 16, ENC_NA);
3013
4
            dest_leafs = (obj_length - OBJ_HDR_LEN - 20)/16;
3014
73
            for (i=0; i<dest_leafs; i++)
3015
69
                proto_tree_add_item(pcep_object_tree, hf_pcep_end_point_obj_destination_ipv6_address, tvb, (offset2+20+i*16), 16, ENC_NA);
3016
4
            break;
3017
3018
6
        default:
3019
6
            proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_unknown_type_object,
3020
6
                                         tvb, offset2, obj_length-OBJ_HDR_LEN,
3021
6
                                         "UNKNOWN Type Object (%u)", obj_type);
3022
6
            break;
3023
13
    }
3024
13
}
3025
3026
3027
3028
/*------------------------------------------------------------------------------
3029
 * BANDWIDTH OBJECT
3030
 *------------------------------------------------------------------------------*/
3031
4
#define BANDWIDTH_OBJ_LEN  4
3032
3033
static void
3034
dissect_pcep_bandwidth_obj(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
3035
2
{
3036
2
    if (obj_length != OBJ_HDR_LEN+BANDWIDTH_OBJ_LEN) {
3037
2
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3038
2
                                     tvb, offset2, obj_length,
3039
2
                                     "Bad BANDWIDTH object length %u, should be %u",
3040
2
                                     obj_length, OBJ_HDR_LEN+BANDWIDTH_OBJ_LEN);
3041
2
        return;
3042
2
    }
3043
3044
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_bandwidth, tvb, offset2, 4, ENC_BIG_ENDIAN);
3045
0
}
3046
3047
/*------------------------------------------------------------------------------
3048
 * METRIC OBJECT
3049
 *------------------------------------------------------------------------------*/
3050
4
#define METRIC_OBJ_LEN  8
3051
3052
static void
3053
dissect_pcep_metric_obj(proto_tree *pcep_object_tree, packet_info *pinfo,
3054
                        tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
3055
2
{
3056
2
    proto_tree *pcep_metric_obj_flags;
3057
2
    proto_item *ti;
3058
3059
2
    if (obj_length != OBJ_HDR_LEN+METRIC_OBJ_LEN) {
3060
2
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3061
2
                                     tvb, offset2, obj_length,
3062
2
                                     "Bad METRIC object length %u, should be %u",
3063
2
                                     obj_length, OBJ_HDR_LEN+METRIC_OBJ_LEN);
3064
2
        return;
3065
2
    }
3066
3067
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_metric_obj_reserved, tvb, offset2, 2, ENC_BIG_ENDIAN);
3068
3069
0
    ti = proto_tree_add_item(pcep_object_tree, hf_pcep_metric_obj_flags, tvb, offset2+2, 1, ENC_NA);
3070
0
    pcep_metric_obj_flags = proto_item_add_subtree(ti, ett_pcep_obj_metric);
3071
0
    proto_tree_add_item(pcep_metric_obj_flags, hf_pcep_metric_flags_c, tvb, offset2+2, 1, ENC_NA);
3072
0
    proto_tree_add_item(pcep_metric_obj_flags, hf_pcep_metric_flags_b, tvb, offset2+2, 1, ENC_NA);
3073
3074
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_metric_obj_type,         tvb, offset2+3, 1, ENC_NA);
3075
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_metric_obj_metric_value, tvb, offset2+4, 4, ENC_BIG_ENDIAN);
3076
0
}
3077
3078
/*------------------------------------------------------------------------------
3079
 * EXPLICIT ROUTE OBJECT (ERO)
3080
 *------------------------------------------------------------------------------*/
3081
static void
3082
dissect_pcep_explicit_route_obj(proto_tree *pcep_object_tree, packet_info *pinfo,
3083
                                tvbuff_t *tvb, int offset2, int obj_length, int obj_class, int obj_type _U_)
3084
40
{
3085
40
    uint8_t l_type;
3086
40
    uint8_t length;
3087
40
    unsigned  type_exp_route;
3088
40
    unsigned  body_obj_len;
3089
3090
40
    body_obj_len = obj_length - OBJ_HDR_LEN;
3091
3092
737
    while (body_obj_len) {
3093
737
        if (body_obj_len < 2) {
3094
0
            expert_add_info_format(pinfo, pcep_object_tree, &ei_pcep_subobject_bad_length,
3095
0
                                   "Bad ERO object: subobject goes past end of object");
3096
0
            break;
3097
0
        }
3098
3099
737
        l_type = tvb_get_uint8(tvb, offset2);
3100
737
        length = tvb_get_uint8(tvb, offset2+1);
3101
3102
737
        if (length < 2) {
3103
6
            expert_add_info_format(pinfo, pcep_object_tree, &ei_pcep_subobject_bad_length,
3104
6
                                   "Bad ERO object: subobject length %u < 2", length);
3105
6
            break;
3106
6
        }
3107
3108
731
        type_exp_route = (l_type & Mask_Type);
3109
731
        if (body_obj_len <length) {
3110
1
            proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3111
1
                                         tvb, offset2, length,
3112
1
                                         "Bad ERO object: subobject length %u > remaining length %u",
3113
1
                                         length, body_obj_len);
3114
1
            break;
3115
1
        }
3116
3117
730
        switch (type_exp_route) {
3118
3119
3
            case PCEP_SUB_IPv4:
3120
3
                dissect_subobj_ipv4(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_explicit_route, length);
3121
3
                break;
3122
374
            case PCEP_SUB_IPv6:
3123
374
                dissect_subobj_ipv6(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_explicit_route, length);
3124
374
                break;
3125
11
            case PCEP_SUB_LABEL_CONTROL:
3126
11
                dissect_subobj_label_control(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_explicit_route, length);
3127
11
                break;
3128
88
            case PCEP_SUB_UNNUMB_INTERFACE_ID:
3129
88
                dissect_subobj_unnumb_interfaceID(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_explicit_route, length);
3130
88
                break;
3131
20
            case PCEP_SUB_AUTONOMOUS_SYS_NUM:
3132
20
                dissect_subobj_autonomous_sys_num(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_explicit_route, length);
3133
20
                break;
3134
1
            case PCEP_SUB_PKSv4:
3135
1
                dissect_subobj_pksv4(pcep_object_tree, pinfo, tvb, offset2, ett_pcep_obj_explicit_route, length);
3136
1
                break;
3137
28
            case PCEP_SUB_SR_PRE_IANA:
3138
29
            case PCEP_SUB_SR:
3139
29
                dissect_subobj_sr(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_explicit_route, length);
3140
29
                break;
3141
9
            case PCEP_SUB_SRv6:
3142
9
                dissect_subobj_srv6(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_explicit_route, length);
3143
9
                break;
3144
183
            default:
3145
183
                proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_non_defined_subobject,
3146
183
                                             tvb, offset2, length,
3147
183
                                             "Non defined subobject (%d)", type_exp_route);
3148
183
                break;
3149
730
        }
3150
697
        offset2 += length;
3151
697
        body_obj_len -= length;
3152
697
    }
3153
40
}
3154
3155
/*------------------------------------------------------------------------------
3156
 * RECORD ROUTE OBJECT (RRO)
3157
 *------------------------------------------------------------------------------*/
3158
static void
3159
dissect_pcep_record_route_obj(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class, int obj_type _U_)
3160
35
{
3161
35
    uint8_t type_rro;
3162
35
    uint8_t length;
3163
35
    unsigned  body_obj_len;
3164
3165
35
    body_obj_len = obj_length - OBJ_HDR_LEN;
3166
3167
321
    while (body_obj_len) {
3168
320
        if (body_obj_len < 2) {
3169
1
            expert_add_info_format(pinfo, pcep_object_tree, &ei_pcep_subobject_bad_length,
3170
1
                                   "Bad RRO object: subobject goes past end of object");
3171
1
            break;
3172
1
        }
3173
3174
319
        type_rro = tvb_get_uint8(tvb, offset2);
3175
319
        length = tvb_get_uint8(tvb, offset2+1);
3176
3177
319
        if (length < 2) {
3178
9
            expert_add_info_format(pinfo, pcep_object_tree, &ei_pcep_subobject_bad_length,
3179
9
                                   "Bad RRO object: subobject length %u < 2", length);
3180
9
            break;
3181
9
        }
3182
3183
310
        if (body_obj_len <length) {
3184
1
            proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3185
1
                                         tvb, offset2, length,
3186
1
                                         "Bad RRO subobject: subobject length %u > remaining length %u",
3187
1
                                         length, body_obj_len);
3188
1
            break;
3189
1
        }
3190
3191
309
        switch (type_rro) {
3192
3193
5
            case PCEP_SUB_IPv4:
3194
5
                dissect_subobj_ipv4(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_record_route, length);
3195
5
                break;
3196
81
            case PCEP_SUB_IPv6:
3197
81
                dissect_subobj_ipv6(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_record_route, length);
3198
81
                break;
3199
10
            case PCEP_SUB_LABEL_CONTROL:
3200
10
                dissect_subobj_label_control(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_record_route, length);
3201
10
                break;
3202
31
            case PCEP_SUB_UNNUMB_INTERFACE_ID:
3203
31
                dissect_subobj_unnumb_interfaceID(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_record_route, length);
3204
31
                break;
3205
16
            case PCEP_SUB_SR_PRE_IANA:
3206
18
            case PCEP_SUB_SR:   /* draft-ietf-pce-segment-routing-08 section 5.4 */
3207
18
                dissect_subobj_sr(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_record_route, length);
3208
18
                break;
3209
3
            case PCEP_SUB_SRv6:
3210
3
                dissect_subobj_srv6(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_record_route, length);
3211
3
                break;
3212
152
            default:
3213
152
                proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_non_defined_subobject,
3214
152
                                             tvb, offset2, length,
3215
152
                                             "Non defined subobject (%d)", type_rro);
3216
152
                break;
3217
309
        }
3218
286
        offset2 += length;
3219
286
        body_obj_len -= length;
3220
286
    }
3221
35
}
3222
3223
/*------------------------------------------------------------------------------
3224
 * LSPA OBJECT
3225
 *------------------------------------------------------------------------------*/
3226
6
#define LSPA_OBJ_MIN_LEN  16
3227
3228
static void
3229
dissect_pcep_lspa_obj(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
3230
2
{
3231
2
    proto_tree *pcep_lspa_obj_flags;
3232
2
    proto_item *ti;
3233
3234
2
    if (obj_length < OBJ_HDR_LEN+LSPA_OBJ_MIN_LEN) {
3235
0
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3236
0
                                     tvb, offset2, obj_length,
3237
0
                                     "Bad LSPA object length %u, should be >= %u",
3238
0
                                     obj_length, OBJ_HDR_LEN+LSPA_OBJ_MIN_LEN);
3239
0
        return;
3240
0
    }
3241
3242
2
    proto_tree_add_item(pcep_object_tree, hf_pcep_lspa_obj_exclude_any,      tvb, offset2,    4, ENC_BIG_ENDIAN);
3243
2
    proto_tree_add_item(pcep_object_tree, hf_pcep_lspa_obj_include_any,      tvb, offset2+4,  4, ENC_BIG_ENDIAN);
3244
2
    proto_tree_add_item(pcep_object_tree, hf_pcep_lspa_obj_include_all,      tvb, offset2+8,  4, ENC_BIG_ENDIAN);
3245
2
    proto_tree_add_item(pcep_object_tree, hf_pcep_lspa_obj_setup_priority,   tvb, offset2+12, 1, ENC_NA);
3246
2
    proto_tree_add_item(pcep_object_tree, hf_pcep_lspa_obj_holding_priority, tvb, offset2+13, 1, ENC_NA);
3247
3248
2
    ti = proto_tree_add_item(pcep_object_tree, hf_pcep_lspa_obj_flags, tvb, offset2+14, 1, ENC_NA);
3249
2
    pcep_lspa_obj_flags = proto_item_add_subtree(ti, ett_pcep_obj_metric);
3250
2
    proto_tree_add_item(pcep_lspa_obj_flags, hf_pcep_lspa_flags_l, tvb, offset2+14, 1, ENC_NA);
3251
3252
2
    proto_tree_add_item(pcep_object_tree, hf_pcep_lspa_obj_reserved, tvb, offset2+15, 1, ENC_NA);
3253
3254
    /*it's suppose that obj_length is a valid date. The object can have optional TLV(s)*/
3255
2
    offset2 += LSPA_OBJ_MIN_LEN;
3256
2
    obj_length -= OBJ_HDR_LEN+LSPA_OBJ_MIN_LEN;
3257
2
    dissect_pcep_tlvs(pcep_object_tree, pinfo, tvb, offset2, obj_length, ett_pcep_obj_lspa);
3258
2
}
3259
3260
/*------------------------------------------------------------------------------
3261
 * INCLUDE ROUTE OBJECT (IRO)
3262
 *------------------------------------------------------------------------------*/
3263
static void
3264
dissect_pcep_iro_obj(proto_tree *pcep_object_tree, packet_info *pinfo,
3265
                     tvbuff_t *tvb, int offset2, int obj_length, int obj_class, int obj_type _U_)
3266
46
{
3267
46
    uint8_t l_type;
3268
46
    uint8_t length;
3269
46
    int    type_iro;
3270
46
    unsigned  body_obj_len;
3271
3272
46
    body_obj_len = obj_length - OBJ_HDR_LEN;
3273
3274
479
    while (body_obj_len) {
3275
478
        if (body_obj_len < 2) {
3276
0
            expert_add_info_format(pinfo, pcep_object_tree, &ei_pcep_subobject_bad_length,
3277
0
                                   "Bad IRO object: subobject goes past end of object");
3278
0
            break;
3279
0
        }
3280
3281
478
        l_type = tvb_get_uint8(tvb, offset2);
3282
478
        length = tvb_get_uint8(tvb, offset2+1);
3283
3284
478
        if (length < 2) {
3285
12
            expert_add_info_format(pinfo, pcep_object_tree, &ei_pcep_subobject_bad_length,
3286
12
                                   "Bad IRO object: subobject length %u < 2", length);
3287
12
            break;
3288
12
        }
3289
3290
466
        type_iro = (l_type & Mask_Type);
3291
3292
466
        if (body_obj_len <length) {
3293
0
            proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3294
0
                                         tvb, offset2, length,
3295
0
                                         "Bad IRO object: subobject length %u > remaining length %u",
3296
0
                                         length, body_obj_len);
3297
0
            break;
3298
0
        }
3299
3300
466
        switch (type_iro) {
3301
3302
3
            case PCEP_SUB_IPv4:
3303
3
                dissect_subobj_ipv4(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_iro, length);
3304
3
                break;
3305
210
            case PCEP_SUB_IPv6:
3306
210
                dissect_subobj_ipv6(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_iro, length);
3307
210
                break;
3308
63
            case PCEP_SUB_UNNUMB_INTERFACE_ID:
3309
63
                dissect_subobj_unnumb_interfaceID(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_iro, length);
3310
63
                break;
3311
8
            case PCEP_SUB_AUTONOMOUS_SYS_NUM:
3312
8
                dissect_subobj_autonomous_sys_num(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_iro, length);
3313
8
                break;
3314
29
            case PCEP_SUB_EXRS:
3315
29
                dissect_subobj_exrs(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_iro, type_iro, length);
3316
29
                break;
3317
142
            default:
3318
142
                proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_non_defined_subobject,
3319
142
                                             tvb, offset2, length,
3320
142
                                             "Non defined subobject (%d)", type_iro);
3321
142
                break;
3322
466
        }
3323
433
        offset2 += length;
3324
433
        body_obj_len -= length;
3325
433
    }
3326
46
}
3327
3328
/*------------------------------------------------------------------------------
3329
 * SVEC OBJECT
3330
 *------------------------------------------------------------------------------*/
3331
7
#define SVEC_OBJ_MIN_LEN  4
3332
3333
static void
3334
dissect_pcep_svec_obj(proto_tree *pcep_object_tree, packet_info *pinfo,
3335
                      tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
3336
7
{
3337
7
    proto_item *ti;
3338
7
    proto_tree *pcep_svec_flags_obj;
3339
7
    int         m;
3340
7
    int         i;
3341
7
    uint32_t    requestID;
3342
3343
7
    if (obj_length < OBJ_HDR_LEN+SVEC_OBJ_MIN_LEN) {
3344
0
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3345
0
                                     tvb, offset2, obj_length,
3346
0
                                     "Bad SVEC object length %u, should be >= %u",
3347
0
                                     obj_length, OBJ_HDR_LEN+SVEC_OBJ_MIN_LEN);
3348
0
        return;
3349
0
    }
3350
3351
7
    proto_tree_add_item(pcep_object_tree, hf_pcep_svec_obj_reserved, tvb, offset2, 1, ENC_NA);
3352
3353
7
    ti = proto_tree_add_item(pcep_object_tree, hf_pcep_svec_obj_flags, tvb, offset2+1, 3, ENC_BIG_ENDIAN);
3354
7
    pcep_svec_flags_obj = proto_item_add_subtree(ti, ett_pcep_obj_svec);
3355
7
    proto_tree_add_item(pcep_svec_flags_obj, hf_pcep_svec_flags_l, tvb, offset2 + 1, 3, ENC_BIG_ENDIAN);
3356
7
    proto_tree_add_item(pcep_svec_flags_obj, hf_pcep_svec_flags_n, tvb, offset2 + 1, 3, ENC_BIG_ENDIAN);
3357
7
    proto_tree_add_item(pcep_svec_flags_obj, hf_pcep_svec_flags_s, tvb, offset2 + 1, 3, ENC_BIG_ENDIAN);
3358
7
    proto_tree_add_item(pcep_svec_flags_obj, hf_pcep_svec_flags_d, tvb, offset2 + 1, 3, ENC_BIG_ENDIAN);    /* RFC 6006 */
3359
7
    proto_tree_add_item(pcep_svec_flags_obj, hf_pcep_svec_flags_p, tvb, offset2 + 1, 3, ENC_BIG_ENDIAN);    /* RFC 6006 */
3360
3361
7
    m = 1;
3362
153
    for ( i=4 ; i<(obj_length-OBJ_HDR_LEN) ; ) {
3363
146
        requestID = tvb_get_ntohl(tvb, offset2+i);
3364
146
        proto_tree_add_uint_format(pcep_object_tree, hf_pcep_svec_obj_request_id_number, tvb, offset2+i, 4, requestID,
3365
146
                                   "Request-ID-Number %u: 0x%x", m++, requestID);
3366
146
        i += 4;
3367
146
    }
3368
7
}
3369
3370
/*------------------------------------------------------------------------------
3371
 * NOTIFICATION OBJECT
3372
 *------------------------------------------------------------------------------*/
3373
6
#define NOTIFICATION_OBJ_MIN_LEN  4
3374
3375
static void
3376
dissect_pcep_notification_obj(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
3377
2
{
3378
2
    uint8_t nt;
3379
3380
2
    if (obj_length < OBJ_HDR_LEN+NOTIFICATION_OBJ_MIN_LEN) {
3381
0
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3382
0
                                     tvb, offset2, obj_length,
3383
0
                                     "Bad NOTIFICATION object length %u, should be >= %u",
3384
0
                                     obj_length, OBJ_HDR_LEN+NOTIFICATION_OBJ_MIN_LEN);
3385
0
        return;
3386
0
    }
3387
3388
2
    proto_tree_add_item(pcep_object_tree, hf_pcep_notification_obj_reserved, tvb, offset2,   1, ENC_NA);
3389
3390
2
    proto_tree_add_item(pcep_object_tree, hf_pcep_notification_obj_flags,    tvb, offset2+1, 1, ENC_NA);
3391
3392
2
    nt = tvb_get_uint8(tvb, offset2+2);
3393
2
    proto_tree_add_item(pcep_object_tree, hf_PCEPF_NOTI_TYPE, tvb, offset2+2, 1, ENC_NA);
3394
3395
2
    switch (nt) {
3396
3397
0
        case 1:
3398
0
            proto_tree_add_item(pcep_object_tree, hf_PCEPF_NOTI_VAL1, tvb, offset2+2, 1, ENC_NA);
3399
0
            break;
3400
3401
0
        case 2:
3402
0
            proto_tree_add_item(pcep_object_tree, hf_PCEPF_NOTI_VAL2, tvb, offset2+2, 1, ENC_NA);
3403
0
            break;
3404
3405
2
        default:
3406
2
            proto_tree_add_item(pcep_object_tree, hf_pcep_notification_obj_type, tvb, offset2+2, 1, ENC_NA);
3407
2
            break;
3408
2
    }
3409
3410
2
    proto_tree_add_item(pcep_object_tree, hf_pcep_notification_obj_value, tvb, offset2+3, 1, ENC_NA);
3411
3412
    /*it's suppose that obj_length is a valid date. The object can have optional TLV(s)*/
3413
2
    offset2 += NOTIFICATION_OBJ_MIN_LEN;
3414
2
    obj_length -= OBJ_HDR_LEN+NOTIFICATION_OBJ_MIN_LEN;
3415
2
    dissect_pcep_tlvs(pcep_object_tree, pinfo, tvb, offset2, obj_length, ett_pcep_obj_notification);
3416
2
}
3417
3418
/*------------------------------------------------------------------------------
3419
 * ERROR OBJECT
3420
 *------------------------------------------------------------------------------*/
3421
12
#define ERROR_OBJ_MIN_LEN  4
3422
3423
static void
3424
dissect_pcep_error_obj(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
3425
4
{
3426
4
    uint8_t      error_type;
3427
4
    uint8_t      error_value;
3428
4
    proto_item*  type_item;
3429
4
    const char *err_str = "Unassigned";
3430
3431
4
    if (obj_length < OBJ_HDR_LEN+ERROR_OBJ_MIN_LEN) {
3432
0
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3433
0
                                     tvb, offset2, obj_length,
3434
0
                                     "Bad ERROR object length %u, should be >= %u",
3435
0
                                     obj_length, OBJ_HDR_LEN+ERROR_OBJ_MIN_LEN);
3436
0
        return;
3437
0
    }
3438
3439
4
    proto_tree_add_item(pcep_object_tree, hf_pcep_error_obj_reserved, tvb, offset2,   1, ENC_NA);
3440
4
    proto_tree_add_item(pcep_object_tree, hf_pcep_error_obj_flags,    tvb, offset2+1, 1, ENC_NA);
3441
3442
4
    error_type  = tvb_get_uint8(tvb, offset2+2);
3443
4
    error_value = tvb_get_uint8(tvb, offset2+3);
3444
4
    type_item = proto_tree_add_item(pcep_object_tree, hf_PCEPF_ERROR_TYPE, tvb, offset2+2, 1, ENC_NA);
3445
3446
4
    switch (error_type) {
3447
0
        case ESTABLISH_FAILURE:
3448
0
            err_str = val_to_str_const(error_value, pcep_error_value_1_vals, "Unknown");
3449
0
            break;
3450
0
        case CAP_NOT_SUPPORTED:
3451
0
            break;
3452
0
        case UNKNOWN_OBJ:
3453
0
            err_str = val_to_str_const(error_value, pcep_error_value_3_vals, "Unknown");
3454
0
            break;
3455
0
        case NOT_SUPP_OBJ:
3456
0
            err_str = val_to_str_const(error_value, pcep_error_value_4_vals, "Unknown");
3457
0
            break;
3458
0
        case POLICY_VIOLATION:
3459
0
            err_str = val_to_str_const(error_value, pcep_error_value_5_vals, "Unknown");
3460
0
            break;
3461
0
        case MANDATORY_OBJ_MIS:
3462
0
            err_str = val_to_str_const(error_value, pcep_error_value_6_vals, "Unknown");
3463
0
            break;
3464
0
        case SYNCH_PCREQ_MIS:
3465
0
            break;
3466
0
        case UNKNOWN_REQ_REF:
3467
0
            break;
3468
0
        case ATTEMPT_2_SESSION:
3469
0
            break;
3470
0
        case INVALID_OBJ:
3471
0
            err_str = val_to_str_const(error_value, pcep_error_value_10_vals, "Unknown");
3472
0
            break;
3473
0
        case UNRECO_EXRS_SUBOBJ:
3474
0
            break;
3475
0
        case DIFFSERV_TE_ERROR:
3476
0
            err_str = val_to_str_const(error_value, pcep_error_value_12_vals, "Unknown");
3477
0
            break;
3478
2
        case BRPC_FAILURE:
3479
2
            err_str = val_to_str_const(error_value, pcep_error_value_13_vals, "Unknown");
3480
2
            break;
3481
0
        case GCO_ERROR:
3482
0
            err_str = val_to_str_const(error_value, pcep_error_value_15_vals, "Unknown");
3483
0
            break;
3484
0
        case P2MP_CAPABILITY_ERROR:
3485
0
            err_str = val_to_str_const(error_value, pcep_error_value_16_vals, "Unknown");
3486
0
            break;
3487
0
        case P2MP_END_POINTS_ERROR:
3488
0
            err_str = val_to_str_const(error_value, pcep_error_value_17_vals, "Unknown");
3489
0
            break;
3490
0
        case P2MP_FRAGMENT_ERROR:
3491
0
            err_str = val_to_str_const(error_value, pcep_error_value_18_vals, "Unknown");
3492
0
            break;
3493
0
        case INVALID_OPERATION:
3494
0
            err_str = val_to_str_const(error_value, pcep_error_value_19_vals, "Unknown");
3495
0
            break;
3496
0
        case LSP_STATE_SYNCHRONIZATION_ERROR:
3497
0
            err_str = val_to_str_const(error_value, pcep_error_value_20_vals, "Unknown");
3498
0
            break;
3499
0
        case INVALID_PATH_SETUP_TYPE:
3500
0
            err_str = val_to_str_const(error_value, pcep_error_value_21_vals, "Unknown");
3501
0
            break;
3502
0
        case BAD_PARAMETER_VALUE:
3503
0
            err_str = val_to_str_const(error_value, pcep_error_value_23_vals, "Unknown");
3504
0
            break;
3505
0
        case LSP_INSTANTIATION_ERROR:
3506
0
            err_str = val_to_str_const(error_value, pcep_error_value_24_vals, "Unknown");
3507
0
            break;
3508
0
        case PCEP_STARTTLS_ERROR:
3509
0
            err_str = val_to_str_const(error_value, pcep_error_value_25_vals, "Unknown");
3510
0
            break;
3511
0
        case ASSOCIATION_ERROR:
3512
0
            err_str = val_to_str_const(error_value, pcep_error_value_26_vals, "Unknown");
3513
0
            break;
3514
0
        case WSON_RWA_ERROR:
3515
0
            err_str = val_to_str_const(error_value, pcep_error_value_27_vals, "Unknown");
3516
0
            break;
3517
0
        case H_PCE_ERROR:
3518
0
            err_str = val_to_str_const(error_value, pcep_error_value_28_vals, "Unknown");
3519
0
            break;
3520
1
        case PATH_COMPUTATION_FAILURE:
3521
1
            err_str = val_to_str_const(error_value, pcep_error_value_29_vals, "Unknown");
3522
1
            break;
3523
0
        case FLOWSPEC_ERROR:
3524
0
            err_str = val_to_str_const(error_value, pcep_error_value_30_vals, "Unknown");
3525
0
            break;
3526
0
        case PCECC_FAILURE:
3527
0
            err_str = val_to_str_const(error_value, pcep_error_value_31_vals, "Unknown");
3528
0
            break;
3529
1
        default:
3530
1
            proto_item_append_text(type_item, " (%u Non defined Error-Value)", error_type);
3531
4
    }
3532
4
    proto_tree_add_uint_format_value(pcep_object_tree, hf_PCEPF_ERROR_VALUE, tvb, offset2+3, 1, error_value, "%s (%u)", err_str, error_value);
3533
3534
    /*it's suppose that obj_length is a valid date. The object can have optional TLV(s)*/
3535
4
    offset2 += ERROR_OBJ_MIN_LEN;
3536
4
    obj_length -= OBJ_HDR_LEN+ERROR_OBJ_MIN_LEN;
3537
4
    dissect_pcep_tlvs(pcep_object_tree, pinfo, tvb, offset2, obj_length, ett_pcep_obj_error);
3538
4
}
3539
3540
3541
/*------------------------------------------------------------------------------
3542
 * LOAD-BALANCING OBJECT
3543
 *------------------------------------------------------------------------------*/
3544
2
#define LOAD_BALANCING_OBJ_LEN  8
3545
3546
static void
3547
dissect_pcep_balancing_obj(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
3548
1
{
3549
1
    if (obj_length != OBJ_HDR_LEN+LOAD_BALANCING_OBJ_LEN) {
3550
1
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3551
1
                                     tvb, offset2, obj_length,
3552
1
                                     "Bad LOAD-BALANCING object length %u, should be %u",
3553
1
                                     obj_length, OBJ_HDR_LEN+LOAD_BALANCING_OBJ_LEN);
3554
1
        return;
3555
1
    }
3556
3557
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_balancing_obj_reserved,                  tvb, offset2,   2, ENC_BIG_ENDIAN);
3558
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_balancing_obj_flags,                     tvb, offset2+2, 1, ENC_NA);
3559
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_balancing_obj_maximum_number_of_te_lsps, tvb, offset2+3, 1, ENC_NA);
3560
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_balancing_obj_minimum_bandwidth,         tvb, offset2+4, 4, ENC_BIG_ENDIAN);
3561
0
}
3562
3563
/*------------------------------------------------------------------------------
3564
 * CLOSE OBJECT
3565
 *------------------------------------------------------------------------------*/
3566
3
#define CLOSE_OBJ_MIN_LEN  4
3567
3568
static void
3569
dissect_pcep_close_obj(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
3570
1
{
3571
1
    if (obj_length < OBJ_HDR_LEN+CLOSE_OBJ_MIN_LEN) {
3572
0
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3573
0
                                     tvb, offset2, obj_length,
3574
0
                                     "Bad CLOSE object length %u, should be >= %u",
3575
0
                                     obj_length, OBJ_HDR_LEN+CLOSE_OBJ_MIN_LEN);
3576
0
        return;
3577
0
    }
3578
3579
1
    proto_tree_add_item(pcep_object_tree, hf_pcep_close_obj_reserved, tvb, offset2,   2, ENC_BIG_ENDIAN);
3580
1
    proto_tree_add_item(pcep_object_tree, hf_pcep_close_obj_flags,    tvb, offset2+2, 1, ENC_NA);
3581
1
    proto_tree_add_item(pcep_object_tree, hf_pcep_close_obj_reason,   tvb, offset2+3, 1, ENC_NA);
3582
3583
    /*it's suppose that obj_length is a valid date. The object can have optional TLV(s)*/
3584
1
    offset2 += CLOSE_OBJ_MIN_LEN;
3585
1
    obj_length -= OBJ_HDR_LEN+CLOSE_OBJ_MIN_LEN;
3586
1
    dissect_pcep_tlvs(pcep_object_tree, pinfo, tvb, offset2, obj_length, ett_pcep_obj_load_balancing);
3587
1
}
3588
3589
/*------------------------------------------------------------------------------
3590
 * PATH-KEY OBJECT
3591
 *------------------------------------------------------------------------------*/
3592
static void
3593
dissect_pcep_path_key_obj(proto_tree *pcep_object_tree, packet_info *pinfo,
3594
                          tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
3595
12
{
3596
12
    uint8_t l_type;
3597
12
    uint8_t length;
3598
12
    unsigned  type_exp_route;
3599
12
    unsigned  body_obj_len;
3600
3601
12
    body_obj_len = obj_length - OBJ_HDR_LEN;
3602
3603
63
    while (body_obj_len) {
3604
63
        if (body_obj_len < 2) {
3605
0
            expert_add_info_format(pinfo, pcep_object_tree, &ei_pcep_subobject_bad_length,
3606
0
                                   "Bad PATH-KEY object: subobject goes past end of object");
3607
0
            break;
3608
0
        }
3609
3610
63
        l_type = tvb_get_uint8(tvb, offset2);
3611
63
        length = tvb_get_uint8(tvb, offset2+1);
3612
3613
63
        if (length < 2) {
3614
4
            expert_add_info_format(pinfo, pcep_object_tree, &ei_pcep_subobject_bad_length,
3615
4
                                   "Bad PATH-KEY object: subobject length %u < 2", length);
3616
4
            break;
3617
4
        }
3618
3619
59
        type_exp_route = (l_type & Mask_Type);
3620
59
        if (body_obj_len <length) {
3621
2
            proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3622
2
                                         tvb, offset2, length,
3623
2
                                         "Bad PATH-KEY object: subobject length %u > remaining length %u",
3624
2
                                         length, body_obj_len);
3625
2
            break;
3626
2
        }
3627
3628
57
        switch (type_exp_route) {
3629
2
            case PCEP_SUB_PKSv4:
3630
2
                dissect_subobj_pksv4(pcep_object_tree, pinfo, tvb, offset2, ett_pcep_obj_explicit_route, length);
3631
2
                break;
3632
55
            default:
3633
55
                proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_non_defined_subobject,
3634
55
                                             tvb, offset2, length,
3635
55
                                             "Non defined subobject (%d)", type_exp_route);
3636
55
                break;
3637
57
        }
3638
51
        offset2 += length;
3639
51
        body_obj_len -= length;
3640
51
    }
3641
12
}
3642
3643
/*------------------------------------------------------------------------------
3644
 * XRO OBJECT
3645
 *------------------------------------------------------------------------------*/
3646
36
#define XRO_OBJ_MIN_LEN  4
3647
3648
static void
3649
dissect_pcep_xro_obj(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class, int obj_type _U_)
3650
12
{
3651
12
    proto_tree *pcep_xro_flags_obj;
3652
12
    proto_item *ti;
3653
12
    uint8_t     x_type;
3654
12
    uint8_t     length;
3655
12
    unsigned    type_xro;
3656
12
    unsigned    body_obj_len;
3657
3658
12
    body_obj_len = obj_length - OBJ_HDR_LEN;
3659
3660
12
    if (obj_length < OBJ_HDR_LEN+XRO_OBJ_MIN_LEN) {
3661
0
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3662
0
                                     tvb, offset2, obj_length,
3663
0
                                     "Bad XRO object length %u, should be >= %u",
3664
0
                                     obj_length, OBJ_HDR_LEN+XRO_OBJ_MIN_LEN);
3665
0
        return;
3666
0
    }
3667
3668
12
    proto_tree_add_item(pcep_object_tree, hf_pcep_xro_obj_reserved, tvb, offset2, 2, ENC_BIG_ENDIAN);
3669
3670
12
    ti =  proto_tree_add_item(pcep_object_tree, hf_pcep_xro_obj_flags, tvb, offset2+2, 2, ENC_BIG_ENDIAN);
3671
12
    pcep_xro_flags_obj = proto_item_add_subtree(ti, ett_pcep_obj_xro);
3672
12
    proto_tree_add_item(pcep_xro_flags_obj, hf_pcep_xro_flags_f, tvb, offset2 + 2, 2, ENC_BIG_ENDIAN);
3673
3674
12
    offset2 += XRO_OBJ_MIN_LEN;
3675
12
    body_obj_len -= XRO_OBJ_MIN_LEN;
3676
3677
12
    if (body_obj_len < 2) {
3678
0
        expert_add_info_format(pinfo, pcep_object_tree, &ei_pcep_subobject_bad_length,
3679
0
                               "Bad XRO object: subobject goes past end of object");
3680
0
        return;
3681
0
    }
3682
3683
69
    while (body_obj_len >= 2) {
3684
3685
69
        x_type = tvb_get_uint8(tvb, offset2);
3686
69
        length = tvb_get_uint8(tvb, offset2+1);
3687
3688
69
        if (length < 2) {
3689
4
            expert_add_info_format(pinfo, pcep_object_tree, &ei_pcep_subobject_bad_length,
3690
4
                                   "Bad XRO object: object length %u < 2", length);
3691
4
            break;
3692
4
        }
3693
3694
65
        type_xro = (x_type & Mask_Type);
3695
3696
65
        if (body_obj_len < length) {
3697
0
            proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3698
0
                                         tvb, offset2, length,
3699
0
                                         "Bad XRO object: object length %u > remaining length %u",
3700
0
                                         length, body_obj_len);
3701
0
            break;
3702
0
        }
3703
3704
65
        switch (type_xro) {
3705
3706
0
            case PCEP_SUB_IPv4:
3707
0
                dissect_subobj_ipv4(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_xro, length);
3708
0
                break;
3709
8
            case PCEP_SUB_IPv6:
3710
8
                dissect_subobj_ipv6(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_xro, length);
3711
8
                break;
3712
6
            case PCEP_SUB_UNNUMB_INTERFACE_ID:
3713
6
                dissect_subobj_unnumb_interfaceID(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_xro, length);
3714
6
                break;
3715
2
            case PCEP_SUB_AUTONOMOUS_SYS_NUM:
3716
2
                dissect_subobj_autonomous_sys_num(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_xro, length);
3717
2
                break;
3718
8
            case PCEP_SUB_SRLG:
3719
8
                dissect_subobj_srlg(pcep_object_tree, pinfo, tvb, offset2, ett_pcep_obj_xro, length);
3720
8
                break;
3721
0
            case PCEP_SUB_PKSv4:
3722
0
                dissect_subobj_pksv4(pcep_object_tree, pinfo, tvb, offset2, ett_pcep_obj_xro, length);
3723
0
                break;
3724
1
            case PCEP_SUB_PKSv6:
3725
1
                dissect_subobj_pksv6(pcep_object_tree, pinfo, tvb, offset2, ett_pcep_obj_xro, length);
3726
1
                break;
3727
37
            default:
3728
37
                proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_non_defined_subobject,
3729
37
                                             tvb, offset2-4, length,
3730
37
                                             "Non defined subobject (%d)", type_xro);
3731
37
                break;
3732
65
        }
3733
57
        offset2 += length;
3734
57
        body_obj_len -= length;
3735
57
    }
3736
12
}
3737
3738
/*------------------------------------------------------------------------------
3739
 * MONITORING OBJECT
3740
 *------------------------------------------------------------------------------*/
3741
3
#define OBJ_MONITORING_MIN_LEN 8
3742
3743
static void
3744
dissect_pcep_obj_monitoring(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
3745
1
{
3746
1
    proto_item *ti;
3747
1
    proto_tree *monitoring_flags;
3748
3749
1
    if (obj_length < OBJ_HDR_LEN + OBJ_MONITORING_MIN_LEN) {
3750
0
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3751
0
                                     tvb, offset2, obj_length,
3752
0
                                     "Bad MONITORING object length %u, should be >= %u",
3753
0
                                     obj_length, OBJ_HDR_LEN + OBJ_MONITORING_MIN_LEN);
3754
0
        return;
3755
0
    }
3756
3757
1
    proto_tree_add_item(pcep_object_tree, hf_pcep_obj_monitoring_reserved, tvb, offset2, 1, ENC_NA);
3758
1
    ti = proto_tree_add_item(pcep_object_tree, hf_pcep_obj_monitoring_flags, tvb, offset2+1, 3, ENC_BIG_ENDIAN);
3759
1
    monitoring_flags = proto_item_add_subtree(ti, ett_pcep_obj_monitoring);
3760
1
    proto_tree_add_item(monitoring_flags, hf_pcep_obj_monitoring_flags_reserved,       tvb, offset2 + 1, 3, ENC_BIG_ENDIAN);
3761
1
    proto_tree_add_item(monitoring_flags, hf_pcep_obj_monitoring_flags_i,              tvb, offset2 + 1, 3, ENC_BIG_ENDIAN);
3762
1
    proto_tree_add_item(monitoring_flags, hf_pcep_obj_monitoring_flags_c,              tvb, offset2 + 1, 3, ENC_BIG_ENDIAN);
3763
1
    proto_tree_add_item(monitoring_flags, hf_pcep_obj_monitoring_flags_p,              tvb, offset2 + 1, 3, ENC_BIG_ENDIAN);
3764
1
    proto_tree_add_item(monitoring_flags, hf_pcep_obj_monitoring_flags_g,              tvb, offset2 + 1, 3, ENC_BIG_ENDIAN);
3765
1
    proto_tree_add_item(monitoring_flags, hf_pcep_obj_monitoring_flags_l,              tvb, offset2 + 1, 3, ENC_BIG_ENDIAN);
3766
1
    proto_tree_add_item(pcep_object_tree, hf_pcep_obj_monitoring_monitoring_id_number, tvb, offset2 + 4, 4, ENC_BIG_ENDIAN);
3767
3768
    /* The object can have optional TLV(s)*/
3769
1
    offset2 += OBJ_MONITORING_MIN_LEN;
3770
1
    obj_length -= OBJ_HDR_LEN + OBJ_MONITORING_MIN_LEN;
3771
1
    dissect_pcep_tlvs(pcep_object_tree, pinfo, tvb, offset2, obj_length, ett_pcep_obj_monitoring);
3772
1
}
3773
3774
/*------------------------------------------------------------------------------
3775
 * PCC-ID-REQ OBJECT
3776
 *------------------------------------------------------------------------------*/
3777
2
#define OBJ_PCC_ID_REQ_IPV4_LEN   4
3778
0
#define OBJ_PCC_ID_REQ_IPV6_LEN  16
3779
3780
static void
3781
dissect_pcep_obj_pcc_id_req(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type)
3782
2
{
3783
2
    switch (obj_type)
3784
2
    {
3785
1
        case PCEP_OBJ_PCC_ID_REQ_IPv4:
3786
1
            if (obj_length != OBJ_HDR_LEN + OBJ_PCC_ID_REQ_IPV4_LEN) {
3787
1
                proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3788
1
                                             tvb, offset2, obj_length,
3789
1
                                             "Bad IPv4 PCC-ID-REQ object length %u, should be %u",
3790
1
                                             obj_length, OBJ_HDR_LEN + OBJ_PCC_ID_REQ_IPV4_LEN);
3791
1
                return;
3792
1
            }
3793
0
            proto_tree_add_item(pcep_object_tree, hf_pcep_obj_pcc_id_req_ipv4, tvb, offset2, 4, ENC_BIG_ENDIAN);
3794
0
            break;
3795
3796
0
        case PCEP_OBJ_PCC_ID_REQ_IPv6:
3797
0
            if (obj_length != OBJ_HDR_LEN + OBJ_PCC_ID_REQ_IPV6_LEN) {
3798
0
                proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3799
0
                                             tvb, offset2, obj_length,
3800
0
                                             "Bad IPv6 PCC-ID-REQ object length %u, should be %u",
3801
0
                                             obj_length, OBJ_HDR_LEN + OBJ_PCC_ID_REQ_IPV6_LEN);
3802
0
                return;
3803
0
            }
3804
0
            proto_tree_add_item(pcep_object_tree, hf_pcep_obj_pcc_id_req_ipv6, tvb, offset2, 16, ENC_NA);
3805
0
            break;
3806
3807
1
        default:
3808
1
            proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_non_defined_subobject,
3809
1
                                         tvb, offset2, obj_length - OBJ_HDR_LEN,
3810
1
                                         "UNKNOWN Type Object (%u)", obj_type);
3811
1
            break;
3812
2
    }
3813
2
}
3814
3815
/*------------------------------------------------------------------------------
3816
 * OF OBJECT
3817
 *------------------------------------------------------------------------------*/
3818
2
#define OF_OBJ_MIN_LEN 4
3819
3820
static void
3821
dissect_pcep_of_obj(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
3822
1
{
3823
1
    if (obj_length < OBJ_HDR_LEN+OF_OBJ_MIN_LEN) {
3824
0
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3825
0
                                     tvb, offset2, obj_length,
3826
0
                                     "Bad OF object length %u, should be >= %u",
3827
0
                                     obj_length, OBJ_HDR_LEN+OF_OBJ_MIN_LEN);
3828
0
        return;
3829
0
    }
3830
3831
1
    proto_tree_add_item(pcep_object_tree, hf_pcep_obj_of_code, tvb, offset2, 2, ENC_BIG_ENDIAN);
3832
3833
    /*The object can have optional TLV(s)*/
3834
1
    offset2 += OPEN_OBJ_MIN_LEN;
3835
1
    obj_length -= OBJ_HDR_LEN+OF_OBJ_MIN_LEN;
3836
1
    dissect_pcep_tlvs(pcep_object_tree, pinfo, tvb, offset2, obj_length, ett_pcep_obj_open);
3837
1
}
3838
3839
/*------------------------------------------------------------------------------
3840
 * PCE-ID OBJECT
3841
 *------------------------------------------------------------------------------*/
3842
2
#define OBJ_PCE_ID_IPV4_LEN   4
3843
2
#define OBJ_PCE_ID_IPV6_LEN  16
3844
3845
static void
3846
dissect_pcep_obj_pce_id(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type)
3847
3
{
3848
3
    switch (obj_type)
3849
3
    {
3850
1
        case PCEP_OBJ_PCE_ID_IPv4:
3851
1
            if (obj_length != OBJ_HDR_LEN + OBJ_PCE_ID_IPV4_LEN) {
3852
1
                proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3853
1
                                             tvb, offset2, obj_length,
3854
1
                                             "Bad IPv4 PCE-ID object length %u, should be %u",
3855
1
                                             obj_length, OBJ_HDR_LEN + OBJ_PCE_ID_IPV4_LEN);
3856
1
                return;
3857
1
            }
3858
0
            proto_tree_add_item(pcep_object_tree, hf_pcep_obj_pce_id_ipv4, tvb, offset2, 4, ENC_BIG_ENDIAN);
3859
0
            break;
3860
3861
1
        case PCEP_OBJ_PCE_ID_IPv6:
3862
1
            if (obj_length != OBJ_HDR_LEN + OBJ_PCE_ID_IPV6_LEN) {
3863
1
                proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3864
1
                                             tvb, offset2, obj_length,
3865
1
                                             "Bad IPv6 PCE-ID object length %u, should be %u",
3866
1
                                             obj_length, OBJ_HDR_LEN + OBJ_PCE_ID_IPV6_LEN);
3867
1
                return;
3868
1
            }
3869
0
            proto_tree_add_item(pcep_object_tree, hf_pcep_obj_pce_id_ipv6, tvb, offset2, 16, ENC_NA);
3870
0
            break;
3871
3872
1
        default:
3873
1
            proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_non_defined_subobject,
3874
1
                                         tvb, offset2, obj_length - OBJ_HDR_LEN,
3875
1
                                         "UNKNOWN Type Object (%u)", obj_type);
3876
1
            break;
3877
3
    }
3878
3
}
3879
3880
/*------------------------------------------------------------------------------
3881
 * PROC-TIME OBJECT
3882
 *------------------------------------------------------------------------------*/
3883
6
#define OBJ_PROC_TIME_LEN 24
3884
3885
static void
3886
dissect_pcep_obj_proc_time(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
3887
3
{
3888
3
    proto_item *ti;
3889
3
    proto_tree *proc_time_flags;
3890
3891
3
    if (obj_length != OBJ_HDR_LEN + OBJ_PROC_TIME_LEN) {
3892
3
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3893
3
                                     tvb, offset2, obj_length,
3894
3
                                     "Bad PROC-TIME object length %u, should be %u",
3895
3
                                     obj_length, OBJ_HDR_LEN + OBJ_PROC_TIME_LEN);
3896
3
        return;
3897
3
    }
3898
3899
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_obj_proc_time_reserved, tvb, offset2, 2, ENC_BIG_ENDIAN);
3900
0
    ti = proto_tree_add_item(pcep_object_tree, hf_pcep_obj_proc_time_flags, tvb, offset2 + 2, 2, ENC_BIG_ENDIAN);
3901
0
    proc_time_flags = proto_item_add_subtree(ti, ett_pcep_obj_proc_time);
3902
0
    proto_tree_add_item(proc_time_flags,  hf_pcep_obj_proc_time_flags_reserved, tvb, offset2 +  2, 2, ENC_BIG_ENDIAN);
3903
0
    proto_tree_add_item(proc_time_flags,  hf_pcep_obj_proc_time_flags_e,        tvb, offset2 +  2, 2, ENC_BIG_ENDIAN);
3904
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_obj_proc_time_cur_proc_time,  tvb, offset2 +  4, 4, ENC_BIG_ENDIAN);
3905
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_obj_proc_time_min_proc_time,  tvb, offset2 +  8, 4, ENC_BIG_ENDIAN);
3906
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_obj_proc_time_max_proc_time,  tvb, offset2 + 12, 4, ENC_BIG_ENDIAN);
3907
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_obj_proc_time_ave_proc_time,  tvb, offset2 + 16, 4, ENC_BIG_ENDIAN);
3908
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_obj_proc_time_var_proc_time,  tvb, offset2 + 20, 4, ENC_BIG_ENDIAN);
3909
0
}
3910
3911
/*------------------------------------------------------------------------------
3912
 * OVERLOAD OBJECT
3913
 *------------------------------------------------------------------------------*/
3914
2
#define OBJ_OVERLOAD_LEN 4
3915
3916
static void
3917
dissect_pcep_obj_overload(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
3918
1
{
3919
1
    if (obj_length != OBJ_HDR_LEN + OBJ_OVERLOAD_LEN) {
3920
1
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3921
1
                                     tvb, offset2, obj_length,
3922
1
                                     "Bad OVERLOAD object length %u, should be %u",
3923
1
                                     obj_length, OBJ_HDR_LEN + OBJ_OVERLOAD_LEN);
3924
1
        return;
3925
1
    }
3926
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_obj_overload_flags,    tvb, offset2,     1, ENC_NA);
3927
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_obj_overload_reserved, tvb, offset2 + 1, 1, ENC_NA);
3928
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_obj_overload_duration, tvb, offset2 + 2, 2, ENC_BIG_ENDIAN);
3929
0
}
3930
3931
/*------------------------------------------------------------------------------
3932
* UNREACH-DESTINATION OBJECT
3933
*-----------------------------------------------------------------------------*/
3934
static void
3935
dissect_pcep_obj_unreach_destination(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type)
3936
13
{
3937
13
    int address_length = 4;
3938
3939
13
    int body_obj_len = obj_length-OBJ_HDR_LEN;
3940
3941
13
    switch (obj_type)
3942
13
    {
3943
6
        case IPv4:
3944
6
            address_length = 4;
3945
6
            break;
3946
4
        case IPv6:
3947
4
            address_length = 16;
3948
4
            break;
3949
13
    }
3950
3951
19.8k
    while (body_obj_len > 0) {
3952
19.8k
        switch (obj_type) {
3953
236
            case IPv4:
3954
236
                if (body_obj_len < address_length) {
3955
0
                    proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3956
0
                                                 tvb, offset2, body_obj_len,
3957
0
                                                 "Bad UNREACH-DESTINATION object IPv4 address length %u, should be %u",
3958
0
                                                 body_obj_len, address_length);
3959
0
                    return;
3960
0
                }
3961
236
                proto_tree_add_item(pcep_object_tree, hf_pcep_unreach_destination_obj_ipv4_address,
3962
236
                                    tvb, offset2, address_length, ENC_BIG_ENDIAN);
3963
236
                break;
3964
9
            case IPv6:
3965
9
                if (body_obj_len < address_length) {
3966
0
                    proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
3967
0
                                                 tvb, offset2, body_obj_len,
3968
0
                                                 "Bad UNREACH-DESTINATION object IPv6 address length %u, should be %u",
3969
0
                                                 body_obj_len, address_length);
3970
0
                    return;
3971
0
                }
3972
9
                proto_tree_add_item(pcep_object_tree, hf_pcep_unreach_destination_obj_ipv6_address,
3973
9
                                    tvb, offset2, address_length, ENC_NA);
3974
9
                break;
3975
19.8k
        }
3976
19.8k
        offset2 += address_length;
3977
19.8k
        body_obj_len -= address_length;
3978
19.8k
    }
3979
13
}
3980
3981
/*------------------------------------------------------------------------------
3982
 * Branch Node Capability OBJECT
3983
3984
   The BNC Object has the same format as the Include Route Object (IRO) defined
3985
   in [RFC5440], except that it only supports IPv4 and IPv6 prefix sub-objects.
3986
 *------------------------------------------------------------------------------*/
3987
static void
3988
dissect_pcep_obj_branch_node_capability(proto_tree *pcep_object_tree, packet_info *pinfo,
3989
                                        tvbuff_t *tvb, int offset2, int obj_length, int obj_class, int obj_type _U_)
3990
8
{
3991
8
    uint8_t l_type;
3992
8
    uint8_t length;
3993
8
    int    type_bnco;
3994
8
    unsigned  body_obj_len;
3995
3996
8
    body_obj_len = obj_length - OBJ_HDR_LEN;
3997
3998
51
    while (body_obj_len) {
3999
51
        if (body_obj_len < 2) {
4000
0
            expert_add_info_format(pinfo, pcep_object_tree, &ei_pcep_subobject_bad_length,
4001
0
                                   "Bad Branch Node Capability Object: subobject goes past end of object");
4002
0
            break;
4003
0
        }
4004
4005
51
        l_type = tvb_get_uint8(tvb, offset2);
4006
51
        length = tvb_get_uint8(tvb, offset2+1);
4007
4008
51
        if (length < 2) {
4009
6
            expert_add_info_format(pinfo, pcep_object_tree, &ei_pcep_subobject_bad_length,
4010
6
                                   "Bad Branch Node Capability Object: subobject length %u < 2", length);
4011
6
            break;
4012
6
        }
4013
4014
45
        type_bnco = (l_type & Mask_Type);
4015
4016
45
        if (body_obj_len <length) {
4017
1
            proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
4018
1
                                         tvb, offset2, length,
4019
1
                                         "Bad Branch Node Capability Object: subobject length %u > remaining length %u",
4020
1
                                         length, body_obj_len);
4021
1
            break;
4022
1
        }
4023
4024
44
        switch (type_bnco) {
4025
1
        case PCEP_SUB_IPv4:
4026
1
            dissect_subobj_ipv4(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_branch_node_capability, length);
4027
1
            break;
4028
18
        case PCEP_SUB_IPv6:
4029
18
            dissect_subobj_ipv6(pcep_object_tree, pinfo, tvb, offset2, obj_class, ett_pcep_obj_branch_node_capability, length);
4030
18
            break;
4031
25
        default:
4032
25
            proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_non_defined_subobject,
4033
25
                                         tvb, offset2, length,
4034
25
                                         "Non defined subobject (%d)", type_bnco);
4035
25
            break;
4036
44
        }
4037
43
        offset2 += length;
4038
43
        body_obj_len -= length;
4039
43
    }
4040
8
}
4041
4042
/*------------------------------------------------------------------------------
4043
 * LSP OBJECT
4044
 *------------------------------------------------------------------------------*/
4045
14
#define OBJ_LSP_MIN_LEN 4
4046
4047
static void
4048
dissect_pcep_obj_lsp(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
4049
5
{
4050
5
    static int * const lsp_flags[] = {
4051
5
        &hf_pcep_obj_lsp_flags_d,
4052
5
        &hf_pcep_obj_lsp_flags_s,
4053
5
        &hf_pcep_obj_lsp_flags_r,
4054
5
        &hf_pcep_obj_lsp_flags_a,
4055
5
        &hf_pcep_obj_lsp_flags_o,
4056
5
        &hf_pcep_obj_lsp_flags_c,
4057
5
        &hf_pcep_obj_lsp_flags_reserved,
4058
5
        NULL
4059
5
    };
4060
4061
5
    if (obj_length < OBJ_HDR_LEN + OBJ_LSP_MIN_LEN) {
4062
1
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
4063
1
                                     tvb, offset2, obj_length,
4064
1
                                     "Bad LSP object length %u, should >= %u",
4065
1
                                     obj_length, OBJ_HDR_LEN + OBJ_LSP_MIN_LEN);
4066
1
        return;
4067
1
    }
4068
4069
4
    proto_tree_add_item(pcep_object_tree, hf_pcep_obj_lsp_plsp_id, tvb, offset2, 3, ENC_BIG_ENDIAN);
4070
4
    proto_tree_add_bitmask(pcep_object_tree,
4071
4
                           tvb,
4072
4
                           offset2+2,
4073
4
                           hf_pcep_obj_lsp_flags,
4074
4
                           ett_pcep_obj_lsp,
4075
4
                           lsp_flags,
4076
4
                           ENC_NA);
4077
4078
    /* The object can have optional TLV(s)*/
4079
4
    offset2 += OBJ_LSP_MIN_LEN;
4080
4
    obj_length -= OBJ_HDR_LEN + OBJ_LSP_MIN_LEN;
4081
4
    dissect_pcep_tlvs(pcep_object_tree, pinfo, tvb, offset2, obj_length, ett_pcep_obj_lsp);
4082
4
}
4083
4084
/*------------------------------------------------------------------------------
4085
 * SRP OBJECT
4086
 *------------------------------------------------------------------------------*/
4087
29
#define OBJ_SRP_MIN_LEN 8
4088
4089
static void
4090
dissect_pcep_obj_srp(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
4091
10
{
4092
10
    proto_item *ti;
4093
10
    proto_tree *srp_flags;
4094
4095
10
    if (obj_length < OBJ_HDR_LEN + OBJ_SRP_MIN_LEN) {
4096
1
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
4097
1
                                     tvb, offset2, obj_length,
4098
1
                                     "Bad SRP object length %u, should >= %u",
4099
1
                                     obj_length, OBJ_HDR_LEN + OBJ_SRP_MIN_LEN);
4100
1
        return;
4101
1
    }
4102
9
    ti = proto_tree_add_item(pcep_object_tree, hf_pcep_obj_srp_flags, tvb, offset2, 4, ENC_BIG_ENDIAN);
4103
9
    srp_flags = proto_item_add_subtree(ti, ett_pcep_obj_srp);
4104
9
    proto_tree_add_item(srp_flags, hf_pcep_obj_srp_flags_r, tvb, offset2, 4, ENC_BIG_ENDIAN);
4105
9
    proto_tree_add_item(pcep_object_tree, hf_pcep_obj_srp_id_number, tvb, offset2 + 4, 4, ENC_BIG_ENDIAN);
4106
4107
    /*The object can have optional TLV(s)*/
4108
9
    offset2 += OBJ_SRP_MIN_LEN;
4109
9
    obj_length -= OBJ_HDR_LEN + OBJ_SRP_MIN_LEN;
4110
9
    dissect_pcep_tlvs(pcep_object_tree, pinfo, tvb, offset2, obj_length, ett_pcep_obj_srp);
4111
9
}
4112
4113
/*------------------------------------------------------------------------------
4114
 * VENDOR-INFORMATION OBJECT
4115
 *------------------------------------------------------------------------------*/
4116
1
#define OBJ_VENDOR_INFORMATION_MIN_LEN 4
4117
4118
static void
4119
dissect_pcep_obj_vendor_information(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2,
4120
1
                                    int obj_length, int obj_class _U_, int obj_type _U_) {
4121
4122
1
    if (obj_length < OBJ_HDR_LEN + OBJ_VENDOR_INFORMATION_MIN_LEN) {
4123
0
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
4124
0
                                     tvb, offset2, obj_length,
4125
0
                                     "Bad VENDOR-INFORMATION object length %u, should >= %u",
4126
0
                                     obj_length, OBJ_HDR_LEN + OBJ_VENDOR_INFORMATION_MIN_LEN);
4127
0
        return;
4128
0
    }
4129
4130
1
    proto_tree_add_item(pcep_object_tree, hf_pcep_enterprise_number, tvb, offset2, 4, ENC_BIG_ENDIAN);
4131
1
    proto_tree_add_item(pcep_object_tree, hf_pcep_enterprise_specific_info, tvb, offset2 + 4,
4132
1
                        obj_length - OBJ_HDR_LEN - 4, ENC_NA);
4133
1
}
4134
4135
/*------------------------------------------------------------------------------
4136
 * BU OBJECT
4137
 *------------------------------------------------------------------------------*/
4138
2
#define OBJ_BU_LEN 8 /* The BU object body has a fixed length of 8 bytes */
4139
4140
static void
4141
dissect_pcep_obj_bu(proto_tree *pcep_object_tree, packet_info *pinfo, tvbuff_t *tvb, int offset2,
4142
1
                                    int obj_length, int obj_class _U_, int obj_type _U_) {
4143
4144
1
    if (obj_length != OBJ_HDR_LEN + OBJ_BU_LEN) {
4145
1
        proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_subobject_bad_length,
4146
1
                                     tvb, offset2, obj_length,
4147
1
                                     "Bad BU object length %u, should be %u",
4148
1
                                     obj_length, OBJ_HDR_LEN + OBJ_BU_LEN);
4149
1
        return;
4150
1
    }
4151
4152
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_bu_reserved,    tvb, offset2,   3, ENC_BIG_ENDIAN);
4153
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_bu_butype,      tvb, offset2+3, 1, ENC_BIG_ENDIAN);
4154
0
    proto_tree_add_item(pcep_object_tree, hf_pcep_bu_utilization, tvb, offset2+4, 4, ENC_BIG_ENDIAN);
4155
0
}
4156
4157
/*----------------------------------------------------------------------------
4158
 * ASSOCIATION OBJECT
4159
 *----------------------------------------------------------------------------*/
4160
0
#define ASSOCIATION_OBJ_v4_MIN_LEN 12
4161
4
#define ASSOCIATION_OBJ_v6_MIN_LEN 24
4162
static void
4163
dissect_pcep_association_obj(proto_tree *pcep_object_tree, packet_info *pinfo,
4164
                             tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type)
4165
3
{
4166
3
    proto_tree *pcep_association_flags = NULL;
4167
3
    proto_item *ti = NULL;
4168
3
    uint16_t association_type;
4169
4170
    /* object length sanity checks */
4171
3
    if ((obj_type == 1) &&
4172
0
        (obj_length < OBJ_HDR_LEN + ASSOCIATION_OBJ_v4_MIN_LEN)) {
4173
0
        proto_tree_add_expert_format(pcep_object_tree, pinfo,
4174
0
                                     &ei_pcep_subobject_bad_length,
4175
0
                                     tvb, offset2, obj_length,
4176
0
                                     "Bad ASSOCIATION IPv4 object length %u"
4177
0
                                     ", should be >= %u",
4178
0
                                     obj_length,
4179
0
                                     OBJ_HDR_LEN + ASSOCIATION_OBJ_v4_MIN_LEN);
4180
0
        return;
4181
0
    }
4182
3
    if ((obj_type == 2) &&
4183
2
        (obj_length < OBJ_HDR_LEN + ASSOCIATION_OBJ_v6_MIN_LEN)) {
4184
0
        proto_tree_add_expert_format(pcep_object_tree, pinfo,
4185
0
                                     &ei_pcep_subobject_bad_length,
4186
0
                                     tvb, offset2, obj_length,
4187
0
                                     "Bad ASSOCIATION IPv6 object length %u"
4188
0
                                     ", should be >= %u",
4189
0
                                     obj_length,
4190
0
                                     OBJ_HDR_LEN + ASSOCIATION_OBJ_v4_MIN_LEN);
4191
0
        return;
4192
0
    }
4193
4194
3
    proto_tree_add_item(pcep_object_tree, hf_pcep_association_reserved,
4195
3
                        tvb, offset2, 2, ENC_BIG_ENDIAN);
4196
3
    offset2 += 2; /* consume reserved bytes */
4197
3
    ti = proto_tree_add_item(pcep_object_tree, hf_pcep_association_flags,
4198
3
                             tvb, offset2, 2, ENC_BIG_ENDIAN);
4199
3
    pcep_association_flags =
4200
3
        proto_item_add_subtree(ti, ett_pcep_obj_association);
4201
3
    proto_tree_add_item(pcep_association_flags, hf_pcep_association_flags_r,
4202
3
                        tvb, offset2, 2, ENC_BIG_ENDIAN);
4203
3
    offset2 += 2; /* consume flags */
4204
3
    proto_tree_add_item(pcep_object_tree, hf_pcep_association_type,
4205
3
                        tvb, offset2, 2, ENC_BIG_ENDIAN);
4206
3
    association_type = tvb_get_ntohs(tvb, offset2);
4207
3
    offset2 += 2; /* consume association type */
4208
3
    proto_tree_add_item(pcep_object_tree, hf_pcep_association_id,
4209
3
                        tvb, offset2, 2, ENC_BIG_ENDIAN);
4210
3
    offset2 += 2; /* consume association identifier */
4211
3
    switch (obj_type) {
4212
0
        case 1:
4213
0
            proto_tree_add_item(pcep_object_tree,
4214
0
                                hf_pcep_association_source_ipv4,
4215
0
                                tvb, offset2, 4, ENC_BIG_ENDIAN);
4216
0
            offset2 += 4; /* consume association source */
4217
0
            obj_length -= OBJ_HDR_LEN + ASSOCIATION_OBJ_v4_MIN_LEN;
4218
0
            break;
4219
2
        case 2:
4220
2
            proto_tree_add_item(pcep_object_tree,
4221
2
                                hf_pcep_association_source_ipv6,
4222
2
                                tvb, offset2, 16, ENC_NA);
4223
2
            offset2 += 16; /* consume association source */
4224
2
            obj_length -= OBJ_HDR_LEN + ASSOCIATION_OBJ_v6_MIN_LEN;
4225
2
            break;
4226
1
        default:
4227
1
            proto_tree_add_expert_format(pcep_object_tree, pinfo,
4228
1
                                         &ei_pcep_non_defined_subobject,
4229
1
                                         tvb, offset2, obj_length - OBJ_HDR_LEN,
4230
1
                                         "Unknown Association Type (%u)", obj_type);
4231
1
            return;
4232
3
    }
4233
4234
    /* The ASSOCIATION object can have optional TLV(s) */
4235
    /* The EXTENDED_ASSOCIATION_ID TLV is scoped to the ASSOCIATION TYPE*/
4236
2
    dissect_pcep_tlvs_with_scope(pcep_object_tree, pinfo, tvb,
4237
2
                      offset2, obj_length, ett_pcep_obj_association,association_type);
4238
2
}
4239
4240
/*----------------------------------------------------------------------------
4241
 * PATH-ATTRIB OBJECT
4242
 *----------------------------------------------------------------------------*/
4243
14
#define OBJ_PATH_ATTRIB_MIN_LEN 8
4244
static void
4245
dissect_pcep_obj_path_attrib(proto_tree *pcep_object_tree, packet_info *pinfo,
4246
                             tvbuff_t *tvb, int offset2, int obj_length, int obj_class _U_, int obj_type _U_)
4247
5
{
4248
5
    static int * const path_attrib_flags[] = {
4249
5
        &hf_pcep_obj_path_attrib_flags_o,
4250
5
        &hf_pcep_obj_path_attrib_flags_r,
4251
5
        &hf_pcep_obj_path_attrib_flags_reserved,
4252
5
        NULL
4253
5
    };
4254
4255
5
    if (obj_length < OBJ_HDR_LEN + OBJ_PATH_ATTRIB_MIN_LEN) {
4256
1
        proto_tree_add_expert_format(pcep_object_tree, pinfo,
4257
1
                                     &ei_pcep_subobject_bad_length,
4258
1
                                     tvb, offset2, obj_length,
4259
1
                                     "Bad PATH_ATTRIB object length %u, should be >= %u",
4260
1
                                     obj_length,
4261
1
                                     OBJ_HDR_LEN + OBJ_PATH_ATTRIB_MIN_LEN);
4262
1
        return;
4263
1
    }
4264
4265
4
    proto_tree_add_bitmask(pcep_object_tree,
4266
4
                           tvb,
4267
4
                           offset2,
4268
4
                           hf_pcep_obj_path_attrib_flags,
4269
4
                           ett_pcep_obj_path_attrib,
4270
4
                           path_attrib_flags,
4271
4
                           ENC_NA);
4272
4
    proto_tree_add_item(pcep_object_tree, hf_pcep_obj_path_attrib_path_id, tvb, offset2 + 4, 4, ENC_BIG_ENDIAN);
4273
4274
    /* The PATH_ATTRIB object can have optional TLV(s) */
4275
4
    offset2 += OBJ_PATH_ATTRIB_MIN_LEN;
4276
4
    obj_length -= OBJ_HDR_LEN + OBJ_PATH_ATTRIB_MIN_LEN;
4277
4
    dissect_pcep_tlvs(pcep_object_tree, pinfo, tvb, offset2, obj_length, ett_pcep_obj_path_attrib);
4278
4
}
4279
4280
/*------------------------------------------------------------------------------*/
4281
/* Dissect in Objects */
4282
/*------------------------------------------------------------------------------*/
4283
typedef struct {
4284
    int *hf_outer;
4285
    int *hf_inner;
4286
    int *ett;
4287
    pcep_obj_dissector_t *obj_func;
4288
} pcep_lut_t;
4289
4290
static void
4291
dissect_pcep_obj_tree(proto_tree *pcep_tree, packet_info *pinfo, tvbuff_t *tvb, int len, int offset, int msg_length)
4292
309
{
4293
309
    uint8_t     obj_class;
4294
309
    uint8_t     ot_res_p_i;
4295
309
    uint16_t    obj_length;
4296
309
    int         type;
4297
309
    proto_tree *pcep_object_tree;
4298
309
    proto_item *pcep_object_item;
4299
4300
309
    static int * const pcep_hdr_obj_flags[] = {
4301
309
        &hf_pcep_hdr_obj_flags_i,
4302
309
        &hf_pcep_hdr_obj_flags_p,
4303
309
        &hf_pcep_hdr_obj_flags_reserved,
4304
309
        NULL
4305
309
    };
4306
4307
    /* Lookup table for handling objects. Meant to reduce copy-pasting
4308
     * and the likelihood of subtle errors happening for some objects and not
4309
     * others caused by tpyos. Index number is Object-Class
4310
     */
4311
309
    static const pcep_lut_t obj_lut[] = {
4312
309
        /*  0 is reserved */ { NULL, NULL, NULL, NULL },
4313
309
        /*  1 */ { &hf_PCEPF_OBJ_OPEN,                   &hf_pcep_obj_open_type,                    &ett_pcep_obj_open,                 dissect_pcep_open_obj                       },
4314
309
        /*  2 */ { &hf_PCEPF_OBJ_RP,                     &hf_pcep_obj_rp_type,                      &ett_pcep_obj_request_parameters,   dissect_pcep_rp_obj                         },
4315
309
        /*  3 */ { &hf_PCEPF_OBJ_NO_PATH,                &hf_pcep_obj_no_path_type,                 &ett_pcep_obj_no_path,              dissect_pcep_no_path_obj                    },
4316
309
        /*  4 */ { &hf_PCEPF_OBJ_END_POINT,              &hf_pcep_obj_end_point_type,               &ett_pcep_obj_end_point,            dissect_pcep_end_point_obj                  },
4317
309
        /*  5 */ { &hf_PCEPF_OBJ_BANDWIDTH,              &hf_pcep_obj_bandwidth_type,               &ett_pcep_obj_bandwidth,            dissect_pcep_bandwidth_obj                  },
4318
309
        /*  6 */ { &hf_PCEPF_OBJ_METRIC,                 &hf_pcep_obj_metric_type,                  &ett_pcep_obj_metric,               dissect_pcep_metric_obj                     },
4319
309
        /*  7 */ { &hf_PCEPF_OBJ_EXPLICIT_ROUTE,         &hf_pcep_obj_explicit_route_type,          &ett_pcep_obj_explicit_route,       dissect_pcep_explicit_route_obj             },
4320
309
        /*  8 */ { &hf_PCEPF_OBJ_RECORD_ROUTE,           &hf_pcep_obj_record_route_type,            &ett_pcep_obj_record_route,         dissect_pcep_record_route_obj               },
4321
309
        /*  9 */ { &hf_PCEPF_OBJ_LSPA,                   &hf_pcep_obj_lspa_type,                    &ett_pcep_obj_lspa,                 dissect_pcep_lspa_obj                       },
4322
309
        /* 10 */ { &hf_PCEPF_OBJ_IRO,                    &hf_pcep_obj_iro_type,                     &ett_pcep_obj_iro,                  dissect_pcep_iro_obj                        },
4323
309
        /* 11 */ { &hf_PCEPF_OBJ_SVEC,                   &hf_pcep_obj_svec_type,                    &ett_pcep_obj_svec,                 dissect_pcep_svec_obj                       },
4324
309
        /* 12 */ { &hf_PCEPF_OBJ_NOTIFICATION,           &hf_pcep_obj_notification_type,            &ett_pcep_obj_notification,         dissect_pcep_notification_obj               },
4325
309
        /* 13 */ { &hf_PCEPF_OBJ_PCEP_ERROR,             &hf_pcep_obj_pcep_error_type,              &ett_pcep_obj_error,                dissect_pcep_error_obj                      },
4326
309
        /* 14 */ { &hf_PCEPF_OBJ_LOAD_BALANCING,         &hf_pcep_obj_load_balancing_type,          &ett_pcep_obj_load_balancing,       dissect_pcep_balancing_obj                  },
4327
309
        /* 15 */ { &hf_PCEPF_OBJ_CLOSE,                  &hf_pcep_obj_close_type,                   &ett_pcep_obj_close,                dissect_pcep_close_obj                      },
4328
309
        /* 16 */ { &hf_PCEPF_OBJ_PATH_KEY,               &hf_pcep_obj_path_key_type,                &ett_pcep_obj_path_key,             dissect_pcep_path_key_obj                   },
4329
309
        /* 17 */ { &hf_PCEPF_OBJ_XRO,                    &hf_pcep_obj_xro_type,                     &ett_pcep_obj_xro,                  dissect_pcep_xro_obj                        },
4330
309
        /* 18 is unassigned */ { NULL, NULL, NULL, NULL },
4331
309
        /* 19 */ { &hf_PCEPF_OBJ_MONITORING,             &hf_pcep_obj_monitoring_type,              &ett_pcep_obj_monitoring,           dissect_pcep_obj_monitoring                 },
4332
309
        /* 20 */ { &hf_PCEPF_OBJ_PCC_ID_REQ,             &hf_pcep_obj_pcc_id_req_type,              &ett_pcep_obj_pcc_id_req,           dissect_pcep_obj_pcc_id_req                 },
4333
309
        /* 21 */ { &hf_PCEPF_OBJ_OF,                     &hf_pcep_obj_of_type,                      &ett_pcep_obj_of,                   dissect_pcep_of_obj                         },
4334
309
        /* 22 */ { &hf_PCEPF_OBJ_CLASSTYPE,              &hf_pcep_obj_classtype,                    &ett_pcep_obj_classtype,            NULL /* XXX */                              },
4335
309
        /* 23 is unassigned */ { NULL, NULL, NULL, NULL },
4336
309
        /* 24 */ { &hf_PCEPF_OBJ_GLOBAL_CONSTRAINTS,     &hf_pcep_obj_global_constraints,           &ett_pcep_obj_global_constraints,   NULL /* XXX */                              },
4337
309
        /* 25 */ { &hf_PCEPF_OBJ_PCE_ID,                 &hf_pcep_obj_pce_id_type,                  &ett_pcep_obj_pce_id,               dissect_pcep_obj_pce_id                     },
4338
309
        /* 26 */ { &hf_PCEPF_OBJ_PROC_TIME,              &hf_pcep_obj_proc_time_type,               &ett_pcep_obj_proc_time,            dissect_pcep_obj_proc_time                  },
4339
309
        /* 27 */ { &hf_PCEPF_OBJ_OVERLOAD,               &hf_pcep_obj_overload_type,                &ett_pcep_obj_overload,             dissect_pcep_obj_overload                   },
4340
309
        /* 28 */ { &hf_PCEPF_OBJ_UNREACH_DESTINATION,    &hf_pcep_obj_unreach_destination_type,     &ett_pcep_obj_unreach_destination,  dissect_pcep_obj_unreach_destination        },
4341
309
        /* 29 */ { &hf_PCEPF_OBJ_SERO,                   &hf_pcep_obj_sero_type,                    &ett_pcep_obj_sero,                 dissect_pcep_explicit_route_obj             },
4342
309
        /* 30 */ { &hf_PCEPF_OBJ_SRRO,                   &hf_pcep_obj_srro_type,                    &ett_pcep_obj_srro,                 dissect_pcep_record_route_obj               },
4343
309
        /* 31 */ { &hf_PCEPF_OBJ_BRANCH_NODE_CAPABILITY, &hf_pcep_obj_branch_node_capability_type,  &ett_pcep_obj_branch_node_capability,  dissect_pcep_obj_branch_node_capability  },
4344
309
        /* 32 */ { &hf_PCEPF_OBJ_LSP,                    &hf_pcep_obj_lsp_type,                     &ett_pcep_obj_lsp,                  dissect_pcep_obj_lsp                        },
4345
309
        /* 33 */ { &hf_PCEPF_OBJ_SRP,                    &hf_pcep_obj_srp_type,                     &ett_pcep_obj_srp,                  dissect_pcep_obj_srp                        },
4346
309
        /* 34 */ { &hf_PCEPF_OBJ_VENDOR_INFORMATION,     &hf_pcep_obj_vendor_information_type,      &ett_pcep_obj_vendor_information,   dissect_pcep_obj_vendor_information         },
4347
309
        /* 35 */ { &hf_PCEPF_OBJ_BU,                     &hf_pcep_obj_bu_type,                      &ett_pcep_obj_bu,                   dissect_pcep_obj_bu                         },
4348
309
        /* 36 */ { &hf_PCEPF_OBJ_INTER_LAYER,            &hf_pcep_obj_inter_layer_type,             &ett_pcep_obj_inter_layer,          NULL /* XXX */                              },
4349
309
        /* 37 */ { &hf_PCEPF_OBJ_SWITCH_LAYER,           &hf_pcep_obj_switch_layer_type,            &ett_pcep_obj_switch_layer,         NULL /* XXX */                              },
4350
309
        /* 38 */ { &hf_PCEPF_OBJ_REQ_ADAP_CAP,           &hf_pcep_obj_req_adap_cap_type,            &ett_pcep_obj_req_adap_cap,         NULL /* XXX */                              },
4351
309
        /* 39 */ { &hf_PCEPF_OBJ_SERVER_IND,             &hf_pcep_obj_server_ind_type,              &ett_pcep_obj_server_ind,           NULL /* XXX */                              },
4352
309
        /* 40 */ { &hf_PCEPF_OBJ_ASSOCIATION,            &hf_pcep_obj_association_type,             &ett_pcep_obj_association,          dissect_pcep_association_obj                },
4353
309
        /* 41 */ { &hf_PCEPF_OBJ_S2LS,                   &hf_pcep_obj_s2ls_type,                    &ett_pcep_obj_s2ls,                 NULL /* XXX */                              },
4354
309
        /* 42 */ { &hf_PCEPF_OBJ_WA,                     &hf_pcep_obj_wa_type,                      &ett_pcep_obj_wa,                   NULL /* XXX */                              },
4355
309
        /* 43 */ { &hf_PCEPF_OBJ_FLOWSPEC,               &hf_pcep_obj_flowspec_type,                &ett_pcep_obj_flowspec,             NULL /* XXX */                              },
4356
309
        /* 44 */ { &hf_PCEPF_OBJ_CCI_TYPE,               &hf_pcep_obj_cci_type,                     &ett_pcep_obj_cci_type,             NULL /* XXX */                              },
4357
309
        /* 45 */ { &hf_PCEPF_OBJ_PATH_ATTRIB,            &hf_pcep_obj_path_attrib_type,             &ett_pcep_obj_path_attrib,          dissect_pcep_obj_path_attrib                },
4358
309
    };
4359
309
    pcep_lut_t lut_item;
4360
4361
660
    while (len < msg_length) {
4362
366
        obj_class = tvb_get_uint8(tvb, offset);
4363
366
        if (obj_class > 0 && obj_class < array_length(obj_lut)) {
4364
292
            lut_item = obj_lut[obj_class];
4365
292
        }
4366
74
        else {
4367
74
            lut_item = obj_lut[0];
4368
74
        }
4369
366
        if (lut_item.hf_outer != NULL) {
4370
291
            pcep_object_item = proto_tree_add_item(pcep_tree, *lut_item.hf_outer, tvb, offset, -1, ENC_NA);
4371
291
            pcep_object_tree = proto_item_add_subtree(pcep_object_item, *lut_item.ett);
4372
291
            proto_tree_add_uint(pcep_object_tree, hf_PCEPF_OBJECT_CLASS, tvb, offset, 1, obj_class);
4373
291
            proto_tree_add_item(pcep_object_tree, *lut_item.hf_inner, tvb, offset+1, 1, ENC_NA);
4374
291
        }
4375
75
        else {
4376
75
            pcep_object_item = proto_tree_add_item(pcep_tree, hf_PCEPF_OBJ_UNKNOWN_TYPE, tvb, offset, -1, ENC_NA);
4377
75
            pcep_object_tree = proto_item_add_subtree(pcep_object_item, ett_pcep_obj_unknown);
4378
75
            proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_non_defined_object,
4379
75
                                         tvb, offset, -1,
4380
75
                                         "Unknown object (%u)", obj_class);
4381
75
            proto_tree_add_uint(pcep_object_tree, hf_PCEPF_OBJECT_CLASS, tvb, offset, 1, obj_class);
4382
75
            proto_tree_add_item(pcep_object_tree, hf_pcep_object_type, tvb, offset+1, 1, ENC_NA);
4383
75
        }
4384
366
        ot_res_p_i = tvb_get_uint8(tvb, offset+1);
4385
366
        type = (ot_res_p_i & MASK_OBJ_TYPE)>>4;
4386
4387
366
        proto_tree_add_bitmask(pcep_object_tree, tvb, offset+1, hf_pcep_hdr_obj_flags, ett_pcep_hdr, pcep_hdr_obj_flags, ENC_NA);
4388
4389
366
        proto_tree_add_item(pcep_object_tree, hf_pcep_object_length, tvb, offset+2, 2, ENC_BIG_ENDIAN);
4390
4391
366
        obj_length = tvb_get_ntohs(tvb, offset+2);
4392
366
        proto_item_set_len(pcep_object_item, obj_length);
4393
366
        if (obj_length < 4) {
4394
15
            expert_add_info_format(pinfo, pcep_object_tree, &ei_pcep_object_length,
4395
15
                                   "Object Length: %u (bogus, must be >= 4)", obj_length);
4396
15
            break;
4397
15
        }
4398
4399
351
        if (lut_item.hf_outer != NULL && lut_item.obj_func != NULL) {
4400
272
            lut_item.obj_func(pcep_object_tree, pinfo, tvb, offset+4, obj_length, obj_class, type);
4401
272
        }
4402
79
        else {
4403
79
            proto_tree_add_expert_format(pcep_object_tree, pinfo, &ei_pcep_pcep_object_body_non_defined,
4404
79
                                         tvb, offset+4, obj_length-OBJ_HDR_LEN,
4405
79
                                         "PCEP Object BODY non defined (%u)", type);
4406
79
        }
4407
4408
351
        offset += obj_length;
4409
351
        len    += obj_length;
4410
351
    }
4411
309
}
4412
4413
4414
/*------------------------------------------------------------------------------
4415
 * Dissect a single PCEP message in a tree
4416
 *------------------------------------------------------------------------------*/
4417
static void
4418
dissect_pcep_msg_tree(tvbuff_t *tvb, proto_tree *tree, unsigned tree_mode, packet_info *pinfo)
4419
309
{
4420
309
    proto_tree *pcep_tree, *pcep_header_tree, *pcep_header_msg_flags;
4421
309
    proto_item *ti;
4422
4423
309
    int         offset = 0;
4424
309
    int         len    = 0;
4425
309
    uint8_t     message_type;
4426
309
    uint16_t    msg_length;
4427
4428
309
    message_type = tvb_get_uint8(tvb, 1);
4429
309
    msg_length = tvb_get_ntohs(tvb, 2);
4430
4431
309
    col_append_str(pinfo->cinfo, COL_INFO, val_to_str(pinfo->pool, message_type, message_type_vals, "Unknown Message (%u). "));
4432
4433
309
    ti = proto_tree_add_item(tree, proto_pcep, tvb, offset, msg_length, ENC_NA);
4434
309
    pcep_tree = proto_item_add_subtree(ti, tree_mode);
4435
4436
309
    pcep_header_tree = proto_tree_add_subtree_format(pcep_tree, tvb, offset, 4, ett_pcep_hdr, NULL,
4437
309
                    "%s Header", val_to_str(pinfo->pool, message_type, message_type_vals, "Unknown Message (%u). "));
4438
4439
309
    proto_tree_add_item(pcep_header_tree, hf_pcep_version, tvb, offset, 1, ENC_NA);
4440
4441
309
    ti = proto_tree_add_item(pcep_header_tree, hf_pcep_flags, tvb, offset, 1, ENC_NA);
4442
309
    pcep_header_msg_flags = proto_item_add_subtree(ti, ett_pcep_hdr);
4443
309
    proto_tree_add_item(pcep_header_msg_flags, hf_pcep_hdr_msg_flags_reserved, tvb, offset,   1, ENC_NA);
4444
309
    proto_tree_add_item(pcep_header_tree,      hf_PCEPF_MSG,                   tvb, offset+1, 1, ENC_NA);
4445
309
    proto_tree_add_item(pcep_header_tree,      hf_pcep_message_length,         tvb, offset+2, 2, ENC_BIG_ENDIAN);
4446
4447
309
    offset = 4;
4448
309
    len = 4;
4449
4450
309
    dissect_pcep_obj_tree(pcep_tree, pinfo, tvb, len, offset, msg_length);
4451
309
}
4452
4453
4454
static unsigned
4455
get_pcep_message_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset, void *data _U_)
4456
311
{
4457
311
    uint16_t plen;
4458
4459
    /* Get the length of the PCEP packet.*/
4460
311
    plen = tvb_get_ntohs(tvb, offset+2);
4461
4462
311
    return plen;
4463
311
}
4464
4465
static int
4466
dissect_pcep_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
4467
309
{
4468
    /* Set up structures needed to add the protocol subtree and manage it */
4469
309
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "PCEP");
4470
4471
    /* Clear out stuff in the info column */
4472
309
    col_clear(pinfo->cinfo, COL_INFO);
4473
4474
309
    dissect_pcep_msg_tree(tvb, tree, ett_pcep, pinfo);
4475
309
    return tvb_captured_length(tvb);
4476
309
}
4477
4478
static int
4479
dissect_pcep(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
4480
233
{
4481
233
    tcp_dissect_pdus(tvb, pinfo, tree, true, 4, get_pcep_message_len,
4482
233
                     dissect_pcep_pdu, data);
4483
233
    return tvb_captured_length(tvb);
4484
233
}
4485
4486
/*Register the protocol with wireshark*/
4487
void
4488
proto_register_pcep(void)
4489
14
{
4490
14
    static hf_register_info pcepf_info[] = {
4491
4492
        /* Message type number */
4493
14
        { &hf_PCEPF_MSG,
4494
14
          { "Message Type", "pcep.msg",
4495
14
            FT_UINT8, BASE_DEC, VALS(message_type_vals), 0x0,
4496
14
            NULL, HFILL }
4497
14
        },
4498
14
        { &hf_pcep_hdr_msg_flags_reserved,
4499
14
          { "Reserved Flags", "pcep.msg.hdr.flags.reserved",
4500
14
            FT_BOOLEAN, 8, TFS(&tfs_set_notset), PCEP_HDR_MSG_RESERVED,
4501
14
            NULL, HFILL }
4502
14
        },
4503
4504
        /*Object header*/
4505
14
        { &hf_pcep_hdr_obj_flags,
4506
14
          { "Object Header Flags", "pcep.obj.hdr.flags",
4507
14
            FT_UINT8, BASE_HEX, NULL, 0x0F,
4508
14
            NULL, HFILL }
4509
14
        },
4510
14
        { &hf_pcep_hdr_obj_flags_reserved,
4511
14
          { "Reserved Flags", "pcep.obj.hdr.flags.reserved",
4512
14
            FT_BOOLEAN, 4, TFS(&tfs_set_notset), PCEP_HDR_OBJ_RESERVED,
4513
14
            NULL, HFILL }
4514
14
        },
4515
14
        { &hf_pcep_hdr_obj_flags_p,
4516
14
          { "Processing-Rule (P)", "pcep.obj.hdr.flags.p",
4517
14
            FT_BOOLEAN, 4, TFS(&tfs_set_notset), PCEP_HDR_OBJ_P,
4518
14
            NULL, HFILL }
4519
14
        },
4520
14
        { &hf_pcep_hdr_obj_flags_i,
4521
14
          { "Ignore (I)", "pcep.obj.hdr.flags.i",
4522
14
            FT_BOOLEAN, 4, TFS(&tfs_set_notset), PCEP_HDR_OBJ_I,
4523
14
            NULL, HFILL }
4524
14
        },
4525
        /* Object class */
4526
14
        { &hf_PCEPF_OBJECT_CLASS,
4527
14
          { "Object Class", "pcep.object",
4528
14
            FT_UINT32, BASE_DEC | BASE_EXT_STRING, &pcep_class_vals_ext, 0x0,
4529
14
            NULL, HFILL }
4530
14
        },
4531
4532
        /* Object types */
4533
14
        { &hf_pcep_endpoint_p2mp_leaf,
4534
14
          { "P2MP Leaf type", "pcep.obj.endpoint.p2mp.leaf",
4535
14
            FT_UINT32, BASE_DEC, VALS(pcep_p2mp_leaf_type_vals), 0x0,
4536
14
            NULL, HFILL }
4537
14
        },
4538
14
        { &hf_PCEPF_OBJ_OPEN,
4539
14
          { "OPEN object", "pcep.obj.open",
4540
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4541
14
            NULL, HFILL }
4542
14
        },
4543
14
        { &hf_pcep_open_flags_res,
4544
14
          { "Reserved Flags", "pcep.open.flags.res",
4545
14
            FT_BOOLEAN, 8, TFS(&tfs_set_notset), PCEP_OPEN_RES,
4546
14
            NULL, HFILL }
4547
14
        },
4548
14
        { &hf_PCEPF_OBJ_RP,
4549
14
          { "RP object", "pcep.obj.rp",
4550
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4551
14
            NULL, HFILL }
4552
14
        },
4553
14
        { &hf_pcep_rp_flags_reserved,
4554
14
          { "Reserved Flags", "pcep.rp.flags.reserved",
4555
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_RP_RESERVED,
4556
14
            NULL, HFILL }
4557
14
        },
4558
14
        { &hf_pcep_rp_flags_pri,
4559
14
          { "(PRI) Priority", "pcep.rp.flags.pri",
4560
14
            FT_BOOLEAN, 24, TFS(&tfs_on_off), PCEP_RP_PRI,
4561
14
            NULL, HFILL }
4562
14
        },
4563
14
        { &hf_pcep_rp_flags_r,
4564
14
          { "(R) Reoptimization", "pcep.rp.flags.r",
4565
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_RP_R,
4566
14
            NULL, HFILL }
4567
14
        },
4568
14
        { &hf_pcep_rp_flags_b,
4569
14
          { "(B) Bi-directional", "pcep.rp.flags.b",
4570
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_RP_B,
4571
14
            NULL, HFILL }
4572
14
        },
4573
14
        { &hf_pcep_rp_flags_o,
4574
14
          { "(L) Strict/Loose", "pcep.rp.flags.o",
4575
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_RP_O,
4576
14
            NULL, HFILL }
4577
14
        },
4578
14
        { &hf_pcep_rp_flags_v,
4579
14
          { "(V) VSPT", "pcep.rp.flags.v",
4580
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_RP_V,
4581
14
            NULL, HFILL }
4582
14
        },
4583
14
        { &hf_pcep_rp_flags_s,
4584
14
          { "(S) Supply OF on response", "pcep.rp.flags.s",
4585
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_RP_S,
4586
14
            NULL, HFILL }
4587
14
        },
4588
14
        { &hf_pcep_rp_flags_p,
4589
14
          { "(P) Path Key", "pcep.rp.flags.p",
4590
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_RP_P,
4591
14
            NULL, HFILL }
4592
14
        },
4593
14
        { &hf_pcep_rp_flags_d,
4594
14
          { "(D) Report the request order", "pcep.rp.flags.d",
4595
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_RP_D,
4596
14
            NULL, HFILL }
4597
14
        },
4598
14
        { &hf_pcep_rp_flags_m,
4599
14
          { "(M) Make-before-break", "pcep.rp.flags.m",
4600
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_RP_M,
4601
14
            NULL, HFILL }
4602
14
        },
4603
14
        { &hf_pcep_rp_flags_e,
4604
14
          { "(E) ERO-compression", "pcep.rp.flags.e",
4605
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_RP_E,
4606
14
            NULL, HFILL }
4607
14
        },
4608
14
        { &hf_pcep_rp_flags_n,
4609
14
          { "(N) P2MP", "pcep.rp.flags.n",
4610
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_RP_N,
4611
14
            NULL, HFILL }
4612
14
        },
4613
14
        { &hf_pcep_rp_flags_f,
4614
14
          { "(F) Fragmentation", "pcep.rp.flags.f",
4615
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_RP_F,
4616
14
            NULL, HFILL }
4617
14
        },
4618
14
        { &hf_pcep_rp_flags_c,
4619
14
          { "(C) Core-tree computation", "pcep.rp.flags.c",
4620
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_RP_C,
4621
14
            NULL, HFILL }
4622
14
        },
4623
14
        { &hf_PCEPF_OBJ_NO_PATH,
4624
14
          { "NO-PATH object", "pcep.obj.nopath",
4625
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4626
14
            NULL, HFILL }
4627
14
        },
4628
14
        { &hf_pcep_no_path_flags_c,
4629
14
          { "C", "pcep.no.path.flags.c",
4630
14
            FT_BOOLEAN, 16, TFS(&tfs_set_notset), PCEP_NO_PATH_C,
4631
14
            NULL, HFILL }
4632
14
        },
4633
14
        { &hf_PCEPF_OBJ_END_POINT,
4634
14
          { "END-POINT object", "pcep.obj.endpoint",
4635
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4636
14
            NULL, HFILL }
4637
14
        },
4638
14
        { &hf_PCEPF_OBJ_BANDWIDTH,
4639
14
          { "BANDWIDTH object", "pcep.obj.bandwidth",
4640
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4641
14
            NULL, HFILL }
4642
14
        },
4643
14
        { &hf_PCEPF_OBJ_METRIC,
4644
14
          { "METRIC object", "pcep.obj.metric",
4645
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4646
14
            NULL, HFILL }
4647
14
        },
4648
14
        { &hf_pcep_metric_flags_c,
4649
14
          { "(C) Cost", "pcep.metric.flags.c",
4650
14
            FT_BOOLEAN, 8, TFS(&tfs_set_notset), PCEP_METRIC_C,
4651
14
            NULL, HFILL }
4652
14
        },
4653
14
        { &hf_pcep_metric_flags_b,
4654
14
          { "(B) Bound", "pcep.metric.flags.b",
4655
14
            FT_BOOLEAN, 8, TFS(&tfs_set_notset), PCEP_METRIC_B,
4656
14
            NULL, HFILL }
4657
14
        },
4658
14
        { &hf_PCEPF_OBJ_EXPLICIT_ROUTE,
4659
14
          { "EXPLICIT ROUTE object (ERO)", "pcep.obj.ero",
4660
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4661
14
            NULL, HFILL }
4662
14
        },
4663
14
        { &hf_PCEPF_OBJ_RECORD_ROUTE,
4664
14
          { "RECORD ROUTE object (RRO)", "pcep.obj.rro",
4665
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4666
14
            NULL, HFILL }
4667
14
        },
4668
14
        { &hf_PCEPF_OBJ_LSPA,
4669
14
          { "LSPA object", "pcep.obj.lspa",
4670
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4671
14
            NULL, HFILL }
4672
14
        },
4673
14
        { &hf_pcep_lspa_flags_l,
4674
14
          { "Local Protection Desired (L)", "pcep.lspa.flags.l",
4675
14
            FT_BOOLEAN, 8, TFS(&tfs_set_notset), PCEP_LSPA_L,
4676
14
            NULL, HFILL }
4677
14
        },
4678
14
        { &hf_PCEPF_OBJ_IRO,
4679
14
          { "IRO object", "pcep.obj.iro",
4680
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4681
14
            NULL, HFILL }
4682
14
        },
4683
14
        { &hf_PCEPF_OBJ_SVEC,
4684
14
          { "SVEC object", "pcep.obj.svec",
4685
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4686
14
            NULL, HFILL }
4687
14
        },
4688
4689
14
        { &hf_pcep_svec_flags_l,
4690
14
          { "Link diverse (L)", "pcep.svec.flags.l",
4691
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_SVEC_L,
4692
14
            NULL, HFILL }
4693
14
        },
4694
4695
14
        { &hf_pcep_svec_flags_n,
4696
14
          { "Node diverse (N)", "pcep.svec.flags.n",
4697
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_SVEC_N,
4698
14
            NULL, HFILL }
4699
14
        },
4700
4701
14
        { &hf_pcep_svec_flags_s,
4702
14
          { "SRLG diverse (S)", "pcep.svec.flags.s",
4703
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_SVEC_S,
4704
14
            NULL, HFILL }
4705
14
        },
4706
4707
14
        { &hf_pcep_svec_flags_d,
4708
14
          { "Link Direction Diverse (D)", "pcep.svec.flags.d",
4709
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_SVEC_D,
4710
14
            NULL, HFILL }
4711
14
        },
4712
4713
14
        { &hf_pcep_svec_flags_p,
4714
14
          { "Partial Path Diverse (P)", "pcep.svec.flags.p",
4715
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_SVEC_P,
4716
14
            NULL, HFILL }
4717
14
        },
4718
4719
14
        { &hf_PCEPF_OBJ_NOTIFICATION,
4720
14
          { "NOTIFICATION object", "pcep.obj.notification",
4721
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4722
14
            NULL, HFILL }
4723
14
        },
4724
4725
14
        { &hf_PCEPF_NOTI_TYPE,
4726
14
          { "Notification Value", "pcep.notification.value1",
4727
14
            FT_UINT8, BASE_DEC, VALS(pcep_notification_types_vals), 0x0,
4728
14
            NULL, HFILL }
4729
14
        },
4730
14
        { &hf_PCEPF_NOTI_VAL1,
4731
14
          { "Notification Type", "pcep.notification.type2",
4732
14
            FT_UINT8, BASE_DEC, VALS(pcep_notification_values1_vals), 0x0,
4733
14
            NULL, HFILL }
4734
14
        },
4735
14
        { &hf_PCEPF_NOTI_VAL2,
4736
14
          { "Notification Type", "pcep.notification.type",
4737
14
            FT_UINT8, BASE_DEC, VALS(pcep_notification_values2_vals), 0x0,
4738
14
            NULL, HFILL }
4739
14
        },
4740
4741
14
        { &hf_PCEPF_OBJ_PCEP_ERROR,
4742
14
          { "ERROR object", "pcep.obj.error",
4743
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4744
14
            NULL, HFILL }
4745
14
        },
4746
14
        { &hf_PCEPF_ERROR_TYPE,
4747
14
          { "Error-Type", "pcep.error.type",
4748
14
            FT_UINT8, BASE_DEC | BASE_EXT_STRING, &pcep_error_types_obj_vals_ext, 0x0,
4749
14
            NULL, HFILL }
4750
14
        },
4751
14
        { &hf_PCEPF_ERROR_VALUE,
4752
14
          { "Error-Value", "pcep.error.value",
4753
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
4754
14
            NULL, HFILL }
4755
14
        },
4756
14
        { &hf_PCEPF_OBJ_LOAD_BALANCING,
4757
14
          { "LOAD BALANCING object", "pcep.obj.loadbalancing",
4758
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4759
14
            NULL, HFILL }
4760
14
        },
4761
14
        { &hf_PCEPF_OBJ_CLOSE,
4762
14
          { "CLOSE object", "pcep.obj.close",
4763
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4764
14
            NULL, HFILL }
4765
14
        },
4766
14
        { &hf_PCEPF_OBJ_PATH_KEY,
4767
14
          { "PATH-KEY object", "pcep.obj.path_key",
4768
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4769
14
            NULL, HFILL }
4770
14
        },
4771
14
        { &hf_PCEPF_OBJ_XRO,
4772
14
          { "EXCLUDE ROUTE object (XRO)", "pcep.obj.xro",
4773
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4774
14
            NULL, HFILL }
4775
14
        },
4776
4777
14
        { &hf_PCEPF_OBJ_MONITORING,
4778
14
          { "MONITORING object", "pcep.obj.monitoring",
4779
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4780
14
            NULL, HFILL }
4781
14
        },
4782
14
        { &hf_pcep_obj_monitoring_flags_reserved,
4783
14
          { "Reserved Flags", "pcep.obj.monitoring.flags.reserved",
4784
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_OBJ_MONITORING_FLAGS_RESERVED,
4785
14
            NULL, HFILL }
4786
14
        },
4787
14
        { &hf_pcep_obj_monitoring_flags_l,
4788
14
          { "Liveness (L)", "pcep.obj.monitoring.flags.l",
4789
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_OBJ_MONITORING_FLAGS_L,
4790
14
            NULL, HFILL }
4791
14
        },
4792
14
        { &hf_pcep_obj_monitoring_flags_g,
4793
14
          { "General (G)", "pcep.obj.monitoring.flags.g",
4794
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_OBJ_MONITORING_FLAGS_G,
4795
14
            NULL, HFILL }
4796
14
        },
4797
14
        { &hf_pcep_obj_monitoring_flags_p,
4798
14
          { "Processing Time (P)", "pcep.obj.monitoring.flags.p",
4799
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_OBJ_MONITORING_FLAGS_P,
4800
14
            NULL, HFILL }
4801
14
        },
4802
14
        { &hf_pcep_obj_monitoring_flags_c,
4803
14
          { "Overload (C)", "pcep.obj.monitoring.flags.c",
4804
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_OBJ_MONITORING_FLAGS_C,
4805
14
            NULL, HFILL }
4806
14
        },
4807
14
        { &hf_pcep_obj_monitoring_flags_i,
4808
14
          { "Incomplete (I)", "pcep.obj.monitoring.flags.i",
4809
14
            FT_BOOLEAN, 24, TFS(&tfs_set_notset), PCEP_OBJ_MONITORING_FLAGS_I,
4810
14
            NULL, HFILL }
4811
14
        },
4812
14
        { &hf_pcep_obj_monitoring_monitoring_id_number,
4813
14
          { "Monitoring ID Number", "pcep.obj.monitoring.monidnumber",
4814
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
4815
14
            NULL, HFILL }
4816
14
        },
4817
4818
14
        { &hf_PCEPF_OBJ_PCC_ID_REQ,
4819
14
          { "PCC-ID-REQ object", "pcep.obj.pccidreq",
4820
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4821
14
            NULL, HFILL }
4822
14
        },
4823
14
        { &hf_pcep_obj_pcc_id_req_ipv4,
4824
14
          { "IPv4 address", "pcep.obj.pccidreq.ipv4",
4825
14
            FT_IPv4, BASE_NONE, NULL, 0x0,
4826
14
            NULL, HFILL }
4827
14
        },
4828
14
        { &hf_pcep_obj_pcc_id_req_ipv6,
4829
14
          { "IPv6 address", "pcep.obj.pccidreq.ipv6",
4830
14
            FT_IPv6, BASE_NONE, NULL, 0x0,
4831
14
            NULL, HFILL }
4832
14
        },
4833
4834
14
        { &hf_PCEPF_OBJ_OF,
4835
14
          { "OBJECTIVE FUNCTION object (OF)", "pcep.obj.of",
4836
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4837
14
            NULL, HFILL }
4838
14
        },
4839
4840
14
        { &hf_PCEPF_OBJ_CLASSTYPE,
4841
14
          { "CLASSTYPE object", "pcep.obj.classtype",
4842
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4843
14
            NULL, HFILL }
4844
14
        },
4845
4846
14
        { &hf_PCEPF_OBJ_GLOBAL_CONSTRAINTS,
4847
14
          { "GLOBAL-CONSTRAINTS object", "pcep.obj.global_constraints",
4848
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4849
14
            NULL, HFILL }
4850
14
        },
4851
4852
14
        { &hf_PCEPF_OBJ_PCE_ID,
4853
14
          { "PCE-ID object", "pcep.obj.pceid",
4854
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4855
14
            NULL, HFILL }
4856
14
        },
4857
14
        { &hf_pcep_obj_pce_id_ipv4,
4858
14
          { "IPv4 address", "pcep.obj.pceid.ipv4",
4859
14
            FT_IPv4, BASE_NONE, NULL, 0x0,
4860
14
            NULL, HFILL }
4861
14
        },
4862
14
        { &hf_pcep_obj_pce_id_ipv6,
4863
14
          { "IPv6 address", "pcep.obj.pceid.ipv6",
4864
14
            FT_IPv6, BASE_NONE, NULL, 0x0,
4865
14
            NULL, HFILL }
4866
14
        },
4867
4868
14
        { &hf_PCEPF_OBJ_PROC_TIME,
4869
14
          { "PROC-TIME object", "pcep.obj.proctime",
4870
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4871
14
            NULL, HFILL }
4872
14
        },
4873
14
        { &hf_pcep_obj_proc_time_flags_reserved,
4874
14
          { "Reserved Flags", "pcep.obj.proctime.flags.reserved",
4875
14
            FT_BOOLEAN, 16, TFS(&tfs_set_notset), PCEP_OBJ_PROC_TIME_FLAGS_RESERVED,
4876
14
            NULL, HFILL }
4877
14
        },
4878
14
        { &hf_pcep_obj_proc_time_flags_e,
4879
14
          { "Estimated (E)", "pcep.obj.proctime.flags.e",
4880
14
            FT_BOOLEAN, 16, TFS(&tfs_set_notset), PCEP_OBJ_PROC_TIME_FLAGS_E,
4881
14
            NULL, HFILL }
4882
14
        },
4883
14
        { &hf_pcep_obj_proc_time_cur_proc_time,
4884
14
          { "Current processing time", "pcep.obj.proctime.curproctime",
4885
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
4886
14
            NULL, HFILL }
4887
14
        },
4888
14
        { &hf_pcep_obj_proc_time_min_proc_time,
4889
14
          { "Minimum processing time", "pcep.obj.proctime.minproctime",
4890
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
4891
14
            NULL, HFILL }
4892
14
        },
4893
14
        { &hf_pcep_obj_proc_time_max_proc_time,
4894
14
          { "Maximum processing time", "pcep.obj.proctime.maxproctime",
4895
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
4896
14
            NULL, HFILL }
4897
14
        },
4898
14
        { &hf_pcep_obj_proc_time_ave_proc_time,
4899
14
          { "Average processing time", "pcep.obj.proctime.aveproctime",
4900
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
4901
14
            NULL, HFILL }
4902
14
        },
4903
14
        { &hf_pcep_obj_proc_time_var_proc_time,
4904
14
          { "Variance processing time", "pcep.obj.proctime.varproctime",
4905
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
4906
14
            NULL, HFILL }
4907
14
        },
4908
4909
14
        { &hf_PCEPF_OBJ_OVERLOAD,
4910
14
          { "OVERLOAD object", "pcep.obj.overload",
4911
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4912
14
            NULL, HFILL }
4913
14
        },
4914
14
        { &hf_pcep_obj_overload_duration,
4915
14
          { "Overload Duration", "pcep.obj.overload.duration",
4916
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
4917
14
            NULL, HFILL }
4918
14
        },
4919
4920
14
        { &hf_PCEPF_OBJ_UNREACH_DESTINATION,
4921
14
          { "UNREACH-DESTINATION object", "pcep.obj.unreach-destination",
4922
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4923
14
            NULL, HFILL }
4924
14
        },
4925
4926
14
        { &hf_pcep_unreach_destination_obj_ipv4_address,
4927
14
          { "Destination IPv4 Address", "pcep.obj.unreach-destination.ipv4-addr",
4928
14
            FT_IPv4, BASE_NONE, NULL, 0x0,
4929
14
            NULL, HFILL }
4930
14
        },
4931
4932
14
        { &hf_pcep_unreach_destination_obj_ipv6_address,
4933
14
          { "Destination IPv6 address", "pcep.obj.unreach-destination.ipv6-addr",
4934
14
            FT_IPv6, BASE_NONE, NULL, 0x0,
4935
14
            NULL, HFILL }
4936
14
        },
4937
4938
14
        { &hf_PCEPF_OBJ_SERO,
4939
14
          { "SECONDARY EXPLICIT ROUTE object (SERO)", "pcep.obj.sero",
4940
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4941
14
            NULL, HFILL }
4942
14
        },
4943
14
        { &hf_PCEPF_OBJ_SRRO,
4944
14
          { "SECONDARY RECORD ROUTE object (SRRO)", "pcep.obj.srro",
4945
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4946
14
            NULL, HFILL }
4947
14
        },
4948
4949
14
        { &hf_PCEPF_OBJ_BRANCH_NODE_CAPABILITY,
4950
14
          { "Branch Node Capability object", "pcep.obj.branch-node-capability",
4951
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4952
14
            NULL, HFILL }
4953
14
        },
4954
4955
14
        { &hf_PCEPF_OBJ_LSP,
4956
14
          { "LSP object", "pcep.obj.lsp",
4957
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4958
14
            NULL, HFILL }
4959
14
        },
4960
4961
14
        { &hf_PCEPF_OBJ_SRP,
4962
14
          { "SRP object", "pcep.obj.srp",
4963
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4964
14
            NULL, HFILL }
4965
14
        },
4966
4967
14
        { &hf_PCEPF_OBJ_VENDOR_INFORMATION,
4968
14
          { "VENDOR-INFORMATION object", "pcep.obj.vendor-information",
4969
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4970
14
            NULL, HFILL }
4971
14
        },
4972
4973
14
        { &hf_PCEPF_OBJ_BU,
4974
14
          { "BU object", "pcep.obj.bu",
4975
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4976
14
            NULL, HFILL }
4977
14
        },
4978
4979
14
        { &hf_PCEPF_OBJ_INTER_LAYER,
4980
14
          { "INTER-LAYER object", "pcep.obj.inter_layer",
4981
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4982
14
            NULL, HFILL }
4983
14
        },
4984
14
        { &hf_PCEPF_OBJ_SWITCH_LAYER,
4985
14
          { "SWITCH-LAYER object", "pcep.obj.switch_layer",
4986
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4987
14
            NULL, HFILL }
4988
14
        },
4989
14
        { &hf_PCEPF_OBJ_REQ_ADAP_CAP,
4990
14
          { "REQ-ADAP-CAP object", "pcep.obj.req_adap_cap",
4991
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4992
14
            NULL, HFILL }
4993
14
        },
4994
14
        { &hf_PCEPF_OBJ_SERVER_IND,
4995
14
          { "SERVER-INDICATION object", "pcep.obj.server_ind",
4996
14
            FT_NONE, BASE_NONE, NULL, 0x0,
4997
14
            NULL, HFILL }
4998
14
        },
4999
14
        { &hf_PCEPF_OBJ_ASSOCIATION,
5000
14
          { "ASSOCIATION object", "pcep.obj.association",
5001
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5002
14
            NULL, HFILL }
5003
14
        },
5004
14
        { &hf_PCEPF_OBJ_S2LS,
5005
14
          { "S2LS object", "pcep.obj.s2ls",
5006
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5007
14
            NULL, HFILL }
5008
14
        },
5009
14
        { &hf_PCEPF_OBJ_WA,
5010
14
          { "WAVELENGTH-ASSIGNMENT (WA) object", "pcep.obj.wa",
5011
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5012
14
            NULL, HFILL }
5013
14
        },
5014
14
        { &hf_PCEPF_OBJ_FLOWSPEC,
5015
14
          { "FLOWSPEC object", "pcep.obj.flowspec",
5016
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5017
14
            NULL, HFILL }
5018
14
        },
5019
14
        { &hf_PCEPF_OBJ_CCI_TYPE,
5020
14
          { "CCI Object-Type object", "pcep.obj.cci_type",
5021
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5022
14
            NULL, HFILL }
5023
14
        },
5024
14
        { &hf_PCEPF_OBJ_PATH_ATTRIB,
5025
14
          { "PATH-ATTRIB object", "pcep.obj.path_attrib",
5026
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5027
14
            NULL, HFILL }
5028
14
        },
5029
5030
14
        { &hf_PCEPF_OBJ_UNKNOWN_TYPE,
5031
14
          { "Unknown object", "pcep.obj.unknown",
5032
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5033
14
            NULL, HFILL }
5034
14
        },
5035
5036
        /*Subobjects*/
5037
14
        { &hf_PCEPF_SUBOBJ,
5038
14
          { "Type", "pcep.subobj",
5039
14
            FT_UINT8, BASE_DEC, VALS(pcep_subobj_vals), 0,
5040
14
            NULL, HFILL }
5041
14
        },
5042
14
        { &hf_PCEPF_SUBOBJ_7F,
5043
14
          { "Type", "pcep.subobj",
5044
14
            FT_UINT8, BASE_DEC, VALS(pcep_subobj_vals), 0x7F,
5045
14
            NULL, HFILL }
5046
14
        },
5047
5048
14
        { &hf_PCEPF_SUBOBJ_IPv4,
5049
14
          { "SUBOBJECT: IPv4 Prefix", "pcep.subobj.ipv4",
5050
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5051
14
            NULL, HFILL }
5052
14
        },
5053
14
        { &hf_PCEPF_SUBOBJ_IPv6,
5054
14
          { "SUBOBJECT: IPv6 Prefix", "pcep.subobj.ipv6",
5055
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5056
14
            NULL, HFILL }
5057
14
        },
5058
14
        { &hf_PCEPF_SUBOBJ_LABEL_CONTROL,
5059
14
          { "SUBOBJECT: Label Control", "pcep.subobj.label.control",
5060
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5061
14
            NULL, HFILL }
5062
14
        },
5063
14
        { &hf_PCEPF_SUBOBJ_UNNUM_INTERFACEID,
5064
14
          { "SUBOBJECT: Unnumbered Interface ID", "pcep.subobj.unnum.interfaceid",
5065
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5066
14
            NULL, HFILL }
5067
14
        },
5068
14
        { &hf_PCEPF_SUBOBJ_AUTONOMOUS_SYS_NUM,
5069
14
          { "SUBOBJECT: Autonomous System Number", "pcep.subobj.autonomous.sys.num",
5070
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5071
14
            NULL, HFILL }
5072
14
        },
5073
14
        { &hf_PCEPF_SUBOBJ_SRLG,
5074
14
          { "SUBOBJECT: SRLG", "pcep.subobj.srlg",
5075
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5076
14
            NULL, HFILL }
5077
14
        },
5078
14
        { &hf_PCEPF_SUBOBJ_EXRS,
5079
14
          { "SUBOBJECT: EXRS", "pcep.subobj.exrs",
5080
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5081
14
            NULL, HFILL }
5082
14
        },
5083
14
        { &hf_PCEPF_SUBOBJ_PKSv4,
5084
14
          { "SUBOBJECT: Path Key (IPv4)", "pcep.subobj.path_key.ipv4",
5085
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5086
14
            NULL, HFILL }
5087
14
        },
5088
14
        { &hf_PCEPF_SUBOBJ_PKSv6,
5089
14
          { "SUBOBJECT: Path Key (IPv6)", "pcep.subobj.path_key.ipv6",
5090
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5091
14
            NULL, HFILL }
5092
14
        },
5093
14
        { &hf_PCEPF_SUBOBJ_XRO,
5094
14
          { "Type", "pcep.subobj.label",
5095
14
            FT_UINT8, BASE_DEC, VALS(pcep_subobj_xro_vals), 0x7F,
5096
14
            NULL, HFILL }
5097
14
        },
5098
14
        { &hf_pcep_xro_flags_f,
5099
14
          { "Fail (F)", "pcep.xro.flags.f",
5100
14
            FT_BOOLEAN, 16, TFS(&tfs_set_notset), PCEP_XRO_F,
5101
14
            NULL, HFILL }
5102
14
        },
5103
#if 0
5104
        { &hf_PCEPF_SUB_XRO_ATTRIB,
5105
          { "Attribute", "pcep.xro.sub.attribute",
5106
            FT_UINT32, BASE_DEC, VALS(pcep_xro_attribute_obj_vals), 0x0,
5107
            NULL, HFILL }
5108
        },
5109
#endif
5110
14
        { &hf_pcep_subobj_flags_lpa,
5111
14
          { "Local Protection Available", "pcep.subobj.flags.lpa",
5112
14
            FT_BOOLEAN, 8, TFS(&tfs_set_notset), PCEP_SUB_LPA,
5113
14
            NULL, HFILL }
5114
14
        },
5115
14
        { &hf_pcep_subobj_flags_lpu,
5116
14
          { "Local protection in Use", "pcep.subobj.flags.lpu",
5117
14
            FT_BOOLEAN, 8, TFS(&tfs_set_notset), PCEP_SUB_LPU,
5118
14
            NULL, HFILL }
5119
14
        },
5120
5121
14
        { &hf_pcep_subobj_label_flags_gl,
5122
14
          { "Global Label", "pcep.subobj.label.flags.gl",
5123
14
            FT_BOOLEAN, 8, TFS(&tfs_set_notset), PCEP_SUB_LABEL_GL,
5124
14
            NULL, HFILL }
5125
14
        },
5126
14
        { &hf_pcep_no_path_tlvs_pce,
5127
14
          { "PCE currently unavailable", "pcep.no_path_tlvs.pce",
5128
14
            FT_BOOLEAN, 32, NULL, 0x00000001,
5129
14
            NULL, HFILL }
5130
14
        },
5131
14
        { &hf_pcep_no_path_tlvs_unk_dest,
5132
14
          { "Unknown destination", "pcep.no_path_tlvs.unk_dest",
5133
14
            FT_BOOLEAN, 32, NULL, 0x00000002,
5134
14
            NULL, HFILL }
5135
14
        },
5136
14
        { &hf_pcep_no_path_tlvs_unk_src,
5137
14
          { "Unknown source", "pcep.no_path_tlvs.unk_src",
5138
14
            FT_BOOLEAN, 32, NULL, 0x00000004,
5139
14
            NULL, HFILL }
5140
14
        },
5141
14
        { &hf_pcep_no_path_tlvs_brpc,
5142
14
          { "BRPC Path computation chain unavailable", "pcep.no_path_tlvs.brpc",
5143
14
            FT_BOOLEAN, 32, NULL, 0x00000008,
5144
14
            NULL, HFILL }
5145
14
        },
5146
14
        { &hf_pcep_no_path_tlvs_pks,
5147
14
          { "PKS expansion failure", "pcep.no_path_tlvs.pks",
5148
14
            FT_BOOLEAN, 32, NULL, 0x00000010,
5149
14
            NULL, HFILL }
5150
14
        },
5151
14
        { &hf_pcep_no_path_tlvs_no_gco_migr,
5152
14
          { "No GCO migration path found", "pcep.no_path_tlvs.no_gco_migr",
5153
14
            FT_BOOLEAN, 32, NULL, 0x00000020,
5154
14
            NULL, HFILL }
5155
14
        },
5156
14
        { &hf_pcep_no_path_tlvs_no_gco_soln,
5157
14
          { "No GCO solution found", "pcep.no_path_tlvs.no_gco_soln",
5158
14
            FT_BOOLEAN, 32, NULL, 0x00000040,
5159
14
            NULL, HFILL }
5160
14
        },
5161
14
        { &hf_pcep_no_path_tlvs_p2mp,
5162
14
          { "P2MP Reachability Problem", "pcep.no_path_tlvs.p2mp",
5163
14
            FT_BOOLEAN, 32, NULL, 0x00000080,
5164
14
            NULL, HFILL }
5165
14
        },
5166
14
        { &hf_pcep_stateful_pce_capability_flags,
5167
14
          { "Flags", "pcep.stateful-pce-capability.flags",
5168
14
            FT_UINT32, BASE_HEX, NULL, 0x0,
5169
14
            NULL, HFILL }
5170
14
        },
5171
5172
14
        { &hf_pcep_lsp_update_capability,
5173
14
          { "LSP-UPDATE-CAPABILITY (U)", "pcep.stateful-pce-capability.lsp-update",
5174
14
            FT_BOOLEAN, 32, NULL, PCEP_TLV_STATEFUL_PCE_CAPABILITY_U,
5175
14
            NULL, HFILL }
5176
14
        },
5177
14
        { &hf_pcep_include_db_version,
5178
14
          { "INCLUDE-DB-VERSION (S)", "pcep.sync-capability.include-db-version",
5179
14
            FT_BOOLEAN, 32, NULL, PCEP_TLV_STATEFUL_PCE_CAPABILITY_S,
5180
14
            NULL, HFILL }
5181
14
        },
5182
14
        { &hf_pcep_lsp_instantiation_capability,
5183
14
          { "LSP-INSTANTIATION-CAPABILITY (I)", "pcep.stateful-pce-capability.lsp-instantiation",
5184
14
            FT_BOOLEAN, 32, NULL, PCEP_TLV_STATEFUL_PCE_CAPABILITY_I,
5185
14
            NULL, HFILL }
5186
14
        },
5187
14
        { &hf_pcep_triggered_resync,
5188
14
          { "TRIGGERED-RESYNC (T)", "pcep.stateful-pce-capability.triggered-resync",
5189
14
            FT_BOOLEAN, 32, NULL, PCEP_TLV_STATEFUL_PCE_CAPABILITY_T,
5190
14
            NULL, HFILL }
5191
14
        },
5192
14
        { &hf_pcep_delta_lsp_sync_capability,
5193
14
          { "DELTA-LSP-SYNC-CAPABILITY (D)", "pcep.stateful-pce-capability.delta-lsp-sync",
5194
14
            FT_BOOLEAN, 32, NULL, PCEP_TLV_STATEFUL_PCE_CAPABILITY_D,
5195
14
            NULL, HFILL }
5196
14
        },
5197
14
        { &hf_pcep_triggered_initial_sync,
5198
14
          { "TRIGGERED-INITIAL-SYNC (F)", "pcep.stateful-pce-capability.triggered-initial-sync",
5199
14
            FT_BOOLEAN, 32, NULL, PCEP_TLV_STATEFUL_PCE_CAPABILITY_F,
5200
14
            NULL, HFILL }
5201
14
        },
5202
14
        { &hf_pcep_color_capability,
5203
14
            { "COLOR-CAPABILITY", "pcep.stateful-pce-capability.color-capability",
5204
14
              FT_BOOLEAN, 32, NULL, PCEP_TLV_STATEFUL_PCE_CAPABILITY_COLOR,
5205
14
              NULL, HFILL }
5206
14
        },
5207
14
        { &hf_pcep_sr_pce_capability_reserved,
5208
14
          { "Reserved", "pcep.tlv.sr-pce-capability.reserved",
5209
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
5210
14
            NULL, HFILL }
5211
14
        },
5212
14
        { &hf_pcep_sr_pce_capability_sub_tlv_reserved,
5213
14
           { "Reserved", "pcep.sub-tlv.sr-pce-capability.reserved",
5214
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
5215
14
            NULL, HFILL }
5216
14
        },
5217
        // DEPRECATED
5218
14
        { &hf_pcep_sr_pce_capability_flags,
5219
14
          { "Flags", "pcep.tlv.sr-pce-capability.flags",
5220
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5221
14
            NULL, HFILL }
5222
14
        },
5223
14
        { &hf_pcep_sr_pce_capability_sub_tlv_flags,
5224
14
          { "Flags", "pcep.sub-tlv.sr-pce-capability.flags",
5225
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5226
14
            NULL, HFILL }
5227
14
        },
5228
        // DEPRECATED
5229
        // leave for backwards compatibility
5230
14
        { &hf_pcep_sr_pce_capability_flags_l,
5231
14
          { "L-flag", "pcep.tlv.sr-pce-capability.flags.l",
5232
14
            FT_BOOLEAN, 8, TFS(&tfs_set_notset), PCEP_TLV_SR_PCE_CAPABILITY_L,
5233
14
            NULL, HFILL }
5234
14
        },
5235
14
        { &hf_pcep_sr_pce_capability_sub_tlv_flags_n,
5236
14
          { "Node or Adjacency Identifier (NAI) is supported (N)", "pcep.sub-tlv.sr-pce-capability.flags.n",
5237
14
            FT_BOOLEAN, 8, TFS(&tfs_set_notset), PCEP_TLV_SR_PCE_CAPABILITY_N,
5238
14
            NULL, HFILL }
5239
14
        },
5240
14
        { &hf_pcep_sr_pce_capability_sub_tlv_flags_x,
5241
14
          { "Unlimited Maximum SID Depth (X)", "pcep.sub-tlv.sr-pce-capability.flags.x",
5242
14
            FT_BOOLEAN, 8, TFS(&tfs_set_notset), PCEP_TLV_SR_PCE_CAPABILITY_X,
5243
14
            NULL, HFILL }
5244
14
        },
5245
        // SR-PCE CAPABILITY TLV is deprecated
5246
        // leave for backwards compatibility
5247
14
        { &hf_pcep_sr_pce_capability_msd,
5248
14
          { "MSD", "pcep.tlv.sr-pce-capability.msd",
5249
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5250
14
            "MSD (Maximum SID Depth)", HFILL }
5251
14
        },
5252
14
        { &hf_pcep_sr_pce_capability_sub_tlv_msd,
5253
14
          { "MSD", "pcep.sub-tlv.sr-pce-capability.msd",
5254
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5255
14
            "MSD (Maximum SID Depth)", HFILL }
5256
14
        },
5257
14
        { &hf_pcep_path_setup_type_reserved24,
5258
14
          { "Reserved", "pcep.pst.reserved",
5259
14
            FT_UINT24, BASE_HEX, NULL, 0x0,
5260
14
            NULL, HFILL }
5261
14
        },
5262
14
        { &hf_pcep_path_setup_type,
5263
14
          { "Path Setup Type", "pcep.pst",
5264
14
            FT_UINT8, BASE_DEC, VALS(pcep_pst_vals), 0x0,
5265
14
            NULL, HFILL }
5266
14
        },
5267
14
        { &hf_pcep_path_setup_type_capability_reserved24,
5268
14
          { "Reserved", "pcep.pst_capability.reserved",
5269
14
            FT_UINT24, BASE_HEX, NULL, 0x0,
5270
14
            NULL, HFILL }
5271
14
        },
5272
14
        { &hf_pcep_path_setup_type_capability_psts,
5273
14
          { "Path Setup Types", "pcep.pst_capability.psts",
5274
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5275
14
            NULL, HFILL }
5276
14
        },
5277
14
        { &hf_pcep_path_setup_type_capability_pst,
5278
14
          { "Path Setup Type", "pcep.pst_capability.pst",
5279
14
            FT_UINT8, BASE_DEC, VALS(pcep_pst_vals), 0x0,
5280
14
            NULL, HFILL }
5281
14
        },
5282
14
        { &hf_PCEPF_SUBOBJ_SR,
5283
14
          { "SR", "pcep.subobj.sr",
5284
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5285
14
            "Segment Routing (SR)", HFILL }
5286
14
        },
5287
14
        { &hf_pcep_subobj_sr_l,
5288
14
          { "L", "pcep.subobj.sr.l",
5289
14
            FT_UINT8, BASE_DEC, VALS(pcep_route_l_obj_vals), Mask_L,
5290
14
            NULL, HFILL }
5291
14
        },
5292
14
        { &hf_pcep_subobj_sr_length,
5293
14
          { "Length", "pcep.subobj.sr.length",
5294
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5295
14
            NULL, HFILL }
5296
14
        },
5297
14
        { &hf_pcep_subobj_sr_nt,
5298
14
          { "NAI Type", "pcep.subobj.sr.nt",
5299
14
            FT_UINT8, BASE_DEC, VALS(pcep_sr_nt_vals), 0xF0,
5300
14
            NULL, HFILL }
5301
14
        },
5302
14
        { &hf_pcep_subobj_sr_flags,
5303
14
          { "Flags", "pcep.subobj.sr.flags",
5304
14
            FT_UINT16, BASE_HEX, NULL, 0x0FFF,
5305
14
            NULL, HFILL }
5306
14
        },
5307
14
        { &hf_pcep_subobj_sr_flags_m,
5308
14
          { "SID specifies an MPLS label (M)", "pcep.subobj.sr.flags.m",
5309
14
            FT_BOOLEAN, 12, TFS(&tfs_set_notset), PCEP_SUBOBJ_SR_FLAGS_M,
5310
14
            NULL, HFILL }
5311
14
        },
5312
14
        { &hf_pcep_subobj_sr_flags_c,
5313
14
          { "SID specifies TC, S, and TTL in addition to an MPLS label (C)", "pcep.subobj.sr.flags.c",
5314
14
            FT_BOOLEAN, 12, TFS(&tfs_set_notset), PCEP_SUBOBJ_SR_FLAGS_C,
5315
14
            NULL, HFILL }
5316
14
        },
5317
14
        { &hf_pcep_subobj_sr_flags_s,
5318
14
          { "SID is absent (S)", "pcep.subobj.sr.flags.s",
5319
14
            FT_BOOLEAN, 12, TFS(&tfs_set_notset), PCEP_SUBOBJ_SR_FLAGS_S,
5320
14
            NULL, HFILL }
5321
14
        },
5322
14
        { &hf_pcep_subobj_sr_flags_f,
5323
14
          { "NAI is absent (F)", "pcep.subobj.sr.flags.f",
5324
14
            FT_BOOLEAN, 12, TFS(&tfs_set_notset), PCEP_SUBOBJ_SR_FLAGS_F,
5325
14
            NULL, HFILL }
5326
14
        },
5327
14
        { &hf_pcep_subobj_sr_sid,
5328
14
          { "SID", "pcep.subobj.sr.sid",
5329
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
5330
14
            NULL, HFILL }
5331
14
        },
5332
14
        { &hf_pcep_subobj_sr_sid_label,
5333
14
          { "SID/Label", "pcep.subobj.sr.sid.label",
5334
14
            FT_UINT32, BASE_DEC, NULL, PCEP_MPLS_LABEL_STACK_ENTRY_LABEL,
5335
14
            "SID represent MPLS Label stack: Label", HFILL }
5336
14
        },
5337
14
        { &hf_pcep_subobj_sr_sid_tc,
5338
14
          {"SID/TC", "pcep.subobj.sr.sid.tc",
5339
14
            FT_UINT32, BASE_DEC, NULL, PCEP_MPLS_LABEL_STACK_ENTRY_TC,
5340
14
            "SID represent MPLS Label stack: Traffic Class field", HFILL }
5341
14
        },
5342
14
        { &hf_pcep_subobj_sr_sid_s,
5343
14
          {"SID/S", "pcep.subobj.sr.sid.s",
5344
14
            FT_UINT32, BASE_DEC, NULL, PCEP_MPLS_LABEL_STACK_ENTRY_S,
5345
14
            "SID represent MPLS Label stack: Bottom of Stack", HFILL }
5346
14
        },
5347
14
        { &hf_pcep_subobj_sr_sid_ttl,
5348
14
          {"SID/TTL", "pcep.subobj.sr.sid.ttl",
5349
14
            FT_UINT32, BASE_DEC, NULL, PCEP_MPLS_LABEL_STACK_ENTRY_TTL,
5350
14
            "SID represent MPLS Label stack: Time to Live", HFILL }
5351
14
        },
5352
14
        { &hf_pcep_subobj_sr_nai_ipv4_node,
5353
14
          { "NAI (IPv4 Node ID)", "pcep.subobj.sr.nai.ipv4node",
5354
14
            FT_IPv4, BASE_NONE, NULL, 0x0,
5355
14
            NULL, HFILL }
5356
14
        },
5357
14
        { &hf_pcep_subobj_sr_nai_ipv6_node,
5358
14
          { "NAI (IPv6 Node ID)", "pcep.subobj.sr.nai.ipv6node",
5359
14
            FT_IPv6, BASE_NONE, NULL, 0x0,
5360
14
            NULL, HFILL }
5361
14
        },
5362
14
        { &hf_pcep_subobj_sr_nai_local_ipv4_addr,
5363
14
          { "Local IPv4 address", "pcep.subobj.sr.nai.localipv4addr",
5364
14
            FT_IPv4, BASE_NONE,
5365
14
            NULL, 0x0, NULL, HFILL }
5366
14
        },
5367
14
        { &hf_pcep_subobj_sr_nai_remote_ipv4_addr,
5368
14
          { "Remote IPv4 address", "pcep.subobj.sr.nai.remoteipv4addr",
5369
14
            FT_IPv4, BASE_NONE,
5370
14
            NULL, 0x0, NULL, HFILL }
5371
14
        },
5372
14
        { &hf_pcep_subobj_sr_nai_local_ipv6_addr,
5373
14
          { "Local IPv6 address", "pcep.subobj.sr.nai.localipv6addr",
5374
14
            FT_IPv6, BASE_NONE,
5375
14
            NULL, 0x0, NULL, HFILL }
5376
14
        },
5377
14
        { &hf_pcep_subobj_sr_nai_remote_ipv6_addr,
5378
14
          { "Remote IPv6 address", "pcep.subobj.sr.nai.remoteipv6addr",
5379
14
            FT_IPv6, BASE_NONE,
5380
14
            NULL, 0x0, NULL, HFILL }
5381
14
        },
5382
14
        { &hf_pcep_subobj_sr_nai_local_node_id,
5383
14
          { "Local Node-ID", "pcep.subobj.sr.nai.localnodeid",
5384
14
            FT_UINT32, BASE_DEC,
5385
14
            NULL, 0x0, NULL, HFILL }
5386
14
        },
5387
14
        { &hf_pcep_subobj_sr_nai_local_interface_id,
5388
14
          { "Local Interface ID", "pcep.subobj.sr.nai.localinterfaceid",
5389
14
            FT_UINT32, BASE_DEC,
5390
14
            NULL, 0x0, NULL, HFILL }
5391
14
        },
5392
14
        { &hf_pcep_subobj_sr_nai_remote_node_id,
5393
14
          { "Remote Node-ID", "pcep.subobj.sr.nai.remotenodeid",
5394
14
            FT_UINT32, BASE_DEC,
5395
14
            NULL, 0x0, NULL, HFILL }
5396
14
        },
5397
14
        { &hf_pcep_subobj_sr_nai_remote_interface_id,
5398
14
          { "Remote Interface ID", "pcep.subobj.sr.nai.remoteinterfaceid",
5399
14
            FT_UINT32, BASE_DEC,
5400
14
            NULL, 0x0, NULL, HFILL }
5401
14
        },
5402
14
        { &hf_PCEPF_SUBOBJ_SRv6,
5403
14
          { "SRv6", "pcep.subobj.srv6",
5404
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5405
14
            NULL, HFILL }
5406
14
        },
5407
14
        { &hf_pcep_subobj_srv6_l,
5408
14
          { "L", "pcep.subobj.srv6.l",
5409
14
            FT_UINT8, BASE_DEC, VALS(pcep_route_l_obj_vals), Mask_L,
5410
14
            NULL, HFILL }
5411
14
        },
5412
14
        { &hf_pcep_subobj_srv6_length,
5413
14
          { "Length", "pcep.subobj.srv6.length",
5414
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5415
14
            NULL, HFILL }
5416
14
        },
5417
14
        { &hf_pcep_subobj_srv6_nt,
5418
14
          { "NAI Type", "pcep.subobj.srv6.nt",
5419
14
            FT_UINT8, BASE_DEC, VALS(pcep_sr_nt_vals), 0xF0,
5420
14
            NULL, HFILL }
5421
14
        },
5422
14
        { &hf_pcep_subobj_srv6_flags,
5423
14
          { "Flags", "pcep.subobj.srv6.flags",
5424
14
            FT_UINT16, BASE_HEX, NULL, 0x0FFF,
5425
14
            NULL, HFILL }
5426
14
        },
5427
14
        { &hf_pcep_subobj_srv6_flags_v,
5428
14
          { "SID verification (V)", "pcep.subobj.srv6.flags.v",
5429
14
            FT_BOOLEAN, 12, TFS(&tfs_set_notset), PCEP_SUBOBJ_SRV6_FLAGS_V,
5430
14
            NULL, HFILL }
5431
14
        },
5432
14
        { &hf_pcep_subobj_srv6_flags_t,
5433
14
          { "SID structure is present (T)", "pcep.subobj.srv6.flags.t",
5434
14
            FT_BOOLEAN, 12, TFS(&tfs_set_notset), PCEP_SUBOBJ_SRV6_FLAGS_T,
5435
14
            NULL, HFILL }
5436
14
        },
5437
14
        { &hf_pcep_subobj_srv6_flags_f,
5438
14
          { "NAI is absent (F)", "pcep.subobj.srv6.flags.f",
5439
14
            FT_BOOLEAN, 12, TFS(&tfs_set_notset), PCEP_SUBOBJ_SRV6_FLAGS_F,
5440
14
            NULL, HFILL }
5441
14
        },
5442
14
        { &hf_pcep_subobj_srv6_flags_s,
5443
14
          { "SID is absent (S)", "pcep.subobj.srv6.flags.s",
5444
14
            FT_BOOLEAN, 12, TFS(&tfs_set_notset), PCEP_SUBOBJ_SRV6_FLAGS_S,
5445
14
            NULL, HFILL }
5446
14
        },
5447
14
        { &hf_pcep_subobj_srv6_reserved,
5448
14
          { "Reserved", "pcep.subobj.srv6.reserved",
5449
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
5450
14
            NULL, HFILL }
5451
14
        },
5452
14
        { &hf_pcep_subobj_srv6_endpoint_behavior,
5453
14
          { "Endpoint Behavior", "pcep.subobj.srv6.endpoint_behavior",
5454
14
            FT_UINT16, BASE_DEC, VALS(srv6_endpoint_behavior_vals), 0x0,
5455
14
            NULL, HFILL }
5456
14
        },
5457
14
        { &hf_pcep_subobj_srv6_sid,
5458
14
          { "SRv6 SID", "pcep.subobj.srv6.sid",
5459
14
            FT_IPv6, BASE_NONE, NULL, 0x0,
5460
14
            NULL, HFILL }
5461
14
        },
5462
14
        { &hf_pcep_subobj_srv6_nai,
5463
14
          { "Node or Adjacency Identifier (NAI)", "pcep.subobj.srv6.nai",
5464
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5465
14
            NULL, HFILL }
5466
14
        },
5467
14
        { &hf_pcep_subobj_srv6_nai_ipv6_node,
5468
14
          { "IPv6 Node ID", "pcep.subobj.srv6.nai.ipv6node",
5469
14
            FT_IPv6, BASE_NONE, NULL, 0x0,
5470
14
            NULL, HFILL }
5471
14
        },
5472
14
        { &hf_pcep_subobj_srv6_nai_local_ipv6_addr,
5473
14
          { "Local IPv6 address", "pcep.subobj.srv6.nai.localipv6addr",
5474
14
            FT_IPv6, BASE_NONE,
5475
14
            NULL, 0x0, NULL, HFILL }
5476
14
        },
5477
14
        { &hf_pcep_subobj_srv6_nai_remote_ipv6_addr,
5478
14
          { "Remote IPv6 address", "pcep.subobj.srv6.nai.remoteipv6addr",
5479
14
            FT_IPv6, BASE_NONE,
5480
14
            NULL, 0x0, NULL, HFILL }
5481
14
        },
5482
14
        { &hf_pcep_subobj_srv6_nai_local_interface_id,
5483
14
          { "Local Interface ID", "pcep.subobj.srv6.nai.localinterfaceid",
5484
14
            FT_UINT32, BASE_DEC,
5485
14
            NULL, 0x0, NULL, HFILL }
5486
14
        },
5487
14
        { &hf_pcep_subobj_srv6_nai_remote_interface_id,
5488
14
          { "Remote Interface ID", "pcep.subobj.srv6.nai.remoteinterfaceid",
5489
14
            FT_UINT32, BASE_DEC,
5490
14
            NULL, 0x0, NULL, HFILL }
5491
14
        },
5492
14
        { &hf_pcep_subobj_srv6_sid_struct,
5493
14
          { "SID Structure", "pcep.subobj.srv6.sid_structure",
5494
14
            FT_NONE, BASE_NONE, NULL, 0x0,
5495
14
            NULL, HFILL }
5496
14
        },
5497
14
        { &hf_pcep_subobj_srv6_sid_struct_lb_len,
5498
14
          { "Locator Block Length", "pcep.subobj.srv6.sid_structure.locator_block_length",
5499
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5500
14
            NULL, HFILL }
5501
14
        },
5502
14
        { &hf_pcep_subobj_srv6_sid_struct_ln_len,
5503
14
          { "Locator Node Length", "pcep.subobj.srv6.sid_structure.locator_node_length",
5504
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5505
14
            NULL, HFILL }
5506
14
        },
5507
14
        { &hf_pcep_subobj_srv6_sid_struct_fun_len,
5508
14
          { "Function Length", "pcep.subobj.srv6.sid_structure.function_length",
5509
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5510
14
            NULL, HFILL }
5511
14
        },
5512
14
        { &hf_pcep_subobj_srv6_sid_struct_arg_len,
5513
14
          { "Arguments Length", "pcep.subobj.srv6.sid_structure.arguments_length",
5514
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5515
14
            NULL, HFILL }
5516
14
        },
5517
14
        { &hf_pcep_subobj_srv6_sid_struct_reserved,
5518
14
          { "Reserved", "pcep.subobj.srv6.sid_structure.reserved",
5519
14
            FT_UINT24, BASE_HEX, NULL, 0x0,
5520
14
            NULL, HFILL }
5521
14
        },
5522
14
        { &hf_pcep_subobj_srv6_sid_struct_flags,
5523
14
          { "Flags", "pcep.subobj.srv6.sid_structure.flags",
5524
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5525
14
            NULL, HFILL }
5526
14
        },
5527
5528
        /* Generated from convert_proto_tree_add_text.pl */
5529
14
        { &hf_pcep_tlv_type,
5530
14
          { "Type", "pcep.tlv.type",
5531
14
            FT_UINT16, BASE_DEC, VALS(pcep_tlvs_vals), 0x0,
5532
14
            NULL, HFILL }
5533
14
        },
5534
14
        { &hf_pcep_tlv_length,
5535
14
          { "Length", "pcep.tlv.length",
5536
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
5537
14
            NULL, HFILL }
5538
14
        },
5539
14
        { &hf_pcep_request_id,
5540
14
          { "Request-ID", "pcep.request_id",
5541
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
5542
14
            NULL, HFILL }
5543
14
        },
5544
14
        { &hf_pcep_tlv_data,
5545
14
          { "Data", "pcep.tlv.data",
5546
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
5547
14
            NULL, HFILL }
5548
14
        },
5549
14
        { &hf_pcep_tlv_padding,
5550
14
          { "Padding", "pcep.tlv.padding",
5551
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
5552
14
            NULL, HFILL }
5553
14
        },
5554
14
        { &hf_pcep_subobj_ipv4_length,
5555
14
          { "Length", "pcep.subobj.ipv4.length",
5556
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5557
14
            NULL, HFILL }
5558
14
        },
5559
14
        { &hf_pcep_subobj_ipv4_ipv4,
5560
14
          { "IPv4 Address", "pcep.subobj.ipv4.ipv4",
5561
14
            FT_IPv4, BASE_NONE, NULL, 0x0,
5562
14
            NULL, HFILL }
5563
14
        },
5564
14
        { &hf_pcep_subobj_ipv4_prefix_length,
5565
14
          { "Prefix Length", "pcep.subobj.ipv4.prefix_length",
5566
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5567
14
            NULL, HFILL }
5568
14
        },
5569
14
        { &hf_pcep_subobj_ipv4_padding,
5570
14
          { "Padding", "pcep.subobj.ipv4.padding",
5571
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5572
14
            NULL, HFILL }
5573
14
        },
5574
14
        { &hf_pcep_subobj_ipv4_flags,
5575
14
          { "Flags", "pcep.subobj.ipv4.flags",
5576
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5577
14
            NULL, HFILL }
5578
14
        },
5579
14
        { &hf_pcep_subobj_ipv4_attribute,
5580
14
          { "Attribute", "pcep.subobj.ipv4.attribute",
5581
14
            FT_UINT8, BASE_DEC, VALS(pcep_xro_attribute_obj_vals), 0x0,
5582
14
            NULL, HFILL }
5583
14
        },
5584
14
        { &hf_pcep_subobj_ipv6_length,
5585
14
          { "Length", "pcep.subobj.ipv6.length",
5586
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5587
14
            NULL, HFILL }
5588
14
        },
5589
14
        { &hf_pcep_subobj_ipv6_ipv6,
5590
14
          { "IPv6 Address", "pcep.subobj.ipv6.ipv6",
5591
14
            FT_IPv6, BASE_NONE, NULL, 0x0,
5592
14
            NULL, HFILL }
5593
14
        },
5594
14
        { &hf_pcep_subobj_ipv6_prefix_length,
5595
14
          { "Prefix Length", "pcep.subobj.ipv6.prefix_length",
5596
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5597
14
            NULL, HFILL }
5598
14
        },
5599
14
        { &hf_pcep_subobj_ipv6_padding,
5600
14
          { "Padding", "pcep.subobj.ipv6.padding",
5601
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5602
14
            NULL, HFILL }
5603
14
        },
5604
14
        { &hf_pcep_subobj_ipv6_flags,
5605
14
          { "Flags", "pcep.subobj.ipv6.flags",
5606
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5607
14
            NULL, HFILL }
5608
14
        },
5609
14
        { &hf_pcep_subobj_ipv6_attribute,
5610
14
          { "Attribute", "pcep.attribute",
5611
14
            FT_UINT8, BASE_DEC, VALS(pcep_xro_attribute_obj_vals), 0x0,
5612
14
            NULL, HFILL }
5613
14
        },
5614
14
        { &hf_pcep_subobj_label_control_length,
5615
14
          { "Length", "pcep.subobj.label_control.length",
5616
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5617
14
            NULL, HFILL }
5618
14
        },
5619
14
        { &hf_pcep_subobj_label_control_u,
5620
14
          { "U", "pcep.subobj.label_control.u",
5621
14
            FT_UINT8, BASE_DEC, VALS(pcep_route_u_obj_vals), 0x80,
5622
14
            NULL, HFILL }
5623
14
        },
5624
14
        { &hf_pcep_subobj_label_control_reserved,
5625
14
          { "Reserved", "pcep.subobj.label_control.reserved",
5626
14
            FT_UINT8, BASE_DEC, NULL, 0x7F,
5627
14
            NULL, HFILL }
5628
14
        },
5629
14
        { &hf_pcep_subobj_label_control_c_type,
5630
14
          { "C-Type", "pcep.subobj.label_control.c_type",
5631
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5632
14
            NULL, HFILL }
5633
14
        },
5634
14
        { &hf_pcep_subobj_label_control_label,
5635
14
          { "Label", "pcep.subobj.label_control.label",
5636
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
5637
14
            NULL, HFILL }
5638
14
        },
5639
14
        { &hf_pcep_subobj_label_control_flags,
5640
14
          { "Flags", "pcep.subobj.label_control.flags",
5641
14
            FT_UINT8, BASE_HEX, NULL, 0x7F,
5642
14
            NULL, HFILL }
5643
14
        },
5644
14
        { &hf_pcep_subobj_unnumb_interfaceID_length,
5645
14
          { "Length", "pcep.subobj.unnumb_interfaceID.length",
5646
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5647
14
            NULL, HFILL }
5648
14
        },
5649
14
        { &hf_pcep_subobj_unnumb_interfaceID_reserved,
5650
14
          { "Reserved", "pcep.subobj.unnumb_interfaceID.reserved",
5651
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
5652
14
            NULL, HFILL }
5653
14
        },
5654
14
        { &hf_pcep_subobj_unnumb_interfaceID_flags,
5655
14
          { "Flags", "pcep.subobj.unnumb_interfaceID.flags",
5656
14
            FT_UINT16, BASE_HEX, NULL, 0xFF00,
5657
14
            NULL, HFILL }
5658
14
        },
5659
        /* TODO: only 1 byte, no mask needed? */
5660
14
        { &hf_pcep_subobj_unnumb_interfaceID_reserved_rrobj,
5661
14
          { "Reserved", "pcep.subobj.unnumb_interfaceID.reserved",
5662
14
            FT_UINT16, BASE_HEX, NULL, 0x00FF,
5663
14
            NULL, HFILL }
5664
14
        },
5665
14
        { &hf_pcep_subobj_unnumb_interfaceID_reserved_xroobj,
5666
14
          { "Reserved", "pcep.subobj.unnumb_interfaceID.reserved",
5667
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5668
14
            NULL, HFILL }
5669
14
        },
5670
14
        { &hf_pcep_subobj_unnumb_interfaceID_attribute,
5671
14
          { "Attribute", "pcep.subobj.unnumb_interfaceID.attribute",
5672
14
            FT_UINT8, BASE_DEC, VALS(pcep_xro_attribute_obj_vals), 0x0,
5673
14
            NULL, HFILL }
5674
14
        },
5675
14
        { &hf_pcep_subobj_unnumb_interfaceID_router_id,
5676
14
          { "Router ID", "pcep.subobj.unnumb_interfaceID.router_id",
5677
14
            FT_IPv4, BASE_NONE, NULL, 0x0,
5678
14
            NULL, HFILL }
5679
14
        },
5680
14
        { &hf_pcep_subobj_unnumb_interfaceID_interface_id,
5681
14
          { "Interface ID", "pcep.subobj.unnumb_interfaceID.interface_id",
5682
14
            FT_UINT32, BASE_DEC_HEX, NULL, 0x0,
5683
14
            NULL, HFILL }
5684
14
        },
5685
14
        { &hf_pcep_subobj_autonomous_sys_num_length,
5686
14
          { "Length", "pcep.subobj.autonomous_sys_num.length",
5687
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5688
14
            NULL, HFILL }
5689
14
        },
5690
14
        { &hf_pcep_subobj_autonomous_sys_num_reserved,
5691
14
          { "Reserved", "pcep.subobj.autonomous_sys_num.reserved",
5692
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5693
14
            NULL, HFILL }
5694
14
        },
5695
14
        { &hf_pcep_subobj_autonomous_sys_num_attribute,
5696
14
          { "Attribute", "pcep.subobj.autonomous_sys_num.attribute",
5697
14
            FT_UINT8, BASE_DEC, VALS(pcep_xro_attribute_obj_vals), 0x0,
5698
14
            NULL, HFILL }
5699
14
        },
5700
14
        { &hf_pcep_subobj_autonomous_sys_num_optional_as_number_high_octets,
5701
14
          { "Optional AS Number High Octets", "pcep.subobj.autonomous_sys_num.optional_as_number_high_octets",
5702
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
5703
14
            NULL, HFILL }
5704
14
        },
5705
14
        { &hf_pcep_subobj_autonomous_sys_num_as_number,
5706
14
          { "AS Number", "pcep.subobj.autonomous_sys_num.as_number",
5707
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
5708
14
            NULL, HFILL }
5709
14
        },
5710
14
        { &hf_pcep_subobj_srlg_length,
5711
14
          { "Length", "pcep.subobj.srlg.length",
5712
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5713
14
            NULL, HFILL }
5714
14
        },
5715
14
        { &hf_pcep_subobj_srlg_id,
5716
14
          { "SRLG ID", "pcep.subobj.srlg.id",
5717
14
            FT_UINT32, BASE_HEX, NULL, 0x0,
5718
14
            NULL, HFILL }
5719
14
        },
5720
14
        { &hf_pcep_subobj_srlg_reserved,
5721
14
          { "Reserved", "pcep.subobj.srlg.reserved",
5722
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5723
14
            NULL, HFILL }
5724
14
        },
5725
14
        { &hf_pcep_subobj_srlg_attribute,
5726
14
          { "Attribute", "pcep.subobj.srlg.attribute",
5727
14
            FT_UINT8, BASE_DEC, VALS(pcep_xro_attribute_obj_vals), 0x0,
5728
14
            NULL, HFILL }
5729
14
        },
5730
14
        { &hf_pcep_subobj_exrs_length,
5731
14
          { "Length", "pcep.subobj.exrs.length",
5732
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5733
14
            NULL, HFILL }
5734
14
        },
5735
14
        { &hf_pcep_subobj_exrs_reserved,
5736
14
          { "Reserved", "pcep.subobj.exrs.reserved",
5737
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
5738
14
            NULL, HFILL }
5739
14
        },
5740
14
        { &hf_pcep_subobj_pksv4_length,
5741
14
          { "Length", "pcep.subobj.pksv4.length",
5742
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5743
14
            NULL, HFILL }
5744
14
        },
5745
14
        { &hf_pcep_subobj_pksv4_path_key,
5746
14
          { "Path Key", "pcep.subobj.pksv4.path_key",
5747
14
            FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
5748
14
            NULL, HFILL }
5749
14
        },
5750
14
        { &hf_pcep_subobj_pksv4_pce_id,
5751
14
          { "PCE ID", "pcep.subobj.pksv4.pce_id",
5752
14
            FT_IPv4, BASE_NONE, NULL, 0x0,
5753
14
            NULL, HFILL }
5754
14
        },
5755
14
        { &hf_pcep_subobj_pksv6_length,
5756
14
          { "Length", "pcep.subobj.pksv6.length",
5757
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5758
14
            NULL, HFILL }
5759
14
        },
5760
14
        { &hf_pcep_subobj_pksv6_path_key,
5761
14
          { "Path Key", "pcep.subobj.pksv6.path_key",
5762
14
            FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
5763
14
            NULL, HFILL }
5764
14
        },
5765
14
        { &hf_pcep_subobj_pksv6_pce_id,
5766
14
          { "PCE ID", "pcep.subobj.pksv6.pce_id",
5767
14
            FT_IPv6, BASE_NONE, NULL, 0x0,
5768
14
            NULL, HFILL }
5769
14
        },
5770
14
        { &hf_pcep_open_obj_pcep_version,
5771
14
          { "PCEP Version", "pcep.obj.open.pcep_version",
5772
14
            FT_UINT8, BASE_DEC, NULL, 0xE0,
5773
14
            NULL, HFILL }
5774
14
        },
5775
14
        { &hf_pcep_open_obj_flags,
5776
14
          { "Flags", "pcep.obj.open.flags",
5777
14
            FT_UINT8, BASE_HEX, NULL, 0x1F,
5778
14
            NULL, HFILL }
5779
14
        },
5780
14
        { &hf_pcep_open_obj_keepalive,
5781
14
          { "Keepalive", "pcep.obj.open.keepalive",
5782
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5783
14
            NULL, HFILL }
5784
14
        },
5785
14
        { &hf_pcep_open_obj_deadtime,
5786
14
          { "Deadtime", "pcep.obj.open.deadtime",
5787
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5788
14
            NULL, HFILL }
5789
14
        },
5790
14
        { &hf_pcep_open_obj_sid,
5791
14
          { "SID", "pcep.obj.open.sid",
5792
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5793
14
            NULL, HFILL }
5794
14
        },
5795
14
        { &hf_pcep_rp_obj_reserved,
5796
14
          { "Reserved", "pcep.obj.rp.reserved",
5797
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5798
14
            NULL, HFILL }
5799
14
        },
5800
14
        { &hf_pcep_rp_obj_flags,
5801
14
          { "Flags", "pcep.obj.rp.flags",
5802
14
            FT_UINT24, BASE_HEX, NULL, 0x0,
5803
14
            NULL, HFILL }
5804
14
        },
5805
14
        { &hf_pcep_rp_obj_requested_id_number,
5806
14
          { "Requested ID Number", "pcep.obj.rp.requested_id_number",
5807
14
            FT_UINT32, BASE_HEX, NULL, 0x0,
5808
14
            NULL, HFILL }
5809
14
        },
5810
14
        { &hf_pcep_no_path_obj_flags,
5811
14
          { "Flags", "pcep.obj.no_path.flags",
5812
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
5813
14
            NULL, HFILL }
5814
14
        },
5815
14
        { &hf_pcep_no_path_obj_reserved,
5816
14
          { "Reserved", "pcep.obj.no_path.reserved",
5817
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5818
14
            NULL, HFILL }
5819
14
        },
5820
14
        { &hf_pcep_end_point_obj_source_ipv4_address,
5821
14
          { "Source IPv4 Address", "pcep.obj.end_point.source_ipv4_address",
5822
14
            FT_IPv4, BASE_NONE, NULL, 0x0,
5823
14
            NULL, HFILL }
5824
14
        },
5825
14
        { &hf_pcep_end_point_obj_destination_ipv4_address,
5826
14
          { "Destination IPv4 Address", "pcep.obj.end_point.destination_ipv4_address",
5827
14
            FT_IPv4, BASE_NONE, NULL, 0x0,
5828
14
            NULL, HFILL }
5829
14
        },
5830
14
        { &hf_pcep_end_point_obj_source_ipv6_address,
5831
14
          { "Source IPv6 Address", "pcep.obj.end_point.source_ipv6_address",
5832
14
            FT_IPv6, BASE_NONE, NULL, 0x0,
5833
14
            NULL, HFILL }
5834
14
        },
5835
14
        { &hf_pcep_end_point_obj_destination_ipv6_address,
5836
14
          { "Destination IPv6 Address", "pcep.obj.end_point.destination_ipv6_address",
5837
14
            FT_IPv6, BASE_NONE, NULL, 0x0,
5838
14
            NULL, HFILL }
5839
14
        },
5840
14
        { &hf_pcep_bandwidth,
5841
14
          { "Bandwidth", "pcep.bandwidth",
5842
14
            FT_FLOAT, BASE_NONE, NULL, 0x0,
5843
14
            NULL, HFILL }
5844
14
        },
5845
14
        { &hf_pcep_metric_obj_reserved,
5846
14
          { "Reserved", "pcep.obj.metric.reserved",
5847
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
5848
14
            NULL, HFILL }
5849
14
        },
5850
14
        { &hf_pcep_metric_obj_flags,
5851
14
          { "Flags", "pcep.obj.metric.flags",
5852
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5853
14
            NULL, HFILL }
5854
14
        },
5855
14
        { &hf_pcep_metric_obj_type,
5856
14
          { "Type", "pcep.obj.metric.type",
5857
14
            FT_UINT8, BASE_DEC, VALS(pcep_metric_obj_vals), 0x0,
5858
14
            NULL, HFILL }
5859
14
        },
5860
14
        { &hf_pcep_metric_obj_metric_value,
5861
14
          { "Metric Value", "pcep.obj.metric.metric_value",
5862
14
            FT_FLOAT, BASE_NONE, NULL, 0x0,
5863
14
            NULL, HFILL }
5864
14
        },
5865
14
        { &hf_pcep_lspa_obj_exclude_any,
5866
14
          { "Exclude-Any", "pcep.obj.lspa.exclude_any",
5867
14
            FT_UINT32, BASE_HEX, NULL, 0x0,
5868
14
            NULL, HFILL }
5869
14
        },
5870
14
        { &hf_pcep_lspa_obj_include_any,
5871
14
          { "Include-Any", "pcep.obj.lspa.include_any",
5872
14
            FT_UINT32, BASE_HEX, NULL, 0x0,
5873
14
            NULL, HFILL }
5874
14
        },
5875
14
        { &hf_pcep_lspa_obj_include_all,
5876
14
          { "Include-All", "pcep.obj.lspa.include_all",
5877
14
            FT_UINT32, BASE_HEX, NULL, 0x0,
5878
14
            NULL, HFILL }
5879
14
        },
5880
14
        { &hf_pcep_lspa_obj_setup_priority,
5881
14
          { "Setup Priority", "pcep.obj.lspa.setup_priority",
5882
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5883
14
            NULL, HFILL }
5884
14
        },
5885
14
        { &hf_pcep_lspa_obj_holding_priority,
5886
14
          { "Holding Priority", "pcep.obj.lspa.holding_priority",
5887
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5888
14
            NULL, HFILL }
5889
14
        },
5890
14
        { &hf_pcep_lspa_obj_flags,
5891
14
          { "Flags", "pcep.obj.lspa.flags",
5892
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5893
14
            NULL, HFILL }
5894
14
        },
5895
14
        { &hf_pcep_lspa_obj_reserved,
5896
14
          { "Reserved", "pcep.obj.lspa.reserved",
5897
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5898
14
            NULL, HFILL }
5899
14
        },
5900
14
        { &hf_pcep_svec_obj_reserved,
5901
14
          { "Reserved", "pcep.obj.svec.reserved",
5902
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5903
14
            NULL, HFILL }
5904
14
        },
5905
14
        { &hf_pcep_svec_obj_flags,
5906
14
          { "Flags", "pcep.obj.svec.flags",
5907
14
            FT_UINT24, BASE_HEX, NULL, 0x0,
5908
14
            NULL, HFILL }
5909
14
        },
5910
14
        { &hf_pcep_svec_obj_request_id_number,
5911
14
          { "Request-ID-Number", "pcep.obj.svec.request_id_number",
5912
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
5913
14
            NULL, HFILL }
5914
14
        },
5915
14
        { &hf_pcep_notification_obj_reserved,
5916
14
          { "Reserved", "pcep.obj.notification.reserved",
5917
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5918
14
            NULL, HFILL }
5919
14
        },
5920
14
        { &hf_pcep_notification_obj_flags,
5921
14
          { "Flags", "pcep.obj.notification.flags",
5922
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5923
14
            NULL, HFILL }
5924
14
        },
5925
14
        { &hf_pcep_notification_obj_type,
5926
14
          { "Notification Type", "pcep.obj.notification.type",
5927
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
5928
14
            NULL, HFILL }
5929
14
        },
5930
14
        { &hf_pcep_notification_obj_value,
5931
14
          { "Notification Value", "pcep.obj.notification.value",
5932
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5933
14
            NULL, HFILL }
5934
14
        },
5935
14
        { &hf_pcep_error_obj_reserved,
5936
14
          { "Reserved", "pcep.obj.error.reserved",
5937
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5938
14
            NULL, HFILL }
5939
14
        },
5940
14
        { &hf_pcep_error_obj_flags,
5941
14
          { "Flags", "pcep.obj.error.flags",
5942
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5943
14
            NULL, HFILL }
5944
14
        },
5945
14
        { &hf_pcep_balancing_obj_reserved,
5946
14
          { "Reserved", "pcep.obj.balancing.reserved",
5947
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
5948
14
            NULL, HFILL }
5949
14
        },
5950
14
        { &hf_pcep_balancing_obj_flags,
5951
14
          { "Flags", "pcep.obj.balancing.flags",
5952
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5953
14
            NULL, HFILL }
5954
14
        },
5955
14
        { &hf_pcep_balancing_obj_maximum_number_of_te_lsps,
5956
14
          { "Maximum Number of TE LSPs", "pcep.obj.balancing.maximum_number_of_te_lsps",
5957
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5958
14
            NULL, HFILL }
5959
14
        },
5960
14
        { &hf_pcep_balancing_obj_minimum_bandwidth,
5961
14
          { "Minimum Bandwidth", "pcep.obj.balancing.minimum_bandwidth",
5962
14
            FT_UINT32, BASE_HEX, NULL, 0x0,
5963
14
            NULL, HFILL }
5964
14
        },
5965
14
        { &hf_pcep_close_obj_reserved,
5966
14
          { "Reserved", "pcep.obj.close.reserved",
5967
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
5968
14
            NULL, HFILL }
5969
14
        },
5970
14
        { &hf_pcep_close_obj_flags,
5971
14
          { "Flags", "pcep.obj.close.flags",
5972
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5973
14
            NULL, HFILL }
5974
14
        },
5975
14
        { &hf_pcep_close_obj_reason,
5976
14
          { "Reason", "pcep.obj.close.reason",
5977
14
            FT_UINT8, BASE_DEC, VALS(pcep_close_reason_obj_vals), 0x0,
5978
14
            NULL, HFILL }
5979
14
        },
5980
14
        { &hf_pcep_xro_obj_reserved,
5981
14
          { "Reserved", "pcep.obj.xro.reserved",
5982
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
5983
14
            NULL, HFILL }
5984
14
        },
5985
14
        { &hf_pcep_xro_obj_flags,
5986
14
          { "Flags", "pcep.obj.xro.flags",
5987
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
5988
14
            NULL, HFILL }
5989
14
        },
5990
14
        { &hf_pcep_obj_monitoring_reserved,
5991
14
          { "Reserved", "pcep.obj.monitoring.reserved",
5992
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
5993
14
            NULL, HFILL }
5994
14
        },
5995
14
        { &hf_pcep_obj_monitoring_flags,
5996
14
          { "Flags", "pcep.obj.monitoring.flags",
5997
14
            FT_UINT24, BASE_HEX, NULL, 0x0,
5998
14
            NULL, HFILL }
5999
14
        },
6000
14
        { &hf_pcep_obj_of_code,
6001
14
          { "OF-Code", "pcep.obj.of.code",
6002
14
            FT_UINT16, BASE_DEC, VALS(pcep_of_vals), 0x0,
6003
14
            NULL, HFILL }
6004
14
        },
6005
14
        { &hf_pcep_obj_proc_time_reserved,
6006
14
          { "Reserved", "pcep.obj.proc_time.reserved",
6007
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
6008
14
            NULL, HFILL }
6009
14
        },
6010
14
        { &hf_pcep_obj_proc_time_flags,
6011
14
          { "Flags", "pcep.obj.proc_time.flags",
6012
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
6013
14
            NULL, HFILL }
6014
14
        },
6015
14
        { &hf_pcep_obj_overload_flags,
6016
14
          { "Flags", "pcep.obj.overload.flags",
6017
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
6018
14
            NULL, HFILL }
6019
14
        },
6020
14
        { &hf_pcep_obj_overload_reserved,
6021
14
          { "Reserved", "pcep.obj.overload.reserved",
6022
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
6023
14
            NULL, HFILL }
6024
14
        },
6025
14
        { &hf_pcep_object_type,
6026
14
          { "Object Type", "pcep.object_type",
6027
14
            FT_UINT8, BASE_DEC, NULL, MASK_OBJ_TYPE,
6028
14
            NULL, HFILL }
6029
14
        },
6030
14
        { &hf_pcep_object_length,
6031
14
          { "Object Length", "pcep.object_length",
6032
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
6033
14
            NULL, HFILL }
6034
14
        },
6035
14
        { &hf_pcep_version,
6036
14
          { "PCEP Version", "pcep.version",
6037
14
            FT_UINT8, BASE_HEX, NULL, 0x20,
6038
14
            NULL, HFILL }
6039
14
        },
6040
14
        { &hf_pcep_flags,
6041
14
          { "Flags", "pcep.flags",
6042
14
            FT_UINT8, BASE_HEX, NULL, 0x1F,
6043
14
            NULL, HFILL }
6044
14
        },
6045
14
        { &hf_pcep_message_length,
6046
14
          { "Message length", "pcep.msg_length",
6047
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
6048
14
            NULL, HFILL }
6049
14
        },
6050
14
        { &hf_pcep_of_code,
6051
14
          { "OF-Code", "pcep.of_code",
6052
14
            FT_UINT16, BASE_DEC, VALS(pcep_of_vals), 0x0,
6053
14
            NULL, HFILL }
6054
14
        },
6055
14
        { &hf_pcep_subobj_ipv4_l,
6056
14
          { "L", "pcep.subobj.ipv4.l",
6057
14
            FT_UINT8, BASE_DEC, VALS(pcep_route_l_obj_vals), Mask_L,
6058
14
            NULL, HFILL }
6059
14
        },
6060
14
        { &hf_pcep_subobj_iro_ipv4_l,
6061
14
          { "L", "pcep.iro.subobj.ipv4.l",
6062
14
            FT_UINT8, BASE_HEX, NULL, Mask_L,
6063
14
            NULL, HFILL }
6064
14
        },
6065
14
        { &hf_pcep_subobj_ipv4_x,
6066
14
          { "X", "pcep.subobj.ipv4.x",
6067
14
            FT_UINT8, BASE_HEX, NULL, 0x80,
6068
14
            NULL, HFILL }
6069
14
        },
6070
14
        { &hf_pcep_subobj_ipv6_l,
6071
14
          { "L", "pcep.subobj.ipv6.l",
6072
14
            FT_UINT8, BASE_DEC, VALS(pcep_route_l_obj_vals), Mask_L,
6073
14
            NULL, HFILL }
6074
14
        },
6075
14
        { &hf_pcep_subobj_iro_ipv6_l,
6076
14
          { "L", "pcep.iro.subobj.ipv6.l",
6077
14
            FT_UINT8, BASE_HEX, NULL, Mask_L,
6078
14
            NULL, HFILL }
6079
14
        },
6080
14
        { &hf_pcep_subobj_ipv6_x,
6081
14
          { "X", "pcep.subobj.ipv6.x",
6082
14
            FT_UINT8, BASE_HEX, NULL, 0x80,
6083
14
            NULL, HFILL }
6084
14
        },
6085
14
        { &hf_pcep_subobj_label_control_l,
6086
14
          { "L", "pcep.subobj.label_control.l",
6087
14
            FT_UINT8, BASE_DEC, VALS(pcep_route_l_obj_vals), Mask_L,
6088
14
            NULL, HFILL }
6089
14
        },
6090
14
        { &hf_pcep_subobj_unnumb_interfaceID_l,
6091
14
          { "L", "pcep.subobj.unnumb_interfaceID.l",
6092
14
            FT_UINT8, BASE_DEC, VALS(pcep_route_l_obj_vals), Mask_L,
6093
14
            NULL, HFILL }
6094
14
        },
6095
14
        { &hf_pcep_subobj_iro_unnumb_interfaceID_l,
6096
14
          { "L", "pcep.iro.subobj.unnumb_interfaceID.l",
6097
14
            FT_UINT8, BASE_HEX, NULL, Mask_L,
6098
14
            NULL, HFILL }
6099
14
        },
6100
14
        { &hf_pcep_subobj_unnumb_interfaceID_x,
6101
14
          { "X", "pcep.subobj.unnumb_interfaceID.x",
6102
14
            FT_UINT8, BASE_HEX, NULL, 0x80,
6103
14
            NULL, HFILL }
6104
14
        },
6105
14
        { &hf_pcep_subobj_autonomous_sys_num_x,
6106
14
          { "X", "pcep.subobj.autonomous_sys_num.x",
6107
14
            FT_UINT8, BASE_HEX, NULL, 0x80,
6108
14
            NULL, HFILL }
6109
14
        },
6110
14
        { &hf_pcep_subobj_iro_autonomous_sys_num_l,
6111
14
          { "L", "pcep.iro.subobj.autonomous_sys_num.l",
6112
14
            FT_UINT8, BASE_HEX, NULL, Mask_L,
6113
14
            NULL, HFILL }
6114
14
        },
6115
14
        { &hf_pcep_subobj_autonomous_sys_num_l,
6116
14
          { "L", "pcep.subobj.autonomous_sys_num.l",
6117
14
            FT_UINT8, BASE_DEC, VALS(pcep_route_l_obj_vals), Mask_L,
6118
14
            NULL, HFILL }
6119
14
        },
6120
14
        { &hf_pcep_subobj_srlg_x,
6121
14
          { "X", "pcep.subobj.srlg.x",
6122
14
            FT_UINT8, BASE_HEX, NULL, 0x80,
6123
14
            NULL, HFILL }
6124
14
        },
6125
14
        { &hf_pcep_subobj_exrs_l,
6126
14
          { "L", "pcep.subobj.exrs.l",
6127
14
            FT_UINT8, BASE_DEC, VALS(pcep_route_l_obj_vals), Mask_L,
6128
14
            NULL, HFILL }
6129
14
        },
6130
14
        { &hf_pcep_subobj_exrs_type,
6131
14
          { "Type", "pcep.subobj.exrs.type",
6132
14
            FT_UINT8, BASE_DEC, NULL, 0x7F,
6133
14
            NULL, HFILL }
6134
14
        },
6135
14
        { &hf_pcep_subobj_pksv4_l,
6136
14
          { "L", "pcep.subobj.pksv4.l",
6137
14
            FT_UINT8, BASE_DEC, VALS(pcep_route_l_obj_vals), Mask_L,
6138
14
            NULL, HFILL }
6139
14
        },
6140
14
        { &hf_pcep_subobj_pksv6_l,
6141
14
          { "L", "pcep.subobj.pksv6.l",
6142
14
            FT_UINT8, BASE_DEC, VALS(pcep_route_l_obj_vals), Mask_L,
6143
14
            NULL, HFILL }
6144
14
        },
6145
14
        { &hf_pcep_no_path_obj_nature_of_issue,
6146
14
          { "Nature of Issue", "pcep.obj.no_path.nature_of_issue",
6147
14
            FT_UINT8, BASE_DEC, VALS(pcep_no_path_obj_vals), 0x0,
6148
14
            NULL, HFILL }
6149
14
        },
6150
14
        { &hf_pcep_obj_srp_id_number,
6151
14
          { "SRP-ID-number", "pcep.obj.srp.id-number",
6152
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
6153
14
            NULL, HFILL }
6154
14
        },
6155
14
        { &hf_pcep_obj_lsp_plsp_id,
6156
14
          { "PLSP-ID", "pcep.obj.lsp.plsp-id",
6157
14
            FT_UINT24, BASE_DEC, NULL, PCEP_OBJ_LSP_PLSP_ID,
6158
14
            NULL, HFILL }
6159
14
        },
6160
14
        { &hf_pcep_obj_lsp_flags,
6161
14
          { "Flags", "pcep.obj.lsp.flags",
6162
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
6163
14
            NULL, HFILL }
6164
14
        },
6165
14
        { &hf_pcep_obj_lsp_flags_d,
6166
14
          { "Delegate (D)", "pcep.obj.lsp.flags.delegate",
6167
14
            FT_BOOLEAN, 16, TFS(&tfs_set_notset), PCEP_OBJ_LSP_FLAGS_D,
6168
14
            NULL, HFILL }
6169
14
        },
6170
14
        { &hf_pcep_obj_lsp_flags_s,
6171
14
          { "SYNC (S)", "pcep.obj.lsp.flags.sync",
6172
14
            FT_BOOLEAN, 16, TFS(&tfs_set_notset), PCEP_OBJ_LSP_FLAGS_S,
6173
14
            NULL, HFILL }
6174
14
        },
6175
14
        { &hf_pcep_obj_lsp_flags_r,
6176
14
          { "Remove (R)", "pcep.obj.lsp.flags.remove",
6177
14
            FT_BOOLEAN, 16, TFS(&tfs_set_notset), PCEP_OBJ_LSP_FLAGS_R,
6178
14
            NULL, HFILL }
6179
14
        },
6180
14
        { &hf_pcep_obj_lsp_flags_a,
6181
14
          { "Administrative (A)", "pcep.obj.lsp.flags.administrative",
6182
14
            FT_BOOLEAN, 16, TFS(&tfs_set_notset), PCEP_OBJ_LSP_FLAGS_A,
6183
14
            NULL, HFILL }
6184
14
        },
6185
14
        { &hf_pcep_obj_lsp_flags_o,
6186
14
          { "Operational (O)", "pcep.obj.lsp.flags.operational",
6187
14
            FT_UINT16, BASE_DEC, VALS(pcep_object_lsp_flags_operational_vals), PCEP_OBJ_LSP_FLAGS_O,
6188
14
            NULL, HFILL }
6189
14
        },
6190
14
        { &hf_pcep_obj_lsp_flags_c,
6191
14
          { "Create (C)", "pcep.obj.lsp.flags.create",
6192
14
            FT_BOOLEAN, 16, TFS(&tfs_set_notset), PCEP_OBJ_LSP_FLAGS_C,
6193
14
            NULL, HFILL }
6194
14
        },
6195
14
        { &hf_pcep_obj_lsp_flags_reserved,
6196
14
          { "Reserved", "pcep.obj.lsp.flags.reserved",
6197
14
            FT_BOOLEAN, 16, TFS(&tfs_set_notset), PCEP_OBJ_LSP_FLAGS_RESERVED,
6198
14
            NULL, HFILL }
6199
14
        },
6200
14
        { &hf_pcep_obj_srp_flags,
6201
14
          { "Flags", "pcep.obj.srp.flags",
6202
14
            FT_UINT32, BASE_HEX, NULL, 0x0,
6203
14
            NULL, HFILL }
6204
14
        },
6205
14
        { &hf_pcep_obj_srp_flags_r,
6206
14
          { "Remove (R)", "pcep.obj.srp.flags.remove",
6207
14
            FT_BOOLEAN, 32, TFS(&tfs_set_notset), PCEP_OBJ_SRP_FLAGS_R,
6208
14
            NULL, HFILL }
6209
14
        },
6210
14
        { &hf_pcep_symbolic_path_name,
6211
14
          { "SYMBOLIC-PATH-NAME", "pcep.tlv.symbolic-path-name",
6212
14
            FT_STRING, BASE_NONE, NULL, 0x0,
6213
14
            NULL, HFILL }
6214
14
        },
6215
14
        { &hf_pcep_ipv4_lsp_id_tunnel_sender_address,
6216
14
          { "IPv4 Tunnel Sender Address", "pcep.tlv.ipv4-lsp-id.tunnel-sender-addr",
6217
14
            FT_IPv4, BASE_NONE, NULL, 0x0,
6218
14
            NULL, HFILL }
6219
14
        },
6220
14
        { &hf_pcep_ipv4_lsp_id_lsp_id,
6221
14
          { "LSP ID", "pcep.tlv.ipv4-lsp-id.lsp-id",
6222
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
6223
14
            NULL, HFILL }
6224
14
        },
6225
14
        { &hf_pcep_ipv4_lsp_id_tunnel_id,
6226
14
          { "Tunnel ID", "pcep.tlv.ipv4-lsp-id.tunnel-id",
6227
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
6228
14
            NULL, HFILL }
6229
14
        },
6230
14
        { &hf_pcep_ipv4_lsp_id_extended_tunnel_id,
6231
14
          { "Extended Tunnel ID", "pcep.tlv.ipv4-lsp-id.extended-tunnel-id",
6232
14
            FT_IPv4, BASE_NONE, NULL, 0x0,
6233
14
            NULL, HFILL }
6234
14
        },
6235
14
        { &hf_pcep_ipv4_lsp_id_tunnel_endpoint_address,
6236
14
          { "IPv4 Tunnel Endpoint Address", "pcep.tlv.ipv4-lsp-id.tunnel-endpoint-addr",
6237
14
            FT_IPv4, BASE_NONE, NULL, 0x0,
6238
14
            NULL, HFILL }
6239
14
        },
6240
14
        { &hf_pcep_ipv6_lsp_id_tunnel_sender_address,
6241
14
          { "IPv6 Tunnel Sender Address", "pcep.tlv.ipv6-lsp-id.tunnel-sender-addr",
6242
14
            FT_IPv6, BASE_NONE, NULL, 0x0,
6243
14
            NULL, HFILL }
6244
14
        },
6245
14
        { &hf_pcep_ipv6_lsp_id_lsp_id,
6246
14
          { "LSP ID", "pcep.tlv.ipv6-lsp-id.lsp-id",
6247
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
6248
14
            NULL, HFILL }
6249
14
        },
6250
14
        { &hf_pcep_ipv6_lsp_id_tunnel_id,
6251
14
          { "Tunnel ID", "pcep.tlv.ipv6-lsp-id.tunnel-id",
6252
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
6253
14
            NULL, HFILL }
6254
14
        },
6255
14
        { &hf_pcep_ipv6_lsp_id_extended_tunnel_id,
6256
14
          { "Extended Tunnel ID", "pcep.tlv.ipv6-lsp-id.extended-tunnel-id",
6257
14
            FT_IPv6, BASE_NONE, NULL, 0x0,
6258
14
            NULL, HFILL }
6259
14
        },
6260
14
        { &hf_pcep_ipv6_lsp_id_tunnel_endpoint_address,
6261
14
          { "IPv6 Tunnel Endpoint Address", "pcep.tlv.ipv6-lsp-id.tunnel-endpoint-addr",
6262
14
            FT_IPv6, BASE_NONE, NULL, 0x0,
6263
14
            NULL, HFILL }
6264
14
        },
6265
14
        { &hf_pcep_lsp_error_code,
6266
14
          { "LSP Error Code", "pcep.tlv.lsp-error-code",
6267
14
            FT_UINT32, BASE_DEC, VALS(pcep_tlv_lsp_error_code_vals), 0x0,
6268
14
            NULL, HFILL }
6269
14
        },
6270
14
        { &hf_pcep_rsvp_user_error_spec,
6271
14
          { "RSVP/USER ERROR_SPEC", "pcep.tlv.rsvp-user-error-spec",
6272
14
            FT_STRING, BASE_NONE, NULL, 0x0,
6273
14
            NULL, HFILL }
6274
14
        },
6275
14
        { &hf_pcep_lsp_state_db_version_number,
6276
14
          { "LSP State DB Version Number", "pcep.tlv.lsp-state-db-version-number",
6277
14
            FT_UINT64, BASE_DEC, NULL, 0x0,
6278
14
            NULL, HFILL }
6279
14
        },
6280
14
        { &hf_pcep_speaker_entity_id,
6281
14
          { "Speaker Entity Identifier", "pcep.tlv.speaker-entity-id",
6282
14
            FT_STRING, BASE_NONE, NULL, 0x0,
6283
14
            NULL, HFILL }
6284
14
        },
6285
14
        { &hf_pcep_association_reserved,
6286
14
          { "Reserved", "pcep.association.reserved",
6287
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
6288
14
            NULL, HFILL }
6289
14
        },
6290
14
        { &hf_pcep_association_flags,
6291
14
          { "Flags", "pcep.association.flags",
6292
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
6293
14
            NULL, HFILL }
6294
14
        },
6295
14
        { &hf_pcep_association_flags_r,
6296
14
          { "Remove (R)", "pcep.association.flags.r",
6297
14
            FT_BOOLEAN, 16, TFS(&tfs_set_notset), PCEP_OBJ_ASSOCIATION_FLAGS_R,
6298
14
            NULL, HFILL }
6299
14
        },
6300
14
        { &hf_pcep_association_type,
6301
14
          { "Association Type", "pcep.association.type",
6302
14
            FT_UINT16, BASE_DEC, VALS(pcep_association_type_field_vals), 0x0,
6303
14
            NULL, HFILL }
6304
14
        },
6305
14
        { &hf_pcep_association_id,
6306
14
          { "Association ID", "pcep.association.id",
6307
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
6308
14
            NULL, HFILL }
6309
14
        },
6310
14
        { &hf_pcep_association_source_ipv4,
6311
14
          { "IPv4 Association Source", "pcep.association.ipv4.source",
6312
14
            FT_IPv4, BASE_NONE, NULL, 0x0,
6313
14
            NULL, HFILL }
6314
14
        },
6315
14
        { &hf_pcep_association_source_ipv6,
6316
14
          { "IPv6 Association Source", "pcep.association.ipv6.source",
6317
14
            FT_IPv6, BASE_NONE, NULL, 0x0,
6318
14
            NULL, HFILL }
6319
14
        },
6320
14
        { &hf_pcep_association_source_global,
6321
14
          { "Global Association Source", "pcep.association.global.source",
6322
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
6323
14
            NULL, HFILL }
6324
14
        },
6325
14
        { &hf_pcep_association_id_extended,
6326
14
          { "Extended Association ID", "pcep.tlv.extended_association_id.id",
6327
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
6328
14
            NULL, HFILL }
6329
14
        },
6330
14
        { &hf_pcep_association_id_extended_color,
6331
14
          { "Color", "pcep.tlv.extended_association_id.color",
6332
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
6333
14
            NULL, HFILL }
6334
14
        },
6335
14
        { &hf_pcep_association_id_extended_ipv4_endpoint,
6336
14
          { "IPv4 Endpoint", "pcep.tlv.extended_association_id.ipv4_endpoint",
6337
14
            FT_IPv4, BASE_NONE, NULL, 0x0,
6338
14
            NULL, HFILL }
6339
14
        },
6340
14
        { &hf_pcep_association_id_extended_ipv6_endpoint,
6341
14
          { "IPv6 Endpoint", "pcep.tlv.extended_association_id.ipv6_endpoint",
6342
14
            FT_IPv6, BASE_NONE, NULL, 0x0,
6343
14
            NULL, HFILL }
6344
14
        },
6345
14
        { &hf_pcep_op_conf_assoc_range_reserved,
6346
14
          { "Reserved", "pcep.op_conf_assoc_range.reserved",
6347
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
6348
14
            NULL, HFILL }
6349
14
        },
6350
14
        { &hf_pcep_op_conf_assoc_range_assoc_type,
6351
14
          { "Assoc-Type", "pcep.op_conf_assoc_range.assoc_type",
6352
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
6353
14
            NULL, HFILL }
6354
14
        },
6355
14
        { &hf_pcep_op_conf_assoc_range_start_assoc,
6356
14
          { "Start-Assoc", "pcep.op_conf_assoc_range.start_assoc",
6357
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
6358
14
            NULL, HFILL }
6359
14
        },
6360
14
        { &hf_pcep_op_conf_assoc_range_range,
6361
14
          { "Range", "pcep.op_conf_assoc_range.range",
6362
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
6363
14
            NULL, HFILL }
6364
14
        },
6365
14
        { &hf_pcep_srcpag_info_color,
6366
14
          { "Color", "pcep.srcpag_info.color",
6367
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
6368
14
            NULL, HFILL }
6369
14
        },
6370
14
        { &hf_pcep_srcpag_info_destination_endpoint,
6371
14
          { "Destination End-point", "pcep.srcpag_info.destination_endpoint",
6372
14
            FT_IPv4, BASE_NONE, NULL, 0x0,
6373
14
            NULL, HFILL }
6374
14
        },
6375
14
        { &hf_pcep_srcpag_info_preference,
6376
14
          { "Preference", "pcep.srcpag_info.preference",
6377
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
6378
14
            NULL, HFILL }
6379
14
        },
6380
14
        { &hf_pcep_te_path_binding_bt,
6381
14
          { "Binding Type (BT)", "pcep.tlv.te_path_binding.bt",
6382
14
            FT_UINT8, BASE_DEC, VALS(pcep_te_path_binding_bt_vals), 0x0,
6383
14
            NULL, HFILL }
6384
14
        },
6385
14
        { &hf_pcep_te_path_binding_flags,
6386
14
          { "Flags", "pcep.tlv.te_path_binding.flags",
6387
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
6388
14
            NULL, HFILL }
6389
14
        },
6390
14
        { &hf_pcep_te_path_binding_flags_r,
6391
14
          { "Removal (R)", "pcep.tlv.te_path_binding.flags.r",
6392
14
            FT_BOOLEAN, 8, TFS(&tfs_set_notset), PCEP_TLV_TE_PATH_BINDING_FLAGS_R,
6393
14
            NULL, HFILL }
6394
14
        },
6395
14
        { &hf_pcep_te_path_binding_flags_reserved,
6396
14
          { "Reserved", "pcep.tlv.te_path_binding.flags.reserved",
6397
14
            FT_BOOLEAN, 8, TFS(&tfs_set_notset), PCEP_TLV_TE_PATH_BINDING_FLAGS_RESERVED,
6398
14
            NULL, HFILL }
6399
14
        },
6400
14
        { &hf_pcep_te_path_binding_reserved,
6401
14
          { "Reserved", "pcep.tlv.te_path_binding.reserved",
6402
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
6403
14
            NULL, HFILL }
6404
14
        },
6405
14
        { &hf_pcep_te_path_binding_bsid,
6406
14
          { "Binding SID", "pcep.tlv.te_path_binding.bsid",
6407
14
            FT_NONE, BASE_NONE, NULL, 0x0,
6408
14
            NULL, HFILL }
6409
14
        },
6410
14
        { &hf_pcep_te_path_binding_bsid_label,
6411
14
          { "Label", "pcep.tlv.te_path_binding.bsid.label",
6412
14
            FT_UINT32, BASE_DEC, NULL, PCEP_MPLS_LABEL_STACK_ENTRY_LABEL,
6413
14
            NULL, HFILL }
6414
14
        },
6415
14
        { &hf_pcep_te_path_binding_bsid_tc,
6416
14
          { "TC", "pcep.tlv.te_path_binding.bsid.tc",
6417
14
            FT_UINT32, BASE_DEC, NULL, PCEP_MPLS_LABEL_STACK_ENTRY_TC,
6418
14
            NULL, HFILL }
6419
14
        },
6420
14
        { &hf_pcep_te_path_binding_bsid_s,
6421
14
          { "Bottom of Stack (S)", "pcep.tlv.te_path_binding.bsid.s",
6422
14
            FT_UINT32, BASE_DEC, NULL, PCEP_MPLS_LABEL_STACK_ENTRY_S,
6423
14
            NULL, HFILL }
6424
14
        },
6425
14
        { &hf_pcep_te_path_binding_bsid_ttl,
6426
14
          { "TTL", "pcep.tlv.te_path_binding.bsid.ttl",
6427
14
            FT_UINT32, BASE_DEC, NULL, PCEP_MPLS_LABEL_STACK_ENTRY_TTL,
6428
14
            NULL, HFILL }
6429
14
        },
6430
14
        { &hf_pcep_te_path_binding_bsid_value,
6431
14
          { "Value", "pcep.tlv.te_path_binding.bsid.value",
6432
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
6433
14
            NULL, HFILL }
6434
14
        },
6435
14
        { &hf_pcep_sr_policy_name,
6436
14
          { "SR Policy Name", "pcep.tlv.sr_policy_name",
6437
14
            FT_STRING, BASE_NONE, NULL, 0x0,
6438
14
            NULL, HFILL }
6439
14
        },
6440
14
        { &hf_pcep_sr_policy_cpath_id_proto_origin,
6441
14
          { "Proto origin", "pcep.tlv.sr_policy_cpath_id.proto_origin",
6442
14
            FT_UINT8, BASE_DEC, VALS(pcep_sr_policy_id_proto_origin_vals), 0x0,
6443
14
            NULL, HFILL }
6444
14
        },
6445
14
        { &hf_pcep_sr_policy_cpath_id_originator_asn,
6446
14
          { "Originator ASN", "pcep.tlv.sr_policy_cpath_id.originator_asn",
6447
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
6448
14
            NULL, HFILL }
6449
14
        },
6450
14
        { &hf_pcep_sr_policy_cpath_id_originator_address,
6451
14
          { "IPv4 Originator Address", "pcep.tlv.sr_policy_cpath_id.originator_ipv4_address",
6452
14
            FT_IPv4, BASE_NONE, NULL, 0x0,
6453
14
            NULL, HFILL }
6454
14
        },
6455
14
        { &hf_pcep_sr_policy_cpath_id_discriminator,
6456
14
          { "Discriminator", "pcep.tlv.sr_policy_cpath_id.proto_discriminator",
6457
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
6458
14
            NULL, HFILL }
6459
14
        },
6460
14
        { &hf_pcep_sr_policy_cpath_name,
6461
14
          { "SR Policy Candidate Path Name", "pcep.tlv.sr_policy_cpath_name",
6462
14
            FT_STRING, BASE_NONE, NULL, 0x0,
6463
14
            NULL, HFILL }
6464
14
        },
6465
14
        { &hf_pcep_sr_policy_cpath_preference,
6466
14
          { "Preference", "pcep.tlv.sr_policy_cpath_preference",
6467
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
6468
14
            NULL, HFILL }
6469
14
        },
6470
6471
14
        { &hf_pcep_multipath_number_of_multipaths,
6472
14
          { "Number of Multipaths", "pcep.multipath_cap.number_of_multipaths",
6473
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
6474
14
            NULL, HFILL }
6475
14
        },
6476
14
        { &hf_pcep_multipath_cap_flags,
6477
14
          { "Flags", "pcep.multipath_cap.flags",
6478
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
6479
14
            NULL, HFILL }
6480
14
        },
6481
14
        { &hf_pcep_multipath_weight_capability,
6482
14
          { "MULTIPATH-WEIGHT TLV supported (W)", "pcep.multipath_cap.multipath_weight",
6483
14
            FT_BOOLEAN, 16, NULL, PCEP_TLV_MULTIPATH_CAP_W,
6484
14
            NULL, HFILL }
6485
14
        },
6486
14
        { &hf_pcep_multipath_backup_capability,
6487
14
          { "MULTIPATH-BACKUP TLV supported (B)", "pcep.multipath_cap.multipath_backup",
6488
14
            FT_BOOLEAN, 16, NULL, PCEP_TLV_MULTIPATH_CAP_B,
6489
14
            NULL, HFILL }
6490
14
        },
6491
14
        { &hf_pcep_multipath_oppdir_path_capability,
6492
14
          { "MULTIPATH-OPPDIR-PATH TLV supported (O)", "pcep.multipath_cap.multipath_oppdir_path",
6493
14
            FT_BOOLEAN, 16, NULL, PCEP_TLV_MULTIPATH_CAP_O,
6494
14
            NULL, HFILL }
6495
14
        },
6496
14
        { &hf_pcep_multipath_forward_class_capability,
6497
14
          { "MULTIPATH-FORWARD-CLASS TLV supported (F)", "pcep.multipath_cap.multipath_forward_class",
6498
14
            FT_BOOLEAN, 16, NULL, PCEP_TLV_MULTIPATH_CAP_F,
6499
14
            NULL, HFILL }
6500
14
        },
6501
14
        { &hf_pcep_composite_candidate_path_capability,
6502
14
          { "Composite Candidate Path supported (C)", "pcep.multipath_cap.composite_candidate_class",
6503
14
            FT_BOOLEAN, 16, NULL, PCEP_TLV_MULTIPATH_CAP_C,
6504
14
            NULL, HFILL }
6505
14
        },
6506
14
        { &hf_pcep_multipath_weight,
6507
14
          { "Weight", "pcep.tlv.multipath_weight",
6508
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
6509
14
            NULL, HFILL }
6510
14
        },
6511
6512
14
        { &hf_pcep_enterprise_number,
6513
14
          { "Enterprise Number", "pcep.vendor-information.enterprise-number",
6514
14
           FT_UINT32, BASE_ENTERPRISES, STRINGS_ENTERPRISES, 0x0,
6515
14
           "IANA Private Enterprise Number", HFILL }
6516
14
        },
6517
14
        { &hf_pcep_enterprise_specific_info,
6518
14
          { "Enterprise-Specific Information", "pcep.vendor-information.enterprise-specific-info",
6519
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
6520
14
            NULL, HFILL }
6521
14
        },
6522
14
        { &hf_pcep_tlv_enterprise_number,
6523
14
          { "Enterprise Number", "pcep.tlv.enterprise-number",
6524
14
           FT_UINT32, BASE_ENTERPRISES, STRINGS_ENTERPRISES, 0x0,
6525
14
           "IANA Private Enterprise Number", HFILL }
6526
14
        },
6527
14
        { &hf_pcep_tlv_enterprise_specific_info,
6528
14
          { "Enterprise-Specific Information", "pcep.tlv.enterprise-specific-info",
6529
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
6530
14
            NULL, HFILL }
6531
14
        },
6532
14
        { &hf_pcep_bu_reserved,
6533
14
          { "Reserved", "pcep.obj.bu.reserved",
6534
14
            FT_UINT32, BASE_HEX, NULL, 0x0,
6535
14
            NULL, HFILL }
6536
14
        },
6537
14
        { &hf_pcep_bu_butype,
6538
14
          { "Type", "pcep.obj.bu.butype",
6539
14
            FT_UINT8, BASE_DEC, VALS(pcep_bu_butype_vals), 0x0,
6540
14
            NULL, HFILL }
6541
14
        },
6542
14
        { &hf_pcep_bu_utilization,
6543
14
          { "Bandwidth Utilization", "pcep.obj.bu.utilization",
6544
14
            FT_FLOAT, BASE_NONE, NULL, 0x0,
6545
14
            "The bandwidth utilization quantified as a percentage and encoded in IEEE floating point format", HFILL }
6546
14
        },
6547
14
        { &hf_pcep_obj_open_type,
6548
14
          { "OPEN Object-Type", "pcep.obj.open.type",
6549
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_open_type_vals), MASK_OBJ_TYPE,
6550
14
            NULL, HFILL }
6551
14
        },
6552
6553
14
        { &hf_pcep_obj_rp_type,
6554
14
          { "RP Object-Type", "pcep.obj.rp.type",
6555
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_rp_type_vals), MASK_OBJ_TYPE,
6556
14
            NULL, HFILL }
6557
14
        },
6558
6559
14
        { &hf_pcep_obj_no_path_type,
6560
14
          { "NO-PATH Object-Type", "pcep.obj.nopath.type",
6561
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_no_path_type_vals), MASK_OBJ_TYPE,
6562
14
            NULL, HFILL }
6563
14
        },
6564
6565
14
        { &hf_pcep_obj_end_point_type,
6566
14
          { "END-POINT Object-Type", "pcep.obj.endpoint.type",
6567
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_end_point_type_vals), MASK_OBJ_TYPE,
6568
14
            NULL, HFILL }
6569
14
        },
6570
6571
14
        { &hf_pcep_obj_bandwidth_type,
6572
14
          { "BANDWIDTH Object-Type", "pcep.obj.bandwidth.type",
6573
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_bandwidth_type_vals), MASK_OBJ_TYPE,
6574
14
            NULL, HFILL }
6575
14
        },
6576
6577
14
        { &hf_pcep_obj_metric_type,
6578
14
          { "METRIC Object-Type", "pcep.obj.metric.type",
6579
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_metric_type_vals), MASK_OBJ_TYPE,
6580
14
            NULL, HFILL }
6581
14
        },
6582
6583
14
        { &hf_pcep_obj_explicit_route_type,
6584
14
          { "ERO Object-Type", "pcep.obj.ero.type",
6585
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_explicit_route_type_vals), MASK_OBJ_TYPE,
6586
14
            NULL, HFILL }
6587
14
        },
6588
6589
14
        { &hf_pcep_obj_record_route_type,
6590
14
          { "RRO Object-Type", "pcep.obj.rro.type",
6591
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_record_route_type_vals), MASK_OBJ_TYPE,
6592
14
            NULL, HFILL }
6593
14
        },
6594
6595
14
        { &hf_pcep_obj_lspa_type,
6596
14
          { "LSPA Object-Type", "pcep.obj.lspa.type",
6597
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_lspa_type_vals), MASK_OBJ_TYPE,
6598
14
            NULL, HFILL }
6599
14
        },
6600
6601
14
        { &hf_pcep_obj_iro_type,
6602
14
          { "IRO Object-Type", "pcep.obj.iro.type",
6603
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_iro_type_vals), MASK_OBJ_TYPE,
6604
14
            NULL, HFILL }
6605
14
        },
6606
6607
14
        { &hf_pcep_obj_svec_type,
6608
14
          { "SVEC Object-Type", "pcep.obj.svec.type",
6609
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_svec_type_vals), MASK_OBJ_TYPE,
6610
14
            NULL, HFILL }
6611
14
        },
6612
6613
14
        { &hf_pcep_obj_notification_type,
6614
14
          { "NOTIFICATION Object-Type", "pcep.obj.notification.type",
6615
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_notification_type_vals), MASK_OBJ_TYPE,
6616
14
            NULL, HFILL }
6617
14
        },
6618
6619
14
        { &hf_pcep_obj_pcep_error_type,
6620
14
          { "PCEP-ERROR Object-Type", "pcep.obj.error.type",
6621
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_pcep_error_type_vals), MASK_OBJ_TYPE,
6622
14
            NULL, HFILL }
6623
14
        },
6624
6625
14
        { &hf_pcep_obj_load_balancing_type,
6626
14
          { "LOAD-BALANCING Object-Type", "pcep.obj.loadbalancing.type",
6627
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_load_balancing_type_vals), MASK_OBJ_TYPE,
6628
14
            NULL, HFILL }
6629
14
        },
6630
6631
14
        { &hf_pcep_obj_close_type,
6632
14
          { "CLOSE Object-Type", "pcep.obj.close.type",
6633
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_close_type_vals), MASK_OBJ_TYPE,
6634
14
            NULL, HFILL }
6635
14
        },
6636
6637
14
        { &hf_pcep_obj_path_key_type,
6638
14
          { "PATH-KEY Object-Type", "pcep.obj.path_key.type",
6639
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_path_key_type_vals), MASK_OBJ_TYPE,
6640
14
            NULL, HFILL }
6641
14
        },
6642
6643
14
        { &hf_pcep_obj_xro_type,
6644
14
          { "XRO Object-Type", "pcep.obj.xro.type",
6645
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_xro_type_vals), MASK_OBJ_TYPE,
6646
14
            NULL, HFILL }
6647
14
        },
6648
6649
14
        { &hf_pcep_obj_monitoring_type,
6650
14
          { "MONITORING Object-Type", "pcep.obj.monitoring.type",
6651
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_monitoring_type_vals), MASK_OBJ_TYPE,
6652
14
            NULL, HFILL }
6653
14
        },
6654
6655
14
        { &hf_pcep_obj_pcc_id_req_type,
6656
14
          { "PCC-REQ-ID Object-Type", "pcep.obj.pccidreq.type",
6657
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_pcc_id_req_type_vals), MASK_OBJ_TYPE,
6658
14
            NULL, HFILL }
6659
14
        },
6660
6661
14
        { &hf_pcep_obj_of_type,
6662
14
          { "OF Object-Type", "pcep.obj.of.type",
6663
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_of_type_vals), MASK_OBJ_TYPE,
6664
14
            NULL, HFILL }
6665
14
        },
6666
6667
14
        { &hf_pcep_obj_classtype,
6668
14
          { "CLASSTYPE Type", "pcep.obj.classtype.type",
6669
14
            FT_UINT8, BASE_DEC, NULL, MASK_OBJ_TYPE,
6670
14
            NULL, HFILL }
6671
14
        },
6672
6673
14
        { &hf_pcep_obj_global_constraints,
6674
14
          { "Global-Constraints Type", "pcep.obj.global_constraints.type",
6675
14
            FT_UINT8, BASE_DEC, NULL, MASK_OBJ_TYPE,
6676
14
            NULL, HFILL }
6677
14
        },
6678
6679
14
        { &hf_pcep_obj_pce_id_type,
6680
14
          { "PCE-ID Object-Type", "pcep.obj.pceid.type",
6681
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_pce_id_type_vals), MASK_OBJ_TYPE,
6682
14
            NULL, HFILL }
6683
14
        },
6684
6685
14
        { &hf_pcep_obj_proc_time_type,
6686
14
          { "PROC-TIME Object-Type", "pcep.obj.proctime.type",
6687
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_proc_time_type_vals), MASK_OBJ_TYPE,
6688
14
            NULL, HFILL }
6689
14
        },
6690
6691
14
        { &hf_pcep_obj_overload_type,
6692
14
          { "OVERLOAD Object-Type", "pcep.obj.overload.type",
6693
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_overload_type_vals), MASK_OBJ_TYPE,
6694
14
            NULL, HFILL }
6695
14
        },
6696
6697
14
        { &hf_pcep_obj_unreach_destination_type,
6698
14
          { "UNREACH-DESTINATION Object-Type", "pcep.obj.unreach-destination.type",
6699
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_unreach_destination_type_vals), MASK_OBJ_TYPE,
6700
14
            NULL, HFILL }
6701
14
        },
6702
6703
14
        { &hf_pcep_obj_sero_type,
6704
14
          { "SERO Object-Type", "pcep.obj.sero.type",
6705
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_sero_type_vals), MASK_OBJ_TYPE,
6706
14
            NULL, HFILL }
6707
14
        },
6708
6709
14
        { &hf_pcep_obj_srro_type,
6710
14
          { "SRRO Object-Type", "pcep.obj.srro.type",
6711
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_srro_type_vals), MASK_OBJ_TYPE,
6712
14
            NULL, HFILL }
6713
14
        },
6714
6715
14
        { &hf_pcep_obj_branch_node_capability_type,
6716
14
          { "Branch Node Capability Object-Type", "pcep.obj.branch-node-capability.type",
6717
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_branch_node_capability_type_vals), MASK_OBJ_TYPE,
6718
14
            NULL, HFILL }
6719
14
        },
6720
6721
14
        { &hf_pcep_obj_lsp_type,
6722
14
          { "LSP Object-Type", "pcep.obj.lsp.type",
6723
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_lsp_type_vals), MASK_OBJ_TYPE,
6724
14
            NULL, HFILL }
6725
14
        },
6726
6727
14
        { &hf_pcep_obj_srp_type,
6728
14
          { "SRP Object-Type", "pcep.obj.srp.type",
6729
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_srp_type_vals), MASK_OBJ_TYPE,
6730
14
            NULL, HFILL }
6731
14
        },
6732
6733
14
        { &hf_pcep_obj_vendor_information_type,
6734
14
          { "VENDOR-INFORMATION Object-Type", "pcep.obj.vendor-information.type",
6735
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_vendor_information_type_vals), MASK_OBJ_TYPE,
6736
14
            NULL, HFILL }
6737
14
        },
6738
6739
14
        { &hf_pcep_obj_bu_type,
6740
14
          { "BU Object-Type", "pcep.obj.bu.type",
6741
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_bu_type_vals), MASK_OBJ_TYPE,
6742
14
            NULL, HFILL }
6743
14
        },
6744
6745
14
        { &hf_pcep_obj_inter_layer_type,
6746
14
          { "Inter-Layer Type", "pcep.obj.inter_layer.type",
6747
14
            FT_UINT8, BASE_DEC, NULL, MASK_OBJ_TYPE,
6748
14
            NULL, HFILL }
6749
14
        },
6750
6751
14
        { &hf_pcep_obj_switch_layer_type,
6752
14
          { "Switch-Layer Type", "pcep.obj.switch_layer.type",
6753
14
            FT_UINT8, BASE_DEC, NULL, MASK_OBJ_TYPE,
6754
14
            NULL, HFILL }
6755
14
        },
6756
6757
14
        { &hf_pcep_obj_req_adap_cap_type,
6758
14
          { "REQ_ADAP_CAP Type", "pcep.obj.req_adap_cap.type",
6759
14
            FT_UINT8, BASE_DEC, NULL, MASK_OBJ_TYPE,
6760
14
            NULL, HFILL }
6761
14
        },
6762
6763
14
        { &hf_pcep_obj_server_ind_type,
6764
14
          { "Server-Indication Type", "pcep.obj.server_indication.type",
6765
14
            FT_UINT8, BASE_DEC, NULL, MASK_OBJ_TYPE,
6766
14
            NULL, HFILL }
6767
14
        },
6768
6769
14
        { &hf_pcep_obj_association_type,
6770
14
          { "ASSOCIATION Object-Type", "pcep.obj.association.type",
6771
14
            FT_UINT8, BASE_DEC, VALS(pcep_obj_association_type_vals), MASK_OBJ_TYPE,
6772
14
            NULL, HFILL }
6773
14
        },
6774
6775
14
        { &hf_pcep_obj_s2ls_type,
6776
14
          { "S2LS Type", "pcep.obj.s2ls.type",
6777
14
            FT_UINT8, BASE_DEC, NULL, MASK_OBJ_TYPE,
6778
14
            NULL, HFILL }
6779
14
        },
6780
6781
14
        { &hf_pcep_obj_wa_type,
6782
14
          { "Wavelength Assignment Type", "pcep.obj.wa.type",
6783
14
            FT_UINT8, BASE_DEC, NULL, MASK_OBJ_TYPE,
6784
14
            NULL, HFILL }
6785
14
        },
6786
6787
14
        { &hf_pcep_obj_flowspec_type,
6788
14
          { "Flow Specification Type", "pcep.obj.flowspec.type",
6789
14
            FT_UINT8, BASE_DEC, NULL, MASK_OBJ_TYPE,
6790
14
            NULL, HFILL }
6791
14
        },
6792
6793
14
        { &hf_pcep_obj_cci_type,
6794
14
          { "CCI Object-Type", "pcep.obj.cci_type.type",
6795
14
            FT_UINT8, BASE_DEC, NULL, MASK_OBJ_TYPE,
6796
14
            NULL, HFILL }
6797
14
        },
6798
6799
14
        { &hf_pcep_obj_path_attrib_type,
6800
14
          { "PATH ATTRIB Object-Type", "pcep.obj.path_attrib.type",
6801
14
            FT_UINT8, BASE_DEC, NULL, MASK_OBJ_TYPE,
6802
14
            NULL, HFILL }
6803
14
        },
6804
14
        { &hf_pcep_obj_path_attrib_flags,
6805
14
          { "Flags", "pcep.obj.path_attrib.flags",
6806
14
            FT_UINT32, BASE_HEX, NULL, 0x0,
6807
14
            NULL, HFILL }
6808
14
        },
6809
14
        { &hf_pcep_obj_path_attrib_flags_o,
6810
14
          { "Operational (O)", "pcep.obj.path_attrib.flags.operational",
6811
14
            FT_UINT32, BASE_DEC, VALS(pcep_object_lsp_flags_operational_vals), PCEP_OBJ_PATH_ATTRIB_FLAGS_O,
6812
14
            NULL, HFILL }
6813
14
        },
6814
14
        { &hf_pcep_obj_path_attrib_flags_r,
6815
14
          { "Reverse (R)", "pcep.obj.path_attrib.flags.reverse",
6816
14
            FT_BOOLEAN, 32, TFS(&tfs_set_notset), PCEP_OBJ_PATH_ATTRIB_FLAGS_R,
6817
14
            NULL, HFILL }
6818
14
        },
6819
14
        { &hf_pcep_obj_path_attrib_flags_reserved,
6820
14
          { "Reserved", "pcep.obj.path_attrib.flags.reserved",
6821
14
            FT_BOOLEAN, 32, TFS(&tfs_set_notset), PCEP_OBJ_PATH_ATTRIB_FLAGS_RESERVED,
6822
14
            NULL, HFILL }
6823
14
        },
6824
14
        { &hf_pcep_obj_path_attrib_path_id,
6825
14
          { "Path ID", "pcep.obj.path_attrib.path_id",
6826
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
6827
14
            NULL, HFILL }
6828
14
        },
6829
6830
14
        { &hf_pcep_path_setup_type_capability_sub_tlv_type,
6831
14
          { "Type", "pcep.path-setup-type-capability-sub-tlv.type",
6832
14
            FT_UINT16, BASE_DEC, VALS(pcep_path_setup_type_capability_sub_tlv_vals), 0x0,
6833
14
            NULL, HFILL }
6834
14
        },
6835
6836
14
        { &hf_pcep_path_setup_type_capability_sub_tlv_length,
6837
14
          { "Length", "pcep.path-setup-type-capability-sub-tlv.length",
6838
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
6839
14
            NULL, HFILL }
6840
14
        },
6841
14
    };
6842
6843
14
    static int *ett[] = {
6844
14
        &ett_pcep,
6845
14
        &ett_pcep_hdr,
6846
14
        &ett_pcep_obj_open,
6847
14
        &ett_pcep_obj_request_parameters,
6848
14
        &ett_pcep_obj_no_path,
6849
14
        &ett_pcep_obj_end_point,
6850
14
        &ett_pcep_obj_bandwidth,
6851
14
        &ett_pcep_obj_metric,
6852
14
        &ett_pcep_obj_explicit_route,
6853
14
        &ett_pcep_obj_record_route,
6854
14
        &ett_pcep_obj_lspa,
6855
14
        &ett_pcep_obj_iro,
6856
14
        &ett_pcep_obj_svec,
6857
14
        &ett_pcep_obj_notification,
6858
14
        &ett_pcep_obj_error,
6859
14
        &ett_pcep_obj_load_balancing,
6860
14
        &ett_pcep_obj_close,
6861
14
        &ett_pcep_obj_path_key,
6862
14
        &ett_pcep_obj_xro,
6863
14
        &ett_pcep_obj_monitoring,
6864
14
        &ett_pcep_obj_pcc_id_req,
6865
14
        &ett_pcep_obj_of,
6866
14
        &ett_pcep_obj_classtype,
6867
14
        &ett_pcep_obj_global_constraints,
6868
14
        &ett_pcep_obj_pce_id,
6869
14
        &ett_pcep_obj_proc_time,
6870
14
        &ett_pcep_obj_overload,
6871
14
        &ett_pcep_obj_unreach_destination,
6872
14
        &ett_pcep_obj_sero,
6873
14
        &ett_pcep_obj_srro,
6874
14
        &ett_pcep_obj_branch_node_capability,
6875
14
        &ett_pcep_obj_lsp,
6876
14
        &ett_pcep_obj_srp,
6877
14
        &ett_pcep_obj_vendor_information,
6878
14
        &ett_pcep_obj_bu,
6879
14
        &ett_pcep_obj_inter_layer,
6880
14
        &ett_pcep_obj_switch_layer,
6881
14
        &ett_pcep_obj_req_adap_cap,
6882
14
        &ett_pcep_obj_server_ind,
6883
14
        &ett_pcep_obj_association,
6884
14
        &ett_pcep_obj_s2ls,
6885
14
        &ett_pcep_obj_wa,
6886
14
        &ett_pcep_obj_flowspec,
6887
14
        &ett_pcep_obj_cci_type,
6888
14
        &ett_pcep_obj_path_attrib,
6889
14
        &ett_pcep_obj_unknown,
6890
14
    };
6891
6892
14
    static ei_register_info ei[] = {
6893
        /* Generated from convert_proto_tree_add_text.pl */
6894
14
        { &ei_pcep_subobject_bad_length, { "pcep.subobject_bad_length", PI_MALFORMED, PI_WARN, "Bad subobject length", EXPFILL }},
6895
14
        { &ei_pcep_non_defined_subobject, { "pcep.non_defined_subobject", PI_PROTOCOL, PI_WARN, "Non defined subobject for this object", EXPFILL }},
6896
14
        { &ei_pcep_non_defined_object, { "pcep.unknown_object", PI_PROTOCOL, PI_WARN, "Unknown object", EXPFILL }},
6897
14
        { &ei_pcep_object_length, { "pcep.object_length.bad", PI_MALFORMED, PI_WARN, "Object Length bogus", EXPFILL }},
6898
14
        { &ei_pcep_pcep_object_body_non_defined, { "pcep.object_body_non_defined", PI_PROTOCOL, PI_WARN, "PCEP Object BODY non defined", EXPFILL }},
6899
14
        { &ei_pcep_unknown_type_object, { "pcep.unknown_type_object", PI_PROTOCOL, PI_WARN, "UNKNOWN Type Object", EXPFILL }},
6900
14
    };
6901
6902
14
    expert_module_t* expert_pcep;
6903
6904
    /*Register the protocol name and description*/
6905
14
    proto_pcep = proto_register_protocol (
6906
14
        "Path Computation Element communication Protocol", "PCEP", "pcep");
6907
6908
    /* Required function calls to register the header fields and subtrees used */
6909
14
    proto_register_field_array(proto_pcep, pcepf_info, array_length(pcepf_info));
6910
14
    proto_register_subtree_array(ett, array_length(ett));
6911
14
    expert_pcep = expert_register_protocol(proto_pcep);
6912
14
    expert_register_field_array(expert_pcep, ei, array_length(ei));
6913
6914
    /* Register the dissector handle */
6915
14
    pcep_handle = register_dissector("pcep", dissect_pcep, proto_pcep);
6916
14
}
6917
6918
/*Dissector Handoff*/
6919
void
6920
proto_reg_handoff_pcep(void)
6921
14
{
6922
14
    dissector_add_uint_with_preference("tcp.port", TCP_PORT_PCEP, pcep_handle);
6923
14
}
6924
6925
/*
6926
 * Editor modelines
6927
 *
6928
 * Local Variables:
6929
 * c-basic-offset: 4
6930
 * tab-width: 8
6931
 * indent-tabs-mode: nil
6932
 * End:
6933
 *
6934
 * ex: set shiftwidth=4 tabstop=8 expandtab:
6935
 * :indentSize=4:tabSize=8:noTabs=true:
6936
 */