203 if (msg->isSelfMessage()) {
206 else if (check_and_cast<Packet *>(msg)->getTag<PacketProtocolTag>()->getProtocol() == &
Protocol::manet) {
207 auto packet =
new Packet(
"Hello");
212 auto addressReq = packet->addTag<L3AddressReq>();
213 addressReq->setDestAddress(Ipv4Address(255, 255, 255, 255));
218 ForwardEntry *fhp =
nullptr;
219 auto recHello = !
isForwardHello ? staticPtrCast<DsdvHello>(check_and_cast<Packet *>(msg)->peekData<DsdvHello>()->dupShared()) : nullptr;
221 fhp =
new ForwardEntry();
222 fhp->hello = check_and_cast<Packet *>(msg->dup());
225 if (msg->arrivedOn(
"ipIn")) {
227 bubble(
"Received hello message");
232 unsigned int msgsequencenumber;
236 src = recHello->getSrcAddress();
237 msgsequencenumber = recHello->getSequencenumber();
238 next = recHello->getNextAddress();
239 numHops = recHello->getHopdistance();
242 EV_INFO <<
"Hello msg dropped. This message returned to the original creator.\n";
250 auto fhpHello = fhp->hello->peekData<DsdvHello>();
251 src = fhpHello->getSrcAddress();
252 msgsequencenumber = fhpHello->getSequencenumber();
253 next = fhpHello->getNextAddress();
254 numHops = fhpHello->getHopdistance();
257 EV_INFO <<
"Hello msg dropped. This message returned to the original creator.\n";
265 Ipv4Route *_entrada_routing =
rt->findBestMatchingRoute(src);
266 DsdvIpv4Route *entrada_routing =
dynamic_cast<DsdvIpv4Route *
>(_entrada_routing);
269 if (_entrada_routing ==
nullptr
271 || (entrada_routing !=
nullptr && (msgsequencenumber > (entrada_routing->getSequencenumber()) || (msgsequencenumber == (entrada_routing->getSequencenumber()) && numHops < (entrada_routing->getMetric())))))
275 if (entrada_routing !=
nullptr)
276 rt->deleteRoute(entrada_routing);
281 DsdvIpv4Route *
e =
new DsdvIpv4Route();
282 e->setDestination(src);
283 e->setNetmask(netmask);
287 e->setMetric(numHops);
288 e->setSequencenumber(msgsequencenumber);
293 recHello->setNextAddress(source);
295 recHello->setHopdistance(numHops);
296 double waitTime = intuniform(1, 50);
297 waitTime = waitTime / 100;
298 EV_DETAIL <<
"waitime for forward before was " << waitTime <<
" And host is " << source <<
"\n";
300 EV_DETAIL <<
"waitime for forward is " << waitTime <<
" And host is " << source <<
"\n";
301 packet->insertAtBack(recHello);
302 sendDelayed(packet, waitTime,
"ipOut");
306 auto forwardHello = staticPtrCast<DsdvHello>(fhp->hello->peekData<DsdvHello>()->dupShared());
308 forwardHello->setNextAddress(source);
310 forwardHello->setHopdistance(numHops);
313 double waitTime = intuniform(1, 50);
314 waitTime = waitTime / 100;
315 EV_DETAIL <<
"waitime for forward before was " << waitTime <<
" And host is " << source <<
"\n";
316 EV_DETAIL <<
"waitime for forward is " << waitTime <<
" And host is " << source <<
"\n";
317 fhp->event =
new cMessage(
"event2");
318 scheduleAfter(waitTime, fhp->event);
328 throw cRuntimeError(
"Message arrived on unknown gate %s", msg->getArrivalGate()->getName());
331 throw cRuntimeError(
"Message not supported %s", msg->getName());