|
INET Framework for OMNeT++/OMNEST
|
00001 #include "AnsaOSPFNeighborStateLoading.h" 00002 #include "AnsaOSPFNeighborStateDown.h" 00003 #include "AnsaOSPFNeighborStateInit.h" 00004 #include "AnsaOSPFNeighborStateFull.h" 00005 #include "AnsaOSPFNeighborStateTwoWay.h" 00006 #include "AnsaOSPFNeighborStateExchangeStart.h" 00007 #include "AnsaMessageHandler.h" 00008 #include "AnsaOSPFInterface.h" 00009 #include "AnsaOSPFArea.h" 00010 #include "AnsaOSPFRouter.h" 00011 00012 void AnsaOSPF::NeighborStateLoading::ProcessEvent(AnsaOSPF::Neighbor* neighbor, AnsaOSPF::Neighbor::NeighborEventType event) 00013 { 00014 if ((event == AnsaOSPF::Neighbor::KillNeighbor) || (event == AnsaOSPF::Neighbor::LinkDown)) { 00015 MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler(); 00016 neighbor->Reset(); 00017 messageHandler->ClearTimer(neighbor->GetInactivityTimer()); 00018 ChangeState(neighbor, new AnsaOSPF::NeighborStateDown, this); 00019 } 00020 if (event == AnsaOSPF::Neighbor::InactivityTimer) { 00021 neighbor->Reset(); 00022 if (neighbor->GetInterface()->GetType() == AnsaOSPF::Interface::NBMA) { 00023 MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler(); 00024 messageHandler->StartTimer(neighbor->GetPollTimer(), neighbor->GetInterface()->GetPollInterval()); 00025 } 00026 ChangeState(neighbor, new AnsaOSPF::NeighborStateDown, this); 00027 } 00028 if (event == AnsaOSPF::Neighbor::OneWayReceived) { 00029 neighbor->Reset(); 00030 ChangeState(neighbor, new AnsaOSPF::NeighborStateInit, this); 00031 } 00032 if (event == AnsaOSPF::Neighbor::HelloReceived) { 00033 MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler(); 00034 messageHandler->ClearTimer(neighbor->GetInactivityTimer()); 00035 messageHandler->StartTimer(neighbor->GetInactivityTimer(), neighbor->GetRouterDeadInterval()); 00036 } 00037 if (event == AnsaOSPF::Neighbor::LoadingDone) { 00038 neighbor->ClearRequestRetransmissionTimer(); 00039 ChangeState(neighbor, new AnsaOSPF::NeighborStateFull, this); 00040 } 00041 if (event == AnsaOSPF::Neighbor::IsAdjacencyOK) { 00042 if (!neighbor->NeedAdjacency()) { 00043 neighbor->Reset(); 00044 ChangeState(neighbor, new AnsaOSPF::NeighborStateTwoWay, this); 00045 } 00046 } 00047 if ((event == AnsaOSPF::Neighbor::SequenceNumberMismatch) || (event == AnsaOSPF::Neighbor::BadLinkStateRequest)) { 00048 MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler(); 00049 neighbor->Reset(); 00050 neighbor->IncrementDDSequenceNumber(); 00051 neighbor->SendDatabaseDescriptionPacket(true); 00052 messageHandler->StartTimer(neighbor->GetDDRetransmissionTimer(), neighbor->GetInterface()->GetRetransmissionInterval()); 00053 ChangeState(neighbor, new AnsaOSPF::NeighborStateExchangeStart, this); 00054 } 00055 if (event == AnsaOSPF::Neighbor::RequestRetransmissionTimer) { 00056 neighbor->SendLinkStateRequestPacket(); 00057 neighbor->StartRequestRetransmissionTimer(); 00058 } 00059 if (event == AnsaOSPF::Neighbor::UpdateRetransmissionTimer) { 00060 neighbor->RetransmitUpdatePacket(); 00061 neighbor->StartUpdateRetransmissionTimer(); 00062 } 00063 if (event == AnsaOSPF::Neighbor::DDRetransmissionTimer) { 00064 neighbor->DeleteLastSentDDPacket(); 00065 } 00066 }