INET的定制使用OMNET++

发现网上大部分是讲INET安装,少有几篇讲的是INET的示例,但是怎么实现自己的定制化节点,网络设计,并没有得到很好的解决。本文,自己将把定制化的学习过程分享给大家。

ps.某学院有个499的课,不知道会不会讲自定制节点等知识(看它课程目录,感觉拿着开源赚钱,有点…反正我也没钱买),现在就自己琢磨下。

1.学习分析inet4.3/tutorials/wireless文件夹里的文件,因为它包含了单纯的点对点无线传输。

(1)WirelessA.ned文件
作用:定义节点和位置:即定义(节点+拓扑)

package inet.tutorials.wireless;//表明本文件的位置
import inet.networklayer.configurator.ipv4.Ipv4NetworkConfigurator;//调用的子模块
import inet.node.inet.INetworkNode;//调用的子模块
import inet.physicallayer.wireless.common.contract.packetlevel.IRadioMedium;//调用的子模块
import inet.visualizer.contract.IIntegratedVisualizer;//调用的子模块

network WirelessA
{
    parameters:
        @display("bgb=650,500;bgg=100,1,grey95");//显示有关不重要
        @figure[title](type=label; pos=0,-1; anchor=sw; color=darkblue);//显示有关不重要

        @figure[rcvdPkText](type=indicatorText; pos=380,20; anchor=w; font=,18; textFormat="packets received: %g"; initialValue=0);//显示接收到的数据
        @statistic[packetReceived](source=hostB.app[0].packetReceived; record=figure(count); targetFigure=rcvdPkText);

    submodules://以下全部就是节点的定义
        visualizer: <default(firstAvailableOrEmpty("IntegratedCanvasVisualizer"))> like IIntegratedVisualizer if typename != "" //调用的子模块:显示界面相关
        {
            @display("p=580,125");//显示在界面上
        }
        configurator: Ipv4NetworkConfigurator //调用的子模块:IPV4协议相关
        {
            @display("p=580,200");//显示在界面上
        }
        radioMedium: <default("UnitDiskRadioMedium")> like IRadioMedium //调用的子模块:信道
        {
            @display("p=580,275");//显示在界面上
        }
        hostA: <default("WirelessHost")> like INetworkNode //调用的子模块:无线节点
        {
            @display("p=50,325");//显示在界面上
        }
        hostB: <default("WirelessHost")> like INetworkNode //调用的子模块:无线节点
        {
            @display("p=450,325");//显示在界面上
        }
}

(2)omnetpp.ini文件
作用:进一步配置网络:节点+拓扑

[Config Wireless01]
description = Two hosts communicating wirelessly
network = WirelessA//进一步配置网络
sim-time-limit = 20s//仿真时间
//进一步配置节点
*.host*.ipv4.arp.typename = "GlobalArp"
//进一步配置节点A
*.hostA.numApps = 1
*.hostA.app[0].typename = "UdpBasicApp"
*.hostA.app[0].destAddresses = "hostB"
*.hostA.app[0].destPort = 5000
*.hostA.app[0].messageLength = 1000B
*.hostA.app[0].sendInterval = exponential(12ms)
*.hostA.app[0].packetName = "UDPData"
//进一步配置节点B
*.hostB.numApps = 1
*.hostB.app[0].typename = "UdpSink"
*.hostB.app[0].localPort = 5000
//进一步配置节点
*.host*.wlan[0].typename = "AckingWirelessInterface"
*.host*.wlan[0].mac.useAck = false
*.host*.wlan[0].mac.fullDuplex = false
*.host*.wlan[0].radio.transmitter.communicationRange = 500m//通信距离
*.host*.wlan[0].radio.receiver.ignoreInterference = true
*.host*.wlan[0].mac.headerLength = 23B
//进一步配置节点
*.host*.**.bitrate = 1Mbps

