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

#include <ansaOspfInterface6.h>

List of all members.

Public Types

enum  InterfaceEventType {
  InterfaceUp = 0, HelloTimer = 1, WaitTimer = 2, AcknowledgementTimer = 3,
  BackupSeen = 4, NeighborChange = 5, LoopIndication = 6, UnloopIndication = 7,
  InterfaceDown = 8
}
enum  OspfInterfaceType {
  UnknownType = 0, PointToPoint = 1, Broadcast = 2, NBMA = 3,
  PointToMultiPoint = 4, Virtual = 5
}
enum  InterfaceStateType {
  DownState = 0, LoopbackState = 1, WaitingState = 2, PointToPointState = 3,
  NotDesignatedRouterState = 4, BackupState = 5, DesignatedRouterState = 6
}

Public Member Functions

 Interface (OspfInterfaceType ifType=UnknownType)
virtual ~Interface (void)
void ProcessEvent (InterfaceEventType event)
void Reset (void)
void SendHelloPacket (IPv6Address destination, short ttl=1)
void SendLSAcknowledgement (OspfLsaHeader6 *lsaHeader, IPv6Address destination)
NeighborGetNeighborByID (RouterID neighborID)
NeighborGetNeighborByAddress (IPv6Address address)
void AddNeighbor (Neighbor *neighbor)
InterfaceStateType GetState (void) const
bool HasAnyNeighborInStates (int states) const
void RemoveFromAllRetransmissionLists (LsaKeyType6 lsaKey)
bool IsOnAnyRetransmissionList (LsaKeyType6 lsaKey) const
bool FloodLSA (OspfLsa6 *lsa, Interface *intf=NULL, Neighbor *neighbor=NULL)
void AddDelayedAcknowledgement (OspfLsaHeader6 &lsaHeader)
void SendDelayedAcknowledgements (void)
void AgeTransmittedLSALists (void)
OspfLinkStateUpdatePacket6CreateUpdatePacket (OspfLsa6 *lsa)
void SetType (OspfInterfaceType ifType)
OspfInterfaceType GetType (void) const
void SetIfIndex (IfaceID id)
unsigned char GetIfIndex (void) const
void SetIfName (const char *name)
const char * GetIfName (void) const
void SetInstanceID (InstanceID id)
InstanceID GetInstanceID (void) const
void SetMtu (unsigned short ifMTU)
unsigned short GetMtu (void) const
void SetAreaID (AreaID id)
AreaID GetAreaID (void) const
void SetTransitAreaID (AreaID id)
AreaID GetTransitAreaID (void) const
void SetOutputCost (Metric cost)
Metric GetOutputCost (void) const
void SetRetransmissionInterval (short interval)
short GetRetransmissionInterval (void) const
void SetTransmissionDelay (short delay)
short GetTransmissionDelay (void) const
void SetAcknowledgementDelay (short delay)
short GetAcknowledgementDelay (void) const
void SetRouterPriority (unsigned char priority)
unsigned char GetRouterPriority (void) const
void SetHelloInterval (short interval)
short GetHelloInterval (void) const
void SetPollInterval (short interval)
short GetPollInterval (void) const
void SetRouterDeadInterval (short interval)
short GetRouterDeadInterval (void) const
void SetInterfaceAddress (IPv6Address addr)
IPv6Address GetInterfaceAddress (void) const
void AddAddressPrefix (IPv6AddressPrefix prefix, bool advertise)
unsigned int GetAddressPrefixCount (void) const
IPv6AddressPrefix GetAddressPrefix (unsigned int index) const
unsigned long GetLinkLSACount (void) const
LinkLsaGetLinkLSA (unsigned long i)
const LinkLsaGetLinkLSA (unsigned long i) const
OspfTimer6GetHelloTimer (void)
OspfTimer6GetWaitTimer (void)
OspfTimer6GetAcknowledgementTimer (void)
DesignatedRouterID GetDesignatedRouter (void) const
DesignatedRouterID GetBackupDesignatedRouter (void) const
unsigned long GetNeighborCount (void) const
NeighborGetNeighbor (unsigned long i)
const NeighborGetNeighbor (unsigned long i) const
void SetArea (Area *area)
AreaGetArea (void)
const AreaGetArea (void) const
bool IsGoingDown (void)
void SetIsGoingDown (bool b)

Static Public Member Functions

static const char * GetStateString (InterfaceStateType stateType)
static const char * GetTypeString (OspfInterfaceType type)

Private Member Functions

void ChangeState (InterfaceState *newState, InterfaceState *currentState)

Private Attributes

