如何在 inet 数据包定义中使用 C++ 类型(结构)
How to use a c++ type (struct) in inet packet definition
我想创建一个 inet 数据包,数据包内容需要是在消息文件外定义的 c++ 类型结构。
我之前这样做是为了定义一个从 OMNeT 中的 cMessages 派生的 .msg 文件,如下所示:
cplusplus{{
#include "util/DataTypes/StateDataTypes.h"
}};
struct StateWithCovariance;
message WirelessMsg
{
StateWithCovariance VehicleLocation;
}
现在我正在使用 simu5g 并希望发送与 inet 数据包相同的 msg 内容。我知道 inet 数据包数据结构建立在数据结构块之上。因此,我遵循了它在 inet 中是如何完成的,当我尝试创建数据包时,我不能使用上面相同的格式来定义数据包,因为 then
cplusplus{{
#include "inet/common/INETDefs"
#include "inet/common/packet/chunk/chunk"
}}
class WirelessAppPacket extends inet::FieldsChunk
{
simtime_t payloadTimestamp;
StateWithCovariance VehicleLocation;
}
不会工作并给我错误:
modules/communication/NR/App/WirelessAppPacket.msg:34: Error: 'WirelessAppPacket': unknown base class 'inet::FieldsChunk',
available classes' (inet::StateWithCovariance:1)' ,'(omnetpp::cMessage:4)', '(omnetpp::cNamedObject:5)','(omnetpp::cObject:3)','(omnetpp::cOwnedObject:4)','(omnetpp::cPacket:4)'
如果我给它
import inet.common.INETDefs;
import inet.common.packet.chunk.Chunk;
class WirelessAppPacket extends inet::FieldsChunk
{
simtime_t payloadTimestamp;
StateWithCovariance VehicleLocation;
}
如果我将项目属性中的消息编译器更改为 --msg6,它不会给出关于块的任何错误,如下所示
MSGC:=$(MSGC) --msg6
但是它给我一个关于数据类型定义的错误:
modules/communication/NR/App/WirelessAppPacket.msg:28: Error: Type declarations are not needed with imports, try invoking the message compiler in legacy (4.x) mode using the --msg4 option
modules/communication/NR/App/WirelessAppPacket.msg:32: Error: unknown type 'StateWithCovariance' for field 'VehicleLocation' in 'WirelessAppPacket'
我使用的整个代码如下所示
import inet.common.INETDefs;
import inet.common.packet.chunk.Chunk;
cplusplus{{
#include "util/DataTypes/StateDataTypes.h"
#include "modules/vehicle/CommunicationCoordinator.h"
}};
struct StateWithCovariance;
class WirelessAppPacket extends inet::FieldsChunk
{
simtime_t payloadTimestamp;
StateWithCovariance VehicleLocation;
}
如果我将消息编译器更改为 --msg4 那么我就无法在 INET 框架中从块基 class 定义我的数据包,并且使用 --msg6 我无法使用我想要的数据类型使用。
有没有办法解决这个问题?
我使用OMNeT++ 5.6.2版,INET 4.2.2版和Simu5G 1.1.0版
解释了要做什么。基本上你需要改变行
struct StateWithCovariance;
从你的最后一个代码片段到
struct StateWithCovariance {
@existingClass;
}
这适用于 --msg6
消息编译器,因此您仍然可以导入 INET 类。
我想创建一个 inet 数据包,数据包内容需要是在消息文件外定义的 c++ 类型结构。 我之前这样做是为了定义一个从 OMNeT 中的 cMessages 派生的 .msg 文件,如下所示:
cplusplus{{
#include "util/DataTypes/StateDataTypes.h"
}};
struct StateWithCovariance;
message WirelessMsg
{
StateWithCovariance VehicleLocation;
}
现在我正在使用 simu5g 并希望发送与 inet 数据包相同的 msg 内容。我知道 inet 数据包数据结构建立在数据结构块之上。因此,我遵循了它在 inet 中是如何完成的,当我尝试创建数据包时,我不能使用上面相同的格式来定义数据包,因为 then
cplusplus{{
#include "inet/common/INETDefs"
#include "inet/common/packet/chunk/chunk"
}}
class WirelessAppPacket extends inet::FieldsChunk
{
simtime_t payloadTimestamp;
StateWithCovariance VehicleLocation;
}
不会工作并给我错误:
modules/communication/NR/App/WirelessAppPacket.msg:34: Error: 'WirelessAppPacket': unknown base class 'inet::FieldsChunk',
available classes' (inet::StateWithCovariance:1)' ,'(omnetpp::cMessage:4)', '(omnetpp::cNamedObject:5)','(omnetpp::cObject:3)','(omnetpp::cOwnedObject:4)','(omnetpp::cPacket:4)'
如果我给它
import inet.common.INETDefs;
import inet.common.packet.chunk.Chunk;
class WirelessAppPacket extends inet::FieldsChunk
{
simtime_t payloadTimestamp;
StateWithCovariance VehicleLocation;
}
如果我将项目属性中的消息编译器更改为 --msg6,它不会给出关于块的任何错误,如下所示
MSGC:=$(MSGC) --msg6
但是它给我一个关于数据类型定义的错误:
modules/communication/NR/App/WirelessAppPacket.msg:28: Error: Type declarations are not needed with imports, try invoking the message compiler in legacy (4.x) mode using the --msg4 option
modules/communication/NR/App/WirelessAppPacket.msg:32: Error: unknown type 'StateWithCovariance' for field 'VehicleLocation' in 'WirelessAppPacket'
我使用的整个代码如下所示
import inet.common.INETDefs;
import inet.common.packet.chunk.Chunk;
cplusplus{{
#include "util/DataTypes/StateDataTypes.h"
#include "modules/vehicle/CommunicationCoordinator.h"
}};
struct StateWithCovariance;
class WirelessAppPacket extends inet::FieldsChunk
{
simtime_t payloadTimestamp;
StateWithCovariance VehicleLocation;
}
如果我将消息编译器更改为 --msg4 那么我就无法在 INET 框架中从块基 class 定义我的数据包,并且使用 --msg6 我无法使用我想要的数据类型使用。
有没有办法解决这个问题?
我使用OMNeT++ 5.6.2版,INET 4.2.2版和Simu5G 1.1.0版
struct StateWithCovariance;
从你的最后一个代码片段到
struct StateWithCovariance {
@existingClass;
}
这适用于 --msg6
消息编译器,因此您仍然可以导入 INET 类。