#include <OSPFNeighborStateExchange.h>
Inheritance diagram for OSPF::NeighborStateExchange:

Public Member Functions | |
| virtual void | ProcessEvent (Neighbor *neighbor, Neighbor::NeighborEventType event) |
| virtual Neighbor::NeighborStateType | GetState (void) const |
|
|
Implements OSPF::NeighborState. 00012 { return Neighbor::ExchangeState; }
|
|
||||||||||||
|
00014 {
00015 if ((event == OSPF::Neighbor::KillNeighbor) || (event == OSPF::Neighbor::LinkDown)) {
00016 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler ();
00017 neighbor->Reset ();
00018 messageHandler->ClearTimer (neighbor->GetInactivityTimer ());
00019 ChangeState (neighbor, new OSPF::NeighborStateDown, this);
00020 }
00021 if (event == OSPF::Neighbor::InactivityTimer) {
00022 neighbor->Reset ();
00023 if (neighbor->GetInterface ()->GetType () == OSPF::Interface::NBMA) {
00024 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler ();
00025 messageHandler->StartTimer (neighbor->GetPollTimer (), neighbor->GetInterface ()->GetPollInterval ());
00026 }
00027 ChangeState (neighbor, new OSPF::NeighborStateDown, this);
00028 }
00029 if (event == OSPF::Neighbor::OneWayReceived) {
00030 neighbor->Reset ();
00031 ChangeState (neighbor, new OSPF::NeighborStateInit, this);
00032 }
00033 if (event == OSPF::Neighbor::HelloReceived) {
00034 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler ();
00035 messageHandler->ClearTimer (neighbor->GetInactivityTimer ());
00036 messageHandler->StartTimer (neighbor->GetInactivityTimer (), neighbor->GetRouterDeadInterval ());
00037 }
00038 if (event == OSPF::Neighbor::IsAdjacencyOK) {
00039 if (!neighbor->NeedAdjacency ()) {
00040 neighbor->Reset ();
00041 ChangeState (neighbor, new OSPF::NeighborStateTwoWay, this);
00042 }
00043 }
00044 if ((event == OSPF::Neighbor::SequenceNumberMismatch) || (event == OSPF::Neighbor::BadLinkStateRequest)) {
00045 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler ();
00046 neighbor->Reset ();
00047 neighbor->IncrementDDSequenceNumber ();
00048 neighbor->SendDatabaseDescriptionPacket (true);
00049 messageHandler->StartTimer (neighbor->GetDDRetransmissionTimer (), neighbor->GetInterface ()->GetRetransmissionInterval ());
00050 ChangeState (neighbor, new OSPF::NeighborStateExchangeStart, this);
00051 }
00052 if (event == OSPF::Neighbor::ExchangeDone) {
00053 if (neighbor->IsLinkStateRequestListEmpty ()) {
00054 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler ();
00055 messageHandler->StartTimer (neighbor->GetDDRetransmissionTimer (), neighbor->GetRouterDeadInterval ());
00056 neighbor->ClearRequestRetransmissionTimer ();
00057 ChangeState (neighbor, new OSPF::NeighborStateFull, this);
00058 } else {
00059 MessageHandler* messageHandler = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetMessageHandler ();
00060 messageHandler->StartTimer (neighbor->GetDDRetransmissionTimer (), neighbor->GetRouterDeadInterval ());
00061 ChangeState (neighbor, new OSPF::NeighborStateLoading, this);
00062 }
00063 }
00064 if (event == OSPF::Neighbor::UpdateRetransmissionTimer) {
00065 neighbor->RetransmitUpdatePacket ();
00066 neighbor->StartUpdateRetransmissionTimer ();
00067 }
00068 if (event == OSPF::Neighbor::RequestRetransmissionTimer) {
00069 neighbor->SendLinkStateRequestPacket ();
00070 neighbor->StartRequestRetransmissionTimer ();
00071 }
00072 }
|
1.4.1