OspfInterfaceType interfaceType
InterfaceStatestate
InterfaceStatepreviousState
IfaceID ifIndex
std::string ifName
InstanceID instanceID
unsigned short mtu
IPv6Address interfaceAddress
std::map< IPv6AddressPrefix,
bool, IPv6AddressPrefix_Less
advertiseAddressPrefixes
std::vector< IPv6AddressPrefixinterfaceAddressPrefixes
std::map< LinkStateID, LinkLsa * > linkLSAsByID
std::vector< LinkLsa * > linkLSAs
AreaID areaID
AreaID transitAreaID
short helloInterval
short pollInterval
short routerDeadInterval
short interfaceTransmissionDelay
unsigned char routerPriority
OspfTimer6helloTimer
OspfTimer6waitTimer
OspfTimer6acknowledgementTimer
std::map< RouterID, Neighbor * > neighboringRoutersByID
std::map< IPv6Address,
Neighbor *, IPv6Address_Less
neighboringRoutersByAddress
std::vector< Neighbor * > neighboringRouters
std::map< IPv6Address,
std::list< OspfLsaHeader6 >
, IPv6Address_Less
delayedAcknowledgements
DesignatedRouterID designatedRouter
DesignatedRouterID backupDesignatedRouter
Metric interfaceOutputCost
short retransmissionInterval
short acknowledgementDelay
AreaparentArea
bool isGoingDown

Friends

class InterfaceState

Detailed Description

Definition at line 32 of file ansaOspfInterface6.h.


Member Enumeration Documentation

Enumerator:
InterfaceUp 
HelloTimer 
WaitTimer 
AcknowledgementTimer 
BackupSeen 
NeighborChange 
LoopIndication 
UnloopIndication 
InterfaceDown 

Definition at line 34 of file ansaOspfInterface6.h.

Enumerator:
DownState 
LoopbackState 
WaitingState 
PointToPointState 
NotDesignatedRouterState 
BackupState 
DesignatedRouterState 

Definition at line 55 of file ansaOspfInterface6.h.

Enumerator:
UnknownType 
PointToPoint 
Broadcast 
NBMA 
PointToMultiPoint 
Virtual 

Definition at line 46 of file ansaOspfInterface6.h.

                          {
      UnknownType       = 0,
      PointToPoint      = 1,
      Broadcast         = 2,
      NBMA              = 3,
      PointToMultiPoint = 4,
      Virtual           = 5
   };

Constructor & Destructor Documentation

Definition at line 25 of file ansaOspfInterface6.cc.

Referenced by AnsaOspfRouting6::loadInterfaceConfig().

                                                                        :
      interfaceType(ifType),
      ifIndex(0),
      instanceID(0),
      mtu(0),
      areaID(AnsaOspf6::BackboneAreaID),
      transitAreaID(AnsaOspf6::BackboneAreaID),
      helloInterval(10),
      pollInterval(120),
      routerDeadInterval(40),
      interfaceTransmissionDelay(1),
      routerPriority(1),
      designatedRouter(AnsaOspf6::NullDesignatedRouterID),
      backupDesignatedRouter(AnsaOspf6::NullDesignatedRouterID),
      interfaceOutputCost(10),
      retransmissionInterval(5),
      acknowledgementDelay(1),
      parentArea(NULL),
      isGoingDown(false){

   state = new AnsaOspf6::InterfaceStateDown;
   previousState = NULL;
   helloTimer = new OspfTimer6;
   helloTimer->setTimerKind(InterfaceHelloTimer);
   helloTimer->setContextPointer(this);
   helloTimer->setName("AnsaOspf6::Interface::InterfaceHelloTimer");
   waitTimer = new OspfTimer6;
   waitTimer->setTimerKind(InterfaceWaitTimer);
   waitTimer->setContextPointer(this);
   waitTimer->setName("AnsaOspf6::Interface::InterfaceWaitTimer");
   /*
   acknowledgementTimer = new OspfTimer6;
   acknowledgementTimer->setTimerKind(InterfaceAcknowledgementTimer);
   acknowledgementTimer->setContextPointer(this);
   acknowledgementTimer->setName("AnsaOspf6::Interface::InterfaceAcknowledgementTimer");
   */
}
AnsaOspf6::Interface::~Interface ( void  ) [virtual]

Definition at line 64 of file ansaOspfInterface6.cc.

                                  {
   MessageHandler* messageHandler = parentArea->GetRouter()->GetMessageHandler();

   if (helloTimer != NULL){
      messageHandler->ClearTimer(helloTimer);
      delete helloTimer;
   }

   if (waitTimer != NULL){
      messageHandler->ClearTimer(waitTimer);
      delete waitTimer;
   }
   /* TODO
   messageHandler->ClearTimer(acknowledgementTimer);
   delete acknowledgementTimer;
   */
   if (previousState != NULL){
      delete previousState;
   }
   delete state;

   long neighborCount = neighboringRouters.size();
   for (long i = 0; i < neighborCount; i++){
      delete neighboringRouters[i];
   }
}

Member Function Documentation

void AnsaOspf6::Interface::AddAddressPrefix ( IPv6AddressPrefix  prefix,
bool  advertise 
) [inline]

Definition at line 163 of file ansaOspfInterface6.h.

Referenced by AnsaOspfRouting6::loadInterfaceConfig().

{ interfaceAddressPrefixes.push_back(prefix); advertiseAddressPrefixes[prefix] = advertise; }

Definition at line 206 of file ansaOspfInterface6.cc.

Referenced by AnsaOspf6::HelloHandler::ProcessPacket().

                                                                {
   neighboringRoutersByID[neighbor->GetNeighborID()] = neighbor;
   neighboringRoutersByAddress[neighbor->GetAddress()] = neighbor;
   neighbor->SetInterface(this);
   neighboringRouters.push_back(neighbor);
}

