mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-05 22:50:14 +00:00
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:
parent
da11e32521
commit
5d59e40841
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user