From 3f3e9ce0f834db05c3b18e6aaa6346c5f14706c8 Mon Sep 17 00:00:00 2001 From: squirrelking57 <1248756005hfh@gmail.com> Date: Tue, 26 Mar 2024 20:48:49 +0300 Subject: [PATCH] fix ci test, added ipv6 sr lsp fillibg added command "route_leanking ipv4/ipv6 level's route-map name" in cli according to RFC5302 Signed-off-by: squirrelking57 <1248756005hfh@gmail.com> --- isisd/isis_cli.c | 101 +++++++++++++++++++-------------------- isisd/isis_constants.h | 9 ++-- isisd/isis_lsp.c | 17 ++++++- isisd/isis_nb.c | 104 ++++++++++++++++++++--------------------- isisd/isis_nb_config.c | 20 ++++---- isisd/isis_redist.c | 31 ++++++------ isisd/isisd.c | 6 +-- isisd/isisd.h | 1 + lib/command.h | 4 +- 9 files changed, 152 insertions(+), 141 deletions(-) diff --git a/isisd/isis_cli.c b/isisd/isis_cli.c index 314e7e73dcfd..c91e1fed89f2 100644 --- a/isisd/isis_cli.c +++ b/isisd/isis_cli.c @@ -1426,13 +1426,13 @@ DEFPY_YANG(isis_redistribute, isis_redistribute_cmd, } return nb_cli_apply_changes(vty, - "./redistribute/%s[protocol='%s'][level='%s']", + "./redistribute/%s[protocol='%s'][level='%s']", ip, proto, level); } /* * XPath: /frr-isisd:isis/instance/route_leanking -*/ + */ DEFPY_YANG(isis_leanking, isis_leanking_cmd, "[no] route_leanking $ip" "$level" @@ -1447,6 +1447,7 @@ DEFPY_YANG(isis_leanking, isis_leanking_cmd, "Pointer to route-map entries\n") { char proto[] = "isis"; + if (no) nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL); else { @@ -1459,8 +1460,8 @@ DEFPY_YANG(isis_leanking, isis_leanking_cmd, } return nb_cli_apply_changes(vty, - "./route_leanking/%s[protocol='%s'][level='%s']", - ip, proto, level); + "./route_leanking/%s[protocol='%s'][level='%s']", + ip, proto, level); } /* @@ -1560,36 +1561,36 @@ static void vty_print_redistribute(struct vty *vty, const struct lyd_node *dnode } static void vty_print_route_leanking(struct vty *vty, - const struct lyd_node *dnode, - bool show_defaults, const char *family, - bool table) -{ - const char *level; - const char *protocol = NULL; - const char *routemap = NULL; - uint16_t tableid; - - if (table) { - level = yang_dnode_get_string(dnode, "../level"); - tableid = yang_dnode_get_uint16(dnode, "./table"); - vty_out(vty, " route_leanking %s table %d ", family, tableid); - } else { - protocol = yang_dnode_get_string(dnode, "./protocol"); - if (!table && strmatch(protocol, "table")) - return; - level = yang_dnode_get_string(dnode, "./level"); - vty_out(vty, " route_leanking %s %s ", family, protocol); - } - vty_out(vty, "%s", level); - if (show_defaults || !yang_dnode_is_default(dnode, "./metric")) - vty_out(vty, " metric %s", - yang_dnode_get_string(dnode, "%s", "./metric")); - - if (yang_dnode_exists(dnode, "./route-map")) - routemap = yang_dnode_get_string(dnode, "./route-map"); - if (routemap) - vty_out(vty, " route-map %s", routemap); - vty_out(vty, "\n"); + const struct lyd_node *dnode, + bool show_defaults, const char *family, + bool table) +{ + const char *level; + const char *protocol = NULL; + const char *routemap = NULL; + uint16_t tableid; + + if (table) { + level = yang_dnode_get_string(dnode, "../level"); + tableid = yang_dnode_get_uint16(dnode, "./table"); + vty_out(vty, " route_leanking %s table %d ", family, tableid); + } else { + protocol = yang_dnode_get_string(dnode, "./protocol"); + if (!table && strmatch(protocol, "table")) + return; + level = yang_dnode_get_string(dnode, "./level"); + vty_out(vty, " route_leanking %s %s ", family, protocol); + } + vty_out(vty, "%s", level); + if (show_defaults || !yang_dnode_is_default(dnode, "./metric")) + vty_out(vty, " metric %s", + yang_dnode_get_string(dnode, "%s", "./metric")); + + if (yang_dnode_exists(dnode, "./route-map")) + routemap = yang_dnode_get_string(dnode, "./route-map"); + if (routemap) + vty_out(vty, " route-map %s", routemap); + vty_out(vty, "\n"); } void cli_show_isis_leanking_ipv4(struct vty *vty, const struct lyd_node *dnode, @@ -1874,8 +1875,8 @@ void cli_show_isis_label_blocks(struct vty *vty, const struct lyd_node *dnode, vty_out(vty, " segment-routing global-block %s %s", yang_dnode_get_string(dnode, "./srgb/lower-bound"), yang_dnode_get_string(dnode, "./srgb/upper-bound")); - if (!yang_dnode_is_default(dnode, "./srlb/lower-bound") - || !yang_dnode_is_default(dnode, "./srlb/upper-bound")) + if (!yang_dnode_is_default(dnode, "./srlb/lower-bound") || + !yang_dnode_is_default(dnode, "./srlb/upper-bound")) vty_out(vty, " local-block %s %s", yang_dnode_get_string(dnode, "./srlb/lower-bound"), yang_dnode_get_string(dnode, "./srlb/upper-bound")); @@ -3405,28 +3406,24 @@ DEFPY(isis_lfa_exclude_interface, isis_lfa_exclude_interface_cmd, { if (!level || strmatch(level, "level-1")) { if (no) { - nb_cli_enqueue_change( - vty, - "./frr-isisd:isis/fast-reroute/level-1/lfa/exclude-interface", - NB_OP_DESTROY, ifname); + nb_cli_enqueue_change(vty, + "./frr-isisd:isis/fast-reroute/level-1/lfa/exclude-interface", + NB_OP_DESTROY, ifname); } else { - nb_cli_enqueue_change( - vty, - "./frr-isisd:isis/fast-reroute/level-1/lfa/exclude-interface", - NB_OP_CREATE, ifname); + nb_cli_enqueue_change(vty, + "./frr-isisd:isis/fast-reroute/level-1/lfa/exclude-interface", + NB_OP_CREATE, ifname); } } if (!level || strmatch(level, "level-2")) { if (no) { - nb_cli_enqueue_change( - vty, - "./frr-isisd:isis/fast-reroute/level-2/lfa/exclude-interface", - NB_OP_DESTROY, ifname); + nb_cli_enqueue_change(vty, + "./frr-isisd:isis/fast-reroute/level-2/lfa/exclude-interface", + NB_OP_DESTROY, ifname); } else { - nb_cli_enqueue_change( - vty, - "./frr-isisd:isis/fast-reroute/level-2/lfa/exclude-interface", - NB_OP_CREATE, ifname); + nb_cli_enqueue_change(vty, + "./frr-isisd:isis/fast-reroute/level-2/lfa/exclude-interface", + NB_OP_CREATE, ifname); } } diff --git a/isisd/isis_constants.h b/isisd/isis_constants.h index b55c0f50a2f8..1f5ec0be70a3 100644 --- a/isisd/isis_constants.h +++ b/isisd/isis_constants.h @@ -43,11 +43,10 @@ /* * implementation specific route-leanking values */ - -#define LEVEL2_TO_LEVEL1 4 -#define LEVEL1_TO_LEVEL2 5 -#define LVL_ISIS_LEANKING_1 0 -#define LVL_ISIS_LEANKING_2 1 +#define LEVEL2_TO_LEVEL1 4 +#define LEVEL1_TO_LEVEL2 5 +#define LVL_ISIS_LEANKING_1 0 +#define LVL_ISIS_LEANKING_2 1 /* * Default values * ISO - 10589 Section 7.3.21 - Parameters diff --git a/isisd/isis_lsp.c b/isisd/isis_lsp.c index 11fcb6e92bf5..4ffc5a73d90b 100644 --- a/isisd/isis_lsp.c +++ b/isisd/isis_lsp.c @@ -1034,7 +1034,7 @@ static void lsp_build_ext_reach_ipv6(struct isis_lsp *lsp, } static void lsp_build_leanking_reach(struct isis_lsp *lsp, - struct isis_area *area) + struct isis_area *area) { struct listnode *node; struct prefix_leanking *leanking; @@ -1079,6 +1079,18 @@ static void lsp_build_leanking_reach(struct isis_lsp *lsp, NULL }; + if (area->srdb.enabled) + for (int i = 0; i < SR_ALGORITHM_COUNT; i++) { +#ifndef FABRICD + if (flex_algo_id_valid(i) && + !isis_flex_algo_elected_supported( + i, area)) + continue; +#endif /* ifndef FABRICD */ + pcfgs[i] = isis_sr_cfg_prefix_find( + area, ipv6, i); + } + isis_tlvs_add_ipv6_reach(lsp->tlvs, isis_area_ipv6_topology(area), ipv6, leanking->metric, true, @@ -1491,9 +1503,10 @@ static void lsp_build(struct isis_lsp *lsp, struct isis_area *area) zlog_warn("lsp_area_create: unknown circuit type"); } } - + struct listnode *node_redist; struct isis_leanking *redist; + for (ALL_LIST_ELEMENTS_RO(area->leanking_settings, node_redist, redist)) iteration_in_spftree(area, redist); diff --git a/isisd/isis_nb.c b/isisd/isis_nb.c index 01cbe8774960..7c45b450452c 100644 --- a/isisd/isis_nb.c +++ b/isisd/isis_nb.c @@ -409,50 +409,50 @@ const struct frr_yang_module_info frr_isisd_info = { }, }, { - .xpath = "/frr-isisd:isis/instance/route_leanking/ipv4", - .cbs = { - .apply_finish = leanking_ipv4_apply_finish, - .cli_show = cli_show_isis_leanking_ipv4, - .create = isis_instance_leanking_ipv4_create, - .destroy = isis_instance_leanking_ipv4_destroy, - }, - }, - { - .xpath = "/frr-isisd:isis/instance/route_leanking/ipv4/route-map", - .cbs = { - .destroy = isis_instance_route_leanking_ipv4_route_map_destroy, - .modify = isis_instance_route_leanking_ipv4_route_map_modify, - }, - }, - { - .xpath = "/frr-isisd:isis/instance/route_leanking/ipv4/metric", - .cbs = { - .destroy = isis_instance_route_leanking_ipv4_metric_destroy, - .modify = isis_instance_route_leanking_ipv4_metric_modify, - }, - }, - { - .xpath = "/frr-isisd:isis/instance/route_leanking/ipv4/table", - .cbs = { - .cli_show = cli_show_isis_route_leanking_ipv4_table, - .cli_cmp = cli_cmp_isis_route_leanking_table, - .create = isis_instance_route_leanking_ipv4_table_create, - .destroy = isis_instance_route_leanking_ipv4_table_destroy, - }, - }, - { - .xpath = "/frr-isisd:isis/instance/route_leanking/ipv4/table/route-map", - .cbs = { - .destroy = isis_instance_route_leanking_ipv4_route_map_destroy, - .modify = isis_instance_route_leanking_ipv4_route_map_modify, - }, - }, - { - .xpath = "/frr-isisd:isis/instance/route_leanking/ipv4/table/metric", - .cbs = { - .modify = isis_instance_route_leanking_ipv4_metric_modify, - }, - }, + .xpath = "/frr-isisd:isis/instance/route_leanking/ipv4", + .cbs = { + .apply_finish = leanking_ipv4_apply_finish, + .cli_show = cli_show_isis_leanking_ipv4, + .create = isis_instance_leanking_ipv4_create, + .destroy = isis_instance_leanking_ipv4_destroy, + }, + }, + { + .xpath = "/frr-isisd:isis/instance/route_leanking/ipv4/route-map", + .cbs = { + .destroy = isis_instance_route_leanking_ipv4_route_map_destroy, + .modify = isis_instance_route_leanking_ipv4_route_map_modify, + }, + }, + { + .xpath = "/frr-isisd:isis/instance/route_leanking/ipv4/metric", + .cbs = { + .destroy = isis_instance_route_leanking_ipv4_metric_destroy, + .modify = isis_instance_route_leanking_ipv4_metric_modify, + }, + }, + { + .xpath = "/frr-isisd:isis/instance/route_leanking/ipv4/table", + .cbs = { + .cli_show = cli_show_isis_route_leanking_ipv4_table, + .cli_cmp = cli_cmp_isis_route_leanking_table, + .create = isis_instance_route_leanking_ipv4_table_create, + .destroy = isis_instance_route_leanking_ipv4_table_destroy, + }, + }, + { + .xpath = "/frr-isisd:isis/instance/route_leanking/ipv4/table/route-map", + .cbs = { + .destroy = isis_instance_route_leanking_ipv4_route_map_destroy, + .modify = isis_instance_route_leanking_ipv4_route_map_modify, + }, + }, + { + .xpath = "/frr-isisd:isis/instance/route_leanking/ipv4/table/metric", + .cbs = { + .modify = isis_instance_route_leanking_ipv4_metric_modify, + }, + }, { .xpath = "/frr-isisd:isis/instance/route_leanking/ipv6", .cbs = { @@ -499,14 +499,14 @@ const struct frr_yang_module_info frr_isisd_info = { }, }, { - .xpath = "/frr-isisd:isis/instance/redistribute/ipv6", - .cbs = { - .apply_finish = redistribute_ipv6_apply_finish, - .cli_show = cli_show_isis_redistribute_ipv6, - .create = isis_instance_redistribute_ipv6_create, - .destroy = isis_instance_redistribute_ipv6_destroy, - }, - }, + .xpath = "/frr-isisd:isis/instance/redistribute/ipv6", + .cbs = { + .apply_finish = redistribute_ipv6_apply_finish, + .cli_show = cli_show_isis_redistribute_ipv6, + .create = isis_instance_redistribute_ipv6_create, + .destroy = isis_instance_redistribute_ipv6_destroy, + }, + }, { .xpath = "/frr-isisd:isis/instance/redistribute/ipv6/route-map", .cbs = { diff --git a/isisd/isis_nb_config.c b/isisd/isis_nb_config.c index 6013bac4fbdd..6bddb501ede5 100644 --- a/isisd/isis_nb_config.c +++ b/isisd/isis_nb_config.c @@ -654,8 +654,7 @@ void ietf_backoff_delay_apply_finish(struct nb_cb_apply_finish_args *args) long short_delay = yang_dnode_get_uint16(args->dnode, "./short-delay"); long long_delay = yang_dnode_get_uint16(args->dnode, "./long-delay"); long holddown = yang_dnode_get_uint16(args->dnode, "./hold-down"); - long timetolearn = - yang_dnode_get_uint16(args->dnode, "./time-to-learn"); + long timetolearn = yang_dnode_get_uint16(args->dnode, "./time-to-learn"); struct isis_area *area = nb_running_get_entry(args->dnode, NULL, true); size_t bufsiz = strlen(area->area_tag) + sizeof("IS-IS Lx"); char *buf = XCALLOC(MTYPE_TMP, bufsiz); @@ -929,8 +928,8 @@ void area_password_apply_finish(struct nb_cb_apply_finish_args *args) const char *password = yang_dnode_get_string(args->dnode, "./password"); struct isis_area *area = nb_running_get_entry(args->dnode, NULL, true); int pass_type = yang_dnode_get_enum(args->dnode, "./password-type"); - uint8_t snp_auth = - yang_dnode_get_enum(args->dnode, "./authenticate-snp"); + uint8_t snp_auth = yang_dnode_get_enum(args->dnode, + "./authenticate-snp"); switch (pass_type) { case ISIS_PASSWD_TYPE_CLEARTXT: @@ -1000,8 +999,8 @@ void domain_password_apply_finish(struct nb_cb_apply_finish_args *args) const char *password = yang_dnode_get_string(args->dnode, "./password"); struct isis_area *area = nb_running_get_entry(args->dnode, NULL, true); int pass_type = yang_dnode_get_enum(args->dnode, "./password-type"); - uint8_t snp_auth = - yang_dnode_get_enum(args->dnode, "./authenticate-snp"); + uint8_t snp_auth = yang_dnode_get_enum(args->dnode, + "./authenticate-snp"); switch (pass_type) { case ISIS_PASSWD_TYPE_CLEARTXT: @@ -1236,6 +1235,7 @@ void leanking_apply_finish(const struct lyd_node *dnode, int family) unsigned long metric = 0; const char *routemap = NULL; struct isis_area *area; + type = yang_dnode_get_enum(dnode, "./protocol"); level = yang_dnode_get_enum(dnode, "./level"); area = nb_running_get_entry(dnode, NULL, true); @@ -1320,6 +1320,7 @@ int isis_instance_route_leanking_ipv4_table_create(struct nb_cb_create_args *arg unsigned long metric = 0; const char *routemap = NULL; struct isis_area *area; + table = 0; if (args->event != NB_EV_APPLY) return NB_OK; @@ -1327,8 +1328,7 @@ int isis_instance_route_leanking_ipv4_table_create(struct nb_cb_create_args *arg type = yang_dnode_get_enum(args->dnode, "../protocol"); level = yang_dnode_get_enum(args->dnode, "../level"); area = nb_running_get_entry(args->dnode, "../.", true); - - if (yang_dnode_exists(args->dnode, "route-map")) + if (yang_dnode_exists(args->dnode, "route-map")) routemap = yang_dnode_get_string(args->dnode, "route-map"); isis_redist_set_route_leanking(area, level, AF_INET, type, metric, @@ -1342,6 +1342,7 @@ int isis_instance_route_leanking_ipv4_table_destroy( { struct isis_area *area; const char *routemap = NULL; + if (args->event != NB_EV_APPLY) return NB_OK; @@ -1451,6 +1452,7 @@ int isis_instance_leanking_ipv4_destroy(struct nb_cb_destroy_args *args) { struct isis_area *area; const char *routemap = NULL; + if (args->event != NB_EV_APPLY) return NB_OK; @@ -1468,6 +1470,7 @@ int isis_instance_redistribute_ipv4_destroy(struct nb_cb_destroy_args *args) { struct isis_area *area; int level, type; + if (args->event != NB_EV_APPLY) return NB_OK; @@ -1573,6 +1576,7 @@ int isis_instance_leanking_ipv6_destroy(struct nb_cb_destroy_args *args) { struct isis_area *area; const char *routemap = NULL; + if (args->event != NB_EV_APPLY) return NB_OK; diff --git a/isisd/isis_redist.c b/isisd/isis_redist.c index 989f6e6431e7..8751a3d495fb 100644 --- a/isisd/isis_redist.c +++ b/isisd/isis_redist.c @@ -35,10 +35,7 @@ DEFINE_MTYPE_STATIC(ISISD, ISIS_EXT_ROUTE, "ISIS redistributed route"); DEFINE_MTYPE_STATIC(ISISD, ISIS_EXT_INFO, "ISIS redistributed route info"); DEFINE_MTYPE_STATIC(ISISD, ISIS_RMAP_NAME, "ISIS redistribute route-map name"); DEFINE_MTYPE_STATIC(ISISD, ISIS_REDISTRIBUTE, "ISIS redistribute"); -int compare_prefix(struct list *leanking_list, struct prefix *prefix); -void isis_redist_update_route_leanking(struct isis_area *area, - struct isis_leanking *redist, - struct prefix *prefix); + static int redist_protocol(int family) { if (family == AF_INET) @@ -74,6 +71,7 @@ struct isis_redist *isis_redist_lookup(struct isis_area *area, int family, int protocol = redist_protocol(family); struct listnode *node; struct isis_redist *red; + if (area->redist_settings[protocol][type][level - 1]) { for (ALL_LIST_ELEMENTS_RO(area->redist_settings[protocol][type] [level - 1], @@ -290,12 +288,14 @@ int compare_prefix(struct list *leanking_list, struct prefix *prefix) { struct listnode *node; struct prefix_leanking *leanking; + for (ALL_LIST_ELEMENTS_RO(leanking_list, node, leanking)) { if (prefix_same(leanking->prefix, prefix)) return 1; } return 0; } + /* * * route_leanking functions */ @@ -305,6 +305,7 @@ void isis_redist_update_route_leanking(struct isis_area *area, { route_map_result_t map_ret; struct isis_ext_info area_info; + area_info.metric = redist->metric; if (redist->map_name) { @@ -328,17 +329,15 @@ void iteration_in_spftree(struct isis_area *area, struct isis_leanking *redist) { struct route_node *rn; if (redist->protocol == 0) { - for (rn = route_top( - area->spftree[SPFTREE_IPV4][redist->level_tmp] - ->route_table); + for (rn = route_top(area->spftree[SPFTREE_IPV4][redist->level_tmp] + ->route_table); rn; rn = srcdest_route_next(rn)) { isis_redist_update_route_leanking(area, redist, &rn->p); } } if (redist->protocol == 1) { - for (rn = route_top( - area->spftree[SPFTREE_IPV6][redist->level_tmp] - ->route_table); + for (rn = route_top(area->spftree[SPFTREE_IPV6][redist->level_tmp] + ->route_table); rn; rn = srcdest_route_next(rn)) isis_redist_update_route_leanking(area, redist, &rn->p); } @@ -358,7 +357,7 @@ void isis_redist_set_route_leanking(struct isis_area *area, int level, redist->metric = metric; redist->map = route_map_lookup_by_name(routemap); redist->table = table; - redist->map_name = (char*)routemap; + redist->map_name = (char *)routemap; if (level == LEVEL2_TO_LEVEL1) { redist->level_tmp = LVL_ISIS_LEANKING_2; @@ -581,13 +580,14 @@ void isis_leanking_unset(struct isis_area *area, const char *routemap) (struct isis_leanking *)calloc(1, sizeof(*redist_tmp)); for (ALL_LIST_ELEMENTS_RO(area->leanking_settings, node, redist_tmp)) { - if (redist_tmp->map_name == routemap) + if (redist_tmp->map_name == routemap) break; } + list_delete_node(area->leanking_settings, node); lsp_regenerate_schedule(area, IS_LEVEL_1, 0); - lsp_regenerate_schedule(area, IS_LEVEL_2, 0); + lsp_regenerate_schedule(area, IS_LEVEL_2, 0); free(redist_tmp); } @@ -727,9 +727,8 @@ DEFUN(isis_leanking, isis_leanking_cmd, } idx_metric_rmap = 1; - if (argv_find(argv, argc, "route-map", &idx_metric_rmap)) { + if (argv_find(argv, argc, "route-map", &idx_metric_rmap)) routemap = argv[idx_metric_rmap + 1]->arg; - } isis_redist_set(area, level, family, type, metric, routemap, 0, 0); return 0; @@ -745,12 +744,12 @@ DEFUN(no_isis_leanking, no_isis_leanking_cmd, { int idx_afi = 2; int idx_protocol = 3; - VTY_DECLVAR_CONTEXT(isis_area, area); int type; int level; int family; int afi; + VTY_DECLVAR_CONTEXT(isis_area, area); family = str2family(argv[idx_afi]->arg); if (family < 0) return CMD_WARNING_CONFIG_FAILED; diff --git a/isisd/isisd.c b/isisd/isisd.c index d52781323dc8..16e0391a08f7 100644 --- a/isisd/isisd.c +++ b/isisd/isisd.c @@ -332,9 +332,8 @@ struct isis_area *isis_area_create(const char *area_tag, const char *vrf_name) area->area_addrs = list_new(); area->area_addrs->del = delete_area_addr; - for (int level = 0; level < 2; level++) { + for (int level = 0; level < 2; level++) area->leanking_list[level] = list_new(); - } area->leanking_settings = list_new(); @@ -553,9 +552,8 @@ void isis_area_destroy(struct isis_area *area) list_delete(&area->area_addrs); - for (int level = 0; level < 2; level++) { + for (int level = 0; level < 2; level++) list_delete(&area->leanking_list[level]); - } list_delete(&area->leanking_settings); diff --git a/isisd/isisd.h b/isisd/isisd.h index cb410154c176..e7a80040acf9 100644 --- a/isisd/isisd.h +++ b/isisd/isisd.h @@ -258,6 +258,7 @@ struct isis_area { struct list *leanking_settings; struct list *leanking_list[2]; + QOBJ_FIELDS; }; DECLARE_QOBJ_TYPE(isis_area); diff --git a/lib/command.h b/lib/command.h index 0760eca8f4e8..499baf01ab0a 100644 --- a/lib/command.h +++ b/lib/command.h @@ -393,8 +393,8 @@ struct cmd_node { #define SRTE_COLOR_STR "SR-TE Color information\n" #define NO_STR "Negate a command or set its defaults\n" #define IGNORED_IN_NO_STR "Ignored value in no form\n" -#define ROUTE_LEANKING "route_leanking\n" -#define LEANKING_STR "Leanking between level's in IS-IS routing protocol\n" +#define ROUTE_LEANKING "route_leanking\n" +#define LEANKING_STR "Leanking between level's in IS-IS routing protocol\n" #define REDIST_STR "Redistribute information from another routing protocol\n" #define CLEAR_STR "Reset functions\n" #define RIP_STR "RIP information\n"