]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pimd, pim6d: Move mld/igmp deletion code to a common api
authorMobashshera Rasool <mrasool@vmware.com>
Thu, 1 Jun 2023 09:04:44 +0000 (02:04 -0700)
committerMobashshera Rasool <mrasool@vmware.com>
Wed, 7 Jun 2023 07:01:05 +0000 (00:01 -0700)
Move the mld/igmp deletion common code to api pim_gm_interface_delete
code for IPv6 deletion(gm_ifp_teardown) for MLD was missing in this flow
Making the code common fixes this too.

Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
pimd/pim_iface.c
pimd/pim_iface.h
pimd/pim_nb_config.c

index a83b8af0148901022ca46967201fa862915a2b39..f26fd818b52d07322b28e2d62aa077abbc219153 100644 (file)
@@ -1799,3 +1799,24 @@ void pim_pim_interface_delete(struct interface *ifp)
                pim_if_delete(ifp);
        }
 }
+
+void pim_gm_interface_delete(struct interface *ifp)
+{
+       struct pim_interface *pim_ifp = ifp->info;
+
+       if (!pim_ifp)
+               return;
+
+       pim_ifp->gm_enable = false;
+
+       pim_if_membership_clear(ifp);
+
+#if PIM_IPV == 4
+       igmp_sock_delete_all(ifp);
+#else
+       gm_ifp_teardown(ifp);
+#endif
+
+       if (!pim_ifp->pim_enable)
+               pim_if_delete(ifp);
+}
index ffde72de8119732b5d89c3ab75283076af4ed134..0312f719d3005fc0b368e6c481fb3f0e78d8ba84 100644 (file)
@@ -244,5 +244,6 @@ int pim_if_ifchannel_count(struct pim_interface *pim_ifp);
 
 void pim_iface_init(void);
 void pim_pim_interface_delete(struct interface *ifp);
+void pim_gm_interface_delete(struct interface *ifp);
 
 #endif /* PIM_IFACE_H */
index a43f461a14c9f30a16b665577258c8dbd56d2d92..86c40d18002cd9132037f3e8a2c5adb9326dbbea 100644 (file)
@@ -2516,7 +2516,6 @@ int lib_interface_gmp_address_family_create(struct nb_cb_create_args *args)
 int lib_interface_gmp_address_family_destroy(struct nb_cb_destroy_args *args)
 {
        struct interface *ifp;
-       struct pim_interface *pim_ifp;
 
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -2525,19 +2524,7 @@ int lib_interface_gmp_address_family_destroy(struct nb_cb_destroy_args *args)
                break;
        case NB_EV_APPLY:
                ifp = nb_running_get_entry(args->dnode, NULL, true);
-               pim_ifp = ifp->info;
-
-               if (!pim_ifp)
-                       return NB_OK;
-
-               pim_ifp->gm_enable = false;
-
-               pim_if_membership_clear(ifp);
-
-               pim_if_addr_del_all_igmp(ifp);
-
-               if (!pim_ifp->pim_enable)
-                       pim_if_delete(ifp);
+               pim_gm_interface_delete(ifp);
        }
 
        return NB_OK;
@@ -2551,7 +2538,6 @@ int lib_interface_gmp_address_family_enable_modify(
 {
        struct interface *ifp;
        bool gm_enable;
-       struct pim_interface *pim_ifp;
        int mcast_if_count;
        const char *ifp_name;
        const struct lyd_node *if_dnode;
@@ -2581,25 +2567,8 @@ int lib_interface_gmp_address_family_enable_modify(
                if (gm_enable)
                        return pim_cmd_gm_start(ifp);
 
-               else {
-                       pim_ifp = ifp->info;
-
-                       if (!pim_ifp)
-                               return NB_ERR_INCONSISTENCY;
-
-                       pim_ifp->gm_enable = false;
-
-                       pim_if_membership_clear(ifp);
-
-#if PIM_IPV == 4
-                       pim_if_addr_del_all_igmp(ifp);
-#else
-                       gm_ifp_teardown(ifp);
-#endif
-
-                       if (!pim_ifp->pim_enable)
-                               pim_if_delete(ifp);
-               }
+               else
+                       pim_gm_interface_delete(ifp);
        }
        return NB_OK;
 }