|
INET Framework for OMNeT++/OMNEST
|
#include <LinkStateAcknowledgementHandler.h>
Public Member Functions | |
| LinkStateAcknowledgementHandler (Router *containingRouter) | |
| void | ProcessPacket (OSPFPacket *packet, Interface *intf, Neighbor *neighbor) |
| OSPF::LinkStateAcknowledgementHandler::LinkStateAcknowledgementHandler | ( | OSPF::Router * | containingRouter | ) |
:
OSPF::IMessageHandler(containingRouter)
{
}
| void OSPF::LinkStateAcknowledgementHandler::ProcessPacket | ( | OSPFPacket * | packet, |
| OSPF::Interface * | intf, | ||
| OSPF::Neighbor * | neighbor | ||
| ) | [virtual] |
Implements OSPF::IMessageHandler.
{
router->GetMessageHandler()->PrintEvent("Link State Acknowledgement packet received", intf, neighbor);
if (neighbor->GetState() >= OSPF::Neighbor::ExchangeState) {
OSPFLinkStateAcknowledgementPacket* lsAckPacket = check_and_cast<OSPFLinkStateAcknowledgementPacket*> (packet);
int lsaCount = lsAckPacket->getLsaHeadersArraySize();
EV << " Processing packet contents:\n";
for (int i = 0; i < lsaCount; i++) {
OSPFLSAHeader& lsaHeader = lsAckPacket->getLsaHeaders(i);
OSPFLSA* lsaOnRetransmissionList;
OSPF::LSAKeyType lsaKey;
EV << " ";
PrintLSAHeader(lsaHeader, ev.getOStream());
EV << "\n";
lsaKey.linkStateID = lsaHeader.getLinkStateID();
lsaKey.advertisingRouter = lsaHeader.getAdvertisingRouter().getInt();
if ((lsaOnRetransmissionList = neighbor->FindOnRetransmissionList(lsaKey)) != NULL) {
if (operator== (lsaHeader, lsaOnRetransmissionList->getHeader())) {
neighbor->RemoveFromRetransmissionList(lsaKey);
} else {
EV << "Got an Acknowledgement packet for an unsent Update packet.\n";
}
}
}
if (neighbor->IsLinkStateRetransmissionListEmpty()) {
neighbor->ClearUpdateRetransmissionTimer();
}
}
}