Subject: RE: [pim] question on pim assert

From: "Ju, Yu" <[email-masked]>
Date: Mon, 25 Mar 2002 19:46:44 -0500

Mark,

Please see reply inline.

Yu

> -----Original Message-----
> From: Mark Handley [mailto:[email-masked]]
> Sent: Monday, March 25, 2002 7:12 PM
> To: Ju, Yu
> Cc: [email-masked]'; [email-masked]
> Subject: Re: [pim] question on pim assert 
> 
> 
> 
> >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).
> 
> 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.
> 

You are right. But let's there is another downstream router that sends (S,G)
join to R1, then this case can exist.

> >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. 
> 
> 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.
> 

If the first packet from S2 arrives at R2 and is forwarded on the LAN, R1
will send out (*,G) assert and become the winner. When R2 receives this
inferior assert, it will send assert (*,G) and claim itself as the winner.
This assert from R2 will cause R1 to transit to (*,G) assert L state.

So why don't we allow R1 to transit to (*,G) assert L state at the first
place when (S,G) assert state transit from NoInfo to W state?

> Cheers,
> 	Mark
_______________________________________________
pim mailing list
[email-masked]
http://catarina.usc.edu/mailman/listinfo/pim

---

From: John Zwiebel <[email-masked]>
Date: Mon, 25 Mar 2002 18:06:55 -0800

> place when (S,G) assert state transit from NoInfo to W state?
You said a downstream router sent an (S,G) join to R1.
R1 should now have (S,G) state.
It will not send a (*,G) assert, but an (S,G) assert.
R2 will then lose the (S,G) assert because it will have to transition
to "win" state for (S,G).  (*,G for that source is no longer important).

If you cause R1 to "lose", then -all- sources will no longer
come down the shared-tree.

The shared-tree is separate and distinct from the source tree and
if you don't remember that you get confused about what is suppose to
happen.

---

From: Mark Handley <[email-masked]>
Date: Tue, 26 Mar 2002 11:34:47 -0800

>place when (S,G) assert state transit from NoInfo to W state?

Getting the Assert mechanisms to work properly in the current spec
took many days of meetings.  There are many corner cases that need to
be covered.  It was just plain hard.  If we were designing PIM from
scratch again now (as opposed to trying to document and fix a deployed
protocol) I would never do it this way.

Anyway, I can think of two good reasons *not* to do what you propose:

1. What you propose is purely an optimization.  The mechanism works
correctly and sufficiently efficiently without it.  We decided as a
point of principle that there should be no special cases that are not
needed for correctness.  Yours would be a special case that is only an
optimization, and not an important optimization at that - it would
complicate the protocol (because you have to think through all the
other interactions with the other state machines and with deployed
implementations) and make it less likely to be implemented correctly.

2. All the other routers on the LAN need to hold the Assert state too.
In some cases they'd need to hold two winners from a single assert
exchange - one for (S,G) and one for (*,G).  For this to work, you'd
have to have an (S,G) assert *not* suppress a (*,G) assert so that the
(*,G) assert winner can be correctly chosen.  This is would not be
compatible with current deployed implementations.

In general, if the spec is incorrect, we want to know.  If what you're
proposing is purely an optimization, and it requires special-case
code, we're probably not interested.

 - Mark