Definition at line 578 of file ansaOspfInterface6.cc.

                                                    {
   long neighborCount = neighboringRouters.size();
   for (long i = 0; i < neighborCount; i++){
      neighboringRouters[i]->AgeTransmittedLSAList();
   }
}
void AnsaOspf6::Interface::ChangeState ( AnsaOspf6::InterfaceState newState,
AnsaOspf6::InterfaceState currentState 
) [private]

Definition at line 102 of file ansaOspfInterface6.cc.

Referenced by AnsaOspf6::InterfaceState::ChangeState().

                                                                                                            {
   if (previousState != NULL) {
      delete previousState;
   }
   state = newState;
   previousState = currentState;
}

Definition at line 412 of file ansaOspfInterface6.cc.

Referenced by AnsaOspf6::LinkStateRequestHandler::ProcessPacket(), and AnsaOspf6::LinkStateUpdateHandler::ProcessPacket().

                                                                               {
   LsaType6 lsaType = static_cast<LsaType6> (lsa->getHeader().getLsType());
   OspfRouterLsa6* routerLSA = (lsaType == RouterLsaType) ? dynamic_cast<OspfRouterLsa6*> (lsa) : NULL;
   OspfNetworkLsa6* networkLSA = (lsaType == NetworkLsaType) ? dynamic_cast<OspfNetworkLsa6*> (lsa) : NULL;
   OspfInterAreaPrefixLsa6* interAreaPrefixLSA = (lsaType = InterAreaPrefixLsaType) ? dynamic_cast<OspfInterAreaPrefixLsa6*> (lsa) : NULL;
   OspfInterAreaRouterLsa6* interAreaRouterLSA = (lsaType = InterAreaRouterLsaType) ? dynamic_cast<OspfInterAreaRouterLsa6*> (lsa) : NULL;
   OspfAsExternalLsa6* asExternalLSA = (lsaType == AsExternalLsaType) ? dynamic_cast<OspfAsExternalLsa6*> (lsa) : NULL;
   OspfLinkLsa6* linkLSA = (lsaType == LinkLsaType) ?  dynamic_cast<OspfLinkLsa6*> (lsa) : NULL;
   OspfIntraAreaPrefixLsa6* intraAreaPrefixLSA = (lsaType = IntraAreaPrefixLsaType) ?  dynamic_cast<OspfIntraAreaPrefixLsa6*> (lsa) : NULL;

   if (  ((lsaType == RouterLsaType) && (routerLSA != NULL))
      || ((lsaType == NetworkLsaType) && (networkLSA != NULL))
      || ((lsaType == InterAreaPrefixLsaType) && (interAreaPrefixLSA != NULL))
      || ((lsaType == InterAreaRouterLsaType) && (interAreaRouterLSA != NULL))
      || ((lsaType == AsExternalLsaType) && (asExternalLSA != NULL))
      || ((lsaType == LinkLsaType) && (linkLSA != NULL))
      || ((lsaType == IntraAreaPrefixLsaType) && (intraAreaPrefixLSA != NULL))){

      OspfLinkStateUpdatePacket6* updatePacket = new OspfLinkStateUpdatePacket6;

      updatePacket->setType(LinkStateUpdatePacket);
      updatePacket->setRouterID(parentArea->GetRouter()->GetRouterID());
      updatePacket->setAreaID(areaID);
      updatePacket->setNumberOfLsas(1);

      switch (lsaType){
         case RouterLsaType: {
            updatePacket->setRouterLsasArraySize(1);
            updatePacket->setRouterLsas(0, *routerLSA);
            unsigned short lsAge = updatePacket->getRouterLsas(0).getHeader().getLsAge();
            if (lsAge < MAX_AGE - interfaceTransmissionDelay){
               updatePacket->getRouterLsas(0).getHeader().setLsAge(lsAge + interfaceTransmissionDelay);
            }else{
               updatePacket->getRouterLsas(0).getHeader().setLsAge(MAX_AGE);
            }}
            break;
         case NetworkLsaType: {
            updatePacket->setNetworkLsasArraySize(1);
            updatePacket->setNetworkLsas(0, *networkLSA);
            unsigned short lsAge = updatePacket->getNetworkLsas(0).getHeader().getLsAge();
            if (lsAge < MAX_AGE - interfaceTransmissionDelay){
               updatePacket->getNetworkLsas(0).getHeader().setLsAge(lsAge + interfaceTransmissionDelay);
            }else{
               updatePacket->getNetworkLsas(0).getHeader().setLsAge(MAX_AGE);
            }}
            break;
         case InterAreaPrefixLsaType: {
            updatePacket->setInterAreaPrefixLsasArraySize(1);
            updatePacket->setInterAreaPrefixLsas(0, *interAreaPrefixLSA);
            unsigned short lsAge = updatePacket->getInterAreaPrefixLsas(0).getHeader().getLsAge();
            if (lsAge < MAX_AGE - interfaceTransmissionDelay){
               updatePacket->getInterAreaPrefixLsas(0).getHeader().setLsAge(lsAge + interfaceTransmissionDelay);
            }else{
               updatePacket->getInterAreaPrefixLsas(0).getHeader().setLsAge(MAX_AGE);
            }}
            break;
         case InterAreaRouterLsaType: {
            updatePacket->setInterAreaRouterLsasArraySize(1);
            updatePacket->setInterAreaRouterLsas(0, *interAreaRouterLSA);
            unsigned short lsAge = updatePacket->getInterAreaRouterLsas(0).getHeader().getLsAge();
            if (lsAge < MAX_AGE - interfaceTransmissionDelay){
               updatePacket->getInterAreaRouterLsas(0).getHeader().setLsAge(lsAge + interfaceTransmissionDelay);
            }else{
               updatePacket->getInterAreaRouterLsas(0).getHeader().setLsAge(MAX_AGE);
            }}
            break;
         case AsExternalLsaType: {
            updatePacket->setAsExternalLsasArraySize(1);
            updatePacket->setAsExternalLsas(0, *asExternalLSA);
            unsigned short lsAge = updatePacket->getAsExternalLsas(0).getHeader().getLsAge();
            if (lsAge < MAX_AGE - interfaceTransmissionDelay){
               updatePacket->getAsExternalLsas(0).getHeader().setLsAge(lsAge + interfaceTransmissionDelay);
            }else{
               updatePacket->getAsExternalLsas(0).getHeader().setLsAge(MAX_AGE);
            }}
            break;
         case LinkLsaType: {
            updatePacket->setLinkLsasArraySize(1);
            updatePacket->setLinkLsas(0, *linkLSA);
            unsigned short lsAge = updatePacket->getLinkLsas(0).getHeader().getLsAge();
            if (lsAge < MAX_AGE - interfaceTransmissionDelay){
               updatePacket->getLinkLsas(0).getHeader().setLsAge(lsAge + interfaceTransmissionDelay);
            }else{
               updatePacket->getLinkLsas(0).getHeader().setLsAge(MAX_AGE);
            }}
            break;
         case IntraAreaPrefixLsaType: {
            updatePacket->setIntraAreaPrefixLsasArraySize(1);
            updatePacket->setIntraAreaPrefixLsas(0, *intraAreaPrefixLSA);
            unsigned short lsAge = updatePacket->getIntraAreaPrefixLsas(0).getHeader().getLsAge();
            if (lsAge < MAX_AGE - interfaceTransmissionDelay){
               updatePacket->getIntraAreaPrefixLsas(0).getHeader().setLsAge(lsAge + interfaceTransmissionDelay);
            }else{
               updatePacket->getIntraAreaPrefixLsas(0).getHeader().setLsAge(MAX_AGE);
            }}
            break;
         default:
            break;
      }
      return updatePacket;
   }
   return NULL;
}
bool AnsaOspf6::Interface::FloodLSA ( OspfLsa6 lsa,
AnsaOspf6::Interface intf = NULL,
AnsaOspf6::Neighbor neighbor = NULL 
)

