pim6d: Add [no] ipv6 pim bsm" command

Introduced common api pim_process_bsm_cmd,
pim_process_no_bsm_cmd which will process
both "[no] ip pim bsm" command and "[no] ipv6 pim
bsm" command.

Signed-off-by: Sarita Patra <saritap@vmware.com>
This commit is contained in:
Sarita Patra 2022-07-12 03:45:14 -07:00
parent a654221c70
commit 5e651c3699
4 changed files with 59 additions and 25 deletions

View File

@ -476,6 +476,26 @@ DEFPY (no_ipv6_pim_rp_prefix_list,
return pim_process_no_rp_plist_cmd(vty, rp_str, plist);
}
DEFPY (ipv6_pim_bsm,
ipv6_pim_bsm_cmd,
"ipv6 pim bsm",
IPV6_STR
PIM_STR
"Enable BSM support on the interface\n")
{
return pim_process_bsm_cmd(vty);
}
DEFPY (no_ipv6_pim_bsm,
no_ipv6_pim_bsm_cmd,
"no ipv6 pim bsm",
NO_STR
IPV6_STR
PIM_STR
"Enable BSM support on the interface\n")
{
return pim_process_no_bsm_cmd(vty);
}
DEFPY (ipv6_ssmpingd,
ipv6_ssmpingd_cmd,
@ -1685,6 +1705,9 @@ void pim_cmd_init(void)
&interface_no_ipv6_pim_boundary_oil_cmd);
install_element(INTERFACE_NODE, &interface_ipv6_mroute_cmd);
install_element(INTERFACE_NODE, &interface_no_ipv6_mroute_cmd);
/* Install BSM command */
install_element(INTERFACE_NODE, &ipv6_pim_bsm_cmd);
install_element(INTERFACE_NODE, &no_ipv6_pim_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);

View File

@ -5010,27 +5010,9 @@ DEFUN (ip_pim_bsm,
"ip pim bsm",
IP_STR
PIM_STR
"Enables BSM support on the interface\n")
"Enable BSM support 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, "./bsm", NB_OP_MODIFY, "true");
return nb_cli_apply_changes(vty,
FRR_PIM_INTERFACE_XPATH, "frr-routing:ipv4");
return pim_process_bsm_cmd(vty);
}
DEFUN (no_ip_pim_bsm,
@ -5039,12 +5021,9 @@ DEFUN (no_ip_pim_bsm,
NO_STR
IP_STR
PIM_STR
"Disables BSM support\n")
"Enable BSM support on the interface\n")
{
nb_cli_enqueue_change(vty, "./bsm", NB_OP_MODIFY, "false");
return nb_cli_apply_changes(vty,
FRR_PIM_INTERFACE_XPATH, "frr-routing:ipv4");
return pim_process_no_bsm_cmd(vty);
}
DEFUN (ip_pim_ucast_bsm,

View File

@ -3416,6 +3416,36 @@ int pim_process_ssmpingd_cmd(struct vty *vty, enum nb_operation operation,
return nb_cli_apply_changes(vty, NULL);
}
int pim_process_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, "./bsm", NB_OP_MODIFY, "true");
return nb_cli_apply_changes(vty, FRR_PIM_INTERFACE_XPATH,
FRR_PIM_AF_XPATH_VAL);
}
int pim_process_no_bsm_cmd(struct vty *vty)
{
nb_cli_enqueue_change(vty, "./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)
{

View File

@ -62,6 +62,8 @@ int pim_process_ip_mroute_cmd(struct vty *vty, const char *interface,
const char *group_str, const char *source_str);
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);
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);