2024年4月28日发(作者:)

vxworks 对于arp的处理

默认分类 2010-05-22 23:54:15 阅读144 评论0 字号:大中小 订阅

虽然是vxworks2.0.2版本中的,但是与老土的BSD代码基本一样,事实上,最新的ip协

议栈的代码上虽然加上不少新鲜的功能,但是其主体也依旧一样.

ifnet

也就是协议栈中的接口的概念,跟arp相关处理的最重要的三个成员是:

• if_ioctl 用于接口上的ioctl命令;

• if_resolve 用于进行地址解析的函数;

• if_output 用于在接口上发送数据包;

在ipAttach时,这三个值都进行了初始化:

pIfp->if_ioctl = (FUNCPTR) ipIoctl;

pIfp->if_output = ipOutput;

pIfp->if_resolve = muxAddrResFuncGet(, 0x800);

其中if_resolve的值,实际上就是arpresolve函数.

in_ifaddr

in_ifaddr是ifaddr的一种特殊形式,即ipv4版本的的ifaddr.当我们给接口配置ip地

址时,实际上要生成一个in_ifaddr结构体,并与ifnet相关联.那么它与arp最相关的内容实

际上是在ifaddr结构体中,它们是:

• ifa_rtrequest 这是一个处理arp相关的函数,在后面我们就会解释到它的用处.

• ia_ifp 与地址相关联的接口.

sockaddr_dl

数据链路层地址,它的作用就是保存MAC地址,其中与ARP处理相关的内容包括:

• sdl_len 长度,如果为0,表示mac信息无效,否则就是有效.这点很重要

• sdl_data 如果有效,保存有mac信息.

llinfo_arp

它就是arp控制结构,整个系统中的llinfo_arp通过一个双向链表连接起来,链表头就是

全局变量llinfo_arp.(C语言中,总是喜欢将全局变量定义成结构体的名字).其中现在我们关

心的内容包括

• la_rt 指向相关的rtentry,关于rtentry,后面马上就要讲到了.