diff options
-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__); |