首页> 中国专利> 一种电信管理网上下层网管数据比较方法

一种电信管理网上下层网管数据比较方法

摘要

本发明公开了一种电信管理网上下层网管数据比较方法,包括以下步骤:A.创建结果报文及容器对象;结果报文至少包含被比较报文节点值的对比情况,以及每个节点在报文中的位置信息;容器用来缓存所述被比较报文节点的信息;B.将两个被比较报文中根节点信息添入所述容器内的元素中;C.循环取出容器中的元素进行分析处理,将处理结果返回所述结果报文,直到所述容器中不存在任何元素时为止。该方法能够将代码与报文之间的耦合性减至最小,并可以得到清晰的比较结果,维护简单并具有良好的通用性。

著录项

  • 公开/公告号CN1929388A

    专利类型发明专利

  • 公开/公告日2007-03-14

    原文格式PDF

  • 申请/专利权人 中兴通讯股份有限公司;

    申请/专利号CN200510037086.6

  • 发明设计人 陈明;马润宏;

    申请日2005-09-09

  • 分类号H04L12/24(20060101);

  • 代理机构

  • 代理人

  • 地址 518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦A座6层

  • 入库时间 2023-12-17 18:25:15

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-08-28

    未缴年费专利权终止 IPC(主分类):H04L12/24 授权公告日:20081112 终止日期:20190909 申请日:20050909

    专利权的终止

  • 2008-11-12

    授权

    授权

  • 2007-05-09

    实质审查的生效

    实质审查的生效

  • 2007-03-14

    公开

    公开

说明书

技术领域

本发明涉及通信技术领域,尤其涉及一种针对电信管理网(TMN)中的分层网管系统之间数据一致性处理中的数据比较方法。

背景技术

国际电信同盟ITU-T M.3010将电信管理层模型划分为网元层(NEL)、网元管理层(EML)、网络管理层(NML)、业务管理层(SML)、事务管理层(BML)。针对不同层次存在不同的网络管理系统,比如:网元层网管系统(EMS)、网络层网管系统(NMS)、业务层网管系统(SMS)等等。它们各有侧重,互相协调共同构成整个电信管理网络。因为采用分层管理,所以关于某个实体的信息常常同时在多个层次系统存在。保持这些信息之间紧密的一致性是一项重要任务。要判断某个信息在不同层次网管系统中的状态是否一致性,必须先通过某种数据格式从各层提取信息,对其进行比较得出一致性状态报告。

目前在电信管理网分层管理模型中,各层次之间数据通讯的格式主要是Abstract Syntax Notation One(ASN.1),它是一种描述结构化对象的语法标准。ASN.1具有很好的延伸性和自定义能力,其类似于树的结构层次清晰、表达能力强,特别适合表示现代通信应用中那些复杂的、变化的及可扩展的数据结构。所以它在电信领域获得了广泛应用,以ASN.1报文格式提取信息进行比较也就成为电信网管系统最常见的一致性比较方式。在此特别说明的是:ASN.1报文呈树状结构,因此本说明书全文较多地方采用了数据结构中“树”的观点和名词,如:遍历、节点、叶子节点等等。

ASN.1报文具有如下特殊性质:

1.报文呈树状结构,可以根据需要定义较多层次的报文嵌套

2.报文中某个节点的类型多种多样,可能为一个简单数据类型,比如整型、字符串等等;也有可能为包含再下级节点的复合数据类型;

3.某个位置上的节点有可能不存在,因为对应报文节点允许设置为OPTIONAL,表示可有可无。

因此,一致性比较过程必须对报文体进行详细的解析,获取每个细节的属性。常用的解析报文途径是:将ASN.1报文字节流转换成为内存中的对等类对象(简称ASN.1内存对象),然后对报文内存对象进行比较。比较方式主要有两种:

1.直接对ASN.1内存对象整体进行“等、不等”运算,这种方式简单快速,避开了复杂的报文层次分析。但是产生的结果不能反映每个节点的具体比较细节;

