zebra: add type to nhg_prot_del API for sanity check

Add type to the nhg_proto_del API params for sanity checking
that the types of the route sent by the proto matches the type
found with the ID.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
This commit is contained in:
Stephen Worley 2020-09-15 13:42:49 -04:00
parent 54a701e4c1
commit aaa42e056f
3 changed files with 12 additions and 3 deletions

View File

@ -1746,7 +1746,7 @@ static void zread_nhg_del(ZAPI_HANDLER_ARGS)
* Delete the received nhg id
*/
nhe = zebra_nhg_proto_del(id);
nhe = zebra_nhg_proto_del(id, proto);
if (nhe) {
zebra_nhg_decrement_ref(nhe);

View File

@ -2853,7 +2853,7 @@ struct nhg_hash_entry *zebra_nhg_proto_add(uint32_t id, int type,
}
/* Delete NHE from upper level proto, caller must decrement ref */
struct nhg_hash_entry *zebra_nhg_proto_del(uint32_t id)
struct nhg_hash_entry *zebra_nhg_proto_del(uint32_t id, int type)
{
struct nhg_hash_entry *nhe;
@ -2866,6 +2866,15 @@ struct nhg_hash_entry *zebra_nhg_proto_del(uint32_t id)
return NULL;
}
if (type != nhe->type) {
if (IS_ZEBRA_DEBUG_NHG)
zlog_debug(
"%s: id %u, type %s mismatch, sent by %s, ignoring",
__func__, id, zebra_route_string(nhe->type),
zebra_route_string(type));
return NULL;
}
if (CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_PROTO_RELEASED)) {
if (IS_ZEBRA_DEBUG_NHG)
zlog_debug("%s: id %u, already released", __func__, id);

View File

@ -294,7 +294,7 @@ struct nhg_hash_entry *zebra_nhg_proto_add(uint32_t id, int type,
*
* Caller must decrement ref with zebra_nhg_decrement_ref() when done.
*/
struct nhg_hash_entry *zebra_nhg_proto_del(uint32_t id);
struct nhg_hash_entry *zebra_nhg_proto_del(uint32_t id, int type);
/*
* Remove specific by proto NHGs.