Составной модуль OMNET ++ вернул неизвестный параметр 'routing TableModule'

Я создал составной модуль, который расширяет / наследует AODVRouter inet. NED-файл составного модуля выглядит следующим образом:

package project1;

import inet.node.aodv.AODVRouter;

module snode extends AODVRouter
{
parameters:
    //@networkNode;
    @display("i=device/wifilaptop");
    @labels(wireless-node);
   @class(SelfishBaseNode);

   submodules:
        bad: SelfishBaseNode {
        @display("p=273,350");
    }
}

Файл .h выглядит следующим образом:

#ifndef __PROJECT1_SELFISHBASENODE_H_
#define __PROJECT1_SELFISHBASENODE_H_

#include <omnetpp.h>
#include "AODVRouting.h"
#include "inet/routing/aodv/AODVControlPackets_m.h"


using namespace inet;

class SelfishBaseNode : public AODVRouting
{

protected:
  //  void initialize();
void sendAODVPacket(AODVControlPacket *packet, const L3Address& destAddr, unsigned int timeToLive, double delay)override;

};

#endif

Файл CC следующим образом:

#include "SelfishBaseNode.h"
#include <INetworkProtocolControlInfo.h>
#include "inet/networklayer/ipv4/IPv4Route.h"
#include "inet/linklayer/ideal/IdealMacFrame_m.h"
#include "AODVRouting.h"
#include <string.h>
#include <omnetpp.h>


using namespace inet;


Define_Module(SelfishBaseNode);

void SelfishBaseNode::sendAODVPacket(AODVControlPacket *packet, const L3Address& destAddr, unsigned int timeToLive, double delay)
{

 ASSERT(timeToLive != 0);

    INetworkProtocolControlInfo *networkProtocolControlInfo = addressType->createNetworkProtocolControlInfo();

    networkProtocolControlInfo->setHopLimit(timeToLive);

    networkProtocolControlInfo->setTransportProtocol(IP_PROT_MANET);
    networkProtocolControlInfo->setDestinationAddress(destAddr);
    networkProtocolControlInfo->setSourceAddress(getSelfIPAddress());

    // TODO: Implement: support for multiple interfaces
    InterfaceEntry *ifEntry =  interfaceTable->getInterfaceByName("wlan0");
      networkProtocolControlInfo->setInterfaceId(ifEntry->getInterfaceId());

    UDPPacket *udpPacket = new UDPPacket(packet->getName());
    udpPacket->encapsulate(packet);
    udpPacket->setSourcePort(aodvUDPPort);
    udpPacket->setDestinationPort(aodvUDPPort);
    udpPacket->setControlInfo(dynamic_cast<cObject *>(networkProtocolControlInfo));

    if (destAddr.isBroadcast())
        lastBroadcastTime = simTime();

delete packet;

}

Затем я создал составной сетевой модуль для моделирования. Код следующий:

package project1;

@namespace(inet);
import inet.common.figures.DelegateSignalConfigurator;
import inet.networklayer.configurator.ipv4.IPv4NetworkConfigurator;
import inet.node.inet.INetworkNode;
import inet.physicallayer.contract.packetlevel.IRadioMedium;
import inet.visualizer.integrated.IntegratedCanvasVisualizer;

network VanetA
{
parameters:
    string hostType = default("AODVRouter");

    @display("bgb=855.264,620.912;bgg=50,2,grey95;bgu=m");

    @figure[rcvdPkText](type=indicatorText; pos=420,20; anchor=w; font=,20; textFormat="packets received: %g"; initialValue=0);
    @statistic[rcvdPk](source=DestinationNode_rcvdPk; record=figure(count); targetFigure=rcvdPkText);
    @signal[DestinationNode_rcvdPk];
    @delegatesignal[rcvdPk](source=DestinationNode.udpApp[0].rcvdPk; target=DestinationNode_rcvdPk);

submodules:
    visualizer: IntegratedCanvasVisualizer {
        @display("p=59,103");
    }
    configurator: IPv4NetworkConfigurator {
        @display("p=59,164");
    }
    radioMedium: <"IdealRadioMedium"> like IRadioMedium {
        @display("p=60,50");
    }
    figureHelper: DelegateSignalConfigurator {
        @display("p=60.399998,292.336");
    }

    SourceNode: <hostType> like INetworkNode {
        @display("i=device/pocketpc;p=445.536,198.432");
    }

    DestinationNode: <hostType> like INetworkNode {
        @display("i=device/pc4;p=329.47202,102.336");
    }

    BadRNode1: snode {
        @display("i=device/satellite;p=385.632,159.744");
    }

}

Итак, после перекомпоновки проекта и запуска omnetpp.ini я сразу получил эту ошибку: «Ошибка в модуле (SelfishBaseNode) VanetA.BadRNode1 (id = 8) во время инициализации сети: неизвестный параметр маршрутизации TableModule».

Я проверил отладчик и, видимо, он остановился на этой строке в AODVRouting.cc:

void AODVRouting::initialize(int stage)
{
.....
.....
routingTable = getModuleFromPar<IRoutingTable>(par("routingTableModule"), this);
}

Я был озадачен, потому что я не переопределил функцию initialize () в SelfishBaseNode.cc. Я думал, что программа перепутала с функцией initialize () между SelfishBaseNode.CC и AODVRouting.CC, поэтому я удалил функцию initialize () из SelfishBaseNode.h и файла .CC, но это не помогло. Надеюсь, кто-нибудь сможет пролить свет на эту проблему. Спасибо.


person badman    schedule 23.07.2017    source источник


Ответы (1)


Не уверен, что произошло, но после устранения неполадок в течение 1 дня я решил обновить OMNET ++ до версии 5.1.1, и проблема решена.

person badman    schedule 25.07.2017