From 5d59e4084180d87f18fded71d25d96ad4774488d Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Sat, 17 Mar 2018 21:16:42 -0400 Subject: 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_zebra.c | 66 +++++++++++++++++++++++++------------------------------- 1 file changed, 29 insertions(+), 37 deletions(-) (limited to 'pimd/pim_zebra.c') 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, -- cgit v1.2.3