INET Framework for OMNeT++/OMNEST
AnsaOspf6::NeighborState Class Reference

#include <ansaOspfNeighborState6.h>

Inheritance diagram for AnsaOspf6::NeighborState:
AnsaOspf6::NeighborStateAttempt AnsaOspf6::NeighborStateDown AnsaOspf6::NeighborStateExchange AnsaOspf6::NeighborStateExchangeStart AnsaOspf6::NeighborStateFull AnsaOspf6::NeighborStateInit AnsaOspf6::NeighborStateLoading AnsaOspf6::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)

Detailed Description

Definition at line 23 of file ansaOspfNeighborState6.h.


Constructor & Destructor Documentation

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

Definition at line 28 of file ansaOspfNeighborState6.h.

{}

Member Function Documentation

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

Definition at line 23 of file ansaOspfNeighborState6.cc.

Referenced by AnsaOspf6::NeighborStateAttempt::ProcessEvent(), AnsaOspf6::NeighborStateTwoWay::ProcessEvent(), AnsaOspf6::NeighborStateLoading::ProcessEvent(), AnsaOspf6::NeighborStateInit::ProcessEvent(), AnsaOspf6::NeighborStateFull::ProcessEvent(), AnsaOspf6::NeighborStateExchangeStart::ProcessEvent(), AnsaOspf6::NeighborStateExchange::ProcessEvent(), and AnsaOspf6::NeighborStateDown::ProcessEvent().

                                                                              {

   AnsaOspf6::Neighbor::NeighborStateType oldState = currentState->GetState();
   AnsaOspf6::Neighbor::NeighborStateType nextState = newState->GetState();
   bool rebuildRoutingTable = false;

   neighbor->ChangeState(newState, currentState);

   /* TODO:
   if (((oldState == AnsaOspf6::Neighbor::FullState) || (nextState == AnsaOspf6::Neighbor::FullState))
         && !(neighbor->GetInterface()->IsGoingDown())){
      AnsaOspf6::RouterID routerID = neighbor->GetInterface()->GetArea()->GetRouter()->GetRouterID();
      AnsaOspf6::RouterLsa* routerLSA = neighbor->GetInterface()->GetArea()->FindRouterLSA(routerID);

      if (routerLSA != NULL){
         long sequenceNumber = routerLSA->getHeader().getLsSequenceNumber();
         if (sequenceNumber == MAX_SEQUENCE_NUMBER){
            routerLSA->getHeader().setLsAge(MAX_AGE);
            neighbor->GetInterface()->GetArea()->FloodLSA(routerLSA);
            routerLSA->IncrementInstallTime();
         }else{
            AnsaOspf6::RouterLsa* newLSA = neighbor->GetInterface()->GetArea()->OriginateRouterLSA();

            newLSA->getHeader().setLsSequenceNumber(sequenceNumber + 1);
            rebuildRoutingTable |= routerLSA->Update(newLSA);
            delete newLSA;

            neighbor->GetInterface()->GetArea()->FloodLSA(routerLSA);
         }
      }

      if (neighbor->GetInterface()->GetState() == AnsaOspf6::Interface::DesignatedRouterState){
         AnsaOspf6::NetworkLSA* networkLSA = neighbor->GetInterface()->GetArea()->FindNetworkLSA(
               ULongFromIPv4Address(neighbor->GetInterface()->GetAddressRange().address));

         if (networkLSA != NULL){
            long sequenceNumber = networkLSA->getHeader().getLsSequenceNumber();
            if (sequenceNumber == MAX_SEQUENCE_NUMBER){
               networkLSA->getHeader().setLsAge(MAX_AGE);
               neighbor->GetInterface()->GetArea()->FloodLSA(networkLSA);
               networkLSA->IncrementInstallTime();
            }else{
               AnsaOspf6::NetworkLsa* newLSA =
                     neighbor->GetInterface()->GetArea()->OriginateNetworkLSA(
                           neighbor->GetInterface());

               if (newLSA != NULL){
                  newLSA->getHeader().setLsSequenceNumber(sequenceNumber + 1);
                  rebuildRoutingTable |= networkLSA->Update(newLSA);
                  delete newLSA;
               }else{ // no neighbors on the network -> old NetworkLSA must be flushed
                  networkLSA->getHeader().setLsAge(MAX_AGE);
                  networkLSA->IncrementInstallTime();
               }

               neighbor->GetInterface()->GetArea()->FloodLSA(networkLSA);
            }
         }
      }
   }

   if (rebuildRoutingTable){
      neighbor->GetInterface()->GetArea()->GetRouter()->RebuildRoutingTable();
   }
   */
}

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