分类: 嵌入式
2010-01-16 11:33:19
vxworks的网络协议开发
总体概述:
在vxworks中,提供了一个中间层,即mux层。它位于osi七层协议的data link layer与network layer之间。
据我理解,所有的网络协议开发均在此处。对于新开发的网络协议,有driver与protocol两部分。driver位于mux层之下,protocol位于mux层之上,两者之间的交互均须经过mux层。对于driver与protocol都有相应的函数接口规定(即必须实现的几个函数),以实现层之间的交互。
一些步骤:
1.配置vxworks镜像以包括END interface support(enhanced network driver);
INCLUDE_END;
2.装载网络设备.
系统对存在于系统设备表中的所有接口自动调用muxDevLoad();并返回标识设备的cookie,用于以后对设备的调用。
3.激活网络设备
muxDevStart();
4.注册service Address Mapping Routines
muxAddrResFuncAdd()/muxMCastAddrAdd().对于每种network protocol type和network driver type注册自己的地址解析函数,通过mux被以后的network protocol layer调用。
5.初始化网络协议
通常,网络协议network service address 与driver连系在一起。通过muxBind()来将network protocol和network driver进行绑定。这之后,网络协议就可以通过相应的device来发送与接收packets.
原文参考:
The MUX provides a way for the programmer to customize:
n The data link layer, by writing a network interface driver, or
n The network/transport or “protocol” layer, by writing a network protocol
The MUX is an API that allows programmers to develop an implementation of
either layer independently of the other layer.
For example, a network interface driver (at the data link layer) does not directly
access any structure within the network protocol (at the protocol layer). Instead,
when the driver is ready to pass data to the protocol, the driver calls a MUX
function that handles the details.
This design permits any implementation of the data link layer with a MUX-based
network interface driver to work easily with any MUX-based network protocol.
使用netBufLib进行内存池管理
总体概述:
netBufLib提供了mBlks与clBlks结构,其中mBlks指向clBlks,而clBlks指向实际存贮数据的cluster.不同层次之间交互数据可以直接通过传递mBlks链来进行,而不用进行多余的数据拷贝。其中clBlks的作用是,记录有多少个mBlks对其进行了引用,当引用为零时才可以释放。不同的mBlks可以指向相同的clBlks,以共享数据。
我的理解:
对于发送或接收的包可以由多个分开的内存块组成,也可以由一块大的内存块组成。因此对于一个包来说,它有一个mBlks链,链接着这个包的所有clusters.一个包也应该可以由一个大cluster组成,要是这样的话,一个包就只要有一个mBlks就行了。mBlks除链接着本身的所有的mBlks外,mBlks头还链接着下一个包的mBlks链的头。
clusters大小:
对于clusters的大小,可以有不同型号。用于protocol的内存池,可以有不同大小的clusters