Subject: Re: [pim] PIM-SM draft error?

From: "Prashant Jhingran" <[email-masked]>
Date: 4 Oct 2002 11:52:27 -0000

Hi Roger,
       I feel it should be "send a Prune(S,G,rpt) to RPF(*,G)" 
rather than RPF'(*,G) !!
what do you say??
regards,
Prashant

On Fri, 04 Oct 2002 Roger Lin wrote :
>Hi,
>
>   On Section 4.5.9, in the paragraph that describes
>PruneDesired(S,Grpt)->TRUE
>event, the draft proclaims "send a Prune(S,G,rpt) to 
>RPF'(S,G,rpt".
>
>   Shouldn't it be "send a Prune(S,G,rpt) to RPF'(*,G)"?
>
>
>   Roger Lin
>   IPInfusion
>
>_______________________________________________
>pim mailing list
>[email-masked]
>http://catarina.usc.edu/mailman/listinfo/pim

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

---

From: Roger Lin <[email-masked]>
Date: Fri, 04 Oct 2002 10:57:56 -0700

Prashant,

  In this particular case, RPF'(*,G) will yeild the same result
as RPF(*,G) since the assert is a (S,G) assert, not a (*,G) one.

  The reason for my contention is that RPF'(S,G,rpt) in this
context is the (S,G) assert winner, and you don't want to send
Prune(S,G,rpt) to the winner, you want to prune the S from your
original RPF neighbor on the RP tree.

/Roger

---

From: Rishabh Parekh <[email-masked]>
Date: Fri, 04 Oct 2002 11:32:13 -0700

Prashant,
I think that the Prune(S,G,rpt) should be sent to RPF '(*,G) neighbor
since RPF ' (*,G)considers (*,G) Assert. So, if a (*,G) Assert had
occured, the Prune (S, G, rpt) would be sent to the AssertWinner(*,G,I),
otherwise the Prune would be sent to the MRIB.next_hop (RP(G)).

It would be nice if the authors of the draft can comment on this.

Regards,
Rishabh Parekh.

--
----------------------
Rishabh Parekh
Software Engineer
IP Infusion inc.
[email-masked]
Office: 408-794-1546
----------------------

---

From: Mark Handley <[email-masked]>
Date: Fri, 04 Oct 2002 12:37:52 -0700

>It would be nice if the authors of the draft can comment on this.

The (S,G) traffic traffic will be coming from RPF'(S,G,rpt) on
RPF_interface(RP(G)).  This will be the same as RPF(*,G) unless there
was either an (S,G) or (*,G) assert.  RPF'(*,G) is not where the
traffic is coming from if there was an (S,G) assert.

So, now assume PruneDesired(S,G,rpt) becomes True.

There are possible two reasons for this:

 1. inherited_olist(S,G,rpt) becomes NULL
 2. we're now forwarding on (S,G) state and RPF'(*,G) != RPF'(S,G)

If it's reason (1), then we want to stop the traffic, so we want to
send it to RPF'(S,G,rpt).  

If it's reason (2), then we want to stop the traffic on the RPT
because the SPT is different from the RPT. 

There are two cases here:

  a) RPF_interface(S) == RPF_interface(RP(G))

     Here, RPF'(S,G) == RPF'(S,G,rpt) != RPF'(*,G).  
     The (S,G) assert stopped RPF'(*,G) from forwarding, and RPF'(S,G)
     is now forwarding, and packets are arriving from the correct
     interface.  Everything's already OK.

     There's really no need to send any prune at all, but sending a
     Prune(S,G,rpt) isn't going to stop the traffic that's being
     forwarded on (S,G) state, so it won't cause any problem.  It'll
     just be silently ignored.

  b) RPF_interface(S) != RPF_interface(RP(G))

     In this case RPF'(S,G,rpt) != RPF'(S,G).  Thus we do want to send
     a Prune to where the traffic was coming from on RPF_interface(RP(G)),
     and this is RPF'(S,G,rpt).

In short, the spec is correct.  In case 2a, a spurious prune is sent,
but doesn't do any harm.  I don't recall for sure, but I suspect we
decided it wasn't worth optimizing this case.

Cheers,
	Mark