1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2020 NetDEF, Inc.
11 #include <libyang/libyang.h>
16 #include "pathd/path_pcep_debug.h"
18 static void _format_pcc_opts(int ps
, struct pcc_opts
*ops
);
19 static void _format_pce_opts(int ps
, struct pce_opts
*ops
);
20 static void _format_pcc_caps(int ps
, struct pcep_caps
*caps
);
21 static void _format_pcc_state(int ps
, struct pcc_state
*state
);
22 static void _format_ctrl_state(int ps
, struct ctrl_state
*state
);
23 static void _format_path(int ps
, struct path
*path
);
24 static void _format_path_hop(int ps
, struct path_hop
*hop
);
25 static void _format_path_metric(int ps
, struct path_metric
*metric
);
26 static void _format_pcep_event(int ps
, pcep_event
*event
);
27 static void _format_pcep_message(int ps
, struct pcep_message
*msg
);
28 static void _format_pcep_objects(int ps
, double_linked_list
*objs
);
29 static void _format_pcep_object(int ps
, struct pcep_object_header
*obj
);
30 static void _format_pcep_object_details(int ps
, struct pcep_object_header
*obj
);
31 static void _format_pcep_object_error(int ps
, struct pcep_object_error
*obj
);
32 static void _format_pcep_object_open(int ps
, struct pcep_object_open
*obj
);
33 static void _format_pcep_object_rp(int ps
, struct pcep_object_rp
*obj
);
34 static void _format_pcep_object_srp(int ps
, struct pcep_object_srp
*obj
);
35 static void _format_pcep_object_lsp(int psps
, struct pcep_object_lsp
*obj
);
36 static void _format_pcep_object_lspa(int psps
, struct pcep_object_lspa
*obj
);
38 _format_pcep_object_ipv4_endpoint(int ps
,
39 struct pcep_object_endpoints_ipv4
*obj
);
40 static void _format_pcep_object_metric(int ps
, struct pcep_object_metric
*obj
);
41 static void _format_pcep_object_bandwidth(int ps
,
42 struct pcep_object_bandwidth
*obj
);
43 static void _format_pcep_object_nopath(int ps
, struct pcep_object_nopath
*obj
);
45 _format_pcep_object_objfun(int ps
, struct pcep_object_objective_function
*obj
);
46 static void _format_pcep_object_ro(int ps
, struct pcep_object_ro
*obj
);
47 static void _format_pcep_object_ro_details(int ps
,
48 struct pcep_object_ro_subobj
*ro
);
49 static void _format_pcep_object_ro_ipv4(int ps
,
50 struct pcep_ro_subobj_ipv4
*obj
);
51 static void _format_pcep_object_ro_sr(int ps
, struct pcep_ro_subobj_sr
*obj
);
52 static void _format_pcep_object_tlvs(int ps
, struct pcep_object_header
*obj
);
53 static void _format_pcep_object_tlv(int ps
,
54 struct pcep_object_tlv_header
*tlv_header
);
56 _format_pcep_object_tlv_details(int ps
,
57 struct pcep_object_tlv_header
*tlv_header
);
58 static void _format_pcep_object_tlv_symbolic_path_name(
59 int ps
, struct pcep_object_tlv_symbolic_path_name
*tlv
);
60 static void _format_pcep_object_tlv_stateful_pce_capability(
61 int ps
, struct pcep_object_tlv_stateful_pce_capability
*tlv
);
62 static void _format_pcep_object_tlv_sr_pce_capability(
63 int ps
, struct pcep_object_tlv_sr_pce_capability
*tlv
);
64 static void _format_pcep_object_tlv_path_setup_type(
65 int ps
, struct pcep_object_tlv_path_setup_type
*tlv
);
67 const char *pcc_status_name(enum pcc_status status
)
70 case PCEP_PCC_INITIALIZED
:
72 case PCEP_PCC_DISCONNECTED
:
73 return "DISCONNECTED";
74 case PCEP_PCC_CONNECTING
:
76 case PCEP_PCC_SYNCHRONIZING
:
77 return "SYNCHRONIZING";
78 case PCEP_PCC_OPERATING
:
82 assert(!"Reached end of function where we do not expect to");
85 const char *pcep_event_type_name(pcep_event_type event_type
)
88 case MESSAGE_RECEIVED
:
89 return "MESSAGE_RECEIVED";
90 case PCE_CLOSED_SOCKET
:
91 return "PCE_CLOSED_SOCKET";
92 case PCE_SENT_PCEP_CLOSE
:
93 return "PCE_SENT_PCEP_CLOSE";
94 case PCE_DEAD_TIMER_EXPIRED
:
95 return "PCE_DEAD_TIMER_EXPIRED";
96 case PCE_OPEN_KEEP_WAIT_TIMER_EXPIRED
:
97 return "PCE_OPEN_KEEP_WAIT_TIMER_EXPIRED";
98 case PCC_CONNECTED_TO_PCE
:
99 return "PCC_CONNECTED_TO_PCE";
100 case PCC_PCEP_SESSION_CLOSED
:
101 return "PCC_PCEP_SESSION_CLOSED";
102 case PCC_RCVD_INVALID_OPEN
:
103 return "PCC_RCVD_INVALID_OPEN";
104 case PCC_RCVD_MAX_INVALID_MSGS
:
105 return "PCC_RCVD_MAX_INVALID_MSGS";
106 case PCC_RCVD_MAX_UNKOWN_MSGS
:
107 return "PCC_RCVD_MAX_UNKOWN_MSGS";
108 case PCC_CONNECTION_FAILURE
:
109 return "PCC_CONNECTION_FAILURE";
110 case PCC_SENT_INVALID_OPEN
:
111 return "PCC_SENT_INVALID_OPEN";
114 assert(!"Reached end of function where we do not expect to");
117 const char *pcep_error_type_name(enum pcep_error_type error_type
)
119 switch (error_type
) {
121 case PCEP_ERRT_SESSION_FAILURE
:
122 return "SESSION_FAILURE";
123 case PCEP_ERRT_CAPABILITY_NOT_SUPPORTED
:
124 return "CAPABILITY_NOT_SUPPORTED";
125 case PCEP_ERRT_UNKNOW_OBJECT
:
126 return "UNKNOW_OBJECT";
127 case PCEP_ERRT_NOT_SUPPORTED_OBJECT
:
128 return "NOT_SUPPORTED_OBJECT";
129 case PCEP_ERRT_POLICY_VIOLATION
:
130 return "POLICY_VIOLATION";
131 case PCEP_ERRT_MANDATORY_OBJECT_MISSING
:
132 return "MANDATORY_OBJECT_MISSING";
133 case PCEP_ERRT_SYNC_PC_REQ_MISSING
:
134 return "SYNC_PC_REQ_MISSING";
135 case PCEP_ERRT_UNKNOWN_REQ_REF
:
136 return "UNKNOWN_REQ_REF";
137 case PCEP_ERRT_ATTEMPT_TO_ESTABLISH_2ND_PCEP_SESSION
:
138 return "ATTEMPT_TO_ESTABLISH_2ND_PCEP_SESSION";
139 case PCEP_ERRT_RECEPTION_OF_INV_OBJECT
:
140 return "RECEPTION_OF_INV_OBJECT";
141 case PCEP_ERRT_UNRECOGNIZED_EXRS_SUBOBJ
:
142 return "UNRECOGNIZED_EXRS_SUBOBJ";
143 case PCEP_ERRT_DIFFSERV_AWARE_TE_ERROR
:
144 return "DIFFSERV_AWARE_TE_ERROR";
145 case PCEP_ERRT_BRPC_PROC_COMPLETION_ERROR
:
146 return "BRPC_PROC_COMPLETION_ERROR";
147 case PCEP_ERRT_UNASSIGNED14
:
148 return "UNASSIGNED14";
149 case PCEP_ERRT_GLOBAL_CONCURRENT_ERROR
:
150 return "GLOBAL_CONCURRENT_ERROR";
151 case PCEP_ERRT_P2PMP_CAP_ERROR
:
152 return "P2PMP_CAP_ERROR";
153 case PCEP_ERRT_P2P_ENDPOINTS_ERROR
:
154 return "P2P_ENDPOINTS_ERROR";
155 case PCEP_ERRT_P2P_FRAGMENTATION_ERROR
:
156 return "P2P_FRAGMENTATION_ERROR";
157 case PCEP_ERRT_INVALID_OPERATION
:
158 return "INVALID_OPERATION";
159 case PCEP_ERRT_LSP_STATE_SYNC_ERROR
:
160 return "LSP_STATE_SYNC_ERROR";
161 case PCEP_ERRT_INVALID_TE_PATH_SETUP_TYPE
:
162 return "INVALID_TE_PATH_SETUP_TYPE";
163 case PCEP_ERRT_UNASSIGNED22
:
164 return "UNASSIGNED22";
165 case PCEP_ERRT_BAD_PARAMETER_VALUE
:
166 return "BAD_PARAMETER_VALUE";
167 case PCEP_ERRT_LSP_INSTANTIATE_ERROR
:
168 return "LSP_INSTANTIATE_ERROR";
169 case PCEP_ERRT_START_TLS_FAILURE
:
170 return "START_TLS_FAILURE";
171 case PCEP_ERRT_ASSOCIATION_ERROR
:
172 return "ASSOCIATION_ERROR";
173 case PCEP_ERRT_WSON_RWA_ERROR
:
174 return "WSON_RWA_ERROR";
175 case PCEP_ERRT_H_PCE_ERROR
:
176 return "H_PCE_ERROR";
177 case PCEP_ERRT_PATH_COMP_FAILURE
:
178 return "PATH_COMP_FAILURE";
179 case PCEP_ERRT_UNASSIGNED30
:
180 return "UNASSIGNED30";
186 const char *pcep_error_value_name(enum pcep_error_type error_type
,
187 enum pcep_error_value error_value
)
189 switch (TUP(error_type
, error_value
)) {
191 case TUP(PCEP_ERRT_CAPABILITY_NOT_SUPPORTED
, PCEP_ERRV_UNASSIGNED
):
192 case TUP(PCEP_ERRT_SYNC_PC_REQ_MISSING
, PCEP_ERRV_UNASSIGNED
):
193 case TUP(PCEP_ERRT_UNKNOWN_REQ_REF
, PCEP_ERRV_UNASSIGNED
):
194 case TUP(PCEP_ERRT_ATTEMPT_TO_ESTABLISH_2ND_PCEP_SESSION
,
195 PCEP_ERRV_UNASSIGNED
):
196 case TUP(PCEP_ERRT_UNRECOGNIZED_EXRS_SUBOBJ
, PCEP_ERRV_UNASSIGNED
):
199 case TUP(PCEP_ERRT_SESSION_FAILURE
, PCEP_ERRV_RECVD_INVALID_OPEN_MSG
):
200 return "RECVD_INVALID_OPEN_MSG";
201 case TUP(PCEP_ERRT_SESSION_FAILURE
, PCEP_ERRV_OPENWAIT_TIMED_OUT
):
202 return "OPENWAIT_TIMED_OUT";
203 case TUP(PCEP_ERRT_SESSION_FAILURE
,
204 PCEP_ERRV_UNACCEPTABLE_OPEN_MSG_NO_NEG
):
205 return "UNACCEPTABLE_OPEN_MSG_NO_NEG";
206 case TUP(PCEP_ERRT_SESSION_FAILURE
,
207 PCEP_ERRV_UNACCEPTABLE_OPEN_MSG_NEG
):
208 return "UNACCEPTABLE_OPEN_MSG_NEG";
209 case TUP(PCEP_ERRT_SESSION_FAILURE
,
210 PCEP_ERRV_RECVD_SECOND_OPEN_MSG_UNACCEPTABLE
):
211 return "RECVD_SECOND_OPEN_MSG_UNACCEPTABLE";
212 case TUP(PCEP_ERRT_SESSION_FAILURE
, PCEP_ERRV_RECVD_PCERR
):
213 return "RECVD_PCERR";
214 case TUP(PCEP_ERRT_SESSION_FAILURE
, PCEP_ERRV_KEEPALIVEWAIT_TIMED_OUT
):
215 return "KEEPALIVEWAIT_TIMED_OUT";
216 case TUP(PCEP_ERRT_SESSION_FAILURE
,
217 PCEP_ERRV_PCEP_VERSION_NOT_SUPPORTED
):
218 return "PCEP_VERSION_NOT_SUPPORTED";
220 case TUP(PCEP_ERRT_UNKNOW_OBJECT
, PCEP_ERRV_UNREC_OBJECT_CLASS
):
221 return "UNREC_OBJECT_CLASS";
222 case TUP(PCEP_ERRT_UNKNOW_OBJECT
, PCEP_ERRV_UNREC_OBJECT_TYPE
):
223 return "UNREC_OBJECT_TYPE";
225 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
226 PCEP_ERRV_NOT_SUPPORTED_OBJECT_CLASS
):
227 return "NOT_SUPPORTED_OBJECT_CLASS";
228 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
229 PCEP_ERRV_NOT_SUPPORTED_OBJECT_TYPE
):
230 return "NOT_SUPPORTED_OBJECT_TYPE";
231 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
, PCEP_ERRV_UNSUPPORTED_PARAM
):
232 return "UNSUPPORTED_PARAM";
233 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
234 PCEP_ERRV_UNSUPPORTED_NW_PERF_CONSTRAINT
):
235 return "UNSUPPORTED_NW_PERF_CONSTRAINT";
236 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
237 PCEP_ERRV_NOT_SUPPORTED_BW_OBJECT_3_4
):
238 return "NOT_SUPPORTED_BW_OBJECT_3_4";
239 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
240 PCEP_ERRV_UNSUPPORTED_ENDPOINT_TYPE
):
241 return "UNSUPPORTED_ENDPOINT_TYPE";
242 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
243 PCEP_ERRV_UNSUPPORTED_ENDPOINT_TLV
):
244 return "UNSUPPORTED_ENDPOINT_TLV";
245 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
246 PCEP_ERRV_UNSUPPORTED_RP_FLAG_GRANULARITY
):
247 return "UNSUPPORTED_RP_FLAG_GRANULARITY";
249 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
250 PCEP_ERRV_C_BIT_SET_IN_METRIC_OBJECT
):
251 return "C_BIT_SET_IN_METRIC_OBJECT";
252 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
253 PCEP_ERRV_O_BIT_CLEARD_IN_RP_OBJECT
):
254 return "O_BIT_CLEARD_IN_RP_OBJECT";
255 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
256 PCEP_ERRV_OBJECTIVE_FUNC_NOT_ALLOWED
):
257 return "OBJECTIVE_FUNC_NOT_ALLOWED";
258 case TUP(PCEP_ERRT_POLICY_VIOLATION
, PCEP_ERRV_RP_OF_BIT_SET
):
259 return "RP_OF_BIT_SET";
260 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
261 PCEP_ERRV_GLOBAL_CONCURRENCY_NOT_ALLOWED
):
262 return "GLOBAL_CONCURRENCY_NOT_ALLOWED";
263 case TUP(PCEP_ERRT_POLICY_VIOLATION
, PCEP_ERRV_MONITORING_MSG_REJECTED
):
264 return "MONITORING_MSG_REJECTED";
265 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
266 PCEP_ERRV_P2MP_PATH_COMP_NOT_ALLOWED
):
267 return "P2MP_PATH_COMP_NOT_ALLOWED";
268 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
269 PCEP_ERRV_UNALLOWED_NW_PERF_CONSTRAINT
):
270 return "UNALLOWED_NW_PERF_CONSTRAINT";
272 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
273 PCEP_ERRV_RP_OBJECT_MISSING
):
274 return "RP_OBJECT_MISSING";
275 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
276 PCEP_ERRV_RRO_OBJECT_MISSING_FOR_REOP
):
277 return "RRO_OBJECT_MISSING_FOR_REOP";
278 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
279 PCEP_ERRV_EP_OBJECT_MISSING
):
280 return "EP_OBJECT_MISSING";
281 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
282 PCEP_ERRV_MONITOR_OBJECT_MISSING
):
283 return "MONITOR_OBJECT_MISSING";
284 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
285 PCEP_ERRV_LSP_OBJECT_MISSING
):
286 return "LSP_OBJECT_MISSING";
287 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
288 PCEP_ERRV_ERO_OBJECT_MISSING
):
289 return "ERO_OBJECT_MISSING";
290 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
291 PCEP_ERRV_SRP_OBJECT_MISSING
):
292 return "SRP_OBJECT_MISSING";
293 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
294 PCEP_ERRV_LSP_ID_TLV_MISSING
):
295 return "LSP_ID_TLV_MISSING";
296 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
297 PCEP_ERRV_LSP_DB_TLV_MISSING
):
298 return "LSP_DB_TLV_MISSING";
299 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
300 PCEP_ERRV_S2LS_OBJECT_MISSING
):
301 return "S2LS_OBJECT_MISSING";
302 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
303 PCEP_ERRV_P2MP_LSP_ID_TLV_MISSING
):
304 return "P2MP_LSP_ID_TLV_MISSING";
305 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
306 PCEP_ERRV_DISJOINTED_CONF_TLV_MISSING
):
307 return "DISJOINTED_CONF_TLV_MISSING";
309 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
310 PCEP_ERRV_P_FLAG_NOT_CORRECT_IN_OBJECT
):
311 return "P_FLAG_NOT_CORRECT_IN_OBJECT";
312 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_BAD_LABEL_VALUE
):
313 return "BAD_LABEL_VALUE";
314 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
315 PCEP_ERRV_UNSUPPORTED_NUM_SR_ERO_SUBOBJECTS
):
316 return "UNSUPPORTED_NUM_SR_ERO_SUBOBJECTS";
317 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_BAD_LABEL_FORMAT
):
318 return "BAD_LABEL_FORMAT";
319 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_ERO_SR_ERO_MIX
):
320 return "ERO_SR_ERO_MIX";
321 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
322 PCEP_ERRV_SR_ERO_SID_NAI_ABSENT
):
323 return "SR_ERO_SID_NAI_ABSENT";
324 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
325 PCEP_ERRV_SR_RRO_SID_NAI_ABSENT
):
326 return "SR_RRO_SID_NAI_ABSENT";
327 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
328 PCEP_ERRV_SYMBOLIC_PATH_NAME_TLV_MISSING
):
329 return "SYMBOLIC_PATH_NAME_TLV_MISSING";
330 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
331 PCEP_ERRV_MSD_EXCEEDS_PCEP_SESSION_MAX
):
332 return "MSD_EXCEEDS_PCEP_SESSION_MAX";
333 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_RRO_SR_RRO_MIX
):
334 return "RRO_SR_RRO_MIX";
335 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_MALFORMED_OBJECT
):
336 return "MALFORMED_OBJECT";
337 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
338 PCEP_ERRV_MISSING_PCE_SR_CAP_TLV
):
339 return "MISSING_PCE_SR_CAP_TLV";
340 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_UNSUPPORTED_NAI
):
341 return "UNSUPPORTED_NAI";
342 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_UNKNOWN_SID
):
343 return "UNKNOWN_SID";
344 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
345 PCEP_ERRV_CANNOT_RESOLVE_NAI_TO_SID
):
346 return "CANNOT_RESOLVE_NAI_TO_SID";
347 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
348 PCEP_ERRV_COULD_NOT_FIND_SRGB
):
349 return "COULD_NOT_FIND_SRGB";
350 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_SID_EXCEEDS_SRGB
):
351 return "SID_EXCEEDS_SRGB";
352 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
353 PCEP_ERRV_COULD_NOT_FIND_SRLB
):
354 return "COULD_NOT_FIND_SRLB";
355 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_SID_EXCEEDS_SRLB
):
356 return "SID_EXCEEDS_SRLB";
357 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_INCONSISTENT_SID
):
358 return "INCONSISTENT_SID";
359 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
360 PCEP_ERRV_MSD_MUST_BE_NONZERO
):
361 return "MSD_MUST_BE_NONZERO";
362 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
363 PCEP_ERRV_MISMATCH_O_S2LS_LSP
):
364 return "MISMATCH_O_S2LS_LSP";
365 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
366 PCEP_ERRV_INCOMPATIBLE_H_PCE_OF
):
367 return "INCOMPATIBLE_H_PCE_OF";
368 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
369 PCEP_ERRV_BAD_BANDWIDTH_TYPE_3_4
):
370 return "BAD_BANDWIDTH_TYPE_3_4";
371 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
372 PCEP_ERRV_UNSUPPORTED_LSP_PROT_FLAGS
):
373 return "UNSUPPORTED_LSP_PROT_FLAGS";
374 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
375 PCEP_ERRV_UNSUPPORTED_2ND_LSP_PROT_FLAGS
):
376 return "UNSUPPORTED_2ND_LSP_PROT_FLAGS";
377 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
378 PCEP_ERRV_UNSUPPORTED_LINK_PROT_TYPE
):
379 return "UNSUPPORTED_LINK_PROT_TYPE";
380 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
381 PCEP_ERRV_LABEL_SET_TLV_NO_RP_R
):
382 return "LABEL_SET_TLV_NO_RP_R";
383 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
384 PCEP_ERRV_WRONG_LABEL_SET_TLV_O_L_SET
):
385 return "WRONG_LABEL_SET_TLV_O_L_SET";
386 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
387 PCEP_ERRV_WRONG_LABEL_SET_O_SET
):
388 return "WRONG_LABEL_SET_O_SET";
389 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
390 PCEP_ERRV_MISSING_GMPLS_CAP_TLV
):
391 return "MISSING_GMPLS_CAP_TLV";
392 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
393 PCEP_ERRV_INCOMPATIBLE_OF_CODE
):
394 return "INCOMPATIBLE_OF_CODE";
396 case TUP(PCEP_ERRT_DIFFSERV_AWARE_TE_ERROR
,
397 PCEP_ERRV_UNSUPPORTED_CLASS_TYPE
):
398 return "UNSUPPORTED_CLASS_TYPE";
399 case TUP(PCEP_ERRT_DIFFSERV_AWARE_TE_ERROR
,
400 PCEP_ERRV_INVALID_CLASS_TYPE
):
401 return "INVALID_CLASS_TYPE";
402 case TUP(PCEP_ERRT_DIFFSERV_AWARE_TE_ERROR
,
403 PCEP_ERRV_CLASS_SETUP_TYPE_NOT_TE_CLASS
):
404 return "CLASS_SETUP_TYPE_NOT_TE_CLASS";
406 case TUP(PCEP_ERRT_BRPC_PROC_COMPLETION_ERROR
,
407 PCEP_ERRV_BRPC_PROC_NOT_SUPPORTED
):
408 return "BRPC_PROC_NOT_SUPPORTED";
410 case TUP(PCEP_ERRT_GLOBAL_CONCURRENT_ERROR
,
411 PCEP_ERRV_INSUFFICIENT_MEMORY
):
412 return "INSUFFICIENT_MEMORY";
413 case TUP(PCEP_ERRT_GLOBAL_CONCURRENT_ERROR
,
414 PCEP_ERRV_GLOBAL_CONCURRENT_OPT_NOT_SUPPORTED
):
415 return "GLOBAL_CONCURRENT_OPT_NOT_SUPPORTED";
417 case TUP(PCEP_ERRT_P2PMP_CAP_ERROR
, PCEP_ERRV_PCE_INSUFFICIENT_MEMORY
):
418 return "PCE_INSUFFICIENT_MEMORY";
419 case TUP(PCEP_ERRT_P2PMP_CAP_ERROR
,
420 PCEP_ERRV_PCE_NOT_CAPABLE_P2MP_COMP
):
421 return "PCE_NOT_CAPABLE_P2MP_COMP";
423 case TUP(PCEP_ERRT_P2P_ENDPOINTS_ERROR
,
424 PCEP_ERRV_NO_EP_WITH_LEAF_TYPE2
):
425 return "NO_EP_WITH_LEAF_TYPE2";
426 case TUP(PCEP_ERRT_P2P_ENDPOINTS_ERROR
,
427 PCEP_ERRV_NO_EP_WITH_LEAF_TYPE3
):
428 return "NO_EP_WITH_LEAF_TYPE3";
429 case TUP(PCEP_ERRT_P2P_ENDPOINTS_ERROR
,
430 PCEP_ERRV_NO_EP_WITH_LEAF_TYPE4
):
431 return "NO_EP_WITH_LEAF_TYPE4";
432 case TUP(PCEP_ERRT_P2P_ENDPOINTS_ERROR
, PCEP_ERRV_INCONSITENT_EP
):
433 return "INCONSITENT_EP";
435 case TUP(PCEP_ERRT_P2P_FRAGMENTATION_ERROR
,
436 PCEP_ERRV_FRAG_REQUEST_FAILURE
):
437 return "FRAG_REQUEST_FAILURE";
438 case TUP(PCEP_ERRT_P2P_FRAGMENTATION_ERROR
,
439 PCEP_ERRV_FRAG_REPORT_FAILURE
):
440 return "FRAG_REPORT_FAILURE";
441 case TUP(PCEP_ERRT_P2P_FRAGMENTATION_ERROR
,
442 PCEP_ERRV_FRAG_UPDATE_FAILURE
):
443 return "FRAG_UPDATE_FAILURE";
444 case TUP(PCEP_ERRT_P2P_FRAGMENTATION_ERROR
,
445 PCEP_ERRV_FRAG_INSTANTIATION_FAILURE
):
446 return "FRAG_INSTANTIATION_FAILURE";
448 case TUP(PCEP_ERRT_INVALID_OPERATION
,
449 PCEP_ERRV_LSP_UPDATE_FOR_NON_DELEGATED_LSP
):
450 return "LSP_UPDATE_FOR_NON_DELEGATED_LS";
451 case TUP(PCEP_ERRT_INVALID_OPERATION
,
452 PCEP_ERRV_LSP_UPDATE_NON_ADVERTISED_PCE
):
453 return "LSP_UPDATE_NON_ADVERTISED_PC";
454 case TUP(PCEP_ERRT_INVALID_OPERATION
,
455 PCEP_ERRV_LSP_UPDATE_UNKNOWN_PLSP_ID
):
456 return "LSP_UPDATE_UNKNOWN_PLSP_I";
457 case TUP(PCEP_ERRT_INVALID_OPERATION
,
458 PCEP_ERRV_LSP_REPORT_NON_ADVERTISED_PCE
):
459 return "LSP_REPORT_NON_ADVERTISED_PC";
460 case TUP(PCEP_ERRT_INVALID_OPERATION
,
461 PCEP_ERRV_PCE_INIT_LSP_LIMIT_REACHED
):
462 return "PCE_INIT_LSP_LIMIT_REACHE";
463 case TUP(PCEP_ERRT_INVALID_OPERATION
,
464 PCEP_ERRV_PCE_INIT_LSP_DELEGATION_CANT_REVOKE
):
465 return "PCE_INIT_LSP_DELEGATION_CANT_REVOK";
466 case TUP(PCEP_ERRT_INVALID_OPERATION
,
467 PCEP_ERRV_LSP_INIT_NON_ZERO_PLSP_ID
):
468 return "LSP_INIT_NON_ZERO_PLSP_I";
469 case TUP(PCEP_ERRT_INVALID_OPERATION
, PCEP_ERRV_LSP_NOT_PCE_INITIATED
):
470 return "LSP_NOT_PCE_INITIATE";
471 case TUP(PCEP_ERRT_INVALID_OPERATION
,
472 PCEP_ERRV_PCE_INIT_OP_FREQ_LIMIT_REACHED
):
473 return "PCE_INIT_OP_FREQ_LIMIT_REACHE";
474 case TUP(PCEP_ERRT_INVALID_OPERATION
,
475 PCEP_ERRV_LSP_REPORT_P2MP_NOT_ADVERTISED
):
476 return "LSP_REPORT_P2MP_NOT_ADVERTISE";
477 case TUP(PCEP_ERRT_INVALID_OPERATION
,
478 PCEP_ERRV_LSP_UPDATE_P2MP_NOT_ADVERTISED
):
479 return "LSP_UPDATE_P2MP_NOT_ADVERTISE";
480 case TUP(PCEP_ERRT_INVALID_OPERATION
,
481 PCEP_ERRV_LSP_INSTANTIATION_P2MP_NOT_ADVERTISED
):
482 return "LSP_INSTANTIATION_P2MP_NOT_ADVERTISE";
483 case TUP(PCEP_ERRT_INVALID_OPERATION
,
484 PCEP_ERRV_AUTO_BW_CAP_NOT_ADVERTISED
):
485 return "AUTO_BW_CAP_NOT_ADVERTISE";
487 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
488 PCEP_ERRV_PCE_CANT_PROCESS_LSP_REPORT
):
489 return "PCE_CANT_PROCESS_LSP_REPORT";
490 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
491 PCEP_ERRV_LSP_DB_VERSION_MISMATCH
):
492 return "LSP_DB_VERSION_MISMATCH";
493 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
494 PCEP_ERRV_TRIGGER_ATTEMPT_BEFORE_PCE_TRIGGER
):
495 return "TRIGGER_ATTEMPT_BEFORE_PCE_TRIGGER";
496 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
497 PCEP_ERRV_TRIGGER_ATTEMPT_NO_PCE_TRIGGER_CAP
):
498 return "TRIGGER_ATTEMPT_NO_PCE_TRIGGER_CAP";
499 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
500 PCEP_ERRV_PCC_CANT_COMPLETE_STATE_SYNC
):
501 return "PCC_CANT_COMPLETE_STATE_SYNC";
502 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
503 PCEP_ERRV_INVALID_LSP_DB_VERSION_NUMBER
):
504 return "INVALID_LSP_DB_VERSION_NUMBER";
505 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
506 PCEP_ERRV_INVALID_SPEAKER_ENTITY_ID
):
507 return "INVALID_SPEAKER_ENTITY_ID";
509 case TUP(PCEP_ERRT_INVALID_TE_PATH_SETUP_TYPE
,
510 PCEP_ERRV_UNSUPPORTED_PATH_SETUP_TYPE
):
511 return "UNSUPPORTED_PATH_SETUP_TYPE";
512 case TUP(PCEP_ERRT_INVALID_TE_PATH_SETUP_TYPE
,
513 PCEP_ERRV_MISMATCHED_PATH_SETUP_TYPE
):
514 return "MISMATCHED_PATH_SETUP_TYPE";
516 case TUP(PCEP_ERRT_BAD_PARAMETER_VALUE
,
517 PCEP_ERRV_SYMBOLIC_PATH_NAME_IN_USE
):
518 return "SYMBOLIC_PATH_NAME_IN_USE";
519 case TUP(PCEP_ERRT_BAD_PARAMETER_VALUE
,
520 PCEP_ERRV_LSP_SPEAKER_ID_NOT_PCE_INITIATED
):
521 return "LSP_SPEAKER_ID_NOT_PCE_INITIATED";
523 case TUP(PCEP_ERRT_LSP_INSTANTIATE_ERROR
,
524 PCEP_ERRV_UNACCEPTABLE_INSTANTIATE_ERROR
):
525 return "UNACCEPTABLE_INSTANTIATE_ERROR";
526 case TUP(PCEP_ERRT_LSP_INSTANTIATE_ERROR
, PCEP_ERRV_INTERNAL_ERROR
):
527 return "INTERNAL_ERROR";
528 case TUP(PCEP_ERRT_LSP_INSTANTIATE_ERROR
, PCEP_ERRV_SIGNALLING_ERROR
):
529 return "SIGNALLING_ERROR";
531 case TUP(PCEP_ERRT_START_TLS_FAILURE
,
532 PCEP_ERRV_START_TLS_AFTER_PCEP_EXCHANGE
):
533 return "START_TLS_AFTER_PCEP_EXCHANGE";
534 case TUP(PCEP_ERRT_START_TLS_FAILURE
,
535 PCEP_ERRV_MSG_NOT_START_TLS_OPEN_ERROR
):
536 return "MSG_NOT_START_TLS_OPEN_ERROR";
537 case TUP(PCEP_ERRT_START_TLS_FAILURE
,
538 PCEP_ERRV_CONNECTION_WO_TLS_NOT_POSSIBLE
):
539 return "CONNECTION_WO_TLS_NOT_POSSIBLE";
540 case TUP(PCEP_ERRT_START_TLS_FAILURE
,
541 PCEP_ERRV_CONNECTION_WO_TLS_IS_POSSIBLE
):
542 return "CONNECTION_WO_TLS_IS_POSSIBLE";
543 case TUP(PCEP_ERRT_START_TLS_FAILURE
,
544 PCEP_ERRV_NO_START_TLS_BEFORE_START_TLS_WAIT_TIMER
):
545 return "NO_START_TLS_BEFORE_START_TLS_WAIT_TIMER";
547 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
548 PCEP_ERRV_ASSOC_TYPE_NOT_SUPPORTED
):
549 return "ASSOC_TYPE_NOT_SUPPORTED";
550 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
551 PCEP_ERRV_TOO_MANY_LSPS_IN_ASSOC_GRP
):
552 return "TOO_MANY_LSPS_IN_ASSOC_GRP";
553 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
, PCEP_ERRV_TOO_MANY_ASSOC_GROUPS
):
554 return "TOO_MANY_ASSOC_GROUPS";
555 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
, PCEP_ERRV_ASSOCIATION_UNKNOWN
):
556 return "ASSOCIATION_UNKNOWN";
557 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
558 PCEP_ERRV_OP_CONF_ASSOC_INFO_MISMATCH
):
559 return "OP_CONF_ASSOC_INFO_MISMATCH";
560 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
, PCEP_ERRV_ASSOC_INFO_MISMATCH
):
561 return "ASSOC_INFO_MISMATCH";
562 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
563 PCEP_ERRV_CANNOT_JOIN_ASSOC_GROUP
):
564 return "CANNOT_JOIN_ASSOC_GROUP";
565 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
, PCEP_ERRV_ASSOC_ID_NOT_IN_RANGE
):
566 return "ASSOC_ID_NOT_IN_RANGE";
567 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
568 PCEP_ERRV_TUNNEL_EP_MISMATCH_PATH_PROT_ASSOC
):
569 return "TUNNEL_EP_MISMATCH_PATH_PROT_ASSOC";
570 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
571 PCEP_ERRV_ATTEMPTED_ADD_LSP_PATH_PROT_ASSOC
):
572 return "ATTEMPTED_ADD_LSP_PATH_PROT_ASSOC";
573 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
574 PCEP_ERRV_PROTECTION_TYPE_NOT_SUPPORTED
):
575 return "PROTECTION_TYPE_NOT_SUPPORTED";
577 case TUP(PCEP_ERRT_WSON_RWA_ERROR
, PCEP_ERRV_RWA_INSUFFICIENT_MEMORY
):
578 return "RWA_INSUFFICIENT_MEMORY";
579 case TUP(PCEP_ERRT_WSON_RWA_ERROR
, PCEP_ERRV_RWA_COMP_NOT_SUPPORTED
):
580 return "RWA_COMP_NOT_SUPPORTED";
581 case TUP(PCEP_ERRT_WSON_RWA_ERROR
, PCEP_ERRV_SYNTAX_ENC_ERROR
):
582 return "SYNTAX_ENC_ERROR";
584 case TUP(PCEP_ERRT_H_PCE_ERROR
, PCEP_ERRV_H_PCE_CAP_NOT_ADVERTISED
):
585 return "H_PCE_CAP_NOT_ADVERTISED";
586 case TUP(PCEP_ERRT_H_PCE_ERROR
,
587 PCEP_ERRV_PARENT_PCE_CAP_CANT_BE_PROVIDED
):
588 return "PARENT_PCE_CAP_CANT_BE_PROVIDED";
590 case TUP(PCEP_ERRT_PATH_COMP_FAILURE
,
591 PCEP_ERRV_UNACCEPTABLE_REQUEST_MSG
):
592 return "UNACCEPTABLE_REQUEST_MSG";
593 case TUP(PCEP_ERRT_PATH_COMP_FAILURE
,
594 PCEP_ERRV_GENERALIZED_BW_VAL_NOT_SUPPORTED
):
595 return "GENERALIZED_BW_VAL_NOT_SUPPORTED";
596 case TUP(PCEP_ERRT_PATH_COMP_FAILURE
,
597 PCEP_ERRV_LABEL_SET_CONSTRAINT_COULD_NOT_BE_MET
):
598 return "LABEL_SET_CONSTRAINT_COULD_NOT_BE_MET";
599 case TUP(PCEP_ERRT_PATH_COMP_FAILURE
,
600 PCEP_ERRV_LABEL_CONSTRAINT_COULD_NOT_BE_MET
):
601 return "LABEL_CONSTRAINT_COULD_NOT_BE_MET";
608 const char *pcep_message_type_name(enum pcep_message_types pcep_message_type
)
610 switch (pcep_message_type
) {
614 case PCEP_TYPE_KEEPALIVE
:
616 case PCEP_TYPE_PCREQ
:
618 case PCEP_TYPE_PCREP
:
620 case PCEP_TYPE_PCNOTF
:
622 case PCEP_TYPE_ERROR
:
624 case PCEP_TYPE_CLOSE
:
626 case PCEP_TYPE_REPORT
:
628 case PCEP_TYPE_UPDATE
:
630 case PCEP_TYPE_INITIATE
:
632 case PCEP_TYPE_START_TLS
:
638 assert(!"Reached end of function where we are not expecting to");
641 const char *pcep_object_class_name(enum pcep_object_classes obj_class
)
644 case PCEP_OBJ_CLASS_OPEN
:
646 case PCEP_OBJ_CLASS_RP
:
648 case PCEP_OBJ_CLASS_NOPATH
:
650 case PCEP_OBJ_CLASS_ENDPOINTS
:
652 case PCEP_OBJ_CLASS_BANDWIDTH
:
654 case PCEP_OBJ_CLASS_METRIC
:
656 case PCEP_OBJ_CLASS_ERO
:
658 case PCEP_OBJ_CLASS_RRO
:
660 case PCEP_OBJ_CLASS_LSPA
:
662 case PCEP_OBJ_CLASS_IRO
:
664 case PCEP_OBJ_CLASS_SVEC
:
666 case PCEP_OBJ_CLASS_NOTF
:
668 case PCEP_OBJ_CLASS_ERROR
:
670 case PCEP_OBJ_CLASS_CLOSE
:
672 case PCEP_OBJ_CLASS_OF
:
674 case PCEP_OBJ_CLASS_LSP
:
676 case PCEP_OBJ_CLASS_SRP
:
678 case PCEP_OBJ_CLASS_VENDOR_INFO
:
679 return "VENDOR_INFO";
680 case PCEP_OBJ_CLASS_INTER_LAYER
:
681 return "INTER_LAYER";
682 case PCEP_OBJ_CLASS_SWITCH_LAYER
:
683 return "SWITCH_LAYER";
684 case PCEP_OBJ_CLASS_REQ_ADAP_CAP
:
685 return "REQ_ADAP_CAP";
686 case PCEP_OBJ_CLASS_SERVER_IND
:
688 case PCEP_OBJ_CLASS_ASSOCIATION
:
689 return "ASSOCIATION";
690 case PCEP_OBJ_CLASS_MAX
:
694 assert(!"Reached end of function where we are not expecting to");
697 const char *pcep_object_type_name(enum pcep_object_classes obj_class
,
698 enum pcep_object_types obj_type
)
700 switch (TUP(obj_class
, obj_type
)) {
701 case TUP(PCEP_OBJ_CLASS_OPEN
, PCEP_OBJ_TYPE_OPEN
):
703 case TUP(PCEP_OBJ_CLASS_RP
, PCEP_OBJ_TYPE_RP
):
705 case TUP(PCEP_OBJ_CLASS_NOPATH
, PCEP_OBJ_TYPE_NOPATH
):
707 case TUP(PCEP_OBJ_CLASS_ENDPOINTS
, PCEP_OBJ_TYPE_ENDPOINT_IPV4
):
708 return "ENDPOINT_IPV4";
709 case TUP(PCEP_OBJ_CLASS_ENDPOINTS
, PCEP_OBJ_TYPE_ENDPOINT_IPV6
):
710 return "ENDPOINT_IPV6";
711 case TUP(PCEP_OBJ_CLASS_BANDWIDTH
, PCEP_OBJ_TYPE_BANDWIDTH_REQ
):
712 return "BANDWIDTH_REQ";
713 case TUP(PCEP_OBJ_CLASS_BANDWIDTH
, PCEP_OBJ_TYPE_BANDWIDTH_TELSP
):
714 return "BANDWIDTH_TELSP";
715 case TUP(PCEP_OBJ_CLASS_BANDWIDTH
, PCEP_OBJ_TYPE_BANDWIDTH_CISCO
):
716 return "BANDWIDTH_CISCO";
717 case TUP(PCEP_OBJ_CLASS_METRIC
, PCEP_OBJ_TYPE_METRIC
):
719 case TUP(PCEP_OBJ_CLASS_ERO
, PCEP_OBJ_TYPE_ERO
):
721 case TUP(PCEP_OBJ_CLASS_RRO
, PCEP_OBJ_TYPE_RRO
):
723 case TUP(PCEP_OBJ_CLASS_LSPA
, PCEP_OBJ_TYPE_LSPA
):
725 case TUP(PCEP_OBJ_CLASS_IRO
, PCEP_OBJ_TYPE_IRO
):
727 case TUP(PCEP_OBJ_CLASS_SVEC
, PCEP_OBJ_TYPE_SVEC
):
729 case TUP(PCEP_OBJ_CLASS_NOTF
, PCEP_OBJ_TYPE_NOTF
):
731 case TUP(PCEP_OBJ_CLASS_ERROR
, PCEP_OBJ_TYPE_ERROR
):
733 case TUP(PCEP_OBJ_CLASS_CLOSE
, PCEP_OBJ_TYPE_CLOSE
):
735 case TUP(PCEP_OBJ_CLASS_INTER_LAYER
, PCEP_OBJ_TYPE_INTER_LAYER
):
736 return "INTER_LAYER";
737 case TUP(PCEP_OBJ_CLASS_SWITCH_LAYER
, PCEP_OBJ_TYPE_SWITCH_LAYER
):
738 return "SWITCH_LAYER";
739 case TUP(PCEP_OBJ_CLASS_REQ_ADAP_CAP
, PCEP_OBJ_TYPE_REQ_ADAP_CAP
):
740 return "REQ_ADAP_CAP";
741 case TUP(PCEP_OBJ_CLASS_SERVER_IND
, PCEP_OBJ_TYPE_SERVER_IND
):
743 case TUP(PCEP_OBJ_CLASS_ASSOCIATION
, PCEP_OBJ_TYPE_ASSOCIATION_IPV4
):
744 return "ASSOCIATION_IPV4";
745 case TUP(PCEP_OBJ_CLASS_ASSOCIATION
, PCEP_OBJ_TYPE_ASSOCIATION_IPV6
):
746 return "ASSOCIATION_IPV6";
747 case TUP(PCEP_OBJ_CLASS_OF
, PCEP_OBJ_TYPE_OF
):
754 const char *pcep_lsp_status_name(enum pcep_lsp_operational_status status
)
757 case PCEP_LSP_OPERATIONAL_DOWN
:
759 case PCEP_LSP_OPERATIONAL_UP
:
761 case PCEP_LSP_OPERATIONAL_ACTIVE
:
763 case PCEP_LSP_OPERATIONAL_GOING_DOWN
:
765 case PCEP_LSP_OPERATIONAL_GOING_UP
:
769 assert(!"Reached end of function where we do not expect to");
773 const char *pcep_tlv_type_name(enum pcep_object_tlv_types tlv_type
)
776 case PCEP_OBJ_TLV_TYPE_NO_PATH_VECTOR
:
777 return "NO_PATH_VECTOR";
778 case PCEP_OBJ_TLV_TYPE_OBJECTIVE_FUNCTION_LIST
:
779 return "OBJECTIVE_FUNCTION_LIST";
780 case PCEP_OBJ_TLV_TYPE_VENDOR_INFO
:
781 return "VENDOR_INFO";
782 case PCEP_OBJ_TLV_TYPE_STATEFUL_PCE_CAPABILITY
:
783 return "STATEFUL_PCE_CAPABILITY";
784 case PCEP_OBJ_TLV_TYPE_SYMBOLIC_PATH_NAME
:
785 return "SYMBOLIC_PATH_NAME";
786 case PCEP_OBJ_TLV_TYPE_IPV4_LSP_IDENTIFIERS
:
787 return "IPV4_LSP_IDENTIFIERS";
788 case PCEP_OBJ_TLV_TYPE_IPV6_LSP_IDENTIFIERS
:
789 return "IPV6_LSP_IDENTIFIERS";
790 case PCEP_OBJ_TLV_TYPE_LSP_ERROR_CODE
:
791 return "LSP_ERROR_CODE";
792 case PCEP_OBJ_TLV_TYPE_RSVP_ERROR_SPEC
:
793 return "RSVP_ERROR_SPEC";
794 case PCEP_OBJ_TLV_TYPE_LSP_DB_VERSION
:
795 return "LSP_DB_VERSION";
796 case PCEP_OBJ_TLV_TYPE_SPEAKER_ENTITY_ID
:
797 return "SPEAKER_ENTITY_ID";
798 case PCEP_OBJ_TLV_TYPE_SR_PCE_CAPABILITY
:
799 return "SR_PCE_CAPABILITY";
800 case PCEP_OBJ_TLV_TYPE_PATH_SETUP_TYPE
:
801 return "PATH_SETUP_TYPE";
802 case PCEP_OBJ_TLV_TYPE_PATH_SETUP_TYPE_CAPABILITY
:
803 return "PATH_SETUP_TYPE_CAPABILITY";
804 case PCEP_OBJ_TLV_TYPE_SRPOLICY_POL_ID
:
805 return "SRPOLICY_POL_ID";
806 case PCEP_OBJ_TLV_TYPE_SRPOLICY_POL_NAME
:
807 return "SRPOLICY_POL_NAME";
808 case PCEP_OBJ_TLV_TYPE_SRPOLICY_CPATH_ID
:
809 return "SRPOLICY_CPATH_ID";
810 case PCEP_OBJ_TLV_TYPE_SRPOLICY_CPATH_PREFERENCE
:
811 return "SRPOLICY_CPATH_PREFERENCE";
812 case PCEP_OBJ_TLV_TYPE_UNKNOWN
:
814 case PCEP_OBJ_TLV_TYPE_ARBITRARY
:
816 case PCEP_OBJ_TYPE_CISCO_BSID
:
820 assert(!"Reached end of function where we do not expect to");
823 const char *pcep_ro_type_name(enum pcep_ro_subobj_types ro_type
)
827 case RO_SUBOBJ_TYPE_IPV4
:
829 case RO_SUBOBJ_TYPE_IPV6
:
831 case RO_SUBOBJ_TYPE_LABEL
:
833 case RO_SUBOBJ_TYPE_UNNUM
:
835 case RO_SUBOBJ_TYPE_ASN
:
837 case RO_SUBOBJ_TYPE_SR
:
839 case RO_SUBOBJ_UNKNOWN
:
843 assert(!"Reached end of function where we do not expect to");
846 const char *pcep_nai_type_name(enum pcep_sr_subobj_nai nai_type
)
849 case PCEP_SR_SUBOBJ_NAI_ABSENT
:
851 case PCEP_SR_SUBOBJ_NAI_IPV4_NODE
:
853 case PCEP_SR_SUBOBJ_NAI_IPV6_NODE
:
855 case PCEP_SR_SUBOBJ_NAI_IPV4_ADJACENCY
:
856 return "IPV4_ADJACENCY";
857 case PCEP_SR_SUBOBJ_NAI_IPV6_ADJACENCY
:
858 return "IPV6_ADJACENCY";
859 case PCEP_SR_SUBOBJ_NAI_UNNUMBERED_IPV4_ADJACENCY
:
860 return "UNNUMBERED_IPV4_ADJACENCY";
861 case PCEP_SR_SUBOBJ_NAI_LINK_LOCAL_IPV6_ADJACENCY
:
862 return "LINK_LOCAL_IPV6_ADJACENCY";
863 case PCEP_SR_SUBOBJ_NAI_UNKNOWN
:
867 assert(!"Reached end of function where we do not expect to");
870 const char *pcep_metric_type_name(enum pcep_metric_types type
)
873 case PCEP_METRIC_IGP
:
877 case PCEP_METRIC_HOP_COUNT
:
879 case PCEP_METRIC_AGGREGATE_BW
:
880 return "AGGREGATE_BW";
881 case PCEP_METRIC_MOST_LOADED_LINK
:
882 return "MOST_LOADED_LINK";
883 case PCEP_METRIC_CUMULATIVE_IGP
:
884 return "CUMULATIVE_IGP";
885 case PCEP_METRIC_CUMULATIVE_TE
:
886 return "CUMULATIVE_TE";
887 case PCEP_METRIC_P2MP_IGP
:
889 case PCEP_METRIC_P2MP_TE
:
891 case PCEP_METRIC_P2MP_HOP_COUNT
:
892 return "P2MP_HOP_COUNT";
893 case PCEP_METRIC_SEGMENT_ID_DEPTH
:
894 return "SEGMENT_ID_DEPTH";
895 case PCEP_METRIC_PATH_DELAY
:
897 case PCEP_METRIC_PATH_DELAY_VARIATION
:
898 return "PATH_DELAY_VARIATION";
899 case PCEP_METRIC_PATH_LOSS
:
901 case PCEP_METRIC_P2MP_PATH_DELAY
:
902 return "P2MP_PATH_DELAY";
903 case PCEP_METRIC_P2MP_PATH_DELAY_VARIATION
:
904 return "P2MP_PATH_DELAY_VARIATION";
905 case PCEP_METRIC_P2MP_PATH_LOSS
:
906 return "P2MP_PATH_LOSS";
907 case PCEP_METRIC_NUM_PATH_ADAPTATIONS
:
908 return "NUM_PATH_ADAPTATIONS";
909 case PCEP_METRIC_NUM_PATH_LAYERS
:
910 return "NUM_PATH_LAYERS";
911 case PCEP_METRIC_DOMAIN_COUNT
:
912 return "DOMAIN_COUNT";
913 case PCEP_METRIC_BORDER_NODE_COUNT
:
914 return "BORDER_NODE_COUNT";
920 const char *pcep_nopath_tlv_err_code_name(enum pcep_nopath_tlv_err_codes type
)
923 case PCEP_NOPATH_TLV_ERR_NO_TLV
:
925 case PCEP_NOPATH_TLV_ERR_PCE_UNAVAILABLE
:
926 return "PCE_UNAVAILABLE";
927 case PCEP_NOPATH_TLV_ERR_UNKNOWN_DST
:
928 return "UNKNOWN_DST";
929 case PCEP_NOPATH_TLV_ERR_UNKNOWN_SRC
:
930 return "UNKNOWN_SRC";
936 const char *format_objfun_set(uint32_t flags
)
940 for (i
= 1, c
= 0; i
<= MAX_OBJFUN_TYPE
; i
++) {
941 if (CHECK_FLAG(flags
, i
)) {
943 PATHD_FORMAT(", %s", objfun_type_name(i
));
945 PATHD_FORMAT("%s", objfun_type_name(i
));
949 return PATHD_FORMAT_FINI();
953 const char *format_pcc_opts(struct pcc_opts
*opts
)
956 _format_pcc_opts(0, opts
);
957 return PATHD_FORMAT_FINI();
960 const char *format_pcc_state(struct pcc_state
*state
)
963 _format_pcc_state(0, state
);
964 return PATHD_FORMAT_FINI();
967 const char *format_ctrl_state(struct ctrl_state
*state
)
970 _format_ctrl_state(0, state
);
971 return PATHD_FORMAT_FINI();
974 const char *format_path(struct path
*path
)
977 _format_path(0, path
);
978 return PATHD_FORMAT_FINI();
981 const char *format_pcep_event(pcep_event
*event
)
984 _format_pcep_event(0, event
);
985 return PATHD_FORMAT_FINI();
988 const char *format_pcep_message(struct pcep_message
*msg
)
991 _format_pcep_message(0, msg
);
992 return PATHD_FORMAT_FINI();
995 void _format_pcc_opts(int ps
, struct pcc_opts
*opts
)
998 PATHD_FORMAT("NULL\n");
1000 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1002 if (IS_IPADDR_V4(&opts
->addr
)) {
1003 PATHD_FORMAT("%*saddr_v4: %pI4\n", ps2
, "",
1004 &opts
->addr
.ipaddr_v4
);
1006 PATHD_FORMAT("%*saddr_v4: undefined", ps2
, "");
1008 if (IS_IPADDR_V6(&opts
->addr
)) {
1009 PATHD_FORMAT("%*saddr_v6: %pI6\n", ps2
, "",
1010 &opts
->addr
.ipaddr_v6
);
1012 PATHD_FORMAT("%*saddr_v6: undefined", ps2
, "");
1014 PATHD_FORMAT("%*sport: %i\n", ps2
, "", opts
->port
);
1015 PATHD_FORMAT("%*smsd: %i\n", ps2
, "", opts
->msd
);
1019 void _format_pce_opts(int ps
, struct pce_opts
*opts
)
1022 PATHD_FORMAT("NULL\n");
1024 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1026 if (IS_IPADDR_V6(&opts
->addr
)) {
1027 PATHD_FORMAT("%*saddr: %pI6\n", ps2
, "",
1028 &opts
->addr
.ipaddr_v6
);
1030 PATHD_FORMAT("%*saddr: %pI4\n", ps2
, "",
1031 &opts
->addr
.ipaddr_v4
);
1033 PATHD_FORMAT("%*sport: %i\n", ps2
, "", opts
->port
);
1037 void _format_pcc_caps(int ps
, struct pcep_caps
*caps
)
1039 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1041 PATHD_FORMAT("%*sis_stateful: %d\n", ps2
, "", caps
->is_stateful
);
1044 void _format_pcc_state(int ps
, struct pcc_state
*state
)
1046 if (state
== NULL
) {
1047 PATHD_FORMAT("NULL\n");
1049 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1051 PATHD_FORMAT("%*sstatus: %s\n", ps2
, "",
1052 pcc_status_name(state
->status
));
1053 PATHD_FORMAT("%*spcc_opts: ", ps2
, "");
1054 _format_pcc_opts(ps2
, state
->pcc_opts
);
1055 PATHD_FORMAT("%*spce_opts: ", ps2
, "");
1056 _format_pce_opts(ps2
, state
->pce_opts
);
1057 if (state
->sess
== NULL
) {
1058 PATHD_FORMAT("%*ssess: NULL\n", ps2
, "");
1060 PATHD_FORMAT("%*ssess: <PCC SESSION %p>\n", ps2
, "",
1063 PATHD_FORMAT("%*scaps: ", ps2
, "");
1064 _format_pcc_caps(ps2
, &state
->caps
);
1068 void _format_ctrl_state(int ps
, struct ctrl_state
*state
)
1070 if (state
== NULL
) {
1071 PATHD_FORMAT("NULL\n");
1074 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1075 int ps3
= ps2
+ DEBUG_IDENT_SIZE
;
1077 if (state
->main
== NULL
) {
1078 PATHD_FORMAT("%*smain: NULL\n", ps2
, "");
1080 PATHD_FORMAT("%*smain: <THREAD MASTER %p>\n", ps2
, "",
1083 if (state
->self
== NULL
) {
1084 PATHD_FORMAT("%*sself: NULL\n", ps2
, "");
1086 PATHD_FORMAT("%*sself: <THREAD MASTER %p>\n", ps2
, "",
1089 PATHD_FORMAT("%*spcc_count: %d\n", ps2
, "", state
->pcc_count
);
1090 PATHD_FORMAT("%*spcc:\n", ps2
, "");
1091 for (i
= 0; i
< MAX_PCC
; i
++) {
1092 if (state
->pcc
[i
]) {
1093 PATHD_FORMAT("%*s- ", ps3
- 2, "");
1094 _format_pcc_state(ps3
, state
->pcc
[i
]);
1100 void _format_path(int ps
, struct path
*path
)
1103 PATHD_FORMAT("NULL\n");
1105 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1106 int ps3
= ps2
+ DEBUG_IDENT_SIZE
;
1108 PATHD_FORMAT("%*snbkey: \n", ps2
, "");
1109 PATHD_FORMAT("%*scolor: %u\n", ps3
, "", path
->nbkey
.color
);
1110 switch (path
->nbkey
.endpoint
.ipa_type
) {
1112 PATHD_FORMAT("%*sendpoint: %pI4\n", ps3
, "",
1113 &path
->nbkey
.endpoint
.ipaddr_v4
);
1116 PATHD_FORMAT("%*sendpoint: %pI6\n", ps3
, "",
1117 &path
->nbkey
.endpoint
.ipaddr_v6
);
1120 PATHD_FORMAT("%*sendpoint: NONE\n", ps3
, "");
1123 PATHD_FORMAT("%*spreference: %u\n", ps3
, "",
1124 path
->nbkey
.preference
);
1126 if (path
->sender
.ipa_type
== IPADDR_V4
) {
1127 PATHD_FORMAT("%*ssender: %pI4\n", ps2
, "",
1128 &path
->sender
.ipaddr_v4
);
1129 } else if (path
->sender
.ipa_type
== IPADDR_V6
) {
1130 PATHD_FORMAT("%*ssender: %pI6\n", ps2
, "",
1131 &path
->sender
.ipaddr_v6
);
1133 PATHD_FORMAT("%*ssender: UNDEFINED\n", ps2
, "");
1135 if (path
->pcc_addr
.ipa_type
== IPADDR_V4
) {
1136 PATHD_FORMAT("%*spcc_addr: %pI4\n", ps2
, "",
1137 &path
->pcc_addr
.ipaddr_v4
);
1138 } else if (path
->pcc_addr
.ipa_type
== IPADDR_V6
) {
1139 PATHD_FORMAT("%*spcc_addr: %pI6\n", ps2
, "",
1140 &path
->pcc_addr
.ipaddr_v6
);
1142 PATHD_FORMAT("%*spcc_addr: UNDEFINED\n", ps2
, "");
1144 PATHD_FORMAT("%*spcc_id: %u\n", ps2
, "", path
->pcc_id
);
1145 PATHD_FORMAT("%*screate_origin: %s (%u)\n", ps2
, "",
1146 srte_protocol_origin_name(path
->create_origin
),
1147 path
->create_origin
);
1148 PATHD_FORMAT("%*supdate_origin: %s (%u)\n", ps2
, "",
1149 srte_protocol_origin_name(path
->update_origin
),
1150 path
->update_origin
);
1151 if (path
->originator
!= NULL
) {
1152 PATHD_FORMAT("%*soriginator: %s\n", ps2
, "",
1155 PATHD_FORMAT("%*soriginator: UNDEFINED\n", ps2
, "");
1157 PATHD_FORMAT("%*stype: %s (%u)\n", ps2
, "",
1158 srte_candidate_type_name(path
->type
), path
->type
);
1159 PATHD_FORMAT("%*splsp_id: %u\n", ps2
, "", path
->plsp_id
);
1160 if (path
->name
== NULL
) {
1161 PATHD_FORMAT("%*sname: NULL\n", ps2
, "");
1163 PATHD_FORMAT("%*sname: %s\n", ps2
, "", path
->name
);
1165 PATHD_FORMAT("%*ssrp_id: %u\n", ps2
, "", path
->srp_id
);
1166 PATHD_FORMAT("%*sreq_id: %u\n", ps2
, "", path
->req_id
);
1167 PATHD_FORMAT("%*sstatus: %s (%u)\n", ps2
, "",
1168 pcep_lsp_status_name(path
->status
), path
->status
);
1169 PATHD_FORMAT("%*sdo_remove: %u\n", ps2
, "", path
->do_remove
);
1170 PATHD_FORMAT("%*sgo_active: %u\n", ps2
, "", path
->go_active
);
1171 PATHD_FORMAT("%*swas_created: %u\n", ps2
, "",
1173 PATHD_FORMAT("%*swas_removed: %u\n", ps2
, "",
1175 PATHD_FORMAT("%*sis_synching: %u\n", ps2
, "",
1177 PATHD_FORMAT("%*sis_delegated: %u\n", ps2
, "",
1178 path
->is_delegated
);
1179 PATHD_FORMAT("%*shas_bandwidth: %u\n", ps2
, "",
1180 path
->has_bandwidth
);
1181 if (path
->has_bandwidth
) {
1182 PATHD_FORMAT("%*senforce_bandwidth: %u\n", ps2
, "",
1183 path
->enforce_bandwidth
);
1184 PATHD_FORMAT("%*sbandwidth: %f\n", ps2
, "",
1187 PATHD_FORMAT("%*shas_pcc_objfun: %u\n", ps2
, "",
1188 path
->has_pcc_objfun
);
1189 if (path
->has_pcc_objfun
) {
1190 PATHD_FORMAT("%*senforce_pcc_objfun: %d\n", ps2
, "",
1191 path
->enforce_pcc_objfun
);
1192 PATHD_FORMAT("%*spcc_objfun: %s (%u)\n", ps2
, "",
1193 objfun_type_name(path
->pcc_objfun
),
1196 PATHD_FORMAT("%*shas_pce_objfun: %u\n", ps2
, "",
1197 path
->has_pce_objfun
);
1198 if (path
->has_pce_objfun
)
1199 PATHD_FORMAT("%*spce_objfun: %s (%u)\n", ps2
, "",
1200 objfun_type_name(path
->pce_objfun
),
1202 PATHD_FORMAT("%*shas_affinity_filters: %u\n", ps2
, "",
1203 path
->has_affinity_filters
);
1204 if (path
->has_affinity_filters
) {
1205 PATHD_FORMAT("%*sexclude_any: 0x%08x\n", ps2
, "",
1206 path
->affinity_filters
1207 [AFFINITY_FILTER_EXCLUDE_ANY
- 1]);
1208 PATHD_FORMAT("%*sinclude_any: 0x%08x\n", ps2
, "",
1209 path
->affinity_filters
1210 [AFFINITY_FILTER_INCLUDE_ANY
- 1]);
1211 PATHD_FORMAT("%*sinclude_all: 0x%08x\n", ps2
, "",
1212 path
->affinity_filters
1213 [AFFINITY_FILTER_INCLUDE_ALL
- 1]);
1216 if (path
->first_hop
== NULL
) {
1217 PATHD_FORMAT("%*shops: []\n", ps2
, "");
1219 PATHD_FORMAT("%*shops: \n", ps2
, "");
1220 for (struct path_hop
*hop
= path
->first_hop
;
1221 hop
!= NULL
; hop
= hop
->next
) {
1222 PATHD_FORMAT("%*s- ", ps3
- 2, "");
1223 _format_path_hop(ps3
, hop
);
1226 if (path
->first_metric
== NULL
) {
1227 PATHD_FORMAT("%*smetrics: []\n", ps2
, "");
1229 PATHD_FORMAT("%*smetrics: \n", ps2
, "");
1230 for (struct path_metric
*metric
= path
->first_metric
;
1231 NULL
!= metric
; metric
= metric
->next
) {
1232 PATHD_FORMAT("%*s- ", ps3
- 2, "");
1233 _format_path_metric(ps3
, metric
);
1239 void _format_path_metric(int ps
, struct path_metric
*metric
)
1241 PATHD_FORMAT("type: %s (%u)\n", pcep_metric_type_name(metric
->type
),
1243 PATHD_FORMAT("%*senforce: %u\n", ps
, "", metric
->enforce
);
1244 PATHD_FORMAT("%*sis_bound: %u\n", ps
, "", metric
->is_bound
);
1245 PATHD_FORMAT("%*sis_computed: %u\n", ps
, "", metric
->is_computed
);
1246 PATHD_FORMAT("%*svalue: %f\n", ps
, "", metric
->value
);
1249 void _format_path_hop(int ps
, struct path_hop
*hop
)
1251 PATHD_FORMAT("is_loose: %u\n", hop
->is_loose
);
1252 PATHD_FORMAT("%*shas_sid: %u\n", ps
, "", hop
->has_sid
);
1255 PATHD_FORMAT("%*sis_mpls: %u\n", ps
, "", hop
->is_mpls
);
1257 PATHD_FORMAT("%*shas_attribs: %u\n", ps
, "",
1259 PATHD_FORMAT("%*slabel: %u\n", ps
, "",
1260 hop
->sid
.mpls
.label
);
1261 if (hop
->has_attribs
) {
1262 PATHD_FORMAT("%*straffic_class: %u\n", ps
, "",
1263 hop
->sid
.mpls
.traffic_class
);
1264 PATHD_FORMAT("%*sis_bottom: %u\n", ps
, "",
1265 hop
->sid
.mpls
.is_bottom
);
1266 PATHD_FORMAT("%*sttl: %u\n", ps
, "",
1270 PATHD_FORMAT("%*sSID: %u\n", ps
, "", hop
->sid
.value
);
1274 PATHD_FORMAT("%*shas_nai: %u\n", ps
, "", hop
->has_nai
);
1276 PATHD_FORMAT("%*snai_type: %s (%u)\n", ps
, "",
1277 pcep_nai_type_name(hop
->nai
.type
), hop
->nai
.type
);
1278 switch (hop
->nai
.type
) {
1279 case PCEP_SR_SUBOBJ_NAI_IPV4_NODE
:
1280 PATHD_FORMAT("%*sNAI: %pI4\n", ps
, "",
1281 &hop
->nai
.local_addr
.ipaddr_v4
);
1283 case PCEP_SR_SUBOBJ_NAI_IPV6_NODE
:
1284 PATHD_FORMAT("%*sNAI: %pI6\n", ps
, "",
1285 &hop
->nai
.local_addr
.ipaddr_v6
);
1287 case PCEP_SR_SUBOBJ_NAI_IPV4_ADJACENCY
:
1288 PATHD_FORMAT("%*sNAI: %pI4/%pI4\n", ps
, "",
1289 &hop
->nai
.local_addr
.ipaddr_v4
,
1290 &hop
->nai
.remote_addr
.ipaddr_v4
);
1292 case PCEP_SR_SUBOBJ_NAI_IPV6_ADJACENCY
:
1293 PATHD_FORMAT("%*sNAI: %pI6/%pI6\n", ps
, "",
1294 &hop
->nai
.local_addr
.ipaddr_v6
,
1295 &hop
->nai
.remote_addr
.ipaddr_v6
);
1297 case PCEP_SR_SUBOBJ_NAI_UNNUMBERED_IPV4_ADJACENCY
:
1298 PATHD_FORMAT("%*sNAI: %pI6(%u)/%pI6(%u)\n", ps
, "",
1299 &hop
->nai
.local_addr
.ipaddr_v6
,
1300 hop
->nai
.local_iface
,
1301 &hop
->nai
.remote_addr
.ipaddr_v6
,
1302 hop
->nai
.remote_iface
);
1304 case PCEP_SR_SUBOBJ_NAI_ABSENT
:
1305 case PCEP_SR_SUBOBJ_NAI_LINK_LOCAL_IPV6_ADJACENCY
:
1306 case PCEP_SR_SUBOBJ_NAI_UNKNOWN
:
1307 PATHD_FORMAT("%*sNAI: UNSUPPORTED\n", ps
, "");
1313 void _format_pcep_event(int ps
, pcep_event
*event
)
1315 if (event
== NULL
) {
1316 PATHD_FORMAT("NULL\n");
1318 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1320 PATHD_FORMAT("%*sevent_type: %s\n", ps2
, "",
1321 pcep_event_type_name(event
->event_type
));
1322 PATHD_FORMAT("%*sevent_time: %s", ps2
, "",
1323 ctime(&event
->event_time
));
1324 if (event
->session
== NULL
) {
1325 PATHD_FORMAT("%*ssession: NULL\n", ps2
, "");
1327 PATHD_FORMAT("%*ssession: <PCC SESSION %p>\n", ps2
, "",
1330 PATHD_FORMAT("%*smessage: ", ps2
, "");
1331 _format_pcep_message(ps2
, event
->message
);
1335 void _format_pcep_message(int ps
, struct pcep_message
*msg
)
1338 PATHD_FORMAT("NULL\n");
1340 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1342 PATHD_FORMAT("%*spcep_version: %u\n", ps2
, "",
1343 msg
->msg_header
->pcep_version
);
1344 PATHD_FORMAT("%*stype: %s (%u)\n", ps2
, "",
1345 pcep_message_type_name(msg
->msg_header
->type
),
1346 msg
->msg_header
->type
);
1347 PATHD_FORMAT("%*sobjects: ", ps2
, "");
1348 _format_pcep_objects(ps2
, msg
->obj_list
);
1352 void _format_pcep_objects(int ps
, double_linked_list
*objs
)
1355 PATHD_FORMAT("NULL\n");
1357 double_linked_list_node
*node
;
1358 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1361 if (objs
->num_entries
== 0) {
1362 PATHD_FORMAT("[]\n");
1367 for (node
= objs
->head
, i
= 0; node
!= NULL
;
1368 node
= node
->next_node
, i
++) {
1369 struct pcep_object_header
*obj
=
1370 (struct pcep_object_header
*)node
->data
;
1371 PATHD_FORMAT("%*s- ", ps2
- 2, "");
1372 _format_pcep_object(ps2
, obj
);
1377 void _format_pcep_object(int ps
, struct pcep_object_header
*obj
)
1380 PATHD_FORMAT("NULL\n");
1382 PATHD_FORMAT("object_class: %s (%u)\n",
1383 pcep_object_class_name(obj
->object_class
),
1385 PATHD_FORMAT("%*sobject_type: %s (%u)\n", ps
, "",
1386 pcep_object_type_name(obj
->object_class
,
1389 PATHD_FORMAT("%*sflag_p: %u\n", ps
, "", obj
->flag_p
);
1390 PATHD_FORMAT("%*sflag_i: %u\n", ps
, "", obj
->flag_i
);
1391 _format_pcep_object_details(ps
, obj
);
1392 _format_pcep_object_tlvs(ps
, obj
);
1396 void _format_pcep_object_details(int ps
, struct pcep_object_header
*obj
)
1398 switch (TUP(obj
->object_class
, obj
->object_type
)) {
1399 case TUP(PCEP_OBJ_CLASS_ERROR
, PCEP_OBJ_TYPE_ERROR
):
1400 _format_pcep_object_error(ps
, (struct pcep_object_error
*)obj
);
1402 case TUP(PCEP_OBJ_CLASS_OPEN
, PCEP_OBJ_TYPE_OPEN
):
1403 _format_pcep_object_open(ps
, (struct pcep_object_open
*)obj
);
1405 case TUP(PCEP_OBJ_CLASS_RP
, PCEP_OBJ_TYPE_RP
):
1406 _format_pcep_object_rp(ps
, (struct pcep_object_rp
*)obj
);
1408 case TUP(PCEP_OBJ_CLASS_SRP
, PCEP_OBJ_TYPE_SRP
):
1409 _format_pcep_object_srp(ps
, (struct pcep_object_srp
*)obj
);
1411 case TUP(PCEP_OBJ_CLASS_LSP
, PCEP_OBJ_TYPE_LSP
):
1412 _format_pcep_object_lsp(ps
, (struct pcep_object_lsp
*)obj
);
1414 case TUP(PCEP_OBJ_CLASS_LSPA
, PCEP_OBJ_TYPE_LSPA
):
1415 _format_pcep_object_lspa(ps
, (struct pcep_object_lspa
*)obj
);
1417 case TUP(PCEP_OBJ_CLASS_ENDPOINTS
, PCEP_OBJ_TYPE_ENDPOINT_IPV4
):
1418 _format_pcep_object_ipv4_endpoint(
1419 ps
, (struct pcep_object_endpoints_ipv4
*)obj
);
1421 case TUP(PCEP_OBJ_CLASS_ERO
, PCEP_OBJ_TYPE_ERO
):
1422 _format_pcep_object_ro(ps
, (struct pcep_object_ro
*)obj
);
1424 case TUP(PCEP_OBJ_CLASS_METRIC
, PCEP_OBJ_TYPE_METRIC
):
1425 _format_pcep_object_metric(ps
,
1426 (struct pcep_object_metric
*)obj
);
1428 case TUP(PCEP_OBJ_CLASS_BANDWIDTH
, PCEP_OBJ_TYPE_BANDWIDTH_REQ
):
1429 case TUP(PCEP_OBJ_CLASS_BANDWIDTH
, PCEP_OBJ_TYPE_BANDWIDTH_CISCO
):
1430 _format_pcep_object_bandwidth(
1431 ps
, (struct pcep_object_bandwidth
*)obj
);
1433 case TUP(PCEP_OBJ_CLASS_NOPATH
, PCEP_OBJ_TYPE_NOPATH
):
1434 _format_pcep_object_nopath(ps
,
1435 (struct pcep_object_nopath
*)obj
);
1437 case TUP(PCEP_OBJ_CLASS_OF
, PCEP_OBJ_TYPE_OF
):
1438 _format_pcep_object_objfun(
1439 ps
, (struct pcep_object_objective_function
*)obj
);
1442 PATHD_FORMAT("%*s...\n", ps
, "");
1447 void _format_pcep_object_error(int ps
, struct pcep_object_error
*obj
)
1449 PATHD_FORMAT("%*serror_type: %s (%u)\n", ps
, "",
1450 pcep_error_type_name(obj
->error_type
), obj
->error_type
);
1451 PATHD_FORMAT("%*serror_value: %s (%u)\n", ps
, "",
1452 pcep_error_value_name(obj
->error_type
, obj
->error_value
),
1457 void _format_pcep_object_open(int ps
, struct pcep_object_open
*obj
)
1459 PATHD_FORMAT("%*sopen_version: %u\n", ps
, "", obj
->open_version
);
1460 PATHD_FORMAT("%*sopen_keepalive: %u\n", ps
, "", obj
->open_keepalive
);
1461 PATHD_FORMAT("%*sopen_deadtimer: %u\n", ps
, "", obj
->open_deadtimer
);
1462 PATHD_FORMAT("%*sopen_sid: %u\n", ps
, "", obj
->open_sid
);
1465 void _format_pcep_object_rp(int ps
, struct pcep_object_rp
*obj
)
1467 PATHD_FORMAT("%*spriority: %u\n", ps
, "", obj
->priority
);
1468 PATHD_FORMAT("%*sflag_reoptimization: %u\n", ps
, "",
1469 obj
->flag_reoptimization
);
1470 PATHD_FORMAT("%*sflag_bidirectional: %u\n", ps
, "",
1471 obj
->flag_bidirectional
);
1472 PATHD_FORMAT("%*sflag_strict: %u\n", ps
, "", obj
->flag_strict
);
1473 PATHD_FORMAT("%*sflag_of: %u\n", ps
, "", obj
->flag_of
);
1474 PATHD_FORMAT("%*srequest_id: %u\n", ps
, "", obj
->request_id
);
1478 void _format_pcep_object_srp(int ps
, struct pcep_object_srp
*obj
)
1480 PATHD_FORMAT("%*sflag_lsp_remove: %u\n", ps
, "", obj
->flag_lsp_remove
);
1481 PATHD_FORMAT("%*ssrp_id_number: %u\n", ps
, "", obj
->srp_id_number
);
1484 void _format_pcep_object_lsp(int ps
, struct pcep_object_lsp
*obj
)
1486 PATHD_FORMAT("%*splsp_id: %u\n", ps
, "", obj
->plsp_id
);
1487 PATHD_FORMAT("%*sstatus: %s\n", ps
, "",
1488 pcep_lsp_status_name(obj
->operational_status
));
1489 PATHD_FORMAT("%*sflag_d: %u\n", ps
, "", obj
->flag_d
);
1490 PATHD_FORMAT("%*sflag_s: %u\n", ps
, "", obj
->flag_s
);
1491 PATHD_FORMAT("%*sflag_r: %u\n", ps
, "", obj
->flag_r
);
1492 PATHD_FORMAT("%*sflag_a: %u\n", ps
, "", obj
->flag_a
);
1493 PATHD_FORMAT("%*sflag_c: %u\n", ps
, "", obj
->flag_c
);
1496 void _format_pcep_object_lspa(int ps
, struct pcep_object_lspa
*obj
)
1498 PATHD_FORMAT("%*slspa_exclude_any: 0x%08x\n", ps
, "",
1499 obj
->lspa_exclude_any
);
1500 PATHD_FORMAT("%*slspa_include_any: 0x%08x\n", ps
, "",
1501 obj
->lspa_include_any
);
1502 PATHD_FORMAT("%*slspa_include_all: 0x%08x\n", ps
, "",
1503 obj
->lspa_include_all
);
1504 PATHD_FORMAT("%*ssetup_priority: %u\n", ps
, "", obj
->setup_priority
);
1505 PATHD_FORMAT("%*sholding_priority: %u\n", ps
, "",
1506 obj
->holding_priority
);
1507 PATHD_FORMAT("%*sflag_local_protection: %u\n", ps
, "",
1508 obj
->flag_local_protection
);
1511 void _format_pcep_object_ipv4_endpoint(int ps
,
1512 struct pcep_object_endpoints_ipv4
*obj
)
1514 PATHD_FORMAT("%*ssrc_ipv4: %pI4\n", ps
, "", &obj
->src_ipv4
);
1515 PATHD_FORMAT("%*sdst_ipv4: %pI4\n", ps
, "", &obj
->dst_ipv4
);
1518 void _format_pcep_object_metric(int ps
, struct pcep_object_metric
*obj
)
1520 PATHD_FORMAT("%*stype: %s (%u)\n", ps
, "",
1521 pcep_metric_type_name(obj
->type
), obj
->type
);
1522 PATHD_FORMAT("%*sflag_b: %u\n", ps
, "", obj
->flag_b
);
1523 PATHD_FORMAT("%*sflag_c: %u\n", ps
, "", obj
->flag_c
);
1524 PATHD_FORMAT("%*svalue: %f\n", ps
, "", obj
->value
);
1527 void _format_pcep_object_bandwidth(int ps
, struct pcep_object_bandwidth
*obj
)
1529 PATHD_FORMAT("%*sbandwidth: %f\n", ps
, "", obj
->bandwidth
);
1532 void _format_pcep_object_nopath(int ps
, struct pcep_object_nopath
*obj
)
1534 PATHD_FORMAT("%*sni: %u\n", ps
, "", obj
->ni
);
1535 PATHD_FORMAT("%*sflag_c: %u\n", ps
, "", obj
->flag_c
);
1536 PATHD_FORMAT("%*serr_code: %s (%u)\n", ps
, "",
1537 pcep_nopath_tlv_err_code_name(obj
->err_code
),
1541 void _format_pcep_object_objfun(int ps
,
1542 struct pcep_object_objective_function
*obj
)
1544 PATHD_FORMAT("%*sof_code: %s (%u)\n", ps
, "",
1545 objfun_type_name(obj
->of_code
), obj
->of_code
);
1548 void _format_pcep_object_ro(int ps
, struct pcep_object_ro
*obj
)
1550 double_linked_list
*obj_list
= obj
->sub_objects
;
1551 double_linked_list_node
*node
;
1552 struct pcep_object_ro_subobj
*sub_obj
;
1554 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1557 if ((obj_list
== NULL
) || (obj_list
->num_entries
== 0)) {
1558 PATHD_FORMAT("%*ssub_objects: []\n", ps
, "");
1562 PATHD_FORMAT("%*ssub_objects:\n", ps
, "");
1564 for (node
= obj_list
->head
, i
= 0; node
!= NULL
;
1565 node
= node
->next_node
, i
++) {
1566 sub_obj
= (struct pcep_object_ro_subobj
*)node
->data
;
1567 PATHD_FORMAT("%*s- flag_subobj_loose_hop: %u\n", ps2
- 2, "",
1568 sub_obj
->flag_subobj_loose_hop
);
1569 PATHD_FORMAT("%*sro_subobj_type: %s (%u)\n", ps2
, "",
1570 pcep_ro_type_name(sub_obj
->ro_subobj_type
),
1571 sub_obj
->ro_subobj_type
);
1572 _format_pcep_object_ro_details(ps2
, sub_obj
);
1576 void _format_pcep_object_ro_details(int ps
, struct pcep_object_ro_subobj
*ro
)
1578 switch (ro
->ro_subobj_type
) {
1579 case RO_SUBOBJ_TYPE_IPV4
:
1580 _format_pcep_object_ro_ipv4(ps
,
1581 (struct pcep_ro_subobj_ipv4
*)ro
);
1583 case RO_SUBOBJ_TYPE_SR
:
1584 _format_pcep_object_ro_sr(ps
, (struct pcep_ro_subobj_sr
*)ro
);
1586 case RO_SUBOBJ_TYPE_IPV6
:
1587 case RO_SUBOBJ_TYPE_LABEL
:
1588 case RO_SUBOBJ_TYPE_UNNUM
:
1589 case RO_SUBOBJ_TYPE_ASN
:
1590 case RO_SUBOBJ_UNKNOWN
:
1591 PATHD_FORMAT("%*s...\n", ps
, "");
1596 void _format_pcep_object_ro_ipv4(int ps
, struct pcep_ro_subobj_ipv4
*obj
)
1598 PATHD_FORMAT("%*sip_addr: %pI4\n", ps
, "", &obj
->ip_addr
);
1599 PATHD_FORMAT("%*sprefix_length: %u\n", ps
, "", obj
->prefix_length
);
1600 PATHD_FORMAT("%*sflag_local_protection: %u\n", ps
, "",
1601 obj
->flag_local_protection
);
1604 void _format_pcep_object_ro_sr(int ps
, struct pcep_ro_subobj_sr
*obj
)
1606 PATHD_FORMAT("%*snai_type = %s (%u)\n", ps
, "",
1607 pcep_nai_type_name(obj
->nai_type
), obj
->nai_type
);
1608 PATHD_FORMAT("%*sflag_f: %u\n", ps
, "", obj
->flag_f
);
1609 PATHD_FORMAT("%*sflag_s: %u\n", ps
, "", obj
->flag_s
);
1610 PATHD_FORMAT("%*sflag_c: %u\n", ps
, "", obj
->flag_c
);
1611 PATHD_FORMAT("%*sflag_m: %u\n", ps
, "", obj
->flag_m
);
1614 PATHD_FORMAT("%*sSID: %u\n", ps
, "", obj
->sid
);
1616 PATHD_FORMAT("%*slabel: %u\n", ps
, "",
1617 GET_SR_ERO_SID_LABEL(obj
->sid
));
1619 PATHD_FORMAT("%*sTC: %u\n", ps
, "",
1620 GET_SR_ERO_SID_TC(obj
->sid
));
1621 PATHD_FORMAT("%*sS: %u\n", ps
, "",
1622 GET_SR_ERO_SID_S(obj
->sid
));
1623 PATHD_FORMAT("%*sTTL: %u\n", ps
, "",
1624 GET_SR_ERO_SID_TTL(obj
->sid
));
1630 struct in_addr
*laddr4
, *raddr4
;
1631 struct in6_addr
*laddr6
, *raddr6
;
1632 uint32_t *liface
, *riface
;
1633 assert(obj
->nai_list
!= NULL
);
1634 double_linked_list_node
*n
= obj
->nai_list
->head
;
1636 assert(n
->data
!= NULL
);
1637 switch (obj
->nai_type
) {
1638 case PCEP_SR_SUBOBJ_NAI_IPV4_NODE
:
1639 laddr4
= (struct in_addr
*)n
->data
;
1640 PATHD_FORMAT("%*sNAI: %pI4\n", ps
, "", laddr4
);
1642 case PCEP_SR_SUBOBJ_NAI_IPV6_NODE
:
1643 laddr6
= (struct in6_addr
*)n
->data
;
1644 PATHD_FORMAT("%*sNAI: %pI6\n", ps
, "", laddr6
);
1646 case PCEP_SR_SUBOBJ_NAI_IPV4_ADJACENCY
:
1647 assert(n
->next_node
!= NULL
);
1648 assert(n
->next_node
->data
!= NULL
);
1649 laddr4
= (struct in_addr
*)n
->data
;
1650 raddr4
= (struct in_addr
*)n
->next_node
->data
;
1651 PATHD_FORMAT("%*sNAI: %pI4/%pI4\n", ps
, "", laddr4
,
1654 case PCEP_SR_SUBOBJ_NAI_IPV6_ADJACENCY
:
1655 assert(n
->next_node
!= NULL
);
1656 assert(n
->next_node
->data
!= NULL
);
1657 laddr6
= (struct in6_addr
*)n
->data
;
1658 raddr6
= (struct in6_addr
*)n
->next_node
->data
;
1659 PATHD_FORMAT("%*sNAI: %pI6/%pI6\n", ps
, "", laddr6
,
1662 case PCEP_SR_SUBOBJ_NAI_UNNUMBERED_IPV4_ADJACENCY
:
1663 laddr4
= (struct in_addr
*)n
->data
;
1666 assert(n
->data
!= NULL
);
1667 liface
= (uint32_t *)n
->data
;
1670 assert(n
->data
!= NULL
);
1671 raddr4
= (struct in_addr
*)n
->data
;
1673 assert(n
->data
!= NULL
);
1674 riface
= (uint32_t *)n
->data
;
1675 PATHD_FORMAT("%*sNAI: %pI4(%u)/%pI4(%u)\n", ps
, "",
1676 laddr4
, *liface
, raddr4
, *riface
);
1678 case PCEP_SR_SUBOBJ_NAI_ABSENT
:
1679 case PCEP_SR_SUBOBJ_NAI_LINK_LOCAL_IPV6_ADJACENCY
:
1680 case PCEP_SR_SUBOBJ_NAI_UNKNOWN
:
1681 PATHD_FORMAT("%*sNAI: UNSUPPORTED\n", ps
, "");
1687 void _format_pcep_object_tlvs(int ps
, struct pcep_object_header
*obj
)
1689 double_linked_list
*tlv_list
= obj
->tlv_list
;
1690 struct pcep_object_tlv_header
*tlv
;
1691 double_linked_list_node
*node
;
1692 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1695 if (tlv_list
== NULL
)
1697 if (tlv_list
->num_entries
== 0) {
1698 PATHD_FORMAT("%*stlvs: []\n", ps
, "");
1702 PATHD_FORMAT("%*stlvs:\n", ps
, "");
1704 for (node
= tlv_list
->head
, i
= 0; node
!= NULL
;
1705 node
= node
->next_node
, i
++) {
1706 tlv
= (struct pcep_object_tlv_header
*)node
->data
;
1707 PATHD_FORMAT("%*s- ", ps2
- 2, "");
1708 _format_pcep_object_tlv(ps2
, tlv
);
1712 void _format_pcep_object_tlv(int ps
, struct pcep_object_tlv_header
*tlv_header
)
1714 PATHD_FORMAT("type: %s (%u)\n", pcep_tlv_type_name(tlv_header
->type
),
1716 _format_pcep_object_tlv_details(ps
, tlv_header
);
1719 void _format_pcep_object_tlv_details(int ps
,
1720 struct pcep_object_tlv_header
*tlv_header
)
1722 switch (tlv_header
->type
) {
1723 case PCEP_OBJ_TLV_TYPE_SYMBOLIC_PATH_NAME
:
1724 _format_pcep_object_tlv_symbolic_path_name(
1725 ps
, (struct pcep_object_tlv_symbolic_path_name
*)
1728 case PCEP_OBJ_TLV_TYPE_STATEFUL_PCE_CAPABILITY
:
1729 _format_pcep_object_tlv_stateful_pce_capability(
1730 ps
, (struct pcep_object_tlv_stateful_pce_capability
*)
1733 case PCEP_OBJ_TLV_TYPE_SR_PCE_CAPABILITY
:
1734 _format_pcep_object_tlv_sr_pce_capability(
1736 (struct pcep_object_tlv_sr_pce_capability
*)tlv_header
);
1738 case PCEP_OBJ_TLV_TYPE_PATH_SETUP_TYPE
:
1739 _format_pcep_object_tlv_path_setup_type(
1741 (struct pcep_object_tlv_path_setup_type
*)tlv_header
);
1743 case PCEP_OBJ_TLV_TYPE_NO_PATH_VECTOR
:
1744 case PCEP_OBJ_TLV_TYPE_OBJECTIVE_FUNCTION_LIST
:
1745 case PCEP_OBJ_TLV_TYPE_VENDOR_INFO
:
1746 case PCEP_OBJ_TLV_TYPE_IPV4_LSP_IDENTIFIERS
:
1747 case PCEP_OBJ_TLV_TYPE_IPV6_LSP_IDENTIFIERS
:
1748 case PCEP_OBJ_TLV_TYPE_LSP_ERROR_CODE
:
1749 case PCEP_OBJ_TLV_TYPE_RSVP_ERROR_SPEC
:
1750 case PCEP_OBJ_TLV_TYPE_LSP_DB_VERSION
:
1751 case PCEP_OBJ_TLV_TYPE_SPEAKER_ENTITY_ID
:
1752 case PCEP_OBJ_TLV_TYPE_PATH_SETUP_TYPE_CAPABILITY
:
1753 case PCEP_OBJ_TLV_TYPE_SRPOLICY_POL_ID
:
1754 case PCEP_OBJ_TLV_TYPE_SRPOLICY_POL_NAME
:
1755 case PCEP_OBJ_TLV_TYPE_SRPOLICY_CPATH_ID
:
1756 case PCEP_OBJ_TLV_TYPE_SRPOLICY_CPATH_PREFERENCE
:
1757 case PCEP_OBJ_TLV_TYPE_UNKNOWN
:
1758 case PCEP_OBJ_TYPE_CISCO_BSID
:
1759 case PCEP_OBJ_TLV_TYPE_ARBITRARY
:
1760 PATHD_FORMAT("%*s...\n", ps
, "");
1765 void _format_pcep_object_tlv_symbolic_path_name(
1766 int ps
, struct pcep_object_tlv_symbolic_path_name
*tlv
)
1768 PATHD_FORMAT("%*ssymbolic_path_name: %.*s\n", ps
, "",
1769 tlv
->symbolic_path_name_length
, tlv
->symbolic_path_name
);
1772 void _format_pcep_object_tlv_stateful_pce_capability(
1773 int ps
, struct pcep_object_tlv_stateful_pce_capability
*tlv
)
1775 PATHD_FORMAT("%*sflag_u_lsp_update_capability: %u\n", ps
, "",
1776 tlv
->flag_u_lsp_update_capability
);
1777 PATHD_FORMAT("%*sflag_s_include_db_version: %u\n", ps
, "",
1778 tlv
->flag_s_include_db_version
);
1779 PATHD_FORMAT("%*sflag_i_lsp_instantiation_capability: %u\n", ps
, "",
1780 tlv
->flag_i_lsp_instantiation_capability
);
1781 PATHD_FORMAT("%*sflag_t_triggered_resync: %u\n", ps
, "",
1782 tlv
->flag_t_triggered_resync
);
1783 PATHD_FORMAT("%*sflag_d_delta_lsp_sync: %u\n", ps
, "",
1784 tlv
->flag_d_delta_lsp_sync
);
1785 PATHD_FORMAT("%*sflag_f_triggered_initial_sync: %u\n", ps
, "",
1786 tlv
->flag_f_triggered_initial_sync
);
1789 void _format_pcep_object_tlv_sr_pce_capability(
1790 int ps
, struct pcep_object_tlv_sr_pce_capability
*tlv
)
1793 PATHD_FORMAT("%*sflag_n: %u\n", ps
, "", tlv
->flag_n
);
1794 PATHD_FORMAT("%*sflag_x: %u\n", ps
, "", tlv
->flag_x
);
1795 PATHD_FORMAT("%*smax_sid_depth: %u\n", ps
, "", tlv
->max_sid_depth
);
1798 void _format_pcep_object_tlv_path_setup_type(
1799 int ps
, struct pcep_object_tlv_path_setup_type
*tlv
)
1801 PATHD_FORMAT("%*spath_setup_type: %u\n", ps
, "", tlv
->path_setup_type
);