2009年1月6日星期二

vxWorks用HOOK实现底层数据操作

Windows下有辅助软件包winpcap

Linux系统提供可直接进行底层操作的原始套接字,以简化底层操作的复杂性;

VxWorks结合其在嵌入式领域的特殊应用,提供了两种对底层设备的处理方法:HOOK函数和MUX接口;

[HOOK函数]

主机在接收到一个数据包后,就从数据链路层开始去掉相应的头部,而后交给上层协议继续处理。vxW0 允许我们使用HOOK函数在数据链路层为

每一个接收到的数据包的处理流程加上一个环节。即在将数据包交给上层协议处理之前,由HOOK函数对该数据包进行预处理,HO K函数一般用来判断包的合法性。HOOK函数每处理完一个数据包会返回一个布尔值,VxWorks则根据HOOK函数的返回值来决定是否继续将该数据包交由上层协议处理。HOOK

函数返回FALSE,表示该数据包是合法数据,应被上层协议继续处理;HOOK函数返回TRUE,表示该数据包是非法数据,应被丢弃,从而达到端口控制的目的。

HOOK函数工作在数据链路层,可以在输入和输出两个方向对端121进行控制(分别使用InputHook和 数据包OutputHook函数)

[MUX接口]

使用MUX接口前,需要使用函数muxBind()将上层协议和底层端口进行绑定。同时在该函数中,要指定MUX将接收到的数据包递交给该协议时,先进行

的预处理操作(由自定义的函数来完成).

MUX接口屏蔽了网络层和数据链路层的大部分细节操作,但使用MUX对端口进行控制,一个关键的问题是需要直接操作数据缓冲区,因此需要熟悉缓冲

区的组织结构。内存池主要有3种形态的组织结构,它们构成了MUX函数要操作的主要数据结构,分别是mBlkclBlkCluster。其中Cluser为数据的存储区域,根据应用的需求,各个Cluster的大小可能不一样(64128字节不等);而mBlkclBlk存储数据的管理信息。这3种结构通过指针连接在一起,形成一个完整的数据包。

[特点与性能比较]

使用HOOK函数和MUX13来实现端口控制,都不需要了解太多的数据链路层和网络层协议细节,能够简化实现的复杂性。但二者在工作效率、操作简

易度等方面还有一些区别,主要有以下几方面:

(I)HOOK函数主要是为以太网设计的,不适合对其它类型网络的端口进行控制;而MUX接口没有这个限制。

(2)HOOK函数工作在数据链路层;而MUX接口用于屏蔽数据链路层和网络层的交互。

(3)两者对数据包的操作。HOOK函数是不能够直接对网络内存池进行操作的,其实际上是对数据包的副本进行操作;而MUX函数则直接对网络内存池进行操作,显然具有较高的工作效率。

(4)使用HOK函数进行编程比使用MUX函数要相对简单。对端口进行控制,HOK函数仅需要6个函数,而且所有函数仅涉及一个描述端口的数据结构(struct ifiaet);使用MUX函数,则实现端口控制需要涉及到近lOMUX函数,而且除了使用描述端口的数据结构ifnet外,还需要了解一些其它的复杂数据结构mblkclBlkCluster,需要对网络数据包的组织结构有较清晰的了解。

摘抄:

基于VxWorks的端口控制实现

张敬伟 ,周娅 ,周德新2

(1.桂林电子工业学院计算机系,广西桂林541004

2.桂林电子工业学院通信与信息工程系,广西桂林541O04)

摘要:介绍了嵌入式操作系统VxWorks下端12控制的两种实现方法:HOOK函数和MUX12,并对两种实现方法的特点

和性能做了比较。

关键词:端12控制;MUX12HOOK函数

中图分类号: 9309 文献标识码:A

Implementation of Port Conlrol Based on VxWorks

0 评论: