From 9ce808b9553423e4f255590661ba91a084b30275 Mon Sep 17 00:00:00 2001 From: Emanuele Di Pascale Date: Wed, 14 Nov 2018 14:21:46 +0100 Subject: [PATCH] isisd: retrofit the 'isis [c|p]snp-interval' commands Signed-off-by: Emanuele Di Pascale --- isisd/isis_cli.c | 122 +++++++++++++++++++++++++++++++++++++++ isisd/isis_cli.h | 4 ++ isisd/isis_northbound.c | 44 ++++++++++++-- isisd/isis_vty_common.c | 78 ------------------------- isisd/isis_vty_fabricd.c | 78 +++++++++++++++++++++++++ isisd/isis_vty_isisd.c | 84 --------------------------- 6 files changed, 244 insertions(+), 166 deletions(-) diff --git a/isisd/isis_cli.c b/isisd/isis_cli.c index a584817507..37d6315a6c 100644 --- a/isisd/isis_cli.c +++ b/isisd/isis_cli.c @@ -1495,6 +1495,122 @@ void cli_show_ip_isis_hello_padding(struct vty *vty, struct lyd_node *dnode, vty_out(vty, " isis hello padding\n"); } +/* + * XPath: /frr-interface:lib/interface/frr-isisd:isis/csnp-interval + */ +DEFPY(csnp_interval, csnp_interval_cmd, + "isis csnp-interval (1-600)$intv [level-1|level-2]$level", + "IS-IS routing protocol\n" + "Set CSNP interval in seconds\n" + "CSNP interval value\n" + "Specify interval for level-1 CSNPs\n" + "Specify interval for level-2 CSNPs\n") +{ + if (!level || strmatch(level, "level-1")) + nb_cli_enqueue_change(vty, + "./frr-isisd:isis/csnp-interval/level-1", + NB_OP_MODIFY, intv_str); + if (!level || strmatch(level, "level-2")) + nb_cli_enqueue_change(vty, + "./frr-isisd:isis/csnp-interval/level-2", + NB_OP_MODIFY, intv_str); + + return nb_cli_apply_changes(vty, NULL); +} + +DEFPY(no_csnp_interval, no_csnp_interval_cmd, + "no isis csnp-interval [(1-600)] [level-1|level-2]$level", + NO_STR + "IS-IS routing protocol\n" + "Set CSNP interval in seconds\n" + "CSNP interval value\n" + "Specify interval for level-1 CSNPs\n" + "Specify interval for level-2 CSNPs\n") +{ + if (!level || strmatch(level, "level-1")) + nb_cli_enqueue_change(vty, + "./frr-isisd:isis/csnp-interval/level-1", + NB_OP_MODIFY, NULL); + if (!level || strmatch(level, "level-2")) + nb_cli_enqueue_change(vty, + "./frr-isisd:isis/csnp-interval/level-2", + NB_OP_MODIFY, NULL); + + return nb_cli_apply_changes(vty, NULL); +} + +void cli_show_ip_isis_csnp_interval(struct vty *vty, struct lyd_node *dnode, + bool show_defaults) +{ + const char *l1 = yang_dnode_get_string(dnode, "./level-1"); + const char *l2 = yang_dnode_get_string(dnode, "./level-2"); + + if (strmatch(l1, l2)) + vty_out(vty, " isis csnp-interval %s\n", l1); + else { + vty_out(vty, " isis csnp-interval %s level-1\n", l1); + vty_out(vty, " isis csnp-interval %s level-2\n", l2); + } +} + +/* + * XPath: /frr-interface:lib/interface/frr-isisd:isis/psnp-interval + */ +DEFPY(psnp_interval, psnp_interval_cmd, + "isis psnp-interval (1-120)$intv [level-1|level-2]$level", + "IS-IS routing protocol\n" + "Set PSNP interval in seconds\n" + "PSNP interval value\n" + "Specify interval for level-1 PSNPs\n" + "Specify interval for level-2 PSNPs\n") +{ + if (!level || strmatch(level, "level-1")) + nb_cli_enqueue_change(vty, + "./frr-isisd:isis/psnp-interval/level-1", + NB_OP_MODIFY, intv_str); + if (!level || strmatch(level, "level-2")) + nb_cli_enqueue_change(vty, + "./frr-isisd:isis/psnp-interval/level-2", + NB_OP_MODIFY, intv_str); + + return nb_cli_apply_changes(vty, NULL); +} + +DEFPY(no_psnp_interval, no_psnp_interval_cmd, + "no isis psnp-interval [(1-120)] [level-1|level-2]$level", + NO_STR + "IS-IS routing protocol\n" + "Set PSNP interval in seconds\n" + "PSNP interval value\n" + "Specify interval for level-1 PSNPs\n" + "Specify interval for level-2 PSNPs\n") +{ + if (!level || strmatch(level, "level-1")) + nb_cli_enqueue_change(vty, + "./frr-isisd:isis/psnp-interval/level-1", + NB_OP_MODIFY, NULL); + if (!level || strmatch(level, "level-2")) + nb_cli_enqueue_change(vty, + "./frr-isisd:isis/psnp-interval/level-2", + NB_OP_MODIFY, NULL); + + return nb_cli_apply_changes(vty, NULL); +} + +void cli_show_ip_isis_psnp_interval(struct vty *vty, struct lyd_node *dnode, + bool show_defaults) +{ + const char *l1 = yang_dnode_get_string(dnode, "./level-1"); + const char *l2 = yang_dnode_get_string(dnode, "./level-2"); + + if (strmatch(l1, l2)) + vty_out(vty, " isis psnp-interval %s\n", l1); + else { + vty_out(vty, " isis psnp-interval %s level-1\n", l1); + vty_out(vty, " isis psnp-interval %s level-2\n", l2); + } +} + void isis_cli_init(void) { install_element(CONFIG_NODE, &router_isis_cmd); @@ -1564,6 +1680,12 @@ void isis_cli_init(void) install_element(INTERFACE_NODE, &isis_threeway_adj_cmd); install_element(INTERFACE_NODE, &isis_hello_padding_cmd); + + install_element(INTERFACE_NODE, &csnp_interval_cmd); + install_element(INTERFACE_NODE, &no_csnp_interval_cmd); + + install_element(INTERFACE_NODE, &psnp_interval_cmd); + install_element(INTERFACE_NODE, &no_psnp_interval_cmd); } #endif /* ifndef FABRICD */ diff --git a/isisd/isis_cli.h b/isisd/isis_cli.h index 5162618a28..cc28b871d2 100644 --- a/isisd/isis_cli.h +++ b/isisd/isis_cli.h @@ -95,5 +95,9 @@ void cli_show_ip_isis_threeway_shake(struct vty *vty, struct lyd_node *dnode, bool show_defaults); void cli_show_ip_isis_hello_padding(struct vty *vty, struct lyd_node *dnode, bool show_defaults); +void cli_show_ip_isis_csnp_interval(struct vty *vty, struct lyd_node *dnode, + bool show_defaults); +void cli_show_ip_isis_psnp_interval(struct vty *vty, struct lyd_node *dnode, + bool show_defaults); #endif /* ISISD_ISIS_CLI_H_ */ diff --git a/isisd/isis_northbound.c b/isisd/isis_northbound.c index c03ebd56eb..8467cd6ae2 100644 --- a/isisd/isis_northbound.c +++ b/isisd/isis_northbound.c @@ -1849,7 +1849,14 @@ lib_interface_isis_csnp_interval_level_1_modify(enum nb_event event, const struct lyd_node *dnode, union nb_resource *resource) { - /* TODO: implement me. */ + struct isis_circuit *circuit; + + if (event != NB_EV_APPLY) + return NB_OK; + + circuit = yang_dnode_get_entry(dnode, true); + circuit->csnp_interval[0] = yang_dnode_get_uint16(dnode, NULL); + return NB_OK; } @@ -1861,7 +1868,14 @@ lib_interface_isis_csnp_interval_level_2_modify(enum nb_event event, const struct lyd_node *dnode, union nb_resource *resource) { - /* TODO: implement me. */ + struct isis_circuit *circuit; + + if (event != NB_EV_APPLY) + return NB_OK; + + circuit = yang_dnode_get_entry(dnode, true); + circuit->csnp_interval[1] = yang_dnode_get_uint16(dnode, NULL); + return NB_OK; } @@ -1873,7 +1887,14 @@ lib_interface_isis_psnp_interval_level_1_modify(enum nb_event event, const struct lyd_node *dnode, union nb_resource *resource) { - /* TODO: implement me. */ + struct isis_circuit *circuit; + + if (event != NB_EV_APPLY) + return NB_OK; + + circuit = yang_dnode_get_entry(dnode, true); + circuit->psnp_interval[0] = yang_dnode_get_uint16(dnode, NULL); + return NB_OK; } @@ -1885,7 +1906,14 @@ lib_interface_isis_psnp_interval_level_2_modify(enum nb_event event, const struct lyd_node *dnode, union nb_resource *resource) { - /* TODO: implement me. */ + struct isis_circuit *circuit; + + if (event != NB_EV_APPLY) + return NB_OK; + + circuit = yang_dnode_get_entry(dnode, true); + circuit->psnp_interval[1] = yang_dnode_get_uint16(dnode, NULL); + return NB_OK; } @@ -2678,6 +2706,10 @@ const struct frr_yang_module_info frr_isisd_info = { .cbs.delete = lib_interface_isis_ipv6_routing_delete, .cbs.cli_show = cli_show_ip_isis_ipv6, }, + { + .xpath = "/frr-interface:lib/interface/frr-isisd:isis/csnp-interval", + .cbs.cli_show = cli_show_ip_isis_csnp_interval, + }, { .xpath = "/frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-1", .cbs.modify = lib_interface_isis_csnp_interval_level_1_modify, @@ -2686,6 +2718,10 @@ const struct frr_yang_module_info frr_isisd_info = { .xpath = "/frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-2", .cbs.modify = lib_interface_isis_csnp_interval_level_2_modify, }, + { + .xpath = "/frr-interface:lib/interface/frr-isisd:isis/psnp-interval", + .cbs.cli_show = cli_show_ip_isis_psnp_interval, + }, { .xpath = "/frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-1", .cbs.modify = lib_interface_isis_psnp_interval_level_1_modify, diff --git a/isisd/isis_vty_common.c b/isisd/isis_vty_common.c index 78e6f0eec0..c1d4f83b45 100644 --- a/isisd/isis_vty_common.c +++ b/isisd/isis_vty_common.c @@ -56,78 +56,6 @@ struct isis_circuit *isis_circuit_lookup(struct vty *vty) return circuit; } -DEFUN (csnp_interval, - csnp_interval_cmd, - PROTO_NAME " csnp-interval (1-600)", - PROTO_HELP - "Set CSNP interval in seconds\n" - "CSNP interval value\n") -{ - uint16_t interval = atoi(argv[2]->arg); - struct isis_circuit *circuit = isis_circuit_lookup(vty); - if (!circuit) - return CMD_ERR_NO_MATCH; - - circuit->csnp_interval[0] = interval; - circuit->csnp_interval[1] = interval; - - return CMD_SUCCESS; -} - -DEFUN (no_csnp_interval, - no_csnp_interval_cmd, - "no " PROTO_NAME " csnp-interval [(1-600)]", - NO_STR - PROTO_HELP - "Set CSNP interval in seconds\n" - "CSNP interval value\n") -{ - struct isis_circuit *circuit = isis_circuit_lookup(vty); - if (!circuit) - return CMD_ERR_NO_MATCH; - - circuit->csnp_interval[0] = DEFAULT_CSNP_INTERVAL; - circuit->csnp_interval[1] = DEFAULT_CSNP_INTERVAL; - - return CMD_SUCCESS; -} - -DEFUN (psnp_interval, - psnp_interval_cmd, - PROTO_NAME " psnp-interval (1-120)", - PROTO_HELP - "Set PSNP interval in seconds\n" - "PSNP interval value\n") -{ - uint16_t interval = atoi(argv[2]->arg); - struct isis_circuit *circuit = isis_circuit_lookup(vty); - if (!circuit) - return CMD_ERR_NO_MATCH; - - circuit->psnp_interval[0] = interval; - circuit->psnp_interval[1] = interval; - - return CMD_SUCCESS; -} - -DEFUN (no_psnp_interval, - no_psnp_interval_cmd, - "no " PROTO_NAME " psnp-interval [(1-120)]", - NO_STR - PROTO_HELP - "Set PSNP interval in seconds\n" - "PSNP interval value\n") -{ - struct isis_circuit *circuit = isis_circuit_lookup(vty); - if (!circuit) - return CMD_ERR_NO_MATCH; - - circuit->psnp_interval[0] = DEFAULT_PSNP_INTERVAL; - circuit->psnp_interval[1] = DEFAULT_PSNP_INTERVAL; - - return CMD_SUCCESS; -} - DEFUN (circuit_topology, circuit_topology_cmd, PROTO_NAME " topology " ISIS_MT_NAMES, @@ -228,12 +156,6 @@ DEFUN (no_isis_bfd, void isis_vty_init(void) { - install_element(INTERFACE_NODE, &csnp_interval_cmd); - install_element(INTERFACE_NODE, &no_csnp_interval_cmd); - - install_element(INTERFACE_NODE, &psnp_interval_cmd); - install_element(INTERFACE_NODE, &no_psnp_interval_cmd); - install_element(INTERFACE_NODE, &circuit_topology_cmd); install_element(INTERFACE_NODE, &no_circuit_topology_cmd); diff --git a/isisd/isis_vty_fabricd.c b/isisd/isis_vty_fabricd.c index aad2ab95e3..f2d15c04b8 100644 --- a/isisd/isis_vty_fabricd.c +++ b/isisd/isis_vty_fabricd.c @@ -905,6 +905,78 @@ DEFUN (no_isis_hello_multiplier, return CMD_SUCCESS; } +DEFUN (csnp_interval, + csnp_interval_cmd, + PROTO_NAME " csnp-interval (1-600)", + PROTO_HELP + "Set CSNP interval in seconds\n" + "CSNP interval value\n") +{ + uint16_t interval = atoi(argv[2]->arg); + struct isis_circuit *circuit = isis_circuit_lookup(vty); + if (!circuit) + return CMD_ERR_NO_MATCH; + + circuit->csnp_interval[0] = interval; + circuit->csnp_interval[1] = interval; + + return CMD_SUCCESS; +} + +DEFUN (no_csnp_interval, + no_csnp_interval_cmd, + "no " PROTO_NAME " csnp-interval [(1-600)]", + NO_STR + PROTO_HELP + "Set CSNP interval in seconds\n" + "CSNP interval value\n") +{ + struct isis_circuit *circuit = isis_circuit_lookup(vty); + if (!circuit) + return CMD_ERR_NO_MATCH; + + circuit->csnp_interval[0] = DEFAULT_CSNP_INTERVAL; + circuit->csnp_interval[1] = DEFAULT_CSNP_INTERVAL; + + return CMD_SUCCESS; +} + +DEFUN (psnp_interval, + psnp_interval_cmd, + PROTO_NAME " psnp-interval (1-120)", + PROTO_HELP + "Set PSNP interval in seconds\n" + "PSNP interval value\n") +{ + uint16_t interval = atoi(argv[2]->arg); + struct isis_circuit *circuit = isis_circuit_lookup(vty); + if (!circuit) + return CMD_ERR_NO_MATCH; + + circuit->psnp_interval[0] = interval; + circuit->psnp_interval[1] = interval; + + return CMD_SUCCESS; +} + +DEFUN (no_psnp_interval, + no_psnp_interval_cmd, + "no " PROTO_NAME " psnp-interval [(1-120)]", + NO_STR + PROTO_HELP + "Set PSNP interval in seconds\n" + "PSNP interval value\n") +{ + struct isis_circuit *circuit = isis_circuit_lookup(vty); + if (!circuit) + return CMD_ERR_NO_MATCH; + + circuit->psnp_interval[0] = DEFAULT_PSNP_INTERVAL; + circuit->psnp_interval[1] = DEFAULT_PSNP_INTERVAL; + + return CMD_SUCCESS; +} + void isis_vty_daemon_init(void) { install_element(ROUTER_NODE, &fabric_tier_cmd); @@ -958,4 +1030,10 @@ void isis_vty_daemon_init(void) install_element(INTERFACE_NODE, &isis_hello_multiplier_cmd); install_element(INTERFACE_NODE, &no_isis_hello_multiplier_cmd); + + install_element(INTERFACE_NODE, &csnp_interval_cmd); + install_element(INTERFACE_NODE, &no_csnp_interval_cmd); + + install_element(INTERFACE_NODE, &psnp_interval_cmd); + install_element(INTERFACE_NODE, &no_psnp_interval_cmd); } diff --git a/isisd/isis_vty_isisd.c b/isisd/isis_vty_isisd.c index 13ae164cc7..198e72964e 100644 --- a/isisd/isis_vty_isisd.c +++ b/isisd/isis_vty_isisd.c @@ -219,84 +219,6 @@ DEFUN (no_isis_priority_level, return CMD_SUCCESS; } -DEFUN (csnp_interval_level, - csnp_interval_level_cmd, - "isis csnp-interval (1-600) ", - "IS-IS routing protocol\n" - "Set CSNP interval in seconds\n" - "CSNP interval value\n" - "Specify interval for level-1 CSNPs\n" - "Specify interval for level-2 CSNPs\n") -{ - uint16_t interval = atoi(argv[2]->arg); - struct isis_circuit *circuit = isis_circuit_lookup(vty); - if (!circuit) - return CMD_ERR_NO_MATCH; - - circuit->csnp_interval[level_for_arg(argv[3]->text)] = interval; - - return CMD_SUCCESS; -} - -DEFUN (no_csnp_interval_level, - no_csnp_interval_level_cmd, - "no isis csnp-interval [(1-600)] ", - NO_STR - "IS-IS routing protocol\n" - "Set CSNP interval in seconds\n" - "CSNP interval value\n" - "Specify interval for level-1 CSNPs\n" - "Specify interval for level-2 CSNPs\n") -{ - struct isis_circuit *circuit = isis_circuit_lookup(vty); - int level = level_for_arg(argv[argc - 1]->text); - if (!circuit) - return CMD_ERR_NO_MATCH; - - circuit->csnp_interval[level] = DEFAULT_CSNP_INTERVAL; - - return CMD_SUCCESS; -} - -DEFUN (psnp_interval_level, - psnp_interval_level_cmd, - "isis psnp-interval (1-120) ", - "IS-IS routing protocol\n" - "Set PSNP interval in seconds\n" - "PSNP interval value\n" - "Specify interval for level-1 PSNPs\n" - "Specify interval for level-2 PSNPs\n") -{ - uint16_t interval = atoi(argv[2]->arg); - struct isis_circuit *circuit = isis_circuit_lookup(vty); - if (!circuit) - return CMD_ERR_NO_MATCH; - - circuit->psnp_interval[level_for_arg(argv[3]->text)] = (uint16_t)interval; - - return CMD_SUCCESS; -} - -DEFUN (no_psnp_interval_level, - no_psnp_interval_level_cmd, - "no isis psnp-interval [(1-120)] ", - NO_STR - "IS-IS routing protocol\n" - "Set PSNP interval in seconds\n" - "PSNP interval value\n" - "Specify interval for level-1 PSNPs\n" - "Specify interval for level-2 PSNPs\n") -{ - struct isis_circuit *circuit = isis_circuit_lookup(vty); - int level = level_for_arg(argv[argc - 1]->text); - if (!circuit) - return CMD_ERR_NO_MATCH; - - circuit->psnp_interval[level] = DEFAULT_PSNP_INTERVAL; - - return CMD_SUCCESS; -} - void isis_vty_daemon_init(void) { install_element(INTERFACE_NODE, &isis_circuit_type_cmd); @@ -309,10 +231,4 @@ void isis_vty_daemon_init(void) install_element(INTERFACE_NODE, &no_isis_priority_cmd); install_element(INTERFACE_NODE, &isis_priority_level_cmd); install_element(INTERFACE_NODE, &no_isis_priority_level_cmd); - - install_element(INTERFACE_NODE, &csnp_interval_level_cmd); - install_element(INTERFACE_NODE, &no_csnp_interval_level_cmd); - - install_element(INTERFACE_NODE, &psnp_interval_level_cmd); - install_element(INTERFACE_NODE, &no_psnp_interval_level_cmd); } -- 2.39.5