From 851cb2e5de721cefea64f252c9045bb9a7ff5f93 Mon Sep 17 00:00:00 2001 From: Sarita Patra Date: Wed, 25 Nov 2020 03:00:06 -0800 Subject: [PATCH] pimd: mesh group not removed when configured for multiple groups Issue: Configure msdp mesh mg1 for 2 groups. ip msdp mesh-group mg1 member 1.1.1.1 ip msdp mesh-group mg1 member 1.1.1.2 Remove mg1 for 1.1.1.1 no ip msdp mesh-group mg1 member 1.1.1.1 mg1 for 1.1.1.1 still present. This is fixed. Signed-off-by: Sarita Patra --- pimd/pim_cmd.c | 48 +++++++++++++++++++++--------------------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index c72c691260..6d01cc73d7 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -9835,11 +9835,12 @@ DEFUN (no_ip_msdp_mesh_group_member, { const struct lyd_node *vrf_dnode; const char *vrfname; - char temp_xpath[XPATH_MAXLEN]; - char mesh_group_xpath[XPATH_MAXLEN]; - char group_member_xpath[XPATH_MAXLEN]; - char source_xpath[XPATH_MAXLEN]; - char mesh_group_name_xpath[XPATH_MAXLEN]; + char pim_af_xpath[XPATH_MAXLEN]; + char mesh_group_xpath[XPATH_MAXLEN + 32]; + char group_member_list_xpath[XPATH_MAXLEN + 64]; + char group_member_xpath[XPATH_MAXLEN + 128]; + char source_xpath[XPATH_MAXLEN + 64]; + char mesh_group_name_xpath[XPATH_MAXLEN + 64]; const char *mesh_group_name; const struct lyd_node *member_dnode; @@ -9856,30 +9857,23 @@ DEFUN (no_ip_msdp_mesh_group_member, } else vrfname = VRF_DEFAULT_NAME; - snprintf(mesh_group_xpath, sizeof(mesh_group_xpath), - FRR_PIM_AF_XPATH, + snprintf(pim_af_xpath, sizeof(pim_af_xpath), FRR_PIM_AF_XPATH, "frr-pim:pimd", "pim", vrfname, "frr-routing:ipv4"); - strlcat(mesh_group_xpath, "/msdp-mesh-group", sizeof(mesh_group_xpath)); - snprintf(group_member_xpath, sizeof(group_member_xpath), - FRR_PIM_AF_XPATH, - "frr-pim:pimd", "pim", vrfname, "frr-routing:ipv4"); - snprintf(temp_xpath, sizeof(temp_xpath), - "/msdp-mesh-group/member-ip[.='%s']", argv[6]->arg); - strlcat(group_member_xpath, temp_xpath, sizeof(group_member_xpath)); + snprintf(mesh_group_xpath, sizeof(mesh_group_xpath), + "%s/msdp-mesh-group", pim_af_xpath); + + snprintf(group_member_list_xpath, sizeof(group_member_list_xpath), + "%s/msdp-mesh-group/member-ip", pim_af_xpath); + + snprintf(group_member_xpath, sizeof(group_member_xpath), "%s[.='%s']", + group_member_list_xpath, argv[6]->arg); snprintf(source_xpath, sizeof(source_xpath), - FRR_PIM_AF_XPATH, - "frr-pim:pimd", "pim", vrfname, "frr-routing:ipv4"); - snprintf(temp_xpath, sizeof(temp_xpath), - "/msdp-mesh-group/source-ip"); - strlcat(source_xpath, temp_xpath, sizeof(source_xpath)); + "%s/msdp-mesh-group/source-ip", pim_af_xpath); snprintf(mesh_group_name_xpath, sizeof(mesh_group_name_xpath), - FRR_PIM_AF_XPATH, - "frr-pim:pimd", "pim", vrfname, "frr-routing:ipv4"); - strlcat(mesh_group_name_xpath, "/msdp-mesh-group/mesh-group-name", - sizeof(mesh_group_name_xpath)); + "%s/msdp-mesh-group/mesh-group-name", pim_af_xpath); if (yang_dnode_exists(running_config->dnode, mesh_group_name_xpath) == true) { @@ -9903,12 +9897,12 @@ DEFUN (no_ip_msdp_mesh_group_member, NB_OP_DESTROY, NULL); return nb_cli_apply_changes(vty, NULL); } - nb_cli_enqueue_change(vty, group_member_xpath, - NB_OP_DESTROY, NULL); + nb_cli_enqueue_change(vty, group_member_list_xpath, + NB_OP_DESTROY, argv[6]->arg); return nb_cli_apply_changes(vty, NULL); } - nb_cli_enqueue_change(vty, group_member_xpath, - NB_OP_DESTROY, NULL); + nb_cli_enqueue_change(vty, group_member_list_xpath, + NB_OP_DESTROY, argv[6]->arg); return nb_cli_apply_changes(vty, NULL); } -- 2.39.5