Subject: RE: [pim] question on pim assert

From: "Ju, Yu" <[email-masked]>
Date: Mon, 25 Mar 2002 18:58:40 -0500

Mark,

Probably my question will be clearer with the following picture:

                   S
                  .
                .
              .
          R1 O                O  R2
             |                |
             |                |
            ====================  
                        |
                        |
                        O  Rd

Suppose R1 is the DR on the LAN and there is local membership for both (*,G)
and (S,G). Suppose R1 is receiving data from S for G on the SPT (thus SPT
bit is set). Suppose Rd desires to join (*,G) and sent (*,G) join to R2.
When data from S for G comes and is delivered to the LAN by R1, R2 will do a
(*,G) assert. When R1 received this assert, its (S,G) assert state will
transfer to winner and (*,G)assert state remains NoInfo. Since R1 is in
(*,G) assert NoInfo state, it will continue to send (*,G) join (with (S,G,
rtp) prune) to RP(G) and continue receive and forward data from another
source, say S2, for G. Note that at the same time, R2 is assert winner for
(*,G) and it will also receive and forward data from S2 for G. 

> -----Original Message-----
> From: Mark Handley [mailto:[email-masked]]
> Sent: Monday, March 25, 2002 6:32 PM
> To: Ju, Yu
> Cc: [email-masked]'; [email-masked]
> Subject: Re: [pim] question on pim assert 
> 
> 
> 
> >On page 85 of draft-ietf-pim-sm-v2-new-05.txt, it says :
> >"For example, if both the (S,G) and (*,G) assert state 
> machines where in
> >the NoInfo state when an Assert message arrives, and the 
> message causes
> >the (S,G) state machine to transition to either "W" or "L" 
> state, then
> >the assert would not be processed by the (*,G) assert state machine."
> > 
> >Suppose a DR on has both (S,G) and (*,G) in NoInfo state and 
> receive a (*,G)
> >assert message, if CouldAsser(S,G,I) is true, (S,G,I) assert 
> state will
> >transfer to W state. According the above statement, (*,G) 
> assert state will
> >remail NoInfo state. Thus the DR will continue send (*,G) 
> join to RP(G) and
> >will continue to forward (*,G) data even thought anoth 
> router on the LAN is
> >the assert winer and is forwarding (*,G) data too. 
> 
> Given that you don't say it, I'll assume that S is not on the LAN for
> which this router is the DR.  Further, we'll assume that there is a
> local member on the LAN that has joined (*,G) using IGMP.  I think
> this is probably the case you're asking about.
> 
> Assume:
> (S,G) downstream FSM is in NoInfo.
> (*,G) downstream FSM is in NoInfo.
> (*,*,RP(G)) downstream FSM is in NoInfo.
> Both Assert FSMs are in NoInfo.
> 
> This combination of state will cause a DR to be sending Join(*,G)
> towards the RP.
> 
> 
> What happens next depends on whether SPTbit is set, but in this case
> it won't normally be (there are special case exceptions).
> 
>  - CouldAssert(S,G,I) is false because SPTbit is false.
> 
>  - AssertTrackingDesired(S,G,I) is true because 
> pim_include(*,G) is true.
> 
>  - CouldAssert(*,G,I) is true iff RPF_interface(RP(G)) != I. 
> 
>  - AssertTrackingDesired(*,G,I) is true.
> 
> 
> So when we see an Assert from router R, we attempt to process it with
> the (S,G) Assert FSM.  We can't transition to W state because
> CouldAssert(S,G,I) is false.  The only possible transition is "Receive
> Preferred Assert with RPTbit clear and AssTrDes(S,G,I)==true".
> 
>  - If it's a (*,G) Assert (RTPbit in the message is set) the (S,G)
>    Assert FSM stays in NoInfo state.  The (*,G) Assert FSM handles the
>    assert, and it transitions to L or W state accordingly.
> 
>  - If it's a (S,G) Assert (RTPbit in the message is cleared) we
>    transition to Loser state.  The (*,G) Assert FSM will not 
> be invoked,
>    and remains in NoInfo state.
> 
> In the latter case, in sending an (S,G) assert, R said that it had
> (S,G) state.  It didn't say whether it had (*,G) state.  So it is
> correct that our (*,G) Assert FSM remains in NoInfo state.  Note that
> our inherited_olist(S,G,rpt) now no longer contains I because
> lost_assert(S,G,rpt) is true, so we send don't forward traffic from S
> onto the LAN, and we send Prune(S,G,rpt) upstream.
> 
> Hope this helps,
> 
> Mark
> 
> 
_______________________________________________
pim mailing list
[email-masked]
http://catarina.usc.edu/mailman/listinfo/pim

---

From: Mark Handley <[email-masked]>
Date: Mon, 25 Mar 2002 16:12:15 -0800

>and (S,G).

Actually this can't be the case as far as PIM is concerned.  G is
either in include mode or exclude mode.  If it's in include mode as
you imply, then the (S,G) IGMP join is completely subsumed by the
(*,G) IGMP join state in the IGMP processing machinery, so PIM would
only see the (*,G) IGMP join.

>Suppose R1 is receiving data from S for G on the SPT (thus SPT

As I said above, this precise scenario can't happen.  But even if it
could happen, the first arrival of a packet from S2 on the LAN would
cause a (*,G) assert to happen, and R1 would lose that assert.

Cheers,
	Mark