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