【问题标题】:OMNET++ Compound module returned "unknown parameter 'routing TableModule' "OMNET++ 复合模块返回“未知参数‘路由表模块’”
【发布时间】:2017-07-23 16:26:49
【问题描述】:

我构建了一个扩展/继承 inet 的 AODVRouter 的复合模块。复合模块的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) 中的错误:未知参数 'routing TableModule”。

我检查了调试器,显然它停在 AODVRouting.cc 中的这一行:

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

我很困惑,因为我没有覆盖 SelfishBaseNode.cc 中的 initialize() 函数。我认为程序与 SelfishBaseNode.CC 和 AODVRouting.CC 之间的 initialize() 函数混淆了,所以我删除了 SelfishBaseNode.h 和 .CC 文件中的 initialize() 函数,但没有帮助。希望有人可以对这个问题有所了解。谢谢。

【问题讨论】:

    标签: omnet++ inet


    【解决方案1】:

    不确定发生了什么,但经过 1 天的故障排除后,我决定将 OMNET++ 更新到 5.1.1 版并解决问题。

    【讨论】:

      猜你喜欢
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      相关资源
      最近更新 更多