2.对照报文的定义得知报文树中每个节点的数据类型、名称,代码中的每步操作都明确指定所针对的节点的名称。

对于第一种比较方法,缺点非常明显:比较的结果只能反映两个报文整体等或不等,信息粒度太粗,展示在界面上后需要用户自己去寻找到底哪些位置的信息不相等,因此基本上没有实际使用意义。而对于第二种方法,由于代码和报文结构捆绑得过于紧密,一旦报文发生任何细微的改动,比如节点名称、类型变化,都会引起代码的修改,极大地增加了开发和维护的工作量。

发明内容

本发明所要解决的技术问题是:提供一种电信管理网(TMN)上下层网管数据比较方法,该方法将代码与报文之间的耦合性减至最小,并可以得到清晰的比较结果。

本发明为解决上述技术问题所采用的技术方案为:

一种电信管理网上下层网管数据比较方法,包括以下步骤:

A、创建结果报文及容器对象;所述结果报文至少包含被比较报文节点值的对比情况,以及每个节点在报文中的位置信息;所述容器用来缓存所述被比较报文节点的信息;

B、将两个被比较报文中根节点信息添入所述容器内的元素中;

C、循环取出所述容器中的元素进行分析处理,将处理结果返回所述结果报文,直到所述容器中不存在任何元素时为止。

所述的比较方法,其中:所述的步骤C包括如下步骤:

C1、从所述容器内取出一个元素,得到其记录的两个被比较报文节点;

C2、对所述两个被比较报文节点进行对比,将对比情况保存到所述结果报文中;

C3、如果当前被比较节点有子节点,则解析所述子节点序列,将子节点序列中代表同一信息的的成员结为待比较子节点对,并将所有待比较子节点对的信息顺序存入所述容器内的元素中;

C4、循环步骤C1至C3,直到所述容器中不存在任何元素时为止。

所述的比较方法,其中:步骤C3所述子节点配对方法为:搜索两个子节点序列,将关键字相等的子节点结为一个待比较子节点对;而序列中剩下的各子节点与一个空节点结为待比较子节点对。

所述的比较方法,其中:所述结果报文为ASN.1报文;所述容器为队列、栈或链表。

所述的比较方法,其中:当所述容器为队列时,队列元素中保存的被比较报文节点信息为报文节点地址。

所述的比较方法,其中:当所述容器为队列时,如果采用按深度遍历策略,子节点对的信息插入到所述队列的当前元素之后;如果采用按宽度遍历策略,子节点对的信息依次插入到整个所述队列的最后。

所述的比较方法,其中:所述步骤C1包括如下处理:当发现从所述容器取出的元素其中有一个为空节点时,比较过程仍继续,并在后继比较过程中,该节点的所有子孙节点均以空节点代替。

本发明的有益效果为:本发明技术方案有以下优点:

1)采用常见的ASN.1报文作为电信管理网不同层次间信息传递的协议,针对分别从上下层网管提取的ASN.1报文进行比较,得到的结果数据也为ASN.1报文,因此具有良好的通用性;

2)由于比较结果为ASN.1报文,结果报文反映了报文中每个节点的对比情况和详细的位置信息,界面可以根据它轻松地组织显示,直接表现出所有节点的差异情况而不需要用户去仔细对比寻找哪些节点不同。

3)对ASN.1报文进行解析,根据解析出的节点类型决定下一步如何处理,整个过程不包含报文名称,因而适应于任意的两个类型相同ASN.1报文之间的比较。

4)本发明所述比较过程和传统的报文比较方式——报文整体“等、不等”运算或针对报文具体定义进行处理相比,具有明显的优势:本发明将代码和报文结构之间的耦合性减少到最小,代码维护简单。程序适应于任何类型报文,输入端可以处理任意报文而不需要针对不同报文做大量修改。

附图说明

图1为本发明方法的流程图;

图2为光传输网管系统NMS和EMS典型体系图;

图3为DSET所定义的ASN.1报文类框架图;

图4为报文的比较过程流程图;

图5为以队列为容器时的比较流程图;

