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