Не удается найти сериализатор для VeinsinetSampleMessage

Я пытаюсь реализовать PCAP, записанный в примере моделирования Veins_Inet, чтобы экспортировать показания с каждого узла для каждого события. Однако это ошибка, которую я получаю при запуске моделирования. Как найти такой сериализатор?

Это файл .ini в его нынешнем виде:

# UDPBasicApp
*.node[*].numApps = 1
*.node[*].app[0].typename = "vanet.veins_inet.VeinsInetSampleApplication"
*.node[*].app[0].interface = "wlan0"

# Ieee80211Interface
*.node[*].wlan[0].opMode = "p"
*.node[*].wlan[0].radio.typename = "Ieee80211DimensionalRadio"
*.node[*].wlan[0].radio.bandName = "5.9 GHz"
*.node[*].wlan[0].radio.channelNumber = 3
*.node[*].wlan[0].radio.transmitter.power = 20mW
*.node[*].wlan[0].radio.bandwidth = 10 MHz
*.node[*].wlan[*].radio.antenna.mobility.typename = "AttachedMobility"
*.node[*].wlan[*].radio.antenna.mobility.mobilityModule = "^.^.^.^.mobility"
*.node[*].wlan[*].radio.antenna.mobility.offsetX = -2.5m
*.node[*].wlan[*].radio.antenna.mobility.offsetZ = 1.5m
*.node[*].wlan[*].radio.antenna.mobility.constraintAreaMinX = 0m
*.node[*].wlan[*].radio.antenna.mobility.constraintAreaMaxX = 0m
*.node[*].wlan[*].radio.antenna.mobility.constraintAreaMinY = 0m
*.node[*].wlan[*].radio.antenna.mobility.constraintAreaMaxY = 0m
*.node[*].wlan[*].radio.antenna.mobility.constraintAreaMinZ = 0m
*.node[*].wlan[*].radio.antenna.mobility.constraintAreaMaxZ = 0m
*.node[*].numPcapRecorders = 1
*.node[*].pcapRecorder[*].pcapLinkType = 105 # 802.11
*.node[0].pcapRecorder[*].pcapFile = "results/node0.pcap"
*.node[1].pcapRecorder[*].pcapFile = "results/node1.pcap"
*.node[2].pcapRecorder[*].pcapFile = "results/node2.pcap"

**.crcMode = "computed"
**.fcsMode = "computed"
**.pcapRecorder[*].verbose = true # is this needed? doesnt seem to work ok
**.pcapRecorder[*].alwaysFlush = true
**.pcapRecorder[*].packetFilter = "ping* or Ping*"

# HostAutoConfigurator
*.node[*].ipv4.configurator.typename = "HostAutoConfigurator"
*.node[*].ipv4.configurator.interfaces = "wlan0"
*.node[*].ipv4.configurator.mcastGroups = "224.0.0.1"

# VeinsInetMobility
*.node[*].mobility.typename = "VeinsInetMobility"

# VeinsInetManager
*.manager.updateInterval = 0.1s
*.manager.host = "localhost"
*.manager.port = 9999
*.manager.autoShutdown = true
*.manager.launchConfig = xmldoc("square.launchd.xml")
*.manager.moduleType = "vanet.veins_inet.VeinsInetCar"

# PhysicalEnvironment
*.physicalEnvironment.config = xmldoc("obstacles.xml")
*.radioMedium.obstacleLoss.typename = "IdealObstacleLoss"

# Misc
**.vector-recording = true

[Config plain]

[Config canvas]
extends = plain
description = "Enable enhanced 2D visualization"

