summaryrefslogtreecommitdiff
path: root/pimd/pim_jp_agg.c
diff options
context:
space:
mode:
Diffstat (limited to 'pimd/pim_jp_agg.c')
-rw-r--r--pimd/pim_jp_agg.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/pimd/pim_jp_agg.c b/pimd/pim_jp_agg.c
index 251e67a351..46c6cbc690 100644
--- a/pimd/pim_jp_agg.c
+++ b/pimd/pim_jp_agg.c
@@ -127,6 +127,10 @@ pim_jp_agg_get_interface_upstream_switch_list (struct pim_rpf *rpf)
struct pim_iface_upstream_switch *pius;
struct listnode *node, *nnode;
+ /* Old interface is pim disabled */
+ if (!pim_ifp)
+ return NULL;
+
for (ALL_LIST_ELEMENTS(pim_ifp->upstream_switch_list, node, nnode, pius))
{
if (pius->address.s_addr == rpf->rpf_addr.u.prefix4.s_addr)
@@ -323,7 +327,8 @@ pim_jp_agg_switch_interface (struct pim_rpf *orpf,
*/
/* send Prune(S,G) to the old upstream neighbor */
- pim_jp_agg_add_group (opius->us, up, false);
+ if (opius)
+ pim_jp_agg_add_group (opius->us, up, false);
/* send Join(S,G) to the current upstream neighbor */
pim_jp_agg_add_group (npius->us, up, true);
@@ -343,8 +348,9 @@ pim_jp_agg_single_upstream_send (struct pim_rpf *rpf,
static bool first = true;
/* skip JP upstream messages if source is directly connected */
- if (pim_if_connected_to_source (rpf->source_nexthop.interface, up->sg.src))
- return;
+ if (!up || !rpf->source_nexthop.interface ||
+ pim_if_connected_to_source (rpf->source_nexthop.interface, up->sg.src))
+ return;
if (first)
{