INET Framework for OMNeT++/OMNEST
|
#include <OSPFNeighbor.h>
{ HelloReceived = 0, Start = 1, TwoWayReceived = 2, NegotiationDone = 3, ExchangeDone = 4, BadLinkStateRequest = 5, LoadingDone = 6, IsAdjacencyOK = 7, SequenceNumberMismatch = 8, OneWayReceived = 9, KillNeighbor = 10, InactivityTimer = 11, PollTimer = 12, LinkDown = 13, DDRetransmissionTimer = 14, UpdateRetransmissionTimer = 15, RequestRetransmissionTimer = 16 };
DownState | |
AttemptState | |
InitState | |
TwoWayState | |
ExchangeStartState | |
ExchangeState | |
LoadingState | |
FullState |
{ DownState = 0, AttemptState = 1, InitState = 2, TwoWayState = 4, ExchangeStartState = 8, ExchangeState = 16, LoadingState = 32, FullState = 64 };
OSPF::Neighbor::Neighbor | ( | RouterID | neighbor = NullRouterID | ) |
: updateRetransmissionTimerActive(false), requestRetransmissionTimerActive(false), firstAdjacencyInited(false), ddSequenceNumber(0), neighborID(neighbor), neighborPriority(0), neighborIPAddress(OSPF::NullIPv4Address), neighborsDesignatedRouter(OSPF::NullDesignatedRouterID), neighborsBackupDesignatedRouter(OSPF::NullDesignatedRouterID), designatedRoutersSetUp(false), neighborsRouterDeadInterval(40), lastTransmittedDDPacket(NULL) { memset(&lastReceivedDDPacket, 0, sizeof(OSPF::Neighbor::DDPacketID)); // setting only I and M bits is invalid -> good initializer lastReceivedDDPacket.ddOptions.I_Init = true; lastReceivedDDPacket.ddOptions.M_More = true; inactivityTimer = new OSPFTimer; inactivityTimer->setTimerKind(NeighborInactivityTimer); inactivityTimer->setContextPointer(this); inactivityTimer->setName("OSPF::Neighbor::NeighborInactivityTimer"); pollTimer = new OSPFTimer; pollTimer->setTimerKind(NeighborPollTimer); pollTimer->setContextPointer(this); pollTimer->setName("OSPF::Neighbor::NeighborPollTimer"); ddRetransmissionTimer = new OSPFTimer; ddRetransmissionTimer->setTimerKind(NeighborDDRetransmissionTimer); ddRetransmissionTimer->setContextPointer(this); ddRetransmissionTimer->setName("OSPF::Neighbor::NeighborDDRetransmissionTimer"); updateRetransmissionTimer = new OSPFTimer; updateRetransmissionTimer->setTimerKind(NeighborUpdateRetransmissionTimer); updateRetransmissionTimer->setContextPointer(this); updateRetransmissionTimer->setName("OSPF::Neighbor::Neighbor::NeighborUpdateRetransmissionTimer"); requestRetransmissionTimer = new OSPFTimer; requestRetransmissionTimer->setTimerKind(NeighborRequestRetransmissionTimer); requestRetransmissionTimer->setContextPointer(this); requestRetransmissionTimer->setName("OSPF::Neighbor::NeighborRequestRetransmissionTimer"); state = new OSPF::NeighborStateDown; previousState = NULL; }
OSPF::Neighbor::~Neighbor | ( | void | ) | [virtual] |
{ Reset(); MessageHandler* messageHandler = parentInterface->GetArea()->GetRouter()->GetMessageHandler(); messageHandler->ClearTimer(inactivityTimer); messageHandler->ClearTimer(pollTimer); delete inactivityTimer; delete pollTimer; delete ddRetransmissionTimer; delete updateRetransmissionTimer; delete requestRetransmissionTimer; if (previousState != NULL) { delete previousState; } delete state; }
void OSPF::Neighbor::AddToRequestList | ( | OSPFLSAHeader * | lsaHeader | ) |
Referenced by OSPF::DatabaseDescriptionHandler::ProcessDDPacket().
{ linkStateRequestList.push_back(new OSPFLSAHeader(*lsaHeader)); }
void OSPF::Neighbor::AddToRetransmissionList | ( | OSPFLSA * | lsa | ) |
If the LSA is already on the retransmission list then it is replaced, else a copy of the LSA is added to the end of the retransmission list.
lsa | [in] The LSA to be added. |
{ std::list<OSPFLSA*>::iterator it; for (it = linkStateRetransmissionList.begin(); it != linkStateRetransmissionList.end(); it++) { if (((*it)->getHeader().getLinkStateID() == lsa->getHeader().getLinkStateID()) && ((*it)->getHeader().getAdvertisingRouter().getInt() == lsa->getHeader().getAdvertisingRouter().getInt())) { break; } } OSPFLSA* lsaCopy = NULL; switch (lsa->getHeader().getLsType()) { case RouterLSAType: lsaCopy = new OSPFRouterLSA(*(check_and_cast<OSPFRouterLSA*> (lsa))); break; case NetworkLSAType: lsaCopy = new OSPFNetworkLSA(*(check_and_cast<OSPFNetworkLSA*> (lsa))); break; case SummaryLSA_NetworksType: case SummaryLSA_ASBoundaryRoutersType: lsaCopy = new OSPFSummaryLSA(*(check_and_cast<OSPFSummaryLSA*> (lsa))); break; case ASExternalLSAType: lsaCopy = new OSPFASExternalLSA(*(check_and_cast<OSPFASExternalLSA*> (lsa))); break; default: ASSERT(false); // error break; } if (it != linkStateRetransmissionList.end()) { delete(*it); *it = static_cast<OSPFLSA*> (lsaCopy); } else { linkStateRetransmissionList.push_back(static_cast<OSPFLSA*> (lsaCopy)); } }
void OSPF::Neighbor::AddToTransmittedLSAList | ( | OSPF::LSAKeyType | lsaKey | ) |
Referenced by OSPF::Interface::FloodLSA().
{ TransmittedLSA transmit; transmit.lsaKey = lsaKey; transmit.age = 0; transmittedLSAs.push_back(transmit); }
void OSPF::Neighbor::AgeTransmittedLSAList | ( | void | ) |
{ std::list<TransmittedLSA>::iterator it = transmittedLSAs.begin(); while ((it != transmittedLSAs.end()) && (it->age == MIN_LS_ARRIVAL)) { transmittedLSAs.pop_front(); it = transmittedLSAs.begin(); } for (it = transmittedLSAs.begin(); it != transmittedLSAs.end(); it++) { it->age++; } }
void OSPF::Neighbor::ChangeState | ( | NeighborState * | newState, |
NeighborState * | currentState | ||
) | [private] |
Referenced by OSPF::NeighborState::ChangeState().
{ if (previousState != NULL) { delete previousState; } state = newState; previousState = currentState; }
void OSPF::Neighbor::ClearRequestRetransmissionTimer | ( | void | ) |
Referenced by OSPF::NeighborStateLoading::ProcessEvent(), OSPF::NeighborStateExchange::ProcessEvent(), and OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ MessageHandler* messageHandler = parentInterface->GetArea()->GetRouter()->GetMessageHandler(); messageHandler->ClearTimer(requestRetransmissionTimer); requestRetransmissionTimerActive = false; }
void OSPF::Neighbor::ClearUpdateRetransmissionTimer | ( | void | ) |
Referenced by OSPF::LinkStateAcknowledgementHandler::ProcessPacket().
{ MessageHandler* messageHandler = parentInterface->GetArea()->GetRouter()->GetMessageHandler(); messageHandler->ClearTimer(updateRetransmissionTimer); updateRetransmissionTimerActive = false; }
void OSPF::Neighbor::CreateDatabaseSummary | ( | void | ) |
Referenced by OSPF::NeighborStateExchangeStart::ProcessEvent().
{ OSPF::Area* area = parentInterface->GetArea(); unsigned long routerLSACount = area->GetRouterLSACount(); /* Note: OSPF specification says: * "LSAs whose age is equal to MaxAge are instead added to the neighbor's * Link state retransmission list." * But this task has been already done during the aging of the database. (???) * So we'll skip this. */ for (unsigned long i = 0; i < routerLSACount; i++) { if (area->GetRouterLSA(i)->getHeader().getLsAge() < MAX_AGE) { OSPFLSAHeader* routerLSA = new OSPFLSAHeader(area->GetRouterLSA(i)->getHeader()); databaseSummaryList.push_back(routerLSA); } } unsigned long networkLSACount = area->GetNetworkLSACount(); for (unsigned long j = 0; j < networkLSACount; j++) { if (area->GetNetworkLSA(j)->getHeader().getLsAge() < MAX_AGE) { OSPFLSAHeader* networkLSA = new OSPFLSAHeader(area->GetNetworkLSA(j)->getHeader()); databaseSummaryList.push_back(networkLSA); } } unsigned long summaryLSACount = area->GetSummaryLSACount(); for (unsigned long k = 0; k < summaryLSACount; k++) { if (area->GetSummaryLSA(k)->getHeader().getLsAge() < MAX_AGE) { OSPFLSAHeader* summaryLSA = new OSPFLSAHeader(area->GetSummaryLSA(k)->getHeader()); databaseSummaryList.push_back(summaryLSA); } } if ((parentInterface->GetType() != OSPF::Interface::Virtual) && (area->GetExternalRoutingCapability())) { OSPF::Router* router = area->GetRouter(); unsigned long asExternalLSACount = router->GetASExternalLSACount(); for (unsigned long m = 0; m < asExternalLSACount; m++) { if (router->GetASExternalLSA(m)->getHeader().getLsAge() < MAX_AGE) { OSPFLSAHeader* asExternalLSA = new OSPFLSAHeader(router->GetASExternalLSA(m)->getHeader()); databaseSummaryList.push_back(asExternalLSA); } } } }
void OSPF::Neighbor::DeleteLastSentDDPacket | ( | void | ) |
Referenced by OSPF::NeighborStateLoading::ProcessEvent(), and OSPF::NeighborStateFull::ProcessEvent().
{ if (lastTransmittedDDPacket != NULL) { delete lastTransmittedDDPacket; lastTransmittedDDPacket = NULL; } }
bool OSPF::Neighbor::DesignatedRoutersAreSetUp | ( | void | ) | const [inline] |
Referenced by OSPF::HelloHandler::ProcessPacket().
{ return designatedRoutersSetUp; }
OSPFLSAHeader * OSPF::Neighbor::FindOnRequestList | ( | OSPF::LSAKeyType | lsaKey | ) |
{ for (std::list<OSPFLSAHeader*>::iterator it = linkStateRequestList.begin(); it != linkStateRequestList.end(); it++) { if (((*it)->getLinkStateID() == lsaKey.linkStateID) && ((*it)->getAdvertisingRouter().getInt() == lsaKey.advertisingRouter)) { return (*it); } } return NULL; }
OSPFLSA * OSPF::Neighbor::FindOnRetransmissionList | ( | OSPF::LSAKeyType | lsaKey | ) |
Referenced by OSPF::LinkStateAcknowledgementHandler::ProcessPacket().
{ for (std::list<OSPFLSA*>::iterator it = linkStateRetransmissionList.begin(); it != linkStateRetransmissionList.end(); it++) { if (((*it)->getHeader().getLinkStateID() == lsaKey.linkStateID) && ((*it)->getHeader().getAdvertisingRouter().getInt() == lsaKey.advertisingRouter)) { return (*it); } } return NULL; }
IPv4Address OSPF::Neighbor::GetAddress | ( | void | ) | const [inline] |
Referenced by OSPF::LinkStateUpdateHandler::AcknowledgeLSA(), OSPF::Interface::AddNeighbor(), OSPF::InterfaceState::CalculateDesignatedRouter(), OSPF::Area::CalculateNextHops(), OSPF::Area::OriginateRouterLSA(), OSPF::NeighborStateDown::ProcessEvent(), OSPF::InterfaceStateWaiting::ProcessEvent(), OSPF::InterfaceStatePointToPoint::ProcessEvent(), OSPF::InterfaceStateNotDesignatedRouter::ProcessEvent(), OSPF::InterfaceStateDesignatedRouter::ProcessEvent(), OSPF::InterfaceStateBackup::ProcessEvent(), OSPF::LinkStateUpdateHandler::ProcessPacket(), OSPF::LinkStateRequestHandler::ProcessPacket(), and OSPF::HelloHandler::ProcessPacket().
{ return neighborIPAddress; }
DesignatedRouterID OSPF::Neighbor::GetBackupDesignatedRouter | ( | void | ) | const [inline] |
Referenced by OSPF::InterfaceState::CalculateDesignatedRouter(), and OSPF::HelloHandler::ProcessPacket().
{ return neighborsBackupDesignatedRouter; }
DatabaseExchangeRelationshipType OSPF::Neighbor::GetDatabaseExchangeRelationship | ( | void | ) | const [inline] |
Referenced by OSPF::DatabaseDescriptionHandler::ProcessDDPacket(), and OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ return databaseExchangeRelationship; }
unsigned long OSPF::Neighbor::GetDatabaseSummaryListCount | ( | void | ) | const [inline] |
Referenced by OSPF::DatabaseDescriptionHandler::ProcessDDPacket().
{ return databaseSummaryList.size(); }
OSPFTimer* OSPF::Neighbor::GetDDRetransmissionTimer | ( | void | ) | [inline] |
Referenced by OSPF::NeighborStateTwoWay::ProcessEvent(), OSPF::NeighborStateLoading::ProcessEvent(), OSPF::NeighborStateInit::ProcessEvent(), OSPF::NeighborStateFull::ProcessEvent(), OSPF::NeighborStateExchangeStart::ProcessEvent(), and OSPF::NeighborStateExchange::ProcessEvent().
{ return ddRetransmissionTimer; }
unsigned long OSPF::Neighbor::GetDDSequenceNumber | ( | void | ) | const [inline] |
Referenced by OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ return ddSequenceNumber; }
DesignatedRouterID OSPF::Neighbor::GetDesignatedRouter | ( | void | ) | const [inline] |
Referenced by OSPF::InterfaceState::CalculateDesignatedRouter(), and OSPF::HelloHandler::ProcessPacket().
{ return neighborsDesignatedRouter; }
OSPFTimer* OSPF::Neighbor::GetInactivityTimer | ( | void | ) | [inline] |
Referenced by OSPF::NeighborStateTwoWay::ProcessEvent(), OSPF::NeighborStateLoading::ProcessEvent(), OSPF::NeighborStateInit::ProcessEvent(), OSPF::NeighborStateFull::ProcessEvent(), OSPF::NeighborStateExchangeStart::ProcessEvent(), OSPF::NeighborStateExchange::ProcessEvent(), OSPF::NeighborStateDown::ProcessEvent(), and OSPF::NeighborStateAttempt::ProcessEvent().
{ return inactivityTimer; }
Interface* OSPF::Neighbor::GetInterface | ( | void | ) | [inline] |
Referenced by OSPF::NeighborState::ChangeState(), OSPF::MessageHandler::HandleTimer(), OSPF::NeighborStateTwoWay::ProcessEvent(), OSPF::NeighborStateLoading::ProcessEvent(), OSPF::NeighborStateInit::ProcessEvent(), OSPF::NeighborStateFull::ProcessEvent(), OSPF::NeighborStateExchangeStart::ProcessEvent(), OSPF::NeighborStateExchange::ProcessEvent(), OSPF::NeighborStateDown::ProcessEvent(), and OSPF::NeighborStateAttempt::ProcessEvent().
{ return parentInterface; }
const Interface* OSPF::Neighbor::GetInterface | ( | void | ) | const [inline] |
{ return parentInterface; }
DDPacketID OSPF::Neighbor::GetLastReceivedDDPacket | ( | void | ) | const [inline] |
Referenced by OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ return lastReceivedDDPacket; }
RouterID OSPF::Neighbor::GetNeighborID | ( | void | ) | const [inline] |
Referenced by OSPF::Interface::AddNeighbor(), OSPF::InterfaceState::CalculateDesignatedRouter(), OSPF::Area::CalculateNextHops(), OSPF::Interface::FloodLSA(), OSPF::Area::OriginateNetworkLSA(), OSPF::Area::OriginateRouterLSA(), OSPF::MessageHandler::PrintEvent(), OSPF::HelloHandler::ProcessPacket(), and OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ return neighborID; }
OSPFOptions OSPF::Neighbor::GetOptions | ( | void | ) | const [inline] |
{ return neighborOptions; }
OSPFTimer* OSPF::Neighbor::GetPollTimer | ( | void | ) | [inline] |
Referenced by OSPF::NeighborStateTwoWay::ProcessEvent(), OSPF::NeighborStateLoading::ProcessEvent(), OSPF::NeighborStateInit::ProcessEvent(), OSPF::NeighborStateFull::ProcessEvent(), OSPF::NeighborStateExchangeStart::ProcessEvent(), OSPF::NeighborStateExchange::ProcessEvent(), OSPF::NeighborStateDown::ProcessEvent(), and OSPF::NeighborStateAttempt::ProcessEvent().
{ return pollTimer; }
unsigned char OSPF::Neighbor::GetPriority | ( | void | ) | const [inline] |
short OSPF::Neighbor::GetRouterDeadInterval | ( | void | ) | const [inline] |
Referenced by OSPF::NeighborStateTwoWay::ProcessEvent(), OSPF::NeighborStateLoading::ProcessEvent(), OSPF::NeighborStateInit::ProcessEvent(), OSPF::NeighborStateFull::ProcessEvent(), OSPF::NeighborStateExchangeStart::ProcessEvent(), OSPF::NeighborStateExchange::ProcessEvent(), OSPF::NeighborStateDown::ProcessEvent(), and OSPF::NeighborStateAttempt::ProcessEvent().
{ return neighborsRouterDeadInterval; }
OSPF::Neighbor::NeighborStateType OSPF::Neighbor::GetState | ( | void | ) | const |
Referenced by OSPF::InterfaceState::CalculateDesignatedRouter(), OSPF::Area::OriginateNetworkLSA(), OSPF::Area::OriginateRouterLSA(), OSPF::MessageHandler::PrintEvent(), OSPF::LinkStateUpdateHandler::ProcessPacket(), OSPF::LinkStateRequestHandler::ProcessPacket(), OSPF::LinkStateAcknowledgementHandler::ProcessPacket(), OSPF::HelloHandler::ProcessPacket(), and OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ return state->GetState(); }
const char * OSPF::Neighbor::GetStateString | ( | NeighborStateType | stateType | ) | [static] |
Referenced by OSPF::MessageHandler::PrintEvent().
{ switch (stateType) { case DownState: return "Down"; case AttemptState: return "Attempt"; case InitState: return "Init"; case TwoWayState: return "TwoWay"; case ExchangeStartState: return "ExchangeStart"; case ExchangeState: return "Exchange"; case LoadingState: return "Loading"; case FullState: return "Full"; default: ASSERT(false); } return ""; }
unsigned long OSPF::Neighbor::GetUniqueULong | ( | void | ) |
{ // FIXME!!! Should come from a global unique number generator module. return (ddSequenceNumberInitSeed++); }
OSPFTimer* OSPF::Neighbor::GetUpdateRetransmissionTimer | ( | void | ) | [inline] |
{ return updateRetransmissionTimer; }
void OSPF::Neighbor::IncrementDDSequenceNumber | ( | void | ) | [inline] |
Referenced by OSPF::DatabaseDescriptionHandler::ProcessDDPacket(), OSPF::NeighborStateTwoWay::ProcessEvent(), OSPF::NeighborStateLoading::ProcessEvent(), OSPF::NeighborStateInit::ProcessEvent(), OSPF::NeighborStateFull::ProcessEvent(), and OSPF::NeighborStateExchange::ProcessEvent().
{ ddSequenceNumber++; }
void OSPF::Neighbor::InitFirstAdjacency | ( | void | ) |
Referenced by OSPF::NeighborStateTwoWay::ProcessEvent(), and OSPF::NeighborStateInit::ProcessEvent().
{ ddSequenceNumber = GetUniqueULong(); firstAdjacencyInited = true; }
bool OSPF::Neighbor::IsFirstAdjacencyInited | ( | void | ) | const [inline] |
Referenced by OSPF::NeighborStateTwoWay::ProcessEvent(), and OSPF::NeighborStateInit::ProcessEvent().
{ return firstAdjacencyInited; }
bool OSPF::Neighbor::IsLinkStateRequestListEmpty | ( | void | ) | const [inline] |
Referenced by OSPF::NeighborStateExchange::ProcessEvent(), and OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ return linkStateRequestList.empty(); }
bool OSPF::Neighbor::IsLinkStateRetransmissionListEmpty | ( | void | ) | const [inline] |
Referenced by OSPF::LinkStateAcknowledgementHandler::ProcessPacket().
{ return linkStateRetransmissionList.empty(); }
bool OSPF::Neighbor::IsLSAOnRequestList | ( | OSPF::LSAKeyType | lsaKey | ) | const |
Referenced by OSPF::LinkStateUpdateHandler::ProcessPacket().
{ for (std::list<OSPFLSAHeader*>::const_iterator it = linkStateRequestList.begin(); it != linkStateRequestList.end(); it++) { const OSPFLSAHeader* lsaHeader = *it; if ((lsaHeader->getLinkStateID() == lsaKey.linkStateID) && (lsaHeader->getAdvertisingRouter().getInt() == lsaKey.advertisingRouter)) { return true; } } return false; }
bool OSPF::Neighbor::IsLSAOnRetransmissionList | ( | OSPF::LSAKeyType | lsaKey | ) | const |
Referenced by OSPF::LinkStateUpdateHandler::ProcessPacket().
{ for (std::list<OSPFLSA*>::const_iterator it = linkStateRetransmissionList.begin(); it != linkStateRetransmissionList.end(); it++) { const OSPFLSA* lsa = *it; if ((lsa->getHeader().getLinkStateID() == lsaKey.linkStateID) && (lsa->getHeader().getAdvertisingRouter().getInt() == lsaKey.advertisingRouter)) { return true; } } return false; }
bool OSPF::Neighbor::IsOnTransmittedLSAList | ( | OSPF::LSAKeyType | lsaKey | ) | const |
Referenced by OSPF::LinkStateUpdateHandler::ProcessPacket().
{ for (std::list<TransmittedLSA>::const_iterator it = transmittedLSAs.begin(); it != transmittedLSAs.end(); it++) { if ((it->lsaKey.linkStateID == lsaKey.linkStateID) && (it->lsaKey.advertisingRouter == lsaKey.advertisingRouter)) { return true; } } return false; }
bool OSPF::Neighbor::IsRequestRetransmissionTimerActive | ( | void | ) | const [inline] |
Referenced by OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ return requestRetransmissionTimerActive; }
bool OSPF::Neighbor::IsUpdateRetransmissionTimerActive | ( | void | ) | const [inline] |
Referenced by OSPF::Interface::FloodLSA().
{ return updateRetransmissionTimerActive; }
bool OSPF::Neighbor::NeedAdjacency | ( | void | ) |
Referenced by OSPF::NeighborStateTwoWay::ProcessEvent(), OSPF::NeighborStateLoading::ProcessEvent(), OSPF::NeighborStateInit::ProcessEvent(), OSPF::NeighborStateFull::ProcessEvent(), OSPF::NeighborStateExchangeStart::ProcessEvent(), and OSPF::NeighborStateExchange::ProcessEvent().
{ OSPF::Interface::OSPFInterfaceType interfaceType = parentInterface->GetType(); OSPF::RouterID routerID = parentInterface->GetArea()->GetRouter()->GetRouterID(); OSPF::DesignatedRouterID dRouter = parentInterface->GetDesignatedRouter(); OSPF::DesignatedRouterID backupDRouter = parentInterface->GetBackupDesignatedRouter(); if ((interfaceType == OSPF::Interface::PointToPoint) || (interfaceType == OSPF::Interface::PointToMultiPoint) || (interfaceType == OSPF::Interface::Virtual) || (dRouter.routerID == routerID) || (backupDRouter.routerID == routerID) || ((neighborsDesignatedRouter.routerID == dRouter.routerID) || (!designatedRoutersSetUp && (neighborsDesignatedRouter.ipInterfaceAddress == dRouter.ipInterfaceAddress))) || ((neighborsBackupDesignatedRouter.routerID == backupDRouter.routerID) || (!designatedRoutersSetUp && (neighborsBackupDesignatedRouter.ipInterfaceAddress == backupDRouter.ipInterfaceAddress)))) { return true; } else { return false; } }
void OSPF::Neighbor::PopFirstLinkStateRequest | ( | void | ) | [inline] |
{ linkStateRequestList.pop_front(); }
void OSPF::Neighbor::ProcessEvent | ( | NeighborEventType | event | ) |
Referenced by OSPF::MessageHandler::HandleTimer(), OSPF::DatabaseDescriptionHandler::ProcessDDPacket(), OSPF::InterfaceStateDown::ProcessEvent(), OSPF::LinkStateUpdateHandler::ProcessPacket(), OSPF::LinkStateRequestHandler::ProcessPacket(), OSPF::HelloHandler::ProcessPacket(), and OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ state->ProcessEvent(this, event); }
void OSPF::Neighbor::RemoveFromRequestList | ( | OSPF::LSAKeyType | lsaKey | ) |
{ std::list<OSPFLSAHeader*>::iterator it = linkStateRequestList.begin(); while (it != linkStateRequestList.end()) { if (((*it)->getLinkStateID() == lsaKey.linkStateID) && ((*it)->getAdvertisingRouter().getInt() == lsaKey.advertisingRouter)) { delete(*it); it = linkStateRequestList.erase(it); } else { it++; } } if ((GetState() == OSPF::Neighbor::LoadingState) && (linkStateRequestList.empty())) { ClearRequestRetransmissionTimer(); ProcessEvent(OSPF::Neighbor::LoadingDone); } }
void OSPF::Neighbor::RemoveFromRetransmissionList | ( | OSPF::LSAKeyType | lsaKey | ) |
Referenced by OSPF::LinkStateUpdateHandler::ProcessPacket(), and OSPF::LinkStateAcknowledgementHandler::ProcessPacket().
{ std::list<OSPFLSA*>::iterator it = linkStateRetransmissionList.begin(); while (it != linkStateRetransmissionList.end()) { if (((*it)->getHeader().getLinkStateID() == lsaKey.linkStateID) && ((*it)->getHeader().getAdvertisingRouter().getInt() == lsaKey.advertisingRouter)) { delete(*it); it = linkStateRetransmissionList.erase(it); } else { it++; } } }
void OSPF::Neighbor::Reset | ( | void | ) |
Referenced by OSPF::NeighborStateTwoWay::ProcessEvent(), OSPF::NeighborStateLoading::ProcessEvent(), OSPF::NeighborStateInit::ProcessEvent(), OSPF::NeighborStateFull::ProcessEvent(), OSPF::NeighborStateExchangeStart::ProcessEvent(), OSPF::NeighborStateExchange::ProcessEvent(), and OSPF::NeighborStateAttempt::ProcessEvent().
{ for (std::list<OSPFLSA*>::iterator retIt = linkStateRetransmissionList.begin(); retIt != linkStateRetransmissionList.end(); retIt++) { delete(*retIt); } linkStateRetransmissionList.clear(); std::list<OSPFLSAHeader*>::iterator it; for (it = databaseSummaryList.begin(); it != databaseSummaryList.end(); it++) { delete(*it); } databaseSummaryList.clear(); for (it = linkStateRequestList.begin(); it != linkStateRequestList.end(); it++) { delete(*it); } linkStateRequestList.clear(); parentInterface->GetArea()->GetRouter()->GetMessageHandler()->ClearTimer(ddRetransmissionTimer); ClearUpdateRetransmissionTimer(); ClearRequestRetransmissionTimer(); if (lastTransmittedDDPacket != NULL) { delete lastTransmittedDDPacket; lastTransmittedDDPacket = NULL; } }
bool OSPF::Neighbor::RetransmitDatabaseDescriptionPacket | ( | void | ) |
Referenced by OSPF::NeighborStateExchangeStart::ProcessEvent(), and OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ if (lastTransmittedDDPacket != NULL) { OSPFDatabaseDescriptionPacket* ddPacket = new OSPFDatabaseDescriptionPacket(*lastTransmittedDDPacket); OSPF::MessageHandler* messageHandler = parentInterface->GetArea()->GetRouter()->GetMessageHandler(); int ttl = (parentInterface->GetType() == OSPF::Interface::Virtual) ? VIRTUAL_LINK_TTL : 1; if (parentInterface->GetType() == OSPF::Interface::PointToPoint) { messageHandler->SendPacket(ddPacket, OSPF::AllSPFRouters, parentInterface->GetIfIndex(), ttl); } else { messageHandler->SendPacket(ddPacket, neighborIPAddress, parentInterface->GetIfIndex(), ttl); } return true; } else { return false; } }
void OSPF::Neighbor::RetransmitUpdatePacket | ( | void | ) |
Referenced by OSPF::NeighborStateLoading::ProcessEvent(), OSPF::NeighborStateFull::ProcessEvent(), and OSPF::NeighborStateExchange::ProcessEvent().
{ OSPFLinkStateUpdatePacket* updatePacket = new OSPFLinkStateUpdatePacket; updatePacket->setType(LinkStateUpdatePacket); updatePacket->setRouterID(parentInterface->GetArea()->GetRouter()->GetRouterID()); updatePacket->setAreaID(parentInterface->GetArea()->GetAreaID()); updatePacket->setAuthenticationType(parentInterface->GetAuthenticationType()); OSPF::AuthenticationKeyType authKey = parentInterface->GetAuthenticationKey(); for (int i = 0; i < 8; i++) { updatePacket->setAuthentication(i, authKey.bytes[i]); } bool packetFull = false; unsigned short lsaCount = 0; unsigned long packetLength = IPV4_HEADER_LENGTH + OSPF_LSA_HEADER_LENGTH; std::list<OSPFLSA*>::iterator it = linkStateRetransmissionList.begin(); while (!packetFull && (it != linkStateRetransmissionList.end())) { LSAType lsaType = static_cast<LSAType> ((*it)->getHeader().getLsType()); OSPFRouterLSA* routerLSA = (lsaType == RouterLSAType) ? dynamic_cast<OSPFRouterLSA*> (*it) : NULL; OSPFNetworkLSA* networkLSA = (lsaType == NetworkLSAType) ? dynamic_cast<OSPFNetworkLSA*> (*it) : NULL; OSPFSummaryLSA* summaryLSA = ((lsaType == SummaryLSA_NetworksType) || (lsaType == SummaryLSA_ASBoundaryRoutersType)) ? dynamic_cast<OSPFSummaryLSA*> (*it) : NULL; OSPFASExternalLSA* asExternalLSA = (lsaType == ASExternalLSAType) ? dynamic_cast<OSPFASExternalLSA*> (*it) : NULL; long lsaSize = 0; bool includeLSA = false; switch (lsaType) { case RouterLSAType: if (routerLSA != NULL) { lsaSize = CalculateLSASize(routerLSA); } break; case NetworkLSAType: if (networkLSA != NULL) { lsaSize = CalculateLSASize(networkLSA); } break; case SummaryLSA_NetworksType: case SummaryLSA_ASBoundaryRoutersType: if (summaryLSA != NULL) { lsaSize = CalculateLSASize(summaryLSA); } break; case ASExternalLSAType: if (asExternalLSA != NULL) { lsaSize = CalculateLSASize(asExternalLSA); } break; default: break; } if (packetLength + lsaSize < parentInterface->GetMTU()) { includeLSA = true; lsaCount++; } else { if ((lsaCount == 0) && (packetLength + lsaSize < IPV4_DATAGRAM_LENGTH)) { includeLSA = true; lsaCount++; packetFull = true; } } if (includeLSA) { switch (lsaType) { case RouterLSAType: if (routerLSA != NULL) { unsigned int routerLSACount = updatePacket->getRouterLSAsArraySize(); updatePacket->setRouterLSAsArraySize(routerLSACount + 1); updatePacket->setRouterLSAs(routerLSACount, *routerLSA); unsigned short lsAge = updatePacket->getRouterLSAs(routerLSACount).getHeader().getLsAge(); if (lsAge < MAX_AGE - parentInterface->GetTransmissionDelay()) { updatePacket->getRouterLSAs(routerLSACount).getHeader().setLsAge(lsAge + parentInterface->GetTransmissionDelay()); } else { updatePacket->getRouterLSAs(routerLSACount).getHeader().setLsAge(MAX_AGE); } } break; case NetworkLSAType: if (networkLSA != NULL) { unsigned int networkLSACount = updatePacket->getNetworkLSAsArraySize(); updatePacket->setNetworkLSAsArraySize(networkLSACount + 1); updatePacket->setNetworkLSAs(networkLSACount, *networkLSA); unsigned short lsAge = updatePacket->getNetworkLSAs(networkLSACount).getHeader().getLsAge(); if (lsAge < MAX_AGE - parentInterface->GetTransmissionDelay()) { updatePacket->getNetworkLSAs(networkLSACount).getHeader().setLsAge(lsAge + parentInterface->GetTransmissionDelay()); } else { updatePacket->getNetworkLSAs(networkLSACount).getHeader().setLsAge(MAX_AGE); } } break; case SummaryLSA_NetworksType: case SummaryLSA_ASBoundaryRoutersType: if (summaryLSA != NULL) { unsigned int summaryLSACount = updatePacket->getSummaryLSAsArraySize(); updatePacket->setSummaryLSAsArraySize(summaryLSACount + 1); updatePacket->setSummaryLSAs(summaryLSACount, *summaryLSA); unsigned short lsAge = updatePacket->getSummaryLSAs(summaryLSACount).getHeader().getLsAge(); if (lsAge < MAX_AGE - parentInterface->GetTransmissionDelay()) { updatePacket->getSummaryLSAs(summaryLSACount).getHeader().setLsAge(lsAge + parentInterface->GetTransmissionDelay()); } else { updatePacket->getSummaryLSAs(summaryLSACount).getHeader().setLsAge(MAX_AGE); } } break; case ASExternalLSAType: if (asExternalLSA != NULL) { unsigned int asExternalLSACount = updatePacket->getAsExternalLSAsArraySize(); updatePacket->setAsExternalLSAsArraySize(asExternalLSACount + 1); updatePacket->setAsExternalLSAs(asExternalLSACount, *asExternalLSA); unsigned short lsAge = updatePacket->getAsExternalLSAs(asExternalLSACount).getHeader().getLsAge(); if (lsAge < MAX_AGE - parentInterface->GetTransmissionDelay()) { updatePacket->getAsExternalLSAs(asExternalLSACount).getHeader().setLsAge(lsAge + parentInterface->GetTransmissionDelay()); } else { updatePacket->getAsExternalLSAs(asExternalLSACount).getHeader().setLsAge(MAX_AGE); } } break; default: break; } } it++; } updatePacket->setPacketLength(0); // TODO: Calculate correct length updatePacket->setChecksum(0); // TODO: Calculate correct cheksum(16-bit one's complement of the entire packet) OSPF::MessageHandler* messageHandler = parentInterface->GetArea()->GetRouter()->GetMessageHandler(); int ttl = (parentInterface->GetType() == OSPF::Interface::Virtual) ? VIRTUAL_LINK_TTL : 1; messageHandler->SendPacket(updatePacket, neighborIPAddress, parentInterface->GetIfIndex(), ttl); }
void OSPF::Neighbor::SendDatabaseDescriptionPacket | ( | bool | init = false | ) |
Referenced by OSPF::DatabaseDescriptionHandler::ProcessDDPacket(), OSPF::NeighborStateTwoWay::ProcessEvent(), OSPF::NeighborStateLoading::ProcessEvent(), OSPF::NeighborStateInit::ProcessEvent(), OSPF::NeighborStateFull::ProcessEvent(), OSPF::NeighborStateExchangeStart::ProcessEvent(), OSPF::NeighborStateExchange::ProcessEvent(), and OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ OSPFDatabaseDescriptionPacket* ddPacket = new OSPFDatabaseDescriptionPacket; ddPacket->setType(DatabaseDescriptionPacket); ddPacket->setRouterID(parentInterface->GetArea()->GetRouter()->GetRouterID()); ddPacket->setAreaID(parentInterface->GetArea()->GetAreaID()); ddPacket->setAuthenticationType(parentInterface->GetAuthenticationType()); OSPF::AuthenticationKeyType authKey = parentInterface->GetAuthenticationKey(); for (int i = 0; i < 8; i++) { ddPacket->setAuthentication(i, authKey.bytes[i]); } if (parentInterface->GetType() != OSPF::Interface::Virtual) { ddPacket->setInterfaceMTU(parentInterface->GetMTU()); } else { ddPacket->setInterfaceMTU(0); } OSPFOptions options; memset(&options, 0, sizeof(OSPFOptions)); options.E_ExternalRoutingCapability = parentInterface->GetArea()->GetExternalRoutingCapability(); ddPacket->setOptions(options); ddPacket->setDdSequenceNumber(ddSequenceNumber); long maxPacketSize = ((IPV4_HEADER_LENGTH + OSPF_HEADER_LENGTH + OSPF_DD_HEADER_LENGTH + OSPF_LSA_HEADER_LENGTH) > parentInterface->GetMTU()) ? IPV4_DATAGRAM_LENGTH : parentInterface->GetMTU(); if (init || databaseSummaryList.empty()) { ddPacket->setLsaHeadersArraySize(0); } else { // delete included LSAs from summary list // (they are still in lastTransmittedDDPacket) long packetSize = IPV4_HEADER_LENGTH + OSPF_HEADER_LENGTH + OSPF_DD_HEADER_LENGTH; while ((!databaseSummaryList.empty()) && (packetSize <= (maxPacketSize - OSPF_LSA_HEADER_LENGTH))) { unsigned long headerCount = ddPacket->getLsaHeadersArraySize(); OSPFLSAHeader* lsaHeader = *(databaseSummaryList.begin()); ddPacket->setLsaHeadersArraySize(headerCount + 1); ddPacket->setLsaHeaders(headerCount, *lsaHeader); delete lsaHeader; databaseSummaryList.pop_front(); packetSize += OSPF_LSA_HEADER_LENGTH; } } OSPFDDOptions ddOptions; memset(&ddOptions, 0, sizeof(OSPFDDOptions)); if (init) { ddOptions.I_Init = true; ddOptions.M_More = true; ddOptions.MS_MasterSlave = true; } else { ddOptions.I_Init = false; ddOptions.M_More = (databaseSummaryList.empty()) ? false : true; ddOptions.MS_MasterSlave = (databaseExchangeRelationship == OSPF::Neighbor::Master) ? true : false; } ddPacket->setDdOptions(ddOptions); ddPacket->setPacketLength(0); // TODO: Calculate correct length ddPacket->setChecksum(0); // TODO: Calculate correct cheksum(16-bit one's complement of the entire packet) OSPF::MessageHandler* messageHandler = parentInterface->GetArea()->GetRouter()->GetMessageHandler(); int ttl = (parentInterface->GetType() == OSPF::Interface::Virtual) ? VIRTUAL_LINK_TTL : 1; if (parentInterface->GetType() == OSPF::Interface::PointToPoint) { messageHandler->SendPacket(ddPacket, OSPF::AllSPFRouters, parentInterface->GetIfIndex(), ttl); } else { messageHandler->SendPacket(ddPacket, neighborIPAddress, parentInterface->GetIfIndex(), ttl); } if (lastTransmittedDDPacket != NULL) { delete lastTransmittedDDPacket; } lastTransmittedDDPacket = new OSPFDatabaseDescriptionPacket(*ddPacket); }
void OSPF::Neighbor::SendLinkStateRequestPacket | ( | void | ) |
Referenced by OSPF::NeighborStateLoading::ProcessEvent(), OSPF::NeighborStateExchange::ProcessEvent(), and OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ OSPFLinkStateRequestPacket* requestPacket = new OSPFLinkStateRequestPacket; requestPacket->setType(LinkStateRequestPacket); requestPacket->setRouterID(parentInterface->GetArea()->GetRouter()->GetRouterID()); requestPacket->setAreaID(parentInterface->GetArea()->GetAreaID()); requestPacket->setAuthenticationType(parentInterface->GetAuthenticationType()); OSPF::AuthenticationKeyType authKey = parentInterface->GetAuthenticationKey(); for (int i = 0; i < 8; i++) { requestPacket->setAuthentication(i, authKey.bytes[i]); } long maxPacketSize = ((IPV4_HEADER_LENGTH + OSPF_HEADER_LENGTH + OSPF_REQUEST_LENGTH) > parentInterface->GetMTU()) ? IPV4_DATAGRAM_LENGTH : parentInterface->GetMTU(); if (linkStateRequestList.empty()) { requestPacket->setRequestsArraySize(0); } else { long packetSize = IPV4_HEADER_LENGTH + OSPF_HEADER_LENGTH; std::list<OSPFLSAHeader*>::iterator it = linkStateRequestList.begin(); while ((it != linkStateRequestList.end()) && (packetSize <= (maxPacketSize - OSPF_REQUEST_LENGTH))) { unsigned long requestCount = requestPacket->getRequestsArraySize(); OSPFLSAHeader* requestHeader = (*it); LSARequest request; request.lsType = requestHeader->getLsType(); request.linkStateID = requestHeader->getLinkStateID(); request.advertisingRouter = requestHeader->getAdvertisingRouter(); requestPacket->setRequestsArraySize(requestCount + 1); requestPacket->setRequests(requestCount, request); packetSize += OSPF_REQUEST_LENGTH; it++; } } requestPacket->setPacketLength(0); // TODO: Calculate correct length requestPacket->setChecksum(0); // TODO: Calculate correct cheksum(16-bit one's complement of the entire packet) OSPF::MessageHandler* messageHandler = parentInterface->GetArea()->GetRouter()->GetMessageHandler(); int ttl = (parentInterface->GetType() == OSPF::Interface::Virtual) ? VIRTUAL_LINK_TTL : 1; if (parentInterface->GetType() == OSPF::Interface::PointToPoint) { messageHandler->SendPacket(requestPacket, OSPF::AllSPFRouters, parentInterface->GetIfIndex(), ttl); } else { messageHandler->SendPacket(requestPacket, neighborIPAddress, parentInterface->GetIfIndex(), ttl); } }
void OSPF::Neighbor::SetAddress | ( | IPv4Address | address | ) | [inline] |
Referenced by OSPF::Area::CalculateShortestPathTree(), OSPFRouting::LoadInterfaceParameters(), and OSPF::HelloHandler::ProcessPacket().
{ neighborIPAddress = address; }
void OSPF::Neighbor::SetBackupDesignatedRouter | ( | DesignatedRouterID | routerID | ) | [inline] |
Referenced by OSPF::HelloHandler::ProcessPacket().
{ neighborsBackupDesignatedRouter = routerID; }
void OSPF::Neighbor::SetDatabaseExchangeRelationship | ( | DatabaseExchangeRelationshipType | relation | ) | [inline] |
Referenced by OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ databaseExchangeRelationship = relation; }
void OSPF::Neighbor::SetDDSequenceNumber | ( | unsigned long | sequenceNumber | ) | [inline] |
Referenced by OSPF::DatabaseDescriptionHandler::ProcessDDPacket(), and OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ ddSequenceNumber = sequenceNumber; }
void OSPF::Neighbor::SetDesignatedRouter | ( | DesignatedRouterID | routerID | ) | [inline] |
Referenced by OSPF::HelloHandler::ProcessPacket().
{ neighborsDesignatedRouter = routerID; }
void OSPF::Neighbor::SetInterface | ( | Interface * | intf | ) | [inline] |
Referenced by OSPF::Interface::AddNeighbor().
{ parentInterface = intf; }
void OSPF::Neighbor::SetLastReceivedDDPacket | ( | DDPacketID | packetID | ) | [inline] |
Referenced by OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ lastReceivedDDPacket = packetID; }
void OSPF::Neighbor::SetNeighborID | ( | RouterID | id | ) | [inline] |
Referenced by OSPFRouting::LoadVirtualLink(), and OSPF::HelloHandler::ProcessPacket().
{ neighborID = id; }
void OSPF::Neighbor::SetOptions | ( | OSPFOptions | options | ) | [inline] |
Referenced by OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ neighborOptions = options; }
void OSPF::Neighbor::SetPriority | ( | unsigned char | priority | ) | [inline] |
Referenced by OSPFRouting::LoadInterfaceParameters(), and OSPF::HelloHandler::ProcessPacket().
{ neighborPriority = priority; }
void OSPF::Neighbor::SetRouterDeadInterval | ( | short | interval | ) | [inline] |
Referenced by OSPF::HelloHandler::ProcessPacket().
{ neighborsRouterDeadInterval = interval; }
void OSPF::Neighbor::SetUpDesignatedRouters | ( | bool | setUp | ) | [inline] |
Referenced by OSPF::HelloHandler::ProcessPacket().
{ designatedRoutersSetUp = setUp; }
void OSPF::Neighbor::StartRequestRetransmissionTimer | ( | void | ) |
Referenced by OSPF::NeighborStateLoading::ProcessEvent(), OSPF::NeighborStateExchange::ProcessEvent(), and OSPF::DatabaseDescriptionHandler::ProcessPacket().
{ MessageHandler* messageHandler = parentInterface->GetArea()->GetRouter()->GetMessageHandler(); messageHandler->StartTimer(requestRetransmissionTimer, parentInterface->GetRetransmissionInterval()); requestRetransmissionTimerActive = true; }
void OSPF::Neighbor::StartUpdateRetransmissionTimer | ( | void | ) |
Referenced by OSPF::Interface::FloodLSA(), OSPF::NeighborStateLoading::ProcessEvent(), OSPF::NeighborStateFull::ProcessEvent(), and OSPF::NeighborStateExchange::ProcessEvent().
{ MessageHandler* messageHandler = parentInterface->GetArea()->GetRouter()->GetMessageHandler(); messageHandler->StartTimer(updateRetransmissionTimer, parentInterface->GetRetransmissionInterval()); updateRetransmissionTimerActive = true; }
friend class NeighborState [friend] |
Referenced by GetDatabaseExchangeRelationship(), and SetDatabaseExchangeRelationship().
std::list<OSPFLSAHeader*> OSPF::Neighbor::databaseSummaryList [private] |
Referenced by GetDatabaseSummaryListCount().
OSPFTimer* OSPF::Neighbor::ddRetransmissionTimer [private] |
Referenced by GetDDRetransmissionTimer(), and Neighbor().
unsigned long OSPF::Neighbor::ddSequenceNumber [private] |
Referenced by GetDDSequenceNumber(), IncrementDDSequenceNumber(), and SetDDSequenceNumber().
unsigned long OSPF::Neighbor::ddSequenceNumberInitSeed = 0 [static, private] |
bool OSPF::Neighbor::designatedRoutersSetUp [private] |
Referenced by DesignatedRoutersAreSetUp(), and SetUpDesignatedRouters().
bool OSPF::Neighbor::firstAdjacencyInited [private] |
Referenced by IsFirstAdjacencyInited().
OSPFTimer* OSPF::Neighbor::inactivityTimer [private] |
Referenced by GetInactivityTimer(), and Neighbor().
Referenced by GetLastReceivedDDPacket(), Neighbor(), and SetLastReceivedDDPacket().
OSPFDatabaseDescriptionPacket* OSPF::Neighbor::lastTransmittedDDPacket [private] |
std::list<OSPFLSAHeader*> OSPF::Neighbor::linkStateRequestList [private] |
Referenced by IsLinkStateRequestListEmpty(), and PopFirstLinkStateRequest().
std::list<OSPFLSA*> OSPF::Neighbor::linkStateRetransmissionList [private] |
Referenced by IsLinkStateRetransmissionListEmpty().
RouterID OSPF::Neighbor::neighborID [private] |
Referenced by GetNeighborID(), and SetNeighborID().
IPv4Address OSPF::Neighbor::neighborIPAddress [private] |
Referenced by GetAddress(), and SetAddress().
OSPFOptions OSPF::Neighbor::neighborOptions [private] |
Referenced by GetOptions(), and SetOptions().
unsigned char OSPF::Neighbor::neighborPriority [private] |
Referenced by GetPriority(), and SetPriority().
Referenced by GetBackupDesignatedRouter(), and SetBackupDesignatedRouter().
Referenced by GetDesignatedRouter(), and SetDesignatedRouter().
short OSPF::Neighbor::neighborsRouterDeadInterval [private] |
Referenced by GetRouterDeadInterval(), and SetRouterDeadInterval().
Interface* OSPF::Neighbor::parentInterface [private] |
Referenced by GetInterface(), and SetInterface().
OSPFTimer* OSPF::Neighbor::pollTimer [private] |
Referenced by GetPollTimer(), and Neighbor().
NeighborState* OSPF::Neighbor::previousState [private] |
Referenced by Neighbor().
OSPFTimer* OSPF::Neighbor::requestRetransmissionTimer [private] |
Referenced by Neighbor().
bool OSPF::Neighbor::requestRetransmissionTimerActive [private] |
Referenced by IsRequestRetransmissionTimerActive().
NeighborState* OSPF::Neighbor::state [private] |
Referenced by Neighbor().
std::list<TransmittedLSA> OSPF::Neighbor::transmittedLSAs [private] |
OSPFTimer* OSPF::Neighbor::updateRetransmissionTimer [private] |
Referenced by GetUpdateRetransmissionTimer(), and Neighbor().
bool OSPF::Neighbor::updateRetransmissionTimerActive [private] |
Referenced by IsUpdateRetransmissionTimerActive().