Definition at line 287 of file ansaOspfInterface6.cc.

                                                                                                     {
   bool floodedBackOut = false;

   if (  (  (lsa->getHeader().getLsType() == AsExternalLsaType)
         && (interfaceType != AnsaOspf6::Interface::Virtual)
         && (parentArea->GetExternalRoutingCapability()))
      || (  (lsa->getHeader().getLsType() != AsExternalLsaType)
         && (  (  (areaID != AnsaOspf6::BackboneAreaID)
               && (interfaceType != AnsaOspf6::Interface::Virtual))
         || (areaID == AnsaOspf6::BackboneAreaID)))){

      long neighborCount = neighboringRouters.size();
      bool lsaAddedToRetransmissionList = false;
      AnsaOspf6::LinkStateID linkStateID = lsa->getHeader().getLinkStateID();
      AnsaOspf6::LsaKeyType6 lsaKey;

      lsaKey.linkStateID = linkStateID;
      lsaKey.advertisingRouter = lsa->getHeader().getAdvertisingRouter();

      for (long i = 0; i < neighborCount; i++){ // (1)

         if (neighboringRouters[i]->GetState() < AnsaOspf6::Neighbor::ExchangeState){ // (1) (a)
            continue;
         }

         if (neighboringRouters[i]->GetState() < AnsaOspf6::Neighbor::FullState){ // (1) (b)
            OspfLsaHeader6* requestLSAHeader = neighboringRouters[i]->FindOnRequestList(lsaKey);
            if (requestLSAHeader != NULL){
               // operator< and operator== on OSPFLSAHeaders determines which one is newer(less means older)
               if (lsa->getHeader() < (*requestLSAHeader)){
                  continue;
               }
               if (operator==(lsa->getHeader(), (*requestLSAHeader))){
                  neighboringRouters[i]->RemoveFromRequestList(lsaKey);
                  continue;
               }
               neighboringRouters[i]->RemoveFromRequestList(lsaKey);
            }
         }

         if (neighbor == neighboringRouters[i]){ // (1) (c)
            continue;
         }

         neighboringRouters[i]->AddToRetransmissionList(lsa); // (1) (d)
         lsaAddedToRetransmissionList = true;
      }


      if (lsaAddedToRetransmissionList){ // (2)
         if (  (intf != this)
            || (  (neighbor != NULL)
               && (neighbor->GetNeighborID() != designatedRouter)
               && (neighbor->GetNeighborID() != backupDesignatedRouter))){ // (3)

            if ((intf != this) || (GetState() != AnsaOspf6::Interface::BackupState)){ // (4)
               OspfLinkStateUpdatePacket6* updatePacket = CreateUpdatePacket(lsa); // (5)

               if (updatePacket != NULL){
                  int ttl = (interfaceType == AnsaOspf6::Interface::Virtual) ? VIRTUAL_LINK_TTL : 1;
                  AnsaOspf6::MessageHandler* messageHandler = parentArea->GetRouter()->GetMessageHandler();

                  if (interfaceType == AnsaOspf6::Interface::Broadcast){
                     if (  (GetState() == AnsaOspf6::Interface::DesignatedRouterState)
                        || (GetState() == AnsaOspf6::Interface::BackupState)
                        || (designatedRouter == AnsaOspf6::NullDesignatedRouterID)){
                        messageHandler->SendPacket(updatePacket, AnsaOspf6::AllSPFRouters, ifIndex, ttl);
                        for (long k = 0; k < neighborCount; k++){
                           neighboringRouters[k]->AddToTransmittedLSAList(lsaKey);
                           if (!neighboringRouters[k]->IsUpdateRetransmissionTimerActive()){
                              neighboringRouters[k]->StartUpdateRetransmissionTimer();
                           }
                        }
                     }else{
                        messageHandler->SendPacket(updatePacket, AnsaOspf6::AllDRouters, ifIndex, ttl);
                        AnsaOspf6::Neighbor* dRouter = GetNeighborByID(designatedRouter);
                        AnsaOspf6::Neighbor* backupDRouter = GetNeighborByID(backupDesignatedRouter);
                        if (dRouter != NULL){
                           dRouter->AddToTransmittedLSAList(lsaKey);
                           if (!dRouter->IsUpdateRetransmissionTimerActive()){
                              dRouter->StartUpdateRetransmissionTimer();
                           }
                        }
                        if (backupDRouter != NULL){
                           backupDRouter->AddToTransmittedLSAList(lsaKey);
                           if (!backupDRouter->IsUpdateRetransmissionTimerActive()){
                              backupDRouter->StartUpdateRetransmissionTimer();
                           }
                        }
                     }

                  }else{
                     if (interfaceType == AnsaOspf6::Interface::PointToPoint){
                        messageHandler->SendPacket(updatePacket, AnsaOspf6::AllSPFRouters, ifIndex, ttl);
                        if (neighborCount > 0){
                           neighboringRouters[0]->AddToTransmittedLSAList(lsaKey);
                           if (!neighboringRouters[0]->IsUpdateRetransmissionTimerActive()){
                              neighboringRouters[0]->StartUpdateRetransmissionTimer();
                           }
                        }
                     }else{
                        for (long m = 0; m < neighborCount; m++){
                           if (neighboringRouters[m]->GetState() >= AnsaOspf6::Neighbor::ExchangeState){
                              messageHandler->SendPacket(updatePacket, neighboringRouters[m]->GetAddress(), ifIndex, ttl);
                              neighboringRouters[m]->AddToTransmittedLSAList(lsaKey);
                              if (!neighboringRouters[m]->IsUpdateRetransmissionTimerActive()){
                                 neighboringRouters[m]->StartUpdateRetransmissionTimer();
                              }
                           }
                        }
                     }
                  }

                  if (intf == this){
                     floodedBackOut = true;
                  }
               }
            }
         }
      }
   }

   return floodedBackOut;
}
short AnsaOspf6::Interface::GetAcknowledgementDelay ( void  ) const [inline]

