diff options
Diffstat (limited to 'pimd/pim_cmd.c')
| -rw-r--r-- | pimd/pim_cmd.c | 667 |
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); |
