summaryrefslogtreecommitdiff
path: root/pimd/pim_upstream.c
diff options
context:
space:
mode:
authorAnuradha Karuppiah <anuradhak@cumulusnetworks.com>2019-11-15 11:19:53 -0800
committerAnuradha Karuppiah <anuradhak@cumulusnetworks.com>2019-11-15 12:00:29 -0800
commita749b9004136bd7c550c54f8f21d1e84b1569c20 (patch)
treeab1ad5b213182edaf28976ca2b62b580403064f5 /pimd/pim_upstream.c
parent9929a2a9af74fa96900d670e714e8fa613c44f45 (diff)
pimd: on some triggers use_rpt re-evaluated for all groups
RP config change is a big hammer and use_rpt/spt needs to be re-evaluated on all existing (S,G) entries. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
Diffstat (limited to 'pimd/pim_upstream.c')
-rw-r--r--pimd/pim_upstream.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c
index 316209c551..d841d10a07 100644
--- a/pimd/pim_upstream.c
+++ b/pimd/pim_upstream.c
@@ -627,6 +627,22 @@ void pim_upstream_update_use_rpt(struct pim_upstream *up,
}
}
+/* some events like RP change require re-evaluation of SGrpt across
+ * all groups
+ */
+void pim_upstream_reeval_use_rpt(struct pim_instance *pim)
+{
+ struct pim_upstream *up;
+ struct listnode *node;
+
+ for (ALL_LIST_ELEMENTS_RO(pim->upstream_list, node, up)) {
+ if (up->sg.src.s_addr == INADDR_ANY)
+ continue;
+
+ pim_upstream_update_use_rpt(up, true /*update_mroute*/);
+ }
+}
+
void pim_upstream_switch(struct pim_instance *pim, struct pim_upstream *up,
enum pim_upstream_state new_state)
{