一种ONU的基于VLAN的IGMPSnooping实现方法

文档序号:8005106阅读:1282来源:国知局
一种ONU的基于VLAN的IGMP Snooping实现方法
【专利摘要】本发明提供了一种ONU的基于IGMP?Snooping实现方法,内容主要集中在linux内核的二层桥处理的地方,在bridgenetfilter的钩子点NF_BR_PRE_ROUTING的钩子函数br_handle_frame_finish中再挂一个钩子函数igmp_snooping_handler,并实现一个igmp_snooping.ko的内核模块,当igmp_snooping.ko内核模块初始化时将igmp_snooping的实际处理函数br_handle_igmp_snooping(structsk_buff*skb)赋值给igmp_snooping_handler。
【专利说明】—种ONU的基于VLAN的IGMP Snooping实现方法
【技术领域】
[0001]本发明涉及网络通信终端领域,特别涉及一种ONU的基于VLAN的IGMP Snooping实现方法。
【背景技术】
[0002]IGMP Snooping 是 Internet Group Management Protocol Snooping (互联网组管理协议窥探)的简称,它是运行在二层设备上的组播约束机制,用于管理和控制组播组。
[0003]运行IGMP Snooping的二层设备通过对收到的IGMP报文进行分析,为端口和MAC组播地址建立起映射关系,并根据这样的映射关系转发组播数据。当二层设备没有运行IGMP Snooping时,组播数据在二层被广播;当二层设备运行了 IGMP Snooping后,已知组播组的组播数据不会在二层被广播,而在二层被组播给指定的接收者。
[0004]许多网络设备都已经实现了 IGMP Snooping,尽管实现方式不尽相同,但是原理都是相通的,就是在网络的二层通过对收到的IGMP控制报文进行分析,为端口和MAC组播地址建立起映射关系,并根据这样的映射关系转发组播数据。若网络设备不支持IGMPSnooping或者没有运行IGMP Snooping时,组播数据在二层会被广播到每个端口 ;若网络设备支持IGMP Snooping而且运行了 IGMP Snooping后,组播数据不会在二层被广播,而在二层被组播给指定的接收者,若没有接收者点播组播服务,则不转发组播数据。IGMPSnooping使用户只在需要时才转发组播数据,这样不仅能够达到抑制二层组播泛滥的作用,同时在降低网络负荷方面也起到一定的作用,特别是在视频服务越来越丰富的今天。
[0005]IGMP典型组网如图1的光纤到户拓扑图,ONU放置在用户家中,HomePC点播视频服务后,IGMP Server的组播数据流带上组播VLAN后发送到0NU,开启IGMP Snooping的ONU将组播数据的VLAN剥除后转发给HomePC,Laptop不会收到组播数据,从而不影响其上网等业务。
[0006]还有一种情况,如图2的光纤到楼拓扑图,ONU放置在楼道中,下面接多台交换机,多台交换机都配置了 VLAN,且VLAN分别不同,这就要求ONU配置成VLAN透传模式,将IGMPServer带组播VLAN的数据流依然带上原有VLAN转发给下面的交换机。然而,很多ONU的IGMP Snooping不能处理带VLAN的组播数据流,原因是普通的IGMP Snooping处理的都是不带VLAN的报文,没有考虑到图2的VLAN透传的应用场景。所以当成普通的二层数据广播到各个SWICH,IGMP Snooping功能失效。

【发明内容】

