一种组播数据流转发的优化方法技术

技术编号:30318060 阅读:24 留言:0更新日期:2021-10-09 23:21
本发明专利技术公开了一种linux下组播数据流转发的优化方法:在linux kernel接收数据包的处理函数__nertif_receive_skb_core中注册处理组播数据流的函数handle_multicast_frame_hook;在igmp proxy向linux kernel中添加组播路由转发项时,igmp proxy把组播组和出接口的对应绑定关系通过proc文件发送到linux kernel中,handle_multicast_frame_hook函数中会根据收到的组播数据流查找对应组播组的出接口,然后直接调用该出接口的发送函数ndo_start_xmit将组播数据流从该出接口发送出去。start_xmit将组播数据流从该出接口发送出去。start_xmit将组播数据流从该出接口发送出去。

【技术实现步骤摘要】
一种组播数据流转发的优化方法


[0001]本专利技术涉及组播数据流
,具体是一种组播数据流转发的优化方法。

技术介绍

[0002]当前,Linux下igmp proxy的运行依赖于linux kernel中的mroute模块,igmp proxy流程如下:
[0003]1.igmp proxy用户进程首先创建igmp raw socket(igmp原始套接字),用于接收igmp包,同时通过MRT_INIT激活Linux kernel中的mroute功能。
[0004]2.igmp proxy用户进程通过MRT_ADD_VIF在linux kernel中创建VIF虚拟网络设备,之后持续监听igmp raw socket。
[0005]3.当从igmp raw socket接收到下行接口上主机发送过来的加入组报文时,假如该主机是该组网中第一个主机,igmp proxy会创建新的组播路由表来记录该组播组,同时启用上行接口向上发送加入组报文。
[0006]4.当上行接口收到该组的数据流时,igmp proxy会添加该组的组播路由转发项,Linux kernel会根据该组播路由转发项转发组播数据流。
[0007]5.当从igmp raw socket接收到下行接口上主机发送过来的离开组报文时,假如该主机是该组网中最后一个主机,igmp proxy会将该组播路由表删除,同时删除linux kernel中的组播路由转发项,并启用上行接口向上发送离开组报文。
[0008]6.当从igmp raw socket接收到上行接口发来的通用组查询和特定组查询报文时,igmp proxy查找组播路由表,看是否有该组播组,如果该组播组存在则响应服务器的组播查询。
[0009]正常linux下igmp proxy的组播数据流的转发是在ip层通过查找相应的组播路由转发项,来确定组播数据流该从哪个接口发送出去。这样转发必定会经过netfilter各个钩子函数的过滤,以及ip层的路由选择等处理,影响转发效率。
[0010]本专利技术方法是利用在linux kernel接收数据包的处理函数__nertif_receive_skb_core中注册组播数据流的处理函数handle_multicast_frame_hook,在该函数中根据组播组和出接口的对应绑定关系,查找出组播数据流的出接口,从而直接在入口处把组播数据流从相应的出接口转发出去。这样可以简化组播数据流的处理流程,提高组播数据流的转发效率。

技术实现思路

[0011]本专利技术的目的在于提供一种组播数据流转发的优化方法,当linux kernle中存在大量需要转发的组播数据流时,能够减少linux kernel中对组播数据流的处理,从而提高组播数据流在linux kernel下的转发效率,以解决上述
技术介绍
中提出的问题。
[0012]为实现上述目的,本专利技术提供如下技术方案:
[0013]一种组播数据流转发的优化方法,具体有以下步骤:
[0014](1)首先创建并注册linux内核模块gcmulticast,该模块用于维护组播组和出接口的对应绑定关系,同时提供用于注册的组播数据流的处理函数handle_multicast_frame_hook。
[0015]在该模块中提供了相应的用于读写组播组和出接口对应的绑定关系的接口,通过proc文件系统开放给用户空间,提供给用户空间进程igmp proxy使用。
[0016](2)在linux下,当有组播数据流到来时,linux kernel会发送一个消息给igmp proxy,igmp proxy在接收到组播数据流到来消息时会通过MRT_ADD_MFC给linux kernel添加组播路由转发项。
[0017]在添加组播路由转发项的同时,通过内核模块gcmulticast提供的proc接口,把组播组和对应的出接口绑定关系添加到内核中。
[0018]当igmp proxy接收到下行接口上主机发送过来的离开组报文时,如果该主机是该组网中最后一个主机,igmp proxy会将该组播路由表删除,同时通过MRT_DEL_MFC来删除linux kernel中的组播路由转发项。在删除组播路由转发项的同时,通过内核模块gcmulticast提供的proc接口,把组播组和对应的出接口绑定关系从内核中删除。
[0019](3)在linux kernel中接收数据包的处理函数__nertif_receive_skb_core中注册处理组播数据流的函数handle_multicast_frame_hook。handle_multicast_frame_hook在linux内核模块gcmulticast中实现,该函数根据数据包的目的地址过滤组播数据包,如果不是组播数据包,则函数直接返回。
[0020]然后根据组播数据包的目的地址查找组播组和对应的出接口绑定关系,如果找到相应的出接口,则将数据包直接从该出接口中发送出去,同时不再执行后续的接收流程;如果没有查找到出接口,则函数直接返回,继续执行后续的接收流程。
[0021]与现有技术相比,本专利技术的优点是:
[0022]1.本专利技术提出的方法可以提高组播数据流在linux kernel中的转发效率。
[0023]2.在没有特殊硬件用于实现硬件转发组播数据流的情况下,在软件层面上对组播数据流的转发进行了优化,简化了linux kernel中对组播数据流的处理流程。
附图说明
[0024]图1为本专利技术的内核模块gcmulticast中维护组播组和出接口绑定关系的流程图。
[0025]图2为本专利技术的处理组播数据流的函数handle_multicast_frame_hook的处理流程图。
具体实施方式
[0026]下面结合具体实施方式对本专利的技术方案作进一步详细地说明。
[0027]目前linux下通过igmp proxy实现的组播转发,是在igmp proxy中维护组播路由表,在有组播数据流到达时,通过igmp proxy向linux kernel添加组播路由转发表项,从而使组播数据流通过linux kernel中的组播路由转发项进行转发。
[0028]一种组播数据流转发的优化方法,具体有以下步骤:
[0029]步骤1:如图1所示,首先创建内核模块gcmulticast;gcmulticast用于维护linux kernel下组播组和出接口的绑定关系,用于绑定的数据结构如下所示:
[0030]#define MAX_OUT_IF 4
[0031]#define IFNAMSIZ 16
[0032]typedef struct gcGroupBindInterface_s
[0033]{
[0034]unsigned int group;
[0035]char if_name[MAX_OUT_IF]本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种组播数据流转发的优化方法,其特征在于,有以下步骤:(1)首先在linux kernel接收数据包的处理函数__nertif_receive_skb_core中注册处理组播数据流的函数handle_multicast_frame_hook;(2)当第一次接收到组播数据流时,igmp proxy会向Linux kernel中添加组播路由转发项,同时igmp proxy会把组播组和出接口的对应绑定关系通过proc接口发送到Linux kernel中;(3)handle_multicast_frame_hook中首先检测数据包的目的地址是否为组播地址,同时排除保留的组播地址;然后根据数据包的目的ip地址,查找igmp proxy下发的组播组和出接口的对应绑定关系;如果找不到...

【专利技术属性】
技术研发人员:武斌
申请(专利权)人:芯河半导体科技无锡有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1