James Lingard | 23 Jan 2004 18:12
Favicon

RE: Error in PIM-SM forwarding rules

Hi Mark,

Thanks for the quick response.  See comment below.

> -----Original Message-----
> From: Mark Handley [mailto:M.Handley <at> cs.ucl.ac.uk]
> Sent: 23 January 2004 16:20
> To: James Lingard
> Cc: 'pim <at> ietf.org'
> Subject: Re: [pim] Error in PIM-SM forwarding rules 
>
> >Suppose that all of the following are true.
> >
> >- RPF_interface(RP(G)) == RPF_interface(S)
> >- JoinDesired(*,G) == TRUE
> >- JoinDesired(S,G) == FALSE
> >- (S,G) Assert state-machine is in NoInfo state
> >
> >If now a Preferred (S,G) Assert is received on 
> >RPF_interface(RP(G)), the (S,G) Assert state-machine will switch 
> >to the "I Am Assert Loser" state, performing Actions A6 which 
> >cause SPTbit(S,G) to be set to TRUE.  Once this has happened,
> >any (S,G) traffic received on RPF_interface(RP(G)) will not be
> >forwarded, because neither...
> 
> The rules for transitioning from "NoInfo" to "I Am Assert 
> Loser" state are:
> 
>      Receive Preferred Assert with RPT bit clear AND
>           AssertTrackingDesired(S,G,I)==TRUE
>           We're interested in (S,G) Asserts, either because I is a
>           downstream interface for which we have (S,G) or (*,G)
>           forwarding state, or because I is the upstream 
>           interface for S and we have (S,G) forwarding state.  The
>           received assert that has a better metric than our own, so
>           we do not win the Assert. We transition to "I am Assert
>           Loser" and perform actions A6.
> 
> Ok, so taking a look at AssertTrackingDesired(S,G,I):
> 
>   AssertTrackingDesired(S,G,I) =
>      (I in ( ( joins(*,*,RP(G)) (+) joins(*,G) (-) prunes(S,G,rpt) )
>              (+) ( pim_include(*,G) (-) pim_exclude(S,G) )
>              (-) lost_assert(*,G)
>              (+) joins(S,G) ) )
>      OR (local_receiver_include(S,G,I) == TRUE
>          AND (I_am_DR(I) OR (AssertWinner(S,G,I) == me)))
>      OR ((RPF_interface(S) == I) AND (JoinDesired(S,G) == TRUE))
>      OR ((RPF_interface(RP(G)) == I) AND (JoinDesired(*,G) == TRUE)
>          AND (SPTbit(S,G) == FALSE))
> 
> The first clause (I in ...) only applies to downstream interfaces,
> which isn't the case here.  local_receiver_include is false.
> JoinDesired(S,G) is false because the keepalivetimer isn't
> running. SPTbit(S,G) is false.  
> 
> So AssertTrackingDesired will be false.  We won't track this assert.
> As we won't track the assert, SPTbit won't be set.

But AssertTrackingDesired(S,G) _will_ be true, because the final clause
'(RPF_interface(RP(G)) == I) AND (JoinDesired(*,G) == TRUE) AND (SPTbit(S,G)
== FALSE)' will be true (as each part is true by assumption).

Cheers,
James.

---
James Lingard
Network Protocols Group
Data Connection Ltd (DCL)
Tel: +44 20 8366 1177
Fax: +44 20 8363 1039
Email: James.Lingard <at> dataconnection.com
Web: http://www.dataconnection.com/

Gmane