bfdd: fix multiple VRF handling

Use the interface VRF information instead of relying on the VRF specific
socket information.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
This commit is contained in:
Rafael Zalamena 2019-11-20 15:10:10 -03:00
parent 1bee0d4bd7
commit c05c48621c

View 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);
/*
* 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);