前面我们已经讲到了加入一个组播组的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三项都是跟组播报文发送相关的选项,在接下来的发送组播数据报的分析中会再次提到。
阅读(2251) | 评论(0) | 转发(2) |