2.底层技术摘要.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.底层技术摘要

网络接口层数据结构 long ni_iucast; long ni_inucast; long ni_idiscard; long ni_ierrors; long ni_iunkproto; long ni_ooctets; long ni_oucast; long ni_onucast; long ni_odiscard; long ni_oerrors; long ni_oqlen; long ni_maxreasm; }; #define NI_LOCAL 0 #define NI_PRIMARY 1 extern struct netif nif[]; int ni_in(struct netif *pni, struct ep *pep, unsigned len) int netwrite(struct netif *, struct ep *, unsigned); 网络接口处理流程 netstart函数 netstart函数会调用调用一些初始函数完成模块初始化工作,如arpinit完成ARP模块的初始化,ipfinit完成IP分片模块的初始化,inithost初始主机的网络接口,hginit初始化多播表。 netstart还创建了很多进程,如slowtimer进程负责ARP、IP等模块中的定时器处理,ipproc进程负责IP数据包的处理,tcptimer进程负责TCP模块中的定时器,tcpinp进程负责TCP模块的输入处理,tcpout进程负责TCP模块的输出处理,rip进程负责RIP报文的处理。 网络接口层的多路分解ni_in函数 24:记录该以太帧来自的网络接口号信息。 ip_in函数,用于IP数据包的处理。 rarp_in函数,用于RARP数据包处理。 arp_in函数,用于ARP数据包处理。 ni_in函数 01: /* ni_in.h 文件*/ 03: #include conf.h 04: #include kernel.h 05: #include network.h 06: #include ospf.h 07: 08: int arp_in(struct netif *, struct ep *); 09: int rarp_in(struct netif *, struct ep *); 10: int ip_in(struct netif *, struct ep *); 12: /* 13: * ni_in – 网络接口输入函数 14: * struct netif *pni: 15: * struct ep *pep: 16: * unsigned len: 17: * 返回值: 18: **/ 20: int ni_in(struct netif *pni, struct ep *pep, unsigned len) 21: { 22: int rv; 24: pep-ep_ifn = pni - nif[0]; 26: pni-ni_ioctets += len; 26~34:修改网络接口的统计信息,增加接收到的字节数,根据目标地址判断单播还是非单播帧,统计相应的帧个数。 35~50:根据帧中的类型字段,进行多路分解。如果类型为EPT_ARP,交由arp_in处理;如果类型为EPT_RARP,交由rarp_in处理;如果类型为EPT_IP,交由ip_in处理;其它则丢弃处理,并统计丢弃帧个数。 ni_in函数 27: if (!blkcmp(pni-ni_hwa.ha_addr, pep-eh-ep_dst, EP_ALEN)) 28: { 29: pni-ni_iucast++; 30: } 31: else 32: { 33: pni-ni_inucast++; 34; } 35: switch (pep-ep_type) 36; { 37: case EPT_ARP: 38: rv = arp_in(pni, pep); 39: break; 40: case EPT_RARP: 41; rv = rarp_in(pni, pep); 42: break; 43: case EPT_IP: 44: rv = ip_in(pni, pep); 45: break; 46: default: 47: pni-ni_iunkproto++; 48:

您可能关注的文档

文档评论(0)

ee88870 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档