diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c index 817c644406..a6b25511c8 100644 --- a/pimd/pim_iface.c +++ b/pimd/pim_iface.c @@ -103,7 +103,6 @@ static void *if_list_clean(struct pim_interface *pim_ifp) struct pim_interface *pim_if_new(struct interface *ifp, int igmp, int pim) { struct pim_interface *pim_ifp; - struct vrf *vrf; zassert(ifp); zassert(!ifp->info); @@ -115,8 +114,7 @@ struct pim_interface *pim_if_new(struct interface *ifp, int igmp, int pim) } pim_ifp->options = 0; - vrf = vrf_info_lookup(ifp->vrf_id); - pim_ifp->pim = vrf->info; + pim_ifp->pim = pim_get_pim_instance(ifp->vrf_id); pim_ifp->mroute_vif_index = -1; pim_ifp->igmp_version = IGMP_DEFAULT_VERSION; diff --git a/pimd/pimd.c b/pimd/pimd.c index 5b5ba068c5..b687a943a8 100644 --- a/pimd/pimd.c +++ b/pimd/pimd.c @@ -170,6 +170,16 @@ void pim_prefix_list_update(struct prefix_list *plist) pim_upstream_spt_prefix_list_update(plist); } +struct pim_instance *pim_get_pim_instance(vrf_id_t vrf_id) +{ + struct vrf *vrf = vrf_lookup_by_id(vrf_id); + + if (vrf) + return vrf->info; + + return NULL; +} + static void pim_instance_terminate(struct pim_instance *pim) { /* Traverse and cleanup rpf_hash */ diff --git a/pimd/pimd.h b/pimd/pimd.h index b96d9d4b9d..06ca4343f6 100644 --- a/pimd/pimd.h +++ b/pimd/pimd.h @@ -270,4 +270,6 @@ extern void pim_route_map_terminate(void); void pim_vrf_init(void); void pim_prefix_list_update(struct prefix_list *plist); +struct pim_instance *pim_get_pim_instance(vrf_id_t vrf_id); + #endif /* PIMD_H */