]> git.proxmox.com Git - mirror_frr.git/blame - pathd/path_pcep_debug.c
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / pathd / path_pcep_debug.c
CommitLineData
acddc0ed 1// SPDX-License-Identifier: GPL-2.0-or-later
efba0985
SM
2/*
3 * Copyright (C) 2020 NetDEF, Inc.
efba0985
SM
4 */
5
1f8031f7
DL
6#include <zebra.h>
7
efba0985
SM
8#include <string.h>
9#include <stdbool.h>
10#include <time.h>
11#include <libyang/libyang.h>
12
13#include "printfrr.h"
14#include "ipaddr.h"
15
16#include "pathd/path_pcep_debug.h"
17
18static void _format_pcc_opts(int ps, struct pcc_opts *ops);
19static void _format_pce_opts(int ps, struct pce_opts *ops);
20static void _format_pcc_caps(int ps, struct pcep_caps *caps);
21static void _format_pcc_state(int ps, struct pcc_state *state);
22static void _format_ctrl_state(int ps, struct ctrl_state *state);
23static void _format_path(int ps, struct path *path);
24static void _format_path_hop(int ps, struct path_hop *hop);
25static void _format_path_metric(int ps, struct path_metric *metric);
26static void _format_pcep_event(int ps, pcep_event *event);
27static void _format_pcep_message(int ps, struct pcep_message *msg);
28static void _format_pcep_objects(int ps, double_linked_list *objs);
29static void _format_pcep_object(int ps, struct pcep_object_header *obj);
30static void _format_pcep_object_details(int ps, struct pcep_object_header *obj);
31static void _format_pcep_object_error(int ps, struct pcep_object_error *obj);
32static void _format_pcep_object_open(int ps, struct pcep_object_open *obj);
33static void _format_pcep_object_rp(int ps, struct pcep_object_rp *obj);
34static void _format_pcep_object_srp(int ps, struct pcep_object_srp *obj);
35static void _format_pcep_object_lsp(int psps, struct pcep_object_lsp *obj);
36static void _format_pcep_object_lspa(int psps, struct pcep_object_lspa *obj);
37static void
38_format_pcep_object_ipv4_endpoint(int ps,
39 struct pcep_object_endpoints_ipv4 *obj);
40static void _format_pcep_object_metric(int ps, struct pcep_object_metric *obj);
41static void _format_pcep_object_bandwidth(int ps,
42 struct pcep_object_bandwidth *obj);
43static void _format_pcep_object_nopath(int ps, struct pcep_object_nopath *obj);
44static void
45_format_pcep_object_objfun(int ps, struct pcep_object_objective_function *obj);
46static void _format_pcep_object_ro(int ps, struct pcep_object_ro *obj);
47static void _format_pcep_object_ro_details(int ps,
48 struct pcep_object_ro_subobj *ro);
49static void _format_pcep_object_ro_ipv4(int ps,
50 struct pcep_ro_subobj_ipv4 *obj);
51static void _format_pcep_object_ro_sr(int ps, struct pcep_ro_subobj_sr *obj);
52static void _format_pcep_object_tlvs(int ps, struct pcep_object_header *obj);
53static void _format_pcep_object_tlv(int ps,
54 struct pcep_object_tlv_header *tlv_header);
55static void
56_format_pcep_object_tlv_details(int ps,
57 struct pcep_object_tlv_header *tlv_header);
58static void _format_pcep_object_tlv_symbolic_path_name(
59 int ps, struct pcep_object_tlv_symbolic_path_name *tlv);
60static void _format_pcep_object_tlv_stateful_pce_capability(
61 int ps, struct pcep_object_tlv_stateful_pce_capability *tlv);
62static void _format_pcep_object_tlv_sr_pce_capability(
63 int ps, struct pcep_object_tlv_sr_pce_capability *tlv);
64static void _format_pcep_object_tlv_path_setup_type(
65 int ps, struct pcep_object_tlv_path_setup_type *tlv);
66
67const char *pcc_status_name(enum pcc_status status)
68{
69 switch (status) {
70 case PCEP_PCC_INITIALIZED:
71 return "INITIALIZED";
72 case PCEP_PCC_DISCONNECTED:
73 return "DISCONNECTED";
74 case PCEP_PCC_CONNECTING:
75 return "CONNECTING";
76 case PCEP_PCC_SYNCHRONIZING:
77 return "SYNCHRONIZING";
78 case PCEP_PCC_OPERATING:
79 return "OPERATING";
efba0985 80 }
d5dea350
DS
81
82 assert(!"Reached end of function where we do not expect to");
efba0985
SM
83}
84
85const char *pcep_event_type_name(pcep_event_type event_type)
86{
87 switch (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";
d5dea350
DS
108 case PCC_CONNECTION_FAILURE:
109 return "PCC_CONNECTION_FAILURE";
110 case PCC_SENT_INVALID_OPEN:
111 return "PCC_SENT_INVALID_OPEN";
efba0985 112 }
d5dea350
DS
113
114 assert(!"Reached end of function where we do not expect to");
efba0985
SM
115}
116
117const char *pcep_error_type_name(enum pcep_error_type error_type)
118{
119 switch (error_type) {
120
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";
181 default:
182 return "UNKNOWN";
183 }
184}
185
186const char *pcep_error_value_name(enum pcep_error_type error_type,
187 enum pcep_error_value error_value)
188{
189 switch (TUP(error_type, error_value)) {
190
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):
197 return "UNASSIGNED";
198
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";
219
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";
224
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";
248
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";
271
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";
308
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";
395
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";
405
406 case TUP(PCEP_ERRT_BRPC_PROC_COMPLETION_ERROR,
407 PCEP_ERRV_BRPC_PROC_NOT_SUPPORTED):
408 return "BRPC_PROC_NOT_SUPPORTED";
409
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";
416
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";
422
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";
434
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";
447
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";
486
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";
508
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";
515
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";
522
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";
530
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";
546
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";
576
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";
583
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";
589
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";
602
603 default:
604 return "UNKNOWN";
605 }
606}
607
608const char *pcep_message_type_name(enum pcep_message_types pcep_message_type)
609{
610 switch (pcep_message_type) {
611
612 case PCEP_TYPE_OPEN:
613 return "OPEN";
614 case PCEP_TYPE_KEEPALIVE:
615 return "KEEPALIVE";
616 case PCEP_TYPE_PCREQ:
617 return "PCREQ";
618 case PCEP_TYPE_PCREP:
619 return "PCREP";
620 case PCEP_TYPE_PCNOTF:
621 return "PCNOTF";
622 case PCEP_TYPE_ERROR:
623 return "ERROR";
624 case PCEP_TYPE_CLOSE:
625 return "CLOSE";
626 case PCEP_TYPE_REPORT:
627 return "REPORT";
628 case PCEP_TYPE_UPDATE:
629 return "UPDATE";
630 case PCEP_TYPE_INITIATE:
631 return "INITIATE";
74971473
JG
632 case PCEP_TYPE_START_TLS:
633 return "START_TLS";
d5dea350 634 case PCEP_TYPE_MAX:
efba0985
SM
635 return "UNKNOWN";
636 }
d5dea350
DS
637
638 assert(!"Reached end of function where we are not expecting to");
efba0985
SM
639}
640
641const char *pcep_object_class_name(enum pcep_object_classes obj_class)
642{
643 switch (obj_class) {
644 case PCEP_OBJ_CLASS_OPEN:
645 return "OPEN";
646 case PCEP_OBJ_CLASS_RP:
647 return "RP";
648 case PCEP_OBJ_CLASS_NOPATH:
649 return "NOPATH";
650 case PCEP_OBJ_CLASS_ENDPOINTS:
651 return "ENDPOINTS";
652 case PCEP_OBJ_CLASS_BANDWIDTH:
653 return "BANDWIDTH";
654 case PCEP_OBJ_CLASS_METRIC:
655 return "METRIC";
656 case PCEP_OBJ_CLASS_ERO:
657 return "ERO";
658 case PCEP_OBJ_CLASS_RRO:
659 return "RRO";
660 case PCEP_OBJ_CLASS_LSPA:
661 return "LSPA";
662 case PCEP_OBJ_CLASS_IRO:
663 return "IRO";
664 case PCEP_OBJ_CLASS_SVEC:
665 return "SVEC";
666 case PCEP_OBJ_CLASS_NOTF:
667 return "NOTF";
668 case PCEP_OBJ_CLASS_ERROR:
669 return "ERROR";
670 case PCEP_OBJ_CLASS_CLOSE:
671 return "CLOSE";
672 case PCEP_OBJ_CLASS_OF:
673 return "OF";
674 case PCEP_OBJ_CLASS_LSP:
675 return "LSP";
676 case PCEP_OBJ_CLASS_SRP:
677 return "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:
687 return "SERVER_IND";
688 case PCEP_OBJ_CLASS_ASSOCIATION:
689 return "ASSOCIATION";
d5dea350 690 case PCEP_OBJ_CLASS_MAX:
efba0985
SM
691 return "UNKNOWN";
692 }
d5dea350
DS
693
694 assert(!"Reached end of function where we are not expecting to");
efba0985
SM
695}
696
697const char *pcep_object_type_name(enum pcep_object_classes obj_class,
698 enum pcep_object_types obj_type)
699{
700 switch (TUP(obj_class, obj_type)) {
701 case TUP(PCEP_OBJ_CLASS_OPEN, PCEP_OBJ_TYPE_OPEN):
702 return "OPEN";
703 case TUP(PCEP_OBJ_CLASS_RP, PCEP_OBJ_TYPE_RP):
704 return "RP";
705 case TUP(PCEP_OBJ_CLASS_NOPATH, PCEP_OBJ_TYPE_NOPATH):
706 return "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):
718 return "METRIC";
719 case TUP(PCEP_OBJ_CLASS_ERO, PCEP_OBJ_TYPE_ERO):
720 return "ERO";
721 case TUP(PCEP_OBJ_CLASS_RRO, PCEP_OBJ_TYPE_RRO):
722 return "RRO";
723 case TUP(PCEP_OBJ_CLASS_LSPA, PCEP_OBJ_TYPE_LSPA):
724 return "LSPA";
725 case TUP(PCEP_OBJ_CLASS_IRO, PCEP_OBJ_TYPE_IRO):
726 return "IRO";
727 case TUP(PCEP_OBJ_CLASS_SVEC, PCEP_OBJ_TYPE_SVEC):
728 return "SVEC";
729 case TUP(PCEP_OBJ_CLASS_NOTF, PCEP_OBJ_TYPE_NOTF):
730 return "NOTF";
731 case TUP(PCEP_OBJ_CLASS_ERROR, PCEP_OBJ_TYPE_ERROR):
732 return "ERROR";
733 case TUP(PCEP_OBJ_CLASS_CLOSE, PCEP_OBJ_TYPE_CLOSE):
734 return "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):
742 return "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):
748 return "OF";
749 default:
750 return "UNKNOWN";
751 }
752}
753
754const char *pcep_lsp_status_name(enum pcep_lsp_operational_status status)
755{
756 switch (status) {
757 case PCEP_LSP_OPERATIONAL_DOWN:
758 return "DOWN";
759 case PCEP_LSP_OPERATIONAL_UP:
760 return "UP";
761 case PCEP_LSP_OPERATIONAL_ACTIVE:
762 return "ACTIVE";
763 case PCEP_LSP_OPERATIONAL_GOING_DOWN:
764 return "GOING_DOWN";
765 case PCEP_LSP_OPERATIONAL_GOING_UP:
766 return "GOING_UP";
efba0985 767 }
d5dea350
DS
768
769 assert(!"Reached end of function where we do not expect to");
efba0985
SM
770}
771
772
773const char *pcep_tlv_type_name(enum pcep_object_tlv_types tlv_type)
774{
775 switch (tlv_type) {
776 case PCEP_OBJ_TLV_TYPE_NO_PATH_VECTOR:
777 return "NO_PATH_VECTOR";
56634922
JG
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";
efba0985
SM
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";
56634922
JG
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:
813 return "UNKNOWN";
814 case PCEP_OBJ_TLV_TYPE_ARBITRARY:
815 return "ARBITRARY";
d5dea350
DS
816 case PCEP_OBJ_TYPE_CISCO_BSID:
817 return "CISCO_BSID";
efba0985 818 }
d5dea350
DS
819
820 assert(!"Reached end of function where we do not expect to");
efba0985
SM
821}
822
823const char *pcep_ro_type_name(enum pcep_ro_subobj_types ro_type)
824{
825 switch (ro_type) {
826
827 case RO_SUBOBJ_TYPE_IPV4:
828 return "IPV4";
829 case RO_SUBOBJ_TYPE_IPV6:
830 return "IPV6";
831 case RO_SUBOBJ_TYPE_LABEL:
832 return "LABEL";
833 case RO_SUBOBJ_TYPE_UNNUM:
834 return "UNNUM";
835 case RO_SUBOBJ_TYPE_ASN:
836 return "ASN";
837 case RO_SUBOBJ_TYPE_SR:
838 return "SR";
d5dea350 839 case RO_SUBOBJ_UNKNOWN:
efba0985
SM
840 return "UNKNOWN";
841 }
d5dea350
DS
842
843 assert(!"Reached end of function where we do not expect to");
efba0985
SM
844}
845
846const char *pcep_nai_type_name(enum pcep_sr_subobj_nai nai_type)
847{
848 switch (nai_type) {
849 case PCEP_SR_SUBOBJ_NAI_ABSENT:
850 return "ABSENT";
851 case PCEP_SR_SUBOBJ_NAI_IPV4_NODE:
852 return "IPV4_NODE";
853 case PCEP_SR_SUBOBJ_NAI_IPV6_NODE:
854 return "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";
d5dea350 863 case PCEP_SR_SUBOBJ_NAI_UNKNOWN:
efba0985
SM
864 return "UNKNOWN";
865 }
d5dea350
DS
866
867 assert(!"Reached end of function where we do not expect to");
efba0985
SM
868}
869
870const char *pcep_metric_type_name(enum pcep_metric_types type)
871{
872 switch (type) {
873 case PCEP_METRIC_IGP:
874 return "IGP";
875 case PCEP_METRIC_TE:
876 return "TE";
877 case PCEP_METRIC_HOP_COUNT:
878 return "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:
888 return "P2MP_IGP";
889 case PCEP_METRIC_P2MP_TE:
890 return "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:
896 return "PATH_DELAY";
897 case PCEP_METRIC_PATH_DELAY_VARIATION:
898 return "PATH_DELAY_VARIATION";
899 case PCEP_METRIC_PATH_LOSS:
900 return "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";
915 default:
916 return "UNKNOWN";
917 }
918}
919
920const char *pcep_nopath_tlv_err_code_name(enum pcep_nopath_tlv_err_codes type)
921{
922 switch (type) {
923 case PCEP_NOPATH_TLV_ERR_NO_TLV:
924 return "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";
931 default:
932 return "UNKNOWN";
933 }
934}
935
936const char *format_objfun_set(uint32_t flags)
937{
938 int i, c;
939 PATHD_FORMAT_INIT();
940 for (i = 1, c = 0; i <= MAX_OBJFUN_TYPE; i++) {
941 if (CHECK_FLAG(flags, i)) {
942 if (c > 0)
943 PATHD_FORMAT(", %s", objfun_type_name(i));
944 else
945 PATHD_FORMAT("%s", objfun_type_name(i));
946 c++;
947 }
948 }
949 return PATHD_FORMAT_FINI();
950}
951
952
953const char *format_pcc_opts(struct pcc_opts *opts)
954{
955 PATHD_FORMAT_INIT();
956 _format_pcc_opts(0, opts);
957 return PATHD_FORMAT_FINI();
958}
959
960const char *format_pcc_state(struct pcc_state *state)
961{
962 PATHD_FORMAT_INIT();
963 _format_pcc_state(0, state);
964 return PATHD_FORMAT_FINI();
965}
966
967const char *format_ctrl_state(struct ctrl_state *state)
968{
969 PATHD_FORMAT_INIT();
970 _format_ctrl_state(0, state);
971 return PATHD_FORMAT_FINI();
972}
973
974const char *format_path(struct path *path)
975{
976 PATHD_FORMAT_INIT();
977 _format_path(0, path);
978 return PATHD_FORMAT_FINI();
979}
980
981const char *format_pcep_event(pcep_event *event)
982{
983 PATHD_FORMAT_INIT();
984 _format_pcep_event(0, event);
985 return PATHD_FORMAT_FINI();
986}
987
988const char *format_pcep_message(struct pcep_message *msg)
989{
990 PATHD_FORMAT_INIT();
991 _format_pcep_message(0, msg);
992 return PATHD_FORMAT_FINI();
993}
994
efba0985
SM
995void _format_pcc_opts(int ps, struct pcc_opts *opts)
996{
997 if (opts == NULL) {
998 PATHD_FORMAT("NULL\n");
999 } else {
1000 int ps2 = ps + DEBUG_IDENT_SIZE;
1001 PATHD_FORMAT("\n");
1002 if (IS_IPADDR_V4(&opts->addr)) {
1003 PATHD_FORMAT("%*saddr_v4: %pI4\n", ps2, "",
1004 &opts->addr.ipaddr_v4);
1005 } else {
1006 PATHD_FORMAT("%*saddr_v4: undefined", ps2, "");
1007 }
1008 if (IS_IPADDR_V6(&opts->addr)) {
1009 PATHD_FORMAT("%*saddr_v6: %pI6\n", ps2, "",
1010 &opts->addr.ipaddr_v6);
1011 } else {
1012 PATHD_FORMAT("%*saddr_v6: undefined", ps2, "");
1013 }
1014 PATHD_FORMAT("%*sport: %i\n", ps2, "", opts->port);
1015 PATHD_FORMAT("%*smsd: %i\n", ps2, "", opts->msd);
1016 }
1017}
1018
1019void _format_pce_opts(int ps, struct pce_opts *opts)
1020{
1021 if (opts == NULL) {
1022 PATHD_FORMAT("NULL\n");
1023 } else {
1024 int ps2 = ps + DEBUG_IDENT_SIZE;
1025 PATHD_FORMAT("\n");
1026 if (IS_IPADDR_V6(&opts->addr)) {
1027 PATHD_FORMAT("%*saddr: %pI6\n", ps2, "",
1028 &opts->addr.ipaddr_v6);
1029 } else {
1030 PATHD_FORMAT("%*saddr: %pI4\n", ps2, "",
1031 &opts->addr.ipaddr_v4);
1032 }
1033 PATHD_FORMAT("%*sport: %i\n", ps2, "", opts->port);
1034 }
1035}
1036
1037void _format_pcc_caps(int ps, struct pcep_caps *caps)
1038{
1039 int ps2 = ps + DEBUG_IDENT_SIZE;
1040 PATHD_FORMAT("\n");
1041 PATHD_FORMAT("%*sis_stateful: %d\n", ps2, "", caps->is_stateful);
1042}
1043
1044void _format_pcc_state(int ps, struct pcc_state *state)
1045{
1046 if (state == NULL) {
1047 PATHD_FORMAT("NULL\n");
1048 } else {
1049 int ps2 = ps + DEBUG_IDENT_SIZE;
1050 PATHD_FORMAT("\n");
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, "");
1059 } else {
1060 PATHD_FORMAT("%*ssess: <PCC SESSION %p>\n", ps2, "",
1061 state->sess);
1062 }
1063 PATHD_FORMAT("%*scaps: ", ps2, "");
1064 _format_pcc_caps(ps2, &state->caps);
1065 }
1066}
1067
1068void _format_ctrl_state(int ps, struct ctrl_state *state)
1069{
1070 if (state == NULL) {
1071 PATHD_FORMAT("NULL\n");
1072 } else {
1073 int i;
1074 int ps2 = ps + DEBUG_IDENT_SIZE;
1075 int ps3 = ps2 + DEBUG_IDENT_SIZE;
1076 PATHD_FORMAT("\n");
1077 if (state->main == NULL) {
1078 PATHD_FORMAT("%*smain: NULL\n", ps2, "");
1079 } else {
1080 PATHD_FORMAT("%*smain: <THREAD MASTER %p>\n", ps2, "",
1081 state->main);
1082 }
1083 if (state->self == NULL) {
1084 PATHD_FORMAT("%*sself: NULL\n", ps2, "");
1085 } else {
1086 PATHD_FORMAT("%*sself: <THREAD MASTER %p>\n", ps2, "",
1087 state->self);
1088 }
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]);
1095 }
1096 }
1097 }
1098}
1099
1100void _format_path(int ps, struct path *path)
1101{
1102 if (path == NULL) {
1103 PATHD_FORMAT("NULL\n");
1104 } else {
1105 int ps2 = ps + DEBUG_IDENT_SIZE;
1106 int ps3 = ps2 + DEBUG_IDENT_SIZE;
1107 PATHD_FORMAT("\n");
1108 PATHD_FORMAT("%*snbkey: \n", ps2, "");
1109 PATHD_FORMAT("%*scolor: %u\n", ps3, "", path->nbkey.color);
1110 switch (path->nbkey.endpoint.ipa_type) {
1111 case IPADDR_V4:
1112 PATHD_FORMAT("%*sendpoint: %pI4\n", ps3, "",
1113 &path->nbkey.endpoint.ipaddr_v4);
1114 break;
1115 case IPADDR_V6:
1116 PATHD_FORMAT("%*sendpoint: %pI6\n", ps3, "",
1117 &path->nbkey.endpoint.ipaddr_v6);
1118 break;
d5dea350 1119 case IPADDR_NONE:
efba0985
SM
1120 PATHD_FORMAT("%*sendpoint: NONE\n", ps3, "");
1121 break;
1122 }
1123 PATHD_FORMAT("%*spreference: %u\n", ps3, "",
1124 path->nbkey.preference);
1125
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);
1132 } else {
1133 PATHD_FORMAT("%*ssender: UNDEFINED\n", ps2, "");
1134 }
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);
1141 } else {
1142 PATHD_FORMAT("%*spcc_addr: UNDEFINED\n", ps2, "");
1143 }
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, "",
1153 path->originator);
1154 } else {
1155 PATHD_FORMAT("%*soriginator: UNDEFINED\n", ps2, "");
1156 }
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, "");
1162 } else {
1163 PATHD_FORMAT("%*sname: %s\n", ps2, "", path->name);
1164 }
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, "",
1172 path->was_created);
1173 PATHD_FORMAT("%*swas_removed: %u\n", ps2, "",
1174 path->was_removed);
1175 PATHD_FORMAT("%*sis_synching: %u\n", ps2, "",
1176 path->is_synching);
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, "",
1185 path->bandwidth);
1186 }
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),
1194 path->pcc_objfun);
1195 }
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),
1201 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]);
1214 }
1215
1216 if (path->first_hop == NULL) {
1217 PATHD_FORMAT("%*shops: []\n", ps2, "");
1218 } else {
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);
1224 }
1225 }
1226 if (path->first_metric == NULL) {
1227 PATHD_FORMAT("%*smetrics: []\n", ps2, "");
1228 } else {
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);
1234 }
1235 }
1236 }
1237}
1238
1239void _format_path_metric(int ps, struct path_metric *metric)
1240{
1241 PATHD_FORMAT("type: %s (%u)\n", pcep_metric_type_name(metric->type),
1242 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);
1247}
1248
1249void _format_path_hop(int ps, struct path_hop *hop)
1250{
1251 PATHD_FORMAT("is_loose: %u\n", hop->is_loose);
1252 PATHD_FORMAT("%*shas_sid: %u\n", ps, "", hop->has_sid);
1253
1254 if (hop->has_sid) {
1255 PATHD_FORMAT("%*sis_mpls: %u\n", ps, "", hop->is_mpls);
1256 if (hop->is_mpls) {
1257 PATHD_FORMAT("%*shas_attribs: %u\n", ps, "",
1258 hop->has_attribs);
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, "",
1267 hop->sid.mpls.ttl);
1268 }
1269 } else {
1270 PATHD_FORMAT("%*sSID: %u\n", ps, "", hop->sid.value);
1271 }
1272 }
1273
1274 PATHD_FORMAT("%*shas_nai: %u\n", ps, "", hop->has_nai);
1275 if (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);
1282 break;
1283 case PCEP_SR_SUBOBJ_NAI_IPV6_NODE:
1284 PATHD_FORMAT("%*sNAI: %pI6\n", ps, "",
1285 &hop->nai.local_addr.ipaddr_v6);
1286 break;
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);
1291 break;
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);
1296 break;
1297 case PCEP_SR_SUBOBJ_NAI_UNNUMBERED_IPV4_ADJACENCY:
4d39e496 1298 PATHD_FORMAT("%*sNAI: %pI6(%u)/%pI6(%u)\n", ps, "",
efba0985
SM
1299 &hop->nai.local_addr.ipaddr_v6,
1300 hop->nai.local_iface,
1301 &hop->nai.remote_addr.ipaddr_v6,
1302 hop->nai.remote_iface);
1303 break;
d5dea350
DS
1304 case PCEP_SR_SUBOBJ_NAI_ABSENT:
1305 case PCEP_SR_SUBOBJ_NAI_LINK_LOCAL_IPV6_ADJACENCY:
1306 case PCEP_SR_SUBOBJ_NAI_UNKNOWN:
efba0985
SM
1307 PATHD_FORMAT("%*sNAI: UNSUPPORTED\n", ps, "");
1308 break;
1309 }
1310 }
1311}
1312
1313void _format_pcep_event(int ps, pcep_event *event)
1314{
1315 if (event == NULL) {
1316 PATHD_FORMAT("NULL\n");
1317 } else {
1318 int ps2 = ps + DEBUG_IDENT_SIZE;
1319 PATHD_FORMAT("\n");
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, "");
1326 } else {
1327 PATHD_FORMAT("%*ssession: <PCC SESSION %p>\n", ps2, "",
1328 event->session);
1329 }
1330 PATHD_FORMAT("%*smessage: ", ps2, "");
1331 _format_pcep_message(ps2, event->message);
1332 }
1333}
1334
1335void _format_pcep_message(int ps, struct pcep_message *msg)
1336{
1337 if (msg == NULL) {
1338 PATHD_FORMAT("NULL\n");
1339 } else {
1340 int ps2 = ps + DEBUG_IDENT_SIZE;
1341 PATHD_FORMAT("\n");
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);
1349 }
1350}
1351
1352void _format_pcep_objects(int ps, double_linked_list *objs)
1353{
1354 if (objs == NULL) {
1355 PATHD_FORMAT("NULL\n");
1356 } else {
1357 double_linked_list_node *node;
1358 int ps2 = ps + DEBUG_IDENT_SIZE;
1359 int i;
1360
1361 if (objs->num_entries == 0) {
1362 PATHD_FORMAT("[]\n");
1363 return;
1364 }
1365
1366 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);
1373 }
1374 }
1375}
1376
1377void _format_pcep_object(int ps, struct pcep_object_header *obj)
1378{
1379 if (obj == NULL) {
1380 PATHD_FORMAT("NULL\n");
1381 } else {
1382 PATHD_FORMAT("object_class: %s (%u)\n",
1383 pcep_object_class_name(obj->object_class),
1384 obj->object_class);
1385 PATHD_FORMAT("%*sobject_type: %s (%u)\n", ps, "",
1386 pcep_object_type_name(obj->object_class,
1387 obj->object_type),
1388 obj->object_type);
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);
1393 }
1394}
1395
1396void _format_pcep_object_details(int ps, struct pcep_object_header *obj)
1397{
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);
1401 break;
1402 case TUP(PCEP_OBJ_CLASS_OPEN, PCEP_OBJ_TYPE_OPEN):
1403 _format_pcep_object_open(ps, (struct pcep_object_open *)obj);
1404 break;
1405 case TUP(PCEP_OBJ_CLASS_RP, PCEP_OBJ_TYPE_RP):
1406 _format_pcep_object_rp(ps, (struct pcep_object_rp *)obj);
1407 break;
1408 case TUP(PCEP_OBJ_CLASS_SRP, PCEP_OBJ_TYPE_SRP):
1409 _format_pcep_object_srp(ps, (struct pcep_object_srp *)obj);
1410 break;
1411 case TUP(PCEP_OBJ_CLASS_LSP, PCEP_OBJ_TYPE_LSP):
1412 _format_pcep_object_lsp(ps, (struct pcep_object_lsp *)obj);
1413 break;
1414 case TUP(PCEP_OBJ_CLASS_LSPA, PCEP_OBJ_TYPE_LSPA):
1415 _format_pcep_object_lspa(ps, (struct pcep_object_lspa *)obj);
1416 break;
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);
1420 break;
1421 case TUP(PCEP_OBJ_CLASS_ERO, PCEP_OBJ_TYPE_ERO):
1422 _format_pcep_object_ro(ps, (struct pcep_object_ro *)obj);
1423 break;
1424 case TUP(PCEP_OBJ_CLASS_METRIC, PCEP_OBJ_TYPE_METRIC):
1425 _format_pcep_object_metric(ps,
1426 (struct pcep_object_metric *)obj);
1427 break;
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);
1432 break;
1433 case TUP(PCEP_OBJ_CLASS_NOPATH, PCEP_OBJ_TYPE_NOPATH):
1434 _format_pcep_object_nopath(ps,
1435 (struct pcep_object_nopath *)obj);
1436 break;
1437 case TUP(PCEP_OBJ_CLASS_OF, PCEP_OBJ_TYPE_OF):
1438 _format_pcep_object_objfun(
1439 ps, (struct pcep_object_objective_function *)obj);
1440 break;
1441 default:
1442 PATHD_FORMAT("%*s...\n", ps, "");
1443 break;
1444 }
1445}
1446
1447void _format_pcep_object_error(int ps, struct pcep_object_error *obj)
1448{
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),
1453 obj->error_value);
1454}
1455
1456
1457void _format_pcep_object_open(int ps, struct pcep_object_open *obj)
1458{
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);
1463}
1464
1465void _format_pcep_object_rp(int ps, struct pcep_object_rp *obj)
1466{
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);
1475}
1476
1477
1478void _format_pcep_object_srp(int ps, struct pcep_object_srp *obj)
1479{
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);
1482}
1483
1484void _format_pcep_object_lsp(int ps, struct pcep_object_lsp *obj)
1485{
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);
1494}
1495
1496void _format_pcep_object_lspa(int ps, struct pcep_object_lspa *obj)
1497{
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);
1509}
1510
1511void _format_pcep_object_ipv4_endpoint(int ps,
1512 struct pcep_object_endpoints_ipv4 *obj)
1513{
1514 PATHD_FORMAT("%*ssrc_ipv4: %pI4\n", ps, "", &obj->src_ipv4);
1515 PATHD_FORMAT("%*sdst_ipv4: %pI4\n", ps, "", &obj->dst_ipv4);
1516}
1517
1518void _format_pcep_object_metric(int ps, struct pcep_object_metric *obj)
1519{
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);
1525}
1526
1527void _format_pcep_object_bandwidth(int ps, struct pcep_object_bandwidth *obj)
1528{
1529 PATHD_FORMAT("%*sbandwidth: %f\n", ps, "", obj->bandwidth);
1530}
1531
1532void _format_pcep_object_nopath(int ps, struct pcep_object_nopath *obj)
1533{
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),
1538 obj->err_code);
1539}
1540
1541void _format_pcep_object_objfun(int ps,
1542 struct pcep_object_objective_function *obj)
1543{
1544 PATHD_FORMAT("%*sof_code: %s (%u)\n", ps, "",
1545 objfun_type_name(obj->of_code), obj->of_code);
1546}
1547
1548void _format_pcep_object_ro(int ps, struct pcep_object_ro *obj)
1549{
1550 double_linked_list *obj_list = obj->sub_objects;
1551 double_linked_list_node *node;
1552 struct pcep_object_ro_subobj *sub_obj;
1553
1554 int ps2 = ps + DEBUG_IDENT_SIZE;
1555 int i;
1556
1557 if ((obj_list == NULL) || (obj_list->num_entries == 0)) {
1558 PATHD_FORMAT("%*ssub_objects: []\n", ps, "");
1559 return;
1560 }
1561
1562 PATHD_FORMAT("%*ssub_objects:\n", ps, "");
1563
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);
1573 }
1574}
1575
1576void _format_pcep_object_ro_details(int ps, struct pcep_object_ro_subobj *ro)
1577{
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);
1582 break;
1583 case RO_SUBOBJ_TYPE_SR:
1584 _format_pcep_object_ro_sr(ps, (struct pcep_ro_subobj_sr *)ro);
1585 break;
d5dea350
DS
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:
efba0985
SM
1591 PATHD_FORMAT("%*s...\n", ps, "");
1592 break;
1593 }
1594}
1595
1596void _format_pcep_object_ro_ipv4(int ps, struct pcep_ro_subobj_ipv4 *obj)
1597{
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);
1602}
1603
1604void _format_pcep_object_ro_sr(int ps, struct pcep_ro_subobj_sr *obj)
1605{
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);
1612
1613 if (!obj->flag_s) {
1614 PATHD_FORMAT("%*sSID: %u\n", ps, "", obj->sid);
1615 if (obj->flag_m) {
1616 PATHD_FORMAT("%*slabel: %u\n", ps, "",
1617 GET_SR_ERO_SID_LABEL(obj->sid));
1618 if (obj->flag_c) {
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));
1625 }
1626 }
1627 }
1628
1629 if (!obj->flag_f) {
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;
1635 assert(n != NULL);
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);
1641 break;
1642 case PCEP_SR_SUBOBJ_NAI_IPV6_NODE:
1643 laddr6 = (struct in6_addr *)n->data;
1644 PATHD_FORMAT("%*sNAI: %pI6\n", ps, "", laddr6);
1645 break;
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,
1652 raddr4);
1653 break;
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,
1660 raddr6);
1661 break;
1662 case PCEP_SR_SUBOBJ_NAI_UNNUMBERED_IPV4_ADJACENCY:
1663 laddr4 = (struct in_addr *)n->data;
1664 n = n->next_node;
1665 assert(n != NULL);
1666 assert(n->data != NULL);
1667 liface = (uint32_t *)n->data;
1668 n = n->next_node;
1669 assert(n != NULL);
1670 assert(n->data != NULL);
1671 raddr4 = (struct in_addr *)n->data;
1672 assert(n != NULL);
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);
1677 break;
d5dea350
DS
1678 case PCEP_SR_SUBOBJ_NAI_ABSENT:
1679 case PCEP_SR_SUBOBJ_NAI_LINK_LOCAL_IPV6_ADJACENCY:
1680 case PCEP_SR_SUBOBJ_NAI_UNKNOWN:
efba0985
SM
1681 PATHD_FORMAT("%*sNAI: UNSUPPORTED\n", ps, "");
1682 break;
1683 }
1684 }
1685}
1686
1687void _format_pcep_object_tlvs(int ps, struct pcep_object_header *obj)
1688{
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;
1693 int i = 0;
1694
1695 if (tlv_list == NULL)
1696 return;
1697 if (tlv_list->num_entries == 0) {
1698 PATHD_FORMAT("%*stlvs: []\n", ps, "");
1699 return;
1700 }
1701
1702 PATHD_FORMAT("%*stlvs:\n", ps, "");
1703
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);
1709 }
1710}
1711
1712void _format_pcep_object_tlv(int ps, struct pcep_object_tlv_header *tlv_header)
1713{
1714 PATHD_FORMAT("type: %s (%u)\n", pcep_tlv_type_name(tlv_header->type),
1715 tlv_header->type);
1716 _format_pcep_object_tlv_details(ps, tlv_header);
1717}
1718
1719void _format_pcep_object_tlv_details(int ps,
1720 struct pcep_object_tlv_header *tlv_header)
1721{
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 *)
1726 tlv_header);
1727 break;
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 *)
1731 tlv_header);
1732 break;
1733 case PCEP_OBJ_TLV_TYPE_SR_PCE_CAPABILITY:
1734 _format_pcep_object_tlv_sr_pce_capability(
1735 ps,
1736 (struct pcep_object_tlv_sr_pce_capability *)tlv_header);
1737 break;
1738 case PCEP_OBJ_TLV_TYPE_PATH_SETUP_TYPE:
1739 _format_pcep_object_tlv_path_setup_type(
1740 ps,
1741 (struct pcep_object_tlv_path_setup_type *)tlv_header);
1742 break;
d5dea350
DS
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:
efba0985
SM
1760 PATHD_FORMAT("%*s...\n", ps, "");
1761 break;
1762 }
1763}
1764
1765void _format_pcep_object_tlv_symbolic_path_name(
1766 int ps, struct pcep_object_tlv_symbolic_path_name *tlv)
1767{
1768 PATHD_FORMAT("%*ssymbolic_path_name: %.*s\n", ps, "",
1769 tlv->symbolic_path_name_length, tlv->symbolic_path_name);
1770}
1771
1772void _format_pcep_object_tlv_stateful_pce_capability(
1773 int ps, struct pcep_object_tlv_stateful_pce_capability *tlv)
1774{
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);
1787}
1788
1789void _format_pcep_object_tlv_sr_pce_capability(
1790 int ps, struct pcep_object_tlv_sr_pce_capability *tlv)
1791{
1792
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);
1796}
1797
1798void _format_pcep_object_tlv_path_setup_type(
1799 int ps, struct pcep_object_tlv_path_setup_type *tlv)
1800{
1801 PATHD_FORMAT("%*spath_setup_type: %u\n", ps, "", tlv->path_setup_type);
1802}