mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-09 20:15:08 +00:00
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:
parent
1bee0d4bd7
commit
c05c48621c
21
bfdd/bfd.c
21
bfdd/bfd.c
@ -400,12 +400,21 @@ struct bfd_session *ptm_bfd_sess_find(struct bfd_pkt *cp,
|
|||||||
if (cp->discrs.remote_discr)
|
if (cp->discrs.remote_discr)
|
||||||
return bfd_find_disc(peer, ntohl(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.
|
||||||
if (vrfid != VRF_DEFAULT)
|
*
|
||||||
vrf = vrf_lookup_by_id(vrfid);
|
* XXX: we can't trust `vrfid` because the VRF handling is not
|
||||||
else
|
* properly implemented. Meanwhile we should use the interface
|
||||||
vrf = NULL;
|
* 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,
|
gen_bfd_key(&key, peer, local, is_mhop, ifp ? ifp->name : NULL,
|
||||||
vrf ? vrf->name : VRF_DEFAULT_NAME);
|
vrf ? vrf->name : VRF_DEFAULT_NAME);
|
||||||
|
Loading…
Reference in New Issue
Block a user