diff options
author | Anuradha Karuppiah <anuradhak@cumulusnetworks.com> | 2019-11-15 20:41:49 +0100 |
---|---|---|
committer | Anuradha Karuppiah <anuradhak@cumulusnetworks.com> | 2019-11-15 23:16:08 +0100 |
commit | db431af290a3ce4f8653f6cf4bd3cb66a38163dc (patch) | |
tree | 8ed6695d8bc37a4616a7e1da215336224b7e60cf /pimd | |
parent | pimd: insert upstream entry into nbr's jp-agg list when a new nbr is added (diff) | |
download | frr-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.c | 8 | ||||
-rw-r--r-- | pimd/pim_zebra.c | 3 |
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__); |