26 const auto& ddPacket = packet->peekAtFront<Ospfv2DatabaseDescriptionPacket>();
30 if ((ddPacket->getInterfaceMTU() <= intf->getMtu()) &&
33 switch (neighborState) {
42 const Ospfv2DdOptions& ddOptions = ddPacket->getDdOptions();
44 if (ddOptions.I_Init && ddOptions.M_More && ddOptions.MS_MasterSlave &&
45 (ddPacket->getLsaHeadersArraySize() == 0))
48 Neighbor::DdPacketId packetID;
49 packetID.ddOptions = ddOptions;
50 packetID.options = ddPacket->getOptions();
51 packetID.sequenceNumber = ddPacket->getDdSequenceNumber();
53 neighbor->setOptions(packetID.options);
55 neighbor->setDDSequenceNumber(packetID.sequenceNumber);
56 neighbor->setLastReceivedDDPacket(packetID);
63 if (!neighbor->isLinkStateRequestListEmpty() &&
64 !neighbor->isRequestRetransmissionTimerActive())
66 neighbor->sendLinkStateRequestPacket();
67 neighbor->clearRequestRetransmissionTimer();
68 neighbor->startRequestRetransmissionTimer();
72 neighbor->sendDatabaseDescriptionPacket(
true);
75 if (!ddOptions.I_Init && !ddOptions.MS_MasterSlave &&
76 (ddPacket->getDdSequenceNumber() == neighbor->getDDSequenceNumber()) &&
79 Neighbor::DdPacketId packetID;
80 packetID.ddOptions = ddOptions;
81 packetID.options = ddPacket->getOptions();
82 packetID.sequenceNumber = ddPacket->getDdSequenceNumber();
84 neighbor->setOptions(packetID.options);
86 neighbor->setLastReceivedDDPacket(packetID);
93 if (!neighbor->isLinkStateRequestListEmpty() &&
94 !neighbor->isRequestRetransmissionTimerActive())
96 neighbor->sendLinkStateRequestPacket();
97 neighbor->clearRequestRetransmissionTimer();
98 neighbor->startRequestRetransmissionTimer();
105 Neighbor::DdPacketId packetID;
106 packetID.ddOptions = ddPacket->getDdOptions();
107 packetID.options = ddPacket->getOptions();
108 packetID.sequenceNumber = ddPacket->getDdSequenceNumber();
110 if (packetID != neighbor->getLastReceivedDDPacket()) {
111 if ((packetID.ddOptions.MS_MasterSlave &&
113 (!packetID.ddOptions.MS_MasterSlave &&
115 packetID.ddOptions.I_Init ||
116 (packetID.options != neighbor->getLastReceivedDDPacket().options))
122 (packetID.sequenceNumber == neighbor->getDDSequenceNumber())) ||
124 (packetID.sequenceNumber == (neighbor->getDDSequenceNumber() + 1))))
126 neighbor->setLastReceivedDDPacket(packetID);
130 if (!neighbor->isLinkStateRequestListEmpty() &&
131 !neighbor->isRequestRetransmissionTimerActive())
133 neighbor->sendLinkStateRequestPacket();
134 neighbor->clearRequestRetransmissionTimer();
135 neighbor->startRequestRetransmissionTimer();
145 neighbor->retransmitDatabaseDescriptionPacket();
153 Neighbor::DdPacketId packetID;
154 packetID.ddOptions = ddPacket->getDdOptions();
155 packetID.options = ddPacket->getOptions();
156 packetID.sequenceNumber = ddPacket->getDdSequenceNumber();
158 if ((packetID != neighbor->getLastReceivedDDPacket()) ||
159 (packetID.ddOptions.I_Init))
165 if (!neighbor->retransmitDatabaseDescriptionPacket()) {