]> git.proxmox.com Git - mirror_frr.git/commitdiff
bfdd: fix multiple VRF handling
authorRafael Zalamena <rzalamena@opensourcerouting.org>
Wed, 20 Nov 2019 18:10:10 +0000 (15:10 -0300)
committerRafael Zalamena <rzalamena@opensourcerouting.org>
Wed, 20 Nov 2019 18:10:10 +0000 (15:10 -0300)
Use the interface VRF information instead of relying on the VRF specific
socket information.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
bfdd/bfd.c

index 948a94007d12465596f9e3201a9b47911650764f..875b41e7f7ec6cedcc9b19b6cb3fd757007fd76a 100644 (file)
@@ -400,12 +400,21 @@ struct bfd_session *ptm_bfd_sess_find(struct bfd_pkt *cp,
        if (cp->discrs.remote_discr)
                return bfd_find_disc(peer, ntohl(cp->discrs.remote_discr));
 
-       /* Search for session without using discriminator. */
-       ifp = if_lookup_by_index(ifindex, vrfid);
-       if (vrfid != VRF_DEFAULT)
-               vrf = vrf_lookup_by_id(vrfid);
-       else
-               vrf = NULL;
+       /*
+        * Search for session without using discriminator.
+        *
+        * XXX: we can't trust `vrfid` because the VRF handling is not
+        * properly implemented. Meanwhile we should use the interface
+        * VRF to find out which one it belongs.
+        */
+       ifp = if_lookup_by_index_all_vrf(ifindex);
+       if (ifp == NULL) {
+               if (vrfid != VRF_DEFAULT)
+                       vrf = vrf_lookup_by_id(vrfid);
+               else
+                       vrf = NULL;
+       } else
+               vrf = vrf_lookup_by_id(ifp->vrf_id);
 
        gen_bfd_key(&key, peer, local, is_mhop, ifp ? ifp->name : NULL,
                    vrf ? vrf->name : VRF_DEFAULT_NAME);