From 896b2044c7ddcf9eced7668575265491b3e703c9 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Sun, 21 May 2017 12:12:30 -0400 Subject: [PATCH] pimd: Lookup loopback based upon vrf correctly. The vrf loopback ip address should be associated with the vrf device for vrf's, else use the loopback. Signed-off-by: Donald Sharp --- pimd/pim_iface.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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); } -- 2.39.5