]> git.puffer.fish Git - mirror/frr.git/commitdiff
pim6d: Add pim_get_all_mcast_group api
authorMobashshera Rasool <mrasool@vmware.com>
Thu, 17 Feb 2022 11:56:20 +0000 (03:56 -0800)
committerMobashshera Rasool <mrasool@vmware.com>
Tue, 8 Mar 2022 08:57:51 +0000 (00:57 -0800)
Added this api to fill all multicast group address based on IP version.
For PIMv4 its 224.0.0.0/4, for PIMv6 its FF00::0/8.
Changed the code where its being used currently.

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

index 61e51c01704ba205ccb194aab486566d76a99003..21cbe09c4ef762d10aa4d09ae2d13338fa3bc4af 100644 (file)
@@ -36,6 +36,7 @@
 #include "pim_bsm.h"
 #include "pim_time.h"
 #include "pim_zebra.h"
+#include "pim_util.h"
 
 /* Functions forward declaration */
 static void pim_bs_timer_start(struct bsm_scope *scope, int bs_timeout);
@@ -416,7 +417,7 @@ static void pim_instate_pend_list(struct bsgrp_node *bsgrp_node)
 
        pend = bsm_rpinfos_first(bsgrp_node->partial_bsrp_list);
 
-       if (!str2prefix("224.0.0.0/4", &group_all))
+       if (!pim_get_all_mcast_group(&group_all))
                return;
 
        rp_all = pim_rp_find_match_group(pim, &group_all);
@@ -627,7 +628,7 @@ void pim_bsm_clear(struct pim_instance *pim)
 
                pim_delete_tracked_nexthop(pim, &nht_p, NULL, rp_info);
 
-               if (!str2prefix("224.0.0.0/4", &g_all))
+               if (!pim_get_all_mcast_group(&g_all))
                        return;
 
                rp_all = pim_rp_find_match_group(pim, &g_all);
index 629490408d3c8099a1e626b22f5921e9bb77d89c..21f57e2d11c7db4e031c82f8a3ebd5d602bc797e 100644 (file)
@@ -34,6 +34,7 @@
 #include "pim_util.h"
 #include "log.h"
 #include "lib_errors.h"
+#include "pim_util.h"
 
 #if PIM_IPV == 6
 #define pim6_msdp_err(funcname, argtype)                                       \
@@ -2359,7 +2360,7 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp
                else if (yang_dnode_get(args->dnode, "./prefix-list")) {
                        plist = yang_dnode_get_string(args->dnode,
                                        "./prefix-list");
-                       if (!str2prefix("224.0.0.0/4", &group)) {
+                       if (!pim_get_all_mcast_group(&group)) {
                                flog_err(
                                        EC_LIB_DEVELOPMENT,
                                        "Unable to convert 224.0.0.0/4 to prefix");
@@ -2457,7 +2458,7 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp
                pim = vrf->info;
                plist = yang_dnode_get_string(args->dnode, NULL);
                yang_dnode_get_pimaddr(&rp_addr, args->dnode, "../rp-address");
-               if (!str2prefix("224.0.0.0/4", &group)) {
+               if (!pim_get_all_mcast_group(&group)) {
                        flog_err(EC_LIB_DEVELOPMENT,
                                 "Unable to convert 224.0.0.0/4 to prefix");
                        return NB_ERR_INCONSISTENCY;
@@ -2488,7 +2489,7 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp
                pim = vrf->info;
                yang_dnode_get_pimaddr(&rp_addr, args->dnode, "../rp-address");
                plist = yang_dnode_get_string(args->dnode, NULL);
-               if (!str2prefix("224.0.0.0/4", &group)) {
+               if (!pim_get_all_mcast_group(&group)) {
                        flog_err(EC_LIB_DEVELOPMENT,
                                 "Unable to convert 224.0.0.0/4 to prefix");
                        return NB_ERR_INCONSISTENCY;
index 7368723e8a44666fc6daca1c7766f046661f4a69..251e82fc7b26d25b49b21d9fa2c169b7d8eb6115 100644 (file)
@@ -48,6 +48,7 @@
 #include "pim_oil.h"
 #include "pim_zebra.h"
 #include "pim_bsm.h"
+#include "pim_util.h"
 
 /* Cleanup pim->rpf_hash each node data */
 void pim_rp_list_hash_clean(void *data)
@@ -113,7 +114,7 @@ void pim_rp_init(struct pim_instance *pim)
 
        rp_info = XCALLOC(MTYPE_PIM_RP, sizeof(*rp_info));
 
-       if (!str2prefix("224.0.0.0/4", &rp_info->group)) {
+       if (!pim_get_all_mcast_group(&rp_info->group)) {
                flog_err(EC_LIB_DEVELOPMENT,
                         "Unable to convert 224.0.0.0/4 to prefix");
                list_delete(&pim->rp_list);
@@ -476,7 +477,7 @@ int pim_rp_new(struct pim_instance *pim, pim_addr rp_addr, struct prefix group,
                rp_info->plist = XSTRDUP(MTYPE_PIM_FILTER_NAME, plist);
        } else {
 
-               if (!str2prefix("224.0.0.0/4", &group_all)) {
+               if (!pim_get_all_mcast_group(&group_all)) {
                        XFREE(MTYPE_PIM_RP, rp_info);
                        return PIM_GROUP_BAD_ADDRESS;
                }
@@ -652,7 +653,7 @@ void pim_rp_del_config(struct pim_instance *pim, pim_addr rp_addr,
        int result;
 
        if (group_range == NULL)
-               result = str2prefix("224.0.0.0/4", &group);
+               result = pim_get_all_mcast_group(&group);
        else
                result = str2prefix(group_range, &group);
 
@@ -747,7 +748,7 @@ int pim_rp_del(struct pim_instance *pim, struct in_addr rp_addr,
                           &nht_p);
        pim_delete_tracked_nexthop(pim, &nht_p, NULL, rp_info);
 
-       if (!str2prefix("224.0.0.0/4", &g_all))
+       if (!pim_get_all_mcast_group(&g_all))
                return PIM_RP_BAD_ADDRESS;
 
        rp_all = pim_rp_find_match_group(pim, &g_all);
index 8232d7205bc703e242e8b9fbc017b759762dd27d..4b67dbf1b1173327f7c5b5194202b5bcf90355d6 100644 (file)
@@ -152,3 +152,17 @@ bool pim_is_group_filtered(struct pim_interface *pim_ifp, pim_addr *grp)
        pl = prefix_list_lookup(PIM_AFI, pim_ifp->boundary_oil_plist);
        return pl ? prefix_list_apply(pl, &grp_pfx) == PREFIX_DENY : false;
 }
+
+
+/* This function returns all multicast group */
+int pim_get_all_mcast_group(struct prefix *prefix)
+{
+#if PIM_IPV == 4
+       if (!str2prefix("224.0.0.0/4", prefix))
+               return 0;
+#else
+       if (!str2prefix("FF00::0/8", prefix))
+               return 0;
+#endif
+       return 1;
+}
index b9c227996e09b42de017581492509afef28db522..a4362bef90c72ad289e2e0626ba9e96420111542 100644 (file)
@@ -36,4 +36,5 @@ void pim_pkt_dump(const char *label, const uint8_t *buf, int size);
 int pim_is_group_224_0_0_0_24(struct in_addr group_addr);
 int pim_is_group_224_4(struct in_addr group_addr);
 bool pim_is_group_filtered(struct pim_interface *pim_ifp, pim_addr *grp);
+int pim_get_all_mcast_group(struct prefix *prefix);
 #endif /* PIM_UTIL_H */