如何解封装数据包以获取 AODVRouting.CC 中的 UDPBasicApp 数据包名称?

How to decapsulate a packet to get the UDPBasicApp's packet name in AODVRouting.CC?

我目前正在模拟 AODV 路由并且对数据包很困惑 encapsulation/decapsulation。 在UDPBasicAPP.CC中,有一个名为packetName的变量来定义数据包的名称(从INI文件中定义)

void UDPBasicApp::initialize(int stage)
{
packetName = par("packetName");
}

所以一旦数据包通过AODVRouting.CC,它就被封装了:

 void AODVRouting::receiveSignal(cComponent *source, simsignal_t signalID, cObject *obj, cObject *details)
{
cPacket *frame = check_and_cast<cPacket *>(obj);
datagram = dynamic_cast<INetworkDatagram *>(frame->getEncapsulatedPacket());
}

我想再次解封装数据包以检索上面提到的 packetName 值。代码如下:

UDPPacket *testData  = check_and_cast<UDPPacket *>(frame->decapsulate());

但是,我发现UDPPacket class 没有任何函数来access/retrieve 数据包解封装后的packetName 值。我不确定还有什么 class 可以提供这样的功能。我需要获取 packetName 来操作 AODVRouting.CC 中的一些数据。请赐教,谢谢

参数packetName用于创建payload的名称。看看UDPBasicApp::sendPacket():

void UDPBasicApp::sendPacket()
{
    std::ostringstream str;
    str << packetName << "-" << numSent;
    ApplicationPacket *payload = new ApplicationPacket(str.str().c_str());
    // ...

为了获取接收到的数据包或消息的名称,可以使用getName()方法。