int
pim_rp_new (const char *rp, const char *group_range, const char *plist)
{
- int result, ret = 0;
+ int result;
struct rp_info *rp_info;
struct rp_info *rp_all;
struct prefix group_all;
__PRETTY_FUNCTION__, buf, buf1);
}
memset (&pnc, 0, sizeof (struct pim_nexthop_cache));
- if ((ret =
- pim_find_or_track_nexthop (&nht_p, NULL, rp_all, &pnc)) == 1)
+ if ((pim_find_or_track_nexthop (&nht_p, NULL, rp_all, &pnc)) == 1)
{
//Compute PIM RPF using Cached nexthop
- pim_ecmp_nexthop_search (&pnc, &rp_all->rp.source_nexthop,
- &nht_p, &rp_all->group, 1);
+ if ((pim_ecmp_nexthop_search (&pnc, &rp_all->rp.source_nexthop,
+ &nht_p, &rp_all->group, 1)) != 0)
+ return PIM_RP_NO_PATH;
}
else
{
}
memset (&pnc, 0, sizeof (struct pim_nexthop_cache));
- if ((ret = pim_find_or_track_nexthop (&nht_p, NULL, rp_info, &pnc)) == 1)
+ if ((pim_find_or_track_nexthop (&nht_p, NULL, rp_info, &pnc)) == 1)
{
//Compute PIM RPF using Cached nexthop
- pim_ecmp_nexthop_search (&pnc, &rp_info->rp.source_nexthop,
- &nht_p, &rp_info->group, 1);
+ if (pim_ecmp_nexthop_search (&pnc, &rp_info->rp.source_nexthop,
+ &nht_p, &rp_info->group, 1) != 0)
+ return PIM_RP_NO_PATH;
}
else
{
if ((pim_find_or_track_nexthop (&nht_p, NULL, rp_info, &pnc)) == 1)
{
//Compute PIM RPF using Cached nexthop
- pim_ecmp_nexthop_search (&pnc, &rp_info->rp.source_nexthop,
- &nht_p, &rp_info->group, 1);
+ if ((pim_ecmp_nexthop_search (&pnc, &rp_info->rp.source_nexthop,
+ &nht_p, &rp_info->group, 1)) != 0)
+ ret++;
}
else
{
if (rp_info)
{
- int ret = 0;
struct prefix nht_p;
struct pim_nexthop_cache pnc;
/* Register addr with Zebra NHT */
__PRETTY_FUNCTION__, buf, buf1);
}
memset (&pnc, 0, sizeof (struct pim_nexthop_cache));
- if ((ret = pim_find_or_track_nexthop (&nht_p, NULL, rp_info, &pnc)) == 1)
+ if ((pim_find_or_track_nexthop (&nht_p, NULL, rp_info, &pnc)) == 1)
{
//Compute PIM RPF using Cached nexthop
pim_ecmp_nexthop_search (&pnc, &rp_info->rp.source_nexthop,
static int
pim_upstream_could_register (struct pim_upstream *up)
{
- struct pim_interface *pim_ifp = up->rpf.source_nexthop.interface->info;
+ struct pim_interface *pim_ifp = NULL;
+
+ if (up->rpf.source_nexthop.interface)
+ pim_ifp = up->rpf.source_nexthop.interface->info;
+ else
+ {
+ if (PIM_DEBUG_TRACE)
+ zlog_debug ("%s: up %s RPF is not present", __PRETTY_FUNCTION__, up->sg_str);
+ }
if (pim_ifp && PIM_I_am_DR (pim_ifp) &&
pim_if_connected_to_source (up->rpf.source_nexthop.interface, up->sg.src))
int
pim_upstream_inherited_olist_decide (struct pim_upstream *up)
{
- struct pim_interface *pim_ifp;
+ struct pim_interface *pim_ifp = NULL;
struct listnode *chnextnode;
struct pim_ifchannel *ch;
struct listnode *chnode;
int output_intf = 0;
- pim_ifp = up->rpf.source_nexthop.interface->info;
+ if (up->rpf.source_nexthop.interface)
+ pim_ifp = up->rpf.source_nexthop.interface->info;
+ else
+ {
+ if (PIM_DEBUG_TRACE)
+ zlog_debug ("%s: up %s RPF is not present", __PRETTY_FUNCTION__, up->sg_str);
+ }
if (pim_ifp && !up->channel_oil)
up->channel_oil = pim_channel_oil_add (&up->sg, pim_ifp->mroute_vif_index);