mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 11:18:43 +00:00
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:
parent
662ba9e6f0
commit
822d3c858c
@ -1242,8 +1242,10 @@ static int pim_msdp_peer_comp(const void *p1, const void *p2)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/************************** Mesh group management **************************/
|
/************************** 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 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)) {
|
if (!mg || mg->mbr_cnt || (mg->src_ip.s_addr != INADDR_ANY)) {
|
||||||
return;
|
return;
|
||||||
@ -1258,8 +1260,7 @@ static void pim_msdp_mg_free(struct pim_instance *pim, struct pim_msdp_mg *mg)
|
|||||||
if (mg->mbr_list)
|
if (mg->mbr_list)
|
||||||
list_delete_and_null(&mg->mbr_list);
|
list_delete_and_null(&mg->mbr_list);
|
||||||
|
|
||||||
XFREE(MTYPE_PIM_MSDP_MG, mg);
|
XFREE(MTYPE_PIM_MSDP_MG, pim->msdp.mg);
|
||||||
pim->msdp.mg = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct pim_msdp_mg *pim_msdp_mg_new(const char *mesh_group_name)
|
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;
|
mg->src_ip.s_addr = INADDR_ANY;
|
||||||
|
|
||||||
/* free up the mesh-group */
|
/* free up the mesh-group */
|
||||||
pim_msdp_mg_free(pim, mg);
|
pim_msdp_mg_free(pim);
|
||||||
return PIM_MSDP_ERR_NONE;
|
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);
|
pim_msdp_mg_mbr_do_del(mg, mbr);
|
||||||
/* if there are no references to the mg free it */
|
/* 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;
|
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;
|
mg->src_ip.s_addr = INADDR_ANY;
|
||||||
pim_msdp_mg_src_do_del(pim);
|
pim_msdp_mg_src_do_del(pim);
|
||||||
/* if there are no references to the mg free it */
|
/* 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;
|
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 */
|
/* XXX: stop listener and delete all peer sessions */
|
||||||
|
|
||||||
|
pim_msdp_mg_free(pim);
|
||||||
|
|
||||||
if (pim->msdp.peer_hash) {
|
if (pim->msdp.peer_hash) {
|
||||||
hash_clean(pim->msdp.peer_hash, NULL);
|
hash_clean(pim->msdp.peer_hash, NULL);
|
||||||
hash_free(pim->msdp.peer_hash);
|
hash_free(pim->msdp.peer_hash);
|
||||||
|
Loading…
Reference in New Issue
Block a user