Subject: Assert - event RPF inetrface changed away from Interface I

From: "Jyotheeswara Rao Kurma" <[email-masked]>
Date: Mon, 16 Apr 2001 12:18:39 +0500

Hi :

  This is regarding event  RPF inetrface changed away from Interface I.
  Could anybody tell me when this event can occur ??? This event is 
listed in draft to occur when Interface I is in Assert Looser state.

I am not sure what is the concept of "Assert" on upstream interfaces?
Could anybody please expalin "Assert on upstream interfaces " ????  

Thanks,
Jyotheesh

---

From: Mark Handley <[email-masked]>
Date: Mon, 16 Apr 2001 08:32:48 -0700

>Could anybody please expalin "Assert on upstream interfaces " ????  

Assert has two functions:

 - stop an upstream router on a LAN from forwarding.

 - cause a downstream router on a LAN to change its choice of upstream
   neighbor (this is RPF'(S,G) vs RPF(S,G), etc) so that all
   downstream routers send their Joins to the same upstream router.

You need to do both to make asserts work properly (i.e., without
periodic flooding of duplicates and thrashing of join state or
temporary black holes).  

One example:

     to S        to S
       ^           ^
       |           |
       A           B
       |           |
    ---+-+---------+-+---
         |           |
         C           D

C sends Join(S,G) to A
D sends Join(S,G) to B
traffic from S arrives via both A and B.
B wins the assert.

Is C doesn't record the assert state, then periodically C sends
Join(S,G) to A, which causes periodic flooding of duplicates.  If,
instead, as a result of the assert, C now regards B as RPF'(S,G), then
the flooding can be eliminated.  This is what the new spec specifies.

Now,
D sends Prune(S,G) to B

You also need this Prune(S,G) to trigger C to send Join(S,G).  To do
this (and not to override in other cases), C needs to record the
Assert so he knows that a Prune(S,G) to B matters and must be
overridden.  Otherwise traffic stops flowing until C's next peridic
Join to A completes.  So the new spec specifies that if you're in
Joined(S,G) state and see a Prune(S,G) to RPF'(S,G), then you trigger
a Join(S,G) to RPF'(S,G) to override the Prune (note that the Join can
be suppressed if someone else sends it first).

There are other cases where this matters too - but you should get the
general idea from the above example.

Cheers,
	Mark