summaryrefslogtreecommitdiff
path: root/pimd/pim_cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'pimd/pim_cmd.c')
-rw-r--r--pimd/pim_cmd.c667
1 files changed, 170 insertions, 497 deletions
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c
index c01cfec88e..90aa15beee 100644
--- a/pimd/pim_cmd.c
+++ b/pimd/pim_cmd.c
@@ -3000,15 +3000,14 @@ static void pim_show_nexthop(struct pim_instance *pim, struct vty *vty)
/* Display the bsm database details */
static void pim_show_bsm_db(struct pim_instance *pim, struct vty *vty, bool uj)
{
- struct listnode *bsmnode;
int count = 0;
int fragment = 1;
- struct bsm_info *bsm;
+ struct bsm_frag *bsfrag;
json_object *json = NULL;
json_object *json_group = NULL;
json_object *json_row = NULL;
- count = pim->global_scope.bsm_list->count;
+ count = bsm_frags_count(pim->global_scope.bsm_frags);
if (uj) {
json = json_object_new_object();
@@ -3019,7 +3018,7 @@ static void pim_show_bsm_db(struct pim_instance *pim, struct vty *vty, bool uj)
vty_out(vty, "\n");
}
- for (ALL_LIST_ELEMENTS_RO(pim->global_scope.bsm_list, bsmnode, bsm)) {
+ frr_each (bsm_frags, pim->global_scope.bsm_frags, bsfrag) {
char grp_str[PREFIX_STRLEN];
char rp_str[INET_ADDRSTRLEN];
char bsr_str[INET_ADDRSTRLEN];
@@ -3032,8 +3031,8 @@ static void pim_show_bsm_db(struct pim_instance *pim, struct vty *vty, bool uj)
uint32_t len = 0;
uint32_t frag_rp_cnt = 0;
- buf = bsm->bsm;
- len = bsm->size;
+ buf = bsfrag->data;
+ len = bsfrag->size;
/* skip pim header */
buf += PIM_MSG_HEADER_LEN;
@@ -3160,7 +3159,6 @@ static void pim_show_group_rp_mappings_info(struct pim_instance *pim,
struct vty *vty, bool uj)
{
struct bsgrp_node *bsgrp;
- struct listnode *rpnode;
struct bsm_rpinfo *bsm_rp;
struct route_node *rn;
char bsr_str[INET_ADDRSTRLEN];
@@ -3209,42 +3207,33 @@ static void pim_show_group_rp_mappings_info(struct pim_instance *pim,
vty_out(vty, "(ACTIVE)\n");
}
- if (bsgrp->bsrp_list) {
- for (ALL_LIST_ELEMENTS_RO(bsgrp->bsrp_list, rpnode,
- bsm_rp)) {
- char rp_str[INET_ADDRSTRLEN];
+ frr_each (bsm_rpinfos, bsgrp->bsrp_list, bsm_rp) {
+ char rp_str[INET_ADDRSTRLEN];
- pim_inet4_dump("<Rp Address?>",
- bsm_rp->rp_address, rp_str,
- sizeof(rp_str));
+ pim_inet4_dump("<Rp Address?>", bsm_rp->rp_address,
+ rp_str, sizeof(rp_str));
- if (uj) {
- json_row = json_object_new_object();
- json_object_string_add(
- json_row, "Rp Address", rp_str);
- json_object_int_add(
- json_row, "Rp HoldTime",
- bsm_rp->rp_holdtime);
- json_object_int_add(json_row,
- "Rp Priority",
- bsm_rp->rp_prio);
- json_object_int_add(json_row,
- "Hash Val",
- bsm_rp->hash);
- json_object_object_add(
- json_group, rp_str, json_row);
+ if (uj) {
+ json_row = json_object_new_object();
+ json_object_string_add(json_row, "Rp Address",
+ rp_str);
+ json_object_int_add(json_row, "Rp HoldTime",
+ bsm_rp->rp_holdtime);
+ json_object_int_add(json_row, "Rp Priority",
+ bsm_rp->rp_prio);
+ json_object_int_add(json_row, "Hash Val",
+ bsm_rp->hash);
+ json_object_object_add(json_group, rp_str,
+ json_row);
- } else {
- vty_out(vty,
- "%-15s %-15u %-15u %-15u\n",
- rp_str, bsm_rp->rp_prio,
- bsm_rp->rp_holdtime,
- bsm_rp->hash);
- }
+ } else {
+ vty_out(vty, "%-15s %-15u %-15u %-15u\n",
+ rp_str, bsm_rp->rp_prio,
+ bsm_rp->rp_holdtime, bsm_rp->hash);
}
- if (!bsgrp->bsrp_list->count && !uj)
- vty_out(vty, "Active List is empty.\n");
}
+ if (!bsm_rpinfos_count(bsgrp->bsrp_list) && !uj)
+ vty_out(vty, "Active List is empty.\n");
if (uj) {
json_object_int_add(json_group, "Pending RP count",
@@ -3259,40 +3248,32 @@ static void pim_show_group_rp_mappings_info(struct pim_instance *pim,
"Hash");
}
- if (bsgrp->partial_bsrp_list) {
- for (ALL_LIST_ELEMENTS_RO(bsgrp->partial_bsrp_list,
- rpnode, bsm_rp)) {
- char rp_str[INET_ADDRSTRLEN];
+ frr_each (bsm_rpinfos, bsgrp->partial_bsrp_list, bsm_rp) {
+ char rp_str[INET_ADDRSTRLEN];
- pim_inet4_dump("<Rp Addr?>", bsm_rp->rp_address,
- rp_str, sizeof(rp_str));
+ pim_inet4_dump("<Rp Addr?>", bsm_rp->rp_address, rp_str,
+ sizeof(rp_str));
- if (uj) {
- json_row = json_object_new_object();
- json_object_string_add(
- json_row, "Rp Address", rp_str);
- json_object_int_add(
- json_row, "Rp HoldTime",
- bsm_rp->rp_holdtime);
- json_object_int_add(json_row,
- "Rp Priority",
- bsm_rp->rp_prio);
- json_object_int_add(json_row,
- "Hash Val",
- bsm_rp->hash);
- json_object_object_add(
- json_group, rp_str, json_row);
- } else {
- vty_out(vty,
- "%-15s %-15u %-15u %-15u\n",
- rp_str, bsm_rp->rp_prio,
- bsm_rp->rp_holdtime,
- bsm_rp->hash);
- }
+ if (uj) {
+ json_row = json_object_new_object();
+ json_object_string_add(json_row, "Rp Address",
+ rp_str);
+ json_object_int_add(json_row, "Rp HoldTime",
+ bsm_rp->rp_holdtime);
+ json_object_int_add(json_row, "Rp Priority",
+ bsm_rp->rp_prio);
+ json_object_int_add(json_row, "Hash Val",
+ bsm_rp->hash);
+ json_object_object_add(json_group, rp_str,
+ json_row);
+ } else {
+ vty_out(vty, "%-15s %-15u %-15u %-15u\n",
+ rp_str, bsm_rp->rp_prio,
+ bsm_rp->rp_holdtime, bsm_rp->hash);
}
- if (!bsgrp->partial_bsrp_list->count && !uj)
- vty_out(vty, "Partial List is empty\n");
}
+ if (!bsm_rpinfos_count(bsgrp->partial_bsrp_list) && !uj)
+ vty_out(vty, "Partial List is empty\n");
if (!uj)
vty_out(vty, "\n");
@@ -3847,6 +3828,31 @@ static void clear_interfaces(struct pim_instance *pim)
return CMD_WARNING_CONFIG_FAILED; \
}
+/**
+ * Get current node VRF name.
+ *
+ * NOTE:
+ * In case of failure it will print error message to user.
+ *
+ * \returns name or NULL if failed to get VRF.
+ */
+static const char *pim_cli_get_vrf_name(struct vty *vty)
+{
+ const struct lyd_node *vrf_node;
+
+ /* Not inside any VRF context. */
+ if (vty->xpath_index == 0)
+ return VRF_DEFAULT_NAME;
+
+ vrf_node = yang_dnode_get(vty->candidate_config->dnode, VTY_CURR_XPATH);
+ if (vrf_node == NULL) {
+ vty_out(vty, "%% Failed to get vrf dnode in configuration\n");
+ return NULL;
+ }
+
+ return yang_dnode_get_string(vrf_node, "./name");
+}
+
DEFUN (clear_ip_interfaces,
clear_ip_interfaces_cmd,
"clear ip interfaces [vrf NAME]",
@@ -4083,7 +4089,7 @@ static void clear_pim_bsr_db(struct pim_instance *pim)
pim->global_scope.current_bsr_first_ts = 0;
pim->global_scope.current_bsr_last_ts = 0;
pim->global_scope.bsm_frag_tag = 0;
- list_delete_all_node(pim->global_scope.bsm_list);
+ pim_bsm_frags_free(&pim->global_scope);
pim_bs_timer_stop(&pim->global_scope);
@@ -6925,25 +6931,13 @@ DEFUN (ip_pim_spt_switchover_infinity,
"SPT-Switchover\n"
"Never switch to SPT Tree\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char spt_plist_xpath[XPATH_MAXLEN];
char spt_action_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
-
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(spt_plist_xpath, sizeof(spt_plist_xpath),
FRR_PIM_AF_XPATH, "frr-pim:pimd", "pim", vrfname,
@@ -6976,25 +6970,13 @@ DEFUN (ip_pim_spt_switchover_infinity_plist,
"Prefix-List to control which groups to switch\n"
"Prefix-List name\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char spt_plist_xpath[XPATH_MAXLEN];
char spt_action_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
-
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(spt_plist_xpath, sizeof(spt_plist_xpath),
FRR_PIM_AF_XPATH, "frr-pim:pimd", "pim", vrfname,
@@ -7025,25 +7007,13 @@ DEFUN (no_ip_pim_spt_switchover_infinity,
"SPT_Switchover\n"
"Never switch to SPT Tree\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char spt_plist_xpath[XPATH_MAXLEN];
char spt_action_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
-
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(spt_plist_xpath, sizeof(spt_plist_xpath),
FRR_PIM_AF_XPATH, "frr-pim:pimd", "pim", vrfname,
@@ -7075,25 +7045,13 @@ DEFUN (no_ip_pim_spt_switchover_infinity_plist,
"Prefix-List to control which groups to switch\n"
"Prefix-List name\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char spt_plist_xpath[XPATH_MAXLEN];
char spt_action_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
-
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(spt_plist_xpath, sizeof(spt_plist_xpath),
FRR_PIM_AF_XPATH, "frr-pim:pimd", "pim", vrfname,
@@ -7123,22 +7081,12 @@ DEFPY (pim_register_accept_list,
"Only accept registers from a specific source prefix list\n"
"Prefix-List name\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char reg_alist_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(reg_alist_xpath, sizeof(reg_alist_xpath),
FRR_PIM_AF_XPATH, "frr-pim:pimd", "pim", vrfname,
@@ -7233,22 +7181,12 @@ DEFUN (ip_pim_rp_keep_alive,
"Keep alive Timer\n"
"Seconds\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char rp_ka_timer_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(rp_ka_timer_xpath, sizeof(rp_ka_timer_xpath),
FRR_PIM_XPATH, "frr-pim:pimd", "pim", vrfname);
@@ -7271,26 +7209,16 @@ DEFUN (no_ip_pim_rp_keep_alive,
"Keep alive Timer\n"
"Seconds\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char rp_ka_timer[5];
char rp_ka_timer_xpath[XPATH_MAXLEN];
- snprintf(rp_ka_timer, sizeof(rp_ka_timer), "%d", PIM_KEEPALIVE_PERIOD);
-
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ snprintf(rp_ka_timer, sizeof(rp_ka_timer), "%d",
+ PIM_RP_KEEPALIVE_PERIOD);
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(rp_ka_timer_xpath, sizeof(rp_ka_timer_xpath),
FRR_PIM_XPATH, "frr-pim:pimd", "pim", vrfname);
@@ -7311,22 +7239,12 @@ DEFUN (ip_pim_keep_alive,
"Keep alive Timer\n"
"Seconds\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ka_timer_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ka_timer_xpath, sizeof(ka_timer_xpath), FRR_PIM_XPATH,
"frr-pim:pimd", "pim", vrfname);
@@ -7347,25 +7265,15 @@ DEFUN (no_ip_pim_keep_alive,
"Keep alive Timer\n"
"Seconds\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ka_timer[5];
char ka_timer_xpath[XPATH_MAXLEN];
snprintf(ka_timer, sizeof(ka_timer), "%d", PIM_KEEPALIVE_PERIOD);
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ka_timer_xpath, sizeof(ka_timer_xpath), FRR_PIM_XPATH,
"frr-pim:pimd", "pim", vrfname);
@@ -7447,22 +7355,12 @@ DEFUN (ip_pim_v6_secondary,
"pim multicast routing\n"
"Send v6 secondary addresses\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char send_v6_secondary_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(send_v6_secondary_xpath, sizeof(send_v6_secondary_xpath),
FRR_PIM_AF_XPATH,
@@ -7484,22 +7382,12 @@ DEFUN (no_ip_pim_v6_secondary,
"pim multicast routing\n"
"Send v6 secondary addresses\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char send_v6_secondary_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(send_v6_secondary_xpath, sizeof(send_v6_secondary_xpath),
FRR_PIM_AF_XPATH,
@@ -7522,7 +7410,6 @@ DEFUN (ip_pim_rp,
"ip address of RP\n"
"Group Address range to cover\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
int idx_rp = 3, idx_group = 4;
char rp_group_xpath[XPATH_MAXLEN];
@@ -7558,20 +7445,9 @@ DEFUN (ip_pim_rp,
return CMD_WARNING_CONFIG_FAILED;
}
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
-
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(rp_group_xpath, sizeof(rp_group_xpath),
FRR_PIM_STATIC_RP_XPATH,
@@ -7595,24 +7471,12 @@ DEFUN (ip_pim_rp_prefix_list,
"Name of a prefix-list\n")
{
int idx_rp = 3, idx_plist = 5;
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char rp_plist_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
-
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(rp_plist_xpath, sizeof(rp_plist_xpath),
FRR_PIM_STATIC_RP_XPATH,
@@ -7642,24 +7506,12 @@ DEFUN (no_ip_pim_rp,
char group_list_xpath[XPATH_MAXLEN + 32];
char group_xpath[XPATH_MAXLEN + 64];
char rp_xpath[XPATH_MAXLEN];
- const struct lyd_node *vrf_dnode;
const char *vrfname;
const struct lyd_node *group_dnode;
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
-
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(rp_xpath, sizeof(rp_xpath), FRR_PIM_STATIC_RP_XPATH,
"frr-pim:pimd", "pim", vrfname, "frr-routing:ipv4",
@@ -7702,23 +7554,13 @@ DEFUN (no_ip_pim_rp_prefix_list,
int idx_plist = 6;
char rp_xpath[XPATH_MAXLEN];
char plist_xpath[XPATH_MAXLEN];
- const struct lyd_node *vrf_dnode;
const char *vrfname;
const struct lyd_node *plist_dnode;
const char *plist;
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(rp_xpath, sizeof(rp_xpath), FRR_PIM_STATIC_RP_XPATH,
"frr-pim:pimd", "pim", vrfname, "frr-routing:ipv4",
@@ -7755,22 +7597,12 @@ DEFUN (ip_pim_ssm_prefix_list,
"group range prefix-list filter\n"
"Name of a prefix-list\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ssm_plist_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ssm_plist_xpath, sizeof(ssm_plist_xpath), FRR_PIM_AF_XPATH,
"frr-pim:pimd", "pim", vrfname, "frr-routing:ipv4");
@@ -7790,22 +7622,12 @@ DEFUN (no_ip_pim_ssm_prefix_list,
"Source Specific Multicast\n"
"group range prefix-list filter\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ssm_plist_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ssm_plist_xpath, sizeof(ssm_plist_xpath),
FRR_PIM_AF_XPATH,
@@ -7827,27 +7649,14 @@ DEFUN (no_ip_pim_ssm_prefix_list_name,
"group range prefix-list filter\n"
"Name of a prefix-list\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
const struct lyd_node *ssm_plist_dnode;
char ssm_plist_xpath[XPATH_MAXLEN];
const char *ssm_plist_name;
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
-
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
-
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ssm_plist_xpath, sizeof(ssm_plist_xpath),
FRR_PIM_AF_XPATH,
@@ -8001,22 +7810,12 @@ DEFUN (ip_ssmpingd,
{
int idx_ipv4 = 2;
const char *source_str = (argc == 3) ? argv[idx_ipv4]->arg : "0.0.0.0";
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ssmpingd_ip_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ssmpingd_ip_xpath, sizeof(ssmpingd_ip_xpath),
FRR_PIM_AF_XPATH,
@@ -8038,24 +7837,14 @@ DEFUN (no_ip_ssmpingd,
CONF_SSMPINGD_STR
"Source address\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
int idx_ipv4 = 3;
const char *source_str = (argc == 4) ? argv[idx_ipv4]->arg : "0.0.0.0";
char ssmpingd_ip_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ssmpingd_ip_xpath, sizeof(ssmpingd_ip_xpath),
FRR_PIM_AF_XPATH,
@@ -8076,22 +7865,12 @@ DEFUN (ip_pim_ecmp,
"pim multicast routing\n"
"Enable PIM ECMP \n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ecmp_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ecmp_xpath, sizeof(ecmp_xpath), FRR_PIM_XPATH,
"frr-pim:pimd", "pim", vrfname);
@@ -8109,22 +7888,12 @@ DEFUN (no_ip_pim_ecmp,
"pim multicast routing\n"
"Disable PIM ECMP \n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ecmp_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ecmp_xpath, sizeof(ecmp_xpath), FRR_PIM_XPATH,
"frr-pim:pimd", "pim", vrfname);
@@ -8143,23 +7912,13 @@ DEFUN (ip_pim_ecmp_rebalance,
"Enable PIM ECMP \n"
"Enable PIM ECMP Rebalance\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ecmp_xpath[XPATH_MAXLEN];
char ecmp_rebalance_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ecmp_xpath, sizeof(ecmp_xpath), FRR_PIM_XPATH,
"frr-pim:pimd", "pim", vrfname);
@@ -8185,22 +7944,12 @@ DEFUN (no_ip_pim_ecmp_rebalance,
"Disable PIM ECMP \n"
"Disable PIM ECMP Rebalance\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ecmp_rebalance_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ecmp_rebalance_xpath, sizeof(ecmp_rebalance_xpath),
FRR_PIM_XPATH,
@@ -9882,23 +9631,13 @@ ALIAS(no_ip_pim_bfd, no_ip_pim_bfd_param_cmd,
"Source address for TCP connection\n"
"local ip address\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char temp_xpath[XPATH_MAXLEN];
char msdp_peer_source_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(msdp_peer_source_xpath, sizeof(msdp_peer_source_xpath),
FRR_PIM_AF_XPATH,
@@ -9924,23 +9663,13 @@ DEFUN (no_ip_msdp_peer,
"Delete MSDP peer\n"
"peer ip address\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char msdp_peer_xpath[XPATH_MAXLEN];
char temp_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(msdp_peer_xpath, sizeof(msdp_peer_xpath),
FRR_PIM_AF_XPATH,
@@ -9966,23 +9695,13 @@ DEFUN (ip_msdp_mesh_group_member,
"mesh group member\n"
"peer ip address\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char msdp_mesh_group_name_xpath[XPATH_MAXLEN];
char msdp_mesh_group_member_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(msdp_mesh_group_name_xpath, sizeof(msdp_mesh_group_name_xpath),
FRR_PIM_AF_XPATH,
@@ -10015,7 +9734,6 @@ DEFUN (no_ip_msdp_mesh_group_member,
"mesh group member\n"
"peer ip address\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char pim_af_xpath[XPATH_MAXLEN];
char mesh_group_xpath[XPATH_MAXLEN + 32];
@@ -10026,18 +9744,9 @@ DEFUN (no_ip_msdp_mesh_group_member,
const char *mesh_group_name;
const struct lyd_node *member_dnode;
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(pim_af_xpath, sizeof(pim_af_xpath), FRR_PIM_AF_XPATH,
"frr-pim:pimd", "pim", vrfname, "frr-routing:ipv4");
@@ -10103,23 +9812,13 @@ DEFUN (ip_msdp_mesh_group_source,
"mesh group local address\n"
"source ip address for the TCP connection\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char msdp_mesh_source_ip_xpath[XPATH_MAXLEN];
char msdp_mesh_group_name_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(msdp_mesh_group_name_xpath, sizeof(msdp_mesh_group_name_xpath),
FRR_PIM_AF_XPATH,
@@ -10152,7 +9851,6 @@ DEFUN (no_ip_msdp_mesh_group_source,
"mesh group source\n"
"mesh group local address\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char msdp_mesh_xpath[XPATH_MAXLEN];
char source_xpath[XPATH_MAXLEN];
@@ -10160,18 +9858,9 @@ DEFUN (no_ip_msdp_mesh_group_source,
char mesh_group_name_xpath[XPATH_MAXLEN];
const char *mesh_group_name;
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(msdp_mesh_xpath, sizeof(msdp_mesh_xpath),
FRR_PIM_AF_XPATH,
@@ -10226,24 +9915,14 @@ DEFUN (no_ip_msdp_mesh_group,
"Delete MSDP mesh-group\n"
"mesh group name")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
const char *mesh_group_name;
char xpath[XPATH_MAXLEN];
char msdp_mesh_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
if (argc == 5) {
snprintf(xpath, sizeof(xpath), FRR_PIM_AF_XPATH, "frr-pim:pimd",
@@ -11412,9 +11091,7 @@ void pim_cmd_init(void)
install_element(CONFIG_NODE, &ip_pim_ssm_prefix_list_cmd);
install_element(VRF_NODE, &ip_pim_ssm_prefix_list_cmd);
install_element(CONFIG_NODE, &ip_pim_register_suppress_cmd);
- install_element(VRF_NODE, &ip_pim_register_suppress_cmd);
install_element(CONFIG_NODE, &no_ip_pim_register_suppress_cmd);
- install_element(VRF_NODE, &no_ip_pim_register_suppress_cmd);
install_element(CONFIG_NODE, &ip_pim_spt_switchover_infinity_cmd);
install_element(VRF_NODE, &ip_pim_spt_switchover_infinity_cmd);
install_element(CONFIG_NODE, &ip_pim_spt_switchover_infinity_plist_cmd);
@@ -11427,9 +11104,7 @@ void pim_cmd_init(void)
install_element(CONFIG_NODE, &pim_register_accept_list_cmd);
install_element(VRF_NODE, &pim_register_accept_list_cmd);
install_element(CONFIG_NODE, &ip_pim_joinprune_time_cmd);
- install_element(VRF_NODE, &ip_pim_joinprune_time_cmd);
install_element(CONFIG_NODE, &no_ip_pim_joinprune_time_cmd);
- install_element(VRF_NODE, &no_ip_pim_joinprune_time_cmd);
install_element(CONFIG_NODE, &ip_pim_keep_alive_cmd);
install_element(VRF_NODE, &ip_pim_keep_alive_cmd);
install_element(CONFIG_NODE, &ip_pim_rp_keep_alive_cmd);
@@ -11439,9 +11114,7 @@ void pim_cmd_init(void)
install_element(CONFIG_NODE, &no_ip_pim_rp_keep_alive_cmd);
install_element(VRF_NODE, &no_ip_pim_rp_keep_alive_cmd);
install_element(CONFIG_NODE, &ip_pim_packets_cmd);
- install_element(VRF_NODE, &ip_pim_packets_cmd);
install_element(CONFIG_NODE, &no_ip_pim_packets_cmd);
- install_element(VRF_NODE, &no_ip_pim_packets_cmd);
install_element(CONFIG_NODE, &ip_pim_v6_secondary_cmd);
install_element(VRF_NODE, &ip_pim_v6_secondary_cmd);
install_element(CONFIG_NODE, &no_ip_pim_v6_secondary_cmd);