6IGMP解析.pptVIP

  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文档。上传文档
查看更多
6IGMP解析

* Union 联合数据类型 * Panic()函数是当系统发现无法继续运行下去的故障时将调用它,会导致程序中止,然后由系统显示错误号。 * * Union 联合数据类型 * * * Union 联合数据类型 * * * 23~24:令pip指向封装着传来的IGMP报文的IP数据包,pig指向传来的IGMP报文。 26:计算IGMP报文长度。 17~21:定义了六个局部变量,pip指向封装着传来的IGMP报文的IP数据包,pig指向传来的IGMP报文,phg指向相关的主机群表结构,ifnum被初始化为传入IGMP报文的接口号,i在该过程中似乎没有用到,len表示IGMP报文长度。 01:/* igmp_in.c 文件--------------------------------*/ 02: 03:#include conf.h 04:#include kernel.h 05:#include network.h 06:#include igmp.h 07: 08:/*------------------------------------------------ 09: * igmp_in: 处理传来的IGMP报文 10: * struct netif *pni:传入IGMP报文的网络接口结构 11: * struct ep *pep:封装该IGMP报文的以太网帧 12: * 返回值:成功返回OK,失败返回SYSERR 13: *------------------------------------------------ 14: */ 15:int igmp_in(struct netif *pni, struct ep *pep) 16:{ 17: struct ip *pip; 18: struct igmp *pig; 19: struct hg *phg; 20: int ifnum = pni - nif[0]; 21: int i, len; 22: 23: pip = (struct ip *)pep-ep_data; 24: pig = (struct igmp *) pip-ip_data; 26: len = pip-ip_len - IP_HLEN(pip); IGMP输入处理函数(2-1) 49~50:至此,对收到的IGMP数据包做出了相应的处理,丢弃该数据包并返回。 37~45:如果传来的报文是成员关系报告,这说明本地网络的其他主机已经对之前收到的查询报文回复了成员关系报告,此时我们需要取消相关的定时事件。我们首先获取信号量HostGroup.hi_mutex,保证随后的操作是一个原子操作,然后在主网络接口的主机群表中查找对应的表项结构,清除相应的定时事件并进行合适的状态转移,随后释放信号量跳出临界代码,如果查找失败则直接释放信号量。最后跳出分支判断 34~36:如果传来的报文是成员关系查询报文,则调用settimers()函数为主机群表中的表项设定定时事件并跳出分之判断 27~31:如果报文长度、版本或是检验和有错,丢弃该报文并返回SYSERR。 32:根据IGMP报文首部类型字段执行对应的操作。 27: if (len != IG_HLEN || IG_VER(pig) != IG_VERSION || cksum((WORD *)pig, len1)) 28: { 29: freebuf(pep); 30: return SYSERR; 31: } 32: switch(IG_TYP(pig)) 33: { 34: case IGT_HQUERY: 35: igmp_settimers(NI_PRIMARY); 36: break; 37: case IGT_HREPORT: 38: wait(HostGroup.hi_mutex); 39: if ((phg = hglookup(NI_PRIMARY, pig-ig_gaddr)) phg-hg_state == HGS_DELAYING) 40: { 41: tmclear(HostGroup.hi_uport, phg); 42: phg-hg_state = HGS_IDLE; 43: } 44: signal(HostGroup.hi_mutex); 45: br

文档评论(0)

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

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

1亿VIP精品文档

相关文档