Subject: [pim] PIM-SM: timer value computation for join suppression

From: Mark Doll <[email-masked]>
Date: Thu, 12 Aug 2004 14:40:36 +0200

This week I've read draft-ietf-pim-sm-v2-new-10.txt for the first time, 
so this might have been discussed already on this list in which case I 
would really appreciate a pointer to some background information about this.

I'm confused about the Join(*,*,RP)/(*,G)/(S,G) timer value computation 
when suppressing joins.

The spec states:

           Let t_joinsuppress be the minimum of t_suppressed and the
           HoldTime from the Join/Prune message triggering this event.
           If the Join Timer is set to expire in less than t_joinsuppress
           seconds, reset it so that it expires after t_joinsuppress
           seconds.  If the Join Timer is set to expire in more than
           t_joinsuppress seconds, leave it unchanged.

Let's assume HoldTime is small enough to determine the value of 
t_joinsuppress (presumably the routers on the link have been configured 
with a different t_periodic) and the router sending this Join message 
stops sending periodic Joins (i.e. the router has gone down or a 
subsequent Prune message has been lost). Since the upstream router sets 
its Expiry Timer to exactly the same value, this seems to be a race 
condition. And this might also cause a Join message implosion if there 
are more than two downstream routers with Join state.

And of course there is no protection against lost Join messages any more 
as it is the case when the Join Timer periodically fires 3.5 times 
during a HoldTime period allowing for two Join messages to be lost.

And what's the motivation behind leaving the Join Timer unchanged when 
its value is greater than t_joinsuppress? If, again the router sending 
periodic Joins stops doing so, the Expiry Timer at the upstream router 
expires after Holdtime. So the upstream router loses Join state since 
the Join is still suppressed, because the Join Timer has not been 
reduced to HoldTime = t_joinsuppress.

So why not specifying something like:

           Reset the Join Timer to the minimum of t_suppressed and
           HoldTime/3.5*rand(1.1,1.4), where HoldTime is the HoldTime
           from the Join/Prune message triggering this event.

Since I'm not a PIM guru I might have overlooked something really 
important and all the above can never happen. In this case I'm sorry 
for bothering you with all this...

Sincerly, Mark Doll.

_______________________________________________
pim mailing list
[email-masked]
https://www1.ietf.org/mailman/listinfo/pim