[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