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 <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2018-03-17 21:16:42 -04:00
parent da11e32521
commit 5d59e40841
3 changed files with 29 additions and 37 deletions

View File

@ -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,

View File

@ -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;
/* scan igmp sockets */
for (ALL_LIST_ELEMENTS_RO(pim_ifp->igmp_socket_list, sock_node,
igmp)) {
struct listnode *grpnode;
struct igmp_group *grp;
if (!pim_ifp)
continue;
/* scan igmp groups */
for (ALL_LIST_ELEMENTS_RO(igmp->igmp_group_list,
grpnode, grp)) {
struct listnode *srcnode;
struct igmp_source *src;
/* 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 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,

View File

@ -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);