[Xorp-hackers] OSPF stuck in Exchange state.

Ben Greear greearb at candelatech.com
Mon Oct 22 20:30:47 PDT 2007


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 <greearb at candelatech.com>
Candela Technologies Inc  http://www.candelatech.com



More information about the Xorp-hackers mailing list