(3)如上,借鉴INET的框架,网络的节点和拓扑都简单就写得明明白白。但是!但是节点怎么执行代码呢?毕竟我们是要定制化协议的,我们在tictoc工程中学到的.cc+.h文件在哪里呢?这才是难到很多人的点---------继续上述分析:inet4.3/tutorials中还有一个文件package.ned文件
作用:不详,但是没它不行,后续搞懂了再补充它吧

package inet.tutorials;

(4)点开inet/networklayer/configurator/ipv4/Ipv4NetworkConfigurator查看源码(是.cc和.h文件),因为此文件在WirelessA.ned中调用了
作用:定义了Ipv4NetworkConfigurator模块的具体内容,一堆包含文件,说明它也依赖于别的文件

#include "inet/networklayer/configurator/ipv4/Ipv4NetworkConfigurator.h"
#include <set>
#include "inet/common/INETUtils.h"
#include "inet/common/ModuleAccess.h"
#include "inet/common/XMLUtils.h"
#include "inet/common/stlutils.h"
#include "inet/networklayer/common/L3AddressResolver.h"
#include "inet/networklayer/common/NetworkInterface.h"
#include "inet/networklayer/contract/IInterfaceTable.h"
#include "inet/networklayer/ipv4/IIpv4RoutingTable.h"
namespace inet 
{
   Define_Module(Ipv4NetworkConfigurator);//这就是我们在WirelessA.ned调用的模块
   *****
   //一堆巨人的肩膀
   *****
}

(5)点开inet/node/inet/INetworkNode查看源码(是个.ned文件),因为此文件在WirelessA.ned中调用了

package inet.node.inet;//表示自己这个文件的位置
moduleinterface INetworkNode
{
    parameters:
        @display("bgb=,448");
        @networkNode;
        @labels(node,ethernet-node,wireless-node);
}

(6)按照5和6的步骤,完成了所有直接调用文件的查看,分为.cc.h文件和.ned文件。文件中各自还有大量的引用依赖
总结:根据以上的分析,自定制的过程是:(名字随意)
1.写自己的test_self.ned文件。定义节点NODE_SELF1:调用相应子模块,但是由于需要自定值功能,因此应该还需要在子模块的基础上增加新的代码
2.写自己的test_self.ini文件。进一步配置网络
3.运行仿真
(7)验证
验证放在下一文章,还在验证中。。。。。。

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Omnet++是一个用于网络模拟和通信系统研究的开源框架,而InetOmnet++的一个网络模型库。安装Omnet++Inet是在电脑上运行模拟网络实验的前提。 以下是Omnet++Inet的安装步骤: 1. 首先,从Omnet++官方网站(https://omnetpp.org/)下载适合你的操作系统的安装文件,如Windows、Linux或Mac。 2. 下载完成后,解压文件并进入Omnet++的安装目录。 3. 打开命令行终端,进入目录,执行"./configure"命令,并按照提示进行配置,选择要安装的模块,包括Inet。 4. 配置完成后,执行"make"命令来编译Omnet++源代码和所选模块。这个过程可能会耗费一些时间,具体时间取决于你的电脑性能和所选模块的大小。 5. 编译完成后,在Omnet++安装目录下可以看到一个名为omnetpp的可执行文件。通过运行omnetpp文件,你就可以启动Omnet++开发环境。 6. 接下来,要安装Inet库。在Omnet++开发环境中,点击 "Help" -> "Install Simulation Models",然后选择 "Inet",点击 "Next" 进行安装。 7. 完成安装后,Inet库就可以通过Omnet++开发环境中的 "File" -> "New" 来创建模型项目。 注意:在安装过程中,可能会遇到一些依赖项的问题。请确保已经按照官方文档的指导安装了所需的依赖项,并将它们正确地配置在系统路径中。这些信息通常可以在Omnet++Inet的官方文档中找到。 总结:Omnet++Inet的安装过程相对简单,只需要从官方网站下载并解压文件,然后进行配置和编译即可。安装完成后,就可以使用Omnet++开发环境来进行网络模拟和通信系统研究,并通过导入Inet库来创建模型项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值