Не удается расширить класс FieldsChunk (из INET) внутри файла .msg

Мне нужно создать протокол маршрутизации MANET, поэтому я смотрю исходный код GPSR и DSDV в INET, чтобы понять, как это сделать.

Я проверил файлы DsdvHello.msg и Gpsr.msg, в которых определены классы, представляющие пакеты этих протоколов. Эти классы расширяют класс FieldsChunk. Я предположил, что мне нужно определить пакеты своего протокола таким же образом, поэтому я сделал файл Protocolo.msg в своем проекте следующим образом.

cplusplus {{
#include "inet/common/packet/chunk/FieldsChunk.h"
#include "inet/networklayer/contract/ipv6/Ipv6Address.h"
}}

class FieldsChunk;
class Ipv6Address;

class Hola extends FieldsChunk {

    Ipv6Address ip;
    string ubicacion;
}

class Adios extends FieldsChunk {

    Ipv6Address ip;
}

Я не уверен, что делаю правильно, но я делаю это, как я вижу в DsdvHello.msg и Gpsr.msg и в главе «Определения сообщений» в Руководстве по моделированию OMNeT ++.

Я выбрал INET в Project> Properties> Project References, но когда я создаю свой проект, я получаю сообщение fatal error: inet/common/packet/chunk/FieldsChunk.h: No such file or directory, когда он пытается скомпилировать мой .msg файл.

У меня также есть файл NED, который без проблем использует IManetRouting (также из INET), но по какой-то причине он не находит FieldsChunk.h и IPv6Address.h внутри файла .msg.

Может ли кто-нибудь сказать мне, нужно ли мне делать что-нибудь еще, чтобы использовать эти классы в моем .msg файле?


person Adrián Juárez    schedule 05.02.2020    source источник


Ответы (1)


  1. Измените Protocolo.msg на:

    import inet.common.INETDefs;
    import inet.common.packet.chunk.Chunk;
    import inet.networklayer.contract.ipv6.Ipv6Address;
    
    namespace inet;
    
    class Hola extends FieldsChunk {
      Ipv6Address ip;
      string ubicacion;
    }
    
    class Adios extends FieldsChunk {
      Ipv6Address ip;
    }
    
  2. Затем перейдите к Properties вашего проекта, выберите OMNeT++ | Makemake | папка src | Options... и:

    • in Compile tab check "Add include paths exported from referenced projects"
    • на вкладке Custom добавьте следующую строку:

      MSGC:=$(MSGC) --msg6
      
person Jerzy D.    schedule 05.02.2020
comment
да. INET 4 уже использует компилятор сообщений, совместимый с OMNeT ++ 6, однако OMNeT ++ 5 по-прежнему использует по умолчанию старый формат файла сообщений, поэтому вам необходимо специально включить его для своего проекта, как было предложено выше. В OMNeT ++ 6 последний шаг не требуется, так как по умолчанию используется новый формат файла сообщения. - person Rudi; 05.02.2020