协议处于网络层:
macAddr = arp->getMacAddr(netwAddr);
pkt->setControlInfo(new MacControlInfo(macAddr));
协议处于应用层
方法一:手动收集从网络层送达的数据包,并用map记录之
std::map<int, int> nbrNetwAddrs;
NetwControlInfo* cInfo;
cInfo = dynamic_cast<NetwControlInfo*> (msg->removeControlInfo());
nbrNetwAddrs[src] = cInfo->getNetwAddr(); // 记录邻居的网络层地址
发送时使用nbrNetwAddrs中的网络层地址信息即可
方法二:使用omnet的层次模型直接可以获得网络层地址,但这样就假定了应用层可以通过某种方法获得网络层地址,而协议并不关心
int netwAddr = simulation.getModule(contact)->getParentModule()->getSubmodule("net")->getId();
pkt->setControlInfo(new NetwControlInfo(netwAddr));