summaryrefslogtreecommitdiff
path: root/pimd/pim6_cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'pimd/pim6_cmd.c')
-rw-r--r--pimd/pim6_cmd.c1199
1 files changed, 1043 insertions, 156 deletions
diff --git a/pimd/pim6_cmd.c b/pimd/pim6_cmd.c
index ec912700d1..f7a4e0e481 100644
--- a/pimd/pim6_cmd.c
+++ b/pimd/pim6_cmd.c
@@ -41,45 +41,207 @@ static struct cmd_node debug_node = {
.config_write = pim_debug_config_write,
};
-DEFPY (ipv6_pim_joinprune_time,
- ipv6_pim_joinprune_time_cmd,
- "ipv6 pim join-prune-interval (1-65535)$jpi",
- IPV6_STR
- PIM_STR
+DEFPY_NOSH (router_pim6,
+ router_pim6_cmd,
+ "router pim6 [vrf NAME]",
+ "Enable a routing process\n"
+ "Start PIM6 configuration\n"
+ VRF_CMD_HELP_STR)
+{
+ char xpath[XPATH_MAXLEN];
+ const char *vrf_name;
+
+ if (vrf)
+ vrf_name = vrf;
+ else
+ vrf_name = VRF_DEFAULT_NAME;
+
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH, "frr-pim:pimd", "pim",
+ vrf_name, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) != CMD_SUCCESS)
+ return CMD_WARNING_CONFIG_FAILED;
+
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+
+ return CMD_SUCCESS;
+}
+
+DEFPY (no_router_pim6,
+ no_router_pim6_cmd,
+ "no router pim6 [vrf NAME]",
+ NO_STR
+ "Enable a routing process\n"
+ "Start PIM6 configuration\n"
+ VRF_CMD_HELP_STR)
+{
+ char xpath[XPATH_MAXLEN];
+ const char *vrf_name;
+
+ if (vrf)
+ vrf_name = vrf;
+ else
+ vrf_name = VRF_DEFAULT_NAME;
+
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH, "frr-pim:pimd", "pim",
+ vrf_name, FRR_PIM_AF_XPATH_VAL);
+
+ nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY (pim6_joinprune_time,
+ pim6_joinprune_time_cmd,
+ "join-prune-interval (1-65535)$jpi",
"Join Prune Send Interval\n"
"Seconds\n")
{
return pim_process_join_prune_cmd(vty, jpi_str);
}
+DEFPY_ATTR(ipv6_joinprune_time,
+ ipv6_pim_joinprune_time_cmd,
+ "ipv6 pim join-prune-interval (1-65535)$jpi",
+ IPV6_STR PIM_STR
+ "Join Prune Send Interval\n"
+ "Seconds\n",
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ret = pim_process_join_prune_cmd(vty, jpi_str);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
-DEFPY (no_ipv6_pim_joinprune_time,
- no_ipv6_pim_joinprune_time_cmd,
- "no ipv6 pim join-prune-interval [(1-65535)]",
+ return ret;
+}
+
+DEFPY (no_pim6_joinprune_time,
+ no_pim6_joinprune_time_cmd,
+ "no join-prune-interval [(1-65535)]",
NO_STR
- IPV6_STR
- PIM_STR
"Join Prune Send Interval\n"
IGNORED_IN_NO_STR)
{
return pim_process_no_join_prune_cmd(vty);
}
+DEFPY_ATTR(no_ipv6_pim_joinprune_time,
+ no_ipv6_pim_joinprune_time_cmd,
+ "no ipv6 pim join-prune-interval [(1-65535)]",
+ NO_STR
+ IPV6_STR
+ PIM_STR
+ "Join Prune Send Interval\n"
+ IGNORED_IN_NO_STR,
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ret = pim_process_no_join_prune_cmd(vty);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
-DEFPY (ipv6_pim_spt_switchover_infinity,
- ipv6_pim_spt_switchover_infinity_cmd,
- "ipv6 pim spt-switchover infinity-and-beyond",
- IPV6_STR
- PIM_STR
+DEFPY (pim6_spt_switchover_infinity,
+ pim6_spt_switchover_infinity_cmd,
+ "spt-switchover infinity-and-beyond",
"SPT-Switchover\n"
"Never switch to SPT Tree\n")
{
return pim_process_spt_switchover_infinity_cmd(vty);
}
+DEFPY_ATTR(ipv6_spt_switchover_infinity,
+ ipv6_pim_spt_switchover_infinity_cmd,
+ "ipv6 pim spt-switchover infinity-and-beyond",
+ IPV6_STR
+ PIM_STR
+ "SPT-Switchover\n"
+ "Never switch to SPT Tree\n",
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
-DEFPY (ipv6_pim_spt_switchover_infinity_plist,
- ipv6_pim_spt_switchover_infinity_plist_cmd,
- "ipv6 pim spt-switchover infinity-and-beyond prefix-list PREFIXLIST6_NAME$plist",
- IPV6_STR
- PIM_STR
+ ret = pim_process_spt_switchover_infinity_cmd(vty);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
+
+DEFPY (pim6_spt_switchover_infinity_plist,
+ pim6_spt_switchover_infinity_plist_cmd,
+ "spt-switchover infinity-and-beyond prefix-list PREFIXLIST6_NAME$plist",
"SPT-Switchover\n"
"Never switch to SPT Tree\n"
"Prefix-List to control which groups to switch\n"
@@ -87,25 +249,104 @@ DEFPY (ipv6_pim_spt_switchover_infinity_plist,
{
return pim_process_spt_switchover_prefixlist_cmd(vty, plist);
}
+DEFPY_ATTR(ipv6_spt_switchover_infinity_plist,
+ ipv6_pim_spt_switchover_infinity_plist_cmd,
+ "ipv6 pim spt-switchover infinity-and-beyond prefix-list PREFIXLIST6_NAME$plist",
+ IPV6_STR
+ PIM_STR
+ "SPT-Switchover\n"
+ "Never switch to SPT Tree\n"
+ "Prefix-List to control which groups to switch\n"
+ "Prefix-List name\n",
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ret = pim_process_spt_switchover_prefixlist_cmd(vty, plist);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
-DEFPY (no_ipv6_pim_spt_switchover_infinity,
- no_ipv6_pim_spt_switchover_infinity_cmd,
- "no ipv6 pim spt-switchover infinity-and-beyond",
+DEFPY (no_pim6_spt_switchover_infinity,
+ no_pim6_spt_switchover_infinity_cmd,
+ "no spt-switchover infinity-and-beyond",
NO_STR
- IPV6_STR
- PIM_STR
"SPT_Switchover\n"
"Never switch to SPT Tree\n")
{
return pim_process_no_spt_switchover_cmd(vty);
}
+DEFPY_ATTR(no_ipv6_pim_spt_switchover_infinity,
+ no_ipv6_pim_spt_switchover_infinity_cmd,
+ "no ipv6 pim spt-switchover infinity-and-beyond",
+ NO_STR
+ IPV6_STR
+ PIM_STR
+ "SPT_Switchover\n"
+ "Never switch to SPT Tree\n",
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ret = pim_process_no_spt_switchover_cmd(vty);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
-DEFPY (no_ipv6_pim_spt_switchover_infinity_plist,
- no_ipv6_pim_spt_switchover_infinity_plist_cmd,
- "no ipv6 pim spt-switchover infinity-and-beyond prefix-list PREFIXLIST6_NAME",
+DEFPY (no_pim6_spt_switchover_infinity_plist,
+ no_pim6_spt_switchover_infinity_plist_cmd,
+ "no spt-switchover infinity-and-beyond prefix-list PREFIXLIST6_NAME",
NO_STR
- IPV6_STR
- PIM_STR
"SPT_Switchover\n"
"Never switch to SPT Tree\n"
"Prefix-List to control which groups to switch\n"
@@ -113,100 +354,453 @@ DEFPY (no_ipv6_pim_spt_switchover_infinity_plist,
{
return pim_process_no_spt_switchover_cmd(vty);
}
+DEFPY_ATTR(no_ipv6_pim_spt_switchover_infinity_plist,
+ no_ipv6_pim_spt_switchover_infinity_plist_cmd,
+ "no ipv6 pim spt-switchover infinity-and-beyond prefix-list PREFIXLIST6_NAME",
+ NO_STR
+ IPV6_STR
+ PIM_STR
+ "SPT_Switchover\n"
+ "Never switch to SPT Tree\n"
+ "Prefix-List to control which groups to switch\n"
+ "Prefix-List name\n",
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
-DEFPY (ipv6_pim_packets,
- ipv6_pim_packets_cmd,
- "ipv6 pim packets (1-255)",
- IPV6_STR
- PIM_STR
+ ret = pim_process_no_spt_switchover_cmd(vty);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
+
+DEFPY (pim6_packets,
+ pim6_packets_cmd,
+ "packets (1-255)",
"packets to process at one time per fd\n"
"Number of packets\n")
{
return pim_process_pim_packet_cmd(vty, packets_str);
}
+DEFPY_ATTR(ipv6_pim_packets,
+ ipv6_pim_packets_cmd,
+ "ipv6 pim packets (1-255)",
+ IPV6_STR
+ PIM_STR
+ "packets to process at one time per fd\n"
+ "Number of packets\n",
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ret = pim_process_pim_packet_cmd(vty, packets_str);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
-DEFPY (no_ipv6_pim_packets,
- no_ipv6_pim_packets_cmd,
- "no ipv6 pim packets [(1-255)]",
+DEFPY (no_pim6_packets,
+ no_pim6_packets_cmd,
+ "no packets [(1-255)]",
NO_STR
- IPV6_STR
- PIM_STR
"packets to process at one time per fd\n"
IGNORED_IN_NO_STR)
{
return pim_process_no_pim_packet_cmd(vty);
}
+DEFPY_ATTR(no_ipv6_pim_packets,
+ no_ipv6_pim_packets_cmd,
+ "no ipv6 pim packets [(1-255)]",
+ NO_STR
+ IPV6_STR
+ PIM_STR
+ "packets to process at one time per fd\n"
+ IGNORED_IN_NO_STR,
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
-DEFPY (ipv6_pim_keep_alive,
- ipv6_pim_keep_alive_cmd,
- "ipv6 pim keep-alive-timer (1-65535)$kat",
- IPV6_STR
- PIM_STR
+ ret = pim_process_no_pim_packet_cmd(vty);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
+
+DEFPY (pim6_keep_alive,
+ pim6_keep_alive_cmd,
+ "keep-alive-timer (1-65535)$kat",
"Keep alive Timer\n"
"Seconds\n")
{
return pim_process_keepalivetimer_cmd(vty, kat_str);
}
+DEFPY_ATTR(ipv6_pim_keep_alive,
+ ipv6_pim_keep_alive_cmd,
+ "ipv6 pim keep-alive-timer (1-65535)$kat",
+ IPV6_STR
+ PIM_STR
+ "Keep alive Timer\n"
+ "Seconds\n",
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ret = pim_process_keepalivetimer_cmd(vty, kat_str);
-DEFPY (no_ipv6_pim_keep_alive,
- no_ipv6_pim_keep_alive_cmd,
- "no ipv6 pim keep-alive-timer [(1-65535)]",
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
+
+DEFPY (no_pim6_keep_alive,
+ no_pim6_keep_alive_cmd,
+ "no keep-alive-timer [(1-65535)]",
NO_STR
- IPV6_STR
- PIM_STR
"Keep alive Timer\n"
IGNORED_IN_NO_STR)
{
return pim_process_no_keepalivetimer_cmd(vty);
}
+DEFPY_ATTR(no_ipv6_pim_keep_alive,
+ no_ipv6_pim_keep_alive_cmd,
+ "no ipv6 pim keep-alive-timer [(1-65535)]",
+ NO_STR
+ IPV6_STR
+ PIM_STR
+ "Keep alive Timer\n"
+ IGNORED_IN_NO_STR,
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
-DEFPY (ipv6_pim_rp_keep_alive,
- ipv6_pim_rp_keep_alive_cmd,
- "ipv6 pim rp keep-alive-timer (1-65535)$kat",
- IPV6_STR
- PIM_STR
+ ret = pim_process_no_keepalivetimer_cmd(vty);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
+
+DEFPY (pim6_rp_keep_alive,
+ pim6_rp_keep_alive_cmd,
+ "rp keep-alive-timer (1-65535)$kat",
"Rendezvous Point\n"
"Keep alive Timer\n"
"Seconds\n")
{
return pim_process_rp_kat_cmd(vty, kat_str);
}
+DEFPY_ATTR(ipv6_pim_rp_keep_alive,
+ ipv6_pim_rp_keep_alive_cmd,
+ "ipv6 pim rp keep-alive-timer (1-65535)$kat",
+ IPV6_STR
+ PIM_STR
+ "Rendezvous Point\n"
+ "Keep alive Timer\n"
+ "Seconds\n",
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ret = pim_process_rp_kat_cmd(vty, kat_str);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
-DEFPY (no_ipv6_pim_rp_keep_alive,
- no_ipv6_pim_rp_keep_alive_cmd,
- "no ipv6 pim rp keep-alive-timer [(1-65535)]",
+DEFPY (no_pim6_rp_keep_alive,
+ no_pim6_rp_keep_alive_cmd,
+ "no rp keep-alive-timer [(1-65535)]",
NO_STR
- IPV6_STR
- PIM_STR
"Rendezvous Point\n"
"Keep alive Timer\n"
IGNORED_IN_NO_STR)
{
return pim_process_no_rp_kat_cmd(vty);
}
+DEFPY_ATTR(no_ipv6_pim_rp_keep_alive,
+ no_ipv6_pim_rp_keep_alive_cmd,
+ "no ipv6 pim rp keep-alive-timer [(1-65535)]",
+ NO_STR
+ IPV6_STR
+ PIM_STR
+ "Rendezvous Point\n"
+ "Keep alive Timer\n"
+ IGNORED_IN_NO_STR,
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ret = pim_process_no_rp_kat_cmd(vty);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
-DEFPY (ipv6_pim_register_suppress,
- ipv6_pim_register_suppress_cmd,
- "ipv6 pim register-suppress-time (1-65535)$rst",
- IPV6_STR
- PIM_STR
+DEFPY (pim6_register_suppress,
+ pim6_register_suppress_cmd,
+ "register-suppress-time (1-65535)$rst",
"Register Suppress Timer\n"
"Seconds\n")
{
return pim_process_register_suppress_cmd(vty, rst_str);
}
+DEFPY_ATTR(ipv6_pim_register_suppress,
+ ipv6_pim_register_suppress_cmd,
+ "ipv6 pim register-suppress-time (1-65535)$rst",
+ IPV6_STR
+ PIM_STR
+ "Register Suppress Timer\n"
+ "Seconds\n",
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ret = pim_process_register_suppress_cmd(vty, rst_str);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
-DEFPY (no_ipv6_pim_register_suppress,
- no_ipv6_pim_register_suppress_cmd,
- "no ipv6 pim register-suppress-time [(1-65535)]",
+ return ret;
+}
+
+DEFPY (no_pim6_register_suppress,
+ no_pim6_register_suppress_cmd,
+ "no register-suppress-time [(1-65535)]",
NO_STR
- IPV6_STR
- PIM_STR
"Register Suppress Timer\n"
IGNORED_IN_NO_STR)
{
return pim_process_no_register_suppress_cmd(vty);
}
+DEFPY_ATTR(no_ipv6_pim_register_suppress,
+ no_ipv6_pim_register_suppress_cmd,
+ "no ipv6 pim register-suppress-time [(1-65535)]",
+ NO_STR
+ IPV6_STR
+ PIM_STR
+ "Register Suppress Timer\n"
+ IGNORED_IN_NO_STR,
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ret = pim_process_no_register_suppress_cmd(vty);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
DEFPY (interface_ipv6_pim,
interface_ipv6_pim_cmd,
@@ -405,11 +999,9 @@ DEFPY (interface_no_ipv6_mroute,
source_str);
}
-DEFPY (ipv6_pim_rp,
- ipv6_pim_rp_cmd,
- "ipv6 pim rp X:X::X:X$rp [X:X::X:X/M]$gp",
- IPV6_STR
- PIM_STR
+DEFPY (pim6_rp,
+ pim6_rp_cmd,
+ "rp X:X::X:X$rp [X:X::X:X/M]$gp",
"Rendezvous Point\n"
"ipv6 address of RP\n"
"Group Address range to cover\n")
@@ -418,13 +1010,53 @@ DEFPY (ipv6_pim_rp,
return pim_process_rp_cmd(vty, rp_str, group_str);
}
+DEFPY_ATTR(ipv6_pim_rp,
+ ipv6_pim_rp_cmd,
+ "ipv6 pim rp X:X::X:X$rp [X:X::X:X/M]$gp",
+ IPV6_STR
+ PIM_STR
+ "Rendezvous Point\n"
+ "ipv6 address of RP\n"
+ "Group Address range to cover\n",
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *group_str = (gp_str) ? gp_str : "FF00::0/8";
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ret = pim_process_rp_cmd(vty, rp_str, group_str);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
-DEFPY (no_ipv6_pim_rp,
- no_ipv6_pim_rp_cmd,
- "no ipv6 pim rp X:X::X:X$rp [X:X::X:X/M]$gp",
+DEFPY (no_pim6_rp,
+ no_pim6_rp_cmd,
+ "no rp X:X::X:X$rp [X:X::X:X/M]$gp",
NO_STR
- IPV6_STR
- PIM_STR
"Rendezvous Point\n"
"ipv6 address of RP\n"
"Group Address range to cover\n")
@@ -433,12 +1065,53 @@ DEFPY (no_ipv6_pim_rp,
return pim_process_no_rp_cmd(vty, rp_str, group_str);
}
+DEFPY_ATTR(no_ipv6_pim_rp,
+ no_ipv6_pim_rp_cmd,
+ "no ipv6 pim rp X:X::X:X$rp [X:X::X:X/M]$gp",
+ NO_STR
+ IPV6_STR
+ PIM_STR
+ "Rendezvous Point\n"
+ "ipv6 address of RP\n"
+ "Group Address range to cover\n",
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *group_str = (gp_str) ? gp_str : "FF00::0/8";
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
-DEFPY (ipv6_pim_rp_prefix_list,
- ipv6_pim_rp_prefix_list_cmd,
- "ipv6 pim rp X:X::X:X$rp prefix-list PREFIXLIST6_NAME$plist",
- IPV6_STR
- PIM_STR
+ ret = pim_process_no_rp_cmd(vty, rp_str, group_str);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
+
+DEFPY (pim6_rp_prefix_list,
+ pim6_rp_prefix_list_cmd,
+ "rp X:X::X:X$rp prefix-list PREFIXLIST6_NAME$plist",
"Rendezvous Point\n"
"ipv6 address of RP\n"
"group prefix-list filter\n"
@@ -446,13 +1119,53 @@ DEFPY (ipv6_pim_rp_prefix_list,
{
return pim_process_rp_plist_cmd(vty, rp_str, plist);
}
+DEFPY_ATTR(ipv6_pim_rp_prefix_list,
+ ipv6_pim_rp_prefix_list_cmd,
+ "ipv6 pim rp X:X::X:X$rp prefix-list PREFIXLIST6_NAME$plist",
+ IPV6_STR
+ PIM_STR
+ "Rendezvous Point\n"
+ "ipv6 address of RP\n"
+ "group prefix-list filter\n"
+ "Name of a prefix-list\n",
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ret = pim_process_rp_plist_cmd(vty, rp_str, plist);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
-DEFPY (no_ipv6_pim_rp_prefix_list,
- no_ipv6_pim_rp_prefix_list_cmd,
- "no ipv6 pim rp X:X::X:X$rp prefix-list PREFIXLIST6_NAME$plist",
+DEFPY (no_pim6_rp_prefix_list,
+ no_pim6_rp_prefix_list_cmd,
+ "no rp X:X::X:X$rp prefix-list PREFIXLIST6_NAME$plist",
NO_STR
- IPV6_STR
- PIM_STR
"Rendezvous Point\n"
"ipv6 address of RP\n"
"group prefix-list filter\n"
@@ -460,6 +1173,49 @@ DEFPY (no_ipv6_pim_rp_prefix_list,
{
return pim_process_no_rp_plist_cmd(vty, rp_str, plist);
}
+DEFPY_ATTR(no_ipv6_pim_rp_prefix_list,
+ no_ipv6_pim_rp_prefix_list_cmd,
+ "no ipv6 pim rp X:X::X:X$rp prefix-list PREFIXLIST6_NAME$plist",
+ NO_STR
+ IPV6_STR
+ PIM_STR
+ "Rendezvous Point\n"
+ "ipv6 address of RP\n"
+ "group prefix-list filter\n"
+ "Name of a prefix-list\n",
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ret = pim_process_no_rp_plist_cmd(vty, rp_str, plist);
+
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
DEFPY (ipv6_pim_bsm,
ipv6_pim_bsm_cmd,
@@ -503,10 +1259,9 @@ DEFPY (no_ipv6_pim_ucast_bsm,
return pim_process_no_unicast_bsm_cmd(vty);
}
-DEFPY (ipv6_ssmpingd,
- ipv6_ssmpingd_cmd,
- "ipv6 ssmpingd [X:X::X:X]$source",
- IPV6_STR
+DEFPY (pim6_ssmpingd,
+ pim6_ssmpingd_cmd,
+ "ssmpingd [X:X::X:X]$source",
CONF_SSMPINGD_STR
"Source address\n")
{
@@ -514,61 +1269,151 @@ DEFPY (ipv6_ssmpingd,
return pim_process_ssmpingd_cmd(vty, NB_OP_CREATE, src_str);
}
+DEFPY_ATTR(ipv6_ssmpingd,
+ ipv6_ssmpingd_cmd,
+ "ipv6 ssmpingd [X:X::X:X]$source",
+ IPV6_STR
+ CONF_SSMPINGD_STR
+ "Source address\n",
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
+{
+ int ret;
+ const char *src_str = (source_str) ? source_str : "::";
+ const char *vrfname;
+ char xpath[XPATH_MAXLEN];
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ ret = pim_process_ssmpingd_cmd(vty, NB_OP_CREATE, src_str);
-DEFPY (no_ipv6_ssmpingd,
- no_ipv6_ssmpingd_cmd,
- "no ipv6 ssmpingd [X:X::X:X]$source",
- NO_STR
- IPV6_STR
- CONF_SSMPINGD_STR
- "Source address\n")
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
+
+ return ret;
+}
+
+DEFPY (no_pim6_ssmpingd,
+ no_pim6_ssmpingd_cmd,
+ "no ssmpingd [X:X::X:X]$source",
+ NO_STR
+ CONF_SSMPINGD_STR
+ "Source address\n")
{
const char *src_str = (source_str) ? source_str : "::";
return pim_process_ssmpingd_cmd(vty, NB_OP_DESTROY, src_str);
}
-
-DEFPY (interface_ipv6_mld_join,
- interface_ipv6_mld_join_cmd,
- "ipv6 mld join X:X::X:X$group [X:X::X:X$source]",
- IPV6_STR
- IFACE_MLD_STR
- "MLD join multicast group\n"
- "Multicast group address\n"
- "Source address\n")
+DEFPY_ATTR(no_ipv6_ssmpingd,
+ no_ipv6_ssmpingd_cmd,
+ "no ipv6 ssmpingd [X:X::X:X]$source",
+ NO_STR
+ IPV6_STR
+ CONF_SSMPINGD_STR
+ "Source address\n",
+ CMD_ATTR_HIDDEN | CMD_ATTR_DEPRECATED)
{
+ int ret;
+ const char *src_str = (source_str) ? source_str : "::";
+ const char *vrfname;
char xpath[XPATH_MAXLEN];
-
- if (!IN6_IS_ADDR_MULTICAST(&group)) {
- vty_out(vty, "Invalid Multicast Address\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (source_str) {
- if (IPV6_ADDR_SAME(&source, &in6addr_any)) {
- vty_out(vty, "Bad source address %s\n", source_str);
+ int orig_node = -1;
+
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname) {
+ snprintf(xpath, sizeof(xpath), FRR_PIM_VRF_XPATH,
+ "frr-pim:pimd", "pim", vrfname, FRR_PIM_AF_XPATH_VAL);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (nb_cli_apply_changes_clear_pending(vty, NULL) ==
+ CMD_SUCCESS) {
+ orig_node = vty->node;
+ VTY_PUSH_XPATH(PIM6_NODE, xpath);
+ } else {
return CMD_WARNING_CONFIG_FAILED;
}
- } else
- source_str = "::";
+ } else {
+ vty_out(vty, "%% Failed to determine vrf name\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- snprintf(xpath, sizeof(xpath), FRR_GMP_JOIN_XPATH, "frr-routing:ipv6",
- group_str, source_str);
+ ret = pim_process_ssmpingd_cmd(vty, NB_OP_DESTROY, src_str);
- nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
+ if (orig_node != -1) {
+ vty->node = orig_node;
+ vty->xpath_index--;
+ }
- return nb_cli_apply_changes(vty, NULL);
+ return ret;
}
-DEFPY (interface_no_ipv6_mld_join,
- interface_no_ipv6_mld_join_cmd,
- "no ipv6 mld join X:X::X:X$group [X:X::X:X$source]",
+DEFPY_YANG_HIDDEN (interface_ipv6_mld_join,
+ interface_ipv6_mld_join_cmd,
+ "[no] ipv6 mld join X:X::X:X$grp [X:X::X:X]$src",
+ NO_STR
+ IPV6_STR
+ IFACE_MLD_STR
+ "MLD join multicast group\n"
+ "Multicast group address\n"
+ "Source address\n")
+{
+ nb_cli_enqueue_change(vty, ".", (!no ? NB_OP_CREATE : NB_OP_DESTROY),
+ NULL);
+ return nb_cli_apply_changes(vty, FRR_GMP_JOIN_GROUP_XPATH,
+ "frr-routing:ipv6", grp_str,
+ (src_str ? src_str : "::"));
+}
+ALIAS (interface_ipv6_mld_join,
+ interface_ipv6_mld_join_group_cmd,
+ "[no] ipv6 mld join-group X:X::X:X$grp [X:X::X:X]$src",
NO_STR
IPV6_STR
IFACE_MLD_STR
"MLD join multicast group\n"
"Multicast group address\n"
+ "Source address\n");
+
+DEFPY_YANG (interface_ipv6_mld_static_group,
+ interface_ipv6_mld_static_group_cmd,
+ "[no] ipv6 mld static-group X:X::X:X$grp [X:X::X:X]$src",
+ NO_STR
+ IPV6_STR
+ IFACE_MLD_STR
+ "Static multicast group\n"
+ "Multicast group address\n"
+ "Source address\n")
+{
+ nb_cli_enqueue_change(vty, ".", (!no ? NB_OP_CREATE : NB_OP_DESTROY),
+ NULL);
+ return nb_cli_apply_changes(vty, FRR_GMP_STATIC_GROUP_XPATH,
+ "frr-routing:ipv6", grp_str,
+ (src_str ? src_str : "::"));
+}
+
+DEFPY (interface_no_ipv6_mld_static_group,
+ interface_no_ipv6_mld_static_group_cmd,
+ "no ipv6 mld static-group X:X::X:X$group [X:X::X:X$source]",
+ NO_STR
+ IPV6_STR
+ IFACE_MLD_STR
+ "Static multicast group\n"
+ "Multicast group address\n"
"Source address\n")
{
char xpath[XPATH_MAXLEN];
@@ -581,8 +1426,8 @@ DEFPY (interface_no_ipv6_mld_join,
} else
source_str = "::";
- snprintf(xpath, sizeof(xpath), FRR_GMP_JOIN_XPATH, "frr-routing:ipv6",
- group_str, source_str);
+ snprintf(xpath, sizeof(xpath), FRR_GMP_STATIC_GROUP_XPATH,
+ "frr-routing:ipv6", group_str, source_str);
nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
@@ -1733,12 +2578,16 @@ DEFPY (debug_pimv6_bsm,
return CMD_SUCCESS;
}
-void pim_cmd_init(void)
-{
- if_cmd_init(pim_interface_config_write);
-
- install_node(&debug_node);
+struct cmd_node pim6_node = {
+ .name = "pim6",
+ .node = PIM6_NODE,
+ .parent_node = CONFIG_NODE,
+ .prompt = "%s(config-pim6)# ",
+ .config_write = pim_router_config_write,
+};
+static void pim_install_deprecated(void)
+{
install_element(CONFIG_NODE, &ipv6_pim_joinprune_time_cmd);
install_element(CONFIG_NODE, &no_ipv6_pim_joinprune_time_cmd);
install_element(CONFIG_NODE, &ipv6_pim_spt_switchover_infinity_cmd);
@@ -1753,6 +2602,60 @@ 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(CONFIG_NODE, &ipv6_pim_rp_cmd);
+ install_element(VRF_NODE, &ipv6_pim_rp_cmd);
+ install_element(CONFIG_NODE, &no_ipv6_pim_rp_cmd);
+ install_element(VRF_NODE, &no_ipv6_pim_rp_cmd);
+ install_element(CONFIG_NODE, &ipv6_pim_rp_prefix_list_cmd);
+ install_element(VRF_NODE, &ipv6_pim_rp_prefix_list_cmd);
+ install_element(CONFIG_NODE, &no_ipv6_pim_rp_prefix_list_cmd);
+ install_element(VRF_NODE, &no_ipv6_pim_rp_prefix_list_cmd);
+ install_element(CONFIG_NODE, &ipv6_ssmpingd_cmd);
+ install_element(VRF_NODE, &ipv6_ssmpingd_cmd);
+ install_element(CONFIG_NODE, &no_ipv6_ssmpingd_cmd);
+ install_element(VRF_NODE, &no_ipv6_ssmpingd_cmd);
+}
+
+void pim_cmd_init(void)
+{
+ if_cmd_init(pim_interface_config_write);
+
+ install_node(&debug_node);
+
+ pim_install_deprecated();
+
+ install_element(CONFIG_NODE, &router_pim6_cmd);
+ install_element(CONFIG_NODE, &no_router_pim6_cmd);
+
+ install_node(&pim6_node);
+ install_default(PIM6_NODE);
+
+ install_element(PIM6_NODE, &pim6_joinprune_time_cmd);
+ install_element(PIM6_NODE, &no_pim6_joinprune_time_cmd);
+ install_element(PIM6_NODE, &pim6_spt_switchover_infinity_cmd);
+ install_element(PIM6_NODE, &pim6_spt_switchover_infinity_plist_cmd);
+ install_element(PIM6_NODE, &no_pim6_spt_switchover_infinity_cmd);
+ install_element(PIM6_NODE, &no_pim6_spt_switchover_infinity_plist_cmd);
+ install_element(PIM6_NODE, &pim6_packets_cmd);
+ install_element(PIM6_NODE, &no_pim6_packets_cmd);
+ install_element(PIM6_NODE, &pim6_keep_alive_cmd);
+ install_element(PIM6_NODE, &no_pim6_keep_alive_cmd);
+ install_element(PIM6_NODE, &pim6_rp_keep_alive_cmd);
+ install_element(PIM6_NODE, &no_pim6_rp_keep_alive_cmd);
+ install_element(PIM6_NODE, &pim6_register_suppress_cmd);
+ install_element(PIM6_NODE, &no_pim6_register_suppress_cmd);
+ install_element(PIM6_NODE, &pim6_rp_cmd);
+ install_element(PIM6_NODE, &no_pim6_rp_cmd);
+ install_element(PIM6_NODE, &pim6_rp_prefix_list_cmd);
+ install_element(PIM6_NODE, &no_pim6_rp_prefix_list_cmd);
+ install_element(PIM6_NODE, &pim6_ssmpingd_cmd);
+ install_element(PIM6_NODE, &no_pim6_ssmpingd_cmd);
+
+ install_element(CONFIG_NODE, &ipv6_mld_group_watermark_cmd);
+ install_element(VRF_NODE, &ipv6_mld_group_watermark_cmd);
+ install_element(CONFIG_NODE, &no_ipv6_mld_group_watermark_cmd);
+ install_element(VRF_NODE, &no_ipv6_mld_group_watermark_cmd);
+
install_element(INTERFACE_NODE, &interface_ipv6_pim_cmd);
install_element(INTERFACE_NODE, &interface_no_ipv6_pim_cmd);
install_element(INTERFACE_NODE, &interface_ipv6_pim_drprio_cmd);
@@ -1764,10 +2667,8 @@ void pim_cmd_init(void)
install_element(INTERFACE_NODE, &interface_no_ipv6_pim_ssm_cmd);
install_element(INTERFACE_NODE, &interface_ipv6_pim_sm_cmd);
install_element(INTERFACE_NODE, &interface_no_ipv6_pim_sm_cmd);
- install_element(INTERFACE_NODE,
- &interface_ipv6_pim_boundary_oil_cmd);
- install_element(INTERFACE_NODE,
- &interface_no_ipv6_pim_boundary_oil_cmd);
+ install_element(INTERFACE_NODE, &interface_ipv6_pim_boundary_oil_cmd);
+ install_element(INTERFACE_NODE, &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 */
@@ -1775,31 +2676,17 @@ void pim_cmd_init(void)
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);
- install_element(VRF_NODE, &no_ipv6_pim_rp_cmd);
- install_element(CONFIG_NODE, &ipv6_pim_rp_prefix_list_cmd);
- install_element(VRF_NODE, &ipv6_pim_rp_prefix_list_cmd);
- install_element(CONFIG_NODE, &no_ipv6_pim_rp_prefix_list_cmd);
- install_element(VRF_NODE, &no_ipv6_pim_rp_prefix_list_cmd);
- install_element(CONFIG_NODE, &ipv6_ssmpingd_cmd);
- install_element(VRF_NODE, &ipv6_ssmpingd_cmd);
- install_element(CONFIG_NODE, &no_ipv6_ssmpingd_cmd);
- install_element(VRF_NODE, &no_ipv6_ssmpingd_cmd);
+
install_element(INTERFACE_NODE, &interface_ipv6_mld_cmd);
install_element(INTERFACE_NODE, &interface_no_ipv6_mld_cmd);
install_element(INTERFACE_NODE, &interface_ipv6_mld_join_cmd);
- install_element(INTERFACE_NODE, &interface_no_ipv6_mld_join_cmd);
+ install_element(INTERFACE_NODE, &interface_ipv6_mld_join_group_cmd);
+ install_element(INTERFACE_NODE, &interface_ipv6_mld_static_group_cmd);
install_element(INTERFACE_NODE, &interface_ipv6_mld_version_cmd);
install_element(INTERFACE_NODE, &interface_no_ipv6_mld_version_cmd);
install_element(INTERFACE_NODE, &interface_ipv6_mld_query_interval_cmd);
install_element(INTERFACE_NODE,
&interface_no_ipv6_mld_query_interval_cmd);
- install_element(CONFIG_NODE, &ipv6_mld_group_watermark_cmd);
- install_element(VRF_NODE, &ipv6_mld_group_watermark_cmd);
- install_element(CONFIG_NODE, &no_ipv6_mld_group_watermark_cmd);
- install_element(VRF_NODE, &no_ipv6_mld_group_watermark_cmd);
install_element(INTERFACE_NODE,
&interface_ipv6_mld_query_max_response_time_cmd);
install_element(INTERFACE_NODE,