# IntegratedCanvasVisualizer (2D)
*.visualizer.*.obstacleLossVisualizer.displayIntersections = true
*.visualizer.*.obstacleLossVisualizer.displayFaceNormalVectors = true
*.visualizer.*.obstacleLossVisualizer.intersectionLineColor = "yellow"
*.visualizer.*.mediumVisualizer.signalPropagationAnimationSpeed = 500/3e8
*.visualizer.*.mediumVisualizer.signalTransmissionAnimationSpeed = 50000/3e8
*.visualizer.*.mediumVisualizer.displaySignals = true
*.visualizer.canvasVisualizer.mediumVisualizer.displaySignalDepartures = false
*.visualizer.canvasVisualizer.mediumVisualizer.displaySignalArrivals = false
*.visualizer.*.physicalLinkVisualizer.displayLinks = true
#*.visualizer.*.mobilityVisualizer.displayPositions = true
#*.visualizer.*.mobilityVisualizer.displayOrientations = true
#*.visualizer.*.mobilityVisualizer.displayVelocities = true
#*.visualizer.*.mobilityVisualizer.displayMovementTrails = true
#*.visualizer.*.mobilityVisualizer.moduleFilter = "**.antenna.mobility"

*.visualizer.osgVisualizer.typename = ""

[Config osg]
extends = canvas
description = "Enable enhanced 2D and 3D visualization using OSG"

*.useOsg = true

# IntegratedOsgVisualizer (3D)
*.visualizer.osgVisualizer.typename = IntegratedOsgVisualizer
*.node[*].osgModel = "veins_inet/node/car.obj.-5e-1,0e-1,5e-1.trans.450e-2,180e-2,150e-2.scale" # offset .5 back and .5 up (position is front bumper at road level), make 450cm long, 180m wide, 150m high

Я предполагаю, что, возможно, включу сюда сериализатор, но мне нужно знать, где его найти.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В Veins нет сериализатора для VeinsInetSampleMessage, поэтому его необходимо создать. Добавьте эти два файла, VeinsInetSampleMessageSerializer.h и VeinsInetSampleMessageSerializer.cc в /home/veins/src/veins/subprojects/veins_inet/src/veins_inet и перекомпилируйте Veins.

// VeinsInetSampleMessageSerializer.h
#ifndef __VEINSINETSAMPLEMESSAGESERIALIZER_H
#define __VEINSINETSAMPLEMESSAGESERIALIZER_H

#include "inet/common/packet/serializer/FieldsChunkSerializer.h"

class VeinsInetSampleMessageSerializer : public inet::FieldsChunkSerializer {
  protected:
    virtual void serialize(inet::MemoryOutputStream& stream, const inet::Ptr<const inet::Chunk>& chunk) const override;
    virtual const inet::Ptr<inet::Chunk> deserialize(inet::MemoryInputStream& stream) const override;

  public:
    VeinsInetSampleMessageSerializer() : FieldsChunkSerializer() {}
};

#endif // __VEINSINETSAMPLEMESSAGESERIALIZER_H
// VeinsInetSampleMessageSerializer.cc
#include "VeinsInetSampleMessageSerializer.h"
#include "VeinsInetSampleMessage_m.h"
#include "inet/common/packet/serializer/ChunkSerializerRegistry.h"

using namespace inet;

Register_Serializer(VeinsInetSampleMessage, VeinsInetSampleMessageSerializer);

void VeinsInetSampleMessageSerializer::serialize(MemoryOutputStream& stream, const Ptr<const Chunk>& chunk) const {
    const auto& sampleMsg = staticPtrCast<const VeinsInetSampleMessage>(chunk);
    std::string roadId(sampleMsg->getRoadId());
    stream.writeString(roadId);
}

const Ptr<Chunk> VeinsInetSampleMessageSerializer::deserialize(MemoryInputStream& stream) const {
    auto sampleMsg = makeShared<VeinsInetSampleMessage>();
    sampleMsg->setRoadId(stream.readString().c_str());
    return sampleMsg;
}

Спасибо! Это позволило симуляции работать без перерыва и, как и ожидалось, было создано несколько файлов Pcap. Однако созданные файлы не содержали никакой информации о пакетах, как я предполагал. Вы также случайно не знаете, как обеспечить запись Pcap-рекордером всей соответствующей информации о пакетах, отправляемых между узлами?

CS1994 28.11.2022 12:38

Попробуйте установить **.pcapRecorder[*].packetFilter = "*".

Jerzy D. 28.11.2022 13:48

Другие вопросы по теме