[0007]为了克服目前如图2的光纤到楼拓扑图中,很多ONU的IGMP Snooping不能处理带VLAN的组播数据流,所以当成普通的二层数据广播到各个SWICH,IGMP Snooping功能失效的不足。提供一种可以实现带VLAN的IGMP Snooping方法。
[0008]本发明的技术方案是:一种ONU的基于VLAN的IGMP Snooping实现方法,该方法中,主要由Iinux内核的二层桥实现基于VLAN的IGMP Snooping,在bridge netfilter的钩子点NF_BR_PRE_ROUTING实现,内核收到组播报文以后,进入到钩子点NF_BR_PRE_ROUTING,包括以下步骤:
步骤1、报文进入到钩子点NF_BR_PRE_ROUTING时,确定是否为IGMP控制报文,如果是IGMP控制报文,转向步骤3,否则,转向步骤2 ;
步骤2、从bridge的mc_list组播转发表中查找报文对应的组播转发条目,若能找到则根据找到的组播转发条目的目的端口转发所述的IGMP数据报文,结束,否则进入步骤5处理;
步骤3、在启用带VLAN的IGMP Snooping功能的情况下,将IGMP控制报文的VLAN的标签去除,并记录下VLAN ID和VLAN优先级;
步骤 4、若 IGMP 控制报文是 IGMPV2_H0ST_MEMBERSHIP_REP0RT 或 IGMP_H0ST_MEMBERSHIP_REPORT时;先判断该报文对应的转发条目是否存在,存在则更新,不存在则添加对应的转发条目;
若IGMP控制报文为IGMPV3_H0ST_MEMBERSHIP_REP0RT时,对IGMPv3进行处理,更新或添加组播转发条目;
若IGMP控制报文是IGMP_HOST_LEAVE_MESSAGE ;删除报文对应的组播转发条目;
步骤5、所有的IGMP控制报文进入bridge 二层转发处理,bridge根据二层转发表条目来转发该报文,若二层转发条目不存在,则将报文转送到该bridge的每个端口。
[0009]本发明中,通过删除VLAN标签,记录VLAN信息,最后还原VLAN标签来解决目前普通的IGMP Snooping处理的都是不带VLAN的报文,不能实现IGMP Snooping的不足。
[0010]下面结合具体实施例对本发明作较为详细的描述。
【专利附图】