由于图3为C++类的继承关系图,类名本身就是英文字符串,是标准中规定好的名字,因此无法用中文标注。

具体实施方式

下面根据附图和实施例对本发明作进一步详细说明:

本发明比较的数据来源,分别是从上下层网管提取的两个ASN.1报文,它们分别代表同一信息在上下层网管中的状态,其定义相同但是具体的值可能存在不一致。而得到的比较结果也为ASN.1报文,比较结果首先应该包含被比较报文中每个节点的对比结果,其次因为ASN.1报文具有树状层次结构,结果报文还必须反映这种结构特点,以便通过它可以方便地恢复出整个报文树;所以结果报文至少应该包含两个方面的内容:被比较报文每个节点值的对比情况,以及每个节点在报文中的位置信息。本发明所陈述的比较方法利用容器(如队列、栈、链表等等)缓存需要进行比较的报文节点来完成比较过程。每个容器元素对应比较报文中的一个位置,记录参与比较的两个报文在该位置上的节点信息,需要进行比较的每对节点都经历一次入容器和出容器,利用容器可以灵活地实现“按深度遍历”和“按宽度遍历”等多种策略。

本发明所述数据比较方法的步骤如图1所示:

a)创建结果报文以及容器对象;

b)将两个源报文中位于比较过程开始位置的节点的信息(根节点信息)填入容器内的元素中;

c)循环取容器中的元素进行一系列分析处理,直到容器中不再存在任何元素时停止;

d)返回结果报文。

所述方法,其中所述步骤c)取容器元素所进行的一系列分析处理包括以下步骤:

c1)从容器里取出一个元素,得到它记录的两个待比较报文节点;

c2)对报文节点值进行对比,将对比情况保存到结果报文中;

c3)如果节点包含下级子节点,则解析两个当前对比节点的子节点序列,将双方对应的子节点信息顺序保存进容器的元素,留待后继步骤取出进行比较。

其中所述步骤c3)解析子节点序列过程可能涉及到子节点配对问题。它的含义是:将本发明比较方法步骤c3所得到的两个子节点序列中代表同一信息的那些成员结为待比较节点对,该处理只针对所包含子节点的位置不固定的ASN.1数据类型,比如SEQUENCE OF、SET OF。在这些类型的数据中,因为内部是类似数组的平级结构,子节点的位置完全由生成报文时的填写顺序决定,所以不能直接将两个序列中位置对应的子节点结为待比较节点对,而需要有一个寻找、匹配的过程。子节点配对的具体方法如下:

1)搜索两个子节点序列,将表示同一对象的子节点结为一个待比较节点对,而对于序列中剩下的子节点,各自和一个空节点结为待比较节点对;

2)将所有待比较节点对的信息保存进容器的元素。

上述配对方法中“表示同一对象”的判据是子节点的关键字相等。可以通过提供预备的关键字注册表来指定整个比较过程中需要进行配对处理的节点和各自的关键字。而需要进行声明的是:

1)报文中有定义但实际上在比较报文双方均没有出现的节点,可根据需要灵活处理。比如选择忽略它们而不进行任何处理;

2)如果在本发明所述步骤c1),当取出容器元素发现其中有一个为空节点时,比较过程将照常进行。在后继比较过程中,该节点的所有子孙节点均以空节点代替。

下面结合一个光传输网管系统的实例,详细说明上下层网管数据的比较过程。

典型的C/S结构光传输网络层管理系统(NMS)和网元层管理系统(EMS)逻辑组成如附图2所示。类似这种结构的网管体系中,NMS和EMS二者使用各自的数据库独立运行但NMS的初始数据来源于EMS。NMSServer通过适配器向EMS发送消息请求服务;EMS Server响应来自适配器的消息并向适配器回发NMS所需要的数据。因为NMS中的基础数据都来源于EMS,所以两个系统并存了大量的对等信息,在光传输网管系统中包括:网元属性、网元单板、拓扑连接等等。运行中要求它们在EMS和NMS间保持严格的一致。所以对两个层次的同一信息进行比较并在界面上展示差异性,成为NMS的一个重要功能。

