INET Framework for OMNeT++/OMNEST
inet::ospfv2::NeighborState Class Referenceabstract

#include <Ospfv2NeighborState.h>

Inheritance diagram for inet::ospfv2::NeighborState:
inet::ospfv2::NeighborStateAttempt inet::ospfv2::NeighborStateDown inet::ospfv2::NeighborStateExchange inet::ospfv2::NeighborStateExchangeStart inet::ospfv2::NeighborStateFull inet::ospfv2::NeighborStateInit inet::ospfv2::NeighborStateLoading inet::ospfv2::NeighborStateTwoWay

Public Member Functions

virtual ~NeighborState ()
 
virtual void processEvent (Neighbor *neighbor, Neighbor::NeighborEventType event)=0
 
virtual Neighbor::NeighborStateType getState () const =0
 

Protected Member Functions

void changeState (Neighbor *neighbor, NeighborState *newState, NeighborState *currentState)
 
bool updateLsa (Neighbor *neighbor)
 

Constructor & Destructor Documentation

◆ ~NeighborState()

virtual inet::ospfv2::NeighborState::~NeighborState ( )
inlinevirtual
23 {}

Member Function Documentation

◆ changeState()

void inet::ospfv2::NeighborState::changeState ( Neighbor neighbor,
NeighborState newState,
NeighborState currentState 
)
protected

◆ getState()

◆ processEvent()

◆ updateLsa()

bool inet::ospfv2::NeighborState::updateLsa ( Neighbor neighbor)
protected
26 {
27  bool shouldRebuildRoutingTable = false;
28  RouterId routerID = neighbor->getInterface()->getArea()->getRouter()->getRouterID();
29  RouterLsa *routerLSA = neighbor->getInterface()->getArea()->findRouterLSA(routerID);
30 
31  if (routerLSA != nullptr) {
32  long sequenceNumber = routerLSA->getHeader().getLsSequenceNumber();
33  if (sequenceNumber == MAX_SEQUENCE_NUMBER) {
34  routerLSA->getHeaderForUpdate().setLsAge(MAX_AGE);
35  neighbor->getInterface()->getArea()->floodLSA(routerLSA);
36  routerLSA->incrementInstallTime();
37  }
38  else {
39  RouterLsa *newLSA = neighbor->getInterface()->getArea()->originateRouterLSA();
40 
41  newLSA->getHeaderForUpdate().setLsSequenceNumber(sequenceNumber + 1);
42  shouldRebuildRoutingTable |= routerLSA->update(newLSA);
43  delete newLSA;
44 
45  neighbor->getInterface()->getArea()->floodLSA(routerLSA);
46  }
47  }
48 
49  if (neighbor->getInterface()->getState() == Ospfv2Interface::DESIGNATED_ROUTER_STATE) {
50  NetworkLsa *networkLSA = neighbor->getInterface()->getArea()->findNetworkLSA(neighbor->getInterface()->getAddressRange().address);
51 
52  if (networkLSA != nullptr) {
53  long sequenceNumber = networkLSA->getHeader().getLsSequenceNumber();
54  if (sequenceNumber == MAX_SEQUENCE_NUMBER) {
55  networkLSA->getHeaderForUpdate().setLsAge(MAX_AGE);
56  neighbor->getInterface()->getArea()->floodLSA(networkLSA);
57  networkLSA->incrementInstallTime();
58  }
59  else {
60  NetworkLsa *newLSA = neighbor->getInterface()->getArea()->originateNetworkLSA(neighbor->getInterface());
61 
62  if (newLSA != nullptr) {
63  newLSA->getHeaderForUpdate().setLsSequenceNumber(sequenceNumber + 1);
64  shouldRebuildRoutingTable |= networkLSA->update(newLSA);
65  delete newLSA;
66  }
67  else { // no neighbors on the network -> old NetworkLsa must be flushed
68  networkLSA->getHeaderForUpdate().setLsAge(MAX_AGE);
69  networkLSA->incrementInstallTime();
70  }
71 
72  neighbor->getInterface()->getArea()->floodLSA(networkLSA);
73  }
74  }
75  }
76 
77  return shouldRebuildRoutingTable;
78 }

Referenced by changeState().


The documentation for this class was generated from the following files:
inet::ospfv2::RouterId
Ipv4Address RouterId
Definition: Ospfv2Common.h:129
inet::ospfv2::Neighbor::FULL_STATE
@ FULL_STATE
Definition: Ospfv2Neighbor.h:57
MAX_SEQUENCE_NUMBER
#define MAX_SEQUENCE_NUMBER
Definition: Ospfv2Common.h:34
inet::ospfv2::Ospfv2Interface::DESIGNATED_ROUTER_STATE
@ DESIGNATED_ROUTER_STATE
Definition: Ospfv2Interface.h:58
inet::ospfv2::NeighborState::updateLsa
bool updateLsa(Neighbor *neighbor)
Definition: Ospfv2NeighborState.cc:25
MAX_AGE
#define MAX_AGE
Definition: Ospfv2Common.h:27