summaryrefslogtreecommitdiff
path: root/pimd/pim_msdp.c
diff options
context:
space:
mode:
Diffstat (limited to 'pimd/pim_msdp.c')
-rw-r--r--pimd/pim_msdp.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/pimd/pim_msdp.c b/pimd/pim_msdp.c
index b42092a464..7336cdfef8 100644
--- a/pimd/pim_msdp.c
+++ b/pimd/pim_msdp.c
@@ -423,6 +423,7 @@ void pim_msdp_sa_ref(struct pim_instance *pim, struct pim_msdp_peer *mp,
sa->sg_str);
}
/* send an immediate SA update to peers */
+ sa->rp = pim->msdp.originator_id;
pim_msdp_pkt_sa_tx_one(sa);
}
sa->flags &= ~PIM_MSDP_SAF_STALE;
@@ -721,10 +722,18 @@ static int pim_msdp_sa_comp(const void *p1, const void *p2)
/* XXX: this can use a bit of refining and extensions */
bool pim_msdp_peer_rpf_check(struct pim_msdp_peer *mp, struct in_addr rp)
{
+ struct pim_nexthop nexthop;
+
if (mp->peer.s_addr == rp.s_addr) {
return true;
}
+ /* check if the MSDP peer is the nexthop for the RP */
+ if (pim_nexthop_lookup(mp->pim, &nexthop, rp, 0)
+ && nexthop.mrib_nexthop_addr.u.prefix4.s_addr == mp->peer.s_addr) {
+ return true;
+ }
+
return false;
}