OSPF::NeighborState Class Reference

#include <OSPFNeighborState.h>

Inheritance diagram for OSPF::NeighborState:

OSPF::NeighborStateAttempt OSPF::NeighborStateDown OSPF::NeighborStateExchange OSPF::NeighborStateExchangeStart OSPF::NeighborStateFull OSPF::NeighborStateInit OSPF::NeighborStateLoading OSPF::NeighborStateTwoWay List of all members.

Public Member Functions

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

Protected Member Functions

void ChangeState (Neighbor *neighbor, NeighborState *newState, NeighborState *currentState)

Constructor & Destructor Documentation

virtual OSPF::NeighborState::~NeighborState (  )  [inline, virtual]

00013 {}


Member Function Documentation

void OSPF::NeighborState::ChangeState ( Neighbor neighbor,
NeighborState newState,
NeighborState currentState 
) [protected]

00007 {
00008 
00009     OSPF::Neighbor::NeighborStateType   oldState            = currentState->GetState ();
00010     OSPF::Neighbor::NeighborStateType   nextState           = newState->GetState ();
00011     bool                                rebuildRoutingTable = false;
00012 
00013     neighbor->ChangeState (newState, currentState);
00014 
00015     if ((oldState == OSPF::Neighbor::FullState) || (nextState == OSPF::Neighbor::FullState)) {
00016         OSPF::RouterID   routerID  = neighbor->GetInterface ()->GetArea ()->GetRouter ()->GetRouterID ();
00017         OSPF::RouterLSA* routerLSA = neighbor->GetInterface ()->GetArea ()->FindRouterLSA (routerID);
00018 
00019         if (routerLSA != NULL) {
00020             long sequenceNumber = routerLSA->getHeader ().getLsSequenceNumber ();
00021             if (sequenceNumber == MAX_SEQUENCE_NUMBER) {
00022                 routerLSA->getHeader ().setLsAge (MAX_AGE);
00023                 neighbor->GetInterface ()->GetArea ()->FloodLSA (routerLSA);
00024                 routerLSA->IncrementInstallTime ();
00025             } else {
00026                 OSPF::RouterLSA* newLSA = neighbor->GetInterface ()->GetArea ()->OriginateRouterLSA ();
00027 
00028                 newLSA->getHeader ().setLsSequenceNumber (sequenceNumber + 1);
00029                 newLSA->getHeader ().setLsChecksum (0);    // TODO: calculate correct LS checksum
00030                 rebuildRoutingTable |= routerLSA->Update (newLSA);
00031                 delete newLSA;
00032 
00033                 neighbor->GetInterface ()->GetArea ()->FloodLSA (routerLSA);
00034             }
00035         }
00036 
00037         if (neighbor->GetInterface ()->GetState () == OSPF::Interface::DesignatedRouterState) {
00038             OSPF::NetworkLSA* networkLSA = neighbor->GetInterface ()->GetArea ()->FindNetworkLSA (ULongFromIPv4Address (neighbor->GetInterface ()->GetAddressRange ().address));
00039 
00040             if (networkLSA != NULL) {
00041                 long sequenceNumber = networkLSA->getHeader ().getLsSequenceNumber ();
00042                 if (sequenceNumber == MAX_SEQUENCE_NUMBER) {
00043                     networkLSA->getHeader ().setLsAge (MAX_AGE);
00044                     neighbor->GetInterface ()->GetArea ()->FloodLSA (networkLSA);
00045                     networkLSA->IncrementInstallTime ();
00046                 } else {
00047                     OSPF::NetworkLSA* newLSA = neighbor->GetInterface ()->GetArea ()->OriginateNetworkLSA (neighbor->GetInterface ());
00048 
00049                     if (newLSA != NULL) {
00050                         newLSA->getHeader ().setLsSequenceNumber (sequenceNumber + 1);
00051                         newLSA->getHeader ().setLsChecksum (0);    // TODO: calculate correct LS checksum
00052                         rebuildRoutingTable |= networkLSA->Update (newLSA);
00053                         delete newLSA;
00054                     } else {    // no neighbors on the network -> old NetworkLSA must be flushed
00055                         networkLSA->getHeader ().setLsAge (MAX_AGE);
00056                         networkLSA->IncrementInstallTime ();
00057                     }
00058 
00059                     neighbor->GetInterface ()->GetArea ()->FloodLSA (networkLSA);
00060                 }
00061             }
00062         }
00063     }
00064 
00065     if (rebuildRoutingTable) {
00066         neighbor->GetInterface ()->GetArea ()->GetRouter ()->RebuildRoutingTable ();
00067     }
00068 }

virtual Neighbor::NeighborStateType OSPF::NeighborState::GetState ( void   )  const [pure virtual]

Implemented in OSPF::NeighborStateAttempt, OSPF::NeighborStateDown, OSPF::NeighborStateExchange, OSPF::NeighborStateExchangeStart, OSPF::NeighborStateFull, OSPF::NeighborStateInit, OSPF::NeighborStateLoading, and OSPF::NeighborStateTwoWay.

virtual void OSPF::NeighborState::ProcessEvent ( Neighbor neighbor,
Neighbor::NeighborEventType  event 
) [pure virtual]

Implemented in OSPF::NeighborStateAttempt, OSPF::NeighborStateDown, OSPF::NeighborStateExchange, OSPF::NeighborStateExchangeStart, OSPF::NeighborStateFull, OSPF::NeighborStateInit, OSPF::NeighborStateLoading, and OSPF::NeighborStateTwoWay.


The documentation for this class was generated from the following files:
Generated on Wed Apr 4 13:20:25 2007 for INET Framework for OMNeT++/OMNEST by  doxygen 1.4.7