`
searun
  • 浏览: 174268 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

如何在INET中添加一个新的协议

阅读更多

 

本文将对如何在 INET 中加入自定义协议进行了介绍,借鉴了【 1 】中的内容,适用于 OMNeT++ 4 版本。

 

INET 中增加一个协议之前,需要对 INET 的基本架构有个了解。【 2 】中对 INET 的组织形式进行了一个概要介绍。简单地说, INET 还是按照 ISO 的层次结构来组织源代码的。在增加协议之前,首先要清楚这个新协议所处的层次,从而决定源代码放置的位置。这里以 ISIS 协议为例来说明如何在 INET 中增加一个新的协议的具体流程。

由于 ISIS 是一个网络层的协议,所以我们将 ISIS 的源代码实现放在networklayer目录下。在 n etworklayer目录下创建一个 isis 文件夹,用来保存 ISIS 协议的具体实现代码。

对于一个新的协议,一般来说至少要包含有下面的四个文件: 

  • ISIS.ned :用来定义 ISIS 模块,其中有连接门的定义和参数设置等。这使得其他的 NED 文件可以使用 ISIS 模块(协议)。
  • ISISPacket.msg :用来定义 ISIS 的报文格式。虽然这个不是必须的,但是推荐这样做,而不要手工书写代码。在 OMNeT++ 编译的时候,将会通过 opp_msgc 工具将此文件转换成ISISPacket_m.cc和ISISPacket_m. h 文件。
  • ISIS.cc :包含有 ISIS 类的具体实现。
  • ISIS.h :包含有 ISIS 类的声明(class INET_API ISIS: public cSimpleModule …) 。在此文件中将对协议的具体实现进行编码。     

INET for OMNeT++ 4 简化了编译过程。当做完了上面的工作后,直接在根目录下执行 make ,如果没有错误的话, ISIS 网络层协议就已经可以使用了。在原来的版本中,还需要手工修改工程文件,现在这些都已经不需要了。

 

当编译链接通过后,别忘了在 example s目录下生成一个 ISIS 的测试用例进行测试哦。

 

注意的问题:

  1. NED 文件中需要加入package inet.networklayer.isis;语句声明,否则在测试用例中会找不到此模块。
  2. 在编写代码的时候,注意模块中的结构体不要和已有协议中的名称一样,否则会链接不成功。

 

【1】http://www.omnetpp.org/pmwiki/index.php?n=Main.INETAddingANewProtocol

【2】http://www.netforum.com.cn/viewthread.php?tid=17480&extra=page%3D1

 

2
0
分享到:
评论

相关推荐

    inet:为Veins_Hetvnet修改的INET

    重要说明:INET Framework不断得到改进:添加了新部件,纠正了错误,等等。 我们不能断言此处实施的任何协议都可以根据规范完全起作用。 您有责任确保您在模拟中使用的模型正确运行,并获得有效的结果。 我们欢迎您...

    CROR:基于inet框架的跳频仿真

    重要说明:INET Framework不断得到改进:添加了新部件,纠正了错误,等等。 我们不能断言此处实现的任何协议都可以根据规范完全发挥作用。 您有责任确保自己在模拟中使用的模型正确运行,并获得有效的结果。 捐款...

    inet.data:Clojure库,用于将各种与Internet相关的概念实体建模为数据

    inet.data Inet.data是一个用于将各种与Internet相关的概念实体建模为数据的库,支持与建模实体有关的应用程序以及与之交互的应用程序。安装Inet.data在Clojars上可用。 将此:dependency添加到您的Leiningen project...

    JAVA局域网飞鸽传书软件设计与实现

    TCP/IP使用地址和端口号来指定一个地址,但是其它协议也许采用不同的形式。如果Winsock强迫使用特定的寻址方式,添加其他协议就不大可能了。在Winsock中,应用程序员通过SOCKADDR_IN结构来指定IP地址和端口号。定义...

    DOS常用命令详解,用法以及其功能

    -s :在 ARP 缓存中添加项,将 IP 地址 inet_addr 和物理地址 ether_addr 关联。物理地址由以连字符分隔的 6 个十六进制字节给定。使用带点的十进制标记指定 IP 地址。项是永久性的,即在超时到期后项自动从缓存删除...

    基于TCP协议的图书管理系统

    实现了一个基于TCP协议的网络间通信AF_INET的客户端/服务器模式的图书管理系统。客户端可以通过输入用户名和密码来连接服务器,并选择添加、查询或删除图书信息。服务器端则负责监听端口,接收客户端的连接请求和...

    如何将窗体连接网页源代码

    在form中添加2个按钮,2个文本框和Inet控件 代码如下: Option Explicit ''这段代码使用了GetHeader来返回页面信息,比较准确一些 ''可以得到文件最后修改日期,文件大小等等 ''用这个办法还可以判断一个...

    入门学习Linux常用必会60个命令实例详解doc/txt

    在Linux中,如果要使用硬盘、光驱等储存设备,就得先将它加载,当储存设备挂上了之后,就可以把它当成一个目录来访问。挂上一个设备使用mount命令。在使用mount这个指令时,至少要先知道下列三种信息:要加载对象的...

    计算机网络课程设计发送TCP数据包.doc

    实验三 发送TCP数据包 实验目的: 设计一个发送TCP数据包的程序,并根据本设计说明TCP数据包的结构以及TCP协议与 IP协议的关系,使大家对TCP协议的工作原理有更深入的认识。 实验要求: 本程序的功能是填充一个TCP...

    标准MFC WinSock ActiveX控件开发实例

    这个时候,我们为这个控件添加了一个Connect()的接口,出于通用性,安全性和扩展性的考虑,我们采用了VARIANT类型的参数, 很多人可能都不太了解该类型,又或者有接触过,但被吓怕了,那么我们来看清它的本来面目: ...

    基于SIP开发软件电话的一些资源(转自YOUTOO)

    在VC里创建win32控制台程序工程,将libosip源码包的SRC目录下的Test目录内的C源程序随便拷一个到工程时,直接编译(工程设置里照前文方法在link选项里增加osip2.lib,osipparser2.lib引用我们之前成功编译得到的静态...

    iMacros为铬「iMacros for Chrome」-crx插件

    #Tips_for_using_iMacros_for_Chrome_freeware阅读新内容:*新的颜色和图标,现代且简洁的设计*对文件上传的新支持*在iMacros设置中添加了重放速度控制*对!PLAYBACKDELAY命令添加了支持*添加了只读的!FOLDER_...

    rsh软件(LoadRunner监控Linux)

    在Controller中,将System Resource Graphs中的Unix resources拖到右侧的资源监控区域。 鼠标右键选择Add Measurements,添加被监控Linux的IP地址x.x.x.x,选择需要监控的性能指标,确认。 七、遇到的问题 1. ...

    HttpInterface:Windows上C++封装的HTTP库,包含三种实现模式(WinInet、WinHttp、socket)

    HttpInterface:Windows上C++封装的HTTP库,包含三种实现模式(WinInet、WinHttp、socket)主要实现了HTTP的get\post方法,下载到内存、下载到本地文件,回调下载进度等接口 测试程序中展现了常用的几个方法。...

    黑客反向工程

    //看看这个IP和要伪装的IP是否在同一个子网 if((ip&netmask)!=(fakeIp&netmask)){ continue; //如果不在一个子网,继续遍历地址列表 } unsigned long netsize = ntohl(~netmask); //网络中主机数 unsigned ...

Global site tag (gtag.js) - Google Analytics