summaryrefslogtreecommitdiffstats
path: root/pimd/pim_rpf.c
diff options
context:
space:
mode:
authorAnuradha Karuppiah <anuradhak@cumulusnetworks.com>2019-11-15 20:09:13 +0100
committerAnuradha Karuppiah <anuradhak@cumulusnetworks.com>2019-11-15 21:00:29 +0100
commit7984af1840999e2e24ffcab249c46dd780606e5d (patch)
tree0f0fdebf8f5e886fd3ff26ca6ffb9c0486fbea7a /pimd/pim_rpf.c
parentpimd: decide between SPT based and RPT based forwarding (diff)
downloadfrr-7984af1840999e2e24ffcab249c46dd780606e5d.tar.xz
frr-7984af1840999e2e24ffcab249c46dd780606e5d.zip
pimd: set mfcc_parent at the time of MFCC programming
mfcc_parent for an (S, G) entry was being updated on any upstream RPF change. With the change to use RPT for (S,G) in some cases we can no longer do that. Instead the upstream entry's RPF neigbor is managed separately form the channel_oil's mfcc_parent i.e. via NHT. And the mfcc_parent is evaluated at the time of mroute programming. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
Diffstat (limited to 'pimd/pim_rpf.c')
-rw-r--r--pimd/pim_rpf.c6
1 files changed, 1 insertions, 5 deletions
diff --git a/pimd/pim_rpf.c b/pimd/pim_rpf.c
index d383ef524..ebac4a4d6 100644
--- a/pimd/pim_rpf.c
+++ b/pimd/pim_rpf.c
@@ -307,11 +307,6 @@ void pim_upstream_rpf_clear(struct pim_instance *pim,
struct pim_upstream *up)
{
if (up->rpf.source_nexthop.interface) {
- if (up->channel_oil)
- pim_channel_oil_change_iif(pim, up->channel_oil,
- MAXVIFS,
- __PRETTY_FUNCTION__);
-
pim_upstream_switch(pim, up, PIM_UPSTREAM_NOTJOINED);
up->rpf.source_nexthop.interface = NULL;
up->rpf.source_nexthop.mrib_nexthop_addr.u.prefix4.s_addr =
@@ -321,6 +316,7 @@ void pim_upstream_rpf_clear(struct pim_instance *pim,
up->rpf.source_nexthop.mrib_route_metric =
router->infinite_assert_metric.route_metric;
up->rpf.rpf_addr.u.prefix4.s_addr = PIM_NET_INADDR_ANY;
+ pim_upstream_mroute_iif_update(up->channel_oil, __func__);
}
}