summaryrefslogtreecommitdiffstats
path: root/pimd
diff options
context:
space:
mode:
authorAnuradha Karuppiah <anuradhak@cumulusnetworks.com>2019-11-15 20:41:49 +0100
committerAnuradha Karuppiah <anuradhak@cumulusnetworks.com>2019-11-15 23:16:08 +0100
commitdb431af290a3ce4f8653f6cf4bd3cb66a38163dc (patch)
tree8ed6695d8bc37a4616a7e1da215336224b7e60cf /pimd
parentpimd: insert upstream entry into nbr's jp-agg list when a new nbr is added (diff)
downloadfrr-db431af290a3ce4f8653f6cf4bd3cb66a38163dc.tar.xz
frr-db431af290a3ce4f8653f6cf4bd3cb66a38163dc.zip
pimd: handle RPF resolution while in joined state
If an dummy upstream entry (no RPF nbr) which is already in a JOINED state is resolved we were not triggering an immediate join via the per-interface upstream switch list. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
Diffstat (limited to 'pimd')
-rw-r--r--pimd/pim_jp_agg.c8
-rw-r--r--pimd/pim_zebra.c3
2 files changed, 10 insertions, 1 deletions
diff --git a/pimd/pim_jp_agg.c b/pimd/pim_jp_agg.c
index 418f66df0..243316b43 100644
--- a/pimd/pim_jp_agg.c
+++ b/pimd/pim_jp_agg.c
@@ -117,10 +117,16 @@ void pim_jp_agg_clear_group(struct list *group)
static struct pim_iface_upstream_switch *
pim_jp_agg_get_interface_upstream_switch_list(struct pim_rpf *rpf)
{
- struct pim_interface *pim_ifp = rpf->source_nexthop.interface->info;
+ struct interface *ifp = rpf->source_nexthop.interface;
+ struct pim_interface *pim_ifp;
struct pim_iface_upstream_switch *pius;
struct listnode *node, *nnode;
+ if (!ifp)
+ return NULL;
+
+ pim_ifp = ifp->info;
+
/* Old interface is pim disabled */
if (!pim_ifp)
return NULL;
diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c
index b6847a273..dcc0f0842 100644
--- a/pimd/pim_zebra.c
+++ b/pimd/pim_zebra.c
@@ -324,6 +324,9 @@ void pim_zebra_upstream_rpf_changed(struct pim_instance *pim,
up->channel_oil->oil_inherited_rescan = 0;
}
+ if (up->join_state == PIM_UPSTREAM_JOINED)
+ pim_jp_agg_switch_interface(old, &up->rpf, up);
+
if (!up->channel_oil->installed)
pim_upstream_mroute_add(up->channel_oil,
__PRETTY_FUNCTION__);