diff options
Diffstat (limited to 'pimd/pim_msdp.c')
| -rw-r--r-- | pimd/pim_msdp.c | 9 | 
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;  }  | 
