pimd: Cleanup msdp.mg on shutdown

When shutting down PIM, ensure that hte pim->msdp.mg is cleaned up.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2018-08-02 23:07:08 -04:00
parent 662ba9e6f0
commit 822d3c858c

View File

@ -1242,8 +1242,10 @@ static int pim_msdp_peer_comp(const void *p1, const void *p2)
}
/************************** Mesh group management **************************/
static void pim_msdp_mg_free(struct pim_instance *pim, struct pim_msdp_mg *mg)
static void pim_msdp_mg_free(struct pim_instance *pim)
{
struct pim_msdp_mg *mg = pim->msdp.mg;
/* If the mesh-group has valid member or src_ip don't delete it */
if (!mg || mg->mbr_cnt || (mg->src_ip.s_addr != INADDR_ANY)) {
return;
@ -1258,8 +1260,7 @@ static void pim_msdp_mg_free(struct pim_instance *pim, struct pim_msdp_mg *mg)
if (mg->mbr_list)
list_delete_and_null(&mg->mbr_list);
XFREE(MTYPE_PIM_MSDP_MG, mg);
pim->msdp.mg = NULL;
XFREE(MTYPE_PIM_MSDP_MG, pim->msdp.mg);
}
static struct pim_msdp_mg *pim_msdp_mg_new(const char *mesh_group_name)
@ -1299,7 +1300,7 @@ enum pim_msdp_err pim_msdp_mg_del(struct pim_instance *pim,
mg->src_ip.s_addr = INADDR_ANY;
/* free up the mesh-group */
pim_msdp_mg_free(pim, mg);
pim_msdp_mg_free(pim);
return PIM_MSDP_ERR_NONE;
}
@ -1438,7 +1439,7 @@ enum pim_msdp_err pim_msdp_mg_mbr_del(struct pim_instance *pim,
pim_msdp_mg_mbr_do_del(mg, mbr);
/* if there are no references to the mg free it */
pim_msdp_mg_free(pim, mg);
pim_msdp_mg_free(pim);
return PIM_MSDP_ERR_NONE;
}
@ -1475,7 +1476,7 @@ enum pim_msdp_err pim_msdp_mg_src_del(struct pim_instance *pim,
mg->src_ip.s_addr = INADDR_ANY;
pim_msdp_mg_src_do_del(pim);
/* if there are no references to the mg free it */
pim_msdp_mg_free(pim, mg);
pim_msdp_mg_free(pim);
}
return PIM_MSDP_ERR_NONE;
}
@ -1598,6 +1599,8 @@ void pim_msdp_exit(struct pim_instance *pim)
/* XXX: stop listener and delete all peer sessions */
pim_msdp_mg_free(pim);
if (pim->msdp.peer_hash) {
hash_clean(pim->msdp.peer_hash, NULL);
hash_free(pim->msdp.peer_hash);