mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-06 18:04:03 +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.
|
* disappear in time for SSM groups.
|
||||||
*/
|
*/
|
||||||
pim_upstream_register_reevaluate(pim);
|
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,
|
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 interface *ifp;
|
||||||
struct vrf *vrf;
|
|
||||||
struct pim_instance *pim;
|
|
||||||
|
|
||||||
RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {
|
FOR_ALL_INTERFACES (pim->vrf, ifp) {
|
||||||
pim = vrf->info;
|
struct pim_interface *pim_ifp = ifp->info;
|
||||||
if (!pim)
|
struct listnode *sock_node;
|
||||||
|
struct igmp_sock *igmp;
|
||||||
|
|
||||||
|
if (!pim_ifp)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
FOR_ALL_INTERFACES (pim->vrf, ifp) {
|
/* scan igmp sockets */
|
||||||
struct pim_interface *pim_ifp = ifp->info;
|
for (ALL_LIST_ELEMENTS_RO(pim_ifp->igmp_socket_list, sock_node,
|
||||||
struct listnode *sock_node;
|
igmp)) {
|
||||||
struct igmp_sock *igmp;
|
struct listnode *grpnode;
|
||||||
|
struct igmp_group *grp;
|
||||||
|
|
||||||
if (!pim_ifp)
|
/* scan igmp groups */
|
||||||
continue;
|
for (ALL_LIST_ELEMENTS_RO(igmp->igmp_group_list,
|
||||||
|
grpnode, grp)) {
|
||||||
|
struct listnode *srcnode;
|
||||||
|
struct igmp_source *src;
|
||||||
|
|
||||||
/* scan igmp sockets */
|
/* scan group sources */
|
||||||
for (ALL_LIST_ELEMENTS_RO(pim_ifp->igmp_socket_list,
|
for (ALL_LIST_ELEMENTS_RO(
|
||||||
sock_node, igmp)) {
|
grp->group_source_list, srcnode,
|
||||||
struct listnode *grpnode;
|
src)) {
|
||||||
struct igmp_group *grp;
|
igmp_source_forward_reevaluate_one(pim,
|
||||||
|
src);
|
||||||
/* scan igmp groups */
|
} /* scan group sources */
|
||||||
for (ALL_LIST_ELEMENTS_RO(igmp->igmp_group_list,
|
} /* scan igmp groups */
|
||||||
grpnode, grp)) {
|
} /* scan igmp sockets */
|
||||||
struct listnode *srcnode;
|
} /* scan interfaces */
|
||||||
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,
|
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,
|
void igmp_source_forward_start(struct pim_instance *pim,
|
||||||
struct igmp_source *source);
|
struct igmp_source *source);
|
||||||
void igmp_source_forward_stop(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_start(struct pim_ifchannel *ch);
|
||||||
void pim_forward_stop(struct pim_ifchannel *ch, bool install_it);
|
void pim_forward_stop(struct pim_ifchannel *ch, bool install_it);
|
||||||
|
Loading…
Reference in New Issue
Block a user