From dfeda85c4bd6d19ee711750e8b8de6c4f6e82762 Mon Sep 17 00:00:00 2001 From: Sarita Patra Date: Tue, 12 Jul 2022 03:49:48 -0700 Subject: [PATCH] pim6d: Add [no] ipv6 pim unicast-bsm" command Introduced common api pim_process_unicast_bsm_cmd, pim_process_no_unicast_bsm_cmd which will process both "[no] ip pim unicast-bsm" command and "[no] ipv6 pim unicast-bsm" command. Signed-off-by: Sarita Patra --- pimd/pim6_cmd.c | 23 +++++++++++++++++++++++ pimd/pim_cmd.c | 29 +++-------------------------- pimd/pim_cmd_common.c | 30 ++++++++++++++++++++++++++++++ pimd/pim_cmd_common.h | 2 ++ 4 files changed, 58 insertions(+), 26 deletions(-) diff --git a/pimd/pim6_cmd.c b/pimd/pim6_cmd.c index e7c20c1f37..a2a7e7c01e 100644 --- a/pimd/pim6_cmd.c +++ b/pimd/pim6_cmd.c @@ -497,6 +497,27 @@ DEFPY (no_ipv6_pim_bsm, return pim_process_no_bsm_cmd(vty); } +DEFPY (ipv6_pim_ucast_bsm, + ipv6_pim_ucast_bsm_cmd, + "ipv6 pim unicast-bsm", + IPV6_STR + PIM_STR + "Accept/Send unicast BSM on the interface\n") +{ + return pim_process_unicast_bsm_cmd(vty); +} + +DEFPY (no_ipv6_pim_ucast_bsm, + no_ipv6_pim_ucast_bsm_cmd, + "no ipv6 pim unicast-bsm", + NO_STR + IPV6_STR + PIM_STR + "Accept/Send unicast BSM on the interface\n") +{ + return pim_process_no_unicast_bsm_cmd(vty); +} + DEFPY (ipv6_ssmpingd, ipv6_ssmpingd_cmd, "ipv6 ssmpingd [X:X::X:X]$source", @@ -1708,6 +1729,8 @@ void pim_cmd_init(void) /* Install BSM command */ install_element(INTERFACE_NODE, &ipv6_pim_bsm_cmd); install_element(INTERFACE_NODE, &no_ipv6_pim_bsm_cmd); + install_element(INTERFACE_NODE, &ipv6_pim_ucast_bsm_cmd); + install_element(INTERFACE_NODE, &no_ipv6_pim_ucast_bsm_cmd); install_element(CONFIG_NODE, &ipv6_pim_rp_cmd); install_element(VRF_NODE, &ipv6_pim_rp_cmd); install_element(CONFIG_NODE, &no_ipv6_pim_rp_cmd); diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index c5c098774c..c6f2e8dbde 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -5014,7 +5014,6 @@ DEFUN (ip_pim_bsm, { return pim_process_bsm_cmd(vty); } - DEFUN (no_ip_pim_bsm, no_ip_pim_bsm_cmd, "no ip pim bsm", @@ -5033,26 +5032,7 @@ DEFUN (ip_pim_ucast_bsm, PIM_STR "Accept/Send unicast BSM on the interface\n") { - const struct lyd_node *igmp_enable_dnode; - - igmp_enable_dnode = - yang_dnode_getf(vty->candidate_config->dnode, - FRR_GMP_ENABLE_XPATH, VTY_CURR_XPATH, - "frr-routing:ipv4"); - if (!igmp_enable_dnode) - nb_cli_enqueue_change(vty, "./pim-enable", NB_OP_MODIFY, - "true"); - else { - if (!yang_dnode_get_bool(igmp_enable_dnode, ".")) - nb_cli_enqueue_change(vty, "./pim-enable", NB_OP_MODIFY, - "true"); - } - - nb_cli_enqueue_change(vty, "./unicast-bsm", NB_OP_MODIFY, "true"); - - return nb_cli_apply_changes(vty, - FRR_PIM_INTERFACE_XPATH, "frr-routing:ipv4"); - + return pim_process_unicast_bsm_cmd(vty); } DEFUN (no_ip_pim_ucast_bsm, @@ -5061,12 +5041,9 @@ DEFUN (no_ip_pim_ucast_bsm, NO_STR IP_STR PIM_STR - "Block send/receive unicast BSM on this interface\n") + "Accept/Send unicast BSM on the interface\n") { - nb_cli_enqueue_change(vty, "./unicast-bsm", NB_OP_MODIFY, "false"); - - return nb_cli_apply_changes(vty, - FRR_PIM_INTERFACE_XPATH, "frr-routing:ipv4"); + return pim_process_no_unicast_bsm_cmd(vty); } #if HAVE_BFDD > 0 diff --git a/pimd/pim_cmd_common.c b/pimd/pim_cmd_common.c index 6fa4d8eddb..4b17d0bafd 100644 --- a/pimd/pim_cmd_common.c +++ b/pimd/pim_cmd_common.c @@ -3446,6 +3446,36 @@ int pim_process_no_bsm_cmd(struct vty *vty) FRR_PIM_AF_XPATH_VAL); } +int pim_process_unicast_bsm_cmd(struct vty *vty) +{ + const struct lyd_node *gm_enable_dnode; + + gm_enable_dnode = yang_dnode_getf(vty->candidate_config->dnode, + FRR_GMP_ENABLE_XPATH, VTY_CURR_XPATH, + FRR_PIM_AF_XPATH_VAL); + if (!gm_enable_dnode) + nb_cli_enqueue_change(vty, "./pim-enable", NB_OP_MODIFY, + "true"); + else { + if (!yang_dnode_get_bool(gm_enable_dnode, ".")) + nb_cli_enqueue_change(vty, "./pim-enable", NB_OP_MODIFY, + "true"); + } + + nb_cli_enqueue_change(vty, "./unicast-bsm", NB_OP_MODIFY, "true"); + + return nb_cli_apply_changes(vty, FRR_PIM_INTERFACE_XPATH, + FRR_PIM_AF_XPATH_VAL); +} + +int pim_process_no_unicast_bsm_cmd(struct vty *vty) +{ + nb_cli_enqueue_change(vty, "./unicast-bsm", NB_OP_MODIFY, "false"); + + return nb_cli_apply_changes(vty, FRR_PIM_INTERFACE_XPATH, + FRR_PIM_AF_XPATH_VAL); +} + static void show_scan_oil_stats(struct pim_instance *pim, struct vty *vty, time_t now) { diff --git a/pimd/pim_cmd_common.h b/pimd/pim_cmd_common.h index f2ce292f03..6a72664a55 100644 --- a/pimd/pim_cmd_common.h +++ b/pimd/pim_cmd_common.h @@ -64,6 +64,8 @@ int pim_process_no_ip_mroute_cmd(struct vty *vty, const char *interface, const char *group_str, const char *src_str); int pim_process_bsm_cmd(struct vty *vty); int pim_process_no_bsm_cmd(struct vty *vty); +int pim_process_unicast_bsm_cmd(struct vty *vty); +int pim_process_no_unicast_bsm_cmd(struct vty *vty); void json_object_pim_upstream_add(json_object *json, struct pim_upstream *up); void pim_show_rpf(struct pim_instance *pim, struct vty *vty, json_object *json); void pim_show_neighbors_secondary(struct pim_instance *pim, struct vty *vty); -- 2.39.5