From 59711f1063d763649f53219ef31d7325c007cdeb Mon Sep 17 00:00:00 2001 From: Satheesh Kumar K Date: Tue, 23 Jul 2019 22:00:08 -0700 Subject: [PATCH] pimd: Zebra Route Updates are missing at pim Pim will do the nexthop registration with "ip pim rp" static configuration with this Zebra will advertise the Route Information. But while processing this info at PIM, if Nexthop Interfaces are not PIM enabled, currently PIM is dropping those paths. in case all paths are not PIM enabled, there is no valid RPF Interface at PIM. and PIM will be stuck at this state until Next update this to route, that can happen only if there is a Routing change at Zebra for this prefix. until that time PIM will not have any valid outgoing Interface. This issue was mainly seen during Node bootup scenarios. Fix Proposed ============= store the paths in PIM PNC Data structure though they are not enabled with PIM, because while selecting the Interface PIM checks for multicast enabled Interface. Tests Performed =============== 1. Verified fail Test case 2. Disabling the PIM on selected outgoing Interface, PIM is choosing another path when Neighbor is down on this Interface. 3. Re-configure the PIM on above un-configured Interface, PIM is staying with old NHop since it is valid. Signed-off-by: Satheesh Kumar K --- pimd/pim_nht.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pimd/pim_nht.c b/pimd/pim_nht.c index 65ea858cb6..39dc8ad2fa 100644 --- a/pimd/pim_nht.c +++ b/pimd/pim_nht.c @@ -842,6 +842,14 @@ int pim_parse_nexthop_update(ZAPI_CALLBACK_ARGS) } if (!ifp->info) { + /* + * Though Multicast is not enabled on this + * Interface store it in database otheriwse we + * may miss this update and this will not cause + * any issue, because while choosing the path we + * are ommitting the Interfaces which are not + * multicast enabled + */ if (PIM_DEBUG_PIM_NHT) { char buf[NEXTHOP_STRLEN]; @@ -853,8 +861,6 @@ int pim_parse_nexthop_update(ZAPI_CALLBACK_ARGS) nexthop2str(nexthop, buf, sizeof(buf))); } - nexthop_free(nexthop); - continue; } if (nhlist_tail) {