From bf157b9263050b25228e66164c1540bf823b960a Mon Sep 17 00:00:00 2001 From: Stephen Worley Date: Mon, 21 Jun 2021 12:53:25 -0400 Subject: [PATCH] zebra: fix ifp pointer for groups/recursives At some point we broke the ifp pointer for nhe->ifp such that it was pointing to an interface even in groups/recurisve instances. Add checks here to make it again so that we only set the ifp pointer if it is a fully resolved singleton NHE. Signed-off-by: Stephen Worley --- zebra/zebra_nhg.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/zebra/zebra_nhg.c b/zebra/zebra_nhg.c index af86263a16..46d5164127 100644 --- a/zebra/zebra_nhg.c +++ b/zebra/zebra_nhg.c @@ -453,8 +453,13 @@ static void *zebra_nhg_hash_alloc(void *arg) /* Mark duplicate nexthops in a group at creation time. */ nexthop_group_mark_duplicates(&(nhe->nhg)); - /* Add the ifp now if it's not a group or recursive and has ifindex */ - if (nhe->nhg.nexthop && nhe->nhg.nexthop->ifindex) { + /* + * Add the ifp now if it's not a group or recursive and has ifindex. + * + * A proto-owned ID is always a group. + */ + if (!PROTO_OWNED(nhe) && nhe->nhg.nexthop && !nhe->nhg.nexthop->next + && !nhe->nhg.nexthop->resolved && nhe->nhg.nexthop->ifindex) { struct interface *ifp = NULL; ifp = if_lookup_by_index(nhe->nhg.nexthop->ifindex,