]> git.proxmox.com Git - mirror_frr.git/blobdiff - pimd/pim_rp.c
Merge pull request #2731 from chiragshah6/mdev
[mirror_frr.git] / pimd / pim_rp.c
index 1ad4b33a7ee7f85ba6f2f710c3e0bdeabafc89e9..c1623ec15e7ebd6779e3d409786418e07dff96cd 100644 (file)
@@ -115,13 +115,6 @@ void pim_rp_init(struct pim_instance *pim)
 
        rp_info = XCALLOC(MTYPE_PIM_RP, sizeof(*rp_info));
 
-       if (!rp_info) {
-               zlog_err("Unable to alloc rp_info");
-               route_table_finish(pim->rp_table);
-               list_delete_and_null(&pim->rp_list);
-               return;
-       }
-
        if (!str2prefix("224.0.0.0/4", &rp_info->group)) {
                zlog_err("Unable to convert 224.0.0.0/4 to prefix");
                list_delete_and_null(&pim->rp_list);
@@ -201,7 +194,7 @@ static int pim_rp_prefix_list_used(struct pim_instance *pim, const char *plist)
  */
 static struct rp_info *pim_rp_find_exact(struct pim_instance *pim,
                                         struct in_addr rp,
-                                        struct prefix *group)
+                                        const struct prefix *group)
 {
        struct listnode *node;
        struct rp_info *rp_info;
@@ -219,13 +212,13 @@ static struct rp_info *pim_rp_find_exact(struct pim_instance *pim,
  * Given a group, return the rp_info for that group
  */
 static struct rp_info *pim_rp_find_match_group(struct pim_instance *pim,
-                                              struct prefix *group)
+                                              const struct prefix *group)
 {
        struct listnode *node;
        struct rp_info *best = NULL;
        struct rp_info *rp_info;
        struct prefix_list *plist;
-       struct prefix *p, *bp;
+       const struct prefix *p, *bp;
        struct route_node *rn;
 
        bp = NULL;
@@ -365,8 +358,6 @@ int pim_rp_new(struct pim_instance *pim, const char *rp,
        struct route_node *rn;
 
        rp_info = XCALLOC(MTYPE_PIM_RP, sizeof(*rp_info));
-       if (!rp_info)
-               return PIM_MALLOC_FAIL;
 
        if (group_range == NULL)
                result = str2prefix("224.0.0.0/4", &rp_info->group);
@@ -486,10 +477,9 @@ int pim_rp_new(struct pim_instance *pim, const char *rp,
                                            &rp_all->group, 1))
                                        return PIM_RP_NO_PATH;
                        } else {
-                               if (pim_nexthop_lookup(
+                               if (!pim_ecmp_nexthop_lookup(
                                            pim, &rp_all->rp.source_nexthop,
-                                           rp_all->rp.rpf_addr.u.prefix4, 1)
-                                   != 0)
+                                           &nht_p, &rp_all->group, 1))
                                        return PIM_RP_NO_PATH;
                        }
                        pim_rp_check_interfaces(pim, rp_all);
@@ -534,12 +524,6 @@ int pim_rp_new(struct pim_instance *pim, const char *rp,
 
        listnode_add_sort(pim->rp_list, rp_info);
        rn = route_node_get(pim->rp_table, &rp_info->group);
-       if (!rn) {
-               char buf[PREFIX_STRLEN];
-               zlog_err("Failure to get route node for pim->rp_table: %s",
-                        prefix2str(&rp_info->group, buf, sizeof(buf)));
-               return PIM_MALLOC_FAIL;
-       }
        rn->info = rp_info;
 
        if (PIM_DEBUG_TRACE) {
@@ -571,9 +555,8 @@ int pim_rp_new(struct pim_instance *pim, const char *rp,
                                             &nht_p, &rp_info->group, 1))
                        return PIM_RP_NO_PATH;
        } else {
-               if (pim_nexthop_lookup(pim, &rp_info->rp.source_nexthop,
-                                      rp_info->rp.rpf_addr.u.prefix4, 1)
-                   != 0)
+               if (!pim_ecmp_nexthop_lookup(pim, &rp_info->rp.source_nexthop,
+                                            &nht_p, &rp_info->group, 1))
                        return PIM_RP_NO_PATH;
        }
 
@@ -702,9 +685,9 @@ void pim_rp_setup(struct pim_instance *pim)
                                        "%s: NHT Local Nexthop not found for RP %s ",
                                        __PRETTY_FUNCTION__, buf);
                        }
-                       if (!pim_nexthop_lookup(
-                                   pim, &rp_info->rp.source_nexthop,
-                                   rp_info->rp.rpf_addr.u.prefix4, 1))
+                       if (!pim_ecmp_nexthop_lookup(pim,
+                                                    &rp_info->rp.source_nexthop,
+                                                     &nht_p, &rp_info->group, 1))
                                if (PIM_DEBUG_PIM_NHT_RP)
                                        zlog_debug(
                                                "Unable to lookup nexthop for rp specified");
@@ -869,8 +852,9 @@ struct pim_rpf *pim_rp_g(struct pim_instance *pim, struct in_addr group)
                                        __PRETTY_FUNCTION__, buf, buf1);
                        }
                        pim_rpf_set_refresh_time(pim);
-                       pim_nexthop_lookup(pim, &rp_info->rp.source_nexthop,
-                                          rp_info->rp.rpf_addr.u.prefix4, 1);
+                       pim_ecmp_nexthop_lookup(pim,
+                                               &rp_info->rp.source_nexthop,
+                                               &nht_p, &rp_info->group, 1);
                }
                return (&rp_info->rp);
        }
@@ -976,7 +960,7 @@ int pim_rp_check_is_my_ip_address(struct pim_instance *pim,
 }
 
 void pim_rp_show_information(struct pim_instance *pim, struct vty *vty,
-                            u_char uj)
+                            uint8_t uj)
 {
        struct rp_info *rp_info;
        struct rp_info *prev_rp_info = NULL;