mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-09 11:24:42 +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)
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user