From: sarita patra Date: Tue, 1 Mar 2022 02:12:22 +0000 (-0800) Subject: pim6d: Adding "ipv6 pim" CLI X-Git-Tag: pim6-testing-20220430~255^2~7 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=a1caf7a88fa6609612229bee8a05999be015d0c3;p=mirror%2Ffrr.git pim6d: Adding "ipv6 pim" CLI This cli used to enable PIMV6 on interface. Signed-off-by: sarita patra --- diff --git a/pimd/pim6_cmd.c b/pimd/pim6_cmd.c index 06790d3d63..8718f0da46 100644 --- a/pimd/pim6_cmd.c +++ b/pimd/pim6_cmd.c @@ -210,6 +210,25 @@ DEFPY (no_ipv6_pim_register_suppress, return pim_process_no_register_suppress_cmd(vty); } +DEFPY (interface_ipv6_pim, + interface_ipv6_pim_cmd, + "ipv6 pim", + IPV6_STR + PIM_STR) +{ + return pim_process_ip_pim_cmd(vty); +} + +DEFPY (interface_no_ipv6_pim, + interface_no_ipv6_pim_cmd, + "no ipv6 pim", + NO_STR + IPV6_STR + PIM_STR) +{ + return pim_process_no_ip_pim_cmd(vty); +} + void pim_cmd_init(void) { if_cmd_init(pim_interface_config_write); @@ -228,4 +247,6 @@ void pim_cmd_init(void) install_element(CONFIG_NODE, &no_ipv6_pim_rp_keep_alive_cmd); install_element(CONFIG_NODE, &ipv6_pim_register_suppress_cmd); install_element(CONFIG_NODE, &no_ipv6_pim_register_suppress_cmd); + install_element(INTERFACE_NODE, &interface_ipv6_pim_cmd); + install_element(INTERFACE_NODE, &interface_no_ipv6_pim_cmd); } diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 76f90cdba7..21bb15b74b 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -8129,12 +8129,7 @@ DEFUN (interface_ip_pim, IP_STR PIM_STR) { - nb_cli_enqueue_change(vty, "./pim-enable", NB_OP_MODIFY, "true"); - - return nb_cli_apply_changes(vty, - FRR_PIM_INTERFACE_XPATH, - "frr-routing:ipv4"); - + return pim_process_ip_pim_cmd(vty); } DEFUN_HIDDEN (interface_no_ip_pim_ssm, @@ -8232,41 +8227,7 @@ DEFUN (interface_no_ip_pim, IP_STR PIM_STR) { - const struct lyd_node *igmp_enable_dnode; - char igmp_if_xpath[XPATH_MAXLEN]; - - int printed = - snprintf(igmp_if_xpath, sizeof(igmp_if_xpath), - "%s/frr-gmp:gmp/address-family[address-family='%s']", - VTY_CURR_XPATH, "frr-routing:ipv4"); - - if (printed >= (int)(sizeof(igmp_if_xpath))) { - vty_out(vty, "Xpath too long (%d > %u)", printed + 1, - XPATH_MAXLEN); - return CMD_WARNING_CONFIG_FAILED; - } - - 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, igmp_if_xpath, NB_OP_DESTROY, NULL); - nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL); - } else { - if (!yang_dnode_get_bool(igmp_enable_dnode, ".")) { - nb_cli_enqueue_change(vty, igmp_if_xpath, NB_OP_DESTROY, - NULL); - nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL); - } else - nb_cli_enqueue_change(vty, "./pim-enable", NB_OP_MODIFY, - "false"); - } - - return nb_cli_apply_changes(vty, - FRR_PIM_INTERFACE_XPATH, - "frr-routing:ipv4"); + pim_process_no_ip_pim_cmd(vty); } /* boundaries */ diff --git a/pimd/pim_cmd_common.c b/pimd/pim_cmd_common.c index 6adea54a61..b00085dcca 100644 --- a/pimd/pim_cmd_common.c +++ b/pimd/pim_cmd_common.c @@ -326,3 +326,48 @@ int pim_process_no_register_suppress_cmd(struct vty *vty) return nb_cli_apply_changes(vty, NULL); } + +int pim_process_ip_pim_cmd(struct vty *vty) +{ + nb_cli_enqueue_change(vty, "./pim-enable", NB_OP_MODIFY, "true"); + + return nb_cli_apply_changes(vty, FRR_PIM_INTERFACE_XPATH, + FRR_PIM_AF_XPATH_VAL); +} + +int pim_process_no_ip_pim_cmd(struct vty *vty) +{ + const struct lyd_node *mld_enable_dnode; + char mld_if_xpath[XPATH_MAXLEN]; + + int printed = + snprintf(mld_if_xpath, sizeof(mld_if_xpath), + "%s/frr-gmp:gmp/address-family[address-family='%s']", + VTY_CURR_XPATH, FRR_PIM_AF_XPATH_VAL); + + if (printed >= (int)(sizeof(mld_if_xpath))) { + vty_out(vty, "Xpath too long (%d > %u)", printed + 1, + XPATH_MAXLEN); + return CMD_WARNING_CONFIG_FAILED; + } + + mld_enable_dnode = yang_dnode_getf(vty->candidate_config->dnode, + FRR_GMP_ENABLE_XPATH, VTY_CURR_XPATH, + FRR_PIM_AF_XPATH_VAL); + + if (!mld_enable_dnode) { + nb_cli_enqueue_change(vty, mld_if_xpath, NB_OP_DESTROY, NULL); + nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL); + } else { + if (!yang_dnode_get_bool(mld_enable_dnode, ".")) { + nb_cli_enqueue_change(vty, mld_if_xpath, NB_OP_DESTROY, + NULL); + nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL); + } else + nb_cli_enqueue_change(vty, "./pim-enable", NB_OP_MODIFY, + "false"); + } + + return nb_cli_apply_changes(vty, FRR_PIM_INTERFACE_XPATH, + FRR_PIM_AF_XPATH_VAL); +} diff --git a/pimd/pim_cmd_common.h b/pimd/pim_cmd_common.h index 49fc6bcbeb..16a026d60e 100644 --- a/pimd/pim_cmd_common.h +++ b/pimd/pim_cmd_common.h @@ -36,4 +36,7 @@ int pim_process_no_rp_kat_cmd(struct vty *vty); int pim_process_register_suppress_cmd(struct vty *vty, const char *rst); int pim_process_no_register_suppress_cmd(struct vty *vty); +int pim_process_ip_pim_cmd(struct vty *vty); +int pim_process_no_ip_pim_cmd(struct vty *vty); + #endif /* PIM_CMD_COMMON_H */