diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c index cc7e03935d..d3b5aa3a59 100644 --- a/pimd/pim_iface.c +++ b/pimd/pim_iface.c @@ -903,6 +903,7 @@ struct in_addr pim_find_primary_addr(struct interface *ifp) int v4_addrs = 0; int v6_addrs = 0; struct pim_interface *pim_ifp = ifp->info; + struct vrf *vrf = vrf_lookup_by_id(ifp->vrf_id); if (pim_ifp && PIM_INADDR_ISNOT_ANY(pim_ifp->update_source)) { return pim_ifp->update_source; @@ -940,7 +941,11 @@ struct in_addr pim_find_primary_addr(struct interface *ifp) if (!v4_addrs && v6_addrs && !if_is_loopback(ifp)) { struct interface *lo_ifp; // DBS - Come back and check here - lo_ifp = if_lookup_by_name("lo", pimg->vrf_id); + if (ifp->vrf_id == VRF_DEFAULT) + lo_ifp = if_lookup_by_name("lo", vrf->vrf_id); + else + lo_ifp = if_lookup_by_name(vrf->name, vrf->vrf_id); + if (lo_ifp) return pim_find_primary_addr(lo_ifp); }