OMNET ++将用户无线节点模块连接到wlan

时间:2018-06-13 12:14:50

标签: omnet++

我对OMNET ++和INET相对较新,并且希望将我创建的子模块连接到wlan gate来测量名为fingerPrinter的无线指纹,但是我在运行时遇到以下错误:

(omnetpp :: cGate)NetworkA.hostA.wlan [1] .upperLayerOut:connectTo():门已连接

这是我的.ned文件:

import inet.node.inet.INetworkNode;
import inet.environment.common.PhysicalEnvironment;
import inet.networklayer.configurator.ipv4.IPv4NetworkConfigurator;
import inet.node.wireless.AccessPoint;
import inet.physicallayer.ieee80211.packetlevel.Ieee80211ScalarRadioMedium;
import inet.physicallayer.contract.packetlevel.IRadioMedium;
import inet.visualizer.contract.IIntegratedVisualizer;
import inet.node.inet.WirelessHost;
import inet.node.aodv.AODVRouter;
import inet.applications.udpapp.UDPBasicApp;
//import inet.physicallayer.common.bitlevel.SignalSampleModel;

simple FingerPrinter
{
    gates:
        input in;
        output out;
}

module WHost extends AODVRouter
{
    parameters:
        @networkNode;
        @labels(wireless-node);
    submodules:
        fingerPrinter: FingerPrinter {
            @display("p=429,125");
        }
    //        signal: SignalSampleModel;
    connections:
        //fingerPrinter.in <-- networkLayer.transportOut++;
        //fingerPrinter.out --> networkLayer.transportIn++;
        wlan[1].upperLayerOut --> fingerPrinter.in;
}


network NetworkA
{
    parameters:
        string hostType = default("AODVRouter");
        string mediumType = default("Ieee80211Radio");
        string pathLossType = default("TwoRayGroundReflection");
        @display("bgb=100,100;bgg=100,1,grey95");
    submodules:
        physicalEnvironment: PhysicalEnvironment {
            @display("p=110,0");
        }
        configurator: IPv4NetworkConfigurator {
            @display("p=110,33.33");
        }
        radioMedium: Ieee80211ScalarRadioMedium {
            @display("p=110,66.66");
        }
        visualizer: <default("IntegratedCanvasVisualizer")> like IIntegratedVisualizer if hasVisualizer() {
            @display("p=110,100");
        }
        AP1: AccessPoint {
            @display("p=0,0");
        }
        AP2: AccessPoint {
            @display("p=100,0");
        }
        AP3: AccessPoint {
            @display("p=0,100");
        }
        AP4: AccessPoint {
            @display("p=100,100");
        }
        hostA: WHost {
            @display("p=50,50");
        }

}

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为您的WHost继承自AODVRoouter继承自WirelessHost的{​​{1}},其继承自StandardHost的{​​{1}}。在NodeBase.ned中,INET已将该门连接到networkLayer:

NodeBase

并且在使用继承时无法删除模块之间的连接(除非代码是专门为该函数编写的)。

根据您想要达到的目标,您有3个选项:

  • INET中的IP模块具有netfilter挂钩,即您可以安装从下层接收到任何内容时通知的代码片段。你可以做各种各样的事情。此工具主要用于路由协议以监控流量并相应地修改路由表。

  • 您可以复制整个继承链,即使用不同的类型名复制for i=0..sizeof(radioIn)-1 { radioIn[i] --> { @display("m=s"); } --> wlan[i].radioIn; wlan[i].upperLayerOut --> networkLayer.ifIn++; wlan[i].upperLayerIn <-- networkLayer.ifOut++; } NodeBase等,并将新模块放在网络层之间的备用NodeBase代码中和WLAN卡。这是丑陋的,而且当使用继承代替组合时,这种情况大多发生。

  • 推荐的方式:INET的设计是一种网络接口应该可以替换的方式。您可以创建一个实现StandardHost的复合模块,将模块和IWirelessNic放在里面,相应地连接它们并配置要使用的接口类型而不是默认的Ieee80211Nic。这实际上意味着您已经创建了一个新的WiFi卡,其中包含您自己的代码,然后将该新卡插入您的主机。