Subject: Comments on draft-ietf-pim-sm-v2-new-02

From: "Mroz, Mike" <[email-masked]>
Date: Fri, 23 Mar 2001 07:37:09 -0500

Hello.

I have the following comments/questions:

1. Assume a router R1 has (*,*,RP) state, and does not have either
   (*,G) or (S,G) state. The following sequence then occurs:
   * On a downstream interface I, R1 receives an (S,G) datagram.
   * R1 instantiates (*,G) state (because "Data Arrives for G and
     CouldAssert(*,G,I)" occurs) and sends an Assert(*,G) to interface I.
   * R1 then receives the same (S,G) datagram from the upstream interface
     and forwards it to I.
   * R1 then receives an Assert(S,G) over interface I.
   It is clear that some other router (R2) is connected to the
   multi-access LAN attached to interface I and that it has (S,G)
   state. R2 should therefore become the AssertWinner(S,G,I). One 
   would expect that R1 would generate the event "Receive Preferred
   Assert with RPTbit clear and AssTrDes(S,G,I)". However,
   AssTrDes(S,G,I) will not become True because of its specified 
   definition. This would be fixed if AssertTrackingDesired(S,G,I) 
   included joins(*,*,RP):
    AssertTrackingDesired(S,G,I) =
        (I in ( ( joins(*,*,RP) (+) joins(*,G) (-) prunes(S,G,rpt) )
            (+) ( pim_include(*,G) (-) pim_exclude(S,G) )
            (-) lost_assert(*,G)
            (+) joins(S,G) (+) pim_include(S,G) ) )
        OR (RPF_Interface(S) == I AND JoinDesired(S,G) == TRUE)
        OR (RPF_Interface(RP) == I) and JoinDesired(*,G) == TRUE
            AND (SPTbit(S,G) == FALSE)
2. AssertWinner(S,G,I) and AssertWinner(*,G,I) are not defined. I have
   been assuming these are the same as the "Assert winner's IP Address" 
   in per-interface (S,G) and (*,G) state, respectively. Also, there 
   are references to AssertWinner(*,G) in the (*,G) Assert Winner
   State Machine actions.
3. The default for AssertWinner(S,G,I) is given as NULL. There is no 
   default given for AssertWinner(*,G,I). I have been assuming the 
   default is "me". If so, the definition of lost_assert(*,G,I) makes
   sense.
4. The definition of prunes(S,G,rpt) on page 21 specifies an incorrect
   state machine (should be the state of the FSM in section 4.4.4, 
   not 4.4.3).
5. In the (*,G) Assert State Machine table, "Receive Inferior Assert 
   with RPTbit set" should be "Receive Inferior Assert with RPTbit 
   set and CouldAssert(*,G,I)".
6. p. 24, multicast forwarding pseudo-code: In final else clause where
   Asserts are sent, is it intended that the code fall through and 
   send the packet over the (uninitialized) oiflist?
7. In the per-(S,G) Register State Machine, the Register Stop timer 
   doesn't appear to be running in Join state. Yet the RP Changed 
   event will stop the timer. Am I missing something? 
8. In the Upstream (S,G,rpt) state machine for triggered messages, 
   RPTJoinDesired(G)->False event in NP state should cause the OT 
   timer to be stopped.
9. In the Upstream (S,G,rpt) state machine for triggered messages,
   PruneDesired(S,G,rpt)->True event in P state has no specified 
   action (not even a hyphen).

------------------------
Michael D. Mroz
Network Peripherals, Inc.
Tel: (919)313-4683 (temporary)
FAX: (919)313-4643 (temporary)