一种可控组播CDR消息定时上报的实现方法
技术领域
本发明涉及组播网络技术,特别是涉及一种可控组播呼叫信息记录(Call Detail Record,CDR)消息定时上报的实现方法。
背景技术
可控组播是中国电信的规定一种用于以太网无源光网络(Ethernet Passive OpticalNetwork,EPON)系统的组播模式,有别于传统的IGMP PROXY模式。可控组播是组播的辅助功能,通过光线路终端(Optical Line Terminal,OLT)维护一张组播权限表,实现对用户组播权限的管理。该组播权限表包含组播组地址、组播VLAN、组播组的用户权限等。对于加入的组播组,查找该组播权限表,只有表项中允许观看的用户才可以观看到节目。
可控组播CDR消息,类似于日志功能,主要记录用户加入某个组播组的消息,以及用户离开某个组播组的消息。一个CDR消息包含IGMP请求类型、请求时间、请求频道权限、用户标识、申请成功or失败和离开方式等。对用户每次的加入和离开都会有CDR消息记录。因此,可控组播CDR消息有助于系统管理员对故障的排除,以及信息的收集。由于CDR消息不断增多,需要将信息上传到服务器,以便系统管理员查询,从而出现了CDR上报的问题。CDR上报分为三种:定时上报、记录到一定数量上报和强制上报。
电信标准中规定对于短时间内的加入和离开报文是不做记录的。然而现有技术中,基于定时器上报一般都是等待定时器超时,然后上报记录的CDR消息。这就很容易导致CDR消息出现冗余的问题。由于定时器的上报间隔是一定的,如果设置的时间间隔是10s,则10s以内将认为是短时间。当一个加入报文的CDR消息被记录之后,发生定时器超时,上报了CDR信息;如果该加入频道的离开报文在10s内到达,那么这个加入和离开的CDR消息是不应该被上报的。但是由于之前已经将加入报文的CDR消息上报,使得上报的CDR消息中包含很多冗余的信息。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种可控组播CDR消息定时上报的实现方法,其通过延时的机制来实现CDR信息的上报,由于定时器超时时间和报文加入时间的不确定性,在上报的CDR信息中,可以完全过滤掉短时间内的加入和离开报文,不会有漏报的情况发生,从而避免产生冗余的CDR信息。
为实现上述目的及其他相关目的,本发明提供一种可控组播CDR消息定时上报的实现方法,其中针对每个CDR消息建立一个结构、建立一个所述结构相对应的首尾相连的双向链表、一个数组CDRTimer以及两个全局变量;所述结构包含消息标识,所述消息标识包含未上报、已上报和忽略三个值;所述两个全局变量为上报时间间隔和短时间的鉴定值;所述可控组播CDR消息定时上报的实现方法至少包括以下步骤:步骤S1:向CDR链表写CDR消息;当一个加入报文的CDR消息被记录后,又在所述短时间的鉴定值内收到了离开报文,设置加入报文的CDR消息为忽略,不进行上报,对于该离开报文也不进行记录;步骤S2:对于记录的CDR消息,当定时器超时上报时,读取CDR消息生成时间,并求出CDR消息生成时间与当前时间的差值;当差值大于所述短时间的鉴定值时,上报该CDR消息;否则等待下一轮定时器超时再进行上报;其中所述超时是指超过所述上报时间间隔。
根据上述的可控组播CDR消息定时上报的实现方法,其中:所述步骤S1又包括以下步骤:
接收IGMP报文,判断报文类型;
若是加入报文,则判断该加入报文的CDR消息是否存在于数组CDRTimer中,若是,则流程结束;若否,则将该加入报文的CDR消息加入数组CDRTimer中,再将该加入报文的CDR消息加入到CDR链表中;
若是离开报文,则判断该离开报文的CDR消息相对应的加入报文的CDR消息是否在数组CDRTimer中,若否,则流程结束;若是,则判断加入报文和离开报文的时间间隔是否大于所述短时间的鉴定值,如果大于,则将该离开报文的CDR消息加入到CDR链表中,并标识为未上报,再删除数组CDRTimer中对应的加入报文的CDR消息;如果小于,则将该离开报文的CDR消息对应的CDR链表中的加入报文的CDR消息的消息标识设置为忽略,再删除数组CDRTimer中对应的加入报文的CDR消息。
根据上述的可控组播CDR消息定时上报的实现方法,其中:所述步骤S2又包括以下步骤:
步骤S21:判断CDR链表是否遍历完;如果是,则流程结束;如果否,转入步骤S22;
步骤S22:获取系统的当前时间;
步骤23:判断CDR消息是否未上报;如果否,转入步骤S21;如果是,转入步骤S24;
步骤S24:判断CDR消息生成时间和当前时间的差值是否大于所述短时间的鉴定值;如果否,转入步骤S21;如果是,转入步骤S25;
步骤S25:修改CDR消息的消息标识为已上报,并上报该CDR消息。
根据上述的可控组播CDR消息定时上报的实现方法,其中:所述数组CDRTimer用于临时存储CDR消息,仅用于记录第一次加入和离开的CDR消息。
根据上述的可控组播CDR消息定时上报的实现方法,其中:所述上报时间间隔和短时间的鉴定值由用户输入。
根据上述的可控组播CDR消息定时上报的实现方法,其中:所述CDR消息的结构包含IGMP请求类型、请求时间、请求频道权限、用户标识、申请成功或失败、离开方式和消息标识。
根据上述的可控组播CDR消息定时上报的实现方法,其中:所述步骤S2通过定时器上报处理函数完成。
如上所述,本发明的可控组播CDR消息定时上报的实现方法,具有以下有益效果:
(1)通过基于定时器中变量信息,进行延时上报机制,能够更好的控制CDR消息的上报流程;
(2)通过基于定时器中变量信息,进行延时上报机制,能够完全过滤掉短时间内的加入和离开报文,不会有漏报的情况发生以及冗余信息的产生;
(3)提高了CDR消息的可读性,除了异常情况导致的CDR消息不全外,其他CDR消息都是成对出现的;
(4)实现比较简单。
附图说明
图1显示为本发明的可控组播CDR消息定时上报的实现方法的流程图;
图2显示为本发明中向CDR链表写CDR消息的流程图;
图3显示为本发明中CDR消息的上报处理的流程图。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。
需要说明的是,本实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
首先介绍一下本发明中CDR消息的数据结构和全局变量。在本发明中,需要针对每个CDR消息建立一个结构、建立一个与上述结构相对应的首尾相连的双向链表、一个数组CDRTimer以及两个全局变量。具体如下:
(1)针对每个CDR消息都要建立一个结构。
该结构包含Internet组管理协议(Internet Group Management Protocol,IGMP)请求类型、请求时间、请求频道权限、用户标识、申请成功or失败、离开方式和消息标识等。需要特别注意的是消息标识包含未上报、已上报和忽略三个值。
(2)根据CDR消息结构体建立一个首尾相连的双向链表。
该首尾相连的双向链表用于存储CDR信息。其中,若CDR消息没有达到链表最大值,则添加该CDR消息;若CDR消息达到了链表最大值,则新加入的CDR信息将覆盖之前的CDR消息。这是因为随着设备的运行,CDR消息越来越多,并且已上报和忽略的CDR消息已经没有用。当链表的个数大于最大数时,可以通过链表的前插入法,将新加入的CDR信息覆盖旧CDR信息。
(3)创建一个数组CDRTimer。
该数组CDRTimer用于临时存储CDR消息,仅用于记录第一次加入和离开的CDR消息,以避免重复加入而导致的CDR消息的多次冗余记录。
(4)确定CDR消息的两个全局变量,即上报时间间隔sendIntelTime和短时间的鉴定值ingoreTime。
这两个值可以由用户输入。加入报文和离开报文的间隔若大于短时间的鉴定值,则上报CDR消息;若小于短时间的鉴定值,则不上报CDR消息。
在构建上述CDR消息的数据结构和全局变量的基础上,参照图1,本发明的可控组播CDR消息定时上报的实现方法主要采用定时延时上报机制,具体包括:
步骤S1:向CDR链表写CDR消息,当一个加入报文的CDR消息被记录后,又在短时间内收到了离开报文,设置加入报文的CDR消息为忽略,不进行上报,对于该离开报文也不进行记录。
参照图2,向CDR链表写CDR消息的具体流程如下:
接收IGMP报文,判断报文类型;
若是加入报文,则判断该加入报文的CDR消息是否存在于数组CDRTimer中,若是,则流程结束;若否,则将该加入报文的CDR消息加入数组CDRTimer中,再将该加入报文的CDR消息加入到CDR链表中;
若是离开报文,则判断该离开报文的CDR消息相对应的加入报文的CDR消息是否在数组CDRTimer中,若否,则流程结束;若是,则判断加入报文和离开报文的时间间隔是否大于短时间的鉴定值ignoreTime,如果大于,则将该离开报文的CDR消息加入到CDR链表中,并标识为未上报,再删除数组CDRTimer中对应的加入报文的CDR消息;如果小于,则将该离开报文的CDR消息对应的CDR链表中的加入报文的CDR消息的消息标识设置为忽略,再删除数组CDRTimer中对应的加入报文的CDR消息。
步骤S2:对于记录的CDR消息,当定时器超时上报时,读取CDR消息生成时间,并求出CDR消息生成时间与当前时间的差值;当差值大于短时间的鉴定值时,上报该CDR消息;否则等待下一轮定时器超时再进行上报。其中,超时是指超出上报时间间隔。
本发明的可控组播CDR消息定时上报的实现方法通过定时器上报处理函数进行CDR消息的上报处理。定时器上报处理函数主要是遍历CDR链表,对于符合条件的CDR消息进行上报,不符合条件的CDR消息不进行上报。
参照图3,CDR消息的上报处理包括如下步骤:
步骤S21:判断CDR链表是否遍历完;如果是,则流程结束;如果否,转入步骤S22;
步骤S22:获取系统的当前时间;
步骤S23:判断CDR消息是否未上报;如果否,转入步骤S21;如果是,转入步骤S24;
步骤S24:判断CDR消息生成时间和当前时间的差值是否大于短时间的鉴定值ignoreTime;如果否,则转入步骤S21;如果是,转入步骤S25;
步骤S25:修改CDR消息的标识为已上报,并上报该CDR消息。
综上所述,本发明的可控组播CDR消息定时上报的实现方法通过基于定时器中变量信息进行延时上报机制,能够更好的控制CDR消息的上报流程,并完全过滤掉短时间内的加入和离开报文,不会有漏报的情况发生以及冗余信息的产生,且实现比较简单。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。