Subject: [Pim] (*,G) Upstream state machine

From: "Bakar" <[email-masked]>
Date: 14 Feb 2002 03:52:38 -0000

Hi,

in draft-4, sec 4.4.6 Sending (*,G) Join/Prune Messages

when MRIB.next_hop(RP(G)) changes
the text form says,

"The upstream (*,G) state machine remains in Joined state. Send Prune(*,G) to the old upstream neighbor, which is the old value of RPF`(*,G). Send Join(*,G) to the new upstream neighbor which is the new value of MRIB.next_hop(RP(G))."

Lets say 
A is old MRIB.next_hop(RP(G))
B is AssertWinner(*,G,I)
C is new MRIB.next_hop(RP(G))
and A, B, C are all on the same interface.

as i understand, we should send Prune to B, and Join to C. 
after this when the upsream JT expires, should we send Join to RPF`(*,G) or MRIB.next_hop(RP(G))

thanx,
Bakar

_______________________________________________
Pim mailing list
[email-masked]
http://catarina.usc.edu/mailman/listinfo/pim

---

From: Mark Handley <[email-masked]>
Date: Thu, 14 Feb 2002 07:34:47 -0800

>"The upstream (*,G) state machine remains in Joined state. Send Prune(*,G) to 
>the old upstream neighbor, which is the old value of RPF`(*,G). Send Join(*,G)
> to the new upstream neighbor which is the new value of MRIB.next_hop(RP(G))."
>
>Lets say 

If C is on a different interface from A and B, then the Assert state
machine causes the assert state to be dropped when
MRIB.next_hop(RP(G)) changes interface.  

The question is only meaningful when C is on the same interface as A
and B.  In this case, from a high level point of view, it doesn't
really matter whether B or C now does the forwarding.  We know the
path to the RP through B works.  But C might have a lower cost path.
So we send a single Join to C, but we maintain the Assert state.  In
the normal case, traffic will start arriving via C, and an Assert will
happen causing the best path to win, and all our future periodic Joins
go to the winner.  If (for whatever reason) the path through C doesn't
work, the path through B will continue forwarding, and so we want the
next periodic Join to go to B to maintain that state.

The only issue with this would be in the case where B's next hop to
RP(G) becomes the LAN containing C.  In this case the Assert state
machine will cause B to send an AssertCancel, and so you'll then send
periodic joins to C in the normal way.

So, your summary is correct, even though it may seem a little strange
at first glance.

BTW, if you dropped the Assert state, then most likely the same thing
would happen, but you'd be fractionally less robust.

I hope this clarifies the thinking behind this.

Cheers,
	Mark