summaryrefslogtreecommitdiffstats
path: root/pimd/pim_join.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2017-08-03 16:56:30 +0200
committerDonald Sharp <sharpd@cumulusnetworks.com>2017-08-04 00:24:28 +0200
commit8e7a4c6e2b8196751e4ab689bc73d064bbee0e03 (patch)
tree4153bd7f37033027113904e7557f260290b39ab5 /pimd/pim_join.c
parentMerge pull request #901 from qlyoung/style-fix (diff)
downloadfrr-8e7a4c6e2b8196751e4ab689bc73d064bbee0e03.tar.xz
frr-8e7a4c6e2b8196751e4ab689bc73d064bbee0e03.zip
pimd: Lookup S,G ifchannel after we create it
There are situations where we receive a *,G with a S,G,RPT Prune embedded where we do not actually have any S,G yet(MSDP with multiple RP's with the same address). As such since we only need to lookup the S,G ifchannel once, do it after the recv_prune. Ticket: CM-17230 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'pimd/pim_join.c')
-rw-r--r--pimd/pim_join.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/pimd/pim_join.c b/pimd/pim_join.c
index 9796f580c..c60e5a65a 100644
--- a/pimd/pim_join.c
+++ b/pimd/pim_join.c
@@ -306,14 +306,20 @@ int pim_joinprune_recv(struct interface *ifp, struct pim_neighbor *neigh,
return -8;
}
- sg_ch = pim_ifchannel_find(ifp, &sg);
-
buf += addr_offset;
starg_alone = 0;
recv_prune(ifp, neigh, msg_holdtime,
msg_upstream_addr.u.prefix4, &sg,
msg_source_flags);
+ /*
+ * So if we are receiving a S,G,RPT prune
+ * before we have any data for that S,G
+ * We need to retrieve the sg_ch after
+ * we parse the prune.
+ */
+ sg_ch = pim_ifchannel_find(ifp, &sg);
+
/* Received SG-RPT Prune delete oif from specific S,G */
if (starg_ch && sg_ch
&& (msg_source_flags & PIM_RPT_BIT_MASK)