|
INET Framework for OMNeT++/OMNEST
|
00001 #include "AnsaOSPFNeighborStateExchangeStart.h" 00002 #include "AnsaOSPFNeighborStateDown.h" 00003 #include "AnsaOSPFNeighborStateInit.h" 00004 #include "AnsaOSPFNeighborStateTwoWay.h" 00005 #include "AnsaOSPFNeighborStateExchange.h" 00006 #include "AnsaMessageHandler.h" 00007 #include "AnsaOSPFInterface.h" 00008 #include "AnsaOSPFArea.h" 00009 #include "AnsaOSPFRouter.h" 00010 00011 void AnsaOSPF::NeighborStateExchangeStart::ProcessEvent(AnsaOSPF::Neighbor* neighbor, AnsaOSPF::Neighbor::NeighborEventType event) 00012 { 00013 if ((event == AnsaOSPF::Neighbor::KillNeighbor) || (event == AnsaOSPF::Neighbor::LinkDown)) { 00014 MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler(); 00015 neighbor->Reset(); 00016 messageHandler->ClearTimer(neighbor->GetInactivityTimer()); 00017 ChangeState(neighbor, new AnsaOSPF::NeighborStateDown, this); 00018 } 00019 if (event == AnsaOSPF::Neighbor::InactivityTimer) { 00020 neighbor->Reset(); 00021 if (neighbor->GetInterface()->GetType() == AnsaOSPF::Interface::NBMA) { 00022 MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler(); 00023 messageHandler->StartTimer(neighbor->GetPollTimer(), neighbor->GetInterface()->GetPollInterval()); 00024 } 00025 ChangeState(neighbor, new AnsaOSPF::NeighborStateDown, this); 00026 } 00027 if (event == AnsaOSPF::Neighbor::OneWayReceived) { 00028 neighbor->Reset(); 00029 ChangeState(neighbor, new AnsaOSPF::NeighborStateInit, this); 00030 } 00031 if (event == AnsaOSPF::Neighbor::HelloReceived) { 00032 MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler(); 00033 messageHandler->ClearTimer(neighbor->GetInactivityTimer()); 00034 messageHandler->StartTimer(neighbor->GetInactivityTimer(), neighbor->GetRouterDeadInterval()); 00035 } 00036 if (event == AnsaOSPF::Neighbor::IsAdjacencyOK) { 00037 if (!neighbor->NeedAdjacency()) { 00038 neighbor->Reset(); 00039 ChangeState(neighbor, new AnsaOSPF::NeighborStateTwoWay, this); 00040 } 00041 } 00042 if (event == AnsaOSPF::Neighbor::DDRetransmissionTimer) { 00043 MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler(); 00044 neighbor->RetransmitDatabaseDescriptionPacket(); 00045 messageHandler->StartTimer(neighbor->GetDDRetransmissionTimer(), neighbor->GetInterface()->GetRetransmissionInterval()); 00046 } 00047 if (event == AnsaOSPF::Neighbor::NegotiationDone) { 00048 neighbor->CreateDatabaseSummary(); 00049 neighbor->SendDatabaseDescriptionPacket(); 00050 MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler(); 00051 messageHandler->ClearTimer(neighbor->GetDDRetransmissionTimer()); 00052 ChangeState(neighbor, new AnsaOSPF::NeighborStateExchange, this); 00053 } 00054 }