本文主要是总结分析,在前面两节中,我们根据linux2.6.32中实现的igmp snooping代码,分析了igmp snooping的流程。

本节在前两节的基础上分析实现igmp snooping所需要的功能


一、数据结构

     对于实现一个子层功能,最主要的就是数据结构的建立。对于igmp snooping来说,我们需要建立的数据结构之间的关系是

    1、一个组播组可以与多个桥端口关联

    2、一个桥端口可以与多个组播组关联

    3、一个桥端口只与一个桥关联

    4、对于桥端口而言,有lan侧桥端口与wan侧桥端口之分

    5、组播组数据项之间如何进行链接(可以通过链表实现等)

    6、如何通过一个桥端口,快速的查找到其所加入的所有组播组

    7、如何通过一个组播组数据项,快速的查找到加入到该组播组的所有桥端口

  

    根据上面的条件我们就可以构造相应的组播组数据结构满足上述要求。对于一个子系统,数据结构最能体现功能的好坏,所以我们的数据结构就需要尽可能的去考虑

   各种条件。


   2、功能实现

   1、对于igmp report报文的处理,对于igmp加入报文,我们就需要创建相应的组播组数据项,然后再将加入报文发送出去。

         对于已创建的组播组项,我们需要相应的过期定时器,以及发送查询定时器,用于维护组播组数据库的更新操作。

   2、对于leave报文,需要删除相应的组播组数据库项等。

   3、对于lan侧桥端口与wan侧桥端口,其接收或者发送igmp 报文的类型限制等。

   4、提供外部接口,对于二层接收到的组播流数据,判断是否需要转发到相应的一个或者多个端口

   5、提供组播snooping功能开启或者关闭的接口函数供应用层调用

   6、在/proc目录下创建子文档,用于查看目前已加入组播组的桥端口及组播组信息,以用于调试。

  7、代码实现中使用宏严格隔开igmp snooping功能,当不编译igmp snooping功能时,保证内核可以正常工作。



如果是我们自己实现igmp snooping功能的话,考虑到上述大致情形,应该是可以简单的实现igmp snooping 的功能了。在实际的实现中,对于每一个

函数我们都进行详细设计,增加判断条件等,这样最终我们自己实现的igmp snooping功能应该也是ok的。

如果依据上面的总体需求,再去阅读linux igmp snooping的实现代码,会容易很多。对于阅读linux内核代码来说,我们最主要的是理解其实现原理。

如果我们每阅读完一个子系统的功能实现流程后,都花一点时间去思考其实现原理及需求,应该对我们平常的代码设计会有很大的帮助。


GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