Есть ли способ прослушать / прослушать одноадресный пакет / сообщение в Omnet?

Я занимаюсь разработкой WSN в Omnet. Я хочу прослушать одноадресное сообщение, но не знаю, как это сделать в Omnet. Я провел небольшое исследование, но не смог найти для этого никакого метода

Когда я отправляю данные на другой узел, я отправляю их как одноадресную рассылку с помощью этого метода:

cModule *nodeIndex = flatTopolojiModulu->getSubmodule("n", i);//n is array
sendDirect(new cMessage("msg"), nodeIndex, "in");

Я использую метод sendDirect, потому что работаю в беспроводной сети. Согласно этому описанию: https://stackoverflow.com/a/36082721/5736731

sendDirect метод обычно применяется в беспроводных сетях.

Но при отправке сообщения с помощью sendDirect сообщение обрабатывается узлом-получателем. Например, согласно приведенному выше примеру кода:

если i=2, отправленное сообщение может обработать только узел, имеющий индекс "2" из функции void AnyClassName::handleMessage(cMessage *msg)


person Ali    schedule 29.07.2019    source источник


Ответы (1)


Пример широковещательных сообщений можно найти в Руководстве по OMNeT ++ .

Вы должны создать только один экземпляр сообщения, которое должны получить все узлы, а затем отправить новую копию этого сообщения каждому узлу в цикле. Для создания копия сообщения.

cMessage * msg = new cMessage("msg");
// totalN is the total number of nodes 
for (int i = 0; i < totalN; ++i) {
  cModule *nodeIndex = flatTopolojiModulu->getSubmodule("n", i);
  sendDirect(msg->dup(), nodeIndex, "in");
}
// original message is no longer needed
delete msg;
person Jerzy D.    schedule 29.07.2019
comment
Спасибо за совет, но я не хочу отправлять широковещательные или многоадресные сообщения. Потому что для меня важна энергия каждого узла. Я пытаюсь разработать протокол энергоэффективности. Итак, я отправляю сообщение как одноадресное. Я хочу прослушать пакет одноадресного сообщения. Например, wirehark делает это, но я работаю над WSN, и я использую omnet, поэтому я ищу решение в omnet для сниффинга пакетов при одноадресной передаче. - person Ali; 30.07.2019
comment
Что вы имеете в виду под обнюхивать пакет? Какой элемент узла должен прослушивать пакет? Представьте, что узел A отправляет сообщение узлу B: какой узел должен прослушать сообщение? - person Jerzy D.; 31.07.2019
comment
Sniff означает прослушивание пакета, который отправляется от A к B. Например, A - узел отправителя, а B - узел получателя. Узел C является сниффером / слушателем и находится между A и B. Когда я отправляю пакет из A в B, я хочу, чтобы C слушал пакет. Другими словами, C должен подслушивать пакет, и он может управлять данными пакета, который отправляется от A к B. C должен прослушивать пакет, даже если я не отправлял пакет напрямую на узел C. Возможно ли это в Omnet ? - person Ali; 31.07.2019
comment
Что ж, в OMNeT ++ это можно сделать, но это требует некоторых изменений в процессе отправки. Прежде всего, в сообщении должен быть указан адрес назначения (например, идентификатор узла, который должен получить это сообщение). Затем сообщение должно быть отправлено на все узлы (т. Е. Широковещательно). Узел, не занимающийся сниффингом, должен проверить, совпадает ли поле адреса с собственным идентификатором, если нет - узел удаляет сообщение. Узел сниффинга должен получить и обработать это сообщение. Однако я не понимаю, как C может контролировать данные пакета, который отправляется от A к B. - person Jerzy D.; 31.07.2019