pimd: Reg Suppression expiry has to account for couldreg->false while in prune

Problem: This happened in once in a while during testing the scenario multiple
times. When regstop timer expire and at that point if rpf interface doesn't
exist, the register state for the upstream gets struck in reg-prune state indefinitely.
This will not recover even when rpf comes back and traffic resumed because
register state is struck on prune.

RCA: Reg suppression expiry is keeping reg state unchanged when iif is absent.

Fix: When iif is absent during reg suppression expiry, treat it as couldreg
becoming false and move it NO_INFO state.

Signed-off-by: Saravanan K <saravanank@vmware.com>
This commit is contained in:
saravanank 2020-03-23 19:57:17 -07:00
parent 7f2ccbe562
commit cf575d0975

View File

@ -1697,10 +1697,12 @@ static int pim_upstream_register_stop_timer(struct thread *t)
case PIM_REG_JOIN:
break;
case PIM_REG_PRUNE:
/* This is equalent to Couldreg -> False */
if (!up->rpf.source_nexthop.interface) {
if (PIM_DEBUG_PIM_TRACE)
zlog_debug("%s: up %s RPF is not present",
__func__, up->sg_str);
up->reg_state = PIM_REG_NOINFO;
return 0;
}