IMGP proxy代码分析要点

代码路径:https://github.com/haibbo/improxy

代码整体上比较清晰,量较少,同时也不具有太大的难度。不过要求阅读者对IGMP协议有一定程度的了解(要了解IGMP协议见我前一篇文章)以及linux内核对多播的接口(可参考mrouted的实现)。因此只总结了以下一些要点:

1、初始化的时候要给每个接口上个定时器,用来查询接口下面主机多播加入情况 地址是0xe0000001U
2、收到报文后要区分接收的来源,如果是上行端口,则需要进行相应处理。如下面这段代码

 1  if (ip->protocol == 0 && p_if->type == INTERFACE_UPSTREAM) {
 2 
 3         if_set ttls;
 4 
 5         bzero(&ttls, sizeof(ttls));
 6 
 7         //获取生效的接口
 8         if(imp_get_mfcc_ttls(&ttls, MAXVIFS, &pia, &pig) != 0){
 9 
10             IMP_LOG_DEBUG("add MFC:src -- %s group -- %s\n\n", imp_pi_ntoa(&pia), imp_pi_ntoa(&pig));
11             //生成对应的策略
12             imp_membership_db_mfc_add(&pig, &pia, &ttls);
13         }
14         return;
15     } else if (ip->protocol == 0) {
16 
17         return;
18     }

3、收到相应的报告后,生成的组策略需要起定时器进行处理,做超时处理用

4、因为兼容v3,整个变得较复杂(引入了include和exclude以及状态转换),会让其生效一段时间(其实也就是在考察下面是否还有对该组的报告上来),超时则将其删除了

5、其实,没有策略就是不要转发。。。

6、要深入了解,还是看代码,里面还是有些需要仔细看的,很容易漏了。比如定时器就有好几种,还有个times的东西。

 

思考,如果默认做成全部转发(没有学习到策略)怎么处理?

1、刚开始没有策略,全部转发

2、学习到,生成策略,进行转发

3、超时,会全部删除。此时,策略又重新为空,该咋么处理?扫描是否还有对应的组?或者由路由自己处理得了,即找不到策略,全部转发。

 

ps:其实v3的支持很鸡肋,都没多少人使用。

posted on 2013-05-12 20:47  yongyongmi  阅读(411)  评论(0编辑  收藏  举报