Definition at line 151 of file ansaOspfInterface6.h.

Definition at line 172 of file ansaOspfInterface6.h.

IPv6AddressPrefix AnsaOspf6::Interface::GetAddressPrefix ( unsigned int  index) const [inline]

Definition at line 165 of file ansaOspfInterface6.h.

Referenced by operator<<().

unsigned int AnsaOspf6::Interface::GetAddressPrefixCount ( void  ) const [inline]

Definition at line 164 of file ansaOspfInterface6.h.

Referenced by operator<<().

{ return interfaceAddressPrefixes.size(); }
const Area* AnsaOspf6::Interface::GetArea ( void  ) const [inline]

Definition at line 181 of file ansaOspfInterface6.h.

{ return parentArea; }
AreaID AnsaOspf6::Interface::GetAreaID ( void  ) const [inline]

Definition at line 141 of file ansaOspfInterface6.h.

{ return areaID; }

Definition at line 174 of file ansaOspfInterface6.h.

Referenced by operator<<().

const char* AnsaOspf6::Interface::GetIfName ( void  ) const [inline]

Definition at line 135 of file ansaOspfInterface6.h.

Referenced by operator<<().

{ return ifName.c_str(); }

Definition at line 137 of file ansaOspfInterface6.h.

Referenced by AnsaOspf6::MessageHandler::ProcessPacket().

{ return instanceID; }

Definition at line 162 of file ansaOspfInterface6.h.

{ return interfaceAddress; }
LinkLsa* AnsaOspf6::Interface::GetLinkLSA ( unsigned long  i) [inline]

