]> git.proxmox.com Git - mirror_frr.git/commitdiff
pimd: Lookup loopback based upon vrf correctly.
authorDonald Sharp <sharpd@cumulusnetworks.com>
Sun, 21 May 2017 16:12:30 +0000 (12:12 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Mon, 24 Jul 2017 17:51:36 +0000 (13:51 -0400)
The vrf loopback ip address should be associated with the
vrf device for vrf's, else use the loopback.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_iface.c

index cc7e03935d5feb982c2855d4345fa0193cca0245..d3b5aa3a59b9b1bfa6d7d3a82a32b3464d445f76 100644 (file)
@@ -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);
        }