INET Framework for OMNeT++/OMNEST
inet::ospfv2::LinkStateAcknowledgementHandler Class Reference

#include <LinkStateAcknowledgementHandler.h>

Inheritance diagram for inet::ospfv2::LinkStateAcknowledgementHandler:
inet::ospfv2::IMessageHandler

Public Member Functions

 LinkStateAcknowledgementHandler (Router *containingRouter)
 
void processPacket (Packet *packet, Ospfv2Interface *intf, Neighbor *neighbor) override
 
- Public Member Functions inherited from inet::ospfv2::IMessageHandler
 IMessageHandler (Router *containingRouter)
 
virtual ~IMessageHandler ()
 

Additional Inherited Members

- Protected Attributes inherited from inet::ospfv2::IMessageHandler
Routerrouter
 

Constructor & Destructor Documentation

◆ LinkStateAcknowledgementHandler()

inet::ospfv2::LinkStateAcknowledgementHandler::LinkStateAcknowledgementHandler ( Router containingRouter)
14  :
15  IMessageHandler(containingRouter)
16 {
17 }

Member Function Documentation

◆ processPacket()

void inet::ospfv2::LinkStateAcknowledgementHandler::processPacket ( Packet packet,
Ospfv2Interface intf,
Neighbor neighbor 
)
overridevirtual

Implements inet::ospfv2::IMessageHandler.

20 {
21  router->getMessageHandler()->printEvent("Link State Acknowledgement packet received", intf, neighbor);
22 
23  if (neighbor->getState() >= Neighbor::EXCHANGE_STATE) {
24  const auto& lsAckPacket = packet->peekAtFront<Ospfv2LinkStateAcknowledgementPacket>();
25 
26  int lsaCount = lsAckPacket->getLsaHeadersArraySize();
27 
28  EV_DETAIL << " Processing packet contents:\n";
29 
30  for (int i = 0; i < lsaCount; i++) {
31  const Ospfv2LsaHeader& lsaHeader = lsAckPacket->getLsaHeaders(i);
32  Ospfv2Lsa *lsaOnRetransmissionList;
33  LsaKeyType lsaKey;
34 
35  EV_DETAIL << " " << lsaHeader << "\n";
36 
37  lsaKey.linkStateID = lsaHeader.getLinkStateID();
38  lsaKey.advertisingRouter = lsaHeader.getAdvertisingRouter();
39 
40  if ((lsaOnRetransmissionList = neighbor->findOnRetransmissionList(lsaKey)) != nullptr) {
41  if (operator==(lsaHeader, lsaOnRetransmissionList->getHeader())) {
42  neighbor->removeFromRetransmissionList(lsaKey);
43  }
44  else {
45  EV_INFO << "Got an Acknowledgement packet for an unsent Update packet.\n";
46  }
47  }
48  }
49  if (neighbor->isLinkStateRetransmissionListEmpty()) {
50  neighbor->clearUpdateRetransmissionTimer();
51  }
52  }
53 }

Referenced by inet::ospfv2::MessageHandler::processPacket().


The documentation for this class was generated from the following files:
inet::ospfv2::MessageHandler::printEvent
void printEvent(const char *eventString, const Ospfv2Interface *onInterface=nullptr, const Neighbor *forNeighbor=nullptr) const
Definition: MessageHandler.cc:380
inet::ospfv2::Router::getMessageHandler
MessageHandler * getMessageHandler()
Definition: Ospfv2Router.h:66
inet::ospfv2::Neighbor::EXCHANGE_STATE
@ EXCHANGE_STATE
Definition: Ospfv2Neighbor.h:55
inet::ospfv2::IMessageHandler::IMessageHandler
IMessageHandler(Router *containingRouter)
Definition: IMessageHandler.h:27
inet::ospfv2::IMessageHandler::router
Router * router
Definition: IMessageHandler.h:24