Ben Greear wrote:

> I think this snippet shows the problem.  We are disabling the old timer and 
> starting
> a new timer.
> 
> [ 2007/10/22 19:38:04 TRACE xorp_ospfv2 OSPF ] Event(NegotiationDone) 
> Interface(12.16.12/12.16.12) Neighbour(99.1.1.9) State(ExStart)
> [ 2007/10/22 19:38:04 TRACE xorp_ospfv2 OSPF ] stop_rxmt_timer: 0x838ab08 
> 12.16.12/12.16.12 Neighbour: 99.1.1.9  NegotiationDone (master)
> [ 2007/10/22 19:38:04 TRACE xorp_ospfv2 OSPF ] start_rxmt_timer: 0x838ab08 
> 12.16.12/12.16.12 Neighbour: 99.1.1.9  send_data_description from 
> NegotiationDone
> [ 2007/10/22 19:38:04 TRACE xorp_ospfv2 OSPF ] send_data_description_packet, 
> Interface(12.16.12/12.16.12) Neighbour(99.1.1.9) State(Exchange)
> [ 2007/10/22 19:38:05 TRACE xorp_ospfv2 OSPF ] stop_rxmt_timer: 0x838ab08 
> 12.16.12/12.16.12 Neighbour: 99.1.1.9  push_lsas
> [ 2007/10/22 19:38:05 TRACE xorp_ospfv2 OSPF ] start_rxmt_timer: 0x838ab08 
> 12.16.12/12.16.12 Neighbour: 99.1.1.9  push_lsas
> [ 2007/10/22 19:38:05 TRACE xorp_ospfv2 OSPF ] stop_rxmt_timer: 0x838ab08 
> 12.16.12/12.16.12 Neighbour: 99.1.1.9  push_lsas
> [ 2007/10/22 19:38:05 TRACE xorp_ospfv2 OSPF ] start_rxmt_timer: 0x838ab08 
> 12.16.12/12.16.12 Neighbour: 99.1.1.9  push_lsas
> 
> even though we are not out of the Exchange state
> ...
> [ 2007/10/22 19:38:06 TRACE xorp_ospfv2 OSPF ] start_rxmt_timer: 0x838ab08 
> 12.16.12/12.16.12 Neighbour: 99.1.1.9  push_lsas
> [ 2007/10/22 19:38:06 TRACE xorp_ospfv2 OSPF ] Event(LoadingDone) 
> Interface(12.16.12/12.16.12) Neighbour(99.1.1.9) State(Exchange)

So, it seems push_lsas causes the send_data_description timer to be 
over-written.  This code seems to do the trick
(ignore all the extra debugging..I want to keep it in longer to help find other 
bugs more
quickly.)

Another fix might be to have multiple timers..as this problem could exist 
elsewhere.

template <typename A>
bool
Neighbour<A>::push_lsas(const char* message)
{

     if (get_state() == Exchange) {
        XLOG_TRACE(true, "WARNING:  cannot do a push_lsas in Exchange state 
because that will"
                   " over-write our one and only timer that needs to finish 
with send_data_description"
                   " state first, neighbour: %p %s Neighbour: %s  State: %s  
%s\n",
                   this, _peer.get_if_name().c_str(),
                   pr_id(get_candidate_id()).c_str(),
                   pp_state(get_state()).c_str(),
                   message);
        // Can't return false here...calling code will assert in area_router.cc 
--Ben
        return true;
     }


> 
> 
> 
>>       Atanu.
> 
> 


-- 
Ben Greear <[EMAIL PROTECTED]>
Candela Technologies Inc  http://www.candelatech.com

_______________________________________________
Xorp-hackers mailing list
[email protected]
http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/xorp-hackers

Reply via email to