Omnet++ 遵循两个不同应用层的汽车

Omnet++ 遵循两个不同应用层的汽车,omnet++,veins,Omnet++,Veins,我正在构建一个攻击场景,其中一辆车,攻击者,跟随另一辆车,正常。攻击者开始发送带有错误位置数据的BSM,以便在其行驶的道路上正常停车 我已经为攻击者实现了attackercaraplayer,以便攻击者使用专门为其定义的函数,为普通攻击者实现了NormalCarApplLayer 我在omnetpp.ini中定义了TraCIScenarioManager设置,如下所示: ########################################################## #

我正在构建一个攻击场景,其中一辆车,攻击者,跟随另一辆车,正常。攻击者开始发送带有错误位置数据的BSM,以便在其行驶的道路上正常停车

我已经为攻击者实现了
attackercaraplayer
,以便攻击者使用专门为其定义的函数,为普通攻击者实现了
NormalCarApplLayer

我在omnetpp.ini中定义了TraCIScenarioManager设置,如下所示:

##########################################################
#            TraCIScenarioManager parameters             #
##########################################################
*.manager.updateInterval = 0.1s
*.manager.host = "localhost"
*.manager.port = 9999
*.manager.moduleType = "org.car2x.veins.nodes.AttackerCar"
*.manager.moduleName = "attacker"
*.manager.moduleType = "org.car2x.veins.nodes.Car"
*.manager.moduleName = "car"
*.manager.moduleDisplayString = ""
*.manager.autoShutdown = true
*.manager.margin = 25
#launch config. tells Veins which SUMO configuration to run
*.manager.configFile = "newyork.sumo.cfg"
#launch command. change sumo-gui with sumo depending on what you want to launch
*.manager.commandLine = "sumo-gui --remote-port $port --seed $seed --configuration-file $configFile"
NormalCarWaveApplLayer
设置如下:

##########################################################
#                    WaveAppLayer                        #
##########################################################
*.car[*].applType = "NormalCarApplLayer"
*.car[*].appl.debug = false
*.car[*].appl.headerLength = 256 bit
*.car[*].appl.sendBeacons = true
*.car[*].appl.dataOnSch = false
*.car[*].appl.beaconInterval = 1s
*.car[*].appl.beaconPriority = 3
*.car[*].appl.dataPriority = 2
*.car[*].appl.maxOffset = 0.005s
*.car[*].appl.avoidBeaconSynchronization = true
##########################################################
#                   Attacker WaveAppLayer                #
##########################################################
*.attacker[*].applType = "AttackerCarApplLayer"
*.attacker[*].appl.debug = false
*.attacker[*].appl.headerLength = 256 bit
*.attacker[*].appl.sendBeacons = true
*.attacker[*].appl.dataOnSch = false
*.attacker[*].appl.beaconInterval = 1s
*.attacker[*].appl.beaconPriority = 3
*.attacker[*].appl.dataPriority = 2
*.attacker[*].appl.maxOffset = 0.005s
*.attacker[*].appl.avoidBeaconSynchronization = true
将RWAWAVEAppllayer
设置附加为:

##########################################################
#                    WaveAppLayer                        #
##########################################################
*.car[*].applType = "NormalCarApplLayer"
*.car[*].appl.debug = false
*.car[*].appl.headerLength = 256 bit
*.car[*].appl.sendBeacons = true
*.car[*].appl.dataOnSch = false
*.car[*].appl.beaconInterval = 1s
*.car[*].appl.beaconPriority = 3
*.car[*].appl.dataPriority = 2
*.car[*].appl.maxOffset = 0.005s
*.car[*].appl.avoidBeaconSynchronization = true
##########################################################
#                   Attacker WaveAppLayer                #
##########################################################
*.attacker[*].applType = "AttackerCarApplLayer"
*.attacker[*].appl.debug = false
*.attacker[*].appl.headerLength = 256 bit
*.attacker[*].appl.sendBeacons = true
*.attacker[*].appl.dataOnSch = false
*.attacker[*].appl.beaconInterval = 1s
*.attacker[*].appl.beaconPriority = 3
*.attacker[*].appl.dataPriority = 2
*.attacker[*].appl.maxOffset = 0.005s
*.attacker[*].appl.avoidBeaconSynchronization = true

当模拟启动时,仅为普通和攻击者实例化
AttackerCaraplLayer
。这是实现我目标的正确方法吗?如果没有,请给出您的想法。

您当前在模拟的
.ini
文件中指定了两次
moduleType
moduleName
。OMNeT++的默认行为是使用它为参数找到的第一个值。这不太可能是你想要的。如果您可以为攻击者和普通车辆使用不同的相扑车辆类型,以下是您解决问题的方法:


Veines 4.5允许您根据SUMO车辆类型为
moduleType
moduleName
moduleDisplayString
使用不同的值。只需为攻击者设置一种相扑车辆类型,例如
攻击
,然后在
.ini
文件中参考设置每种类型配置的语法。例如,
*.manager.moduleName=“ATTACK=attacker*=car”

谢谢@christoph sommer。我试试这个。但是,现在,我已经创建了两个类
Car
AttackerCar
。我创建了一个
TrafficManager
类,该类生成所有通过静脉的车辆。
TrafficManager
在创建这些车辆时,将这些车辆的矢量作为地图保存。我使用
dynamic\u cast(car)
使应用程序层在为攻击者实例化时表现不同。然后调用
AttackerCar
类中定义的函数来发起攻击。