Definition at line 167 of file ansaOspfInterface6.h.

{ return linkLSAs[i]; }
const LinkLsa* AnsaOspf6::Interface::GetLinkLSA ( unsigned long  i) const [inline]

Definition at line 168 of file ansaOspfInterface6.h.

{ return linkLSAs[i]; }
unsigned long AnsaOspf6::Interface::GetLinkLSACount ( void  ) const [inline]

Definition at line 166 of file ansaOspfInterface6.h.

{ return linkLSAs.size(); }
unsigned short AnsaOspf6::Interface::GetMtu ( void  ) const [inline]

Definition at line 139 of file ansaOspfInterface6.h.

Referenced by AnsaOspf6::DatabaseDescriptionHandler::ProcessPacket().

{ return mtu; }
const Neighbor* AnsaOspf6::Interface::GetNeighbor ( unsigned long  i) const [inline]

Definition at line 177 of file ansaOspfInterface6.h.

{ return neighboringRouters[i]; }

Definition at line 197 of file ansaOspfInterface6.cc.

                                                                               {
   std::map<IPv6Address, AnsaOspf6::Neighbor*, AnsaOspf6::IPv6Address_Less>::iterator neighborIt = neighboringRoutersByAddress.find(address);
   if (neighborIt != neighboringRoutersByAddress.end()){
      return (neighborIt->second);
   }else{
      return NULL;
   }
}

Definition at line 187 of file ansaOspfInterface6.cc.

Referenced by AnsaOspf6::LinkStateUpdateHandler::AcknowledgeLSA(), AnsaOspf6::HelloHandler::ProcessPacket(), and AnsaOspf6::MessageHandler::ProcessPacket().

                                                                                   {
   std::map<AnsaOspf6::RouterID, AnsaOspf6::Neighbor*>::iterator neighborIt =
         neighboringRoutersByID.find(neighborID);
   if (neighborIt != neighboringRoutersByID.end()){
      return (neighborIt->second);
   }else{
      return NULL;
   }
}
Metric AnsaOspf6::Interface::GetOutputCost ( void  ) const [inline]

Definition at line 145 of file ansaOspfInterface6.h.

Referenced by operator<<().

{ return interfaceOutputCost; }
const char * AnsaOspf6::Interface::GetStateString ( InterfaceStateType  stateType) [static]

Definition at line 217 of file ansaOspfInterface6.cc.

Referenced by operator<<(), and AnsaOspf6::MessageHandler::PrintEvent().

                                                                                             {
   switch (stateType){
      case DownState:
         return "Down";
      case LoopbackState:
         return "Loopback";
      case WaitingState:
         return "Waiting";
      case PointToPointState:
         return "PointToPoint";
      case NotDesignatedRouterState:
         return "NotDesignatedRouter";
      case BackupState:
         return "Backup";
      case DesignatedRouterState:
         return "DesignatedRouter";
      default:
         ASSERT(false);
   }
   return "";
}

Definition at line 143 of file ansaOspfInterface6.h.

Referenced by AnsaOspf6::MessageHandler::ProcessPacket().

{ return transitAreaID; }
short AnsaOspf6::Interface::GetTransmissionDelay ( void  ) const [inline]

Definition at line 149 of file ansaOspfInterface6.h.

const char * AnsaOspf6::Interface::GetTypeString ( OspfInterfaceType  type) [static]

Definition at line 239 of file ansaOspfInterface6.cc.

Referenced by operator<<().

                                                                    {
   switch (type){
      case UnknownType:
         return "Unknown";
      case PointToPoint:
         return "Point-to-Point";
      case Broadcast:
         return "Broadcast";
      case NBMA:
         return "NBMA";
      case PointToMultiPoint:
         return "Point-to-Multipoint";
      case Virtual:
         return "Virtual";
      default:
         ASSERT(false);
   }
   return "";
}

Definition at line 171 of file ansaOspfInterface6.h.

Referenced by AnsaOspf6::InterfaceStateDown::ProcessEvent().

{ return waitTimer; }

Definition at line 259 of file ansaOspfInterface6.cc.

                                                                {
   long neighborCount = neighboringRouters.size();
   for (long i = 0; i < neighborCount; i++){
      AnsaOspf6::Neighbor::NeighborStateType neighborState = neighboringRouters[i]->GetState();
      if (neighborState & states){
         return true;
      }
   }
   return false;
}
bool AnsaOspf6::Interface::IsGoingDown ( void  ) [inline]

Definition at line 183 of file ansaOspfInterface6.h.

{ return isGoingDown; }

Definition at line 277 of file ansaOspfInterface6.cc.

                                                                                    {
   long neighborCount = neighboringRouters.size();
   for (long i = 0; i < neighborCount; i++){
      if (neighboringRouters[i]->IsLSAOnRetransmissionList(lsaKey)){
         return true;
      }
   }
   return false;
}

Definition at line 270 of file ansaOspfInterface6.cc.

                                                                                     {
   long neighborCount = neighboringRouters.size();
   for (long i = 0; i < neighborCount; i++){
      neighboringRouters[i]->RemoveFromRetransmissionList(lsaKey);
   }
}

Definition at line 535 of file ansaOspfInterface6.cc.

