下载此文档

组播编程.docx


文档分类:IT计算机 | 页数:约18页 举报非法文档有奖
1/18
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/18 下载此文档
文档列表 文档介绍
2010-03-26 19:24560人阅读评论(0)收藏举报
初识组播(1)
_device标识一个网络设备接口,该结构体有一个成员指针ip_ptr,它是留给IPv4协议用于填充协议相关的一些数据的。IPv4协议的模块将其指向一个结构体struct in_device,该结构体含有很多协议相关的数据,比如配置在这个网络设备接口上的所有的IPv4的地址,该网络设备接口接受的组播地址等,下面是其完整的定义:
struct in_device
{
_device *dev;
atomic_t t;
int dead;
struct in_ifaddr *ifa_list; //IP地址列表
rwlock_t mc_list_lock;
struct ip_mc_list *mc_list; //IP组播过滤列表。
spinlock_t mc_tomb_lock; //下面都是组播相关数据。
struct ip_mc_list *mc_tomb;
unsigned long mr_v1_seen;
unsigned long mr_v2_seen;
unsigned long mr_maxdelay;
unsigned char mr_qrv;
unsigned char mr_gq_running;
unsigned char mr_ifc_count;
struct timer_list mr_gq_timer; /* general query timer */
struct timer_list mr_ifc_timer; /* interface change timer */
struct neigh_parms *arp_parms;
struct f;
struct rcu_head rcu_head;
};
我们暂时还无法完全理解这个结构体,目前只需关注的是mc_list成员,这是关于组播的一个最为关键的数据结构。mc_list是一个链表,链表的一个结点代表一个组播地址(也就是一个多播组的组号),代表这个网络设备接口已经加入了这个组播组,需要接收来自这个组的数据报。下面是该节点的结构体定义:
struct ip_mc_list
{
struct in_device *interface;
unsigned long multiaddr;
struct ip_sf_list *sources;
struct ip_sf_list *tomb;
unsigned int sfmode;
unsigned long sfcount[2];
struct ip_mc_list *next;
struct timer_list timer;
int users;
atomic_t t;
spinlock_t lock;
char tm_running;
char reporter;
char unsolicit_count;
char loaded;
unsigned char gsquery;
unsigned char crcount;
};
同样,我们把其中的大部分成员留待以后理解。multiaddr就是组播地址,sources和tomb是关于组播源地址的一个列表,sfmode和sfcount是过滤参数,也就是说,该网络设备接口虽然加入了某个组播组,但对某些主机向该组发的数据报不接收,或者只接收某个主机发向该组的数据报,这就要对组播源进行过滤。
关于D类地址的常识,这里不再介绍,可参考相关书籍。
,它标识子网中的所有主机,同一个子网内具有组播功能的主机都属于这个组。模块在初始化时,DEV_UP)的消息后,调用myip_mc_up启动组播功能。
启动组播功能的第一件事便是把本机加入到这个特殊的组播组IGMP_ALL_HOSTS(),调用myip_mc_inc_group函数完成加入动作。模块是作为系统中的第二个IPv4模块,在系统正常运行后被加载的,所以,网络设备接口早已完成了加入该组播组的操作。模块的加入动作是只是简单地将成员users加1,然后调用myip_mc_add_src函数加入组播源过滤。
IGMP_ALL_HOSTS组的sources为NULL,sfmode为MCAST_EXCLUDE(过滤掉sources中列出的所有源),所以结果是不过滤任何组播源。myip_mc_add_src函数中,将sfcount[MCAST_EXCLUDE]的值加1,表示新增一个过滤机制。
初识组播(2)
上一篇我们讲到,是系统中第二个加载的IPv4模块,所以网络设

组播编程 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数18
  • 收藏数0 收藏
  • 顶次数0
  • 上传人mh900965
  • 文件大小46 KB
  • 时间2017-11-12
最近更新