Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1372591
  • 博文数量: 284
  • 博客积分: 3251
  • 博客等级: 中校
  • 技术积分: 3046
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-26 17:23
文章分类

全部博文(284)

文章存档

2019年(2)

2018年(5)

2015年(19)

2014年(13)

2013年(10)

2012年(235)

分类: LINUX

2012-12-21 16:43:38

前面我们已经讲到了加入一个组播组的IP选项IP_ADD_MEMBERSHIP,关于组播的IP选项,除了这个,还有总共四个,它们分别是 IP_DROP_MEMBERSHIP,IP_MULTICAST_IF,IP_MULTICAST_TTL,IP_MULTICAST_LOOP,下面 分别一一介绍。
    IP_DROP_MEMBERSHIP表示退出一个组播组,该选项最终会调用内核函数myip_mc_leave_group。该函数首先拿到结构体 struct in_device,取走要离开的组的源过滤机制,即从in_device->mc_list中找到对应的组struct ip_mc_list,将其成员sfcount[sfmode]减一,然后从其成员sources中取走相应的过滤源。然后将 in_device->mc_list中该组所在的节点的引用计数减一,如果引用计数已经减为零了,则清struct net_device和struct in_device中该组的记录。最后,套接字结构体struct inet_sock的成员mc_list中有关该组的节点也被删除。至此,完成离开一个组播组的操作,该选项的参数是结构体struct ip_mreq,同IP_ADD_MEMBERSHIP。
    IP_MULTICAST_IF是一个用于确定提交组播报文的接口,它的参数也是struct ip_mreq,通过该参数指定发送组播报文所使用的本地IP地址和本地网络设备接口的索引号,用于发送组播数据报,这两个值确定后放在套接字的结构体 struct inet_sock的成员mc_addr和mc_index中,以备发送组播数据报时查询。
    IP_MULTICAST_TTL指定提交的组播报文的TTL,有效的TTL在0到255之间,该选项提供的参数会被赋给套接字结构体struct inet_sock的成员mc_ttl。以备发送组播数据报时查询。
    IP_MULTICAST_LOOP使组播报文环路有效或无效,如果环路有效,则在发送组播报文的时候,会给环回接口也发一份。该值存放在套接字的结构体struct inet_sock的成员mc_loop中。
    以上IP_MULTICAST_IF,IP_MULTICAST_TTL和IP_MULTICAST_LOOP三项都是跟组播报文发送相关的选项,在接下来的发送组播数据报的分析中会再次提到。
阅读(2265) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~