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
22 #include <libyang/libyang.h>
27 #include "pathd/path_pcep_debug.h"
29 static void _format_pcc_opts(int ps
, struct pcc_opts
*ops
);
30 static void _format_pce_opts(int ps
, struct pce_opts
*ops
);
31 static void _format_pcc_caps(int ps
, struct pcep_caps
*caps
);
32 static void _format_pcc_state(int ps
, struct pcc_state
*state
);
33 static void _format_ctrl_state(int ps
, struct ctrl_state
*state
);
34 static void _format_path(int ps
, struct path
*path
);
35 static void _format_path_hop(int ps
, struct path_hop
*hop
);
36 static void _format_path_metric(int ps
, struct path_metric
*metric
);
37 static void _format_pcep_event(int ps
, pcep_event
*event
);
38 static void _format_pcep_message(int ps
, struct pcep_message
*msg
);
39 static void _format_pcep_objects(int ps
, double_linked_list
*objs
);
40 static void _format_pcep_object(int ps
, struct pcep_object_header
*obj
);
41 static void _format_pcep_object_details(int ps
, struct pcep_object_header
*obj
);
42 static void _format_pcep_object_error(int ps
, struct pcep_object_error
*obj
);
43 static void _format_pcep_object_open(int ps
, struct pcep_object_open
*obj
);
44 static void _format_pcep_object_rp(int ps
, struct pcep_object_rp
*obj
);
45 static void _format_pcep_object_srp(int ps
, struct pcep_object_srp
*obj
);
46 static void _format_pcep_object_lsp(int psps
, struct pcep_object_lsp
*obj
);
47 static void _format_pcep_object_lspa(int psps
, struct pcep_object_lspa
*obj
);
49 _format_pcep_object_ipv4_endpoint(int ps
,
50 struct pcep_object_endpoints_ipv4
*obj
);
51 static void _format_pcep_object_metric(int ps
, struct pcep_object_metric
*obj
);
52 static void _format_pcep_object_bandwidth(int ps
,
53 struct pcep_object_bandwidth
*obj
);
54 static void _format_pcep_object_nopath(int ps
, struct pcep_object_nopath
*obj
);
56 _format_pcep_object_objfun(int ps
, struct pcep_object_objective_function
*obj
);
57 static void _format_pcep_object_ro(int ps
, struct pcep_object_ro
*obj
);
58 static void _format_pcep_object_ro_details(int ps
,
59 struct pcep_object_ro_subobj
*ro
);
60 static void _format_pcep_object_ro_ipv4(int ps
,
61 struct pcep_ro_subobj_ipv4
*obj
);
62 static void _format_pcep_object_ro_sr(int ps
, struct pcep_ro_subobj_sr
*obj
);
63 static void _format_pcep_object_tlvs(int ps
, struct pcep_object_header
*obj
);
64 static void _format_pcep_object_tlv(int ps
,
65 struct pcep_object_tlv_header
*tlv_header
);
67 _format_pcep_object_tlv_details(int ps
,
68 struct pcep_object_tlv_header
*tlv_header
);
69 static void _format_pcep_object_tlv_symbolic_path_name(
70 int ps
, struct pcep_object_tlv_symbolic_path_name
*tlv
);
71 static void _format_pcep_object_tlv_stateful_pce_capability(
72 int ps
, struct pcep_object_tlv_stateful_pce_capability
*tlv
);
73 static void _format_pcep_object_tlv_sr_pce_capability(
74 int ps
, struct pcep_object_tlv_sr_pce_capability
*tlv
);
75 static void _format_pcep_object_tlv_path_setup_type(
76 int ps
, struct pcep_object_tlv_path_setup_type
*tlv
);
78 const char *pcc_status_name(enum pcc_status status
)
81 case PCEP_PCC_INITIALIZED
:
83 case PCEP_PCC_DISCONNECTED
:
84 return "DISCONNECTED";
85 case PCEP_PCC_CONNECTING
:
87 case PCEP_PCC_SYNCHRONIZING
:
88 return "SYNCHRONIZING";
89 case PCEP_PCC_OPERATING
:
96 const char *pcep_event_type_name(pcep_event_type event_type
)
99 case MESSAGE_RECEIVED
:
100 return "MESSAGE_RECEIVED";
101 case PCE_CLOSED_SOCKET
:
102 return "PCE_CLOSED_SOCKET";
103 case PCE_SENT_PCEP_CLOSE
:
104 return "PCE_SENT_PCEP_CLOSE";
105 case PCE_DEAD_TIMER_EXPIRED
:
106 return "PCE_DEAD_TIMER_EXPIRED";
107 case PCE_OPEN_KEEP_WAIT_TIMER_EXPIRED
:
108 return "PCE_OPEN_KEEP_WAIT_TIMER_EXPIRED";
109 case PCC_CONNECTED_TO_PCE
:
110 return "PCC_CONNECTED_TO_PCE";
111 case PCC_PCEP_SESSION_CLOSED
:
112 return "PCC_PCEP_SESSION_CLOSED";
113 case PCC_RCVD_INVALID_OPEN
:
114 return "PCC_RCVD_INVALID_OPEN";
115 case PCC_RCVD_MAX_INVALID_MSGS
:
116 return "PCC_RCVD_MAX_INVALID_MSGS";
117 case PCC_RCVD_MAX_UNKOWN_MSGS
:
118 return "PCC_RCVD_MAX_UNKOWN_MSGS";
124 const char *pcep_error_type_name(enum pcep_error_type error_type
)
126 switch (error_type
) {
128 case PCEP_ERRT_SESSION_FAILURE
:
129 return "SESSION_FAILURE";
130 case PCEP_ERRT_CAPABILITY_NOT_SUPPORTED
:
131 return "CAPABILITY_NOT_SUPPORTED";
132 case PCEP_ERRT_UNKNOW_OBJECT
:
133 return "UNKNOW_OBJECT";
134 case PCEP_ERRT_NOT_SUPPORTED_OBJECT
:
135 return "NOT_SUPPORTED_OBJECT";
136 case PCEP_ERRT_POLICY_VIOLATION
:
137 return "POLICY_VIOLATION";
138 case PCEP_ERRT_MANDATORY_OBJECT_MISSING
:
139 return "MANDATORY_OBJECT_MISSING";
140 case PCEP_ERRT_SYNC_PC_REQ_MISSING
:
141 return "SYNC_PC_REQ_MISSING";
142 case PCEP_ERRT_UNKNOWN_REQ_REF
:
143 return "UNKNOWN_REQ_REF";
144 case PCEP_ERRT_ATTEMPT_TO_ESTABLISH_2ND_PCEP_SESSION
:
145 return "ATTEMPT_TO_ESTABLISH_2ND_PCEP_SESSION";
146 case PCEP_ERRT_RECEPTION_OF_INV_OBJECT
:
147 return "RECEPTION_OF_INV_OBJECT";
148 case PCEP_ERRT_UNRECOGNIZED_EXRS_SUBOBJ
:
149 return "UNRECOGNIZED_EXRS_SUBOBJ";
150 case PCEP_ERRT_DIFFSERV_AWARE_TE_ERROR
:
151 return "DIFFSERV_AWARE_TE_ERROR";
152 case PCEP_ERRT_BRPC_PROC_COMPLETION_ERROR
:
153 return "BRPC_PROC_COMPLETION_ERROR";
154 case PCEP_ERRT_UNASSIGNED14
:
155 return "UNASSIGNED14";
156 case PCEP_ERRT_GLOBAL_CONCURRENT_ERROR
:
157 return "GLOBAL_CONCURRENT_ERROR";
158 case PCEP_ERRT_P2PMP_CAP_ERROR
:
159 return "P2PMP_CAP_ERROR";
160 case PCEP_ERRT_P2P_ENDPOINTS_ERROR
:
161 return "P2P_ENDPOINTS_ERROR";
162 case PCEP_ERRT_P2P_FRAGMENTATION_ERROR
:
163 return "P2P_FRAGMENTATION_ERROR";
164 case PCEP_ERRT_INVALID_OPERATION
:
165 return "INVALID_OPERATION";
166 case PCEP_ERRT_LSP_STATE_SYNC_ERROR
:
167 return "LSP_STATE_SYNC_ERROR";
168 case PCEP_ERRT_INVALID_TE_PATH_SETUP_TYPE
:
169 return "INVALID_TE_PATH_SETUP_TYPE";
170 case PCEP_ERRT_UNASSIGNED22
:
171 return "UNASSIGNED22";
172 case PCEP_ERRT_BAD_PARAMETER_VALUE
:
173 return "BAD_PARAMETER_VALUE";
174 case PCEP_ERRT_LSP_INSTANTIATE_ERROR
:
175 return "LSP_INSTANTIATE_ERROR";
176 case PCEP_ERRT_START_TLS_FAILURE
:
177 return "START_TLS_FAILURE";
178 case PCEP_ERRT_ASSOCIATION_ERROR
:
179 return "ASSOCIATION_ERROR";
180 case PCEP_ERRT_WSON_RWA_ERROR
:
181 return "WSON_RWA_ERROR";
182 case PCEP_ERRT_H_PCE_ERROR
:
183 return "H_PCE_ERROR";
184 case PCEP_ERRT_PATH_COMP_FAILURE
:
185 return "PATH_COMP_FAILURE";
186 case PCEP_ERRT_UNASSIGNED30
:
187 return "UNASSIGNED30";
193 const char *pcep_error_value_name(enum pcep_error_type error_type
,
194 enum pcep_error_value error_value
)
196 switch (TUP(error_type
, error_value
)) {
198 case TUP(PCEP_ERRT_CAPABILITY_NOT_SUPPORTED
, PCEP_ERRV_UNASSIGNED
):
199 case TUP(PCEP_ERRT_SYNC_PC_REQ_MISSING
, PCEP_ERRV_UNASSIGNED
):
200 case TUP(PCEP_ERRT_UNKNOWN_REQ_REF
, PCEP_ERRV_UNASSIGNED
):
201 case TUP(PCEP_ERRT_ATTEMPT_TO_ESTABLISH_2ND_PCEP_SESSION
,
202 PCEP_ERRV_UNASSIGNED
):
203 case TUP(PCEP_ERRT_UNRECOGNIZED_EXRS_SUBOBJ
, PCEP_ERRV_UNASSIGNED
):
206 case TUP(PCEP_ERRT_SESSION_FAILURE
, PCEP_ERRV_RECVD_INVALID_OPEN_MSG
):
207 return "RECVD_INVALID_OPEN_MSG";
208 case TUP(PCEP_ERRT_SESSION_FAILURE
, PCEP_ERRV_OPENWAIT_TIMED_OUT
):
209 return "OPENWAIT_TIMED_OUT";
210 case TUP(PCEP_ERRT_SESSION_FAILURE
,
211 PCEP_ERRV_UNACCEPTABLE_OPEN_MSG_NO_NEG
):
212 return "UNACCEPTABLE_OPEN_MSG_NO_NEG";
213 case TUP(PCEP_ERRT_SESSION_FAILURE
,
214 PCEP_ERRV_UNACCEPTABLE_OPEN_MSG_NEG
):
215 return "UNACCEPTABLE_OPEN_MSG_NEG";
216 case TUP(PCEP_ERRT_SESSION_FAILURE
,
217 PCEP_ERRV_RECVD_SECOND_OPEN_MSG_UNACCEPTABLE
):
218 return "RECVD_SECOND_OPEN_MSG_UNACCEPTABLE";
219 case TUP(PCEP_ERRT_SESSION_FAILURE
, PCEP_ERRV_RECVD_PCERR
):
220 return "RECVD_PCERR";
221 case TUP(PCEP_ERRT_SESSION_FAILURE
, PCEP_ERRV_KEEPALIVEWAIT_TIMED_OUT
):
222 return "KEEPALIVEWAIT_TIMED_OUT";
223 case TUP(PCEP_ERRT_SESSION_FAILURE
,
224 PCEP_ERRV_PCEP_VERSION_NOT_SUPPORTED
):
225 return "PCEP_VERSION_NOT_SUPPORTED";
227 case TUP(PCEP_ERRT_UNKNOW_OBJECT
, PCEP_ERRV_UNREC_OBJECT_CLASS
):
228 return "UNREC_OBJECT_CLASS";
229 case TUP(PCEP_ERRT_UNKNOW_OBJECT
, PCEP_ERRV_UNREC_OBJECT_TYPE
):
230 return "UNREC_OBJECT_TYPE";
232 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
233 PCEP_ERRV_NOT_SUPPORTED_OBJECT_CLASS
):
234 return "NOT_SUPPORTED_OBJECT_CLASS";
235 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
236 PCEP_ERRV_NOT_SUPPORTED_OBJECT_TYPE
):
237 return "NOT_SUPPORTED_OBJECT_TYPE";
238 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
, PCEP_ERRV_UNSUPPORTED_PARAM
):
239 return "UNSUPPORTED_PARAM";
240 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
241 PCEP_ERRV_UNSUPPORTED_NW_PERF_CONSTRAINT
):
242 return "UNSUPPORTED_NW_PERF_CONSTRAINT";
243 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
244 PCEP_ERRV_NOT_SUPPORTED_BW_OBJECT_3_4
):
245 return "NOT_SUPPORTED_BW_OBJECT_3_4";
246 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
247 PCEP_ERRV_UNSUPPORTED_ENDPOINT_TYPE
):
248 return "UNSUPPORTED_ENDPOINT_TYPE";
249 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
250 PCEP_ERRV_UNSUPPORTED_ENDPOINT_TLV
):
251 return "UNSUPPORTED_ENDPOINT_TLV";
252 case TUP(PCEP_ERRT_NOT_SUPPORTED_OBJECT
,
253 PCEP_ERRV_UNSUPPORTED_RP_FLAG_GRANULARITY
):
254 return "UNSUPPORTED_RP_FLAG_GRANULARITY";
256 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
257 PCEP_ERRV_C_BIT_SET_IN_METRIC_OBJECT
):
258 return "C_BIT_SET_IN_METRIC_OBJECT";
259 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
260 PCEP_ERRV_O_BIT_CLEARD_IN_RP_OBJECT
):
261 return "O_BIT_CLEARD_IN_RP_OBJECT";
262 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
263 PCEP_ERRV_OBJECTIVE_FUNC_NOT_ALLOWED
):
264 return "OBJECTIVE_FUNC_NOT_ALLOWED";
265 case TUP(PCEP_ERRT_POLICY_VIOLATION
, PCEP_ERRV_RP_OF_BIT_SET
):
266 return "RP_OF_BIT_SET";
267 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
268 PCEP_ERRV_GLOBAL_CONCURRENCY_NOT_ALLOWED
):
269 return "GLOBAL_CONCURRENCY_NOT_ALLOWED";
270 case TUP(PCEP_ERRT_POLICY_VIOLATION
, PCEP_ERRV_MONITORING_MSG_REJECTED
):
271 return "MONITORING_MSG_REJECTED";
272 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
273 PCEP_ERRV_P2MP_PATH_COMP_NOT_ALLOWED
):
274 return "P2MP_PATH_COMP_NOT_ALLOWED";
275 case TUP(PCEP_ERRT_POLICY_VIOLATION
,
276 PCEP_ERRV_UNALLOWED_NW_PERF_CONSTRAINT
):
277 return "UNALLOWED_NW_PERF_CONSTRAINT";
279 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
280 PCEP_ERRV_RP_OBJECT_MISSING
):
281 return "RP_OBJECT_MISSING";
282 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
283 PCEP_ERRV_RRO_OBJECT_MISSING_FOR_REOP
):
284 return "RRO_OBJECT_MISSING_FOR_REOP";
285 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
286 PCEP_ERRV_EP_OBJECT_MISSING
):
287 return "EP_OBJECT_MISSING";
288 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
289 PCEP_ERRV_MONITOR_OBJECT_MISSING
):
290 return "MONITOR_OBJECT_MISSING";
291 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
292 PCEP_ERRV_LSP_OBJECT_MISSING
):
293 return "LSP_OBJECT_MISSING";
294 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
295 PCEP_ERRV_ERO_OBJECT_MISSING
):
296 return "ERO_OBJECT_MISSING";
297 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
298 PCEP_ERRV_SRP_OBJECT_MISSING
):
299 return "SRP_OBJECT_MISSING";
300 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
301 PCEP_ERRV_LSP_ID_TLV_MISSING
):
302 return "LSP_ID_TLV_MISSING";
303 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
304 PCEP_ERRV_LSP_DB_TLV_MISSING
):
305 return "LSP_DB_TLV_MISSING";
306 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
307 PCEP_ERRV_S2LS_OBJECT_MISSING
):
308 return "S2LS_OBJECT_MISSING";
309 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
310 PCEP_ERRV_P2MP_LSP_ID_TLV_MISSING
):
311 return "P2MP_LSP_ID_TLV_MISSING";
312 case TUP(PCEP_ERRT_MANDATORY_OBJECT_MISSING
,
313 PCEP_ERRV_DISJOINTED_CONF_TLV_MISSING
):
314 return "DISJOINTED_CONF_TLV_MISSING";
316 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
317 PCEP_ERRV_P_FLAG_NOT_CORRECT_IN_OBJECT
):
318 return "P_FLAG_NOT_CORRECT_IN_OBJECT";
319 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_BAD_LABEL_VALUE
):
320 return "BAD_LABEL_VALUE";
321 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
322 PCEP_ERRV_UNSUPPORTED_NUM_SR_ERO_SUBOBJECTS
):
323 return "UNSUPPORTED_NUM_SR_ERO_SUBOBJECTS";
324 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_BAD_LABEL_FORMAT
):
325 return "BAD_LABEL_FORMAT";
326 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_ERO_SR_ERO_MIX
):
327 return "ERO_SR_ERO_MIX";
328 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
329 PCEP_ERRV_SR_ERO_SID_NAI_ABSENT
):
330 return "SR_ERO_SID_NAI_ABSENT";
331 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
332 PCEP_ERRV_SR_RRO_SID_NAI_ABSENT
):
333 return "SR_RRO_SID_NAI_ABSENT";
334 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
335 PCEP_ERRV_SYMBOLIC_PATH_NAME_TLV_MISSING
):
336 return "SYMBOLIC_PATH_NAME_TLV_MISSING";
337 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
338 PCEP_ERRV_MSD_EXCEEDS_PCEP_SESSION_MAX
):
339 return "MSD_EXCEEDS_PCEP_SESSION_MAX";
340 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_RRO_SR_RRO_MIX
):
341 return "RRO_SR_RRO_MIX";
342 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_MALFORMED_OBJECT
):
343 return "MALFORMED_OBJECT";
344 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
345 PCEP_ERRV_MISSING_PCE_SR_CAP_TLV
):
346 return "MISSING_PCE_SR_CAP_TLV";
347 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_UNSUPPORTED_NAI
):
348 return "UNSUPPORTED_NAI";
349 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_UNKNOWN_SID
):
350 return "UNKNOWN_SID";
351 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
352 PCEP_ERRV_CANNOT_RESOLVE_NAI_TO_SID
):
353 return "CANNOT_RESOLVE_NAI_TO_SID";
354 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
355 PCEP_ERRV_COULD_NOT_FIND_SRGB
):
356 return "COULD_NOT_FIND_SRGB";
357 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_SID_EXCEEDS_SRGB
):
358 return "SID_EXCEEDS_SRGB";
359 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
360 PCEP_ERRV_COULD_NOT_FIND_SRLB
):
361 return "COULD_NOT_FIND_SRLB";
362 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_SID_EXCEEDS_SRLB
):
363 return "SID_EXCEEDS_SRLB";
364 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
, PCEP_ERRV_INCONSISTENT_SID
):
365 return "INCONSISTENT_SID";
366 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
367 PCEP_ERRV_MSD_MUST_BE_NONZERO
):
368 return "MSD_MUST_BE_NONZERO";
369 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
370 PCEP_ERRV_MISMATCH_O_S2LS_LSP
):
371 return "MISMATCH_O_S2LS_LSP";
372 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
373 PCEP_ERRV_INCOMPATIBLE_H_PCE_OF
):
374 return "INCOMPATIBLE_H_PCE_OF";
375 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
376 PCEP_ERRV_BAD_BANDWIDTH_TYPE_3_4
):
377 return "BAD_BANDWIDTH_TYPE_3_4";
378 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
379 PCEP_ERRV_UNSUPPORTED_LSP_PROT_FLAGS
):
380 return "UNSUPPORTED_LSP_PROT_FLAGS";
381 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
382 PCEP_ERRV_UNSUPPORTED_2ND_LSP_PROT_FLAGS
):
383 return "UNSUPPORTED_2ND_LSP_PROT_FLAGS";
384 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
385 PCEP_ERRV_UNSUPPORTED_LINK_PROT_TYPE
):
386 return "UNSUPPORTED_LINK_PROT_TYPE";
387 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
388 PCEP_ERRV_LABEL_SET_TLV_NO_RP_R
):
389 return "LABEL_SET_TLV_NO_RP_R";
390 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
391 PCEP_ERRV_WRONG_LABEL_SET_TLV_O_L_SET
):
392 return "WRONG_LABEL_SET_TLV_O_L_SET";
393 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
394 PCEP_ERRV_WRONG_LABEL_SET_O_SET
):
395 return "WRONG_LABEL_SET_O_SET";
396 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
397 PCEP_ERRV_MISSING_GMPLS_CAP_TLV
):
398 return "MISSING_GMPLS_CAP_TLV";
399 case TUP(PCEP_ERRT_RECEPTION_OF_INV_OBJECT
,
400 PCEP_ERRV_INCOMPATIBLE_OF_CODE
):
401 return "INCOMPATIBLE_OF_CODE";
403 case TUP(PCEP_ERRT_DIFFSERV_AWARE_TE_ERROR
,
404 PCEP_ERRV_UNSUPPORTED_CLASS_TYPE
):
405 return "UNSUPPORTED_CLASS_TYPE";
406 case TUP(PCEP_ERRT_DIFFSERV_AWARE_TE_ERROR
,
407 PCEP_ERRV_INVALID_CLASS_TYPE
):
408 return "INVALID_CLASS_TYPE";
409 case TUP(PCEP_ERRT_DIFFSERV_AWARE_TE_ERROR
,
410 PCEP_ERRV_CLASS_SETUP_TYPE_NOT_TE_CLASS
):
411 return "CLASS_SETUP_TYPE_NOT_TE_CLASS";
413 case TUP(PCEP_ERRT_BRPC_PROC_COMPLETION_ERROR
,
414 PCEP_ERRV_BRPC_PROC_NOT_SUPPORTED
):
415 return "BRPC_PROC_NOT_SUPPORTED";
417 case TUP(PCEP_ERRT_GLOBAL_CONCURRENT_ERROR
,
418 PCEP_ERRV_INSUFFICIENT_MEMORY
):
419 return "INSUFFICIENT_MEMORY";
420 case TUP(PCEP_ERRT_GLOBAL_CONCURRENT_ERROR
,
421 PCEP_ERRV_GLOBAL_CONCURRENT_OPT_NOT_SUPPORTED
):
422 return "GLOBAL_CONCURRENT_OPT_NOT_SUPPORTED";
424 case TUP(PCEP_ERRT_P2PMP_CAP_ERROR
, PCEP_ERRV_PCE_INSUFFICIENT_MEMORY
):
425 return "PCE_INSUFFICIENT_MEMORY";
426 case TUP(PCEP_ERRT_P2PMP_CAP_ERROR
,
427 PCEP_ERRV_PCE_NOT_CAPABLE_P2MP_COMP
):
428 return "PCE_NOT_CAPABLE_P2MP_COMP";
430 case TUP(PCEP_ERRT_P2P_ENDPOINTS_ERROR
,
431 PCEP_ERRV_NO_EP_WITH_LEAF_TYPE2
):
432 return "NO_EP_WITH_LEAF_TYPE2";
433 case TUP(PCEP_ERRT_P2P_ENDPOINTS_ERROR
,
434 PCEP_ERRV_NO_EP_WITH_LEAF_TYPE3
):
435 return "NO_EP_WITH_LEAF_TYPE3";
436 case TUP(PCEP_ERRT_P2P_ENDPOINTS_ERROR
,
437 PCEP_ERRV_NO_EP_WITH_LEAF_TYPE4
):
438 return "NO_EP_WITH_LEAF_TYPE4";
439 case TUP(PCEP_ERRT_P2P_ENDPOINTS_ERROR
, PCEP_ERRV_INCONSITENT_EP
):
440 return "INCONSITENT_EP";
442 case TUP(PCEP_ERRT_P2P_FRAGMENTATION_ERROR
,
443 PCEP_ERRV_FRAG_REQUEST_FAILURE
):
444 return "FRAG_REQUEST_FAILURE";
445 case TUP(PCEP_ERRT_P2P_FRAGMENTATION_ERROR
,
446 PCEP_ERRV_FRAG_REPORT_FAILURE
):
447 return "FRAG_REPORT_FAILURE";
448 case TUP(PCEP_ERRT_P2P_FRAGMENTATION_ERROR
,
449 PCEP_ERRV_FRAG_UPDATE_FAILURE
):
450 return "FRAG_UPDATE_FAILURE";
451 case TUP(PCEP_ERRT_P2P_FRAGMENTATION_ERROR
,
452 PCEP_ERRV_FRAG_INSTANTIATION_FAILURE
):
453 return "FRAG_INSTANTIATION_FAILURE";
455 case TUP(PCEP_ERRT_INVALID_OPERATION
,
456 PCEP_ERRV_LSP_UPDATE_FOR_NON_DELEGATED_LSP
):
457 return "LSP_UPDATE_FOR_NON_DELEGATED_LS";
458 case TUP(PCEP_ERRT_INVALID_OPERATION
,
459 PCEP_ERRV_LSP_UPDATE_NON_ADVERTISED_PCE
):
460 return "LSP_UPDATE_NON_ADVERTISED_PC";
461 case TUP(PCEP_ERRT_INVALID_OPERATION
,
462 PCEP_ERRV_LSP_UPDATE_UNKNOWN_PLSP_ID
):
463 return "LSP_UPDATE_UNKNOWN_PLSP_I";
464 case TUP(PCEP_ERRT_INVALID_OPERATION
,
465 PCEP_ERRV_LSP_REPORT_NON_ADVERTISED_PCE
):
466 return "LSP_REPORT_NON_ADVERTISED_PC";
467 case TUP(PCEP_ERRT_INVALID_OPERATION
,
468 PCEP_ERRV_PCE_INIT_LSP_LIMIT_REACHED
):
469 return "PCE_INIT_LSP_LIMIT_REACHE";
470 case TUP(PCEP_ERRT_INVALID_OPERATION
,
471 PCEP_ERRV_PCE_INIT_LSP_DELEGATION_CANT_REVOKE
):
472 return "PCE_INIT_LSP_DELEGATION_CANT_REVOK";
473 case TUP(PCEP_ERRT_INVALID_OPERATION
,
474 PCEP_ERRV_LSP_INIT_NON_ZERO_PLSP_ID
):
475 return "LSP_INIT_NON_ZERO_PLSP_I";
476 case TUP(PCEP_ERRT_INVALID_OPERATION
, PCEP_ERRV_LSP_NOT_PCE_INITIATED
):
477 return "LSP_NOT_PCE_INITIATE";
478 case TUP(PCEP_ERRT_INVALID_OPERATION
,
479 PCEP_ERRV_PCE_INIT_OP_FREQ_LIMIT_REACHED
):
480 return "PCE_INIT_OP_FREQ_LIMIT_REACHE";
481 case TUP(PCEP_ERRT_INVALID_OPERATION
,
482 PCEP_ERRV_LSP_REPORT_P2MP_NOT_ADVERTISED
):
483 return "LSP_REPORT_P2MP_NOT_ADVERTISE";
484 case TUP(PCEP_ERRT_INVALID_OPERATION
,
485 PCEP_ERRV_LSP_UPDATE_P2MP_NOT_ADVERTISED
):
486 return "LSP_UPDATE_P2MP_NOT_ADVERTISE";
487 case TUP(PCEP_ERRT_INVALID_OPERATION
,
488 PCEP_ERRV_LSP_INSTANTIATION_P2MP_NOT_ADVERTISED
):
489 return "LSP_INSTANTIATION_P2MP_NOT_ADVERTISE";
490 case TUP(PCEP_ERRT_INVALID_OPERATION
,
491 PCEP_ERRV_AUTO_BW_CAP_NOT_ADVERTISED
):
492 return "AUTO_BW_CAP_NOT_ADVERTISE";
494 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
495 PCEP_ERRV_PCE_CANT_PROCESS_LSP_REPORT
):
496 return "PCE_CANT_PROCESS_LSP_REPORT";
497 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
498 PCEP_ERRV_LSP_DB_VERSION_MISMATCH
):
499 return "LSP_DB_VERSION_MISMATCH";
500 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
501 PCEP_ERRV_TRIGGER_ATTEMPT_BEFORE_PCE_TRIGGER
):
502 return "TRIGGER_ATTEMPT_BEFORE_PCE_TRIGGER";
503 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
504 PCEP_ERRV_TRIGGER_ATTEMPT_NO_PCE_TRIGGER_CAP
):
505 return "TRIGGER_ATTEMPT_NO_PCE_TRIGGER_CAP";
506 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
507 PCEP_ERRV_PCC_CANT_COMPLETE_STATE_SYNC
):
508 return "PCC_CANT_COMPLETE_STATE_SYNC";
509 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
510 PCEP_ERRV_INVALID_LSP_DB_VERSION_NUMBER
):
511 return "INVALID_LSP_DB_VERSION_NUMBER";
512 case TUP(PCEP_ERRT_LSP_STATE_SYNC_ERROR
,
513 PCEP_ERRV_INVALID_SPEAKER_ENTITY_ID
):
514 return "INVALID_SPEAKER_ENTITY_ID";
516 case TUP(PCEP_ERRT_INVALID_TE_PATH_SETUP_TYPE
,
517 PCEP_ERRV_UNSUPPORTED_PATH_SETUP_TYPE
):
518 return "UNSUPPORTED_PATH_SETUP_TYPE";
519 case TUP(PCEP_ERRT_INVALID_TE_PATH_SETUP_TYPE
,
520 PCEP_ERRV_MISMATCHED_PATH_SETUP_TYPE
):
521 return "MISMATCHED_PATH_SETUP_TYPE";
523 case TUP(PCEP_ERRT_BAD_PARAMETER_VALUE
,
524 PCEP_ERRV_SYMBOLIC_PATH_NAME_IN_USE
):
525 return "SYMBOLIC_PATH_NAME_IN_USE";
526 case TUP(PCEP_ERRT_BAD_PARAMETER_VALUE
,
527 PCEP_ERRV_LSP_SPEAKER_ID_NOT_PCE_INITIATED
):
528 return "LSP_SPEAKER_ID_NOT_PCE_INITIATED";
530 case TUP(PCEP_ERRT_LSP_INSTANTIATE_ERROR
,
531 PCEP_ERRV_UNACCEPTABLE_INSTANTIATE_ERROR
):
532 return "UNACCEPTABLE_INSTANTIATE_ERROR";
533 case TUP(PCEP_ERRT_LSP_INSTANTIATE_ERROR
, PCEP_ERRV_INTERNAL_ERROR
):
534 return "INTERNAL_ERROR";
535 case TUP(PCEP_ERRT_LSP_INSTANTIATE_ERROR
, PCEP_ERRV_SIGNALLING_ERROR
):
536 return "SIGNALLING_ERROR";
538 case TUP(PCEP_ERRT_START_TLS_FAILURE
,
539 PCEP_ERRV_START_TLS_AFTER_PCEP_EXCHANGE
):
540 return "START_TLS_AFTER_PCEP_EXCHANGE";
541 case TUP(PCEP_ERRT_START_TLS_FAILURE
,
542 PCEP_ERRV_MSG_NOT_START_TLS_OPEN_ERROR
):
543 return "MSG_NOT_START_TLS_OPEN_ERROR";
544 case TUP(PCEP_ERRT_START_TLS_FAILURE
,
545 PCEP_ERRV_CONNECTION_WO_TLS_NOT_POSSIBLE
):
546 return "CONNECTION_WO_TLS_NOT_POSSIBLE";
547 case TUP(PCEP_ERRT_START_TLS_FAILURE
,
548 PCEP_ERRV_CONNECTION_WO_TLS_IS_POSSIBLE
):
549 return "CONNECTION_WO_TLS_IS_POSSIBLE";
550 case TUP(PCEP_ERRT_START_TLS_FAILURE
,
551 PCEP_ERRV_NO_START_TLS_BEFORE_START_TLS_WAIT_TIMER
):
552 return "NO_START_TLS_BEFORE_START_TLS_WAIT_TIMER";
554 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
555 PCEP_ERRV_ASSOC_TYPE_NOT_SUPPORTED
):
556 return "ASSOC_TYPE_NOT_SUPPORTED";
557 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
558 PCEP_ERRV_TOO_MANY_LSPS_IN_ASSOC_GRP
):
559 return "TOO_MANY_LSPS_IN_ASSOC_GRP";
560 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
, PCEP_ERRV_TOO_MANY_ASSOC_GROUPS
):
561 return "TOO_MANY_ASSOC_GROUPS";
562 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
, PCEP_ERRV_ASSOCIATION_UNKNOWN
):
563 return "ASSOCIATION_UNKNOWN";
564 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
565 PCEP_ERRV_OP_CONF_ASSOC_INFO_MISMATCH
):
566 return "OP_CONF_ASSOC_INFO_MISMATCH";
567 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
, PCEP_ERRV_ASSOC_INFO_MISMATCH
):
568 return "ASSOC_INFO_MISMATCH";
569 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
570 PCEP_ERRV_CANNOT_JOIN_ASSOC_GROUP
):
571 return "CANNOT_JOIN_ASSOC_GROUP";
572 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
, PCEP_ERRV_ASSOC_ID_NOT_IN_RANGE
):
573 return "ASSOC_ID_NOT_IN_RANGE";
574 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
575 PCEP_ERRV_TUNNEL_EP_MISMATCH_PATH_PROT_ASSOC
):
576 return "TUNNEL_EP_MISMATCH_PATH_PROT_ASSOC";
577 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
578 PCEP_ERRV_ATTEMPTED_ADD_LSP_PATH_PROT_ASSOC
):
579 return "ATTEMPTED_ADD_LSP_PATH_PROT_ASSOC";
580 case TUP(PCEP_ERRT_ASSOCIATION_ERROR
,
581 PCEP_ERRV_PROTECTION_TYPE_NOT_SUPPORTED
):
582 return "PROTECTION_TYPE_NOT_SUPPORTED";
584 case TUP(PCEP_ERRT_WSON_RWA_ERROR
, PCEP_ERRV_RWA_INSUFFICIENT_MEMORY
):
585 return "RWA_INSUFFICIENT_MEMORY";
586 case TUP(PCEP_ERRT_WSON_RWA_ERROR
, PCEP_ERRV_RWA_COMP_NOT_SUPPORTED
):
587 return "RWA_COMP_NOT_SUPPORTED";
588 case TUP(PCEP_ERRT_WSON_RWA_ERROR
, PCEP_ERRV_SYNTAX_ENC_ERROR
):
589 return "SYNTAX_ENC_ERROR";
591 case TUP(PCEP_ERRT_H_PCE_ERROR
, PCEP_ERRV_H_PCE_CAP_NOT_ADVERTISED
):
592 return "H_PCE_CAP_NOT_ADVERTISED";
593 case TUP(PCEP_ERRT_H_PCE_ERROR
,
594 PCEP_ERRV_PARENT_PCE_CAP_CANT_BE_PROVIDED
):
595 return "PARENT_PCE_CAP_CANT_BE_PROVIDED";
597 case TUP(PCEP_ERRT_PATH_COMP_FAILURE
,
598 PCEP_ERRV_UNACCEPTABLE_REQUEST_MSG
):
599 return "UNACCEPTABLE_REQUEST_MSG";
600 case TUP(PCEP_ERRT_PATH_COMP_FAILURE
,
601 PCEP_ERRV_GENERALIZED_BW_VAL_NOT_SUPPORTED
):
602 return "GENERALIZED_BW_VAL_NOT_SUPPORTED";
603 case TUP(PCEP_ERRT_PATH_COMP_FAILURE
,
604 PCEP_ERRV_LABEL_SET_CONSTRAINT_COULD_NOT_BE_MET
):
605 return "LABEL_SET_CONSTRAINT_COULD_NOT_BE_MET";
606 case TUP(PCEP_ERRT_PATH_COMP_FAILURE
,
607 PCEP_ERRV_LABEL_CONSTRAINT_COULD_NOT_BE_MET
):
608 return "LABEL_CONSTRAINT_COULD_NOT_BE_MET";
615 const char *pcep_message_type_name(enum pcep_message_types pcep_message_type
)
617 switch (pcep_message_type
) {
621 case PCEP_TYPE_KEEPALIVE
:
623 case PCEP_TYPE_PCREQ
:
625 case PCEP_TYPE_PCREP
:
627 case PCEP_TYPE_PCNOTF
:
629 case PCEP_TYPE_ERROR
:
631 case PCEP_TYPE_CLOSE
:
633 case PCEP_TYPE_REPORT
:
635 case PCEP_TYPE_UPDATE
:
637 case PCEP_TYPE_INITIATE
:
639 case PCEP_TYPE_START_TLS
:
646 const char *pcep_object_class_name(enum pcep_object_classes obj_class
)
649 case PCEP_OBJ_CLASS_OPEN
:
651 case PCEP_OBJ_CLASS_RP
:
653 case PCEP_OBJ_CLASS_NOPATH
:
655 case PCEP_OBJ_CLASS_ENDPOINTS
:
657 case PCEP_OBJ_CLASS_BANDWIDTH
:
659 case PCEP_OBJ_CLASS_METRIC
:
661 case PCEP_OBJ_CLASS_ERO
:
663 case PCEP_OBJ_CLASS_RRO
:
665 case PCEP_OBJ_CLASS_LSPA
:
667 case PCEP_OBJ_CLASS_IRO
:
669 case PCEP_OBJ_CLASS_SVEC
:
671 case PCEP_OBJ_CLASS_NOTF
:
673 case PCEP_OBJ_CLASS_ERROR
:
675 case PCEP_OBJ_CLASS_CLOSE
:
677 case PCEP_OBJ_CLASS_OF
:
679 case PCEP_OBJ_CLASS_LSP
:
681 case PCEP_OBJ_CLASS_SRP
:
683 case PCEP_OBJ_CLASS_VENDOR_INFO
:
684 return "VENDOR_INFO";
685 case PCEP_OBJ_CLASS_INTER_LAYER
:
686 return "INTER_LAYER";
687 case PCEP_OBJ_CLASS_SWITCH_LAYER
:
688 return "SWITCH_LAYER";
689 case PCEP_OBJ_CLASS_REQ_ADAP_CAP
:
690 return "REQ_ADAP_CAP";
691 case PCEP_OBJ_CLASS_SERVER_IND
:
693 case PCEP_OBJ_CLASS_ASSOCIATION
:
694 return "ASSOCIATION";
700 const char *pcep_object_type_name(enum pcep_object_classes obj_class
,
701 enum pcep_object_types obj_type
)
703 switch (TUP(obj_class
, obj_type
)) {
704 case TUP(PCEP_OBJ_CLASS_OPEN
, PCEP_OBJ_TYPE_OPEN
):
706 case TUP(PCEP_OBJ_CLASS_RP
, PCEP_OBJ_TYPE_RP
):
708 case TUP(PCEP_OBJ_CLASS_NOPATH
, PCEP_OBJ_TYPE_NOPATH
):
710 case TUP(PCEP_OBJ_CLASS_ENDPOINTS
, PCEP_OBJ_TYPE_ENDPOINT_IPV4
):
711 return "ENDPOINT_IPV4";
712 case TUP(PCEP_OBJ_CLASS_ENDPOINTS
, PCEP_OBJ_TYPE_ENDPOINT_IPV6
):
713 return "ENDPOINT_IPV6";
714 case TUP(PCEP_OBJ_CLASS_BANDWIDTH
, PCEP_OBJ_TYPE_BANDWIDTH_REQ
):
715 return "BANDWIDTH_REQ";
716 case TUP(PCEP_OBJ_CLASS_BANDWIDTH
, PCEP_OBJ_TYPE_BANDWIDTH_TELSP
):
717 return "BANDWIDTH_TELSP";
718 case TUP(PCEP_OBJ_CLASS_BANDWIDTH
, PCEP_OBJ_TYPE_BANDWIDTH_CISCO
):
719 return "BANDWIDTH_CISCO";
720 case TUP(PCEP_OBJ_CLASS_METRIC
, PCEP_OBJ_TYPE_METRIC
):
722 case TUP(PCEP_OBJ_CLASS_ERO
, PCEP_OBJ_TYPE_ERO
):
724 case TUP(PCEP_OBJ_CLASS_RRO
, PCEP_OBJ_TYPE_RRO
):
726 case TUP(PCEP_OBJ_CLASS_LSPA
, PCEP_OBJ_TYPE_LSPA
):
728 case TUP(PCEP_OBJ_CLASS_IRO
, PCEP_OBJ_TYPE_IRO
):
730 case TUP(PCEP_OBJ_CLASS_SVEC
, PCEP_OBJ_TYPE_SVEC
):
732 case TUP(PCEP_OBJ_CLASS_NOTF
, PCEP_OBJ_TYPE_NOTF
):
734 case TUP(PCEP_OBJ_CLASS_ERROR
, PCEP_OBJ_TYPE_ERROR
):
736 case TUP(PCEP_OBJ_CLASS_CLOSE
, PCEP_OBJ_TYPE_CLOSE
):
738 case TUP(PCEP_OBJ_CLASS_INTER_LAYER
, PCEP_OBJ_TYPE_INTER_LAYER
):
739 return "INTER_LAYER";
740 case TUP(PCEP_OBJ_CLASS_SWITCH_LAYER
, PCEP_OBJ_TYPE_SWITCH_LAYER
):
741 return "SWITCH_LAYER";
742 case TUP(PCEP_OBJ_CLASS_REQ_ADAP_CAP
, PCEP_OBJ_TYPE_REQ_ADAP_CAP
):
743 return "REQ_ADAP_CAP";
744 case TUP(PCEP_OBJ_CLASS_SERVER_IND
, PCEP_OBJ_TYPE_SERVER_IND
):
746 case TUP(PCEP_OBJ_CLASS_ASSOCIATION
, PCEP_OBJ_TYPE_ASSOCIATION_IPV4
):
747 return "ASSOCIATION_IPV4";
748 case TUP(PCEP_OBJ_CLASS_ASSOCIATION
, PCEP_OBJ_TYPE_ASSOCIATION_IPV6
):
749 return "ASSOCIATION_IPV6";
750 case TUP(PCEP_OBJ_CLASS_OF
, PCEP_OBJ_TYPE_OF
):
757 const char *pcep_lsp_status_name(enum pcep_lsp_operational_status status
)
760 case PCEP_LSP_OPERATIONAL_DOWN
:
762 case PCEP_LSP_OPERATIONAL_UP
:
764 case PCEP_LSP_OPERATIONAL_ACTIVE
:
766 case PCEP_LSP_OPERATIONAL_GOING_DOWN
:
768 case PCEP_LSP_OPERATIONAL_GOING_UP
:
776 const char *pcep_tlv_type_name(enum pcep_object_tlv_types tlv_type
)
779 case PCEP_OBJ_TLV_TYPE_NO_PATH_VECTOR
:
780 return "NO_PATH_VECTOR";
781 case PCEP_OBJ_TLV_TYPE_STATEFUL_PCE_CAPABILITY
:
782 return "STATEFUL_PCE_CAPABILITY";
783 case PCEP_OBJ_TLV_TYPE_SYMBOLIC_PATH_NAME
:
784 return "SYMBOLIC_PATH_NAME";
785 case PCEP_OBJ_TLV_TYPE_IPV4_LSP_IDENTIFIERS
:
786 return "IPV4_LSP_IDENTIFIERS";
787 case PCEP_OBJ_TLV_TYPE_IPV6_LSP_IDENTIFIERS
:
788 return "IPV6_LSP_IDENTIFIERS";
789 case PCEP_OBJ_TLV_TYPE_LSP_ERROR_CODE
:
790 return "LSP_ERROR_CODE";
791 case PCEP_OBJ_TLV_TYPE_RSVP_ERROR_SPEC
:
792 return "RSVP_ERROR_SPEC";
793 case PCEP_OBJ_TLV_TYPE_LSP_DB_VERSION
:
794 return "LSP_DB_VERSION";
795 case PCEP_OBJ_TLV_TYPE_SPEAKER_ENTITY_ID
:
796 return "SPEAKER_ENTITY_ID";
797 case PCEP_OBJ_TLV_TYPE_SR_PCE_CAPABILITY
:
798 return "SR_PCE_CAPABILITY";
799 case PCEP_OBJ_TLV_TYPE_PATH_SETUP_TYPE
:
800 return "PATH_SETUP_TYPE";
801 case PCEP_OBJ_TLV_TYPE_PATH_SETUP_TYPE_CAPABILITY
:
802 return "PATH_SETUP_TYPE_CAPABILITY";
808 const char *pcep_ro_type_name(enum pcep_ro_subobj_types ro_type
)
812 case RO_SUBOBJ_TYPE_IPV4
:
814 case RO_SUBOBJ_TYPE_IPV6
:
816 case RO_SUBOBJ_TYPE_LABEL
:
818 case RO_SUBOBJ_TYPE_UNNUM
:
820 case RO_SUBOBJ_TYPE_ASN
:
822 case RO_SUBOBJ_TYPE_SR
:
829 const char *pcep_nai_type_name(enum pcep_sr_subobj_nai nai_type
)
832 case PCEP_SR_SUBOBJ_NAI_ABSENT
:
834 case PCEP_SR_SUBOBJ_NAI_IPV4_NODE
:
836 case PCEP_SR_SUBOBJ_NAI_IPV6_NODE
:
838 case PCEP_SR_SUBOBJ_NAI_IPV4_ADJACENCY
:
839 return "IPV4_ADJACENCY";
840 case PCEP_SR_SUBOBJ_NAI_IPV6_ADJACENCY
:
841 return "IPV6_ADJACENCY";
842 case PCEP_SR_SUBOBJ_NAI_UNNUMBERED_IPV4_ADJACENCY
:
843 return "UNNUMBERED_IPV4_ADJACENCY";
844 case PCEP_SR_SUBOBJ_NAI_LINK_LOCAL_IPV6_ADJACENCY
:
845 return "LINK_LOCAL_IPV6_ADJACENCY";
851 const char *pcep_metric_type_name(enum pcep_metric_types type
)
854 case PCEP_METRIC_IGP
:
858 case PCEP_METRIC_HOP_COUNT
:
860 case PCEP_METRIC_AGGREGATE_BW
:
861 return "AGGREGATE_BW";
862 case PCEP_METRIC_MOST_LOADED_LINK
:
863 return "MOST_LOADED_LINK";
864 case PCEP_METRIC_CUMULATIVE_IGP
:
865 return "CUMULATIVE_IGP";
866 case PCEP_METRIC_CUMULATIVE_TE
:
867 return "CUMULATIVE_TE";
868 case PCEP_METRIC_P2MP_IGP
:
870 case PCEP_METRIC_P2MP_TE
:
872 case PCEP_METRIC_P2MP_HOP_COUNT
:
873 return "P2MP_HOP_COUNT";
874 case PCEP_METRIC_SEGMENT_ID_DEPTH
:
875 return "SEGMENT_ID_DEPTH";
876 case PCEP_METRIC_PATH_DELAY
:
878 case PCEP_METRIC_PATH_DELAY_VARIATION
:
879 return "PATH_DELAY_VARIATION";
880 case PCEP_METRIC_PATH_LOSS
:
882 case PCEP_METRIC_P2MP_PATH_DELAY
:
883 return "P2MP_PATH_DELAY";
884 case PCEP_METRIC_P2MP_PATH_DELAY_VARIATION
:
885 return "P2MP_PATH_DELAY_VARIATION";
886 case PCEP_METRIC_P2MP_PATH_LOSS
:
887 return "P2MP_PATH_LOSS";
888 case PCEP_METRIC_NUM_PATH_ADAPTATIONS
:
889 return "NUM_PATH_ADAPTATIONS";
890 case PCEP_METRIC_NUM_PATH_LAYERS
:
891 return "NUM_PATH_LAYERS";
892 case PCEP_METRIC_DOMAIN_COUNT
:
893 return "DOMAIN_COUNT";
894 case PCEP_METRIC_BORDER_NODE_COUNT
:
895 return "BORDER_NODE_COUNT";
901 const char *pcep_nopath_tlv_err_code_name(enum pcep_nopath_tlv_err_codes type
)
904 case PCEP_NOPATH_TLV_ERR_NO_TLV
:
906 case PCEP_NOPATH_TLV_ERR_PCE_UNAVAILABLE
:
907 return "PCE_UNAVAILABLE";
908 case PCEP_NOPATH_TLV_ERR_UNKNOWN_DST
:
909 return "UNKNOWN_DST";
910 case PCEP_NOPATH_TLV_ERR_UNKNOWN_SRC
:
911 return "UNKNOWN_SRC";
917 const char *format_objfun_set(uint32_t flags
)
921 for (i
= 1, c
= 0; i
<= MAX_OBJFUN_TYPE
; i
++) {
922 if (CHECK_FLAG(flags
, i
)) {
924 PATHD_FORMAT(", %s", objfun_type_name(i
));
926 PATHD_FORMAT("%s", objfun_type_name(i
));
930 return PATHD_FORMAT_FINI();
934 const char *format_pcc_opts(struct pcc_opts
*opts
)
937 _format_pcc_opts(0, opts
);
938 return PATHD_FORMAT_FINI();
941 const char *format_pcc_state(struct pcc_state
*state
)
944 _format_pcc_state(0, state
);
945 return PATHD_FORMAT_FINI();
948 const char *format_ctrl_state(struct ctrl_state
*state
)
951 _format_ctrl_state(0, state
);
952 return PATHD_FORMAT_FINI();
955 const char *format_path(struct path
*path
)
958 _format_path(0, path
);
959 return PATHD_FORMAT_FINI();
962 const char *format_pcep_event(pcep_event
*event
)
965 _format_pcep_event(0, event
);
966 return PATHD_FORMAT_FINI();
969 const char *format_pcep_message(struct pcep_message
*msg
)
972 _format_pcep_message(0, msg
);
973 return PATHD_FORMAT_FINI();
976 const char *format_yang_dnode(struct lyd_node
*dnode
)
981 lyd_print_mem(&buff
, dnode
, LYD_JSON
, LYP_FORMAT
);
983 memcpy(_debug_buff
, buff
, len
);
988 void _format_pcc_opts(int ps
, struct pcc_opts
*opts
)
991 PATHD_FORMAT("NULL\n");
993 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
995 if (IS_IPADDR_V4(&opts
->addr
)) {
996 PATHD_FORMAT("%*saddr_v4: %pI4\n", ps2
, "",
997 &opts
->addr
.ipaddr_v4
);
999 PATHD_FORMAT("%*saddr_v4: undefined", ps2
, "");
1001 if (IS_IPADDR_V6(&opts
->addr
)) {
1002 PATHD_FORMAT("%*saddr_v6: %pI6\n", ps2
, "",
1003 &opts
->addr
.ipaddr_v6
);
1005 PATHD_FORMAT("%*saddr_v6: undefined", ps2
, "");
1007 PATHD_FORMAT("%*sport: %i\n", ps2
, "", opts
->port
);
1008 PATHD_FORMAT("%*smsd: %i\n", ps2
, "", opts
->msd
);
1012 void _format_pce_opts(int ps
, struct pce_opts
*opts
)
1015 PATHD_FORMAT("NULL\n");
1017 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1019 if (IS_IPADDR_V6(&opts
->addr
)) {
1020 PATHD_FORMAT("%*saddr: %pI6\n", ps2
, "",
1021 &opts
->addr
.ipaddr_v6
);
1023 PATHD_FORMAT("%*saddr: %pI4\n", ps2
, "",
1024 &opts
->addr
.ipaddr_v4
);
1026 PATHD_FORMAT("%*sport: %i\n", ps2
, "", opts
->port
);
1030 void _format_pcc_caps(int ps
, struct pcep_caps
*caps
)
1032 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1034 PATHD_FORMAT("%*sis_stateful: %d\n", ps2
, "", caps
->is_stateful
);
1037 void _format_pcc_state(int ps
, struct pcc_state
*state
)
1039 if (state
== NULL
) {
1040 PATHD_FORMAT("NULL\n");
1042 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1044 PATHD_FORMAT("%*sstatus: %s\n", ps2
, "",
1045 pcc_status_name(state
->status
));
1046 PATHD_FORMAT("%*spcc_opts: ", ps2
, "");
1047 _format_pcc_opts(ps2
, state
->pcc_opts
);
1048 PATHD_FORMAT("%*spce_opts: ", ps2
, "");
1049 _format_pce_opts(ps2
, state
->pce_opts
);
1050 if (state
->sess
== NULL
) {
1051 PATHD_FORMAT("%*ssess: NULL\n", ps2
, "");
1053 PATHD_FORMAT("%*ssess: <PCC SESSION %p>\n", ps2
, "",
1056 PATHD_FORMAT("%*scaps: ", ps2
, "");
1057 _format_pcc_caps(ps2
, &state
->caps
);
1061 void _format_ctrl_state(int ps
, struct ctrl_state
*state
)
1063 if (state
== NULL
) {
1064 PATHD_FORMAT("NULL\n");
1067 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1068 int ps3
= ps2
+ DEBUG_IDENT_SIZE
;
1070 if (state
->main
== NULL
) {
1071 PATHD_FORMAT("%*smain: NULL\n", ps2
, "");
1073 PATHD_FORMAT("%*smain: <THREAD MASTER %p>\n", ps2
, "",
1076 if (state
->self
== NULL
) {
1077 PATHD_FORMAT("%*sself: NULL\n", ps2
, "");
1079 PATHD_FORMAT("%*sself: <THREAD MASTER %p>\n", ps2
, "",
1082 PATHD_FORMAT("%*spcc_count: %d\n", ps2
, "", state
->pcc_count
);
1083 PATHD_FORMAT("%*spcc:\n", ps2
, "");
1084 for (i
= 0; i
< MAX_PCC
; i
++) {
1085 if (state
->pcc
[i
]) {
1086 PATHD_FORMAT("%*s- ", ps3
- 2, "");
1087 _format_pcc_state(ps3
, state
->pcc
[i
]);
1093 void _format_path(int ps
, struct path
*path
)
1096 PATHD_FORMAT("NULL\n");
1098 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1099 int ps3
= ps2
+ DEBUG_IDENT_SIZE
;
1101 PATHD_FORMAT("%*snbkey: \n", ps2
, "");
1102 PATHD_FORMAT("%*scolor: %u\n", ps3
, "", path
->nbkey
.color
);
1103 switch (path
->nbkey
.endpoint
.ipa_type
) {
1105 PATHD_FORMAT("%*sendpoint: %pI4\n", ps3
, "",
1106 &path
->nbkey
.endpoint
.ipaddr_v4
);
1109 PATHD_FORMAT("%*sendpoint: %pI6\n", ps3
, "",
1110 &path
->nbkey
.endpoint
.ipaddr_v6
);
1113 PATHD_FORMAT("%*sendpoint: NONE\n", ps3
, "");
1116 PATHD_FORMAT("%*spreference: %u\n", ps3
, "",
1117 path
->nbkey
.preference
);
1119 if (path
->sender
.ipa_type
== IPADDR_V4
) {
1120 PATHD_FORMAT("%*ssender: %pI4\n", ps2
, "",
1121 &path
->sender
.ipaddr_v4
);
1122 } else if (path
->sender
.ipa_type
== IPADDR_V6
) {
1123 PATHD_FORMAT("%*ssender: %pI6\n", ps2
, "",
1124 &path
->sender
.ipaddr_v6
);
1126 PATHD_FORMAT("%*ssender: UNDEFINED\n", ps2
, "");
1128 if (path
->pcc_addr
.ipa_type
== IPADDR_V4
) {
1129 PATHD_FORMAT("%*spcc_addr: %pI4\n", ps2
, "",
1130 &path
->pcc_addr
.ipaddr_v4
);
1131 } else if (path
->pcc_addr
.ipa_type
== IPADDR_V6
) {
1132 PATHD_FORMAT("%*spcc_addr: %pI6\n", ps2
, "",
1133 &path
->pcc_addr
.ipaddr_v6
);
1135 PATHD_FORMAT("%*spcc_addr: UNDEFINED\n", ps2
, "");
1137 PATHD_FORMAT("%*spcc_id: %u\n", ps2
, "", path
->pcc_id
);
1138 PATHD_FORMAT("%*screate_origin: %s (%u)\n", ps2
, "",
1139 srte_protocol_origin_name(path
->create_origin
),
1140 path
->create_origin
);
1141 PATHD_FORMAT("%*supdate_origin: %s (%u)\n", ps2
, "",
1142 srte_protocol_origin_name(path
->update_origin
),
1143 path
->update_origin
);
1144 if (path
->originator
!= NULL
) {
1145 PATHD_FORMAT("%*soriginator: %s\n", ps2
, "",
1148 PATHD_FORMAT("%*soriginator: UNDEFINED\n", ps2
, "");
1150 PATHD_FORMAT("%*stype: %s (%u)\n", ps2
, "",
1151 srte_candidate_type_name(path
->type
), path
->type
);
1152 PATHD_FORMAT("%*splsp_id: %u\n", ps2
, "", path
->plsp_id
);
1153 if (path
->name
== NULL
) {
1154 PATHD_FORMAT("%*sname: NULL\n", ps2
, "");
1156 PATHD_FORMAT("%*sname: %s\n", ps2
, "", path
->name
);
1158 PATHD_FORMAT("%*ssrp_id: %u\n", ps2
, "", path
->srp_id
);
1159 PATHD_FORMAT("%*sreq_id: %u\n", ps2
, "", path
->req_id
);
1160 PATHD_FORMAT("%*sstatus: %s (%u)\n", ps2
, "",
1161 pcep_lsp_status_name(path
->status
), path
->status
);
1162 PATHD_FORMAT("%*sdo_remove: %u\n", ps2
, "", path
->do_remove
);
1163 PATHD_FORMAT("%*sgo_active: %u\n", ps2
, "", path
->go_active
);
1164 PATHD_FORMAT("%*swas_created: %u\n", ps2
, "",
1166 PATHD_FORMAT("%*swas_removed: %u\n", ps2
, "",
1168 PATHD_FORMAT("%*sis_synching: %u\n", ps2
, "",
1170 PATHD_FORMAT("%*sis_delegated: %u\n", ps2
, "",
1171 path
->is_delegated
);
1172 PATHD_FORMAT("%*shas_bandwidth: %u\n", ps2
, "",
1173 path
->has_bandwidth
);
1174 if (path
->has_bandwidth
) {
1175 PATHD_FORMAT("%*senforce_bandwidth: %u\n", ps2
, "",
1176 path
->enforce_bandwidth
);
1177 PATHD_FORMAT("%*sbandwidth: %f\n", ps2
, "",
1180 PATHD_FORMAT("%*shas_pcc_objfun: %u\n", ps2
, "",
1181 path
->has_pcc_objfun
);
1182 if (path
->has_pcc_objfun
) {
1183 PATHD_FORMAT("%*senforce_pcc_objfun: %d\n", ps2
, "",
1184 path
->enforce_pcc_objfun
);
1185 PATHD_FORMAT("%*spcc_objfun: %s (%u)\n", ps2
, "",
1186 objfun_type_name(path
->pcc_objfun
),
1189 PATHD_FORMAT("%*shas_pce_objfun: %u\n", ps2
, "",
1190 path
->has_pce_objfun
);
1191 if (path
->has_pce_objfun
)
1192 PATHD_FORMAT("%*spce_objfun: %s (%u)\n", ps2
, "",
1193 objfun_type_name(path
->pce_objfun
),
1195 PATHD_FORMAT("%*shas_affinity_filters: %u\n", ps2
, "",
1196 path
->has_affinity_filters
);
1197 if (path
->has_affinity_filters
) {
1198 PATHD_FORMAT("%*sexclude_any: 0x%08x\n", ps2
, "",
1199 path
->affinity_filters
1200 [AFFINITY_FILTER_EXCLUDE_ANY
- 1]);
1201 PATHD_FORMAT("%*sinclude_any: 0x%08x\n", ps2
, "",
1202 path
->affinity_filters
1203 [AFFINITY_FILTER_INCLUDE_ANY
- 1]);
1204 PATHD_FORMAT("%*sinclude_all: 0x%08x\n", ps2
, "",
1205 path
->affinity_filters
1206 [AFFINITY_FILTER_INCLUDE_ALL
- 1]);
1209 if (path
->first_hop
== NULL
) {
1210 PATHD_FORMAT("%*shops: []\n", ps2
, "");
1212 PATHD_FORMAT("%*shops: \n", ps2
, "");
1213 for (struct path_hop
*hop
= path
->first_hop
;
1214 hop
!= NULL
; hop
= hop
->next
) {
1215 PATHD_FORMAT("%*s- ", ps3
- 2, "");
1216 _format_path_hop(ps3
, hop
);
1219 if (path
->first_metric
== NULL
) {
1220 PATHD_FORMAT("%*smetrics: []\n", ps2
, "");
1222 PATHD_FORMAT("%*smetrics: \n", ps2
, "");
1223 for (struct path_metric
*metric
= path
->first_metric
;
1224 NULL
!= metric
; metric
= metric
->next
) {
1225 PATHD_FORMAT("%*s- ", ps3
- 2, "");
1226 _format_path_metric(ps3
, metric
);
1232 void _format_path_metric(int ps
, struct path_metric
*metric
)
1234 PATHD_FORMAT("type: %s (%u)\n", pcep_metric_type_name(metric
->type
),
1236 PATHD_FORMAT("%*senforce: %u\n", ps
, "", metric
->enforce
);
1237 PATHD_FORMAT("%*sis_bound: %u\n", ps
, "", metric
->is_bound
);
1238 PATHD_FORMAT("%*sis_computed: %u\n", ps
, "", metric
->is_computed
);
1239 PATHD_FORMAT("%*svalue: %f\n", ps
, "", metric
->value
);
1242 void _format_path_hop(int ps
, struct path_hop
*hop
)
1244 PATHD_FORMAT("is_loose: %u\n", hop
->is_loose
);
1245 PATHD_FORMAT("%*shas_sid: %u\n", ps
, "", hop
->has_sid
);
1248 PATHD_FORMAT("%*sis_mpls: %u\n", ps
, "", hop
->is_mpls
);
1250 PATHD_FORMAT("%*shas_attribs: %u\n", ps
, "",
1252 PATHD_FORMAT("%*slabel: %u\n", ps
, "",
1253 hop
->sid
.mpls
.label
);
1254 if (hop
->has_attribs
) {
1255 PATHD_FORMAT("%*straffic_class: %u\n", ps
, "",
1256 hop
->sid
.mpls
.traffic_class
);
1257 PATHD_FORMAT("%*sis_bottom: %u\n", ps
, "",
1258 hop
->sid
.mpls
.is_bottom
);
1259 PATHD_FORMAT("%*sttl: %u\n", ps
, "",
1263 PATHD_FORMAT("%*sSID: %u\n", ps
, "", hop
->sid
.value
);
1267 PATHD_FORMAT("%*shas_nai: %u\n", ps
, "", hop
->has_nai
);
1269 PATHD_FORMAT("%*snai_type: %s (%u)\n", ps
, "",
1270 pcep_nai_type_name(hop
->nai
.type
), hop
->nai
.type
);
1271 switch (hop
->nai
.type
) {
1272 case PCEP_SR_SUBOBJ_NAI_IPV4_NODE
:
1273 PATHD_FORMAT("%*sNAI: %pI4\n", ps
, "",
1274 &hop
->nai
.local_addr
.ipaddr_v4
);
1276 case PCEP_SR_SUBOBJ_NAI_IPV6_NODE
:
1277 PATHD_FORMAT("%*sNAI: %pI6\n", ps
, "",
1278 &hop
->nai
.local_addr
.ipaddr_v6
);
1280 case PCEP_SR_SUBOBJ_NAI_IPV4_ADJACENCY
:
1281 PATHD_FORMAT("%*sNAI: %pI4/%pI4\n", ps
, "",
1282 &hop
->nai
.local_addr
.ipaddr_v4
,
1283 &hop
->nai
.remote_addr
.ipaddr_v4
);
1285 case PCEP_SR_SUBOBJ_NAI_IPV6_ADJACENCY
:
1286 PATHD_FORMAT("%*sNAI: %pI6/%pI6\n", ps
, "",
1287 &hop
->nai
.local_addr
.ipaddr_v6
,
1288 &hop
->nai
.remote_addr
.ipaddr_v6
);
1290 case PCEP_SR_SUBOBJ_NAI_UNNUMBERED_IPV4_ADJACENCY
:
1291 PATHD_FORMAT("%*sNAI: %pI6(%u)/%pI6(%u)\n", ps
, "",
1292 &hop
->nai
.local_addr
.ipaddr_v6
,
1293 hop
->nai
.local_iface
,
1294 &hop
->nai
.remote_addr
.ipaddr_v6
,
1295 hop
->nai
.remote_iface
);
1298 PATHD_FORMAT("%*sNAI: UNSUPPORTED\n", ps
, "");
1304 void _format_pcep_event(int ps
, pcep_event
*event
)
1306 if (event
== NULL
) {
1307 PATHD_FORMAT("NULL\n");
1309 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1311 PATHD_FORMAT("%*sevent_type: %s\n", ps2
, "",
1312 pcep_event_type_name(event
->event_type
));
1313 PATHD_FORMAT("%*sevent_time: %s", ps2
, "",
1314 ctime(&event
->event_time
));
1315 if (event
->session
== NULL
) {
1316 PATHD_FORMAT("%*ssession: NULL\n", ps2
, "");
1318 PATHD_FORMAT("%*ssession: <PCC SESSION %p>\n", ps2
, "",
1321 PATHD_FORMAT("%*smessage: ", ps2
, "");
1322 _format_pcep_message(ps2
, event
->message
);
1326 void _format_pcep_message(int ps
, struct pcep_message
*msg
)
1329 PATHD_FORMAT("NULL\n");
1331 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1333 PATHD_FORMAT("%*spcep_version: %u\n", ps2
, "",
1334 msg
->msg_header
->pcep_version
);
1335 PATHD_FORMAT("%*stype: %s (%u)\n", ps2
, "",
1336 pcep_message_type_name(msg
->msg_header
->type
),
1337 msg
->msg_header
->type
);
1338 PATHD_FORMAT("%*sobjects: ", ps2
, "");
1339 _format_pcep_objects(ps2
, msg
->obj_list
);
1343 void _format_pcep_objects(int ps
, double_linked_list
*objs
)
1346 PATHD_FORMAT("NULL\n");
1348 double_linked_list_node
*node
;
1349 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1352 if (objs
->num_entries
== 0) {
1353 PATHD_FORMAT("[]\n");
1358 for (node
= objs
->head
, i
= 0; node
!= NULL
;
1359 node
= node
->next_node
, i
++) {
1360 struct pcep_object_header
*obj
=
1361 (struct pcep_object_header
*)node
->data
;
1362 PATHD_FORMAT("%*s- ", ps2
- 2, "");
1363 _format_pcep_object(ps2
, obj
);
1368 void _format_pcep_object(int ps
, struct pcep_object_header
*obj
)
1371 PATHD_FORMAT("NULL\n");
1373 PATHD_FORMAT("object_class: %s (%u)\n",
1374 pcep_object_class_name(obj
->object_class
),
1376 PATHD_FORMAT("%*sobject_type: %s (%u)\n", ps
, "",
1377 pcep_object_type_name(obj
->object_class
,
1380 PATHD_FORMAT("%*sflag_p: %u\n", ps
, "", obj
->flag_p
);
1381 PATHD_FORMAT("%*sflag_i: %u\n", ps
, "", obj
->flag_i
);
1382 _format_pcep_object_details(ps
, obj
);
1383 _format_pcep_object_tlvs(ps
, obj
);
1387 void _format_pcep_object_details(int ps
, struct pcep_object_header
*obj
)
1389 switch (TUP(obj
->object_class
, obj
->object_type
)) {
1390 case TUP(PCEP_OBJ_CLASS_ERROR
, PCEP_OBJ_TYPE_ERROR
):
1391 _format_pcep_object_error(ps
, (struct pcep_object_error
*)obj
);
1393 case TUP(PCEP_OBJ_CLASS_OPEN
, PCEP_OBJ_TYPE_OPEN
):
1394 _format_pcep_object_open(ps
, (struct pcep_object_open
*)obj
);
1396 case TUP(PCEP_OBJ_CLASS_RP
, PCEP_OBJ_TYPE_RP
):
1397 _format_pcep_object_rp(ps
, (struct pcep_object_rp
*)obj
);
1399 case TUP(PCEP_OBJ_CLASS_SRP
, PCEP_OBJ_TYPE_SRP
):
1400 _format_pcep_object_srp(ps
, (struct pcep_object_srp
*)obj
);
1402 case TUP(PCEP_OBJ_CLASS_LSP
, PCEP_OBJ_TYPE_LSP
):
1403 _format_pcep_object_lsp(ps
, (struct pcep_object_lsp
*)obj
);
1405 case TUP(PCEP_OBJ_CLASS_LSPA
, PCEP_OBJ_TYPE_LSPA
):
1406 _format_pcep_object_lspa(ps
, (struct pcep_object_lspa
*)obj
);
1408 case TUP(PCEP_OBJ_CLASS_ENDPOINTS
, PCEP_OBJ_TYPE_ENDPOINT_IPV4
):
1409 _format_pcep_object_ipv4_endpoint(
1410 ps
, (struct pcep_object_endpoints_ipv4
*)obj
);
1412 case TUP(PCEP_OBJ_CLASS_ERO
, PCEP_OBJ_TYPE_ERO
):
1413 _format_pcep_object_ro(ps
, (struct pcep_object_ro
*)obj
);
1415 case TUP(PCEP_OBJ_CLASS_METRIC
, PCEP_OBJ_TYPE_METRIC
):
1416 _format_pcep_object_metric(ps
,
1417 (struct pcep_object_metric
*)obj
);
1419 case TUP(PCEP_OBJ_CLASS_BANDWIDTH
, PCEP_OBJ_TYPE_BANDWIDTH_REQ
):
1420 case TUP(PCEP_OBJ_CLASS_BANDWIDTH
, PCEP_OBJ_TYPE_BANDWIDTH_CISCO
):
1421 _format_pcep_object_bandwidth(
1422 ps
, (struct pcep_object_bandwidth
*)obj
);
1424 case TUP(PCEP_OBJ_CLASS_NOPATH
, PCEP_OBJ_TYPE_NOPATH
):
1425 _format_pcep_object_nopath(ps
,
1426 (struct pcep_object_nopath
*)obj
);
1428 case TUP(PCEP_OBJ_CLASS_OF
, PCEP_OBJ_TYPE_OF
):
1429 _format_pcep_object_objfun(
1430 ps
, (struct pcep_object_objective_function
*)obj
);
1433 PATHD_FORMAT("%*s...\n", ps
, "");
1438 void _format_pcep_object_error(int ps
, struct pcep_object_error
*obj
)
1440 PATHD_FORMAT("%*serror_type: %s (%u)\n", ps
, "",
1441 pcep_error_type_name(obj
->error_type
), obj
->error_type
);
1442 PATHD_FORMAT("%*serror_value: %s (%u)\n", ps
, "",
1443 pcep_error_value_name(obj
->error_type
, obj
->error_value
),
1448 void _format_pcep_object_open(int ps
, struct pcep_object_open
*obj
)
1450 PATHD_FORMAT("%*sopen_version: %u\n", ps
, "", obj
->open_version
);
1451 PATHD_FORMAT("%*sopen_keepalive: %u\n", ps
, "", obj
->open_keepalive
);
1452 PATHD_FORMAT("%*sopen_deadtimer: %u\n", ps
, "", obj
->open_deadtimer
);
1453 PATHD_FORMAT("%*sopen_sid: %u\n", ps
, "", obj
->open_sid
);
1456 void _format_pcep_object_rp(int ps
, struct pcep_object_rp
*obj
)
1458 PATHD_FORMAT("%*spriority: %u\n", ps
, "", obj
->priority
);
1459 PATHD_FORMAT("%*sflag_reoptimization: %u\n", ps
, "",
1460 obj
->flag_reoptimization
);
1461 PATHD_FORMAT("%*sflag_bidirectional: %u\n", ps
, "",
1462 obj
->flag_bidirectional
);
1463 PATHD_FORMAT("%*sflag_strict: %u\n", ps
, "", obj
->flag_strict
);
1464 PATHD_FORMAT("%*sflag_of: %u\n", ps
, "", obj
->flag_of
);
1465 PATHD_FORMAT("%*srequest_id: %u\n", ps
, "", obj
->request_id
);
1469 void _format_pcep_object_srp(int ps
, struct pcep_object_srp
*obj
)
1471 PATHD_FORMAT("%*sflag_lsp_remove: %u\n", ps
, "", obj
->flag_lsp_remove
);
1472 PATHD_FORMAT("%*ssrp_id_number: %u\n", ps
, "", obj
->srp_id_number
);
1475 void _format_pcep_object_lsp(int ps
, struct pcep_object_lsp
*obj
)
1477 PATHD_FORMAT("%*splsp_id: %u\n", ps
, "", obj
->plsp_id
);
1478 PATHD_FORMAT("%*sstatus: %s\n", ps
, "",
1479 pcep_lsp_status_name(obj
->operational_status
));
1480 PATHD_FORMAT("%*sflag_d: %u\n", ps
, "", obj
->flag_d
);
1481 PATHD_FORMAT("%*sflag_s: %u\n", ps
, "", obj
->flag_s
);
1482 PATHD_FORMAT("%*sflag_r: %u\n", ps
, "", obj
->flag_r
);
1483 PATHD_FORMAT("%*sflag_a: %u\n", ps
, "", obj
->flag_a
);
1484 PATHD_FORMAT("%*sflag_c: %u\n", ps
, "", obj
->flag_c
);
1487 void _format_pcep_object_lspa(int ps
, struct pcep_object_lspa
*obj
)
1489 PATHD_FORMAT("%*slspa_exclude_any: 0x%08x\n", ps
, "",
1490 obj
->lspa_exclude_any
);
1491 PATHD_FORMAT("%*slspa_include_any: 0x%08x\n", ps
, "",
1492 obj
->lspa_include_any
);
1493 PATHD_FORMAT("%*slspa_include_all: 0x%08x\n", ps
, "",
1494 obj
->lspa_include_all
);
1495 PATHD_FORMAT("%*ssetup_priority: %u\n", ps
, "", obj
->setup_priority
);
1496 PATHD_FORMAT("%*sholding_priority: %u\n", ps
, "",
1497 obj
->holding_priority
);
1498 PATHD_FORMAT("%*sflag_local_protection: %u\n", ps
, "",
1499 obj
->flag_local_protection
);
1502 void _format_pcep_object_ipv4_endpoint(int ps
,
1503 struct pcep_object_endpoints_ipv4
*obj
)
1505 PATHD_FORMAT("%*ssrc_ipv4: %pI4\n", ps
, "", &obj
->src_ipv4
);
1506 PATHD_FORMAT("%*sdst_ipv4: %pI4\n", ps
, "", &obj
->dst_ipv4
);
1509 void _format_pcep_object_metric(int ps
, struct pcep_object_metric
*obj
)
1511 PATHD_FORMAT("%*stype: %s (%u)\n", ps
, "",
1512 pcep_metric_type_name(obj
->type
), obj
->type
);
1513 PATHD_FORMAT("%*sflag_b: %u\n", ps
, "", obj
->flag_b
);
1514 PATHD_FORMAT("%*sflag_c: %u\n", ps
, "", obj
->flag_c
);
1515 PATHD_FORMAT("%*svalue: %f\n", ps
, "", obj
->value
);
1518 void _format_pcep_object_bandwidth(int ps
, struct pcep_object_bandwidth
*obj
)
1520 PATHD_FORMAT("%*sbandwidth: %f\n", ps
, "", obj
->bandwidth
);
1523 void _format_pcep_object_nopath(int ps
, struct pcep_object_nopath
*obj
)
1525 PATHD_FORMAT("%*sni: %u\n", ps
, "", obj
->ni
);
1526 PATHD_FORMAT("%*sflag_c: %u\n", ps
, "", obj
->flag_c
);
1527 PATHD_FORMAT("%*serr_code: %s (%u)\n", ps
, "",
1528 pcep_nopath_tlv_err_code_name(obj
->err_code
),
1532 void _format_pcep_object_objfun(int ps
,
1533 struct pcep_object_objective_function
*obj
)
1535 PATHD_FORMAT("%*sof_code: %s (%u)\n", ps
, "",
1536 objfun_type_name(obj
->of_code
), obj
->of_code
);
1539 void _format_pcep_object_ro(int ps
, struct pcep_object_ro
*obj
)
1541 double_linked_list
*obj_list
= obj
->sub_objects
;
1542 double_linked_list_node
*node
;
1543 struct pcep_object_ro_subobj
*sub_obj
;
1545 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1548 if ((obj_list
== NULL
) || (obj_list
->num_entries
== 0)) {
1549 PATHD_FORMAT("%*ssub_objects: []\n", ps
, "");
1553 PATHD_FORMAT("%*ssub_objects:\n", ps
, "");
1555 for (node
= obj_list
->head
, i
= 0; node
!= NULL
;
1556 node
= node
->next_node
, i
++) {
1557 sub_obj
= (struct pcep_object_ro_subobj
*)node
->data
;
1558 PATHD_FORMAT("%*s- flag_subobj_loose_hop: %u\n", ps2
- 2, "",
1559 sub_obj
->flag_subobj_loose_hop
);
1560 PATHD_FORMAT("%*sro_subobj_type: %s (%u)\n", ps2
, "",
1561 pcep_ro_type_name(sub_obj
->ro_subobj_type
),
1562 sub_obj
->ro_subobj_type
);
1563 _format_pcep_object_ro_details(ps2
, sub_obj
);
1567 void _format_pcep_object_ro_details(int ps
, struct pcep_object_ro_subobj
*ro
)
1569 switch (ro
->ro_subobj_type
) {
1570 case RO_SUBOBJ_TYPE_IPV4
:
1571 _format_pcep_object_ro_ipv4(ps
,
1572 (struct pcep_ro_subobj_ipv4
*)ro
);
1574 case RO_SUBOBJ_TYPE_SR
:
1575 _format_pcep_object_ro_sr(ps
, (struct pcep_ro_subobj_sr
*)ro
);
1578 PATHD_FORMAT("%*s...\n", ps
, "");
1583 void _format_pcep_object_ro_ipv4(int ps
, struct pcep_ro_subobj_ipv4
*obj
)
1585 PATHD_FORMAT("%*sip_addr: %pI4\n", ps
, "", &obj
->ip_addr
);
1586 PATHD_FORMAT("%*sprefix_length: %u\n", ps
, "", obj
->prefix_length
);
1587 PATHD_FORMAT("%*sflag_local_protection: %u\n", ps
, "",
1588 obj
->flag_local_protection
);
1591 void _format_pcep_object_ro_sr(int ps
, struct pcep_ro_subobj_sr
*obj
)
1593 PATHD_FORMAT("%*snai_type = %s (%u)\n", ps
, "",
1594 pcep_nai_type_name(obj
->nai_type
), obj
->nai_type
);
1595 PATHD_FORMAT("%*sflag_f: %u\n", ps
, "", obj
->flag_f
);
1596 PATHD_FORMAT("%*sflag_s: %u\n", ps
, "", obj
->flag_s
);
1597 PATHD_FORMAT("%*sflag_c: %u\n", ps
, "", obj
->flag_c
);
1598 PATHD_FORMAT("%*sflag_m: %u\n", ps
, "", obj
->flag_m
);
1601 PATHD_FORMAT("%*sSID: %u\n", ps
, "", obj
->sid
);
1603 PATHD_FORMAT("%*slabel: %u\n", ps
, "",
1604 GET_SR_ERO_SID_LABEL(obj
->sid
));
1606 PATHD_FORMAT("%*sTC: %u\n", ps
, "",
1607 GET_SR_ERO_SID_TC(obj
->sid
));
1608 PATHD_FORMAT("%*sS: %u\n", ps
, "",
1609 GET_SR_ERO_SID_S(obj
->sid
));
1610 PATHD_FORMAT("%*sTTL: %u\n", ps
, "",
1611 GET_SR_ERO_SID_TTL(obj
->sid
));
1617 struct in_addr
*laddr4
, *raddr4
;
1618 struct in6_addr
*laddr6
, *raddr6
;
1619 uint32_t *liface
, *riface
;
1620 assert(obj
->nai_list
!= NULL
);
1621 double_linked_list_node
*n
= obj
->nai_list
->head
;
1623 assert(n
->data
!= NULL
);
1624 switch (obj
->nai_type
) {
1625 case PCEP_SR_SUBOBJ_NAI_IPV4_NODE
:
1626 laddr4
= (struct in_addr
*)n
->data
;
1627 PATHD_FORMAT("%*sNAI: %pI4\n", ps
, "", laddr4
);
1629 case PCEP_SR_SUBOBJ_NAI_IPV6_NODE
:
1630 laddr6
= (struct in6_addr
*)n
->data
;
1631 PATHD_FORMAT("%*sNAI: %pI6\n", ps
, "", laddr6
);
1633 case PCEP_SR_SUBOBJ_NAI_IPV4_ADJACENCY
:
1634 assert(n
->next_node
!= NULL
);
1635 assert(n
->next_node
->data
!= NULL
);
1636 laddr4
= (struct in_addr
*)n
->data
;
1637 raddr4
= (struct in_addr
*)n
->next_node
->data
;
1638 PATHD_FORMAT("%*sNAI: %pI4/%pI4\n", ps
, "", laddr4
,
1641 case PCEP_SR_SUBOBJ_NAI_IPV6_ADJACENCY
:
1642 assert(n
->next_node
!= NULL
);
1643 assert(n
->next_node
->data
!= NULL
);
1644 laddr6
= (struct in6_addr
*)n
->data
;
1645 raddr6
= (struct in6_addr
*)n
->next_node
->data
;
1646 PATHD_FORMAT("%*sNAI: %pI6/%pI6\n", ps
, "", laddr6
,
1649 case PCEP_SR_SUBOBJ_NAI_UNNUMBERED_IPV4_ADJACENCY
:
1650 laddr4
= (struct in_addr
*)n
->data
;
1653 assert(n
->data
!= NULL
);
1654 liface
= (uint32_t *)n
->data
;
1657 assert(n
->data
!= NULL
);
1658 raddr4
= (struct in_addr
*)n
->data
;
1660 assert(n
->data
!= NULL
);
1661 riface
= (uint32_t *)n
->data
;
1662 PATHD_FORMAT("%*sNAI: %pI4(%u)/%pI4(%u)\n", ps
, "",
1663 laddr4
, *liface
, raddr4
, *riface
);
1666 PATHD_FORMAT("%*sNAI: UNSUPPORTED\n", ps
, "");
1672 void _format_pcep_object_tlvs(int ps
, struct pcep_object_header
*obj
)
1674 double_linked_list
*tlv_list
= obj
->tlv_list
;
1675 struct pcep_object_tlv_header
*tlv
;
1676 double_linked_list_node
*node
;
1677 int ps2
= ps
+ DEBUG_IDENT_SIZE
;
1680 if (tlv_list
== NULL
)
1682 if (tlv_list
->num_entries
== 0) {
1683 PATHD_FORMAT("%*stlvs: []\n", ps
, "");
1687 PATHD_FORMAT("%*stlvs:\n", ps
, "");
1689 for (node
= tlv_list
->head
, i
= 0; node
!= NULL
;
1690 node
= node
->next_node
, i
++) {
1691 tlv
= (struct pcep_object_tlv_header
*)node
->data
;
1692 PATHD_FORMAT("%*s- ", ps2
- 2, "");
1693 _format_pcep_object_tlv(ps2
, tlv
);
1697 void _format_pcep_object_tlv(int ps
, struct pcep_object_tlv_header
*tlv_header
)
1699 PATHD_FORMAT("type: %s (%u)\n", pcep_tlv_type_name(tlv_header
->type
),
1701 _format_pcep_object_tlv_details(ps
, tlv_header
);
1704 void _format_pcep_object_tlv_details(int ps
,
1705 struct pcep_object_tlv_header
*tlv_header
)
1707 switch (tlv_header
->type
) {
1708 case PCEP_OBJ_TLV_TYPE_SYMBOLIC_PATH_NAME
:
1709 _format_pcep_object_tlv_symbolic_path_name(
1710 ps
, (struct pcep_object_tlv_symbolic_path_name
*)
1713 case PCEP_OBJ_TLV_TYPE_STATEFUL_PCE_CAPABILITY
:
1714 _format_pcep_object_tlv_stateful_pce_capability(
1715 ps
, (struct pcep_object_tlv_stateful_pce_capability
*)
1718 case PCEP_OBJ_TLV_TYPE_SR_PCE_CAPABILITY
:
1719 _format_pcep_object_tlv_sr_pce_capability(
1721 (struct pcep_object_tlv_sr_pce_capability
*)tlv_header
);
1723 case PCEP_OBJ_TLV_TYPE_PATH_SETUP_TYPE
:
1724 _format_pcep_object_tlv_path_setup_type(
1726 (struct pcep_object_tlv_path_setup_type
*)tlv_header
);
1729 PATHD_FORMAT("%*s...\n", ps
, "");
1734 void _format_pcep_object_tlv_symbolic_path_name(
1735 int ps
, struct pcep_object_tlv_symbolic_path_name
*tlv
)
1737 PATHD_FORMAT("%*ssymbolic_path_name: %.*s\n", ps
, "",
1738 tlv
->symbolic_path_name_length
, tlv
->symbolic_path_name
);
1741 void _format_pcep_object_tlv_stateful_pce_capability(
1742 int ps
, struct pcep_object_tlv_stateful_pce_capability
*tlv
)
1744 PATHD_FORMAT("%*sflag_u_lsp_update_capability: %u\n", ps
, "",
1745 tlv
->flag_u_lsp_update_capability
);
1746 PATHD_FORMAT("%*sflag_s_include_db_version: %u\n", ps
, "",
1747 tlv
->flag_s_include_db_version
);
1748 PATHD_FORMAT("%*sflag_i_lsp_instantiation_capability: %u\n", ps
, "",
1749 tlv
->flag_i_lsp_instantiation_capability
);
1750 PATHD_FORMAT("%*sflag_t_triggered_resync: %u\n", ps
, "",
1751 tlv
->flag_t_triggered_resync
);
1752 PATHD_FORMAT("%*sflag_d_delta_lsp_sync: %u\n", ps
, "",
1753 tlv
->flag_d_delta_lsp_sync
);
1754 PATHD_FORMAT("%*sflag_f_triggered_initial_sync: %u\n", ps
, "",
1755 tlv
->flag_f_triggered_initial_sync
);
1758 void _format_pcep_object_tlv_sr_pce_capability(
1759 int ps
, struct pcep_object_tlv_sr_pce_capability
*tlv
)
1762 PATHD_FORMAT("%*sflag_n: %u\n", ps
, "", tlv
->flag_n
);
1763 PATHD_FORMAT("%*sflag_x: %u\n", ps
, "", tlv
->flag_x
);
1764 PATHD_FORMAT("%*smax_sid_depth: %u\n", ps
, "", tlv
->max_sid_depth
);
1767 void _format_pcep_object_tlv_path_setup_type(
1768 int ps
, struct pcep_object_tlv_path_setup_type
*tlv
)
1770 PATHD_FORMAT("%*spath_setup_type: %u\n", ps
, "", tlv
->path_setup_type
);