OMNET++ 无线通信客户端-服务器

OMNET++ wireless communication client-server

第一次使用OMNET++

我想从最基本的东西开始了解它是如何工作的。 我成功地创建了我的第一个模拟,其中有两个主机连续交换消息(来自 tictoc 示例)。

我现在想做的是在一个AP和一个无线节点之间模拟一个简单的客户端-服务器无线通信。我正在尝试使用 inet class 中的元素来做到这一点,但我卡住了,它无法正常工作。

import inet.networklayer.configurator.base.NetworkConfiguratorBase;
import inet.networklayer.configurator.ipv4.IPv4NetworkConfigurator;
import inet.networklayer.configurator.ipv4.IPv4NodeConfigurator;
import inet.node.inet.WirelessHost;
import inet.node.wireless.AccessPoint;
import inet.physicallayer.common.packetlevel.RadioMedium;
import inet.physicallayer.contract.packetlevel.IRadioMedium;
import inet.physicallayer.ieee80211.packetlevel.Ieee80211RadioMedium;


//
// TODO documentation
//
network net
{
    string mediumType = default("IdealRadioMedium");
    @display("bgb=620,426");
    submodules:
        wirelessHost1: WirelessHost {
            @display("p=423,164");
        }
        accessPoint1: AccessPoint {
            @display("p=147,197");
        }
        iRadioMedium: <mediumType> like IRadioMedium {
            @display("p=523,302");
        }
        iPv4NetworkConfigurator: IPv4NetworkConfigurator {
        @display("p=270,324");
        assignDisjunctSubnetAddresses = false;
    }
}

然后我使用 tictoc beahviour 创建了一个 wirelessHost.cc 源文件来使两个节点通信。

但它不工作,我得到这个错误:

<!> Error in module (inet::IPv4NodeConfigurator) infrastructure.wirelessHost1.networkLayer.configurator (id=13) during network initialization: Configurator module 'configurator' not found (check the 'networkConfiguratorModule' parameter).

但在做某事之前,又是关于接入点的另一个错误(找不到wlan[0]模块)。 有人可以帮助我了解如何配置此模型吗?

编辑 这是配置 .ini 文件

[General]
network = infrastructure

#cmdenv-output-file = omnetpp.log
#debug-on-errors = true
tkenv-plugin-path = ../../../etc/plugins
#record-eventlog = true

**.constraintAreaMinX = 0m
**.constraintAreaMinY = 0m
**.constraintAreaMinZ = 0m
**.constraintAreaMaxX = 600m
**.constraintAreaMaxY = 500m
**.constraintAreaMaxZ = 0m

**.mobility.typename = "StationaryMobility"
**.mobilityType = "StationaryMobility"


# access point
*.accessPoint.wlan[0].mac.address = "004444444444"
*.accessPoint.wlan[0].radio.channelNumber = 11


# host1 is associated with AP1 on channel 0
**.wirelessHost1.wlan[0].mgmt.accessPointAddress = "004444444444"
*.wirelessHost1.**.mgmtType = "Ieee80211MgmtSTASimplified"


# global data rates
**.wlan*.bitrate = 11Mbps

# application level: host1 pings host2
**.numPingApps = 1
*.wirelessHost1.pingApp[0].destAddr = "accessPoint"
*.wirelessHost1.pingApp[0].sendInterval = 10ms

但是运行我得到的模拟

<!> Error in module (inet::ICMP) infrastructure.wirelessHost1.networkLayer.icmp (id=17) at event #4, t=0.008442657441: check_and_cast(): cannot cast (inet::GenericNetworkProtocolControlInfo*) to type 'inet::IPv4ControlInfo *'.

网络 IPv4NetworkConfigurator 的实例必须 命名为 configurator。改名后你的第二个问题也应该解决了。
此外,RadioMedium实例模块的名称必须是:radioMedium(而不是iRadioMedium)。

编辑
你犯了两个错误。

  1. AccessPoint 没有网络层,因为它只使用MAC层中继和发送MAC帧和 MAC 地址 - 就像在真实网络中一样。因此,它没有 IP 地址,也无法向其发送 ICMP ping。

  2. OMNeT++ 允许在 ini 文件中使用模块名称而不是 IP 地址,例如 **.destAddr = "wirelessHost1"。在您的 ini 中,您正在尝试使用不存在的 accessPoint 而不是 accessPoint1 (这是不正确的,因为第一个错误)。

我建议添加一个新的 WirelesHost(例如 wirelessHost2)并向其发送 ping,即

*.wirelessHost1.pingApp[0].destAddr = "wirelessHost2"