diff --git a/doc/user/pathd.rst b/doc/user/pathd.rst index f0b76f10b7..ec107fbe47 100644 --- a/doc/user/pathd.rst +++ b/doc/user/pathd.rst @@ -175,7 +175,7 @@ controller and obtain those by means of the PCEP protocol. .. image:: images/pathd_initiated_multi.png Starting -============= +======== Default configuration file for *pathd* is :file:`pathd.conf`. The typical location of :file:`pathd.conf` is |INSTALL_PREFIX_ETC|/pathd.conf. @@ -480,6 +480,12 @@ Configuration Commands Specify a peer and its precedence in a PCC definition. +Debugging +--------- + +.. clicmd:: debug pathd policy + + Enable or disable Pathd policy information. Introspection Commands ---------------------- diff --git a/lib/ipaddr.h b/lib/ipaddr.h index d7ab358afe..43b3028200 100644 --- a/lib/ipaddr.h +++ b/lib/ipaddr.h @@ -61,6 +61,8 @@ struct ipaddr { #define IPADDRSZ(p) \ (IS_IPADDR_V4((p)) ? sizeof(struct in_addr) : sizeof(struct in6_addr)) +#define IPADDR_STRING_SIZE 46 + static inline int ipaddr_family(const struct ipaddr *ip) { switch (ip->ipa_type) { diff --git a/pathd/path_cli.c b/pathd/path_cli.c index a6540cc84a..b88453c68f 100644 --- a/pathd/path_cli.c +++ b/pathd/path_cli.c @@ -126,7 +126,7 @@ DEFPY(show_srte_policy, ttable_rowseps(tt, 0, BOTTOM, true, '-'); RB_FOREACH (policy, srte_policy_head, &srte_policies) { - char endpoint[46]; + char endpoint[ENDPOINT_STR_LENGTH]; char binding_sid[16] = "-"; ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint)); @@ -173,7 +173,7 @@ DEFPY(show_srte_policy_detail, vty_out(vty, "\n"); RB_FOREACH (policy, srte_policy_head, &srte_policies) { struct srte_candidate *candidate; - char endpoint[46]; + char endpoint[ENDPOINT_STR_LENGTH]; char binding_sid[16] = "-"; char *segment_list_info; static char undefined_info[] = "(undefined)"; @@ -1091,8 +1091,25 @@ DEFPY_NOSH(show_debugging_pathd, show_debugging_pathd_cmd, "pathd module debugging\n") { + vty_out(vty, "Path debugging status:\n"); + cmd_show_lib_debugs(vty); /* nothing to do here */ + path_ted_show_debugging(vty); + path_policy_show_debugging(vty); + return CMD_SUCCESS; +} + +DEFPY(debug_path_policy, debug_path_policy_cmd, "[no] debug pathd policy", + NO_STR DEBUG_STR + "path debugging\n" + "policy debugging\n") +{ + uint32_t mode = DEBUG_NODE2MODE(vty->node); + bool no_debug = no; + + DEBUG_MODE_SET(&path_policy_debug, mode, !no); + DEBUG_FLAGS_SET(&path_policy_debug, PATH_POLICY_DEBUG_BASIC, !no_debug); return CMD_SUCCESS; } @@ -1291,8 +1308,34 @@ int config_write_segment_routing(struct vty *vty) return 1; } +static int path_policy_cli_debug_config_write(struct vty *vty) +{ + if (DEBUG_MODE_CHECK(&path_policy_debug, DEBUG_MODE_CONF)) { + if (DEBUG_FLAGS_CHECK(&path_policy_debug, + PATH_POLICY_DEBUG_BASIC)) + vty_out(vty, "debug pathd policy\n"); + return 1; + } + return 0; +} + +static int path_policy_cli_debug_set_all(uint32_t flags, bool set) +{ + DEBUG_FLAGS_SET(&path_policy_debug, flags, set); + + /* If all modes have been turned off, don't preserve options. */ + if (!DEBUG_MODE_CHECK(&path_policy_debug, DEBUG_MODE_ALL)) + DEBUG_CLEAR(&path_policy_debug); + + return 0; +} + void path_cli_init(void) { + hook_register(nb_client_debug_config_write, + path_policy_cli_debug_config_write); + hook_register(nb_client_debug_set_all, path_policy_cli_debug_set_all); + install_node(&segment_routing_node); install_node(&sr_traffic_eng_node); install_node(&srte_segment_list_node); @@ -1308,6 +1351,9 @@ void path_cli_init(void) install_element(ENABLE_NODE, &show_srte_policy_cmd); install_element(ENABLE_NODE, &show_srte_policy_detail_cmd); + install_element(ENABLE_NODE, &debug_path_policy_cmd); + install_element(CONFIG_NODE, &debug_path_policy_cmd); + install_element(CONFIG_NODE, &segment_routing_cmd); install_element(SEGMENT_ROUTING_NODE, &sr_traffic_eng_cmd); install_element(SR_TRAFFIC_ENG_NODE, &srte_segment_list_cmd); diff --git a/pathd/path_ted.c b/pathd/path_ted.c index 68748af53e..5fc8a1f032 100644 --- a/pathd/path_ted.c +++ b/pathd/path_ted.c @@ -488,6 +488,12 @@ int path_ted_cli_debug_config_write(struct vty *vty) return 0; } +void path_ted_show_debugging(struct vty *vty) +{ + if (DEBUG_FLAGS_CHECK(&ted_state_g.dbg, PATH_TED_DEBUG_BASIC)) + vty_out(vty, " Path TED debugging is on\n"); +} + int path_ted_cli_debug_set_all(uint32_t flags, bool set) { DEBUG_FLAGS_SET(&ted_state_g.dbg, flags, set); diff --git a/pathd/path_ted.h b/pathd/path_ted.h index c6897b1520..5a0c8eecd3 100644 --- a/pathd/path_ted.h +++ b/pathd/path_ted.h @@ -101,6 +101,7 @@ int path_ted_segment_list_refresh(void); /* TED configuration functions */ uint32_t path_ted_config_write(struct vty *vty); +void path_ted_show_debugging(struct vty *vty); /* TED util functions */ /* clang-format off */ diff --git a/pathd/pathd.c b/pathd/pathd.c index e9d7cc6fc7..167c88aeab 100644 --- a/pathd/pathd.c +++ b/pathd/pathd.c @@ -23,6 +23,8 @@ #include "lib_errors.h" #include "network.h" #include "libfrr.h" +#include +#include #include "pathd/pathd.h" #include "pathd/path_zebra.h" @@ -44,6 +46,17 @@ DEFINE_HOOK(pathd_candidate_updated, (struct srte_candidate * candidate), DEFINE_HOOK(pathd_candidate_removed, (struct srte_candidate * candidate), (candidate)); +struct debug path_policy_debug; + +#define PATH_POLICY_DEBUG(fmt, ...) \ + do { \ + if (DEBUG_FLAGS_CHECK(&path_policy_debug, \ + PATH_POLICY_DEBUG_BASIC)) \ + DEBUGD(&path_policy_debug, "policy: " fmt, \ + ##__VA_ARGS__); \ + } while (0) + + static void trigger_pathd_candidate_created(struct srte_candidate *candidate); static void trigger_pathd_candidate_created_timer(struct thread *thread); static void trigger_pathd_candidate_updated(struct srte_candidate *candidate); @@ -97,6 +110,20 @@ RB_GENERATE(srte_policy_head, srte_policy, entry, srte_policy_compare) struct srte_policy_head srte_policies = RB_INITIALIZER(&srte_policies); +static void srte_policy_status_log(struct srte_policy *policy) +{ + char endpoint[ENDPOINT_STR_LENGTH]; + + ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint)); + if (policy->status == SRTE_POLICY_STATUS_DOWN) { + PATH_POLICY_DEBUG("SR-TE(%s, %u): policy is DOWN", endpoint, + policy->color); + } else if (policy->status == SRTE_POLICY_STATUS_UP) { + PATH_POLICY_DEBUG("SR-TE(%s, %u): policy is UP", endpoint, + policy->color); + } +} + /** * Adds a segment list to pathd. * @@ -531,6 +558,10 @@ void srte_apply_changes(void) RB_FOREACH_SAFE (policy, srte_policy_head, &srte_policies, safe_pol) { if (CHECK_FLAG(policy->flags, F_POLICY_DELETED)) { + if (policy->status != SRTE_POLICY_STATUS_DOWN) { + policy->status = SRTE_POLICY_STATUS_DOWN; + srte_policy_status_log(policy); + } srte_policy_del(policy); continue; } @@ -565,7 +596,7 @@ void srte_policy_apply_changes(struct srte_policy *policy) struct srte_candidate *candidate, *safe; struct srte_candidate *old_best_candidate; struct srte_candidate *new_best_candidate; - char endpoint[46]; + char endpoint[ENDPOINT_STR_LENGTH]; ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint)); @@ -574,8 +605,7 @@ void srte_policy_apply_changes(struct srte_policy *policy) new_best_candidate = srte_policy_best_candidate(policy); if (new_best_candidate != old_best_candidate) { - /* TODO: add debug guard. */ - zlog_debug( + PATH_POLICY_DEBUG( "SR-TE(%s, %u): best candidate changed from %s to %s", endpoint, policy->color, old_best_candidate ? old_best_candidate->name : "none", @@ -617,10 +647,10 @@ void srte_policy_apply_changes(struct srte_policy *policy) F_SEGMENT_LIST_MODIFIED); if (candidate_changed || segment_list_changed) { - /* TODO: add debug guard. */ - zlog_debug("SR-TE(%s, %u): best candidate %s changed", - endpoint, policy->color, - new_best_candidate->name); + PATH_POLICY_DEBUG( + "SR-TE(%s, %u): best candidate %s changed", + endpoint, policy->color, + new_best_candidate->name); path_zebra_add_sr_policy( policy, new_best_candidate->lsp->segment_list); @@ -722,10 +752,10 @@ void srte_candidate_set_bandwidth(struct srte_candidate *candidate, float bandwidth, bool required) { struct srte_policy *policy = candidate->policy; - char endpoint[46]; + char endpoint[ENDPOINT_STR_LENGTH]; ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint)); - zlog_debug( + PATH_POLICY_DEBUG( "SR-TE(%s, %u): candidate %s %sconfig bandwidth set to %f B/s", endpoint, policy->color, candidate->name, required ? "required " : "", bandwidth); @@ -750,11 +780,13 @@ void srte_lsp_set_bandwidth(struct srte_lsp *lsp, float bandwidth, { struct srte_candidate *candidate = lsp->candidate; struct srte_policy *policy = candidate->policy; - char endpoint[46]; + char endpoint[ENDPOINT_STR_LENGTH]; + ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint)); - zlog_debug("SR-TE(%s, %u): candidate %s %slsp bandwidth set to %f B/s", - endpoint, policy->color, candidate->name, - required ? "required" : "", bandwidth); + PATH_POLICY_DEBUG( + "SR-TE(%s, %u): candidate %s %slsp bandwidth set to %f B/s", + endpoint, policy->color, candidate->name, + required ? "required" : "", bandwidth); SET_FLAG(lsp->flags, F_CANDIDATE_HAS_BANDWIDTH); COND_FLAG(lsp->flags, F_CANDIDATE_REQUIRED_BANDWIDTH, required); lsp->bandwidth = bandwidth; @@ -770,10 +802,11 @@ void srte_lsp_set_bandwidth(struct srte_lsp *lsp, float bandwidth, void srte_candidate_unset_bandwidth(struct srte_candidate *candidate) { struct srte_policy *policy = candidate->policy; - char endpoint[46]; + char endpoint[ENDPOINT_STR_LENGTH]; + ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint)); - zlog_debug("SR-TE(%s, %u): candidate %s config bandwidth unset", - endpoint, policy->color, candidate->name); + PATH_POLICY_DEBUG("SR-TE(%s, %u): candidate %s config bandwidth unset", + endpoint, policy->color, candidate->name); UNSET_FLAG(candidate->flags, F_CANDIDATE_HAS_BANDWIDTH); UNSET_FLAG(candidate->flags, F_CANDIDATE_REQUIRED_BANDWIDTH); candidate->bandwidth = 0; @@ -792,10 +825,11 @@ void srte_lsp_unset_bandwidth(struct srte_lsp *lsp) { struct srte_candidate *candidate = lsp->candidate; struct srte_policy *policy = candidate->policy; - char endpoint[46]; + char endpoint[ENDPOINT_STR_LENGTH]; + ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint)); - zlog_debug("SR-TE(%s, %u): candidate %s lsp bandwidth unset", endpoint, - policy->color, candidate->name); + PATH_POLICY_DEBUG("SR-TE(%s, %u): candidate %s lsp bandwidth unset", + endpoint, policy->color, candidate->name); UNSET_FLAG(lsp->flags, F_CANDIDATE_HAS_BANDWIDTH); UNSET_FLAG(lsp->flags, F_CANDIDATE_REQUIRED_BANDWIDTH); SET_FLAG(candidate->flags, F_CANDIDATE_MODIFIED); @@ -820,9 +854,10 @@ void srte_candidate_set_metric(struct srte_candidate *candidate, bool is_computed) { struct srte_policy *policy = candidate->policy; - char endpoint[46]; + char endpoint[ENDPOINT_STR_LENGTH]; + ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint)); - zlog_debug( + PATH_POLICY_DEBUG( "SR-TE(%s, %u): candidate %s %sconfig metric %s (%u) set to %f (is-bound: %s; is_computed: %s)", endpoint, policy->color, candidate->name, required ? "required " : "", srte_candidate_metric_name(type), @@ -854,9 +889,10 @@ void srte_lsp_set_metric(struct srte_lsp *lsp, { struct srte_candidate *candidate = lsp->candidate; struct srte_policy *policy = candidate->policy; - char endpoint[46]; + char endpoint[ENDPOINT_STR_LENGTH]; + ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint)); - zlog_debug( + PATH_POLICY_DEBUG( "SR-TE(%s, %u): candidate %s %slsp metric %s (%u) set to %f (is-bound: %s; is_computed: %s)", endpoint, policy->color, candidate->name, required ? "required " : "", srte_candidate_metric_name(type), @@ -889,11 +925,13 @@ void srte_candidate_unset_metric(struct srte_candidate *candidate, enum srte_candidate_metric_type type) { struct srte_policy *policy = candidate->policy; - char endpoint[46]; + char endpoint[ENDPOINT_STR_LENGTH]; + ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint)); - zlog_debug("SR-TE(%s, %u): candidate %s config metric %s (%u) unset", - endpoint, policy->color, candidate->name, - srte_candidate_metric_name(type), type); + PATH_POLICY_DEBUG( + "SR-TE(%s, %u): candidate %s config metric %s (%u) unset", + endpoint, policy->color, candidate->name, + srte_candidate_metric_name(type), type); assert((type > 0) && (type <= MAX_METRIC_TYPE)); srte_unset_metric(&candidate->metrics[type - 1]); srte_lsp_unset_metric(candidate->lsp, type); @@ -913,11 +951,13 @@ void srte_lsp_unset_metric(struct srte_lsp *lsp, { struct srte_candidate *candidate = lsp->candidate; struct srte_policy *policy = candidate->policy; - char endpoint[46]; + char endpoint[ENDPOINT_STR_LENGTH]; + ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint)); - zlog_debug("SR-TE(%s, %u): candidate %s lsp metric %s (%u) unset", - endpoint, policy->color, candidate->name, - srte_candidate_metric_name(type), type); + PATH_POLICY_DEBUG( + "SR-TE(%s, %u): candidate %s lsp metric %s (%u) unset", + endpoint, policy->color, candidate->name, + srte_candidate_metric_name(type), type); assert((type > 0) && (type <= MAX_METRIC_TYPE)); srte_unset_metric(&lsp->metrics[type - 1]); } @@ -941,16 +981,18 @@ void srte_candidate_set_objfun(struct srte_candidate *candidate, bool required, enum objfun_type type) { struct srte_policy *policy = candidate->policy; - char endpoint[46]; + char endpoint[ENDPOINT_STR_LENGTH]; + ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint)); candidate->objfun = type; SET_FLAG(candidate->flags, F_CANDIDATE_HAS_OBJFUN); COND_FLAG(candidate->flags, F_CANDIDATE_REQUIRED_OBJFUN, required); SET_FLAG(candidate->flags, F_CANDIDATE_MODIFIED); - zlog_debug("SR-TE(%s, %u): candidate %s %sobjective function set to %s", - endpoint, policy->color, candidate->name, - required ? "required " : "", objfun_type_name(type)); + PATH_POLICY_DEBUG( + "SR-TE(%s, %u): candidate %s %sobjective function set to %s", + endpoint, policy->color, candidate->name, + required ? "required " : "", objfun_type_name(type)); } /** @@ -961,14 +1003,15 @@ void srte_candidate_set_objfun(struct srte_candidate *candidate, bool required, void srte_candidate_unset_objfun(struct srte_candidate *candidate) { struct srte_policy *policy = candidate->policy; - char endpoint[46]; + char endpoint[ENDPOINT_STR_LENGTH]; + ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint)); UNSET_FLAG(candidate->flags, F_CANDIDATE_HAS_OBJFUN); UNSET_FLAG(candidate->flags, F_CANDIDATE_REQUIRED_OBJFUN); SET_FLAG(candidate->flags, F_CANDIDATE_MODIFIED); candidate->objfun = OBJFUN_UNDEFINED; - zlog_debug( + PATH_POLICY_DEBUG( "SR-TE(%s, %u): candidate %s objective functions preferences unset", endpoint, policy->color, candidate->name); } @@ -1013,7 +1056,8 @@ void srte_candidate_set_affinity_filter(struct srte_candidate *candidate, uint32_t filter) { struct srte_policy *policy = candidate->policy; - char endpoint[46]; + char endpoint[ENDPOINT_STR_LENGTH]; + ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint)); assert(type > AFFINITY_FILTER_UNDEFINED); @@ -1021,7 +1065,7 @@ void srte_candidate_set_affinity_filter(struct srte_candidate *candidate, SET_FLAG(candidate->flags, filter_type_to_flag(type)); SET_FLAG(candidate->flags, F_CANDIDATE_MODIFIED); candidate->affinity_filters[type - 1] = filter; - zlog_debug( + PATH_POLICY_DEBUG( "SR-TE(%s, %u): candidate %s affinity filter %s set to 0x%08x", endpoint, policy->color, candidate->name, filter_type_name(type), filter); @@ -1038,7 +1082,8 @@ void srte_candidate_unset_affinity_filter(struct srte_candidate *candidate, enum affinity_filter_type type) { struct srte_policy *policy = candidate->policy; - char endpoint[46]; + char endpoint[ENDPOINT_STR_LENGTH]; + ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint)); assert(type > AFFINITY_FILTER_UNDEFINED); @@ -1046,9 +1091,10 @@ void srte_candidate_unset_affinity_filter(struct srte_candidate *candidate, UNSET_FLAG(candidate->flags, filter_type_to_flag(type)); SET_FLAG(candidate->flags, F_CANDIDATE_MODIFIED); candidate->affinity_filters[type - 1] = 0; - zlog_debug("SR-TE(%s, %u): candidate %s affinity filter %s unset", - endpoint, policy->color, candidate->name, - filter_type_name(type)); + PATH_POLICY_DEBUG( + "SR-TE(%s, %u): candidate %s affinity filter %s unset", + endpoint, policy->color, candidate->name, + filter_type_name(type)); } /** @@ -1093,10 +1139,11 @@ srte_segment_entry_find(struct srte_segment_list *segment_list, uint32_t index) void srte_candidate_status_update(struct srte_candidate *candidate, int status) { struct srte_policy *policy = candidate->policy; - char endpoint[46]; + char endpoint[ENDPOINT_STR_LENGTH]; + ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint)); - zlog_debug("SR-TE(%s, %u): zebra updated status to %d", endpoint, - policy->color, status); + PATH_POLICY_DEBUG("SR-TE(%s, %u): zebra updated status to %d", endpoint, + policy->color, status); switch (status) { case ZEBRA_SR_POLICY_DOWN: switch (policy->status) { @@ -1109,9 +1156,8 @@ void srte_candidate_status_update(struct srte_candidate *candidate, int status) case SRTE_POLICY_STATUS_DOWN: return; default: - zlog_debug("SR-TE(%s, %u): policy is DOWN", endpoint, - policy->color); policy->status = SRTE_POLICY_STATUS_DOWN; + srte_policy_status_log(policy); break; } break; @@ -1120,9 +1166,8 @@ void srte_candidate_status_update(struct srte_candidate *candidate, int status) case SRTE_POLICY_STATUS_UP: return; default: - zlog_debug("SR-TE(%s, %u): policy is UP", endpoint, - policy->color); policy->status = SRTE_POLICY_STATUS_UP; + srte_policy_status_log(policy); break; } break; @@ -1148,19 +1193,20 @@ void srte_candidate_unset_segment_list(const char *originator, bool force) return; } - zlog_debug("Unset segment lists for originator %s", originator); + PATH_POLICY_DEBUG("Unset segment lists for originator %s", originator); /* Iterate the policies, then iterate each policy's candidate path * to check the candidate path's segment list originator */ struct srte_policy *policy; RB_FOREACH (policy, srte_policy_head, &srte_policies) { - zlog_debug("Unset segment lists checking policy %s", - policy->name); + PATH_POLICY_DEBUG("Unset segment lists checking policy %s", + policy->name); struct srte_candidate *candidate; RB_FOREACH (candidate, srte_candidate_head, &policy->candidate_paths) { - zlog_debug("Unset segment lists checking candidate %s", - candidate->name); + PATH_POLICY_DEBUG( + "Unset segment lists checking candidate %s", + candidate->name); if (candidate->lsp == NULL) { continue; } @@ -1190,8 +1236,8 @@ void srte_candidate_unset_segment_list(const char *originator, bool force) sizeof(segment_list->originator)) == 0 || force) { - zlog_debug("Unset segment list %s", - segment_list->name); + PATH_POLICY_DEBUG("Unset segment list %s", + segment_list->name); SET_FLAG(segment_list->flags, F_SEGMENT_LIST_DELETED); SET_FLAG(candidate->flags, @@ -1222,6 +1268,12 @@ const char *srte_origin2str(enum srte_protocol_origin origin) } } +void path_policy_show_debugging(struct vty *vty) +{ + if (DEBUG_FLAGS_CHECK(&path_policy_debug, PATH_POLICY_DEBUG_BASIC)) + vty_out(vty, " Path policy debugging is on\n"); +} + void pathd_shutdown(void) { path_ted_teardown(); @@ -1347,8 +1399,9 @@ int32_t srte_ted_do_query_type_c(struct srte_segment_entry *entry, zlog_warn(" %s: PATHD-TED: SL: ERROR query C : ted-sid (%d)", __func__, ted_sid); } else { - zlog_debug("%s: PATHD-TED: SL: Success query C : ted-sid (%d)", - __func__, ted_sid); + PATH_TED_DEBUG( + "%s: PATHD-TED: SL: Success query C : ted-sid (%d)", + __func__, ted_sid); } if (CHECK_SID(entry->segment_list->protocol_origin, ted_sid, entry->sid_value)) { @@ -1377,8 +1430,9 @@ int32_t srte_ted_do_query_type_e(struct srte_segment_entry *entry, zlog_warn(" %s: PATHD-TED: SL: ERROR query E : ted-sid (%d)", __func__, ted_sid); } else { - zlog_debug("%s: PATHD-TED: SL: Success query E : ted-sid (%d)", - __func__, ted_sid); + PATH_TED_DEBUG( + "%s: PATHD-TED: SL: Success query E : ted-sid (%d)", + __func__, ted_sid); } if (CHECK_SID(entry->segment_list->protocol_origin, ted_sid, entry->sid_value)) { @@ -1406,8 +1460,8 @@ int32_t srte_ted_do_query_type_f(struct srte_segment_entry *entry, zlog_warn("%s:SL: ERROR query F : ted-sid (%d)", __func__, ted_sid); } else { - zlog_debug("%s:SL: Success query F : ted-sid (%d)", __func__, - ted_sid); + PATH_TED_DEBUG("%s:SL: Success query F : ted-sid (%d)", + __func__, ted_sid); } if (CHECK_SID(entry->segment_list->protocol_origin, ted_sid, entry->sid_value)) { diff --git a/pathd/pathd.h b/pathd/pathd.h index 81d7aa9105..bb2e63c04b 100644 --- a/pathd/pathd.h +++ b/pathd/pathd.h @@ -43,6 +43,10 @@ enum srte_protocol_origin { SRTE_ORIGIN_LOCAL = 3, }; +extern struct debug path_policy_debug; + +#define PATH_POLICY_DEBUG_BASIC 0x01 + enum srte_policy_status { SRTE_POLICY_STATUS_UNKNOWN = 0, SRTE_POLICY_STATUS_DOWN = 1, @@ -326,6 +330,8 @@ struct srte_candidate { RB_HEAD(srte_candidate_head, srte_candidate); RB_PROTOTYPE(srte_candidate_head, srte_candidate, entry, srte_candidate_compare) +#define ENDPOINT_STR_LENGTH IPADDR_STRING_SIZE + struct srte_policy { RB_ENTRY(srte_policy) entry; @@ -444,6 +450,7 @@ void srte_candidate_status_update(struct srte_candidate *candidate, int status); void srte_candidate_unset_segment_list(const char *originator, bool force); const char *srte_origin2str(enum srte_protocol_origin origin); void pathd_shutdown(void); +void path_policy_show_debugging(struct vty *vty); /* path_cli.c */ void path_cli_init(void);