【问题标题】:OMNET++ connecting custome Wireless Node module to wlanOMNET++ 将客户无线节点模块连接到 wlan
【发布时间】:2018-11-23 00:34:41
【问题描述】:

我对 OMNET++ 和 INET 比较陌生,想将我创建的用于测量无线指纹的子模块 fingerPrinter 连接到 wlan 门,但在运行时出现以下错误:

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

这是我的 .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");
        }

}

有人可以帮忙吗?

【问题讨论】:

    标签: omnet++


    【解决方案1】:

    发生这种情况是因为您的 WHost 继承自 AODVRoouter 继承自 WirelessHost 继承自 StandardHost 继承自 NodeBase。在 NodeBase.ned INET 中,该门已经连接到 networkLayer:

    for i=0..sizeof(radioIn)-1 {
        radioIn[i] --> { @display("m=s"); } --> wlan[i].radioIn;
        wlan[i].upperLayerOut --> networkLayer.ifIn++;
        wlan[i].upperLayerIn <-- networkLayer.ifOut++;
    }
    

    当您使用继承时,您不能删除模块之间的连接(除非代码是专门为该函数编写的)。

    根据您想要实现的目标,您有 3 个选项:

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

    • 1234563 .这很丑陋,而且通常在使用继承而不是组合时会发生这种情况。
    • 推荐的方式:INET 的设计是一种网络接口应该是可替换的方式。您可以创建一个实现IWirelessNic 的复合模块,将您的模块和Ieee80211Nic 放入其中,相应地连接它们并配置要使用的接口类型而不是默认的Ieee80211Nic。这实质上意味着您创建了一个新的 WiFi 卡,其中包含您自己的代码,然后将该新卡插入您的主机。

    【讨论】:

    • 非常感谢您的回答。但正如我所说,由于我是新手,我不知道如何配置我的自定义无线模块以用作默认值。你能帮忙吗?
    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多