23 Jan 2004 18:12
RE: Error in PIM-SM forwarding rules
James Lingard <James.Lingard <at> dataconnection.com>
2004-01-23 17:12:49 GMT
2004-01-23 17:12:49 GMT
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/
RSS Feed