Omnet++ OMNET+;中的peekAtFront的功能是什么+;

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

我在OMNET++中找到了以下代码

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,你能在这里解释一下如何创建自己的标题吗,或者我需要在上面发布新的问题吗?