本文将对如何在
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
的测试用例进行测试哦。
注意的问题:
-
在
NED
文件中需要加入package inet.networklayer.isis;语句声明,否则在测试用例中会找不到此模块。
-
在编写代码的时候,注意模块中的结构体不要和已有协议中的名称一样,否则会链接不成功。
【1】http://www.omnetpp.org/pmwiki/index.php?n=Main.INETAddingANewProtocol
【2】http://www.netforum.com.cn/viewthread.php?tid=17480&extra=page%3D1
分享到:
相关推荐
重要说明:INET Framework不断得到改进:添加了新部件,纠正了错误,等等。 我们不能断言此处实施的任何协议都可以根据规范完全起作用。 您有责任确保您在模拟中使用的模型正确运行,并获得有效的结果。 我们欢迎您...
重要说明:INET Framework不断得到改进:添加了新部件,纠正了错误,等等。 我们不能断言此处实现的任何协议都可以根据规范完全发挥作用。 您有责任确保自己在模拟中使用的模型正确运行,并获得有效的结果。 捐款...
inet.data Inet.data是一个用于将各种与Internet相关的概念实体建模为数据的库,支持与建模实体有关的应用程序以及与之交互的应用程序。安装Inet.data在Clojars上可用。 将此:dependency添加到您的Leiningen project...
TCP/IP使用地址和端口号来指定一个地址,但是其它协议也许采用不同的形式。如果Winsock强迫使用特定的寻址方式,添加其他协议就不大可能了。在Winsock中,应用程序员通过SOCKADDR_IN结构来指定IP地址和端口号。定义...
-s :在 ARP 缓存中添加项,将 IP 地址 inet_addr 和物理地址 ether_addr 关联。物理地址由以连字符分隔的 6 个十六进制字节给定。使用带点的十进制标记指定 IP 地址。项是永久性的,即在超时到期后项自动从缓存删除...
实现了一个基于TCP协议的网络间通信AF_INET的客户端/服务器模式的图书管理系统。客户端可以通过输入用户名和密码来连接服务器,并选择添加、查询或删除图书信息。服务器端则负责监听端口,接收客户端的连接请求和...
在form中添加2个按钮,2个文本框和Inet控件 代码如下: Option Explicit ''这段代码使用了GetHeader来返回页面信息,比较准确一些 ''可以得到文件最后修改日期,文件大小等等 ''用这个办法还可以判断一个...
在Linux中,如果要使用硬盘、光驱等储存设备,就得先将它加载,当储存设备挂上了之后,就可以把它当成一个目录来访问。挂上一个设备使用mount命令。在使用mount这个指令时,至少要先知道下列三种信息:要加载对象的...
实验三 发送TCP数据包 实验目的: 设计一个发送TCP数据包的程序,并根据本设计说明TCP数据包的结构以及TCP协议与 IP协议的关系,使大家对TCP协议的工作原理有更深入的认识。 实验要求: 本程序的功能是填充一个TCP...
这个时候,我们为这个控件添加了一个Connect()的接口,出于通用性,安全性和扩展性的考虑,我们采用了VARIANT类型的参数, 很多人可能都不太了解该类型,又或者有接触过,但被吓怕了,那么我们来看清它的本来面目: ...
在VC里创建win32控制台程序工程,将libosip源码包的SRC目录下的Test目录内的C源程序随便拷一个到工程时,直接编译(工程设置里照前文方法在link选项里增加osip2.lib,osipparser2.lib引用我们之前成功编译得到的静态...
#Tips_for_using_iMacros_for_Chrome_freeware阅读新内容:*新的颜色和图标,现代且简洁的设计*对文件上传的新支持*在iMacros设置中添加了重放速度控制*对!PLAYBACKDELAY命令添加了支持*添加了只读的!FOLDER_...
在Controller中,将System Resource Graphs中的Unix resources拖到右侧的资源监控区域。 鼠标右键选择Add Measurements,添加被监控Linux的IP地址x.x.x.x,选择需要监控的性能指标,确认。 七、遇到的问题 1. ...
HttpInterface:Windows上C++封装的HTTP库,包含三种实现模式(WinInet、WinHttp、socket)主要实现了HTTP的get\post方法,下载到内存、下载到本地文件,回调下载进度等接口 测试程序中展现了常用的几个方法。...
//看看这个IP和要伪装的IP是否在同一个子网 if((ip&netmask)!=(fakeIp&netmask)){ continue; //如果不在一个子网,继续遍历地址列表 } unsigned long netsize = ntohl(~netmask); //网络中主机数 unsigned ...