]> 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>
Fri, 22 Nov 2019 11:37:18 +0000 (08:37 -0300)
Use the interface VRF information instead of relying on the VRF specific
socket information.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
(cherry picked from commit c05c48621c94582bce6ddb6e3f316f8a010c9bb0)

bfdd/bfd.c

index cc171f2ebfd405d6cb4711258565ef78debf6960..fc09397c36e0080c593abfea21a0acfd13373a4b 100644 (file)
@@ -403,10 +403,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);
-
-       vrf = vrf_lookup_by_id(vrfid);
+       /*
+        * 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);