summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pimd/pim_ssm.c2
-rw-r--r--pimd/pim_zebra.c66
-rw-r--r--pimd/pim_zebra.h2
3 files changed, 31 insertions, 39 deletions
diff --git a/pimd/pim_ssm.c b/pimd/pim_ssm.c
index 71bb6f2abd..d35f5cff7e 100644
--- a/pimd/pim_ssm.c
+++ b/pimd/pim_ssm.c
@@ -48,7 +48,7 @@ static void pim_ssm_range_reevaluate(struct pim_instance *pim)
* disappear in time for SSM groups.
*/
pim_upstream_register_reevaluate(pim);
- igmp_source_forward_reevaluate_all();
+ igmp_source_forward_reevaluate_all(pim);
}
void pim_ssm_prefix_list_update(struct pim_instance *pim,
diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c
index ecb97e8e44..ef9d9068f9 100644
--- a/pimd/pim_zebra.c
+++ b/pimd/pim_zebra.c
@@ -824,48 +824,40 @@ static void igmp_source_forward_reevaluate_one(struct pim_instance *pim,
}
}
-void igmp_source_forward_reevaluate_all(void)
+void igmp_source_forward_reevaluate_all(struct pim_instance *pim)
{
struct interface *ifp;
- struct vrf *vrf;
- struct pim_instance *pim;
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {
- pim = vrf->info;
- if (!pim)
+ FOR_ALL_INTERFACES (pim->vrf, ifp) {
+ struct pim_interface *pim_ifp = ifp->info;
+ struct listnode *sock_node;
+ struct igmp_sock *igmp;
+
+ if (!pim_ifp)
continue;
- FOR_ALL_INTERFACES (pim->vrf, ifp) {
- struct pim_interface *pim_ifp = ifp->info;
- struct listnode *sock_node;
- struct igmp_sock *igmp;
-
- if (!pim_ifp)
- continue;
-
- /* scan igmp sockets */
- for (ALL_LIST_ELEMENTS_RO(pim_ifp->igmp_socket_list,
- sock_node, igmp)) {
- struct listnode *grpnode;
- struct igmp_group *grp;
-
- /* scan igmp groups */
- for (ALL_LIST_ELEMENTS_RO(igmp->igmp_group_list,
- grpnode, grp)) {
- struct listnode *srcnode;
- struct igmp_source *src;
-
- /* scan group sources */
- for (ALL_LIST_ELEMENTS_RO(
- grp->group_source_list,
- srcnode, src)) {
- igmp_source_forward_reevaluate_one(
- pim, src);
- } /* scan group sources */
- } /* scan igmp groups */
- } /* scan igmp sockets */
- } /* scan interfaces */
- }
+ /* scan igmp sockets */
+ for (ALL_LIST_ELEMENTS_RO(pim_ifp->igmp_socket_list, sock_node,
+ igmp)) {
+ struct listnode *grpnode;
+ struct igmp_group *grp;
+
+ /* scan igmp groups */
+ for (ALL_LIST_ELEMENTS_RO(igmp->igmp_group_list,
+ grpnode, grp)) {
+ struct listnode *srcnode;
+ struct igmp_source *src;
+
+ /* scan group sources */
+ for (ALL_LIST_ELEMENTS_RO(
+ grp->group_source_list, srcnode,
+ src)) {
+ igmp_source_forward_reevaluate_one(pim,
+ src);
+ } /* scan group sources */
+ } /* scan igmp groups */
+ } /* scan igmp sockets */
+ } /* scan interfaces */
}
void igmp_source_forward_start(struct pim_instance *pim,
diff --git a/pimd/pim_zebra.h b/pimd/pim_zebra.h
index dd8aed0d20..dd46fd40f9 100644
--- a/pimd/pim_zebra.h
+++ b/pimd/pim_zebra.h
@@ -39,7 +39,7 @@ void igmp_anysource_forward_stop(struct igmp_group *group);
void igmp_source_forward_start(struct pim_instance *pim,
struct igmp_source *source);
void igmp_source_forward_stop(struct igmp_source *source);
-void igmp_source_forward_reevaluate_all(void);
+void igmp_source_forward_reevaluate_all(struct pim_instance *pim);
void pim_forward_start(struct pim_ifchannel *ch);
void pim_forward_stop(struct pim_ifchannel *ch, bool install_it);