diff --git a/lib/prefix.c b/lib/prefix.c index cde8677cf086..d7a800d1caa6 100644 --- a/lib/prefix.c +++ b/lib/prefix.c @@ -1304,6 +1304,17 @@ void prefix_linkstate_ptr_free(struct prefix *p) p->u.prefix_linkstate.ptr = (uintptr_t)NULL; } +void prefix_flowspec_ptr_free(struct prefix *p) +{ + void *temp; + + if (!p || p->family != AF_FLOWSPEC || !p->u.prefix_flowspec.ptr) + return; + + temp = (void *)p->u.prefix_flowspec.ptr; + XFREE(MTYPE_PREFIX_FLOWSPEC, temp); + p->u.prefix_flowspec.ptr = (uintptr_t)NULL; +} struct prefix *prefix_new(void) { diff --git a/lib/prefix.h b/lib/prefix.h index f1aff436899c..c8dc9d7d8bc9 100644 --- a/lib/prefix.h +++ b/lib/prefix.h @@ -438,6 +438,7 @@ static inline afi_t prefix_afi(union prefixconstptr pu) extern unsigned int prefix_bit(const uint8_t *prefix, const uint16_t bit_index); extern void prefix_linkstate_ptr_free(struct prefix *p); +extern void prefix_flowspec_ptr_free(struct prefix *p); extern struct prefix *prefix_new(void); extern void prefix_free(struct prefix **p); diff --git a/lib/table.c b/lib/table.c index dbfc3f8b915d..3a1cbc52d688 100644 --- a/lib/table.c +++ b/lib/table.c @@ -333,6 +333,8 @@ struct route_node *route_node_get(struct route_table *table, if (family2afi(p->family) == AFI_LINKSTATE) prefix_linkstate_ptr_free(p); + else if (p->family == AF_FLOWSPEC) + prefix_flowspec_ptr_free(p); return new; }