From 5d59e4084180d87f18fded71d25d96ad4774488d Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Sat, 17 Mar 2018 21:16:42 -0400 Subject: [PATCH] pimd: make igmp_source_forward_reevaluate_all vrf aware There is no need to look at all VRF's when we need to reevaluate the source forward since the calling function knows the vrf. Signed-off-by: Donald Sharp --- pimd/pim_ssm.c | 2 +- pimd/pim_zebra.c | 66 +++++++++++++++++++++--------------------------- pimd/pim_zebra.h | 2 +- 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); -- 2.39.5