]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: Free up routemap name memory on vrf deletion event
authorDonald Sharp <sharpd@nvidia.com>
Fri, 9 Dec 2022 13:51:34 +0000 (08:51 -0500)
committerDonald Sharp <sharpd@nvidia.com>
Fri, 9 Dec 2022 14:47:06 +0000 (09:47 -0500)
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
zebra/zebra_routemap.c
zebra/zebra_routemap.h
zebra/zebra_vrf.c

index 13d1995d58943be4c685e3951b696bdb9b6a0b3d..066ef8a8d05bf0bb80da9a2ac317d76dad910d3f 100644 (file)
@@ -1818,6 +1818,23 @@ static void zebra_route_map_event(const char *rmap_name)
        route_map_notify_dependencies(rmap_name, RMAP_EVENT_MATCH_ADDED);
 }
 
+void zebra_routemap_vrf_delete(struct zebra_vrf *zvrf)
+{
+       afi_t afi;
+       uint8_t type;
+
+       for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+               for (type = 0; type <= ZEBRA_ROUTE_MAX; type++) {
+                       if (PROTO_RM_NAME(zvrf, afi, type))
+                               XFREE(MTYPE_ROUTE_MAP_NAME,
+                                     PROTO_RM_NAME(zvrf, afi, type));
+                       if (NHT_RM_NAME(zvrf, afi, type))
+                               XFREE(MTYPE_ROUTE_MAP_NAME,
+                                     NHT_RM_NAME(zvrf, afi, type));
+               }
+       }
+}
+
 /* ip protocol configuration write function */
 void zebra_routemap_config_write_protocol(struct vty *vty,
                                          struct zebra_vrf *zvrf)
index 3f58e14e10e1e0de69bad5a6f68a092033449882..02b01fa53a0cd0103177f0c0ef3e55a7ad7a80d5 100644 (file)
@@ -50,6 +50,8 @@ zebra_nht_route_map_check(afi_t afi, int client_proto, const struct prefix *p,
                          struct zebra_vrf *zvrf, struct route_entry *,
                          struct nexthop *nexthop);
 
+extern void zebra_routemap_vrf_delete(struct zebra_vrf *zvrf);
+
 #ifdef __cplusplus
 }
 #endif
index c99aa2e8ffff88a1c8226b0828bd063d13a79bb2..be5e91495f90c3ab4c713c5711c2493308d2176e 100644 (file)
@@ -268,6 +268,7 @@ static int zebra_vrf_delete(struct vrf *vrf)
 
        /* Cleanup EVPN states for vrf */
        zebra_vxlan_vrf_delete(zvrf);
+       zebra_routemap_vrf_delete(zvrf);
 
        list_delete_all_node(zvrf->rid_all_sorted_list);
        list_delete_all_node(zvrf->rid_lo_sorted_list);