mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-16 10:38:05 +00:00
pimd: (*, G) Prune should be processed even if the RP in packet is not RP(G)
RCA: We are ignoring (*,G) prune when the RP in packet is not RP(G) Fix: According to RFC 4601 Section 4.5.2: Received Prune(*,G) messages are processed even if the RP in the message does not match RP(G). We have allowed starg prune to be processed in the scenario. Signed-off-by: Saravanan K <saravanank@vmware.com>
This commit is contained in:
parent
7f2ccbe562
commit
5c777da81f
@ -140,18 +140,19 @@ static void recv_prune(struct interface *ifp, struct pim_neighbor *neigh,
|
|||||||
|
|
||||||
if ((source_flags & PIM_RPT_BIT_MASK)
|
if ((source_flags & PIM_RPT_BIT_MASK)
|
||||||
&& (source_flags & PIM_WILDCARD_BIT_MASK)) {
|
&& (source_flags & PIM_WILDCARD_BIT_MASK)) {
|
||||||
struct pim_rpf *rp = RP(pim_ifp->pim, sg->grp);
|
/*
|
||||||
|
* RFC 4601 Section 4.5.2:
|
||||||
|
* Received Prune(*,G) messages are processed even if the
|
||||||
|
* RP in the message does not match RP(G).
|
||||||
|
*/
|
||||||
|
if (PIM_DEBUG_PIM_TRACE) {
|
||||||
|
char received_rp[INET_ADDRSTRLEN];
|
||||||
|
|
||||||
if (!rp) {
|
pim_inet4_dump("<received?>", sg->src, received_rp,
|
||||||
if (PIM_DEBUG_PIM_TRACE)
|
sizeof(received_rp));
|
||||||
zlog_debug(
|
zlog_debug("%s: Prune received with RP(%s) for %pSG4",
|
||||||
"%s: RP for %pSG4 completely failed lookup",
|
__func__, received_rp, sg);
|
||||||
__func__, sg);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
// Ignoring Prune *,G's at the moment.
|
|
||||||
if (sg->src.s_addr != rp->rpf_addr.u.prefix4.s_addr)
|
|
||||||
return;
|
|
||||||
|
|
||||||
sg->src.s_addr = INADDR_ANY;
|
sg->src.s_addr = INADDR_ANY;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user