本文将对如何在 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