]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pimd: make igmp_source_forward_reevaluate_all vrf aware
authorDonald Sharp <sharpd@cumulusnetworks.com>
Sun, 18 Mar 2018 01:16:42 +0000 (21:16 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Sun, 18 Mar 2018 01:16:42 +0000 (21:16 -0400)
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>
pimd/pim_ssm.c
pimd/pim_zebra.c
pimd/pim_zebra.h

index 71bb6f2abd346be5a85d04b37f54a547970e75d1..d35f5cff7e3ceeadd046f21f2fa52993e56369f3 100644 (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,
index ecb97e8e4413cc4479610cfac0456239af47e781..ef9d9068f9c4193b98c875e65425441c2fc45745 100644 (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;
-
-                       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,
index dd8aed0d20a2e38f9f12b3cb1cdd6aeffe842843..dd46fd40f9acea7ed15b69f980213f2097e396b4 100644 (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);