Referenced by AnsaOspf6::InterfaceStateBackup::ProcessEvent(), AnsaOspf6::InterfaceStateWaiting::ProcessEvent(), AnsaOspf6::InterfaceStatePointToPoint::ProcessEvent(), AnsaOspf6::InterfaceStateNotDesignatedRouter::ProcessEvent(), and AnsaOspf6::InterfaceStateDesignatedRouter::ProcessEvent().

                                                        {
   AnsaOspf6::MessageHandler* messageHandler = parentArea->GetRouter()->GetMessageHandler();
   std::map<IPv6Address, std::list<OspfLsaHeader6>, AnsaOspf6::IPv6Address_Less>::iterator delayIt;
   for (delayIt = delayedAcknowledgements.begin(); delayIt != delayedAcknowledgements.end(); delayIt++){
      int ackCount = delayIt->second.size();
      if (ackCount > 0){
         while (!(delayIt->second.empty())){
            OspfLinkStateAcknowledgementPacket6* ackPacket = new OspfLinkStateAcknowledgementPacket6;

            ackPacket->setType(LinkStateAcknowledgementPacket);
            ackPacket->setRouterID(parentArea->GetRouter()->GetRouterID());
            ackPacket->setAreaID(areaID);

            while (!(delayIt->second.empty())){
               unsigned long headerCount = ackPacket->getLsaHeadersArraySize();
               ackPacket->setLsaHeadersArraySize(headerCount + 1);
               ackPacket->setLsaHeaders(headerCount, *(delayIt->second.begin()));
               delayIt->second.pop_front();
            }

            int ttl = (interfaceType == AnsaOspf6::Interface::Virtual) ? VIRTUAL_LINK_TTL : 1;

            if (interfaceType == AnsaOspf6::Interface::Broadcast){
               if (  (GetState() == AnsaOspf6::Interface::DesignatedRouterState)
                  || (GetState() == AnsaOspf6::Interface::BackupState)
                  || (designatedRouter == AnsaOspf6::NullDesignatedRouterID)){
                  messageHandler->SendPacket(ackPacket, AnsaOspf6::AllSPFRouters, ifIndex, ttl);
               }else{
                  messageHandler->SendPacket(ackPacket, AnsaOspf6::AllDRouters, ifIndex, ttl);
               }
            }else{
               if (interfaceType == AnsaOspf6::Interface::PointToPoint){
                  messageHandler->SendPacket(ackPacket, AnsaOspf6::AllSPFRouters, ifIndex, ttl);
               }else{
                  messageHandler->SendPacket(ackPacket, delayIt->first, ifIndex, ttl);
               }
            }
         }
      }
   }
   messageHandler->StartTimer(acknowledgementTimer, acknowledgementDelay);
}
void AnsaOspf6::Interface::SendHelloPacket ( IPv6Address  destination,
short  ttl = 1 
)

Definition at line 132 of file ansaOspfInterface6.cc.

Referenced by AnsaOspf6::NeighborStateDown::ProcessEvent(), AnsaOspf6::InterfaceStateDesignatedRouter::ProcessEvent(), AnsaOspf6::InterfaceStateWaiting::ProcessEvent(), AnsaOspf6::InterfaceStatePointToPoint::ProcessEvent(), AnsaOspf6::InterfaceStateNotDesignatedRouter::ProcessEvent(), AnsaOspf6::InterfaceStateBackup::ProcessEvent(), and AnsaOspf6::HelloHandler::ProcessPacket().

                                                                          {

   OspfOptions6 options;
   OspfHelloPacket6* helloPacket = new OspfHelloPacket6;
   std::vector<RouterID> neighbors;

   helloPacket->setType(HelloPacket);
   helloPacket->setRouterID(parentArea->GetRouter()->GetRouterID());
   helloPacket->setAreaID(parentArea->GetAreaID());

   helloPacket->setInterfaceID(ifIndex);
   helloPacket->setInstanceID(instanceID);
   helloPacket->setRtrPriority(routerPriority);

   memset(&options, 0, sizeof(OspfOptions6));
   options.E_ExternalRoutingCapability = parentArea->GetExternalRoutingCapability();
   helloPacket->setOptions(options);

   helloPacket->setHelloInterval(helloInterval);
   helloPacket->setRouterDeadInterval(routerDeadInterval);
   helloPacket->setDesignatedRouterID(designatedRouter);
   helloPacket->setBackupDesignatedRouterID(backupDesignatedRouter);

   long neighborCount = neighboringRouters.size();
   for (long j = 0; j < neighborCount; j++) {
      if (neighboringRouters[j]->GetState() >= AnsaOspf6::Neighbor::InitState) {
         neighbors.push_back(neighboringRouters[j]->GetNeighborID());
      }
   }

   unsigned int initedNeighborCount = neighbors.size();
   helloPacket->setNeighborIDArraySize(initedNeighborCount);
   for (unsigned int k = 0; k < initedNeighborCount; k++){
      helloPacket->setNeighborID(k, neighbors[k]);
   }

   parentArea->GetRouter()->GetMessageHandler()->SendPacket(helloPacket, destination, ifIndex, ttl);
}
void AnsaOspf6::Interface::SetAcknowledgementDelay ( short  delay) [inline]

