pimd: if_lookup_by_index can fail handle it appropriately

It is possible that a if_lookup_by_index can return NULL
ensure that we handle this appropriately.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2020-04-16 20:26:00 -04:00
parent 50cf5243c1
commit 85948e7bfa
2 changed files with 15 additions and 11 deletions

View File

@ -788,7 +788,11 @@ int pim_parse_nexthop_update(ZAPI_CALLBACK_ARGS)
case NEXTHOP_TYPE_IPV6_IFINDEX:
ifp1 = if_lookup_by_index(nexthop->ifindex,
pim->vrf_id);
nbr = pim_neighbor_find_if(ifp1);
if (!ifp1)
nbr = NULL;
else
nbr = pim_neighbor_find_if(ifp1);
/* Overwrite with Nbr address as NH addr */
if (nbr)
nexthop->gate.ipv4 = nbr->source_addr;

View File

@ -285,17 +285,17 @@ static int zclient_read_nexthop(struct pim_instance *pim,
* If we are sending v6 secondary assume we receive v6
* secondary
*/
if (pim->send_v6_secondary)
nbr = pim_neighbor_find_by_secondary(
if_lookup_by_index(
nexthop_tab[num_ifindex]
.ifindex,
nexthop_vrf_id),
&p);
struct interface *ifp = if_lookup_by_index(
nexthop_tab[num_ifindex].ifindex,
nexthop_vrf_id);
if (!ifp)
nbr = NULL;
else if (pim->send_v6_secondary)
nbr = pim_neighbor_find_by_secondary(ifp, &p);
else
nbr = pim_neighbor_find_if(if_lookup_by_index(
nexthop_tab[num_ifindex].ifindex,
nexthop_vrf_id));
nbr = pim_neighbor_find_if(ifp);
if (nbr) {
nexthop_tab[num_ifindex].nexthop_addr.family =
AF_INET;