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>
#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);
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);
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);
#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) \
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");
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;
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;
#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)
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);
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;
}
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);
&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);
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;
+}
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 */