Definition at line 150 of file ansaOspfInterface6.h.

{ acknowledgementDelay = delay; }
void AnsaOspf6::Interface::SetArea ( Area area) [inline]

Definition at line 179 of file ansaOspfInterface6.h.

Referenced by AnsaOspf6::Area::AddInterface().

{ parentArea = area; }
void AnsaOspf6::Interface::SetAreaID ( AreaID  id) [inline]

Definition at line 140 of file ansaOspfInterface6.h.

Referenced by AnsaOspfRouting6::loadInterfaceConfig().

{ areaID = id; }
void AnsaOspf6::Interface::SetHelloInterval ( short  interval) [inline]

Definition at line 154 of file ansaOspfInterface6.h.

Referenced by AnsaOspfRouting6::loadInterfaceConfig().

{ helloInterval = interval; }
void AnsaOspf6::Interface::SetIfName ( const char *  name) [inline]

Definition at line 134 of file ansaOspfInterface6.h.

Referenced by AnsaOspfRouting6::loadInterfaceConfig().

{ ifName = name; };

Definition at line 136 of file ansaOspfInterface6.h.

Referenced by AnsaOspfRouting6::loadInterfaceConfig().

{ instanceID = id; }

Definition at line 161 of file ansaOspfInterface6.h.

{ interfaceAddress = addr; }
void AnsaOspf6::Interface::SetMtu ( unsigned short  ifMTU) [inline]

Definition at line 138 of file ansaOspfInterface6.h.

Referenced by AnsaOspfRouting6::loadInterfaceConfig().

{ mtu = ifMTU; }

Definition at line 144 of file ansaOspfInterface6.h.

Referenced by AnsaOspfRouting6::loadInterfaceConfig().

{ interfaceOutputCost = cost; }
void AnsaOspf6::Interface::SetPollInterval ( short  interval) [inline]

Definition at line 156 of file ansaOspfInterface6.h.

{ pollInterval = interval; }
void AnsaOspf6::Interface::SetRetransmissionInterval ( short  interval) [inline]

Definition at line 146 of file ansaOspfInterface6.h.

Referenced by AnsaOspfRouting6::loadInterfaceConfig().

{ retransmissionInterval = interval; }
void AnsaOspf6::Interface::SetRouterDeadInterval ( short  interval) [inline]

Definition at line 158 of file ansaOspfInterface6.h.

Referenced by AnsaOspfRouting6::loadInterfaceConfig().

{ routerDeadInterval = interval; }
void AnsaOspf6::Interface::SetRouterPriority ( unsigned char  priority) [inline]

Definition at line 152 of file ansaOspfInterface6.h.

Referenced by AnsaOspfRouting6::loadInterfaceConfig().

{ routerPriority = priority; }

Definition at line 142 of file ansaOspfInterface6.h.

{ transitAreaID = id; }
void AnsaOspf6::Interface::SetTransmissionDelay ( short  delay) [inline]

Definition at line 148 of file ansaOspfInterface6.h.

Referenced by AnsaOspfRouting6::loadInterfaceConfig().

Definition at line 130 of file ansaOspfInterface6.h.

Referenced by AnsaOspfRouting6::loadInterfaceConfig().

{ interfaceType = ifType; }

Friends And Related Function Documentation

friend class InterfaceState [friend]

Definition at line 103 of file ansaOspfInterface6.h.


Member Data Documentation

Definition at line 78 of file ansaOspfInterface6.h.

Referenced by GetAreaID(), and SetAreaID().

Definition at line 80 of file ansaOspfInterface6.h.

Referenced by GetHelloInterval(), and SetHelloInterval().

Definition at line 85 of file ansaOspfInterface6.h.

Referenced by GetHelloTimer(), and Interface().

Definition at line 69 of file ansaOspfInterface6.h.

Referenced by GetIfIndex().

std::string AnsaOspf6::Interface::ifName [private]

Definition at line 70 of file ansaOspfInterface6.h.

Referenced by GetIfName(), and SetIfName().

Definition at line 71 of file ansaOspfInterface6.h.

Referenced by GetInstanceID(), and SetInstanceID().

Definition at line 100 of file ansaOspfInterface6.h.

Referenced by IsGoingDown(), and SetIsGoingDown().

std::vector<LinkLsa*> AnsaOspf6::Interface::linkLSAs [private]

Definition at line 77 of file ansaOspfInterface6.h.

Referenced by GetLinkLSA(), and GetLinkLSACount().

Definition at line 76 of file ansaOspfInterface6.h.

unsigned short AnsaOspf6::Interface::mtu [private]

Definition at line 72 of file ansaOspfInterface6.h.

Referenced by GetMtu(), and SetMtu().

Definition at line 88 of file ansaOspfInterface6.h.

Definition at line 81 of file ansaOspfInterface6.h.

Referenced by GetPollInterval(), and SetPollInterval().

Definition at line 68 of file ansaOspfInterface6.h.

Referenced by Interface().

Definition at line 67 of file ansaOspfInterface6.h.

Referenced by Interface().

Definition at line 86 of file ansaOspfInterface6.h.

Referenced by GetWaitTimer(), and Interface().


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