#include "plist.h"
#include "nexthop.h"
#include "table.h"
+#include "lib_errors.h"
#include "pimd.h"
#include "pim_vty.h"
{
struct pim_nexthop_cache *pnc = (struct pim_nexthop_cache *)data;
- list_delete_and_null(&pnc->rp_list);
+ list_delete(&pnc->rp_list);
hash_clean(pnc->upstream_hash, NULL);
hash_free(pnc->upstream_hash);
pnc->upstream_hash = NULL;
+ if (pnc->nexthop)
+ nexthops_free(pnc->nexthop);
XFREE(MTYPE_PIM_NEXTHOP_CACHE, pnc);
}
static void pim_rp_info_free(struct rp_info *rp_info)
{
+ if (rp_info->plist)
+ XFREE(MTYPE_PIM_FILTER_NAME, rp_info->plist);
+
XFREE(MTYPE_PIM_RP, rp_info);
}
struct route_node *rn;
pim->rp_list = list_new();
- if (!pim->rp_list) {
- zlog_err("Unable to alloc rp_list");
- return;
- }
pim->rp_list->del = (void (*)(void *))pim_rp_info_free;
pim->rp_list->cmp = pim_rp_list_cmp;
pim->rp_table = route_table_init();
- if (!pim->rp_table) {
- zlog_err("Unable to alloc rp_table");
- list_delete_and_null(&pim->rp_list);
- return;
- }
rp_info = XCALLOC(MTYPE_PIM_RP, sizeof(*rp_info));
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);
+ flog_err(EC_LIB_DEVELOPMENT,
+ "Unable to convert 224.0.0.0/4 to prefix");
+ list_delete(&pim->rp_list);
route_table_finish(pim->rp_table);
XFREE(MTYPE_PIM_RP, rp_info);
return;
listnode_add(pim->rp_list, rp_info);
rn = route_node_get(pim->rp_table, &rp_info->group);
- if (!rn) {
- zlog_err("Failure to get route node for pim->rp_table");
- list_delete_and_null(&pim->rp_list);
- route_table_finish(pim->rp_table);
- XFREE(MTYPE_PIM_RP, rp_info);
- return;
- }
-
rn->info = rp_info;
if (PIM_DEBUG_TRACE)
zlog_debug(
void pim_rp_free(struct pim_instance *pim)
{
if (pim->rp_list)
- list_delete_and_null(&pim->rp_list);
+ list_delete(&pim->rp_list);
}
/*
*/
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;
* 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;
rn = route_node_match(pim->rp_table, group);
if (!rn) {
- zlog_err(
+ flog_err(
+ EC_LIB_DEVELOPMENT,
"%s: BUG We should have found default group information\n",
__PRETTY_FUNCTION__);
return best;
if (rp_info->plist) {
XFREE(MTYPE_PIM_FILTER_NAME, rp_info->plist);
- rp_info->plist = NULL;
was_plist = true;
}
rn = route_node_get(pim->rp_table, &rp_info->group);
if (rn) {
if (rn->info != rp_info)
- zlog_err("WTF matey");
+ flog_err(
+ EC_LIB_DEVELOPMENT,
+ "Expected rn->info to be equal to rp_info");
if (PIM_DEBUG_TRACE) {
char buf[PREFIX_STRLEN];
__PRETTY_FUNCTION__, buf, buf1);
}
pim_rpf_set_refresh_time(pim);
- pim_ecmp_nexthop_lookup(pim,
- &rp_info->rp.source_nexthop,
- &nht_p, &rp_info->group, 1);
+ (void)pim_ecmp_nexthop_lookup(
+ pim, &rp_info->rp.source_nexthop, &nht_p,
+ &rp_info->group, 1);
}
return (&rp_info->rp);
}
return 0;
}
-void pim_rp_show_information(struct pim_instance *pim, struct vty *vty,
- uint8_t uj)
+void pim_rp_show_information(struct pim_instance *pim, struct vty *vty, bool uj)
{
struct rp_info *rp_info;
struct rp_info *prev_rp_info = NULL;