summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_evpn.c19
-rw-r--r--bgpd/bgp_evpn_mh.c6
2 files changed, 25 insertions, 0 deletions
diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c
index ce05005eab..dc15d9c695 100644
--- a/bgpd/bgp_evpn.c
+++ b/bgpd/bgp_evpn.c
@@ -191,6 +191,11 @@ static void vrf_import_rt_free(struct vrf_irt_node *irt)
XFREE(MTYPE_BGP_EVPN_VRF_IMPORT_RT, irt);
}
+static void hash_vrf_import_rt_free(struct vrf_irt_node *irt)
+{
+ XFREE(MTYPE_BGP_EVPN_VRF_IMPORT_RT, irt);
+}
+
/*
* Function to lookup Import RT node - used to map a RT to set of
* VNIs importing routes with that RT.
@@ -281,6 +286,11 @@ static void import_rt_free(struct bgp *bgp, struct irt_node *irt)
XFREE(MTYPE_BGP_EVPN_IMPORT_RT, irt);
}
+static void hash_import_rt_free(struct irt_node *irt)
+{
+ XFREE(MTYPE_BGP_EVPN_IMPORT_RT, irt);
+}
+
/*
* Function to lookup Import RT node - used to map a RT to set of
* VNIs importing routes with that RT.
@@ -5355,6 +5365,11 @@ void bgp_evpn_free(struct bgp *bgp, struct bgpevpn *vpn)
XFREE(MTYPE_BGP_EVPN, vpn);
}
+static void hash_evpn_free(struct bgpevpn *vpn)
+{
+ XFREE(MTYPE_BGP_EVPN, vpn);
+}
+
/*
* Import evpn route from global table to VNI/VRF/ESI.
*/
@@ -5963,12 +5978,16 @@ void bgp_evpn_cleanup(struct bgp *bgp)
(void (*)(struct hash_bucket *, void *))free_vni_entry,
bgp);
+ hash_clean(bgp->import_rt_hash, (void (*)(void *))hash_import_rt_free);
hash_free(bgp->import_rt_hash);
bgp->import_rt_hash = NULL;
+ hash_clean(bgp->vrf_import_rt_hash,
+ (void (*)(void *))hash_vrf_import_rt_free);
hash_free(bgp->vrf_import_rt_hash);
bgp->vrf_import_rt_hash = NULL;
+ hash_clean(bgp->vni_svi_hash, (void (*)(void *))hash_evpn_free);
hash_free(bgp->vni_svi_hash);
bgp->vni_svi_hash = NULL;
hash_free(bgp->vnihash);
diff --git a/bgpd/bgp_evpn_mh.c b/bgpd/bgp_evpn_mh.c
index 95a0c31b55..de63618580 100644
--- a/bgpd/bgp_evpn_mh.c
+++ b/bgpd/bgp_evpn_mh.c
@@ -4548,6 +4548,11 @@ static void bgp_evpn_nh_del(struct bgp_evpn_nh *n)
XFREE(MTYPE_BGP_EVPN_NH, tmp_n);
}
+static void hash_evpn_nh_free(struct bgp_evpn_nh *ben)
+{
+ XFREE(MTYPE_BGP_EVPN_NH, ben);
+}
+
static unsigned int bgp_evpn_nh_hash_keymake(const void *p)
{
const struct bgp_evpn_nh *n = p;
@@ -4612,6 +4617,7 @@ void bgp_evpn_nh_finish(struct bgp *bgp_vrf)
bgp_vrf->evpn_nh_table,
(void (*)(struct hash_bucket *, void *))bgp_evpn_nh_flush_cb,
NULL);
+ hash_clean(bgp_vrf->evpn_nh_table, (void (*)(void *))hash_evpn_nh_free);
hash_free(bgp_vrf->evpn_nh_table);
bgp_vrf->evpn_nh_table = NULL;
}