From db431af290a3ce4f8653f6cf4bd3cb66a38163dc Mon Sep 17 00:00:00 2001 From: Anuradha Karuppiah Date: Fri, 15 Nov 2019 11:41:49 -0800 Subject: [PATCH] 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 --- pimd/pim_jp_agg.c | 8 +++++++- pimd/pim_zebra.c | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pimd/pim_jp_agg.c b/pimd/pim_jp_agg.c index 418f66df05..243316b433 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 b6847a273a..dcc0f08426 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__);