利用本发明所述的比较方案,可以很好地满足这个需求。以下分成数据比较方案、结果报文定义、编译平台、容器的定义、比较过程、特别说明几部分对该实例进行详细说明。

(一)数据比较方案

根据电信网管的功能分层定义,EMS接受NMS的管理。NMS的数据直接来源是受其管理的EMS。所以对如图2所示的电信管理网分层网管体系,信息的比较应该放在NMS进行。整个过程步骤如下:

1)NMS界面发起信息比较命令;

2)NMS Server向本层网管数据库要求提取信息;

3)NMS Server收到本层网管数据库返回的信息;

4)NMS Server通过适配器向EMS Server要求提取信息;

5)NMS Server收到适配器上报的来自EMS Server的返回信息;

6)NMS Server将两个信息进行比较,获得结果给发送到NMS界面;

7)NMS界面以图形方式展示比较结果。

整个过程中,图示各个模块之间的通讯全都采用ASN.1报文作为协议。关键性的比较活动发生在上述步骤6)中:两个ASN.1报文被对比,产生结果ASN.1报文发送给NMS界面。

(二)结果报文定义

按照“发明内容”部分所述结果报文应该包含的信息,对结果报文作如下定义:

CompareResultList-T∷=SEQUENCE OF CompareResult-T

CompareResult-T∷=SEQUENCE{

number        INTEGER,

parentNumber  INTEGER,

depth         INTEGER,

itemName      GraphicString(32),

valueOne      [0]GraphicString OPTIONAL,

valueTwo      [1]GraphicString OPTIONAL,

ifSame        BOOLEAN

}

各个字段的含义解释如下:

number:当前节点的编号(也就是节点为父节点的第几个子节点)

parentNumber:父节点编号

depth:节点在整个节点树中的层次

itemName:节点名称

valueOne:节点在报文一中的值

valueTwo:节点在报文二中的值

ifSame:节点在两个报文中的值是否相等

比较完成后的结果报文类型为CompareResultList-T,它由一系列CompareResult-T类型的数据组成。在排列顺序上提供“按深度优先遍历”和“按宽度优先遍历”两种方式。该定义很清楚地体现出一个节点在整个报文树中的位置和数值的比较情况。网管界面能够非常方便地将这样的结果报文恢复成树状进行显示。

(三)编译平台

ASN.1报文在网络中以编码字节流方式传送。程序代码中要对其进行解析,必须先将它转换成内存中的数据格式,这一工作依靠ASN.1编译平台的支持来进行。可供选用的编译平台有很多,这里采用DSET。它提供从ASN.1报文编码字节流到C++内存类对象之间的映射,可以将ASN.1报文的定义编译生成一系列C++类。而且它还内含了一个完整的ASN.1报文类继承体系如图3所示,这个体系为每种ASN.1报文数据类型处理都提供了丰富的接口函数。图3包含了大多数常用ASN.1报文类型所对应的C++类。从图3中可以看到,所有类型都发源于AbstractData,该类为内存中的报文对象处理定义了基本行为集合。这种继承框架为代码的泛型处理提供了天然的支撑。

在DSET编译平台上进行ASN.1报文比较,实际上是先将两个报文解码成对应的内存报文类对象,再调用DSET的各种接口函数解析它们进行比较,获得结果报文类对象,然后再编码为ASN.1结果报文发送给界面。

(四)容器的定义

本发明利用容器来缓存需要进行比较的报文节点信息,容器可以是队列(deque),也可以是链表(list)或栈(stack)。下文以队列为例来说明本发明所述比较方法。队列泛指一种处理思想,可以自定义实现,也可以利用STL(标准模板库)中提供的队列类型STD∷deque。队列的元素需要保存待比较的报文节点信息,这里的实现方式是记录节点地址。为此定义如下结构作为队列的元素:

struct T_BRANCH

{

   int      iDepth;

   int      iParentNumber;

   int      iSelfNumber;

   string   strNodeName;

   const    ASN1∷AbstractData*pValueOne;

   const    ASN1∷AbstractData*pValueTwo;

}

各个成员的含义解释如下:

iDepth:父节点的深度

iParentNumber:父节点的编号

iSelfNumber:节点的编号(为父节点的第几个子节点)

strNodeName:节点的名称

pValueOne:报文一中的节点指针

pValueTwo:报文二中的节点指针

本实施所使用的队列定义为STD∷deque<T_BRANCH*>。该队列的作用是:在比较当前报文节点的时候一旦发现其存在下级子节点,则将需要比较的子节点地址缓存在队列中待后继过程处理。在其基础上可以实现“按深度遍历”和“按宽度遍历”两种策略。策略的区别在于队列的“插入点”,插入点指新元素加入到队列中所在的位置。如图4所示,如果是“按深度遍历”,新元素插入到队列当前元素之后(图4中的位置1);如果是“按宽度遍历”,新元素将依次追加到整个队列的后面(图4中的位置2)。

(五)比较过程说明

采用队列作为容器时,比较过程的流程如图5所示。下面以光传输网管系统中常见的数据——单板信息为例,详细说明本发明所述比较方法的具体过程和注意事项。

单板对应的ASN.1报文及其含义如下:

MEBoard-T∷=SEQUENCE{

meName       GraphicString(60),//光传输网络网元名称

meBoardList  BoardList-T        //网元包含单板集合

}

BoardList-T∷=SEQUENCE OF BoardInfo-T

BoardInfo-T∷=SEQUENCE{

name           GraphicString(60),  //单板名称

serviceState   INTEGER,            //服务状态

expectedType   [0]INTEGER OPTIONAL,//设计单板类型

installedType  [1]INTEGER OPTIONAL,//实际安装单板类型

addtionalInfo  [2]GraphicString(60)OPTIONAL//单板备注信息

}

对应这样的两个ASN.1报文A和B,按照本发明所述比较方法,处理步骤为:

1)创建一个CompareResultList-T结果报文对象pResult;

2)创建一个STD∷deque<T_BRANCH*>类型的队列pDeque;

3)创建一个T_BRANCH类型的结构实例,将A、B的地址分别填写到pValueOne、pValueTwo,设置层次深度值iDepth为0,加入队列pDeque;

4)取队列头元素,由pValueOne、pValueTwo得到当前比较报文节点(即A和B)的地址。对pValueOne调用方法:ASN1∷AbstractData∷get_adTypeId(),得到代表类型StructuredData的一个整数值。注:StructuredData是ASN.1报文的SEQUENCE类型在DSET中的实现;

5)由步骤4)得到的整数值判定:当前节点是一个复合类型,自身并不具备值。为其创建一个CompareResult-T报文对象,其中depth赋为队列当前头元素的iDepth值,number赋为1,valueOne、valueTwo赋为空字符串,IfSame设置为True,然后将该报文对象添加到pResult中;

6)由步骤4)得到的整数值判定:当前节点是一个复合类型,可能含有下级子节点。所以分别对pValueOne、pValueTwo调用方法:ASN1∷AbstractData∷size(),得到它们所包含的下级子节点序列长度,这里为2。然后再根据长度对pValueOne、pValueTwo调用方法:ASN1∷StructuredData∷get(unsigned int)得到它们的子节点meName、meBoardList;

7)创建一个T_BRANCH类型的结构实例,将双方的meName子节点对象地址填写到其中,设置层次深度值iDepth为1,iSelfNumber为0,然后加入队列pDeque;同样的处理针对meBoardList,只是iSelfNumber应该按次序设置为1;

8)第一个节点的比较过程到这里已经结束,弹出队列头元素。

9)因为队列不为空,所以继续取队列头元素,此时得到的元素对应的报文节点是meName。同样先获取数据类型,然后为其创建一个CompareResult-T报文对象,它的depth、number赋为队列当前头元素的iDepth、iSelfNumber值。再对pValueOne、pValueTwo调用ASN1∷AbstractData∷asValueNotation(),解析返回的字符串得到当前比较节点的名称和双方的值,名称填写到itemName分量中,值填写到valueOne、valueTwo中。将填写完成的CompareResult-T报文对象添加到pResult中;

10)当前节点的比较过程到这里已经结束,弹出队列头元素。

11)再次重复取队列头元素进行分析的过程。此时队列头元素代表的报文节点是meBoardList。需要注意的是因为它对应的ASN.1类型是SEQUENCE OF,在DSET中为D_SeqOfObj。于是应该对pValueOne、pValueTwo调用ASN1∷D_SeqOfObj∷size(unsigned int)和ASN1∷D_SeqOfObj∷get(unsigned int)来判断子节点序列长度以及获取每个子节点,同样,将每一对待比较的子节点地址信息缓存到一个T_BRANCH结构实例并加入队列,留待处理;

12)后继比较步骤与前述一样,不再累述。整个比较过程到队列中不存在任何元素时结束。

(六)特别说明

对以单板信息为例的比较过程需要进行特别说明的是:

1.比较步骤11),因为meBoardList的ASN.1类型定义是SEQUENCEOF,内部子节点呈类似数组的平级结构。由pValueOne获得的单板序列1,其中第i个单板信息可能位于由pValueTwo获得的单板序列2中第j个位置(i不等于j)。因此不能直接将序列1和序列2相同位置的单板进行比较。必须遍历两个序列,逐个进行对比判断才能得知到底哪些数据表示同一单板。

判断两个报文节点是否表征同一信息的方法是对报文节点的关键字进行对比,该处理需要给程序提供关键字名称参照表。对于单板报文BoardInfo-T,关键字是“name”。于是定义一个参照表,表中包含这样一对值:{“meBoardList”,“name”}。这个参照表是预定义的,由程序员编写程序的时候根据待比较报文结构而制定。需要声明的是:这是本发明唯一需要和报文结构捆绑的地方,但它只是整个比较模块与外界的一个接口,并不影响模块内部过程良好的封装性和独立性。整个比较过程中,每当程序根据ASN1∷AbstractData∷get_adTypeId()返回的类型值得知当前比较节点是平行结构类型(如SEQUENCE OF),就去关键字名称对照表中寻找相应关键字信息。对于例中的meBoardList,将查到名称字符串“name”。接下来的配对步骤是:

1)交叉对比序列1、2中每个单板信息的name节点,这个对比直接采用节点“等、不等”运算。值相同的那些节点对代表了同一单板分别在上下层网管的状态。为每对节点创建T_BRANCH结构实例并将节点地址分别赋给pValueOne、pValueTwo,加入队列pDeque;

2)剩下没有配对成功的单板,意味着只在某一层网管中存在。它们的处理方法是:对于只在序列1中存在的节点,同样生成T_BRANCH结构实例,将pValueOne设定为节点地址,而将pValueTwo赋为空地址,再加入队列pDeque;只在序列2中存在的节点处理方式相同,只是赋为空地址的相应变为pValueOne。

2.当对两个BoardInfo-T类型报文节点的子节点序列进行配对的时候,因为expectedType成员的性质是OPTIONAL的,所以可能只在其中一方出现。处理策略是:创建T_BRANCH结构实例时,将对应不存在一方的节点地址赋为空地址值。而如果节点在两个报文中都没有出现,可以根据需要确定是否为其创建T_BRANCH结构实例并插入队列。本发明采用的方式是忽略这种报文节点。

3.因为前述两种处理方式导致取出队列头元素时,可能会发现pValueOne与pValueTwo其中之一为空地址,此时循环比较过程并不会停顿。处理策略是(假设pValueTwo为空地址):生成一个CompareResult-T类型报文对象,根据pValueOne获取报文节点值填赋给valueOne,而置valueTwo为空字符串;如果该节点同时还包含下级子节点,那么照样需要为子节点创建T_BRANCH结构实例。所创建的结构对象中pValueTwo均赋为空地址值,pVavlueOne处理方式正常。也就是说:空地址将在整个过程中被传递。

可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发明构思加以等同替换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号