Omnet++ OMNET+;中的peekAtFront的功能是什么+;
我在OMNET++中找到了以下代码Omnet++ OMNET+;中的peekAtFront的功能是什么+;,omnet++,Omnet++,我在OMNET++中找到了以下代码 void Mac::sendDataPacket() { nbTxDataPackets++; if (currentTxFrame == nullptr) popTxQueue(); auto packet = currentTxFrame->dup(); const auto& hdr = packet->peekAtFront<MacHeaderBase>(); la
void Mac::sendDataPacket()
{
nbTxDataPackets++;
if (currentTxFrame == nullptr)
popTxQueue();
auto packet = currentTxFrame->dup();
const auto& hdr = packet->peekAtFront<MacHeaderBase>();
lastDataPktDestAddr = hdr->getDestAddr();
attachSignal(packet, simTime());
sendDown(packet);
}
void Mac::sendDataPacket()
{
nbTxDataPackets++;
如果(currentTxFrame==nullptr)
popTxQueue();
自动数据包=currentTxFrame->dup();
const auto&hdr=packet->peekAtFront();
lastDataPktDestAddr=hdr->getDestAddr();
附加信号(数据包,simTime());
发送(数据包);
}
谁能告诉我以下命令的功能是什么
const auto& hdr = packet->peekAtFront<MacHeaderBase>();
lastDataPktDestAddr = hdr->getDestAddr();
const auto&hdr=packet->peekAtFront();
lastDataPktDestAddr=hdr->getDestAddr();
谢谢
数据包
在INET中是一种表示真实数据包(例如UDP数据报、IP数据包、以太网帧等)的数据结构。包的实例
中可能包含其他结构。要在数据包的开头获取数据,可以使用函数popAtFront()
。它从数据包的实例中删除该数据。然而,有时需要在不删除数据包的情况下检查数据包开头的结构。在这种情况下,可以使用peekAtFront()
。所以这句话:
packet->peekAtFront<MacHeaderBase>();
packet->peekAtFront();
返回数据包开头的第一个数据结构,而不删除它。然后将结构转换为MacHeaderBase
总结:该行允许检查数据包
是否包含MAC帧
参考:。Jerzy,在您的回答“要在数据包的开头获取数据,可以使用函数popAtFront()”,您是指数据包的数据部分还是头部分?我知道,数据包有三个部分:头、数据和尾。另外,您能解释一下lastDataPktDestAddr=hdr->getDestAddr()的功能吗代码>?谢谢1)我的意思是第一部分-通常数据包的第一部分是报头,2)getDestAddr()
从MAC报头返回目标地址。谢谢Jerzy。如果我想在MAC层向数据包头添加一个额外的位,并且想在发送到接收器之前设置/重置该位,我该怎么做?实际上,向数据包头添加一个额外的位(例如,MacHeader
)是不可能的。与实际协议中的情况相同:报头具有固定的结构,并且无法扩展,因为接收方无法理解它。然而,你可以用你想要的所有比特创建自己的标题。Jerzy,你能在这里解释一下如何创建自己的标题吗,或者我需要在上面发布新的问题吗?