vxworks 对于arp的处理.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
vxworks 对于arp的处理

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(mib2Tbl.ifType, 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,后面马上就要讲到了. la_hold 持有的数据,在arp处理中会使用到,现在只知道它是要通过接口发送的数据包; la_asked 计数,用于统计在接收到arp回应前,发出了多少arp请求. rtentry 路由表项,每一条路由都由一个rtentry表示,与arp相关的内容包括 rt_ifp 与路由相关联的接口; rt_ifa 与路由相关的接口地址; rt_genmask 用于clone路由时使用; rt_llinfo 指向arp控制结构 rt_gateway 表示下一跳信息,可能保存mac地址. rt_expire arp超时处理使用,如果为0,表示永久有效(用于静态配置的mac). route route数据结构主要用于路由处理,它包括两个成员: ro_rt 路由引用的rtentry ro_dst 目的地址 数据的发送过程 ip_output ip协议栈发送数据总是以 int ip_output(m0, opt, ro, flags, imo) struct mbuf *m0; struct mbuf *opt; struct route *ro; int flags; struct ip_moptions *imo; 函数调用开发的,对于其中一些特殊情况的处理我们就不会加以描述,我们只对普通情况说明.m0表示要发送的数据,而ro就是发送的路由.ip_output在进行了一大堆的事情之后,就会调用 (*ifp-if_output)(ifp, m, ? ?(struct sockaddr *)dst, ro-ro_rt); 发送数据,其中ifp就是根据路由或者什么的,找到的要outgoing接口.前面我们说过,ipAttach时,就已经指定了if_output为ipOutput函数: int ipOutput ?? ?( ?? ?register struct ifnet *ifp, ?? ?struct mbuf *m0, ?? ?struct sockaddr *dst, ?? ?struct rtentry *rt0 ?? ?) 上面的几个参数比较明显 ifp为发送数据要使用的接口 m0是要发送的数据; dst是目的地址; rt0是使用的路由; 在ipOutput中与arp相关的最重要的一环,就是下面的switch-case语句: switch (dst-sa_family) ?? ? ? ?{ ?? ? ? ?case AF_INET: ?? ? ? ? ? ?if (ifp-if_resolve != NULL) ?? ? ?

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档