2 * Copyright (C) 2020 NetDEF, Inc.
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the Free
6 * Software Foundation; either version 2 of the License, or (at your option)
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * You should have received a copy of the GNU General Public License along
15 * with this program; see the file COPYING; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24 #include <libyang/libyang.h>
29 #include "pathd/path_pcep_debug.h"
31 static void _format_pcc_opts(int ps
, struct pcc_opts
*ops
);
32 static void _format_pce_opts(int ps
, struct pce_opts
*ops
);
33 static void _format_pcc_caps(int ps
, struct pcep_caps
*caps
);
34 static void _format_pcc_state(int ps
, struct pcc_state
*state
);
35 static void _format_ctrl_state(int ps
, struct ctrl_state
*state
);
36 static void _format_path(int ps
, struct path
*path
);
37 static void _format_path_hop(int ps
, struct path_hop
*hop
);
38 static void _format_path_metric(int ps
, struct path_metric
*metric
);
39 static void _format_pcep_event(int ps
, pcep_event
*event
);
40 static void _format_pcep_message(int ps
, struct pcep_message
*msg
);
41 static void _format_pcep_objects(int ps
, double_linked_list
*objs
);
42 static void _format_pcep_object(int ps
, struct pcep_object_header
*obj
);
43 static void _format_pcep_object_details(int ps
, struct pcep_object_header
*obj
);
44 static void _format_pcep_object_error(int ps
, struct pcep_object_error
*obj
);
45 static void _format_pcep_object_open(int ps
, struct pcep_object_open
*obj
);
46 static void _format_pcep_object_rp(int ps
, struct pcep_object_rp
*obj
);
47 static void _format_pcep_object_srp(int ps
, struct pcep_object_srp
*obj
);
48 static void _format_pcep_object_lsp(int psps
, struct pcep_object_lsp
*obj
);
49 static void _format_pcep_object_lspa(int psps
, struct pcep_object_lspa
*obj
);
51 _format_pcep_object_ipv4_endpoint(int ps
,
52 struct pcep_object_endpoints_ipv4
*obj
);
53 static void _format_pcep_object_metric(int ps
, struct pcep_object_metric
*obj
);
54 static void _format_pcep_object_bandwidth(int ps
,
55 struct pcep_object_bandwidth
*obj
);
56 static void _format_pcep_object_nopath(int ps
, struct pcep_object_nopath
*obj
);
58 _format_pcep_object_objfun(int ps
, struct pcep_object_objective_function
*obj
);
59 static void _format_pcep_object_ro(int ps
, struct pcep_object_ro
*obj
);
60 static void _format_pcep_object_ro_details(int ps
,
61 struct pcep_object_ro_subobj
*ro
);
62 static void _format_pcep_object_ro_ipv4(int ps
,
63 struct pcep_ro_subobj_ipv4
*obj
);
64 static void _format_pcep_object_ro_sr(int ps
, struct pcep_ro_subobj_sr
*obj
);
65 static void _format_pcep_object_tlvs(int ps
, struct pcep_object_header
*obj
);
66 static void _format_pcep_object_tlv(int ps
,
67 struct pcep_object_tlv_header
*tlv_header
);
69 _format_pcep_object_tlv_details(int ps
,
70 struct pcep_object_tlv_header
*tlv_header
);
71 static void _format_pcep_object_tlv_symbolic_path_name(
72 int ps
, struct pcep_object_tlv_symbolic_path_name
*tlv
);
73 static void _format_pcep_object_tlv_stateful_pce_capability(
74 int ps
, struct pcep_object_tlv_stateful_pce_capability
*tlv
);
75 static void _format_pcep_object_tlv_sr_pce_capability(
76 int ps
, struct pcep_object_tlv_sr_pce_capability
*tlv
);
77 static void _format_pcep_object_tlv_path_setup_type(
78 int ps
, struct pcep_object_tlv_path_setup_type
*tlv
);
80 const char *pcc_status_name(enum pcc_status status
)
83 case PCEP_PCC_INITIALIZED
:
85 case PCEP_PCC_DISCONNECTED
:
86 return "DISCONNECTED";
87 case PCEP_PCC_CONNECTING
:
89 case PCEP_PCC_SYNCHRONIZING
:
90 return "SYNCHRONIZING";
91 case PCEP_PCC_OPERATING
:
98 const char *pcep_event_type_name(pcep_event_type event_type
)
100 switch (event_type
) {
101 case MESSAGE_RECEIVED
:
102 return "MESSAGE_RECEIVED";
103 case PCE_CLOSED_SOCKET
:
104 return "PCE_CLOSED_SOCKET";
105 case PCE_SENT_PCEP_CLOSE
:
106 return "PCE_SENT_PCEP_CLOSE";
107 case PCE_DEAD_TIMER_EXPIRED
:
108 return "PCE_DEAD_TIMER_EXPIRED";
109 case PCE_OPEN_KEEP_WAIT_TIMER_EXPIRED
:
110 return "PCE_OPEN_KEEP_WAIT_TIMER_EXPIRED";
111 case PCC_CONNECTED_TO_PCE
:
112 return "PCC_CONNECTED_TO_PCE";
113 case PCC_PCEP_SESSION_CLOSED
:
114 return "PCC_PCEP_SESSION_CLOSED";
115 case PCC_RCVD_INVALID_OPEN
:
116 return "PCC_RCVD_INVALID_OPEN";
117 case PCC_RCVD_MAX_INVALID_MSGS
:
118 return "PCC_RCVD_MAX_INVALID_MSGS";
119 case PCC_RCVD_MAX_UNKOWN_MSGS
:
120 return "PCC_RCVD_MAX_UNKOWN_MSGS";
126 const char *pcep_error_type_name(enum pcep_error_type error_type
)
128 switch (error_type
) {
130 case PCEP_ERRT_SESSION_FAILURE
:
131 return "SESSION_FAILURE";
132 case PCEP_ERRT_CAPABILITY_NOT_SUPPORTED
:
133 return "CAPABILITY_NOT_SUPPORTED";
134 case PCEP_ERRT_UNKNOW_OBJECT
:
135 return "UNKNOW_OBJECT";
136 case PCEP_ERRT_NOT_SUPPORTED_OBJECT
:
137 return "NOT_SUPPORTED_OBJECT";
138 case PCEP_ERRT_POLICY_VIOLATION
:
139 return "POLICY_VIOLATION";
140 case PCEP_ERRT_MANDATORY_OBJECT_MISSING
:
141 return "MANDATORY_OBJECT_MISSING";
142 case PCEP_ERRT_SYNC_PC_REQ_MISSING
:
143 return "SYNC_PC_REQ_MISSING";
144 case PCEP_ERRT_UNKNOWN_REQ_REF
:
145 return "UNKNOWN_REQ_REF";
146 case PCEP_ERRT_ATTEMPT_TO_ESTABLISH_2ND_PCEP_SESSION
:
147 return "ATTEMPT_TO_ESTABLISH_2ND_PCEP_SESSION";
148 case PCEP_ERRT_RECEPTION_OF_INV_OBJECT
:
149 return "RECEPTION_OF_INV_OBJECT";
150 case PCEP_ERRT_UNRECOGNIZED_EXRS_SUBOBJ
:
151 return "UNRECOGNIZED_EXRS_SUBOBJ";
152 case PCEP_ERRT_DIFFSERV_AWARE_TE_ERROR
:
153 return "DIFFSERV_AWARE_TE_ERROR";
154 case PCEP_ERRT_BRPC_PROC_COMPLETION_ERROR
:
155 return "BRPC_PROC_COMPLETION_ERROR";
156 case PCEP_ERRT_UNASSIGNED14
:
157 return "UNASSIGNED14";
158 case PCEP_ERRT_GLOBAL_CONCURRENT_ERROR
:
159 return "GLOBAL_CONCURRENT_ERROR";
160 case PCEP_ERRT_P2PMP_CAP_ERROR
:
161 return "P2PMP_CAP_ERROR";
162 case PCEP_ERRT_P2P_ENDPOINTS_ERROR
:
163 return "P2P_ENDPOINTS_ERROR";
164 case PCEP_ERRT_P2P_FRAGMENTATION_ERROR
:
165 return "P2P_FRAGMENTATION_ERROR";
166 case PCEP_ERRT_INVALID_OPERATION
:
167 return "INVALID_OPERATION";
168 case PCEP_ERRT_LSP_STATE_SYNC_ERROR
:
169 return "LSP_STATE_SYNC_ERROR";
170 case PCEP_ERRT_INVALID_TE_PATH_SETUP_TYPE
:
171 return "INVALID_TE_PATH_SETUP_TYPE";
172 case PCEP_ERRT_UNASSIGNED22
:
173 return "UNASSIGNED22";
174 case PCEP_ERRT_BAD_PARAMETER_VALUE
:
175 return "BAD_PARAMETER_VALUE";
176 case PCEP_ERRT_LSP_INSTANTIATE_ERROR
:
177 return "LSP_INSTANTIATE_ERROR";
178 case PCEP_ERRT_START_TLS_FAILURE
:
179 return "START_TLS_FAILURE";
180 case PCEP_ERRT_ASSOCIATION_ERROR
:
181 return "ASSOCIATION_ERROR";
182 case PCEP_ERRT_WSON_RWA_ERROR
:
183 return "WSON_RWA_ERROR";
184 case PCEP_ERRT_H_PCE_ERROR
:
185 return "H_PCE_ERROR";
186 case PCEP_ERRT_PATH_COMP_FAILURE
:
187 return "PATH_COMP_FAILURE";
188 case PCEP_ERRT_UNASSIGNED30
:
189 return "UNASSIGNED30";
195 const char *pcep_error_value_name(enum pcep_error_type error_type
,
196 enum pcep_error_value error_value
)
198 switch (TUP(error_type
, error_value
)) {
200 case TUP(PCEP_ERRT_CAPABILITY_NOT_SUPPORTED
, PCEP_ERRV_UNASSIGNED
):
201 case TUP(PCEP_ERRT_SYNC_PC_REQ_MISSING
, PCEP_ERRV_UNASSIGNED
):
202 case TUP(PCEP_ERRT_UNKNOWN_REQ_REF
, PCEP_ERRV_UNASSIGNED
):
203 case TUP(PCEP_ERRT_ATTEMPT_TO_ESTABLISH_2ND_PCEP_SESSION
,
204 PCEP_ERRV_UNASSIGNED
):
205 case TUP(PCEP_ERRT_UNRECOGNIZED_EXRS_SUBOBJ
, PCEP_ERRV_UNASSIGNED
):
208 case TUP(PCEP_ERRT_SESSION_FAILURE
, PCEP_ERRV_RECVD_INVALID_OPEN_MSG
):
209 return "RECVD_INVALID_OPEN_MSG";
210 case TUP(PCEP_ERRT_SESSION_FAILURE
, PCEP_ERRV_OPENWAIT_TIMED_OUT
):
211 return "OPENWAIT_TIMED_OUT";
212 case TUP(PCEP_ERRT_SESSION_FAILURE
,
213 PCEP_ERRV_UNACCEPTABLE_OPEN_MSG_NO_NEG
):
214 return "UNACCEPTABLE_OPEN_MSG_NO_NEG";
215 case TUP(PCEP_ERRT_SESSION_FAILURE
,
216 PCEP_ERRV_UNACCEPTABLE_OPEN_MSG_NEG
):
217 return "UNACCEPTABLE_OPEN_MSG_NEG";
218 case TUP(PCEP_ERRT_SESSION_FAILURE
,
219 PCEP_ERRV_RECVD_SECOND_OPEN_MSG_UNACCEPTABLE
):
220 return "RECVD_SECOND_OPEN_MSG_UNACCEPTABLE";
221 case TUP(PCEP_ERRT_SESSION_FAILURE
, PCEP_ERRV_RECVD_PCERR
):
222 return "RECVD_PCERR";
223 case TUP(PCEP_ERRT_SESSION_FAILURE
, PCEP_ERRV_KEEPALIVEWAIT_TIMED_OUT
):
224 return "KEEPALIVEWAIT_TIMED_OUT";
225 case TUP(PCEP_ERRT_SESSION_FAILURE
,
226 PCEP_ERRV_PCEP_VERSION_NOT_SUPPORTED
):
227 return "PCEP_VERSION_NOT_SUPPORTED";
229 case TUP(PCEP_ERRT_UNKNOW_OBJECT
, PCEP_ERRV_UNREC_OBJECT_CLASS
):
230 return "UNREC_OBJECT_CLASS";
231 case TUP(PCEP_ERRT_UNKNOW_OBJECT
, PCEP_ERRV_UNREC_OBJECT_TYPE
):
232 return "UNREC_OBJECT_TYPE";
234 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
235 PCEP_ERRV_NOT_SUPPORTED_OBJECT_CLASS
):
236 return "NOT_SUPPORTED_OBJECT_CLASS";
237 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
238 PCEP_ERRV_NOT_SUPPORTED_OBJECT_TYPE
):
239 return "NOT_SUPPORTED_OBJECT_TYPE";
240 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
, PCEP_ERRV_UNSUPPORTED_PARAM
):
241 return "UNSUPPORTED_PARAM";
242 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
243 PCEP_ERRV_UNSUPPORTED_NW_PERF_CONSTRAINT
):
244 return "UNSUPPORTED_NW_PERF_CONSTRAINT";
245 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
246 PCEP_ERRV_NOT_SUPPORTED_BW_OBJECT_3_4
):
247 return "NOT_SUPPORTED_BW_OBJECT_3_4";
248 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
249 PCEP_ERRV_UNSUPPORTED_ENDPOINT_TYPE
):
250 return "UNSUPPORTED_ENDPOINT_TYPE";
251 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
252 PCEP_ERRV_UNSUPPORTED_ENDPOINT_TLV
):
253 return "UNSUPPORTED_ENDPOINT_TLV";
254 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
255 PCEP_ERRV_UNSUPPORTED_RP_FLAG_GRANULARITY
):
256 return "UNSUPPORTED_RP_FLAG_GRANULARITY";
258 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
259 PCEP_ERRV_C_BIT_SET_IN_METRIC_OBJECT
):
260 return "C_BIT_SET_IN_METRIC_OBJECT";
261 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
262 PCEP_ERRV_O_BIT_CLEARD_IN_RP_OBJECT
):
263 return "O_BIT_CLEARD_IN_RP_OBJECT";
264 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
265 PCEP_ERRV_OBJECTIVE_FUNC_NOT_ALLOWED
):
266 return "OBJECTIVE_FUNC_NOT_ALLOWED";
267 case TUP(PCEP_ERRT_POLICY_VIOLATION
, PCEP_ERRV_RP_OF_BIT_SET
):
268 return "RP_OF_BIT_SET";
269 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
270 PCEP_ERRV_GLOBAL_CONCURRENCY_NOT_ALLOWED
):
271 return "GLOBAL_CONCURRENCY_NOT_ALLOWED";
272 case TUP(PCEP_ERRT_POLICY_VIOLATION
, PCEP_ERRV_MONITORING_MSG_REJECTED
):
273 return "MONITORING_MSG_REJECTED";
274 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
275 PCEP_ERRV_P2MP_PATH_COMP_NOT_ALLOWED
):
276 return "P2MP_PATH_COMP_NOT_ALLOWED";
277 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
278 PCEP_ERRV_UNALLOWED_NW_PERF_CONSTRAINT
):
279 return "UNALLOWED_NW_PERF_CONSTRAINT";
281 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
282 PCEP_ERRV_RP_OBJECT_MISSING
):
283 return "RP_OBJECT_MISSING";
284 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
285 PCEP_ERRV_RRO_OBJECT_MISSING_FOR_REOP
):
286 return "RRO_OBJECT_MISSING_FOR_REOP";
287 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
288 PCEP_ERRV_EP_OBJECT_MISSING
):
289 return "EP_OBJECT_MISSING";
290 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
291 PCEP_ERRV_MONITOR_OBJECT_MISSING
):
292 return "MONITOR_OBJECT_MISSING";
293 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
294 PCEP_ERRV_LSP_OBJECT_MISSING
):
295 return "LSP_OBJECT_MISSING";
296 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
297 PCEP_ERRV_ERO_OBJECT_MISSING
):
298 return "ERO_OBJECT_MISSING";
299 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
300 PCEP_ERRV_SRP_OBJECT_MISSING
):
301 return "SRP_OBJECT_MISSING";
302 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
303 PCEP_ERRV_LSP_ID_TLV_MISSING
):
304 return "LSP_ID_TLV_MISSING";
305 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
306 PCEP_ERRV_LSP_DB_TLV_MISSING
):
307 return "LSP_DB_TLV_MISSING";
308 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
309 PCEP_ERRV_S2LS_OBJECT_MISSING
):
310 return "S2LS_OBJECT_MISSING";
311 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
312 PCEP_ERRV_P2MP_LSP_ID_TLV_MISSING
):
313 return "P2MP_LSP_ID_TLV_MISSING";
314 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
315 PCEP_ERRV_DISJOINTED_CONF_TLV_MISSING
):
316 return "DISJOINTED_CONF_TLV_MISSING";
318 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
319 PCEP_ERRV_P_FLAG_NOT_CORRECT_IN_OBJECT
):
320 return "P_FLAG_NOT_CORRECT_IN_OBJECT";
321 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_BAD_LABEL_VALUE
):
322 return "BAD_LABEL_VALUE";
323 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
324 PCEP_ERRV_UNSUPPORTED_NUM_SR_ERO_SUBOBJECTS
):
325 return "UNSUPPORTED_NUM_SR_ERO_SUBOBJECTS";
326 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_BAD_LABEL_FORMAT
):
327 return "BAD_LABEL_FORMAT";
328 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_ERO_SR_ERO_MIX
):
329 return "ERO_SR_ERO_MIX";
330 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
331 PCEP_ERRV_SR_ERO_SID_NAI_ABSENT
):
332 return "SR_ERO_SID_NAI_ABSENT";
333 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
334 PCEP_ERRV_SR_RRO_SID_NAI_ABSENT
):
335 return "SR_RRO_SID_NAI_ABSENT";
336 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
337 PCEP_ERRV_SYMBOLIC_PATH_NAME_TLV_MISSING
):
338 return "SYMBOLIC_PATH_NAME_TLV_MISSING";
339 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
340 PCEP_ERRV_MSD_EXCEEDS_PCEP_SESSION_MAX
):
341 return "MSD_EXCEEDS_PCEP_SESSION_MAX";
342 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_RRO_SR_RRO_MIX
):
343 return "RRO_SR_RRO_MIX";
344 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_MALFORMED_OBJECT
):
345 return "MALFORMED_OBJECT";
346 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
347 PCEP_ERRV_MISSING_PCE_SR_CAP_TLV
):
348 return "MISSING_PCE_SR_CAP_TLV";
349 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_UNSUPPORTED_NAI
):
350 return "UNSUPPORTED_NAI";
351 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_UNKNOWN_SID
):
352 return "UNKNOWN_SID";
353 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
354 PCEP_ERRV_CANNOT_RESOLVE_NAI_TO_SID
):
355 return "CANNOT_RESOLVE_NAI_TO_SID";
356 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
357 PCEP_ERRV_COULD_NOT_FIND_SRGB
):
358 return "COULD_NOT_FIND_SRGB";
359 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_SID_EXCEEDS_SRGB
):
360 return "SID_EXCEEDS_SRGB";
361 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
362 PCEP_ERRV_COULD_NOT_FIND_SRLB
):
363 return "COULD_NOT_FIND_SRLB";
364 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_SID_EXCEEDS_SRLB
):
365 return "SID_EXCEEDS_SRLB";
366 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_INCONSISTENT_SID
):
367 return "INCONSISTENT_SID";
368 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
369 PCEP_ERRV_MSD_MUST_BE_NONZERO
):
370 return "MSD_MUST_BE_NONZERO";
371 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
372 PCEP_ERRV_MISMATCH_O_S2LS_LSP
):
373 return "MISMATCH_O_S2LS_LSP";
374 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
375 PCEP_ERRV_INCOMPATIBLE_H_PCE_OF
):
376 return "INCOMPATIBLE_H_PCE_OF";
377 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
378 PCEP_ERRV_BAD_BANDWIDTH_TYPE_3_4
):
379 return "BAD_BANDWIDTH_TYPE_3_4";
380 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
381 PCEP_ERRV_UNSUPPORTED_LSP_PROT_FLAGS
):
382 return "UNSUPPORTED_LSP_PROT_FLAGS";
383 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
384 PCEP_ERRV_UNSUPPORTED_2ND_LSP_PROT_FLAGS
):
385 return "UNSUPPORTED_2ND_LSP_PROT_FLAGS";
386 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
387 PCEP_ERRV_UNSUPPORTED_LINK_PROT_TYPE
):
388 return "UNSUPPORTED_LINK_PROT_TYPE";
389 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
390 PCEP_ERRV_LABEL_SET_TLV_NO_RP_R
):
391 return "LABEL_SET_TLV_NO_RP_R";
392 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
393 PCEP_ERRV_WRONG_LABEL_SET_TLV_O_L_SET
):
394 return "WRONG_LABEL_SET_TLV_O_L_SET";
395 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
396 PCEP_ERRV_WRONG_LABEL_SET_O_SET
):
397 return "WRONG_LABEL_SET_O_SET";
398 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
399 PCEP_ERRV_MISSING_GMPLS_CAP_TLV
):
400 return "MISSING_GMPLS_CAP_TLV";
401 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
402 PCEP_ERRV_INCOMPATIBLE_OF_CODE
):
403 return "INCOMPATIBLE_OF_CODE";
405 case TUP(PCEP_ERRT_DIFFSERV_AWARE_TE_ERROR
,
406 PCEP_ERRV_UNSUPPORTED_CLASS_TYPE
):
407 return "UNSUPPORTED_CLASS_TYPE";
408 case TUP(PCEP_ERRT_DIFFSERV_AWARE_TE_ERROR
,
409 PCEP_ERRV_INVALID_CLASS_TYPE
):
410 return "INVALID_CLASS_TYPE";
411 case TUP(PCEP_ERRT_DIFFSERV_AWARE_TE_ERROR
,
412 PCEP_ERRV_CLASS_SETUP_TYPE_NOT_TE_CLASS
):
413 return "CLASS_SETUP_TYPE_NOT_TE_CLASS";
415 case TUP(PCEP_ERRT_BRPC_PROC_COMPLETION_ERROR
,
416 PCEP_ERRV_BRPC_PROC_NOT_SUPPORTED
):
417 return "BRPC_PROC_NOT_SUPPORTED";
419 case TUP(PCEP_ERRT_GLOBAL_CONCURRENT_ERROR
,
420 PCEP_ERRV_INSUFFICIENT_MEMORY
):
421 return "INSUFFICIENT_MEMORY";
422 case TUP(PCEP_ERRT_GLOBAL_CONCURRENT_ERROR
,
423 PCEP_ERRV_GLOBAL_CONCURRENT_OPT_NOT_SUPPORTED
):
424 return "GLOBAL_CONCURRENT_OPT_NOT_SUPPORTED";
426 case TUP(PCEP_ERRT_P2PMP_CAP_ERROR
, PCEP_ERRV_PCE_INSUFFICIENT_MEMORY
):
427 return "PCE_INSUFFICIENT_MEMORY";
428 case TUP(PCEP_ERRT_P2PMP_CAP_ERROR
,
429 PCEP_ERRV_PCE_NOT_CAPABLE_P2MP_COMP
):
430 return "PCE_NOT_CAPABLE_P2MP_COMP";
432 case TUP(PCEP_ERRT_P2P_ENDPOINTS_ERROR
,
433 PCEP_ERRV_NO_EP_WITH_LEAF_TYPE2
):
434 return "NO_EP_WITH_LEAF_TYPE2";
435 case TUP(PCEP_ERRT_P2P_ENDPOINTS_ERROR
,
436 PCEP_ERRV_NO_EP_WITH_LEAF_TYPE3
):
437 return "NO_EP_WITH_LEAF_TYPE3";
438 case TUP(PCEP_ERRT_P2P_ENDPOINTS_ERROR
,
439 PCEP_ERRV_NO_EP_WITH_LEAF_TYPE4
):
440 return "NO_EP_WITH_LEAF_TYPE4";
441 case TUP(PCEP_ERRT_P2P_ENDPOINTS_ERROR
, PCEP_ERRV_INCONSITENT_EP
):
442 return "INCONSITENT_EP";
444 case TUP(PCEP_ERRT_P2P_FRAGMENTATION_ERROR
,
445 PCEP_ERRV_FRAG_REQUEST_FAILURE
):
446 return "FRAG_REQUEST_FAILURE";
447 case TUP(PCEP_ERRT_P2P_FRAGMENTATION_ERROR
,
448 PCEP_ERRV_FRAG_REPORT_FAILURE
):
449 return "FRAG_REPORT_FAILURE";
450 case TUP(PCEP_ERRT_P2P_FRAGMENTATION_ERROR
,
451 PCEP_ERRV_FRAG_UPDATE_FAILURE
):
452 return "FRAG_UPDATE_FAILURE";
453 case TUP(PCEP_ERRT_P2P_FRAGMENTATION_ERROR
,
454 PCEP_ERRV_FRAG_INSTANTIATION_FAILURE
):
455 return "FRAG_INSTANTIATION_FAILURE";
457 case TUP(PCEP_ERRT_INVALID_OPERATION
,
458 PCEP_ERRV_LSP_UPDATE_FOR_NON_DELEGATED_LSP
):
459 return "LSP_UPDATE_FOR_NON_DELEGATED_LS";
460 case TUP(PCEP_ERRT_INVALID_OPERATION
,
461 PCEP_ERRV_LSP_UPDATE_NON_ADVERTISED_PCE
):
462 return "LSP_UPDATE_NON_ADVERTISED_PC";
463 case TUP(PCEP_ERRT_INVALID_OPERATION
,
464 PCEP_ERRV_LSP_UPDATE_UNKNOWN_PLSP_ID
):
465 return "LSP_UPDATE_UNKNOWN_PLSP_I";
466 case TUP(PCEP_ERRT_INVALID_OPERATION
,
467 PCEP_ERRV_LSP_REPORT_NON_ADVERTISED_PCE
):
468 return "LSP_REPORT_NON_ADVERTISED_PC";
469 case TUP(PCEP_ERRT_INVALID_OPERATION
,
470 PCEP_ERRV_PCE_INIT_LSP_LIMIT_REACHED
):
471 return "PCE_INIT_LSP_LIMIT_REACHE";
472 case TUP(PCEP_ERRT_INVALID_OPERATION
,
473 PCEP_ERRV_PCE_INIT_LSP_DELEGATION_CANT_REVOKE
):
474 return "PCE_INIT_LSP_DELEGATION_CANT_REVOK";
475 case TUP(PCEP_ERRT_INVALID_OPERATION
,
476 PCEP_ERRV_LSP_INIT_NON_ZERO_PLSP_ID
):
477 return "LSP_INIT_NON_ZERO_PLSP_I";
478 case TUP(PCEP_ERRT_INVALID_OPERATION
, PCEP_ERRV_LSP_NOT_PCE_INITIATED
):
479 return "LSP_NOT_PCE_INITIATE";
480 case TUP(PCEP_ERRT_INVALID_OPERATION
,
481 PCEP_ERRV_PCE_INIT_OP_FREQ_LIMIT_REACHED
):
482 return "PCE_INIT_OP_FREQ_LIMIT_REACHE";
483 case TUP(PCEP_ERRT_INVALID_OPERATION
,
484 PCEP_ERRV_LSP_REPORT_P2MP_NOT_ADVERTISED
):
485 return "LSP_REPORT_P2MP_NOT_ADVERTISE";
486 case TUP(PCEP_ERRT_INVALID_OPERATION
,
487 PCEP_ERRV_LSP_UPDATE_P2MP_NOT_ADVERTISED
):
488 return "LSP_UPDATE_P2MP_NOT_ADVERTISE";
489 case TUP(PCEP_ERRT_INVALID_OPERATION
,
490 PCEP_ERRV_LSP_INSTANTIATION_P2MP_NOT_ADVERTISED
):
491 return "LSP_INSTANTIATION_P2MP_NOT_ADVERTISE";
492 case TUP(PCEP_ERRT_INVALID_OPERATION
,
493 PCEP_ERRV_AUTO_BW_CAP_NOT_ADVERTISED
):
494 return "AUTO_BW_CAP_NOT_ADVERTISE";
496 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
497 PCEP_ERRV_PCE_CANT_PROCESS_LSP_REPORT
):
498 return "PCE_CANT_PROCESS_LSP_REPORT";
499 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
500 PCEP_ERRV_LSP_DB_VERSION_MISMATCH
):
501 return "LSP_DB_VERSION_MISMATCH";
502 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
503 PCEP_ERRV_TRIGGER_ATTEMPT_BEFORE_PCE_TRIGGER
):
504 return "TRIGGER_ATTEMPT_BEFORE_PCE_TRIGGER";
505 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
506 PCEP_ERRV_TRIGGER_ATTEMPT_NO_PCE_TRIGGER_CAP
):
507 return "TRIGGER_ATTEMPT_NO_PCE_TRIGGER_CAP";
508 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
509 PCEP_ERRV_PCC_CANT_COMPLETE_STATE_SYNC
):
510 return "PCC_CANT_COMPLETE_STATE_SYNC";
511 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
512 PCEP_ERRV_INVALID_LSP_DB_VERSION_NUMBER
):
513 return "INVALID_LSP_DB_VERSION_NUMBER";
514 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
515 PCEP_ERRV_INVALID_SPEAKER_ENTITY_ID
):
516 return "INVALID_SPEAKER_ENTITY_ID";
518 case TUP(PCEP_ERRT_INVALID_TE_PATH_SETUP_TYPE
,
519 PCEP_ERRV_UNSUPPORTED_PATH_SETUP_TYPE
):
520 return "UNSUPPORTED_PATH_SETUP_TYPE";
521 case TUP(PCEP_ERRT_INVALID_TE_PATH_SETUP_TYPE
,
522 PCEP_ERRV_MISMATCHED_PATH_SETUP_TYPE
):
523 return "MISMATCHED_PATH_SETUP_TYPE";
525 case TUP(PCEP_ERRT_BAD_PARAMETER_VALUE
,
526 PCEP_ERRV_SYMBOLIC_PATH_NAME_IN_USE
):
527 return "SYMBOLIC_PATH_NAME_IN_USE";
528 case TUP(PCEP_ERRT_BAD_PARAMETER_VALUE
,
529 PCEP_ERRV_LSP_SPEAKER_ID_NOT_PCE_INITIATED
):
530 return "LSP_SPEAKER_ID_NOT_PCE_INITIATED";
532 case TUP(PCEP_ERRT_LSP_INSTANTIATE_ERROR
,
533 PCEP_ERRV_UNACCEPTABLE_INSTANTIATE_ERROR
):
534 return "UNACCEPTABLE_INSTANTIATE_ERROR";
535 case TUP(PCEP_ERRT_LSP_INSTANTIATE_ERROR
, PCEP_ERRV_INTERNAL_ERROR
):
536 return "INTERNAL_ERROR";
537 case TUP(PCEP_ERRT_LSP_INSTANTIATE_ERROR
, PCEP_ERRV_SIGNALLING_ERROR
):
538 return "SIGNALLING_ERROR";
540 case TUP(PCEP_ERRT_START_TLS_FAILURE
,
541 PCEP_ERRV_START_TLS_AFTER_PCEP_EXCHANGE
):
542 return "START_TLS_AFTER_PCEP_EXCHANGE";
543 case TUP(PCEP_ERRT_START_TLS_FAILURE
,
544 PCEP_ERRV_MSG_NOT_START_TLS_OPEN_ERROR
):
545 return "MSG_NOT_START_TLS_OPEN_ERROR";
546 case TUP(PCEP_ERRT_START_TLS_FAILURE
,
547 PCEP_ERRV_CONNECTION_WO_TLS_NOT_POSSIBLE
):
548 return "CONNECTION_WO_TLS_NOT_POSSIBLE";
549 case TUP(PCEP_ERRT_START_TLS_FAILURE
,
550 PCEP_ERRV_CONNECTION_WO_TLS_IS_POSSIBLE
):
551 return "CONNECTION_WO_TLS_IS_POSSIBLE";
552 case TUP(PCEP_ERRT_START_TLS_FAILURE
,
553 PCEP_ERRV_NO_START_TLS_BEFORE_START_TLS_WAIT_TIMER
):
554 return "NO_START_TLS_BEFORE_START_TLS_WAIT_TIMER";
556 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
557 PCEP_ERRV_ASSOC_TYPE_NOT_SUPPORTED
):
558 return "ASSOC_TYPE_NOT_SUPPORTED";
559 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
560 PCEP_ERRV_TOO_MANY_LSPS_IN_ASSOC_GRP
):
561 return "TOO_MANY_LSPS_IN_ASSOC_GRP";
562 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
, PCEP_ERRV_TOO_MANY_ASSOC_GROUPS
):
563 return "TOO_MANY_ASSOC_GROUPS";
564 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
, PCEP_ERRV_ASSOCIATION_UNKNOWN
):
565 return "ASSOCIATION_UNKNOWN";
566 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
567 PCEP_ERRV_OP_CONF_ASSOC_INFO_MISMATCH
):
568 return "OP_CONF_ASSOC_INFO_MISMATCH";
569 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
, PCEP_ERRV_ASSOC_INFO_MISMATCH
):
570 return "ASSOC_INFO_MISMATCH";
571 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
572 PCEP_ERRV_CANNOT_JOIN_ASSOC_GROUP
):
573 return "CANNOT_JOIN_ASSOC_GROUP";
574 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
, PCEP_ERRV_ASSOC_ID_NOT_IN_RANGE
):
575 return "ASSOC_ID_NOT_IN_RANGE";
576 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
577 PCEP_ERRV_TUNNEL_EP_MISMATCH_PATH_PROT_ASSOC
):
578 return "TUNNEL_EP_MISMATCH_PATH_PROT_ASSOC";
579 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
580 PCEP_ERRV_ATTEMPTED_ADD_LSP_PATH_PROT_ASSOC
):
581 return "ATTEMPTED_ADD_LSP_PATH_PROT_ASSOC";
582 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
583 PCEP_ERRV_PROTECTION_TYPE_NOT_SUPPORTED
):
584 return "PROTECTION_TYPE_NOT_SUPPORTED";
586 case TUP(PCEP_ERRT_WSON_RWA_ERROR
, PCEP_ERRV_RWA_INSUFFICIENT_MEMORY
):
587 return "RWA_INSUFFICIENT_MEMORY";
588 case TUP(PCEP_ERRT_WSON_RWA_ERROR
, PCEP_ERRV_RWA_COMP_NOT_SUPPORTED
):
589 return "RWA_COMP_NOT_SUPPORTED";
590 case TUP(PCEP_ERRT_WSON_RWA_ERROR
, PCEP_ERRV_SYNTAX_ENC_ERROR
):
591 return "SYNTAX_ENC_ERROR";
593 case TUP(PCEP_ERRT_H_PCE_ERROR
, PCEP_ERRV_H_PCE_CAP_NOT_ADVERTISED
):
594 return "H_PCE_CAP_NOT_ADVERTISED";
595 case TUP(PCEP_ERRT_H_PCE_ERROR
,
596 PCEP_ERRV_PARENT_PCE_CAP_CANT_BE_PROVIDED
):
597 return "PARENT_PCE_CAP_CANT_BE_PROVIDED";
599 case TUP(PCEP_ERRT_PATH_COMP_FAILURE
,
600 PCEP_ERRV_UNACCEPTABLE_REQUEST_MSG
):
601 return "UNACCEPTABLE_REQUEST_MSG";
602 case TUP(PCEP_ERRT_PATH_COMP_FAILURE
,
603 PCEP_ERRV_GENERALIZED_BW_VAL_NOT_SUPPORTED
):
604 return "GENERALIZED_BW_VAL_NOT_SUPPORTED";
605 case TUP(PCEP_ERRT_PATH_COMP_FAILURE
,
606 PCEP_ERRV_LABEL_SET_CONSTRAINT_COULD_NOT_BE_MET
):
607 return "LABEL_SET_CONSTRAINT_COULD_NOT_BE_MET";
608 case TUP(PCEP_ERRT_PATH_COMP_FAILURE
,
609 PCEP_ERRV_LABEL_CONSTRAINT_COULD_NOT_BE_MET
):
610 return "LABEL_CONSTRAINT_COULD_NOT_BE_MET";
617 const char *pcep_message_type_name(enum pcep_message_types pcep_message_type
)
619 switch (pcep_message_type
) {
623 case PCEP_TYPE_KEEPALIVE
:
625 case PCEP_TYPE_PCREQ
:
627 case PCEP_TYPE_PCREP
:
629 case PCEP_TYPE_PCNOTF
:
631 case PCEP_TYPE_ERROR
:
633 case PCEP_TYPE_CLOSE
:
635 case PCEP_TYPE_REPORT
:
637 case PCEP_TYPE_UPDATE
:
639 case PCEP_TYPE_INITIATE
:
641 case PCEP_TYPE_START_TLS
:
648 const char *pcep_object_class_name(enum pcep_object_classes obj_class
)
651 case PCEP_OBJ_CLASS_OPEN
:
653 case PCEP_OBJ_CLASS_RP
:
655 case PCEP_OBJ_CLASS_NOPATH
:
657 case PCEP_OBJ_CLASS_ENDPOINTS
:
659 case PCEP_OBJ_CLASS_BANDWIDTH
:
661 case PCEP_OBJ_CLASS_METRIC
:
663 case PCEP_OBJ_CLASS_ERO
:
665 case PCEP_OBJ_CLASS_RRO
:
667 case PCEP_OBJ_CLASS_LSPA
:
669 case PCEP_OBJ_CLASS_IRO
:
671 case PCEP_OBJ_CLASS_SVEC
:
673 case PCEP_OBJ_CLASS_NOTF
:
675 case PCEP_OBJ_CLASS_ERROR
:
677 case PCEP_OBJ_CLASS_CLOSE
:
679 case PCEP_OBJ_CLASS_OF
:
681 case PCEP_OBJ_CLASS_LSP
:
683 case PCEP_OBJ_CLASS_SRP
:
685 case PCEP_OBJ_CLASS_VENDOR_INFO
:
686 return "VENDOR_INFO";
687 case PCEP_OBJ_CLASS_INTER_LAYER
:
688 return "INTER_LAYER";
689 case PCEP_OBJ_CLASS_SWITCH_LAYER
:
690 return "SWITCH_LAYER";
691 case PCEP_OBJ_CLASS_REQ_ADAP_CAP
:
692 return "REQ_ADAP_CAP";
693 case PCEP_OBJ_CLASS_SERVER_IND
:
695 case PCEP_OBJ_CLASS_ASSOCIATION
:
696 return "ASSOCIATION";
702 const char *pcep_object_type_name(enum pcep_object_classes obj_class
,
703 enum pcep_object_types obj_type
)
705 switch (TUP(obj_class
, obj_type
)) {
706 case TUP(PCEP_OBJ_CLASS_OPEN
, PCEP_OBJ_TYPE_OPEN
):
708 case TUP(PCEP_OBJ_CLASS_RP
, PCEP_OBJ_TYPE_RP
):
710 case TUP(PCEP_OBJ_CLASS_NOPATH
, PCEP_OBJ_TYPE_NOPATH
):
712 case TUP(PCEP_OBJ_CLASS_ENDPOINTS
, PCEP_OBJ_TYPE_ENDPOINT_IPV4
):
713 return "ENDPOINT_IPV4";
714 case TUP(PCEP_OBJ_CLASS_ENDPOINTS
, PCEP_OBJ_TYPE_ENDPOINT_IPV6
):
715 return "ENDPOINT_IPV6";
716 case TUP(PCEP_OBJ_CLASS_BANDWIDTH
, PCEP_OBJ_TYPE_BANDWIDTH_REQ
):
717 return "BANDWIDTH_REQ";
718 case TUP(PCEP_OBJ_CLASS_BANDWIDTH
, PCEP_OBJ_TYPE_BANDWIDTH_TELSP
):
719 return "BANDWIDTH_TELSP";
720 case TUP(PCEP_OBJ_CLASS_BANDWIDTH
, PCEP_OBJ_TYPE_BANDWIDTH_CISCO
):
721 return "BANDWIDTH_CISCO";
722 case TUP(PCEP_OBJ_CLASS_METRIC
, PCEP_OBJ_TYPE_METRIC
):
724 case TUP(PCEP_OBJ_CLASS_ERO
, PCEP_OBJ_TYPE_ERO
):
726 case TUP(PCEP_OBJ_CLASS_RRO
, PCEP_OBJ_TYPE_RRO
):
728 case TUP(PCEP_OBJ_CLASS_LSPA
, PCEP_OBJ_TYPE_LSPA
):
730 case TUP(PCEP_OBJ_CLASS_IRO
, PCEP_OBJ_TYPE_IRO
):
732 case TUP(PCEP_OBJ_CLASS_SVEC
, PCEP_OBJ_TYPE_SVEC
):
734 case TUP(PCEP_OBJ_CLASS_NOTF
, PCEP_OBJ_TYPE_NOTF
):
736 case TUP(PCEP_OBJ_CLASS_ERROR
, PCEP_OBJ_TYPE_ERROR
):
738 case TUP(PCEP_OBJ_CLASS_CLOSE
, PCEP_OBJ_TYPE_CLOSE
):
740 case TUP(PCEP_OBJ_CLASS_INTER_LAYER
, PCEP_OBJ_TYPE_INTER_LAYER
):
741 return "INTER_LAYER";
742 case TUP(PCEP_OBJ_CLASS_SWITCH_LAYER
, PCEP_OBJ_TYPE_SWITCH_LAYER
):
743 return "SWITCH_LAYER";
744 case TUP(PCEP_OBJ_CLASS_REQ_ADAP_CAP
, PCEP_OBJ_TYPE_REQ_ADAP_CAP
):
745 return "REQ_ADAP_CAP";
746 case TUP(PCEP_OBJ_CLASS_SERVER_IND
, PCEP_OBJ_TYPE_SERVER_IND
):
748 case TUP(PCEP_OBJ_CLASS_ASSOCIATION
, PCEP_OBJ_TYPE_ASSOCIATION_IPV4
):
749 return "ASSOCIATION_IPV4";
750 case TUP(PCEP_OBJ_CLASS_ASSOCIATION
, PCEP_OBJ_TYPE_ASSOCIATION_IPV6
):
751 return "ASSOCIATION_IPV6";
752 case TUP(PCEP_OBJ_CLASS_OF
, PCEP_OBJ_TYPE_OF
):
759 const char *pcep_lsp_status_name(enum pcep_lsp_operational_status status
)
762 case PCEP_LSP_OPERATIONAL_DOWN
:
764 case PCEP_LSP_OPERATIONAL_UP
:
766 case PCEP_LSP_OPERATIONAL_ACTIVE
:
768 case PCEP_LSP_OPERATIONAL_GOING_DOWN
:
770 case PCEP_LSP_OPERATIONAL_GOING_UP
:
778 const char *pcep_tlv_type_name(enum pcep_object_tlv_types tlv_type
)
781 case PCEP_OBJ_TLV_TYPE_NO_PATH_VECTOR
:
782 return "NO_PATH_VECTOR";
783 case PCEP_OBJ_TLV_TYPE_OBJECTIVE_FUNCTION_LIST
:
784 return "OBJECTIVE_FUNCTION_LIST";
785 case PCEP_OBJ_TLV_TYPE_VENDOR_INFO
:
786 return "VENDOR_INFO";
787 case PCEP_OBJ_TLV_TYPE_STATEFUL_PCE_CAPABILITY
:
788 return "STATEFUL_PCE_CAPABILITY";
789 case PCEP_OBJ_TLV_TYPE_SYMBOLIC_PATH_NAME
:
790 return "SYMBOLIC_PATH_NAME";
791 case PCEP_OBJ_TLV_TYPE_IPV4_LSP_IDENTIFIERS
:
792 return "IPV4_LSP_IDENTIFIERS";
793 case PCEP_OBJ_TLV_TYPE_IPV6_LSP_IDENTIFIERS
:
794 return "IPV6_LSP_IDENTIFIERS";
795 case PCEP_OBJ_TLV_TYPE_LSP_ERROR_CODE
:
796 return "LSP_ERROR_CODE";
797 case PCEP_OBJ_TLV_TYPE_RSVP_ERROR_SPEC
:
798 return "RSVP_ERROR_SPEC";
799 case PCEP_OBJ_TLV_TYPE_LSP_DB_VERSION
:
800 return "LSP_DB_VERSION";
801 case PCEP_OBJ_TLV_TYPE_SPEAKER_ENTITY_ID
:
802 return "SPEAKER_ENTITY_ID";
803 case PCEP_OBJ_TLV_TYPE_SR_PCE_CAPABILITY
:
804 return "SR_PCE_CAPABILITY";
805 case PCEP_OBJ_TLV_TYPE_PATH_SETUP_TYPE
:
806 return "PATH_SETUP_TYPE";
807 case PCEP_OBJ_TLV_TYPE_PATH_SETUP_TYPE_CAPABILITY
:
808 return "PATH_SETUP_TYPE_CAPABILITY";
809 case PCEP_OBJ_TLV_TYPE_SRPOLICY_POL_ID
:
810 return "SRPOLICY_POL_ID";
811 case PCEP_OBJ_TLV_TYPE_SRPOLICY_POL_NAME
:
812 return "SRPOLICY_POL_NAME";
813 case PCEP_OBJ_TLV_TYPE_SRPOLICY_CPATH_ID
:
814 return "SRPOLICY_CPATH_ID";
815 case PCEP_OBJ_TLV_TYPE_SRPOLICY_CPATH_PREFERENCE
:
816 return "SRPOLICY_CPATH_PREFERENCE";
817 case PCEP_OBJ_TLV_TYPE_UNKNOWN
:
819 case PCEP_OBJ_TLV_TYPE_ARBITRARY
:
826 const char *pcep_ro_type_name(enum pcep_ro_subobj_types ro_type
)
830 case RO_SUBOBJ_TYPE_IPV4
:
832 case RO_SUBOBJ_TYPE_IPV6
:
834 case RO_SUBOBJ_TYPE_LABEL
:
836 case RO_SUBOBJ_TYPE_UNNUM
:
838 case RO_SUBOBJ_TYPE_ASN
:
840 case RO_SUBOBJ_TYPE_SR
:
847 const char *pcep_nai_type_name(enum pcep_sr_subobj_nai nai_type
)
850 case PCEP_SR_SUBOBJ_NAI_ABSENT
:
852 case PCEP_SR_SUBOBJ_NAI_IPV4_NODE
:
854 case PCEP_SR_SUBOBJ_NAI_IPV6_NODE
:
856 case PCEP_SR_SUBOBJ_NAI_IPV4_ADJACENCY
:
857 return "IPV4_ADJACENCY";
858 case PCEP_SR_SUBOBJ_NAI_IPV6_ADJACENCY
:
859 return "IPV6_ADJACENCY";
860 case PCEP_SR_SUBOBJ_NAI_UNNUMBERED_IPV4_ADJACENCY
:
861 return "UNNUMBERED_IPV4_ADJACENCY";
862 case PCEP_SR_SUBOBJ_NAI_LINK_LOCAL_IPV6_ADJACENCY
:
863 return "LINK_LOCAL_IPV6_ADJACENCY";
869 const char *pcep_metric_type_name(enum pcep_metric_types type
)
872 case PCEP_METRIC_IGP
:
876 case PCEP_METRIC_HOP_COUNT
:
878 case PCEP_METRIC_AGGREGATE_BW
:
879 return "AGGREGATE_BW";
880 case PCEP_METRIC_MOST_LOADED_LINK
:
881 return "MOST_LOADED_LINK";
882 case PCEP_METRIC_CUMULATIVE_IGP
:
883 return "CUMULATIVE_IGP";
884 case PCEP_METRIC_CUMULATIVE_TE
:
885 return "CUMULATIVE_TE";
886 case PCEP_METRIC_P2MP_IGP
:
888 case PCEP_METRIC_P2MP_TE
:
890 case PCEP_METRIC_P2MP_HOP_COUNT
:
891 return "P2MP_HOP_COUNT";
892 case PCEP_METRIC_SEGMENT_ID_DEPTH
:
893 return "SEGMENT_ID_DEPTH";
894 case PCEP_METRIC_PATH_DELAY
:
896 case PCEP_METRIC_PATH_DELAY_VARIATION
:
897 return "PATH_DELAY_VARIATION";
898 case PCEP_METRIC_PATH_LOSS
:
900 case PCEP_METRIC_P2MP_PATH_DELAY
:
901 return "P2MP_PATH_DELAY";
902 case PCEP_METRIC_P2MP_PATH_DELAY_VARIATION
:
903 return "P2MP_PATH_DELAY_VARIATION";
904 case PCEP_METRIC_P2MP_PATH_LOSS
:
905 return "P2MP_PATH_LOSS";
906 case PCEP_METRIC_NUM_PATH_ADAPTATIONS
:
907 return "NUM_PATH_ADAPTATIONS";
908 case PCEP_METRIC_NUM_PATH_LAYERS
:
909 return "NUM_PATH_LAYERS";
910 case PCEP_METRIC_DOMAIN_COUNT
:
911 return "DOMAIN_COUNT";
912 case PCEP_METRIC_BORDER_NODE_COUNT
:
913 return "BORDER_NODE_COUNT";
919 const char *pcep_nopath_tlv_err_code_name(enum pcep_nopath_tlv_err_codes type
)
922 case PCEP_NOPATH_TLV_ERR_NO_TLV
:
924 case PCEP_NOPATH_TLV_ERR_PCE_UNAVAILABLE
:
925 return "PCE_UNAVAILABLE";
926 case PCEP_NOPATH_TLV_ERR_UNKNOWN_DST
:
927 return "UNKNOWN_DST";
928 case PCEP_NOPATH_TLV_ERR_UNKNOWN_SRC
:
929 return "UNKNOWN_SRC";
935 const char *format_objfun_set(uint32_t flags
)
939 for (i
= 1, c
= 0; i
<= MAX_OBJFUN_TYPE
; i
++) {
940 if (CHECK_FLAG(flags
, i
)) {
942 PATHD_FORMAT(", %s", objfun_type_name(i
));
944 PATHD_FORMAT("%s", objfun_type_name(i
));
948 return PATHD_FORMAT_FINI();
952 const char *format_pcc_opts(struct pcc_opts
*opts
)
955 _format_pcc_opts(0, opts
);
956 return PATHD_FORMAT_FINI();
959 const char *format_pcc_state(struct pcc_state
*state
)
962 _format_pcc_state(0, state
);
963 return PATHD_FORMAT_FINI();
966 const char *format_ctrl_state(struct ctrl_state
*state
)
969 _format_ctrl_state(0, state
);
970 return PATHD_FORMAT_FINI();
973 const char *format_path(struct path
*path
)
976 _format_path(0, path
);
977 return PATHD_FORMAT_FINI();
980 const char *format_pcep_event(pcep_event
*event
)
983 _format_pcep_event(0, event
);
984 return PATHD_FORMAT_FINI();
987 const char *format_pcep_message(struct pcep_message
*msg
)
990 _format_pcep_message(0, msg
);
991 return PATHD_FORMAT_FINI();
994 void _format_pcc_opts(int ps
, struct pcc_opts
*opts
)
997 PATHD_FORMAT("NULL\n");
999 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1001 if (IS_IPADDR_V4(&opts
->addr
)) {
1002 PATHD_FORMAT("%*saddr_v4: %pI4\n", ps2
, "",
1003 &opts
->addr
.ipaddr_v4
);
1005 PATHD_FORMAT("%*saddr_v4: undefined", ps2
, "");
1007 if (IS_IPADDR_V6(&opts
->addr
)) {
1008 PATHD_FORMAT("%*saddr_v6: %pI6\n", ps2
, "",
1009 &opts
->addr
.ipaddr_v6
);
1011 PATHD_FORMAT("%*saddr_v6: undefined", ps2
, "");
1013 PATHD_FORMAT("%*sport: %i\n", ps2
, "", opts
->port
);
1014 PATHD_FORMAT("%*smsd: %i\n", ps2
, "", opts
->msd
);
1018 void _format_pce_opts(int ps
, struct pce_opts
*opts
)
1021 PATHD_FORMAT("NULL\n");
1023 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1025 if (IS_IPADDR_V6(&opts
->addr
)) {
1026 PATHD_FORMAT("%*saddr: %pI6\n", ps2
, "",
1027 &opts
->addr
.ipaddr_v6
);
1029 PATHD_FORMAT("%*saddr: %pI4\n", ps2
, "",
1030 &opts
->addr
.ipaddr_v4
);
1032 PATHD_FORMAT("%*sport: %i\n", ps2
, "", opts
->port
);
1036 void _format_pcc_caps(int ps
, struct pcep_caps
*caps
)
1038 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1040 PATHD_FORMAT("%*sis_stateful: %d\n", ps2
, "", caps
->is_stateful
);
1043 void _format_pcc_state(int ps
, struct pcc_state
*state
)
1045 if (state
== NULL
) {
1046 PATHD_FORMAT("NULL\n");
1048 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1050 PATHD_FORMAT("%*sstatus: %s\n", ps2
, "",
1051 pcc_status_name(state
->status
));
1052 PATHD_FORMAT("%*spcc_opts: ", ps2
, "");
1053 _format_pcc_opts(ps2
, state
->pcc_opts
);
1054 PATHD_FORMAT("%*spce_opts: ", ps2
, "");
1055 _format_pce_opts(ps2
, state
->pce_opts
);
1056 if (state
->sess
== NULL
) {
1057 PATHD_FORMAT("%*ssess: NULL\n", ps2
, "");
1059 PATHD_FORMAT("%*ssess: <PCC SESSION %p>\n", ps2
, "",
1062 PATHD_FORMAT("%*scaps: ", ps2
, "");
1063 _format_pcc_caps(ps2
, &state
->caps
);
1067 void _format_ctrl_state(int ps
, struct ctrl_state
*state
)
1069 if (state
== NULL
) {
1070 PATHD_FORMAT("NULL\n");
1073 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1074 int ps3
= ps2
+ DEBUG_IDENT_SIZE
;
1076 if (state
->main
== NULL
) {
1077 PATHD_FORMAT("%*smain: NULL\n", ps2
, "");
1079 PATHD_FORMAT("%*smain: <THREAD MASTER %p>\n", ps2
, "",
1082 if (state
->self
== NULL
) {
1083 PATHD_FORMAT("%*sself: NULL\n", ps2
, "");
1085 PATHD_FORMAT("%*sself: <THREAD MASTER %p>\n", ps2
, "",
1088 PATHD_FORMAT("%*spcc_count: %d\n", ps2
, "", state
->pcc_count
);
1089 PATHD_FORMAT("%*spcc:\n", ps2
, "");
1090 for (i
= 0; i
< MAX_PCC
; i
++) {
1091 if (state
->pcc
[i
]) {
1092 PATHD_FORMAT("%*s- ", ps3
- 2, "");
1093 _format_pcc_state(ps3
, state
->pcc
[i
]);
1099 void _format_path(int ps
, struct path
*path
)
1102 PATHD_FORMAT("NULL\n");
1104 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1105 int ps3
= ps2
+ DEBUG_IDENT_SIZE
;
1107 PATHD_FORMAT("%*snbkey: \n", ps2
, "");
1108 PATHD_FORMAT("%*scolor: %u\n", ps3
, "", path
->nbkey
.color
);
1109 switch (path
->nbkey
.endpoint
.ipa_type
) {
1111 PATHD_FORMAT("%*sendpoint: %pI4\n", ps3
, "",
1112 &path
->nbkey
.endpoint
.ipaddr_v4
);
1115 PATHD_FORMAT("%*sendpoint: %pI6\n", ps3
, "",
1116 &path
->nbkey
.endpoint
.ipaddr_v6
);
1119 PATHD_FORMAT("%*sendpoint: NONE\n", ps3
, "");
1122 PATHD_FORMAT("%*spreference: %u\n", ps3
, "",
1123 path
->nbkey
.preference
);
1125 if (path
->sender
.ipa_type
== IPADDR_V4
) {
1126 PATHD_FORMAT("%*ssender: %pI4\n", ps2
, "",
1127 &path
->sender
.ipaddr_v4
);
1128 } else if (path
->sender
.ipa_type
== IPADDR_V6
) {
1129 PATHD_FORMAT("%*ssender: %pI6\n", ps2
, "",
1130 &path
->sender
.ipaddr_v6
);
1132 PATHD_FORMAT("%*ssender: UNDEFINED\n", ps2
, "");
1134 if (path
->pcc_addr
.ipa_type
== IPADDR_V4
) {
1135 PATHD_FORMAT("%*spcc_addr: %pI4\n", ps2
, "",
1136 &path
->pcc_addr
.ipaddr_v4
);
1137 } else if (path
->pcc_addr
.ipa_type
== IPADDR_V6
) {
1138 PATHD_FORMAT("%*spcc_addr: %pI6\n", ps2
, "",
1139 &path
->pcc_addr
.ipaddr_v6
);
1141 PATHD_FORMAT("%*spcc_addr: UNDEFINED\n", ps2
, "");
1143 PATHD_FORMAT("%*spcc_id: %u\n", ps2
, "", path
->pcc_id
);
1144 PATHD_FORMAT("%*screate_origin: %s (%u)\n", ps2
, "",
1145 srte_protocol_origin_name(path
->create_origin
),
1146 path
->create_origin
);
1147 PATHD_FORMAT("%*supdate_origin: %s (%u)\n", ps2
, "",
1148 srte_protocol_origin_name(path
->update_origin
),
1149 path
->update_origin
);
1150 if (path
->originator
!= NULL
) {
1151 PATHD_FORMAT("%*soriginator: %s\n", ps2
, "",
1154 PATHD_FORMAT("%*soriginator: UNDEFINED\n", ps2
, "");
1156 PATHD_FORMAT("%*stype: %s (%u)\n", ps2
, "",
1157 srte_candidate_type_name(path
->type
), path
->type
);
1158 PATHD_FORMAT("%*splsp_id: %u\n", ps2
, "", path
->plsp_id
);
1159 if (path
->name
== NULL
) {
1160 PATHD_FORMAT("%*sname: NULL\n", ps2
, "");
1162 PATHD_FORMAT("%*sname: %s\n", ps2
, "", path
->name
);
1164 PATHD_FORMAT("%*ssrp_id: %u\n", ps2
, "", path
->srp_id
);
1165 PATHD_FORMAT("%*sreq_id: %u\n", ps2
, "", path
->req_id
);
1166 PATHD_FORMAT("%*sstatus: %s (%u)\n", ps2
, "",
1167 pcep_lsp_status_name(path
->status
), path
->status
);
1168 PATHD_FORMAT("%*sdo_remove: %u\n", ps2
, "", path
->do_remove
);
1169 PATHD_FORMAT("%*sgo_active: %u\n", ps2
, "", path
->go_active
);
1170 PATHD_FORMAT("%*swas_created: %u\n", ps2
, "",
1172 PATHD_FORMAT("%*swas_removed: %u\n", ps2
, "",
1174 PATHD_FORMAT("%*sis_synching: %u\n", ps2
, "",
1176 PATHD_FORMAT("%*sis_delegated: %u\n", ps2
, "",
1177 path
->is_delegated
);
1178 PATHD_FORMAT("%*shas_bandwidth: %u\n", ps2
, "",
1179 path
->has_bandwidth
);
1180 if (path
->has_bandwidth
) {
1181 PATHD_FORMAT("%*senforce_bandwidth: %u\n", ps2
, "",
1182 path
->enforce_bandwidth
);
1183 PATHD_FORMAT("%*sbandwidth: %f\n", ps2
, "",
1186 PATHD_FORMAT("%*shas_pcc_objfun: %u\n", ps2
, "",
1187 path
->has_pcc_objfun
);
1188 if (path
->has_pcc_objfun
) {
1189 PATHD_FORMAT("%*senforce_pcc_objfun: %d\n", ps2
, "",
1190 path
->enforce_pcc_objfun
);
1191 PATHD_FORMAT("%*spcc_objfun: %s (%u)\n", ps2
, "",
1192 objfun_type_name(path
->pcc_objfun
),
1195 PATHD_FORMAT("%*shas_pce_objfun: %u\n", ps2
, "",
1196 path
->has_pce_objfun
);
1197 if (path
->has_pce_objfun
)
1198 PATHD_FORMAT("%*spce_objfun: %s (%u)\n", ps2
, "",
1199 objfun_type_name(path
->pce_objfun
),
1201 PATHD_FORMAT("%*shas_affinity_filters: %u\n", ps2
, "",
1202 path
->has_affinity_filters
);
1203 if (path
->has_affinity_filters
) {
1204 PATHD_FORMAT("%*sexclude_any: 0x%08x\n", ps2
, "",
1205 path
->affinity_filters
1206 [AFFINITY_FILTER_EXCLUDE_ANY
- 1]);
1207 PATHD_FORMAT("%*sinclude_any: 0x%08x\n", ps2
, "",
1208 path
->affinity_filters
1209 [AFFINITY_FILTER_INCLUDE_ANY
- 1]);
1210 PATHD_FORMAT("%*sinclude_all: 0x%08x\n", ps2
, "",
1211 path
->affinity_filters
1212 [AFFINITY_FILTER_INCLUDE_ALL
- 1]);
1215 if (path
->first_hop
== NULL
) {
1216 PATHD_FORMAT("%*shops: []\n", ps2
, "");
1218 PATHD_FORMAT("%*shops: \n", ps2
, "");
1219 for (struct path_hop
*hop
= path
->first_hop
;
1220 hop
!= NULL
; hop
= hop
->next
) {
1221 PATHD_FORMAT("%*s- ", ps3
- 2, "");
1222 _format_path_hop(ps3
, hop
);
1225 if (path
->first_metric
== NULL
) {
1226 PATHD_FORMAT("%*smetrics: []\n", ps2
, "");
1228 PATHD_FORMAT("%*smetrics: \n", ps2
, "");
1229 for (struct path_metric
*metric
= path
->first_metric
;
1230 NULL
!= metric
; metric
= metric
->next
) {
1231 PATHD_FORMAT("%*s- ", ps3
- 2, "");
1232 _format_path_metric(ps3
, metric
);
1238 void _format_path_metric(int ps
, struct path_metric
*metric
)
1240 PATHD_FORMAT("type: %s (%u)\n", pcep_metric_type_name(metric
->type
),
1242 PATHD_FORMAT("%*senforce: %u\n", ps
, "", metric
->enforce
);
1243 PATHD_FORMAT("%*sis_bound: %u\n", ps
, "", metric
->is_bound
);
1244 PATHD_FORMAT("%*sis_computed: %u\n", ps
, "", metric
->is_computed
);
1245 PATHD_FORMAT("%*svalue: %f\n", ps
, "", metric
->value
);
1248 void _format_path_hop(int ps
, struct path_hop
*hop
)
1250 PATHD_FORMAT("is_loose: %u\n", hop
->is_loose
);
1251 PATHD_FORMAT("%*shas_sid: %u\n", ps
, "", hop
->has_sid
);
1254 PATHD_FORMAT("%*sis_mpls: %u\n", ps
, "", hop
->is_mpls
);
1256 PATHD_FORMAT("%*shas_attribs: %u\n", ps
, "",
1258 PATHD_FORMAT("%*slabel: %u\n", ps
, "",
1259 hop
->sid
.mpls
.label
);
1260 if (hop
->has_attribs
) {
1261 PATHD_FORMAT("%*straffic_class: %u\n", ps
, "",
1262 hop
->sid
.mpls
.traffic_class
);
1263 PATHD_FORMAT("%*sis_bottom: %u\n", ps
, "",
1264 hop
->sid
.mpls
.is_bottom
);
1265 PATHD_FORMAT("%*sttl: %u\n", ps
, "",
1269 PATHD_FORMAT("%*sSID: %u\n", ps
, "", hop
->sid
.value
);
1273 PATHD_FORMAT("%*shas_nai: %u\n", ps
, "", hop
->has_nai
);
1275 PATHD_FORMAT("%*snai_type: %s (%u)\n", ps
, "",
1276 pcep_nai_type_name(hop
->nai
.type
), hop
->nai
.type
);
1277 switch (hop
->nai
.type
) {
1278 case PCEP_SR_SUBOBJ_NAI_IPV4_NODE
:
1279 PATHD_FORMAT("%*sNAI: %pI4\n", ps
, "",
1280 &hop
->nai
.local_addr
.ipaddr_v4
);
1282 case PCEP_SR_SUBOBJ_NAI_IPV6_NODE
:
1283 PATHD_FORMAT("%*sNAI: %pI6\n", ps
, "",
1284 &hop
->nai
.local_addr
.ipaddr_v6
);
1286 case PCEP_SR_SUBOBJ_NAI_IPV4_ADJACENCY
:
1287 PATHD_FORMAT("%*sNAI: %pI4/%pI4\n", ps
, "",
1288 &hop
->nai
.local_addr
.ipaddr_v4
,
1289 &hop
->nai
.remote_addr
.ipaddr_v4
);
1291 case PCEP_SR_SUBOBJ_NAI_IPV6_ADJACENCY
:
1292 PATHD_FORMAT("%*sNAI: %pI6/%pI6\n", ps
, "",
1293 &hop
->nai
.local_addr
.ipaddr_v6
,
1294 &hop
->nai
.remote_addr
.ipaddr_v6
);
1296 case PCEP_SR_SUBOBJ_NAI_UNNUMBERED_IPV4_ADJACENCY
:
1297 PATHD_FORMAT("%*sNAI: %pI6(%u)/%pI6(%u)\n", ps
, "",
1298 &hop
->nai
.local_addr
.ipaddr_v6
,
1299 hop
->nai
.local_iface
,
1300 &hop
->nai
.remote_addr
.ipaddr_v6
,
1301 hop
->nai
.remote_iface
);
1304 PATHD_FORMAT("%*sNAI: UNSUPPORTED\n", ps
, "");
1310 void _format_pcep_event(int ps
, pcep_event
*event
)
1312 if (event
== NULL
) {
1313 PATHD_FORMAT("NULL\n");
1315 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1317 PATHD_FORMAT("%*sevent_type: %s\n", ps2
, "",
1318 pcep_event_type_name(event
->event_type
));
1319 PATHD_FORMAT("%*sevent_time: %s", ps2
, "",
1320 ctime(&event
->event_time
));
1321 if (event
->session
== NULL
) {
1322 PATHD_FORMAT("%*ssession: NULL\n", ps2
, "");
1324 PATHD_FORMAT("%*ssession: <PCC SESSION %p>\n", ps2
, "",
1327 PATHD_FORMAT("%*smessage: ", ps2
, "");
1328 _format_pcep_message(ps2
, event
->message
);
1332 void _format_pcep_message(int ps
, struct pcep_message
*msg
)
1335 PATHD_FORMAT("NULL\n");
1337 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1339 PATHD_FORMAT("%*spcep_version: %u\n", ps2
, "",
1340 msg
->msg_header
->pcep_version
);
1341 PATHD_FORMAT("%*stype: %s (%u)\n", ps2
, "",
1342 pcep_message_type_name(msg
->msg_header
->type
),
1343 msg
->msg_header
->type
);
1344 PATHD_FORMAT("%*sobjects: ", ps2
, "");
1345 _format_pcep_objects(ps2
, msg
->obj_list
);
1349 void _format_pcep_objects(int ps
, double_linked_list
*objs
)
1352 PATHD_FORMAT("NULL\n");
1354 double_linked_list_node
*node
;
1355 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1358 if (objs
->num_entries
== 0) {
1359 PATHD_FORMAT("[]\n");
1364 for (node
= objs
->head
, i
= 0; node
!= NULL
;
1365 node
= node
->next_node
, i
++) {
1366 struct pcep_object_header
*obj
=
1367 (struct pcep_object_header
*)node
->data
;
1368 PATHD_FORMAT("%*s- ", ps2
- 2, "");
1369 _format_pcep_object(ps2
, obj
);
1374 void _format_pcep_object(int ps
, struct pcep_object_header
*obj
)
1377 PATHD_FORMAT("NULL\n");
1379 PATHD_FORMAT("object_class: %s (%u)\n",
1380 pcep_object_class_name(obj
->object_class
),
1382 PATHD_FORMAT("%*sobject_type: %s (%u)\n", ps
, "",
1383 pcep_object_type_name(obj
->object_class
,
1386 PATHD_FORMAT("%*sflag_p: %u\n", ps
, "", obj
->flag_p
);
1387 PATHD_FORMAT("%*sflag_i: %u\n", ps
, "", obj
->flag_i
);
1388 _format_pcep_object_details(ps
, obj
);
1389 _format_pcep_object_tlvs(ps
, obj
);
1393 void _format_pcep_object_details(int ps
, struct pcep_object_header
*obj
)
1395 switch (TUP(obj
->object_class
, obj
->object_type
)) {
1396 case TUP(PCEP_OBJ_CLASS_ERROR
, PCEP_OBJ_TYPE_ERROR
):
1397 _format_pcep_object_error(ps
, (struct pcep_object_error
*)obj
);
1399 case TUP(PCEP_OBJ_CLASS_OPEN
, PCEP_OBJ_TYPE_OPEN
):
1400 _format_pcep_object_open(ps
, (struct pcep_object_open
*)obj
);
1402 case TUP(PCEP_OBJ_CLASS_RP
, PCEP_OBJ_TYPE_RP
):
1403 _format_pcep_object_rp(ps
, (struct pcep_object_rp
*)obj
);
1405 case TUP(PCEP_OBJ_CLASS_SRP
, PCEP_OBJ_TYPE_SRP
):
1406 _format_pcep_object_srp(ps
, (struct pcep_object_srp
*)obj
);
1408 case TUP(PCEP_OBJ_CLASS_LSP
, PCEP_OBJ_TYPE_LSP
):
1409 _format_pcep_object_lsp(ps
, (struct pcep_object_lsp
*)obj
);
1411 case TUP(PCEP_OBJ_CLASS_LSPA
, PCEP_OBJ_TYPE_LSPA
):
1412 _format_pcep_object_lspa(ps
, (struct pcep_object_lspa
*)obj
);
1414 case TUP(PCEP_OBJ_CLASS_ENDPOINTS
, PCEP_OBJ_TYPE_ENDPOINT_IPV4
):
1415 _format_pcep_object_ipv4_endpoint(
1416 ps
, (struct pcep_object_endpoints_ipv4
*)obj
);
1418 case TUP(PCEP_OBJ_CLASS_ERO
, PCEP_OBJ_TYPE_ERO
):
1419 _format_pcep_object_ro(ps
, (struct pcep_object_ro
*)obj
);
1421 case TUP(PCEP_OBJ_CLASS_METRIC
, PCEP_OBJ_TYPE_METRIC
):
1422 _format_pcep_object_metric(ps
,
1423 (struct pcep_object_metric
*)obj
);
1425 case TUP(PCEP_OBJ_CLASS_BANDWIDTH
, PCEP_OBJ_TYPE_BANDWIDTH_REQ
):
1426 case TUP(PCEP_OBJ_CLASS_BANDWIDTH
, PCEP_OBJ_TYPE_BANDWIDTH_CISCO
):
1427 _format_pcep_object_bandwidth(
1428 ps
, (struct pcep_object_bandwidth
*)obj
);
1430 case TUP(PCEP_OBJ_CLASS_NOPATH
, PCEP_OBJ_TYPE_NOPATH
):
1431 _format_pcep_object_nopath(ps
,
1432 (struct pcep_object_nopath
*)obj
);
1434 case TUP(PCEP_OBJ_CLASS_OF
, PCEP_OBJ_TYPE_OF
):
1435 _format_pcep_object_objfun(
1436 ps
, (struct pcep_object_objective_function
*)obj
);
1439 PATHD_FORMAT("%*s...\n", ps
, "");
1444 void _format_pcep_object_error(int ps
, struct pcep_object_error
*obj
)
1446 PATHD_FORMAT("%*serror_type: %s (%u)\n", ps
, "",
1447 pcep_error_type_name(obj
->error_type
), obj
->error_type
);
1448 PATHD_FORMAT("%*serror_value: %s (%u)\n", ps
, "",
1449 pcep_error_value_name(obj
->error_type
, obj
->error_value
),
1454 void _format_pcep_object_open(int ps
, struct pcep_object_open
*obj
)
1456 PATHD_FORMAT("%*sopen_version: %u\n", ps
, "", obj
->open_version
);
1457 PATHD_FORMAT("%*sopen_keepalive: %u\n", ps
, "", obj
->open_keepalive
);
1458 PATHD_FORMAT("%*sopen_deadtimer: %u\n", ps
, "", obj
->open_deadtimer
);
1459 PATHD_FORMAT("%*sopen_sid: %u\n", ps
, "", obj
->open_sid
);
1462 void _format_pcep_object_rp(int ps
, struct pcep_object_rp
*obj
)
1464 PATHD_FORMAT("%*spriority: %u\n", ps
, "", obj
->priority
);
1465 PATHD_FORMAT("%*sflag_reoptimization: %u\n", ps
, "",
1466 obj
->flag_reoptimization
);
1467 PATHD_FORMAT("%*sflag_bidirectional: %u\n", ps
, "",
1468 obj
->flag_bidirectional
);
1469 PATHD_FORMAT("%*sflag_strict: %u\n", ps
, "", obj
->flag_strict
);
1470 PATHD_FORMAT("%*sflag_of: %u\n", ps
, "", obj
->flag_of
);
1471 PATHD_FORMAT("%*srequest_id: %u\n", ps
, "", obj
->request_id
);
1475 void _format_pcep_object_srp(int ps
, struct pcep_object_srp
*obj
)
1477 PATHD_FORMAT("%*sflag_lsp_remove: %u\n", ps
, "", obj
->flag_lsp_remove
);
1478 PATHD_FORMAT("%*ssrp_id_number: %u\n", ps
, "", obj
->srp_id_number
);
1481 void _format_pcep_object_lsp(int ps
, struct pcep_object_lsp
*obj
)
1483 PATHD_FORMAT("%*splsp_id: %u\n", ps
, "", obj
->plsp_id
);
1484 PATHD_FORMAT("%*sstatus: %s\n", ps
, "",
1485 pcep_lsp_status_name(obj
->operational_status
));
1486 PATHD_FORMAT("%*sflag_d: %u\n", ps
, "", obj
->flag_d
);
1487 PATHD_FORMAT("%*sflag_s: %u\n", ps
, "", obj
->flag_s
);
1488 PATHD_FORMAT("%*sflag_r: %u\n", ps
, "", obj
->flag_r
);
1489 PATHD_FORMAT("%*sflag_a: %u\n", ps
, "", obj
->flag_a
);
1490 PATHD_FORMAT("%*sflag_c: %u\n", ps
, "", obj
->flag_c
);
1493 void _format_pcep_object_lspa(int ps
, struct pcep_object_lspa
*obj
)
1495 PATHD_FORMAT("%*slspa_exclude_any: 0x%08x\n", ps
, "",
1496 obj
->lspa_exclude_any
);
1497 PATHD_FORMAT("%*slspa_include_any: 0x%08x\n", ps
, "",
1498 obj
->lspa_include_any
);
1499 PATHD_FORMAT("%*slspa_include_all: 0x%08x\n", ps
, "",
1500 obj
->lspa_include_all
);
1501 PATHD_FORMAT("%*ssetup_priority: %u\n", ps
, "", obj
->setup_priority
);
1502 PATHD_FORMAT("%*sholding_priority: %u\n", ps
, "",
1503 obj
->holding_priority
);
1504 PATHD_FORMAT("%*sflag_local_protection: %u\n", ps
, "",
1505 obj
->flag_local_protection
);
1508 void _format_pcep_object_ipv4_endpoint(int ps
,
1509 struct pcep_object_endpoints_ipv4
*obj
)
1511 PATHD_FORMAT("%*ssrc_ipv4: %pI4\n", ps
, "", &obj
->src_ipv4
);
1512 PATHD_FORMAT("%*sdst_ipv4: %pI4\n", ps
, "", &obj
->dst_ipv4
);
1515 void _format_pcep_object_metric(int ps
, struct pcep_object_metric
*obj
)
1517 PATHD_FORMAT("%*stype: %s (%u)\n", ps
, "",
1518 pcep_metric_type_name(obj
->type
), obj
->type
);
1519 PATHD_FORMAT("%*sflag_b: %u\n", ps
, "", obj
->flag_b
);
1520 PATHD_FORMAT("%*sflag_c: %u\n", ps
, "", obj
->flag_c
);
1521 PATHD_FORMAT("%*svalue: %f\n", ps
, "", obj
->value
);
1524 void _format_pcep_object_bandwidth(int ps
, struct pcep_object_bandwidth
*obj
)
1526 PATHD_FORMAT("%*sbandwidth: %f\n", ps
, "", obj
->bandwidth
);
1529 void _format_pcep_object_nopath(int ps
, struct pcep_object_nopath
*obj
)
1531 PATHD_FORMAT("%*sni: %u\n", ps
, "", obj
->ni
);
1532 PATHD_FORMAT("%*sflag_c: %u\n", ps
, "", obj
->flag_c
);
1533 PATHD_FORMAT("%*serr_code: %s (%u)\n", ps
, "",
1534 pcep_nopath_tlv_err_code_name(obj
->err_code
),
1538 void _format_pcep_object_objfun(int ps
,
1539 struct pcep_object_objective_function
*obj
)
1541 PATHD_FORMAT("%*sof_code: %s (%u)\n", ps
, "",
1542 objfun_type_name(obj
->of_code
), obj
->of_code
);
1545 void _format_pcep_object_ro(int ps
, struct pcep_object_ro
*obj
)
1547 double_linked_list
*obj_list
= obj
->sub_objects
;
1548 double_linked_list_node
*node
;
1549 struct pcep_object_ro_subobj
*sub_obj
;
1551 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1554 if ((obj_list
== NULL
) || (obj_list
->num_entries
== 0)) {
1555 PATHD_FORMAT("%*ssub_objects: []\n", ps
, "");
1559 PATHD_FORMAT("%*ssub_objects:\n", ps
, "");
1561 for (node
= obj_list
->head
, i
= 0; node
!= NULL
;
1562 node
= node
->next_node
, i
++) {
1563 sub_obj
= (struct pcep_object_ro_subobj
*)node
->data
;
1564 PATHD_FORMAT("%*s- flag_subobj_loose_hop: %u\n", ps2
- 2, "",
1565 sub_obj
->flag_subobj_loose_hop
);
1566 PATHD_FORMAT("%*sro_subobj_type: %s (%u)\n", ps2
, "",
1567 pcep_ro_type_name(sub_obj
->ro_subobj_type
),
1568 sub_obj
->ro_subobj_type
);
1569 _format_pcep_object_ro_details(ps2
, sub_obj
);
1573 void _format_pcep_object_ro_details(int ps
, struct pcep_object_ro_subobj
*ro
)
1575 switch (ro
->ro_subobj_type
) {
1576 case RO_SUBOBJ_TYPE_IPV4
:
1577 _format_pcep_object_ro_ipv4(ps
,
1578 (struct pcep_ro_subobj_ipv4
*)ro
);
1580 case RO_SUBOBJ_TYPE_SR
:
1581 _format_pcep_object_ro_sr(ps
, (struct pcep_ro_subobj_sr
*)ro
);
1584 PATHD_FORMAT("%*s...\n", ps
, "");
1589 void _format_pcep_object_ro_ipv4(int ps
, struct pcep_ro_subobj_ipv4
*obj
)
1591 PATHD_FORMAT("%*sip_addr: %pI4\n", ps
, "", &obj
->ip_addr
);
1592 PATHD_FORMAT("%*sprefix_length: %u\n", ps
, "", obj
->prefix_length
);
1593 PATHD_FORMAT("%*sflag_local_protection: %u\n", ps
, "",
1594 obj
->flag_local_protection
);
1597 void _format_pcep_object_ro_sr(int ps
, struct pcep_ro_subobj_sr
*obj
)
1599 PATHD_FORMAT("%*snai_type = %s (%u)\n", ps
, "",
1600 pcep_nai_type_name(obj
->nai_type
), obj
->nai_type
);
1601 PATHD_FORMAT("%*sflag_f: %u\n", ps
, "", obj
->flag_f
);
1602 PATHD_FORMAT("%*sflag_s: %u\n", ps
, "", obj
->flag_s
);
1603 PATHD_FORMAT("%*sflag_c: %u\n", ps
, "", obj
->flag_c
);
1604 PATHD_FORMAT("%*sflag_m: %u\n", ps
, "", obj
->flag_m
);
1607 PATHD_FORMAT("%*sSID: %u\n", ps
, "", obj
->sid
);
1609 PATHD_FORMAT("%*slabel: %u\n", ps
, "",
1610 GET_SR_ERO_SID_LABEL(obj
->sid
));
1612 PATHD_FORMAT("%*sTC: %u\n", ps
, "",
1613 GET_SR_ERO_SID_TC(obj
->sid
));
1614 PATHD_FORMAT("%*sS: %u\n", ps
, "",
1615 GET_SR_ERO_SID_S(obj
->sid
));
1616 PATHD_FORMAT("%*sTTL: %u\n", ps
, "",
1617 GET_SR_ERO_SID_TTL(obj
->sid
));
1623 struct in_addr
*laddr4
, *raddr4
;
1624 struct in6_addr
*laddr6
, *raddr6
;
1625 uint32_t *liface
, *riface
;
1626 assert(obj
->nai_list
!= NULL
);
1627 double_linked_list_node
*n
= obj
->nai_list
->head
;
1629 assert(n
->data
!= NULL
);
1630 switch (obj
->nai_type
) {
1631 case PCEP_SR_SUBOBJ_NAI_IPV4_NODE
:
1632 laddr4
= (struct in_addr
*)n
->data
;
1633 PATHD_FORMAT("%*sNAI: %pI4\n", ps
, "", laddr4
);
1635 case PCEP_SR_SUBOBJ_NAI_IPV6_NODE
:
1636 laddr6
= (struct in6_addr
*)n
->data
;
1637 PATHD_FORMAT("%*sNAI: %pI6\n", ps
, "", laddr6
);
1639 case PCEP_SR_SUBOBJ_NAI_IPV4_ADJACENCY
:
1640 assert(n
->next_node
!= NULL
);
1641 assert(n
->next_node
->data
!= NULL
);
1642 laddr4
= (struct in_addr
*)n
->data
;
1643 raddr4
= (struct in_addr
*)n
->next_node
->data
;
1644 PATHD_FORMAT("%*sNAI: %pI4/%pI4\n", ps
, "", laddr4
,
1647 case PCEP_SR_SUBOBJ_NAI_IPV6_ADJACENCY
:
1648 assert(n
->next_node
!= NULL
);
1649 assert(n
->next_node
->data
!= NULL
);
1650 laddr6
= (struct in6_addr
*)n
->data
;
1651 raddr6
= (struct in6_addr
*)n
->next_node
->data
;
1652 PATHD_FORMAT("%*sNAI: %pI6/%pI6\n", ps
, "", laddr6
,
1655 case PCEP_SR_SUBOBJ_NAI_UNNUMBERED_IPV4_ADJACENCY
:
1656 laddr4
= (struct in_addr
*)n
->data
;
1659 assert(n
->data
!= NULL
);
1660 liface
= (uint32_t *)n
->data
;
1663 assert(n
->data
!= NULL
);
1664 raddr4
= (struct in_addr
*)n
->data
;
1666 assert(n
->data
!= NULL
);
1667 riface
= (uint32_t *)n
->data
;
1668 PATHD_FORMAT("%*sNAI: %pI4(%u)/%pI4(%u)\n", ps
, "",
1669 laddr4
, *liface
, raddr4
, *riface
);
1672 PATHD_FORMAT("%*sNAI: UNSUPPORTED\n", ps
, "");
1678 void _format_pcep_object_tlvs(int ps
, struct pcep_object_header
*obj
)
1680 double_linked_list
*tlv_list
= obj
->tlv_list
;
1681 struct pcep_object_tlv_header
*tlv
;
1682 double_linked_list_node
*node
;
1683 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1686 if (tlv_list
== NULL
)
1688 if (tlv_list
->num_entries
== 0) {
1689 PATHD_FORMAT("%*stlvs: []\n", ps
, "");
1693 PATHD_FORMAT("%*stlvs:\n", ps
, "");
1695 for (node
= tlv_list
->head
, i
= 0; node
!= NULL
;
1696 node
= node
->next_node
, i
++) {
1697 tlv
= (struct pcep_object_tlv_header
*)node
->data
;
1698 PATHD_FORMAT("%*s- ", ps2
- 2, "");
1699 _format_pcep_object_tlv(ps2
, tlv
);
1703 void _format_pcep_object_tlv(int ps
, struct pcep_object_tlv_header
*tlv_header
)
1705 PATHD_FORMAT("type: %s (%u)\n", pcep_tlv_type_name(tlv_header
->type
),
1707 _format_pcep_object_tlv_details(ps
, tlv_header
);
1710 void _format_pcep_object_tlv_details(int ps
,
1711 struct pcep_object_tlv_header
*tlv_header
)
1713 switch (tlv_header
->type
) {
1714 case PCEP_OBJ_TLV_TYPE_SYMBOLIC_PATH_NAME
:
1715 _format_pcep_object_tlv_symbolic_path_name(
1716 ps
, (struct pcep_object_tlv_symbolic_path_name
*)
1719 case PCEP_OBJ_TLV_TYPE_STATEFUL_PCE_CAPABILITY
:
1720 _format_pcep_object_tlv_stateful_pce_capability(
1721 ps
, (struct pcep_object_tlv_stateful_pce_capability
*)
1724 case PCEP_OBJ_TLV_TYPE_SR_PCE_CAPABILITY
:
1725 _format_pcep_object_tlv_sr_pce_capability(
1727 (struct pcep_object_tlv_sr_pce_capability
*)tlv_header
);
1729 case PCEP_OBJ_TLV_TYPE_PATH_SETUP_TYPE
:
1730 _format_pcep_object_tlv_path_setup_type(
1732 (struct pcep_object_tlv_path_setup_type
*)tlv_header
);
1735 PATHD_FORMAT("%*s...\n", ps
, "");
1740 void _format_pcep_object_tlv_symbolic_path_name(
1741 int ps
, struct pcep_object_tlv_symbolic_path_name
*tlv
)
1743 PATHD_FORMAT("%*ssymbolic_path_name: %.*s\n", ps
, "",
1744 tlv
->symbolic_path_name_length
, tlv
->symbolic_path_name
);
1747 void _format_pcep_object_tlv_stateful_pce_capability(
1748 int ps
, struct pcep_object_tlv_stateful_pce_capability
*tlv
)
1750 PATHD_FORMAT("%*sflag_u_lsp_update_capability: %u\n", ps
, "",
1751 tlv
->flag_u_lsp_update_capability
);
1752 PATHD_FORMAT("%*sflag_s_include_db_version: %u\n", ps
, "",
1753 tlv
->flag_s_include_db_version
);
1754 PATHD_FORMAT("%*sflag_i_lsp_instantiation_capability: %u\n", ps
, "",
1755 tlv
->flag_i_lsp_instantiation_capability
);
1756 PATHD_FORMAT("%*sflag_t_triggered_resync: %u\n", ps
, "",
1757 tlv
->flag_t_triggered_resync
);
1758 PATHD_FORMAT("%*sflag_d_delta_lsp_sync: %u\n", ps
, "",
1759 tlv
->flag_d_delta_lsp_sync
);
1760 PATHD_FORMAT("%*sflag_f_triggered_initial_sync: %u\n", ps
, "",
1761 tlv
->flag_f_triggered_initial_sync
);
1764 void _format_pcep_object_tlv_sr_pce_capability(
1765 int ps
, struct pcep_object_tlv_sr_pce_capability
*tlv
)
1768 PATHD_FORMAT("%*sflag_n: %u\n", ps
, "", tlv
->flag_n
);
1769 PATHD_FORMAT("%*sflag_x: %u\n", ps
, "", tlv
->flag_x
);
1770 PATHD_FORMAT("%*smax_sid_depth: %u\n", ps
, "", tlv
->max_sid_depth
);
1773 void _format_pcep_object_tlv_path_setup_type(
1774 int ps
, struct pcep_object_tlv_path_setup_type
*tlv
)
1776 PATHD_FORMAT("%*spath_setup_type: %u\n", ps
, "", tlv
->path_setup_type
);