【附图说明】
[0011]图1是光纤到户拓扑图(I)。
[0012]图2是光纤到户拓扑图(2)。
[0013]图3是本发明实施例流程图。
【具体实施方式】
[0014]实施例1,本实施例提供了一种类似于如图2所示的光纤到户拓扑结构的家庭网络中VLAN的IGMP Snooping实现方法。以下对本发明方法进行详细说明。
[0015]本实施例中,需要在内核netfilter中的钩子点NF_BR_PRE_R0UTING的钩子函数 br_handle_frame_finish 中再挂一个钩子函数 igmp_snooping_handler。另外,还需要实现一个igmp_snooping的内核模块,当igmp_snooping内核模块初始化时将igmp_snooping 的实际处理函数 br_handle_igmp_snooping (struct sk_buff *skb)赋值给igmp_snooping_handler。
[0016]如图3所示,是带VLAN的IGMP Snooping实现的处理流程图,包括如下步骤: 本实施例步骤Ml至M8是判断接收到的报文是IGMP控制报文,只有是IGMP控制报文
才需要进行实现IGMP Snooping处理。
[0017]步骤Ml:本步骤为内核在netif_receive_skb收到报文。
[0018]步骤M2:本步骤为报文进入到内核钩子点BR_PRE_R0UTING的br_handle_frame_finish 函数。
[0019]步骤M3:本步骤判断接收到的报文是否为组播报文,如果是组播报文则进入步骤M4处理,否则进入步骤M20处理。
[0020]步骤M4:本步骤判断钩子函数igmp_snooping_handler是否为空,不为空则进入步骤M5处理,为空则进入步骤M20处理。
[0021]步骤M5:本步骤主要判断报文是否为IP报文。如果不是IP报文,则进入步骤M6处理;否则进入M7处理。
[0022]步骤M6:本步骤判断是否开启带VLAN的IGMP Snooping功能且报文为VLAN报文。若开启带VLAN的IGMP Snooping功能且报文为VLAN报文则进入步骤M7处理,否则进入步骤M20处理。
[0023]步骤M7:本步骤判断报文是否为IGMP控制报文,若不是IGMP控制报文则进入步骤M8处理,如果是IGMP控制报文进入步骤MlO处理。
[0024]步骤M8:本步骤从bridge的mc_list组播转发表中查找报文对应的组播转发条目,若能找到则进入步骤M9处理,否则进入步骤M20处理。
[0025]步骤M9:本步骤将根据找到的组播转发条目的目的端口转发IGMP数据报文。
[0026]步骤MlO:本步骤判断是否开启带VLAN的IGMP Snooping功能且报文为VLAN报文。若开启带VLAN的IGMP Snooping功能且报文为VLAN报文则进入步骤Mll处理,否则进入步骤Ml2处理,
步骤Mll:本步骤将报文的VLAN Tag去除,并记录下VLAN ID和VLAN Priority,然后进入步骤Ml2处理。
[0027]步骤Ml2:本步骤判断IGMP报文类型是否为IGMPV2_H0ST_MEMBERSHIP_REP0RT或IGMP_H0ST_MEMBERSHIP_REP0RT。若是则进入步骤M13处理,否则进入步骤M14处理。
[0028]步骤M13:本步骤先判断该报文对应的转发条目是否存在,存在则更新,不存在则添加对应的转发条目,然后进入步骤M20处理。
[0029]步骤M14:本步骤判断IGMP报文类型是否为IGMPV3_H0ST_MEMBERSHIP_REP0RT,若是则进入步骤M15处理,否则进入步骤M16处理。
[0030]步骤M15:本步骤对IGMPv3进行处理,最终更新或添加组播转发条目,然后进入步骤M20处理。
[0031]步骤M16:本步骤判断IGMP报文类型是否为IGMP_H0ST_LEAVE_MESSAGE,若是则进入步骤M17处理,否则进入步骤M18处理。
[0032]步骤M17:本步骤删除报文对应的组播转发条目,然后进入步骤M20处理。
[0033]上面主要描述对四种IGMP控制报文的处理过程,IGMPV2_H0ST_MEMBERSHIP_REPORT 或 IGMP_H0ST_MEMBERSHIP_REP0RT 的处理过程如步骤 13。 IGMPV3_H0ST_MEMBERSHIP_REP0RT的处理过程如步骤15。IGMP_H0ST_LEAVE_MESSAGE的处理过程如步骤17。
[0034]步骤M18:本步骤判断该报文是否记录过VLAN ID和VLAN Priority,若记录过则进入步骤M19处理,否则进入步骤M20处理。
[0035]步骤M19:本步骤根据该报文记录过的VLAN ID和VLAN Priority添加VLAN Tag,然后进入步骤M20处理。[0036]步骤M20 ;本步骤报文进入bridge 二层转发处理,bridge根据二层转发表条目来转发该报文,若二层转发条目不存在,则将报文flood到该bridge的每个端口。
[0037]以上所述的具体实施例,仅用于例释本发明的特点及功效,而非用于限定本发明的可实施范畴,在未脱离本发明上述的精神与技术范围的情况下,任何运用本发明所揭示内容而完成的等效改变及修饰,均仍应被上述的权利要求所涵盖。
【权利要求】
1.一种ONU的基于VLAN的IGMP Snooping实现方法,该方法中,主要由Iinux内核的二层桥实现基于 VLAN 的 IGMP Snooping,在 bridge netfilter 的钩子点 NF_BR_PRE_ROUTING实现,其特征在于:内核收到组播报文以后,进入到钩子点NF_BR_PRE_ROUTING,包括以下步骤: 步骤1、报文进入到钩子点NF_BR_PRE_ROUTING时,确定是否为IGMP控制报文,如果是IGMP控制报文,转向步骤3,否则,转向步骤2 ; 步骤2、从bridge的mc_list组播转发表中查找报文对应的组播转发条目,若能找到则根据找到的组播转发条目的目的端口转发所述的IGMP数据报文,结束,否则进入步骤5处理; 步骤3、在启用带VLAN的IGMP Snooping功能的情况下,将IGMP控制报文的VLAN的标签去除,并记录下VLAN ID和VLAN优先级; 步骤 4、若 IGMP 控制报文是 IGMPV2_H0ST_MEMBERSHIP_REP0RT 或 IGMP_H0ST_MEMBERSHIP_REPORT时;先判断该报文对应的转发条目是否存在,存在则更新,不存在则添加对应的转发条目; 若IGMP控制报文为IGMPV3_H0ST_MEMBERSHIP_REP0RT时,对IGMPv3进行处理,更新或添加组播转发条目; 若IGMP控制报文是IGMP_HOST_LEAVE_MESSAGE ;删除报文对应的组播转发条目; 步骤5、所有的IGMP控制报文进入bridge 二层转发处理,bridge根据二层转发表条目来转发该报文,若二层转发条目不存在,则将报文转送到该bridge的每个端口。
【文档编号】H04L29/06GK103457861SQ201310371678
【公开日】2013年12月18日 申请日期:2013年8月23日 优先权日:2013年8月23日
【发明者】伍国祥, 郭小东, 黄铮, 张炜 申请人:深圳市共进电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1