INET Framework for OMNeT++/OMNEST
inet::ospfv2::NeighborStateExchange Class Reference

#include <Ospfv2NeighborStateExchange.h>

Inheritance diagram for inet::ospfv2::NeighborStateExchange:
inet::ospfv2::NeighborState

Public Member Functions

virtual void processEvent (Neighbor *neighbor, Neighbor::NeighborEventType event) override
 
virtual Neighbor::NeighborStateType getState () const override
 
- Public Member Functions inherited from inet::ospfv2::NeighborState
virtual ~NeighborState ()
 

Additional Inherited Members

- Protected Member Functions inherited from inet::ospfv2::NeighborState
void changeState (Neighbor *neighbor, NeighborState *newState, NeighborState *currentState)
 
bool updateLsa (Neighbor *neighbor)
 

Member Function Documentation

◆ getState()

virtual Neighbor::NeighborStateType inet::ospfv2::NeighborStateExchange::getState ( ) const
inlineoverridevirtual

◆ processEvent()

void inet::ospfv2::NeighborStateExchange::processEvent ( Neighbor neighbor,
Neighbor::NeighborEventType  event 
)
overridevirtual

Implements inet::ospfv2::NeighborState.

25 {
26  if ((event == Neighbor::KILL_NEIGHBOR) || (event == Neighbor::LINK_DOWN)) {
27  MessageHandler *messageHandler = neighbor->getInterface()->getArea()->getRouter()->getMessageHandler();
28  neighbor->reset();
29  messageHandler->clearTimer(neighbor->getInactivityTimer());
30  changeState(neighbor, new NeighborStateDown, this);
31  }
32  else if (event == Neighbor::INACTIVITY_TIMER) {
33  neighbor->reset();
34  if (neighbor->getInterface()->getType() == Ospfv2Interface::NBMA) {
35  MessageHandler *messageHandler = neighbor->getInterface()->getArea()->getRouter()->getMessageHandler();
36  messageHandler->startTimer(neighbor->getPollTimer(), neighbor->getInterface()->getPollInterval());
37  }
38  changeState(neighbor, new NeighborStateDown, this);
39  }
40  else if (event == Neighbor::ONEWAY_RECEIVED) {
41  neighbor->reset();
42  changeState(neighbor, new NeighborStateInit, this);
43  }
44  else if (event == Neighbor::HELLO_RECEIVED) {
45  MessageHandler *messageHandler = neighbor->getInterface()->getArea()->getRouter()->getMessageHandler();
46  messageHandler->clearTimer(neighbor->getInactivityTimer());
47  messageHandler->startTimer(neighbor->getInactivityTimer(), neighbor->getRouterDeadInterval());
48  }
49  else if (event == Neighbor::IS_ADJACENCY_OK) {
50  if (!neighbor->needAdjacency()) {
51  neighbor->reset();
52  changeState(neighbor, new NeighborStateTwoWay, this);
53  }
54  }
55  else if ((event == Neighbor::SEQUENCE_NUMBER_MISMATCH) || (event == Neighbor::BAD_LINK_STATE_REQUEST)) {
56  MessageHandler *messageHandler = neighbor->getInterface()->getArea()->getRouter()->getMessageHandler();
57  neighbor->reset();
58  neighbor->incrementDDSequenceNumber();
59  neighbor->sendDatabaseDescriptionPacket(true);
60  messageHandler->startTimer(neighbor->getDDRetransmissionTimer(), neighbor->getInterface()->getRetransmissionInterval());
61  changeState(neighbor, new NeighborStateExchangeStart, this);
62  }
63  else if (event == Neighbor::EXCHANGE_DONE) {
64  if (neighbor->isLinkStateRequestListEmpty()) {
65  MessageHandler *messageHandler = neighbor->getInterface()->getArea()->getRouter()->getMessageHandler();
66  messageHandler->startTimer(neighbor->getDDRetransmissionTimer(), neighbor->getRouterDeadInterval());
67  neighbor->clearRequestRetransmissionTimer();
68  changeState(neighbor, new NeighborStateFull, this);
69  }
70  else {
71  MessageHandler *messageHandler = neighbor->getInterface()->getArea()->getRouter()->getMessageHandler();
72  messageHandler->startTimer(neighbor->getDDRetransmissionTimer(), neighbor->getRouterDeadInterval());
73  changeState(neighbor, new NeighborStateLoading, this);
74  }
75  }
76  else if (event == Neighbor::UPDATE_RETRANSMISSION_TIMER) {
77  neighbor->retransmitUpdatePacket();
78  neighbor->startUpdateRetransmissionTimer();
79  }
80  else if (event == Neighbor::REQUEST_RETRANSMISSION_TIMER) {
81  neighbor->sendLinkStateRequestPacket();
82  neighbor->startRequestRetransmissionTimer();
83  }
84 }

The documentation for this class was generated from the following files:
inet::ospfv2::Neighbor::LINK_DOWN
@ LINK_DOWN
Definition: Ospfv2Neighbor.h:43
inet::ospfv2::Neighbor::HELLO_RECEIVED
@ HELLO_RECEIVED
Definition: Ospfv2Neighbor.h:30
inet::ospfv2::Neighbor::ONEWAY_RECEIVED
@ ONEWAY_RECEIVED
Definition: Ospfv2Neighbor.h:39
inet::ospfv2::NeighborState::changeState
void changeState(Neighbor *neighbor, NeighborState *newState, NeighborState *currentState)
Definition: Ospfv2NeighborState.cc:16
inet::ospfv2::Neighbor::EXCHANGE_DONE
@ EXCHANGE_DONE
Definition: Ospfv2Neighbor.h:34
inet::ospfv2::Neighbor::IS_ADJACENCY_OK
@ IS_ADJACENCY_OK
Definition: Ospfv2Neighbor.h:37
inet::ospfv2::Neighbor::BAD_LINK_STATE_REQUEST
@ BAD_LINK_STATE_REQUEST
Definition: Ospfv2Neighbor.h:35
inet::ospfv2::Neighbor::INACTIVITY_TIMER
@ INACTIVITY_TIMER
Definition: Ospfv2Neighbor.h:41
inet::ospfv2::Ospfv2Interface::NBMA
@ NBMA
Definition: Ospfv2Interface.h:34
inet::ospfv2::Neighbor::EXCHANGE_STATE
@ EXCHANGE_STATE
Definition: Ospfv2Neighbor.h:55
inet::ospfv2::Neighbor::UPDATE_RETRANSMISSION_TIMER
@ UPDATE_RETRANSMISSION_TIMER
Definition: Ospfv2Neighbor.h:45
inet::ospfv2::Neighbor::SEQUENCE_NUMBER_MISMATCH
@ SEQUENCE_NUMBER_MISMATCH
Definition: Ospfv2Neighbor.h:38
inet::ospfv2::Neighbor::KILL_NEIGHBOR
@ KILL_NEIGHBOR
Definition: Ospfv2Neighbor.h:40
inet::ospfv2::Neighbor::REQUEST_RETRANSMISSION_TIMER
@ REQUEST_RETRANSMISSION_TIMER
Definition: Ospfv2Neighbor.h:46