INET Framework for OMNeT++/OMNEST
OSPF::NeighborStateInit Class Reference

#include <OSPFNeighborStateInit.h>

Inheritance diagram for OSPF::NeighborStateInit:
OSPF::NeighborState

List of all members.

Public Member Functions

virtual void ProcessEvent (Neighbor *neighbor, Neighbor::NeighborEventType event)
virtual Neighbor::NeighborStateType GetState (void) const

Member Function Documentation

virtual Neighbor::NeighborStateType OSPF::NeighborStateInit::GetState ( void  ) const [inline, virtual]

Implements OSPF::NeighborState.

{ return Neighbor::InitState; }
void OSPF::NeighborStateInit::ProcessEvent ( OSPF::Neighbor neighbor,
Neighbor::NeighborEventType  event 
) [virtual]

Implements OSPF::NeighborState.

{
    if ((event == OSPF::Neighbor::KillNeighbor) || (event == OSPF::Neighbor::LinkDown)) {
        MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
        neighbor->Reset();
        messageHandler->ClearTimer(neighbor->GetInactivityTimer());
        ChangeState(neighbor, new OSPF::NeighborStateDown, this);
    }
    if (event == OSPF::Neighbor::InactivityTimer) {
        neighbor->Reset();
        if (neighbor->GetInterface()->GetType() == OSPF::Interface::NBMA) {
            MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
            messageHandler->StartTimer(neighbor->GetPollTimer(), neighbor->GetInterface()->GetPollInterval());
        }
        ChangeState(neighbor, new OSPF::NeighborStateDown, this);
    }
    if (event == OSPF::Neighbor::HelloReceived) {
        MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
        messageHandler->ClearTimer(neighbor->GetInactivityTimer());
        messageHandler->StartTimer(neighbor->GetInactivityTimer(), neighbor->GetRouterDeadInterval());
    }
    if (event == OSPF::Neighbor::TwoWayReceived) {
        if (neighbor->NeedAdjacency()) {
            MessageHandler* messageHandler = neighbor->GetInterface()->GetArea()->GetRouter()->GetMessageHandler();
            if (!(neighbor->IsFirstAdjacencyInited())) {
                neighbor->InitFirstAdjacency();
            } else {
                neighbor->IncrementDDSequenceNumber();
            }
            neighbor->SendDatabaseDescriptionPacket(true);
            messageHandler->StartTimer(neighbor->GetDDRetransmissionTimer(), neighbor->GetInterface()->GetRetransmissionInterval());
            ChangeState(neighbor, new OSPF::NeighborStateExchangeStart, this);
        } else {
            ChangeState(neighbor, new OSPF::NeighborStateTwoWay, this);
        }
    }
}

The documentation for this class was generated from the following files: