一种类c结构接口报文处理方法

文档序号:7682929阅读:333来源:国知局

专利名称::一种类c结构接口报文处理方法
技术领域
:本发明涉及接口报文处理,具体涉及一种类c结构接口报文编解码方法和模拟处理方法。
背景技术
:ITU-TM.3010将电信管理层模型划分为网元层(NEL)、网元管理层(EML)、网络管理层(NML)、业务管理层(SML),事务管理层(BML)。在同层之间或上下层之间都需要通信交互,因此也就存在着各种通信接口。比如SDH网络管理系统中存在下面常见的接口,F接口GUI与Manager的接口,F接口采用Ethernet方式,对于Ethernet采用TCP/IP协议。Qx接口网元层的Agent与网元管理层的Manager的接口,Qx接口釆用Ethernet方式,釆用TCP/IP协议进行通讯S接口网元层内Agent与MCU的一种私有协议,S接口采用基于HDLC通讯机制进行一点对多点的通讯。在网元层单板软件中,一种典型应用是,由于受内存成本限制和效率的考虑,常用c语言来开发。因此在单板软件之间或和其它上层管理软件通信的接口协议,也常采用类c语言结构描述。而Qx接口和S接口采用类c语言结构描述,F接口采用ASN.1描述。这种类c语言描述的接口在其它领域也很常见。所有的接口都要有自然语言文字配合说明结构中各字段的实际意义,由于c语言是程序设计语言而不象ASN.l是报文描述语言,所以在描述报文的时候还需要一些自然语言说明结构中各字段之间的关系。类c语言描述的接口,是指用c语言的数据类型来描述软件模块间的接口报文。由于存在两台不同的主机之间进行通信的要求,因此类c报文要求不能存在含指针表示数组的数据结构,这样就要求一条接口报文放在一块连续的数据区。一条接口报文可以采用树形结构表示。不同主机间通信采用网络序的要求,同一主机的软件模块间可以釆用络序或不需要转化直接采用主机序。ci吾言有char、bool、short、int、float等基本类型,可以通过struct包括基本类型成员或其它结构成员进行数据类型扩展。主机序如果在intel的机器,就是小端序(LITTLE—ENDIAN);如果是sun工作站,就是大端序(BIG—ENDIAN),也叫网络序。如一个4字节整数0x0102,其对应大端字节序列:00000102,而小端字节序是02010000。二者的次序是相反的,在报文处理中字节序对整数和位域的处理有影响,对字符串等没有影响。ASN.1(抽象文法标记少见范,AbstractSyntaxNotation.1)是ITU定义的描述在网络上传输信息格式(也就是接口报文码流)的标准规范,为节点间的数据转换提供标准格式。每个节点只关心从ASN.l翻译过来或翻译成ASN.l而不必知道数据存于网络任何处的格式。它有两部分第一部份(ISO8824/ITUX.208)描述信息内的数据、数据类型及序列格式,也就是数据的语法;第二部分(ISO8825/ITUX.209)描述如何将各部分数据组成消息,也就是数据的基本编码规则,原来是作为X,409的一部分而开发的,后来才独立地成为一个标准。第一代PKI(即公开密钥体系PublicKeyInfrastructure)标准主要是基于ASN.l的,在SNMP(简单网络管理协议)中它用于定义SNMP协议数据单元和对象的格式,被广泛应用于通信和计算机的其他领域。使用ASN.l报文格式通信也就成为电信网管系统最常见的通信方式。ASN.l报文具有如下特殊性质1.报文呈树状结构,可以根据需要定义较多层次的报文嵌套。2.报文中某个节点的类型多种多样,可能为一个简单数据类型,比如INTEGER、GRAPHICSTRING,ENUM等等;也有可能为包含再下级节点的复合数据类型SET,SEQUENCE,SETOF,SEQUENCEOF。3.在SET,SEQUENCE结构中,某个节点有可能不存在,因为对应净艮文节点允许设置为OPTIONAL,表示可有可无。4.在使用ASN.l文件时,首先在ASN.l文件定义ASN.l结构,然后通过编译器编译成为中间程序语言结构,比如java,C+十语言。然后通过4吏用对应的程序语言结构,达到通信的目的。5.ASN.l支持BER(基本编码规则,BasicEncodingRules),DER(区分编码规则,DistinguishedEncodingRules),VAL(值编码规则,ASN.lvaluenotation)等编码,可以将中间语言结构实例编码为码流,但是在从码流解码为中间语言结构实例时会有问题,首先要知道码流对应的结构,然后才能用该结构的解码方法解码,如果该结构中包括ANY类型(指不确定的类型),该类型数据还要通过其它成员字段确定其特定类型才能再进一步解码。关于报文在C/S类型软件中一般常用的方法是1.建立客户端与服务器端的连接;2.客户端与服务器端进行协议交互.a)报文发送方填写报文头和报文体,报文头包括命令码、报文体.报文体真实数据类型因命令码不同而不同;b)报文发送方编码报文为字节流,发送给报文接受方;c)报文接受方接受到报文字节流,解码报文头,然后根据其中的命令码,用特定数据类型解码报文体;d)报文接受方根据报文的内容,作相应的响应;3.交互结束,关闭连接。在针对报文的接口测试工具中经常需要模拟各种接口的报文,模拟报文有两种来源,一种是通过解释性脚本语言创建,另一种是通过持久化数据创建报文结构实例,进一步还要求可以修改该实例。而在应用程序中在有时候要求将报文持久化保存为文件或保存到数据库,并且从持久化报文中再现报文。并且希望文件中的数据是可读的,可以修改其中的数据。这样就需要模拟F接口的ASN.l报文、Qx接口的类c描述报文、S接口的类c描述报文.现有的ASN.l编译平台,包括DSET和ESNACC都能根据ASN.l的结构生成其描述信息。类c描述报文和ASN.l表述的报文,都展现的是一种节点间的树形关系,并且ASN.l可以在语义上表示类c报文.如果类c描述报文和ASN.l的报文用不同的方式实现模拟,工作量太大。
发明内容本发明需要解决的技术问题是如何提供一种类C结构接口报文处理方法,能借助已有的ASN.l技术以及编译平台对类c报文的编码、解码或进行报文模拟工作,既可以用在开发中,也可以用在基于接口报文的测试中,并且和ASN.l统一了处理流程,减少了开发工作量,降低类c报文制作的难度和报文制作的工作量。本发明的上述技术问题这样解决,提供一种类c结构接口报文模拟处理方法,采用类c结构接口报文与被测对象交互,还包括以下步骤A)利用编译平台和编解码规则实现交互的类c结构接口报文和底层的ASN.l报文相互转换;B)基于ASN.l功能模块实现类c结构接口报文的底层模拟。按照本发明提供的处理方法,所述编解码规则包括类c语言数据类型和ASN.1数据类型的对应关系。按照本发明提供的处理方法,所述编解码规则包括c接口头文件中的傀结构。按照本发明提供的处理方法,所述编解码规则包括对类c报文的语法规范。按照本发明提供的处理方法,所述编译平台是支持BER,PER编码并能实现VAL格式数据和〔++结构实例相互转换的ASN.l编译器。按照本发明提供的处理方法,所述被测对象和交互使用相同编码规则。按照本发明提供的处理方法,所述编码规则可以是目前规则BER或PER等规则;也可以是目前ASN.l不支持的编码规则,所以我们在后面"具体实施方式"中引入了一种新规则。按照本发明提供的处理方法,所述功能模块包括脚本操作、报文编辑、报文比较和报文存储。本发明提供的一种类c结构接口报文模拟处理方法,借助于接口描述语言ASN.l模拟类c语言结构报文的方法,利用已有的ASN.l技术以及编译平台,将类c结构接口头文件转化ASN.l文件,并且为ASN.l提供一种扩展的编解码规则。不需要从底层报文结构的表示方法开始做类c报文的模拟工作,并且和ASN.l统一了处理流程,减少了开发工作量,降低类c才艮文制作的难度和报文制作的工作量,与现有技术比较具有以下特点1.使类c的结构报文语法借助于接口描述语言ASN.l得到规范,降低了人为定义接口的随意性,使得程序开发者在理解报文接口规范时歧义减少。2。用于开发中,标准化了接口语法,可以编解码方法可以接口层靠编译器生成,和应用层无关。去除了开发人员报文编解码的工作量。3.使得类c语言定义的报文模拟和ASN.l报文的处理统一。4.使得类c语言定义的报文在模拟的时候可以利用现有的关于ASN.l处理的成熟技术。5.采用转化工具自动把c接口头文件转化为ASN.l文件,除了编解码,其它功能可以直接采用ASN.l的功能模块,如报文读写、报文编辑、报文比较、报文传递等。减轻了开发工作量,也降低了测试工具的培训维护工作量,同时也降低了测试人员的维护报文的工作量。6.方法本身是通用的,不依赖于特定的被测软件和特定的ASN.l编译器。下面结合附图和具体实施例进一步对本发明进行详细说明。图1是c语言筒单类型到ASN.l类型的映射表;图2是c报文的插件生成过程示意图;图3是利用报文插件处理报文模块调用关系示意图;图4是ESNACCC++基本类结构继承体系示意图。具体实施方式首先,说明本发明具体实现的整体技术方案1、接口规范,目的是实现类c报文的语法规范,减少自然语言定义的随意性。1.1明确结构中不定长数组编码后相对该结构的位置.一般有两种可能的情况第一种是不定长数组的码流放在父结构中前一个字段后面,也就是其在结构中的定义位置。第二种是不定长数组放在该数组在父结构的尾部,此时为了定位方便,可以加入一些辅助结构,并且如果存在数组结构中包含子数组,就要求这些数组结构按某种方式排列,如前序遍历方式。1.2选择结构的定义,结构中存在字段b数据类型是由本结构的字段a的数值决定,称类似a的功能字段为主字段,称类似b的功能字段为从字段,要求从字段放在其父结构的末尾。而且在一个结构中只有一个,如果一个结构中存在多个从字段的结构,那只要把那几个从字段和它们各自的主字段放在子结构中,再定义到它们的父结构中,这依然和原来的结构等价,这仅仅是一种处理技巧而不是一种限制。1.3确定支持哪些筒单类型,这样通过数组(分定长或不定长两种),struct的定义就可以扩展成为更复杂的结构。如支持8位,16位,32位的有或无符号整数,布尔等类型等。8位的整数和字符等价,这样也能表达字符串。2、建立映射关系,建立类c语言数据类型和ASN.l数据类型的对应关系。实现简单数据类型、数组、整数宏、复合数据类型到对应关系。有了这种映射转换关系,目的是可以通过这些规则自制工具把c接口头文件转化为ASN.l文件。2.1c语言简单类型到ASN.l的类型进行一定的对应关系。2.2c语言数组映射ASN.l类型,不定长数组采用SEQUENCEOF对应;定长数组采用多个连续加数字后缀的字段,对于定长的INT8[SIZE]数组映射为OCTETST腿G(SIZE)。2.3整数宏可以映射ASN.l的ENUMERATED类型,并且对整数宏分组而给以组名,组名可以成为ASN.lENUMERATED的类型名称。整数宏就是提供了对整数进行选择赋值的手段,宏不是模拟报文所必需的。2.4c语言的结构采用ASN.l的SEQUENCE表述。接口中从字段可变类型采用ANY表述。3、完善c接口头文件,目的是补充一些c语言结构,而这些结构在接口定义中涉及的信息.根据1、2规范和映射关系,可以在接口头文件增加傀儡一些结构,这些结构是为了工具自动从c接口头文件转化ASN.l文件的需要而补充的,开发人员不使用。如c语言的不定数组用指针表示,整数宏组用注释实现宏分组等,这样转化工具就可以将所有的c语言报文接口结构转换为ASN.l结构。4、转换模块,目的是将c接口头文件转化为ASN.l文件。可以通过步骤1-2规则实现自制工具进行转换。5、插件制作模块,将ASN文件编译成插件,插件是具有一定接口的可执行模块,目的是实现可以灵活装载或卸载的插件。具体可见专利一种ASN.l的报文构造面向对象方法(专利申请号200610161964.X),这个步骤一般通过makefile完成。5.1对ASN.l报文编译生成某种面向对象语言的代码。5.2将步骤5.1中的代码进一步生成具有特定接口的插件,此步骤可选。具体可见一种ASN.l的报文构造面向对象方法。6、CER编码模块,实现ASN.l扩展编码规则CER。实现小端序和大端序两种编码方法,如果主机序是小端序,则要求整数类型对应码流符合INTEL主机内存存储格式,大端序要求整数类型采用和小端序相反的码流顺序,其它简单类型码流大小端序一致同计算机内存存储格式,数组采用第l条的规范编码,而结构中个其它字段的码流依据其在结构中的先后顺序编码。对于类型确定的结构解码采用相同的规则,而从字段根据主字段确定类型,再进一步解码。7、采用CER码流和被测对象进行交互。上述步骤1-3主要是准备完整的c接口头文件,为后续的处理做准备,步骤4-5可以通过makefile方式自动实现。步骤6是编解码规则的实现,只要报文语法满足l、2的要求,和具体报文无关。在程序开发中应用可以直接用ASN.l作为接口定义语言,只要实现CER编解码方法即可。由于c语言接口l报文在不同的软件项目中使用,在规则和细节上可能要求有区别。这样就可能实现ASN.l的类c扩展规则有多种,但大同小异。第二步,进一步描述该方案中的具体细节和关键(-)图1描述了c语言基本类型到ASN.l类型的映射关系,包括了常用的各种整数,布尔,无类型指针映射为ANY类型,一种步骤2.1的映射关系。在映射为ASN.l的类型加'S,前缀是为了防止和某些€++语言的类库支持数据类型名称沖突。t)图2描述了类C报文报文插件的生成过程,包括C接口头文件的完善,到生成ASN.l文件,以及报文插件的编译生成。步骤A.为了弥补c结构定义中采用了自然语言,而导致一些接口信息在c接口结构中缺失,可以采用一定的注释格式弥补,关于整数宏分组也采用注释的办法分组,提供组名。步骤B.弥补在接口规范文档中定义了的信息,但是在c接口头文件中没有体现的信息,增加一些傀儡结构;或把同一个接口报文中分散的信息其中在一起,放在一个结构中。经常报文体做为报文头末尾的一个ANY字段,而ANY类型字段,只能放一个结构,这就要求报文中的一些数据要集中在一个结构中。步骤C.手工或转化工具把c结构头文件转化为ASN.l文件,主要是利用本发明实现的整体技术方案步骤1的规范和步骤2的规则。称工具为h2asn。步骤D.利用现有的ASN.l编译器生成C十+类结构,其中含有类结构描述信息,这是编解码规则的依据。本实施例中采用ESNACC做ASN.l的C十+编译器。通过makefile直接生成含结构描述信息的报文插件。曰图3利用报文插件处理报文模块调用关系,公共操作模块封装了对插件和各种编码规则模块的管理,供上层应用功能调用。ASN.lC+十结构和码流格式之间的相互转化,以及对码流进行的各种操作,脚本操作、报文编辑、报文比较、报文存储的实现都要依赖插件中的结构描述信息。步骤F.l€++类结构实例采用各种编码规则生成相应的数据格式码流。步骤F.2特定的数据格式码流采用编码规则可以解码为的C+十类结构实例。如果其中含有从字段,需要进一步解码。步骤G"i兌明可以通过不同的编码少见则,和具有不同编码MJ'j的^C测对象交互,指报文的模拟测试。步骤G.2通过BER编码规则,就可以实现和使用BER规则的被测对象1的交互。步骤G.2通过CER编码规则,就可以实现和类c结构结构净艮文才莫拟和净皮测对象2的交互。卿图4ESNACC基本类结构继承体系。AsnType的顶层基类。ESNACC基本类继承关系层次图,ESNACC基本基类为AsnType,AsnType为抽象基类。在此之上继承了一些简单的类型来支持基本ASN.l数据类型如Asnlnt、AsnReal、AsnRelativeOid、AsnAny、AsnOcts、AsnBool、AsnNull、asnString,其中Asnlnt也由PERGgeneral派生,AsnEnum由Asnlnt派生,AsnOid由AsnRelativeOid派生;AsnList是实现其它Asn.1类的中间类型、AsnSetOf、AsnSeqOf由AsnList派生;使用了标准才莫板库的std::string、std::list来进一步支持SEQUENCEOF、SETOF等。一些应用的字符串类型如VisibleString、GraphicString、Ia5String、PrintableString、NumericString是由基本字符串类型AsnString派生来的。其中GeneralizedTime、UTCTime由VisibleString派生。最后,结合具体实施例进行具体说明该网管测试平台的实例,详细说明了报文构造方法,本文采用ESNACCASN.l编译平台,实现CER的报文编解码规则。在实施流程7中说明了在网管开发中的应用。本发明可以适用于任何面向对象程序语言实现,本文主要结合€++讨_论,也可以^使用其它面向对象的程序语言,如JAVA语言实现。(一)测试才艮文来源本发明使用的报文来源于被测多个网管项目的子系统通信报文,网管中使用接口种类较多,每个网管由于版本不同,新版本的报文存在一定的增删,要求测试平台能够模拟报文,提供各种报文操作功能。本文讨论的类c接口报文有两种,一种是基于不同主机间通讯的报文,一种是基于同一进程内不同模块间的交互报文。前者要求是大端序,后者要求是主机序,主机序就有可能是小端序或大端序。(二)编译平台ESNACC是开放源码的ASN.1编译器,支持BER,PER编码,在原来的基础上已经增加了VAL格式的数据,可以实现VAL格式数据和C+十结构实例之间的相互转换。编译器提供的ASN.l支持模块ASN.l编译器通常提供编译器和底层支持模块,编译器将ASN.l文件编译生成特定程序语言代码,如C十+、Java。将ASN.l的结构编译成程序语言的类。底层支持模块为生成的代码执行提供支持。如C十+中一般提供多个库给可以给生成的代码调用,其中包括ASN.l特定语言的基类和一些支持操作的功能。(三)接口报文处理流程在需要自动化模拟测试类c接口报文之前,先要规范接口的定义语法,在满足接口的功能要求的同时,语法不能有很强的随意性;然后实现基于语法规范的CER编码规则。在每个版本报文测试前,根据接口规范说明文档完善c接口头文件,采用转换工具自动转化c接口头文件到ASN.l文件,之后做成报文插件,根据报文插件对模拟报文对报文进行各种操作。1.要测试的数据类型简单数据类型,结构,可变类型数据,数组。前三种数据规则前面已经说清楚了。就是数组的编码可能有两种情况,在本发明步骤1.1中对第一种数組情况。如typedefstruct{UINT32al;丽T32a2Num;A3—Struct*a31st;丽T16a德m;A5—Struct*a51st;丽T32a6;}AStruct;typedefstruct丽T16bl:■T16b2,蘭T32b3,}A3—Struct;typedefstructUINT32clUINT32c2UINT32c3}A5—Struct;在AStruct中有两个不固定数组a31st、a51st,其中a2Num表示a31st中元素个数,a4Num表示a51st中元素数目,并且数目和数组所在的位置是相连的,表示元素数目的整数所占位数可能各不一样。a31st中的数据紧挨着a2Num之后,而a4Num,a51st,a6依次存放。第二种情况可能存在一些辅助结构,如本实施例中引入了下面的辅助结构表示附加数据块,主要目的是可以在c程序中不用指针表示数组。typedefstructUINT32uiOffset;丽T32uiTotalLength;UINT32uiCycleNum;}T—OFFSET—WITH—LEN;uiOffset:偏移量,指附加在结构体后的数据块相对其所在的结构体开始处的偏移量;uiTotalLength:总长度,指附加数据块的总长度。如果附加数据块自身还包括子附加数据块,则子附加数据块必须紧随其后,并且uiTotalLength也包含了所有子附加数据块的长度;uiCycleNum表示当附加数据块是数组,其是数据结构的实例个数,否则其值为l表示其后只有一个结构。具体使用辅助结构的例子如下typedefstruct{U證32bl;T—OFFSET—WITH—LENb2;/*==ARRAY:A3—Struct*/UINT16b4Num;T—OFFSET—WITH—LENb5;/*==ARRAY:A5—Struct*/■T32b6;}BStruct;注释"^ARRAY:A3—Struct*/表示其指定的数据块是的A3—Struct的结构,这种注释需要在c头文件定义或完善阶段实现。这种定义方式是方便h2asn自动分析,同时不影响开发人员的编译代码。2.关于整数宏的分组,在本实例中采用下面的注释实现,第一句表示宏组名为ASON—CMD—OPER—TYPE1的宏组开始,/*==MacroEnd;*/表示上一个宏组名结束。如果没有某c头文件内宏没有分组,就假设文件名带某后缀作宏组名,其内的宏同在一个宏组内。/*==Macro:CMD—OPER—TYPE1;*/#defmeCMDADD—TYPE0x1#defmeCMDREMOVE—TYPE0x2#defmeCMD—MODIFY—TYPE0x3/*==MacroEnd;*/3.按照本发明所述步骤3根据接口规范文档增加一些为转换工具转化服务的傀儡结构;4.利用图2步骤C的转化工具h2asn,将c接口头文件转化为ASN.l文件。h2asn主要包括扫描、分析、输出三个过程,扫描所有c接口头文件,分析每个头文件中的结构及宏,本文件引用其它文件中哪些结构,按ASN.l的文件4各式输出所有头文件对应的ASN.l文件。5.将ASN.l的报文编译生成插件。6.按照本发明所述步骤1、2和实例1中的辅助结构的编码规则实现ASN.l的扩展规则CER.对辅助结构做专门处理,其它接口结构采用按上述描述通用处理。把CER编解码规则应用到测试工具中模拟类c接口报文码流,对纟皮测软件进行接口测试。7.在网管开发中,由于新网管要和老的网元设备通过Qx接口交互,网元设备采用的是类c报文,因此网管开发中直接釆用ASN.1作为Qx接口定义,采用扩展的CER编码规则直接进行报文的编解码。应当理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案的说明和具体实施方式做出各种可能的改变或替换,辅助接口结构的数目和形式可以变化,注释的形式可以不同,甚至对类c报文加上校验头或其它辅助信息。权利要求1、一种类c结构接口报文模拟处理方法,采用类c结构接口报文与被测对象交互,其特征在于,还包括以下步骤A)利用编译平台和编解码规则实现交互的类c结构接口报文和底层的ASN.1报文相互转换;B)基于ASN.1功能模块实现类c结构接口报文的底层模拟。2、根据权利要求1所述处理方法,其特征在于,所述编解码规则包括类c语言数据类型和ASN.l数据类型的对应关系。3、根据权利要求1所述处理方法,其特征在于,所述编解码规则包括c接口头文件中的傀结构。4、根据权利要求1所述处理方法,其特征在于,所述编解码规则包括对类c报文的语法规范。5、根据权利要求1所述处理方法,其特征在于,所述编译平台是支持8£1^£11编码并能实现¥八1^格式数据和€++结构实例相互转换的八8仗1编译器。6、根据权利要求1所述处理方法,其特征在于,所述被测对象和交互使用相同编码规则。7、根据权利要求6所述处理方法,其特征在于,所述编码规则是BER或PER规则。8、根据权利要求1所述处理方法,其特征在于,所述功能模块包括脚本操作、报文编辑、报文比较和报文存储。全文摘要本发明涉及一种类c结构接口报文模拟处理方法,采用类c结构接口报文与被测对象交互,还包括利用编译平台和编解码规则实现交互的类c结构接口报文和底层的ASN.1报文相互转换;基于ASN.1功能模块实现类c结构接口报文的底层模拟。这种方法借助于接口描述语言ASN.1模拟类c语言结构报文,不需要从底层报文结构的表示方法开始做类c报文的模拟工作,和ASN.1统一了处理流程,减少了开发工作量,降低类c报文制作的难度和报文制作的工作量。文档编号H04L12/24GK101222365SQ200810004718公开日2008年7月16日申请日期2008年1月23日优先权日2008年1月23日发明者张新平申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1