CN1700665A - 分布式数据模型 - Google Patents

分布式数据模型 Download PDF

Info

Publication number
CN1700665A
CN1700665A CNA2005100598919A CN200510059891A CN1700665A CN 1700665 A CN1700665 A CN 1700665A CN A2005100598919 A CNA2005100598919 A CN A2005100598919A CN 200510059891 A CN200510059891 A CN 200510059891A CN 1700665 A CN1700665 A CN 1700665A
Authority
CN
China
Prior art keywords
data
reference model
description
bag
create
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA2005100598919A
Other languages
English (en)
Inventor
杰奥弗·史密斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Agilent Technologies Inc
Original Assignee
Agilent Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Agilent Technologies Inc filed Critical Agilent Technologies Inc
Publication of CN1700665A publication Critical patent/CN1700665A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/50Testing arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer And Data Communications (AREA)
  • Maintenance And Management Of Digital Transmission (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Debugging And Monitoring (AREA)

Abstract

用于从发送设备到接收设备传送数据的方法和系统。所述方法开始于准备对向发送设备和接收设备提供的数据的结构的描述。在运行时,使用对数据的描述在发送设备和接收设备中的每一个上创建数据结构的参考模型。根据请求,使用发送设备上的数据创建参考模型的实例。通过抽取数据来对实例中的数据序列化,并从发送设备向接收设备传送。接收设备基于参考模型来创建数据的实例。

Description

分布式数据模型
技术领域
本发明一般地涉及通信领域。更具体地,本发明涉及用于从发送设备到接收设备传送数据的方法和系统。
背景技术
对诸如路由器的网络设备进行广泛地测试,来确保将错误的传输和致命的错误最小化。市面上可获得多种测试设备,包括来自安捷伦科技(本申请的受让者)的路由器测试仪。这种测试设备一般监控对多种模拟输入的路由器响应。
可以将路由过程简单地总结为节点寻找到每个可能的目的地的路径。在从层1(物理层)以上,路由无所不在。但是,大多数人所熟悉的路由发生在层3(网络层)处,同样地,这里将只引用层3(并且更具体地)的因特网协议(IP)路由。路由器使用表来确定将分组转发向何处。更新这些表是由路由协议执行的功能。每个路由器响应一种或多种协议。
用于交换路由信息的协议将遍布全球的多个路由器连接起来,以通过它们的异构的路由表(虽然通常是一致的),来向它们提供网络的公共视图。路由表存储路由器到达网络上的每个目的地所必需的所有信息,不管网络有多大。存在很多种路由协议被用来构造跨越网络的路由表。诸如BGP、OSPF、RIP和ISIS的协议有助于向网络上的所有路由器传送该网络的正确并且一致的映像。
已知的路由器测试仪利用专门创建的数据“测试分组”来模拟网络流量,其中所述数据“测试分组”是网络上出现的典型的活数据。将这些测试分组通过被测试的网络传输到网络设备。由流量模拟器系统(包括路由器测试仪)测试的参数包括路由验证、加载情况下达到的服务质量(QoS)水平和与其他设备正确的网络互工作。这些所谓的“分组导火线(packet balster)”中的许多也通过根据协议设计并传输消息,来测试网络设备遵守协议的能力。
图1是流量模拟器测试系统100的方框图。更具体地说,该流量模拟器测试系统100是由安捷伦科技提供的路由测试仪的一般代表。路由器测试仪只是路由器测试系统的一个示例,具体地说,其被宣称为多端口流量生成、协议仿真和分析测试系统,该系统用于对企业、都市/边缘、核心路由和光纤网络的设备的性能进行验证。该系统一般包括连接到被测系统的多个协议仿真卡102n,在这种情形中所述被测系统是路由器104。每个协议仿真卡102n一般包括具有相关的存储器和I/O的处理器。由例如运行视窗环境的PC的计算机106控制协议仿真卡102n。计算机106对例如图形用户接口的接口108作出响应。
根据通信协议的规则和解释(例如那些由工业界的许多标准团体所定义的),构建由协议仿真卡102n产生的测试分组。有许多通信协议在使用中,并且有多种新的协议继续将被开发。一般来说,新协议最初是由装备制造商开发的,而且本质上是专有的。通常来说,标准团体随后采纳所述协议,以在工业界广泛地实现。
当前与流量模拟器测试系统相关联的软件体系结构要求对协议仿真解决方案的所有部分硬编码,其中所述协议仿真解决方案的所有部分包括图形用户接口、脚本API、配置和控制组件,以及协议状态机自身。要求为每种协议硬编码导致使用大量人力来创建大量代码。许多这种代码专门用于将计算机106和每种新协议仿真卡102n相接口。
将计算机106和每个新协议仿真卡相接口的传统方法要求在编写接口的时候就知道方法和相关联的参数,并且以接口描述语言(IDL)将其硬编码。在这种范式中,每次编写新的协议仿真时或者将旧的协议扩展时,就要不断地创建新的方法和参数。这导致包含有数以百计的方法和参数的巨大的API(应用编程接口),并且导致维护代价高昂的代码。此外,已知的方法导致在多个不同的层复制API,从而使问题更复杂。因此,API的每次改变(不管多小)都要求对系统内的大量代码和不同的层进行更新。这种方法的一种副作用是必须为每种协议和它的每次更新生成独特的GUI(图形用户接口)。对于API来说,随着协议数目的增加,所需的GUI实现也增加。
现在正在作出努力来设计减轻某些前述问题的通用系统。在这里通过引用而被包含的名为“Building packets of data”的同时未决美国专利申请序列号10/266,507、公开号US20040068681 A1的专利申请中描述了一种示例,其使用外部XML协议描述来驱动通用PDU编码/解码引擎。接下来的步骤是建立到下述协议仿真器的接口,所述协议仿真器不会对每个新仿真器或对仿真器的改变而都要求有新代码或硬编码接口的改变。
解决该问题的一种已知方法是使用接口定义语言(IDL),例如DCOM或CORBA。但是,IDL已被证明为不合适的,因为它们要求在编译时就已知每个接口的所有细节。另一个选择是使用ASN.1,这是一种用于定义任意数据结构的语言。已知的ASN.1编译器生成用于对这种结构进行编码和解码的接口代码。但是,与IDL的情况类似,ASN.1是一种对每个接口都需要专门编写的代码的编译时解决方案。另一选择使用可用的XML数据模型之一,例如DOM(文档对象模型)。但是,XML数据是作为文本文件而被传输的,这对带宽的使用是低效率的。而且,XML数据通常要求高度处理器密集型的计算和耗时的解析。而且,对DOM结构的导航很缓慢,而且不会自然地提供表数据(其在协议仿真器接口中是很常用的)。
因此,本发明的发明者已经认识到需要新的接口机制,其能够表示所有命令、配置数据以及来自协议仿真的输出。而且,这种机制应当对层次状数据和表数据同样适用。
发明内容
为了解决现有技术中存在的问题而设计本发明。
根据本发明的第一方面,提供了一种用于从发送设备向接收设备传送数据的方法,包括:准备对所述数据的结构的描述;向所述发送设备和所述接收设备提供所述对所述数据的描述;在运行时,使用所述对所述数据的描述,在所述发送和接收设备中的每一个上都创建所述数据结构的参考模型;根据请求,利用所述发送设备上的数据来创建所述参考模型的实例;将所述实例中的数据序列化;将所述序列化数据从所述发送设备传送到所述接收设备;以及基于所述参考模型,在所述接收设备上创建所述数据的实例。
根据本发明的另一方面,提供了一种使用协议仿真进行通信的方法,所述方法包括:准备对控制所述协议仿真所需的数据的结构的描述;向控制器和所述协议仿真提供所述对所述数据的描述;在运行时,使用所述对所述数据的描述,在所述控制器和协议仿真中的每一个上都创建所述数据结构的参考模型;根据请求,利用所述控制器上的数据来创建所述参考模型的实例;将所述实例中的数据序列化;将所述序列化数据从所述控制器传送到所述协议仿真;以及基于所述参考模型,在所述协议仿真上创建所述数据的实例。
根据本发明的另一方面,提供了一种用于传送数据的系统,包括:客户端计算机,包括对一组数据的结构的描述;可在所述客户端计算机上运行的软件,该软件在运行时使用所述描述来创建所述结构的参考模型,并且根据请求而创建用一组数据填充的所述参考模型的实例;可在所述客户端计算机上运行的通信软件,该通信软件对所述实例中的一组数据序列化并进行发送;以及服务器,该服务器接收所述序列化的一组数据并基于所述参考模型,在接收设备上创建所述一组数据的实例。
根据本发明的另一方面,提供了一种用于控制协议仿真器的系统,包括:用于将对用于控制所述协议仿真器的一组数据的结构的描述转换为所述结构的参考模型的装置;用于实例化所述参考模型以产生用于保持所述数据组的对象的装置;主机上的通信装置,用于对所述对象中的所述数据组进行序列化和发送;以及用于接收所述序列化数据组并基于所述参考模型,在接收设备上创建所述数据组的实例的服务器装置;其中所述协议仿真器根据所述所述服务器装置上的数据组来进行工作。
附图说明
结合附图,通过下面的对本发明某些实施例的详细描述,可以获得对本发明的理解,在附图中:
图1是流量模拟器测试系统的方框图。
图2的方框图一般地示出了根据本发明的实施例来传送数据的方法。
图3的方框图示出了根据本发明的优选实施例的协议仿真系统。
图4的方框图示出了根据本发明的实施例来使用包(parcel)定义以创建包参考模型和包对象。
图5是用于创建包对象的方法流程图。
图6是基于以包定义来定义的表结构而构建的接口的屏幕快照。
图7是基于以包定义来定义的一组值而构建的接口的屏幕快照。
在这里包含的描述中,使用与元素标识符相邻的小写字母“n”来标记元素的非特定实例,而不是在图中示出或在说明书中讨论时具有与元素号相邻的非斜体字母的特定元素。
具体实施方式
现在参考本发明的在附图中示出了其示例的实施例,其中在所有的附图中,相同的标号指相同的元件。遵循本方法的详细描述可以由对数据位进行操作的例程和符号表示来在计算机可读介质、关联处理器、数据生成和获取卡等之内实现。这里,例程通常被认为是导致期望的结果的步骤或者动作的序列,其包含例如“程序”、“对象”、“函数”、“子例程”和“过程”等专门术语。这些描述和陈述是本领域的技术人员用来向本领域的其他技术人员有效地传达其工作实质的手段。为了方便,在此后的说明和权利要求中,将词语“网络”用来指下述任何一个或多个:通信网络、网络设备、任何其他通信设备和通信系统的可以用测试数据分组测试的任何一个或多个方面。
下面将描述包括在下述路由器测试仪上实现的方法的实施例,所述路由器测试仪具有与安捷伦路由器测试仪相似的配置,但是,这里叙述的方法可以在多种路由器测试仪中的任何一种上运行。更中肯地说,这里提出的方法并不内在地与任何具体的设备相关;相反,可以与根据此处教导的例程一起使用各种设备。具体地说,尽管这里描述的是路由器测试功能,但是这里描述的用于将数据从一个设备传送到另一个设备的方法一般地适用于数据通信领域。可以执行这里描述的功能的机器包括由下述公司制造的机器,所述公司例如是安捷伦科技有限公司、惠普和泰克电子有限公司,以及其他通信装备制造商。
至于这里描述的软件,本领域的一般技术人员将认识到,存在多种平台和语言,用于创建软件来执行这里所概述的过程。可以用包括C++在内的C的多种变种中的任何一种实现本发明的实施例。然而,本领域的一般技术人员也认识到,确切的平台和语言的选择常常由所构建的实际系统的特性规定,因而可以在一类系统上工作的在另一类系统上可能无效。也应当理解,这里所描述的例程和计算并不限于作为计算机上的软件执行,而是也可以在硬件处理器中实现。例如,可以利用多种设计工具,在ASIC或者在FPGA中用HDL(硬件设计语言)实现例程和计算。
                  用干数据传输的方法
图2的方框图一般地示出了用于根据本发明的实施例来传送数据的方法。所示方法用于从第一位置200a到第二位置200b传送数据。如图1所示,在协议仿真器的上下文中,第一位置200a可被认为是运行控制应用的计算机106(或“客户端”),第二位置可被认为是运行服务应用的协议仿真卡102n(或服务器)。控制应用包括图形用户接口以及用于发送和接收数据的通信例程。服务应用包括协议仿真应用以及用于发送和接收数据的通信例程。
为了方便,所描述的本发明的实施例所使用的数据结构将被称为“包”。包可以被认为是能够代表命令、配置数据和来自任何例程的输出的灵活的、有注释的数据结构。由客户端创建的包将包含:命令、会话数据以及拓扑。由协议仿真卡创建的包将包含:统计数据、拓扑以及消息踪迹。
图2所示的传送方式开始于包定义202a(这里也称为“定义”或“描述”)。包定义202n提供了对一个或更多包的元素及其属性的描述。包的优选数据结构是层次状的,其中每个节点可以包含值、子节点、函数、值数组或值表。包定义202a可以与下述文本文件一样简单,所述文本文件提供包的列表,并且指定包含每个包的元素(这里称为“节点”)、每个节点的类型,以及节点间的相互关系。每个节点可以用描述性属性予以注释(后面将讨论其示例)。
优选地但并非必要地,用XML来形成包定义202a。更具体地说,希望以容易访问的格式来格式化包定义,以方便对其的创建和修改。由XML提供的嵌套标签结构方便了对层次关系和表结构的文档化。包定义202a通常存储在第一位置200a上,并由运行在第一位置200a上的应用在运行时获取。
对包定义202a进行解析以创建包参考模型204a(也称为“参考模型”)。一般地,包参考模型例如在C++中是这样一种数据结构,可根据该数据结构来创建或实例化包的实例例如包对象206b。可能最类似的结构就是C++中的通用类型。一个区别是通用类型必须在编译时定义,而包可以在运行时引入。对于包来说,其类型是由派生出了实际包的参考模型204a来定义的。使用中可以证明,在系统启动时解析所有包定义202n,以便生成工作中可能需要的所有潜在包的参考模型这样的做法是有益的。然而,如果考虑到时间和存储,则建议只生成当前会话有可能需要的那些参考模型。
可以使用如下所述的包API来管理包对象,所述包API可提供用于与包数据共同工作的通用接口。在本发明的上下文中,与包共同工作的一种方法是对其进行序列化以传送到第二位置202b。可将包序列化为多种形式,包括适用于存储/恢复目的的XML,以及适用于与其它位置通信的二进制形式。概念上,序列化可以被认为是从数据结构剥离数据,并形成线性文件或数据流以用于传输。提供了足够的数据结构以识别下述参考模型204n,其应被用来在接收方对二进制流进行解码并重新创建包。在这一重建中,参考模型204n中包含的结构化信息被用来解析二进制流中的数据。
相应地,向第二位置200b提供了包定义202a的拷贝——示出为包定义202b。第二位置200b解析包定义202a以生成参考模型204b,它应当是参考模型204a的拷贝。接收到二进制数据208后,第二位置200b通过对包参考模型204b实例化,并使用二进制数据208来填充作为结果的数据结构,从而形成包对象。
类似的处理可用于形成包对象。可使用包定义202a来生成对每个所定义的元素都具有合适的输入机制的图形用户接口,所述输入机制例如文本输入区、单选钮,等等。一旦用户提供了所期望的输入数据,那么就对参考模型204n实例化并且利用输入数据填充包对象206n。有利地,可以设计通用API(下面将公开其示例),其可以执行对任何包对象206n的创建和维护,其中包定义202n被提供用于所述包对象206n。
与基于IDL的解决方案相比较,包在已编译的代码之外定义,并使用当定义新包时不需改变的通用API。这使得可以建立这样的应用框架,其可适用于将来的协议解决方案而不必改变或扩大所述框架。这还使得可创建稳定的接口,以用于第三方或用户在其上建立他们自己的解决方案。与传统的XML解决方案相比较,预先一次性地定义包结构,而无需对于每个所接收的数据分组都进行定义。可在应用启动时建立所需的包参考模型,这减轻了对不断解析XML的需要。包可以被设计用于有效率的导航,与XML DOM相比,其将查找最小化了。包可以被设计用于有效率的二进制编码和解码,其与XML文本相比,需要较小的用于在软件系统间通信的二进制数据分组。包可以被设计为包括与很多应用自然地适合的表数据。
               包在协议仿真器中的使用
图3的方框图示出了根据本发明的优选实施例的协议模拟系统300。系统300一般包括例如运行MICROSOFT WINDOWS系统的某个版本的个人计算机主机302,还包括一般包括具有关联存储器和I/O设施的至少一个协议仿真卡304(也称为协议仿真器)。可以证明,协议仿真器在体系结构上与个人计算机相类似是有益的。根据至少一个实施例,主机302可被配置为客户端,而协议仿真器304可被配置为服务器。
除了提供控制协议仿真器304,特别是控制与仿真卡304通信的例程的其他应用和操作系统之外,主机302还运行应用306。根据至少一个实施例,所述应用是通用协议独立应用。这意味着应用306优选地不具有任何协议特定功能。所述功能实质上是使用包定义202n而动态创建的。应用306负责创建包参考模型204n(见图2)并维护对其的使用,还负责对包含在参考模型的实例(例如包对象206n)中数据进行序列化、传输、接收以及解序列化。注意,优选地提供到这些功能的类似于API的接口,从而提供到每种不同的协议仿真的单一通用接口。
提供图形用户接口310,以使得当用户请求启动协议仿真时,在图形用户接口310中,应用306将与客户端312交互以显示输入控制协议仿真器304所需的参数的表单。这可以使用包定义202n或包参考模型204n(见图2)来完成。一旦输入了合适的数据,应用306就会创建包参考模型204n的实例以形成包对象206n。应用306对包对象206n进行序列化并向协议模拟器304传输序列化了的对象。
除了其它的以外,协议仿真器304还运行应用308,其包括用于所选择的协议309n的仿真的模块。根据至少一个优选实施例,应用308包括使用包与主机302进行通信的例程。一般优选地,应用308包括与应用306所包含的例程相类似的例程。这可通过创建与包相接口的通用的类似于API的例程来完成。下面将这些例程的示例。
应当周期性地向协议仿真器304提供包定义202n的更新拷贝。每次启动后,主机302向协议仿真器304提供定义202n是有益的。协议仿真器304接收到包定义202n之后,创建从其可实例化包对象206n的一组包参考模型204n。当从主机302接收到序列化的包对象后,基于相关联的包对象206n,实例化新的包对象。然后使用该对象来提供运行在协议仿真器304上的协议仿真例程所需的数据。因此,当向协议仿真器304增加新的协议仿真时,仅需要定义新的包定义202n,以允许主机302和协议仿真器304(以及模块309n)之间的通信。
                             
虽然下面的讨论将集中在包的一个实施例上,但是本领域的普通技术人员将认识到,从所描述的包结构的偏离是可能的,并仍将落在本发明的范围之内。在所描述的实施例中,包一般包括头部和一组元素。元素一般分为两类,分别是提供结构的容器元素和存储一个值或一串值的数据元素。用于包的一组元素(不是“节点”)类型的例子如表1所示。
                                表1
元素类型 容器 描述
单个值(布尔,数字或字符串)。值可以为任何长度。
数组 一组同构值(都是相同的类型)。
集合 包含其他包元素(例如值、数组、集合、表或键表)的包元素。
表。表的每个成员代表一列。表中的行被索引。
键表 表。表的每个成员代表一列。必须是值的某个列被指定为键列。表中的每一行在键列中必须具有唯一的值。通过键值访问行。
可以用描述性属性来注释每个元素。这些属性对包进行文档化,使得包可以进行自文档化。通过将所述属性和包定义、也许还有包参考模型一起存储,被提供用来操纵并与包相接口的例程可以在本质上是通用的,例如没有将数据结构编码在例程中,而是在运行时提供数据结构。例如,可以使用属性来提供使用通用图形用户接口呈现并编辑任何包而所需的所有信息。表2示出了可能的属性的一些示例。本领域的一般技术人员将认识到,表2所呈现的列表不是穷举性的,相反依赖于本发明的实现,其它属性可被证明为有益的。
                                  表2
属性 目的
fullName 用于包元素的GUI呈现名
description 目的和用法的描述
length 对于值和数组元素,length(长度)属性定义保持该值所需要的位数
format 呈现格式。已定义的格式包括“integer”,“hex”,“Boolean”,“ipv4_address”等
minValue/maxValue 许可值的范围,允许GUI或API执行自动化范围检查
表3包含XML的包定义的示例。具体地说,表3包含两个包的定义:bgpSessionData和routePools,还包含两个命令:addIpv4RoutePool和addIpv6RoutePool。包bgpSessionData定义了创建bgp仿真会话所需的启动数据。包routePools定义了一组将由路由协议进行公告的可到达地址。routePools中定义了两个表:一个用于IPv4地址,一个用于IPv6地址。使用起始地址、前缀长度和计数来可参数化地定义地址的范围。所述命令参考routePools包来填充其内容。所述命令使用从路由池表中选择的行作为参数。
                                  表3
<!--=================================--><parcel name=″bgpSessionData″fullName=″BGP4 Session Data″class=″sessionData″flow=″toServer″buffet=″newest″><value name=″local_port″fullName=″Local port″purpose=″localPort″length=″16″format=″integer″defaultValue=″179″/><value name=″remote_port″fullName=″Remote port″purpose=″remotePort″length=″16″format=″integer″defaultValue=″179″/><value name=″subinterface″fullName=″Sub-interface identifier″purpose=″subinterface″length=″32″format=″integer″/><value name=″prefix_length″fullName=″Address prefix length″format=″integer″purpose=″prefixLength″length=″32″defaultValue=″24″/><value name=″local_ip″fullName=″Source IP Address″format=″ipv4_address″purpose=″localAddress″length=″32″/><value name=″remote_ip″fullName=″Destination IP Address″
    format=″ipv4_address″purpose=″remoteAddress″length=″32″/></parcel><!--======================================--><parcel name=″routePools″fullName=″Route Pools″class=″destinationPools″><table name=″ipv4Pools″fullName=″IPv4 Route Pools″><value name=″v4StartAddr″fullName=″Start Address″length=″32″format=″ipv4_address″/><value name=″v4PrefixLen″fullName=″Prefix Length″minValue=″1″maxValue=″32″/><value name=″v4Count″fullName=″Count″/></table><table name=″ipv6Pools″fullName=″IPv6 Route Pools″><value name=″v6StartAddr″fullName=″Start Address″length=″128″format=″ipv6_address″/><value name=″v6PrefixLen″fullName=″Prefix Length″minValue=″1″maxValue=″128″/><value name=″v6Count″fullName=″Count″/></table></parcel><!--=======================================--><command name=″addIPv4RoutePool″fullName=″Add an IPv4 route pool″instance=″session″purpose=″debug″><use rowRef=″routePools:ipv4Pools″/></command><command name=″addIPv6RoutePool″fullName=″Add an IPv6 route pool″instance=″session″
  purpose=″debug″><use rowRef=″routePools:ipv6Pools″/></command><!--==============-->
通常,元素的默认值需要被设置为根据在定义内部或外部指定的其它值而变化。在这些情况下,对可被调用来执行这些任务的工具命令语言(TCL)过程进行集成是有益的。可在XML包定义中指定这些函数。本领域的一般技术人员都能够进行TCL的集成,因此这里将不讨论这种集成的具体细节。表4示出了包括TCL函数的包定义的一部分的例子:表4
<value name=”holdTimer”fullName=”Hold Timer”length=”16”defaultValue=”30”/><value name=”keepalive”fullName=”Keepalive Value”length=”16”valueFunction=”multiply:holdTimer 2”/>
在本例中,不论holdTimer被设置为何值,keepalive的默认值都被维护为holdTimer的二倍。当实例化包例如创建包的实例时,可执行TCL函数。而且,可创建例程以检查包定义和/或模型并更新在运行时被这些函数所影响的值。
                       用包进行工作
图4示出了根据本发明的实施例,使用包定义202来创建包参考模型204和包对象206的方框图。概括地,参考模型204用作为包括数据结构的细节在内的所有包属性的库。在所描述的实施例中,所述结构包括层次型节点和基本表,但是本发明并不限于这些结构,而是可被扩展为例如包括关系型结构。另外,参考模型204解析一个包之间或包节点和另一个之间的在XML中的交叉引用。
图5是创建包对象206的方法流程图。该方法开始于步骤500。在步骤502,扫描可用的XML包定义文件(例如包定义文件206)以获得<parcel>标签,并建立关于从标签名到文件的查找表。
在步骤504,如果请求了尚未形成用于其的包参考模型204的包对象206,则方法进行到步骤506。否则方法进行到下面将讨论的步骤514。在步骤506,扫描在步骤502建立的查找表以识别对应于所请求的包对象206的XML文件。接下来在步骤508,使用公开的域XML解析器软件例如expat来解析所识别的XML文件。XML解析器生成C++标签对象的向量,其在步骤510被用于构建相关的参考模型204。
参考图4所示的示例,参考模型204包括顶级节点集合(1),其包括表节点(2)和值节点(6)。表节点(2)包括3个节点:值节点(3)、数组节点(4)和值节点(5)。在示例性包对象206中,通过创建表节点(2)的3行来创建12个节点。
在启动期解析所有的XML文件以确保所有模型对整个会话可用这样的做法可能是有益的。但是,这可被证明是不必要的,因为给定的测试会话可能只需要包的子集。因此如结合图5所描述的那样,可证明需要时才进行解析是有益的。
在步骤512,创建映射并将其与这样的参考模型204相关联,所述参考模型204维护由名称索引的参考包对象(即由参考模型204所描述的包对象)的映射。这是所希望的,因为单个的参考模型204可包括对多个参考包对象的描述。当要实例化包对象206时,该映射可被用来获取描述所希望的包的合适的参考模型204(或它的一部分)。
接下来在步骤514,将参考模型204传递到构造包对象206的例程。以这种方法从相关的参考模型204创建(有效地实例化)新的包对象206。一般地,包对象206包括表明相关参考模型204的头部,以及用于保持与参考模型204中所描述的元素有关的数据的数据结构。当最初被创建时,在可能的情况下,使用属性中所定义的默认值来填充数据结构。在需要时,可由用户或另一例程来更新或输入值。
包对象206中的每个节点都具有对应的参考包模型。但是,表的存在意味着所述对应并不一定是一对一的。这是因为包对象206可具有某个特定节点的多个实例——表中的每一行对应一个。包对象206不需要(但是可以)包括参考模型204中包含的属性信息。属性信息在需要时可从参考包204获得。
对包中每个节点指定一个索引可以方便在包对象206的节点之间进行有效率的导航。图4中每个节点的在括号内的标号示出了索引系统的示例。在参考模型204中,对每个参考节点分配一个索引。当参考节点是容器例如集合或表时,每一个这样的参考节点都可被配置为记录它的成员节点的索引。包对象206中的每个节点得到与它所对应的参考节点204相同的索引。包对象206中的活动节点的包索引向量可被用于对象中节点的有效率的导航。每个活动节点在向量中记录它的索引。在表的情况下,可通过在表中指定当前(或所选)行来管理多个行(从而多个实例)的存在。当选择一行时,所选行的节点将自身注册到包索引向量。通过这种方法,仅对当前行的节点进行导航——行必须在节点可被访问前被选择。
示出以下各表以方便对用于将包定义转化为包模型的处理的理解。图6示出了部分包定义(包括3个不同的包),而图7是基于图6所包含的包定义的参考模型的概念性示例。
           表6
<parcel name=“sessionSummary”<table name=“sessions”><value name=“Name”/><value name=“Tester”/><value name=“SUT”/></table></parcel><parcel name=“bgpData”><value name=“localip”/><value name=“remoteip”/></parcel><parcel name=“bgpRoutes”><value name=“start”/><value name=“increment”/><value name=“count”/></parcel>
                                 表7
    包sessionSummary 包BGP4 包bgpRoutes
参考节点“sessionSummary”类型=APF_NODE_TYPE_SET索引=0 参考节点“bgpData”类型=APF_NODE_TYPE_SET索引=0 参考节点“bgpRoutes”类型=APF_NODE_TYPE_SET索引=0
参考节点“sessions”类型=APF_NODE_TYPE_TABLE 参考节点“localip”类型=APF_NODE_TYPE_VALUE 参考节点“start”类型=APF_NODE_TYPE_VALUE
索引=1 索引=1 索引=1
参考节点“Name”类型=APF_NODE_TYPE_VALUEindex=2 参考节点“remoteip”类型=APF_NODE_TYPE_VALUE索引=2 参考节点“inerement”类型=APF_NODE_TYPE_VALUE索引=2
参考节点“Tester”类型=APF_NODE_TYPE_VALUE索引=3 参考节点“counr”类型=APF_NODE_TYPE_VALUE索引=3
参考节点“SUT”类型=APF_NODE_TYPE_VALUE索引=4
                             API
由于包实际上是自文档化数据模型,因此可设计一组通用例程来与包接口。在功能方面,这种例程可被认为是应用程序接口(API)。希望提供用于创建(例如实例化)包、读包和写包的例程。表8提供了例程的示例,其使用自文档化代码并描述了到包的通用接口,包括读和写接口。
                              表8
#ifndef APF_PARCEL_H#define APF_PARCEL_H//================================////=库//      APF安捷伦协议框架////=文件名//      ApfParcel.h////=描述////Parcelinterface////=作者//     Geoff Smith////=版权//     (C)Copyright 2004 Agilent Technologies////===============================#include″emuframework/include/apfEmulationReference.h″//……………………………………………………………………//=标题//     包读接口
////=类类型//      接口////=描述//      到包实例的读接口。该接口用于从目的地包库(parcel store)处获取的包。class APB_EXPORT_CLASS IApfReadParcel{public:virtual~IApfReadParcel(){}//=属性virtual IApfRefParcel*refParcel()const=0;virtual EApfParcelStateparcelState()const=0;//=包迭代virtual uint32_tcurrentIteration()const=0;virtual voiditerateParcel(uint32_t aIteration=0)=0;//注意:最大迭代是仿真的一种属性。//它不受包的强制。//=当前节点virtual IApfRefNode*refNode()const=0;virtual EApfNodeTypenodeType()const=0;virtual boolisActive()const=0;//查询当前节点是否是活动的。非活动节点没有值。它对应于selectRef的返回值为假的节点,//或其中没有行存在的表的表列节点或表的派生。virtual boolisCopyRowSource() const=0;//查询当前节点是否是集合,或具有当前行的表。//使用该方法来检查包是否已准备好以用于使用copyRow来复制一行到另一包。//=导航//包是节点的层次状集合体,所述节点可以是值、数组、集合或表(见nodeType())。根包节点类//似于集合。
  //包维护用于对包层次进行导航的内部指针。//大多数包操作依赖于当前指针位置。//例如,nodeType()返回当前节点的节点类型,getValue()返回当前节点的值。因此,为了使用//包API,必须将指针移到所关心的节点。//包层次的每一级定义了一个指针范围。//诸如resetFirst()、next()、prev(),以及goto*()这样的操作在当前光标范围内工作。//诸如enter()、leave()、resetTop(),以及find*()这样的操作将光标在范围间移动。//例如,在resetTop()之后,光标将位于根包节点。这个级上只有一个节点,需要enter()来//下移到包的顶级成员。next()和prev()运算符可用于在这一级的成员之间移动光标。//表的成员代表了表列。包光标从一列移动到下一列。提供了独立的表操作来在表行之间移动。virtual voidresetFirst()const=0;virtual voidresetLast()const=0;virtual boolisStart()const=0;virtual boolisEnd()const=0;virtual voidnext()const=0;virtual voidprev()const=0;//光标范围操作virtual voidresetTop()const=0;//将光标重置到包的第一成员virtual voidenter()const=0;//进入一个集合或表列。如果表中没有行,则光标被置于末尾外。virtual voidleave()const=0;//离开集合或表列。virtual EApbResultgetCursor(int& theCursor)const=0;//保存当前元素的光标//返回://APB_RESULT_FLOATING_NODE:光标位于表行内,如果当前表行改变,光标不能返回同一节点//实例。//APB_RESULT_INVALID_OPERATION:光标位置不在节点上(theCursor==-1)virtual EApbResultsetCursor(int aCursor)const=0;//设置光标到用getCursor()保存的节点。
  //可以在同一ref类型的另一包上重复使用光标,但是如果getCursor返回//APB_RESULT_FLOATING_NODE,那么节点实例就依赖于当前行。//返回://APB_RESULT_FLOATING_NODE:光标位于表行内,如果当前表行改变,光标不能位于初始节点//实例处。//APB_RESULT_INVALID_OPERATION:光标位置不在存在的节点上//=搜索//goto方法移动光标到当前光标范围内的匹配节点//如果发现了,则返回真。如果没发现,则返回假并保持光标不变。virtual boolgotoName(const AtoString& aName)const=0;virtual boolgotoPurpose(EApfValuePurpose aPurpose)const=0;virtual boolgotoRefNode(const IApfRefNode*aRefNode)const=0;//find方法在所有范围搜索整个包。//如果发现了,则返回APB_RESULT_OK or APB_RESULT_FLOATING_NODE并移动到所发现的节//点。//如果没发现,则返回APB_RESULT_NO_DATA并保持光标不变。virtual EApbResultfindName(const AtoString& aName)const=0;virtual EApbResultfindPurpose(EApfValuePurpose aPurpose)const=0;virtual EApbResultfindRefNode(const IApfRefNode*aRefNode)const=0;//……………………………………………………………//包节点操作。提供方法以与值、数组和表共同工作。//这些方法必须在正确的上下文中使用,如下所述://值节点:nodeType必须是APF_NODE_TYPE_VALUE//数组节点:nodeType必须是APF_NODE_TYPE_ARRAY//表节点:parentNodeType必须是APF_NODE_TYPE_TABLE//键表:parentNodeType必须是APF_NODE_TYPE_KEYED_TABLE//通用返回码://APB_RESULT_INACTIVE_NODE-节点当前是非活动的,因此操作不可用//APB_RESULT_RANGE_ERROR-操作超出了XML中指定的计数或值的范围//APB_RESULT_INVALID_OPERATION-操作与节点类型不匹配//=值节点virtual EApbResultvalueGet(CApbValue& aValue)const=0;virtual EApbResultvalueGet(uint32 t& aIntValue)const=0;
  //如果值的长度大于32位,则返回APB_RESULT_VALUE_RANGE_ERRORvirtual const AtoByteString&valueByteString()eonst=0;//如果光标不在值节点处则进行断言。//可指定增量以自动构建包的增加集合。//使用IapfWriteParcel∷setIterationCount()对包全局地指定包计数。virtual EApbResultvalueGetIncrement(CApbValue& aIncrement)const=0;//=数组节点//当光标不在数组处时调用数组方法是错误的。virtual uint32 tarrayCount()const=0;//获得数组中项数的计数virtual EApbResultarrayGetValue(CApbValue& aValue,uint32_t aIndex)const=0;virtual EApbResultarrayGet(AtoList<CApbValue>& aList)const=0;virtual EApbResultarrayGet(AtoVector<CApbValue>& aVector)const=0;//=表&键表节点//表方法仅当光标在表节点时才使用。//注意用于键表和非键表的方法是不同的。virtual uint32_ttableRows()const=0;//返回表中的行数。//行迭代方法适用于键表和非键表。virtual voidtableFirstRow()const=0;virtual voidtableNextRow()const=0;virtual booltableIsEnd()const=0;//=非键表节点virtual inttableRowIndex()const=0;//返回当前表行,如果表中没有行,则返回-1virtual EApbResulttableSetRowIndex(uint32_t aRowIndex)const=0;//将指定的行设置为当前行。
  //=键表节点//当在XML中指定键列时,表被键化.//如果当前双亲不是键表,库将进行断言.virtual EApbResulttableSetRowKey(const CApbValue& aKeyValue)const=0;//移动到包含所指定的键值的行.//如果未发现键值,则返回APB_RESULT_VALUE_UNSPECIFIEDvirtual EApbResulttableKey(CApbValue& aKeyValue)const=0;//返回用于当前行的键字段的值.virtual EApbResulttableListKeys(AtoVector<CApbValue>& aKeyList)const=0;//列出表中的键virtual booltableHasKey(const CApbValue& aKeyValue)const=0;};//……………………………………………………………//=标题//     包写接口////=类类型//     接口////=描述//     到包实例的写接口。该接口用于在本地包库处创建的包。class APB_EXPORT_CLASS IApfWriteParcel:public IApfReadParcel{public:virtual~IApfWriteParcel(){}//=实例virtual EApbResultselectNode()=0;//选择当前节点。(因此isActive()返回真)//返回://APB_RESULT_INVALID_OPERATION-节点不可选择,即具有实例=“可选的”或selectRefvirtual EApbResultdeselectNode()=0;//不选择当前节点。(因此isActive()返回假)//返回://APB_RESULT_INVALID_OPERATION-节点不可选择,即具有实例=“可选的”或selectRef//=节点拷贝
  virtual boolisCopyTarget(const IApfReadParcel& aSource)=0;//确定本包是否是用于复制源包的当前节点或表行的合法目标virtual EApbResultcopyNode(const IApfReadParcel&aSource)=0;//将aSource的当前节点树拷贝到本包中virtual EApbResultcopyRow(const IApfReadParcel& aSource)=0;//从aSource的当前表或键表节点拷贝当前行到本包的等同表或集合中//如果拷贝键表,则该行将取代所有具有相同键的现存行。//如果将非键表拷贝到表中,则行将总是被加入virtual EApbResultcopyRows(const IApfReadParcel&aSource,AtoVector<CApbValue>&selectedRows)=0;//从aSource的当前键表节点将所指定的行拷贝到本包中的等同表中。//这些行将取代具有相同键的任何现存行virtual EApbResultcopyRows(const IApfReadParcel&aSource,AtoVector<uint32 t>&selectedRows)=0;//从aSource的当前表节点将所指定的行拷贝到本包中的等同表中。这些行将总是被加入。//=值节点//当光标不在值处时调用值方法是错误的virtual EApbResultvalueSet(const CApbValue& aValue)=0;virtual EApbResultvalueSet(uint32_t aValue)=0;virtual EApbResultvalueSetIncrement(CApbValue& aIncrement)=0;//对于小于128位的值和增量,支持增加值.//如果值或增量更长,则返回APB_RESULT_VALUE_RANGE_ERROR.//=数组节点//当光标不在数组处时,调用数组方法是错误的virtual EApbResultarrayRemove(uint32_t aStart,uint32_t aCount=1)=0;//从aStart(包含)删除aCount数组项virtual EApbResultarrayClear()=0;//删除数组中所有允许的项(到minCount)virtual EApbResultarrayResize(uint32_t aCount)=0;virtual EApbResultarrayAddFirst(const CApbValue& aValue)=0;
  virtual EApbResultarrayAddLast(const CApbValue& aValue)=0;virtual EApbResultarrayAddBefore(const CApbValue& aValue,uint32_t aIndex)=0;virtual EApbResultarrayAddAfter(const CApbValue& aValue,uint32_t aIndex)=0;virtual EApbResultarraySetValue(const CApbValue& aValue,uint32_t aIndex)=0;virtual EApbResultarraySet(const AtoList<CApbValue>& aList)=0;virtual EApbResultarraySet(const AtoVector<CApbValue>& aVector)=0;//=表操作virtual EApbResulttableRemoveRow()=0;//删除当前表行EApbResulttableClear();//清除表中所有行//非键表//当在XML中未指定键列时,表就是非键化的。//如果表具有键,则这些方法将返回APB_RESULT_INVALID_OPERATION//或试图对超出它所指定的行限制的表调整大小。virtual EApbResulttableResize(uint32_t aNumRows)=0;//tableResize将第一行设置为当前行//如果节点不是键表,则返回APB_RESULT_INVALID_OPERATIONvirtual EApbResulttableAddLast()=0;//向表的末尾增加新行。新行变为当前行。//如果节点不是键表,则返回APB_RESULT_INVALID_OPERATIONvirtual EApbResulttableAddBefore()=0;//在当前行之前增加新行。新行变为当前行。//如果节点不是键表,则返回APB_RESULT_INVALID_OPERATIONvirtual EApbResulttableAddAfter()=0;//如果节点不是键表,则返回APB_RESULT_INVALID_OPERATION//键表//当在XML中指定键列时,表就是键化的。//如果表没有键,则这些方法将返回APB_RESULT_INVALID_OPERATION,//或试图对超出它所指定的行限制的表调整大小。
  virtual EApbResulttableAddRow(const CApbValue& keyValue)=0;//如果键值重复则返回APB_RESULT_INVALID_OPERATIONvirtual EApbResulttableRemoveRow(const CApbValue& keyValue)=0;//如果未发现键值则返回APB_RESULT_INVALID_OPERATION//=多编辑//多编辑特征仅在写包上可用virtual boolisMultiEditParcel()const=0;//查询包是否是多编辑包//=节点标记virtual voidparcelResetChangeMarks()=0;virtual boolisParcelChanged()const=0;virtual boolisNodeChanged()const=0;virtual boolisRowChanged()const=0;//应用到表和键表节点virtual boolisIncrementChanged()const=0;virtual boolisNodeCommon()const=0;virtual boolisIncrementCommon()const=0;virtual boolisNodeOverridden()const=0;virtual boolisIncrementOverridden()const=0;};#endif//APF_PARCEL_H
优选地,提供用于包的管理的一系列例程。可由客户端应用来提供这种管理,所述客户端例如是图3所示的实施例中的主机302和协议仿真卡304。但是,提供可通过客户端应用而链接到的管理例程集这样的做法可被证明为有益的,这里将这些例程统称为包库(parcel store)。优选地,由使用包进行通信的各个软件组件提供包库。例如,包库可负责:代表客户端创建包;对包编码并发送到目的地包库(例如序列化);对来自另一个包库的进入包进行解码和缓冲;当新的包数据可用时通知客户端。表9提供了用于到包库的接口的自文档化编码的例子。
                                   表9
#ifndef APF_PARCEL_STORE_H#define APF_PARCEL_STORE_H//=====================================////=库//     APF安捷伦协议框架////=文件名//     ApfParcelStore.h////=描述////到包库的接口////=作者//     GeoffSmith////=版权//     (C)Copyright 2004 Agilent Technologies////=======================================#include″emuframework/include/apfParcel.h″class IApfParcelBuffer;//…………………………………………………………………………………………//=标题//     包库////=类类型//     接口////=描述//到包库的客户端接口class APB_EXPORT_CLASS_IApfparcelStore{public://=基础virtual~IApfparcelStore(){}//=访问virtual voidlistSessions(AtoVector<uint32_t>& sessionList)const=0;
  virtual uint32_tport(uint32_t aSession)const=0;virtual IApfRefEmulation*refEmulation(uint32_t aSession)const=0;virtual uint32_tmaxIteration(uint32_t aSession)const=0;//=出去的包virtual IApfWriteParcel*ereateParcel(uint32_t aSession,const AtoString& aParcelName)=0;//对全局包指定aSession=0virtual voiddeleteParcel(uint32_t aSession,IApfWriteParcel*pParcel)=0;virtual voidsendParcel(uint32_t aSession,IApfWriteParcel*pParcel)=0;//对全局包指定aSession=o//=包函数virtual EApbResultrefreshParcel(uint32_t aSession,IApfWriteParcel*pParcel)=0;//仅用于复制包。将最近的只读包拷贝到写包中virtual EApbResultcopyParcel(uint32_t aSession,const IApfReadParcel*pParcelIn,IApfWriteParcel*pParcelOut)=0;//将包pParcelIn拷贝到新包pParcelOut//pParcelOut可能已存在也可能不存在//=多编辑virtual EApbResultcreateMultiEditParcel(uint32_t aSession,AtoVector<IApfWriteParcel*>&aSelectedParcels,IApfWriteParcel**ppMultiEditParcel)=0;//从所选择的包创建多编辑包,所述所选择的包必须具有相同的IApfRefParcel类型。//多编辑包可作为普通包而被修改,而且所述改变随后应用到所选的所有包//但是,多编辑包不可被发送到目的地//返回://APB_RESULT_INVALID_INTERFACE-至少所选择的Pdu不存在//APB_RESULT_INVALID_OPERATION-不能识别跨越selectedPdu的公用元素结构。virtual EApbResultapplyMultiEditParcel(uint32_t aSession,IApfWriteParcel*pMultiEditParcel,AtoList<IApfWriteParcel*>& aChangedParcels)=0;//将多编辑包应用到每个从其初始创建了该多编辑包的包,这些包仍保留在包库中。//向客户端返回改变了的包的列表//只有已对多编辑包具体作出的改变将被应用到每个被改变的包//返回://APB_RESULT_INVALID_INTERFACE-pMultiEditParcel不是合法的多编辑包//=进入命令包
  //客户可预订在接收到特定命令包时被通知//对全局命令指定aSession=0virtual voidsubscribeCommandParcel(uint32_t aSession,const AtoString& aParcelName,AtoObserverBC<IApfReadParcel>& aObserver)=0;virtual voidunsubscribeCommandParcel(uint32_t aSession,const AtoString& aParcelName,AtoObserverBC<IApfReadParcel>& aObserver)=0;//=进入包缓冲区//根据包的缓冲类型对进入会话包进行缓冲//到包的访问通过IapfParcelBuffer接口。//对全局包指定aSession=0。virtual IApfParcelBuffer*getBufferByName(uint32_t aSession,const AtoString& aParcelName)const=0;virtual IApfParcelBuffer*getBufferByClass(uint32_t aSession,EApfParcelClass aClass)const=0;};//……………………………………………………………………………………//=标题//     包缓冲区////=类类型//     接口////=描述//到进入包缓冲区的接口。该缓冲区提供到单个包对象的访问,//所述包对象在缓冲区的生命期内存在。//根据缓冲区类型,可将进入包更新排队,或//自动应用到包对象,如下所述://缓冲区类型   动作//保留&FIFO    对进入包排队,并保持包对象不变,除非包对象当前关闭//NEWEST&FETCH 用进入包来更新包对象class APB_EXPORT_CLASS IApfParcelBuffer{public://=基础virtual~IApfParcelBuffer(){}//=包事件virtual voidsubscribeBufferUpdates(AtoObserverBC<IApfParcelBuffer*>&anObserver)=0;virtual voidunsubscribeBufferUpdates(AtoObserverBC<IApfParcelBuffer*>&anObserver)=0;virtual boolisObsolete()const=0;
  //被废弃的缓冲区正处在删除处理中,因为会话正被删除。//此时通知所有的观察者,因此它们可立即取消预订并采取任何补救动作。//由于这个原因,客户端观察者应一直检查缓冲区是否被废弃。//=访问virtual EApfBufferTypebufferType() const=0;virtual uint32_tsessionHandle()const=0;virtual IApfReadParcel&parcel()=0;virtual const IApfReadParcel&parcel()const=0;virtual voidfetchUpdate()=0;//发送请求到包服务器以请求发送包。主要意图是缓冲区类型==取。//如果当前包状态是关闭,则必须使用该方法来对包进行更新//=缓冲区管理(仅FIFO和保留缓冲区类型)virtual uint32_tbufferCount()const=0;//见下面的setMaxParcelCount()virtual voidpopBuffer()=0;//用缓冲区中的下一个包来更新包。//客户端确保bufferCount>0,popBuffer()将缓冲区计数减1。virtual voiduseBuffer(uint32_t aIndex)=0;//用指定的缓冲区条目来对包进行更新。//客户端必须确保aIndex<parcelCount()。setParcel不影响包计数。virtual voiddeleteBuffer(uint32_t aIndex)=0;virtual voidclearBuffers()=0;//删除所有缓冲区//包缓冲区具有默认最大缓冲计数1。这避免了当不是所有的代理(proxy)都//具有用于管理缓冲区的活动客户端时,由于多个代理将包接收进入FIFO或保//留缓冲区而引起的存储器泄漏的可能。//如果客户端要求缓冲区保存多于一个包,则它显式地设置最大计数。virtual uint32_tmaxBufferCount()const=0;
  //默认=1。使用setMaxBuffercount()进行调节virtual voidsetMaxBufferCount(uint32_t aCount)=0;//仅对保留和FIFO缓冲区有效。};#endif//APF_PARCEL_STORE_H
上述包库的可能在任何消息传递系统中都被希望的一个基本功能是缓冲。一般地,缓冲意味着对包进行临时保存,直到接收(或发送)系统准备好处理包含在包中的信息。例如,当需要最小化主机负载时,可由客户端从发送方的缓冲区拖拉包。可替换地,可由发送方推送包到接收方的各种类型的缓冲区,以优化响应。可在XML包定义中指定缓冲区类型,并使之为包参考模型所知。可替换地,可基于序列化包中的信息来确定所述类型。可通过调整XML中的包缓冲区类型来对应用进行性能调节,而无需影响客户端接口或需要软件的重写或重编译。
表10公开了合适的缓冲区类型的一些示例:
                                        表10
缓冲区类型 描述
保留 (推)在循环缓冲区中保留所接收到的每个新包版本,直到由客户端删除
fifo (推)将包置于FIFO缓冲区中,并且当客户端读取的时候将其从缓冲区中删除
最新 (推)由最近进入的版本替代所缓冲的包。可以根据键值将具有指定的根键的包合并。这种特性允许来自许多源的包在目的地处被自动地合并到目的地的总的包中。
取回 (拉)直到目的地请求,才将包发送到目的地存储
为了节约带宽,可在发送前将包序列化。这里使用的术语“序列化”一般指这样的处理,在该处理中,一般基于各个元素的索引而剥离包中的数据将其以顺序的方式排列。在序列化包的头部提供了最小量的识别资料,以实现接收端的包的重新构建。表11描述了对包的各种元素进行序列化的一种可能处理。
                              表11
包实体 序列化方法
值(空) 1字节代码=PCL_NODE_DATA_EMPTY
值(<=8位长度) 1字节代码=PCL_NODE_DATA_INT8+1字节数据
值(8<长度<=32位) 1字节代码=PCL_NODE_DATA_INT32+4字节数据
值(32<长度<=255位) 1字节代码=PCL_NODE_DATA_BS255+1字节长度+长度字节数据
值长度>=255位 1字节代码=PCL_NODE_DATA_BSLONG+4字节长度+长度字节数据
数组 将数组计数保存为作为值+计数值
集合 顺次保存每个成员
将行计数保存为值+计数集合
                            其它
虽然已经示出并描述了本发明的某些实施例,但是本领域的技术人员将理解,可在这些实施例中作出改变而不偏离本发明的在权利要求及其等同物中限定了其范围的原理和精神。
例如,使用包结构包括定义和参考模型的一个好处是,图形用户接口元素的构建可实现自动化。换句话说,可使用基于包自身而派生的格式来显示包的内容。通过解析包定义或参考模型,可很容易地建立接口。这种接口可用于查看包的内容或进行包产生和编辑。
图6示出了基于表13中包含的包定义所定义的表结构而构建的接口。
           表13
<parcel name=“sessionSummary”<table name=“sessions”><value name=“Name”/><value name=“Protocol”/><value name=“State“/><value name=“Tester”/><value name=“SUT”/></table></parcel>
图7示出了基于表14所包含的包定义所定义的几组值而构建的接口。在图7中,选择树结构以强调定义中描述的数据的层次性质。
表14
<parcel name=“bgpSessionData”<value name=“Type”/><set name=“Peers”><set name=“Tester”><value name=“IP address”/><value name=“AS number”/></set><set name=“SUT”><value name=“Ip address”/><value name=“AS number”/></set></set><set name=“Timers”><value name=“Hold time”/><value name=“Keep-alive time”/><value name=“Connection retry”/></set><set name=“Notification”><value name=“Error code”/><value name=“Error sub-code”/></set></parcel>
这些实施例中,不偏离本发明的原理和精神而可作出的改变的另一示例是,提供能够反复创建包实例的工具。例如,如果希望包之间有一个或更多值的区别这样的一系列包,那么可提供这样的迭代函数,其以相对的方式例如+1来定义这些包值。这样,可通过使用包迭代来使用单个的包而可参数化地生成很多不同的包。使用协议仿真应用的示例,希望创建仅用一个会话的包来定义的具有很多会话的会话池。这可通过用默认增量属性来标记XML模型中的某些值而实现。增量被用来对包的每个迭代调节每个值。例如,值可以指定默认增量“10”。如果在第一个包中值为50,当包被迭代一次时,值将是60。如果包被迭代两次,则值为70。还可以使用增量函数来计算默认增量。这使得可基于包中的其它值来智能地指定默认增量。

Claims (45)

1.一种用于从发送设备向接收设备传送数据的方法,包括:
准备对所述数据的结构的描述;
向所述发送设备和所述接收设备提供所述对所述数据的描述;
在运行时,使用所述对所述数据的描述,在所述发送和接收设备中的每一个上都创建所述数据结构的参考模型;
根据请求,利用所述发送设备上的数据来创建所述参考模型的实例;
将所述实例中的数据序列化;
将所述序列化数据从所述发送设备传送到所述接收设备;以及
基于所述参考模型,在所述接收设备上创建所述数据的实例。
2.如权利要求1所述的方法,其中所述准备对所述数据的结构的描述的步骤包括创建描述所述数据结构的XML文件。
3.如权利要求1所述的方法,其中所述对所述数据的结构的描述包括对外部处理的调用。
4.如权利要求1所述的方法,其中所述对所述数据的结构的描述包括基于所述数据结构中其它值的值。
5.如权利要求1所述的方法,其中所述准备对所述数据的结构的描述的步骤包括以层次状的方式来描述所述数据。
6.如权利要求1所述的方法,其中所述准备对所述数据的结构的描述的步骤包括使用表来描述所述数据。
7.如权利要求1所述的方法,其中所述准备对所述数据的结构的描述的步骤包括以层次状的方式并使用表来描述所述数据。
8.如权利要求1所述的方法,其中所述准备对所述数据的结构的描述的步骤包括使用定义了的元素例如值、数组、集合、表和键表来描述所述数据。
9.如权利要求1所述的方法,其中所述准备对所述数据的结构的描述的步骤包括定义用于保持值或其它元素的元素以及所述元素的属性。
10.如权利要求9所述的方法,其中所述属性包括所述元素的描述性名称、对所述元素的描述、所述元素的长度、所述元素的呈现格式,以及所述元素的可能值的范围。
11.如权利要求1所述的方法,其中所述创建参考模型的步骤包括
对所述数据的每个元素创建一个节点;以及
对所述参考模型的节点进行索引。
12.如权利要求11所述的方法,其中所述将所述数据序列化的步骤包括基于从其处取得数据的元素的节点的索引,以线性方式排序所述数据。
13.如权利要求1所述的方法,其中所述将所述数据序列化的步骤包括使用基于从其处取得数据的元素的节点的索引而以线性方式排序的数据来创建二进制文件。
14.如权利要求1所述的方法,其中所述将所述数据序列化的步骤包括创建XML文件。
15.一种使用协议仿真进行通信的方法,所述方法包括:
准备对控制所述协议仿真所需的数据的结构的描述;
向控制器和所述协议仿真提供所述对所述数据的描述;
在运行时,使用所述对所述数据的描述,在所述控制器和协议仿真中的每一个上都创建所述数据结构的参考模型;
根据请求,利用所述控制器上的数据来创建所述参考模型的实例;
将所述实例中的数据序列化;
将所述序列化数据从所述控制器传送到所述协议仿真;以及
基于所述参考模型,在所述协议仿真上创建所述数据的实例。
16.如权利要求15所述的方法,其中所述准备对所述数据的结构的描述的步骤包括创建描述所述数据结构的XML文件。
17.如权利要求15所述的方法,其中所述对所述数据的结构的描述包括对外部处理的调用。
18.如权利要求15所述的方法,其中所述对所述数据的结构的描述包括基于所述数据结构中其它值的值。
19.如权利要求15所述的方法,其中所述准备对所述数据的结构的描述的步骤包括以层次状的方式来描述所述数据。
20.如权利要求15所述的方法,其中所述准备对所述数据的结构的描述的步骤包括使用表来描述所述数据。
21.如权利要求15所述的方法,其中所述准备对所述数据的结构的描述的步骤包括以层次状的方式并使用表来描述所述数据。
22.如权利要求15所述的方法,其中所述准备对所述数据的结构的描述的步骤包括使用定义了的元素例如值、数组、集合、表和键表来描述所述数据。
23.如权利要求15所述的方法,其中所述准备对所述数据的结构的描述的步骤包括定义用于保持值或其它元素的元素以及所述元素的属性。
24.如权利要求23所述的方法,其中所述属性包括所述元素的描述性名称、对所述元素的描述、所述元素的长度、所述元素的呈现格式,以及所述元素的可能值的范围。
25.如权利要求15所述的方法,其中所述创建参考模型的步骤包括
对所述数据的每个元素创建一个节点;以及
对所述参考模型的节点进行索引。
26.如权利要求25所述的方法,其中所述将所述数据序列化的步骤包括基于从其处取得数据的元素的节点的索引,以线性方式排序所述数据。
27.如权利要求15所述的方法,其中所述将所述数据序列化的步骤包括使用基于从其处取得数据的元素的节点的索引而以线性方式排序的数据来创建二进制文件。
28.如权利要求15所述的方法,其中所述将所述数据序列化的步骤包括创建XML文件。
29.如权利要求15所述的方法,还包括:
根据请求,使用所述协议仿真上的第二组数据来创建所述参考模型的实例;
将所述实例中的所述第二组数据序列化;
将所述序列化的第二组数据从所述协议仿真传送到所述控制器;以及
基于所述参考模型,在所述控制器上创建所述第二组数据的实例。
30.如权利要求15所述的方法,其中所述数据包括命令、会话数据,以及拓扑中的至少一项。
31.如权利要求29所述的方法,其中所述第二组数据包括统计数据、拓扑,以及消息踪迹中的至少一项。
32.如权利要求15所述的方法,所述创建步骤包括:
使用所述控制器上的数据来创建所述参考模型的多个实例,其中每个实例基于用户所提供的指令而变化。
33.一种用于传送数据的系统,包括:
客户端计算机,包括对一组数据的结构的描述;
可在所述客户端计算机上运行的软件,该软件在运行时使用所述描述来创建所述结构的参考模型,并且根据请求而创建用一组数据填充的所述参考模型的实例;
可在所述客户端计算机上运行的通信软件,该通信软件对所述实例中的一组数据序列化并进行发送;以及
服务器,该服务器接收所述序列化的一组数据并基于所述参考模型,在接收设备上创建所述一组数据的实例。
34.如权利要求33所述的系统,其中所述所述服务器被提供了所述对所述数据的结构的描述,并使用所述描述来创建所述参考模型的拷贝。
35.如权利要求34所述的系统,其中所述客户端计算机在启动时向所述服务器提供所述描述。
36.如权利要求33所述的系统,其中所述服务器包括协议仿真器,所述数据包括命令、会话数据和拓扑信息。
37.如权利要求33所述系统,还包括:
可在所述服务器上运行的软件,所述软件使用对第二数据结构的结构的描述来创建所述第二数据结构的第二参考模型,并且根据请求,创建用第二组数据填充的所述第二参考模型实例;以及
可在所述服务器计算机上运行的通信软件,所述通信软件对所述实例中的所述第二组数据序列化并将所述序列化数据传输到所述客户端计算机。
38.如权利要求35所述的系统,其中所述服务器包括协议仿真器,所述第二组数据包括统计数据、拓扑,以及消息踪迹中的至少一项。
39.如权利要求33所述的系统,其中所述软件对所述参考模型进行多次实例化以创建多个对象。
40.如权利要求33所述的系统,其中每个对象以所定义的方式而不同于其它对象。
41.如权利要求33所述的系统,还包括:
用于以独立于所述数据的方式与所述软件相接口的应用程序接口。
42.如权利要求33所述的系统,还包括:
基于所述参考模型而动态构建接口的图形用户接口。
43.如权利要求33所述的系统,其中所述参考模型包括用于描述所述数据的属性。
44.如权利要求43所述的系统,还包括:
下述这样的图形用户接口,其基于包含在所述参考模型中的属性,动态构建用于显示所述参考模型的实例中的数据的接口。
45.一种用于控制协议仿真器的系统,包括:
用于将对用于控制所述协议仿真器的一组数据的结构的描述转换为所述结构的参考模型的装置;
用于实例化所述参考模型以产生用于保持所述数据组的对象的装置;
主机上的通信装置,用于对所述对象中的所述数据组进行序列化和发送;以及
用于接收所述序列化数据组并基于所述参考模型,在接收设备上创建所述数据组的实例的服务器装置;
其中所述协议仿真器根据所述所述服务器装置上的数据组来进行工作。
CNA2005100598919A 2004-05-21 2005-04-01 分布式数据模型 Pending CN1700665A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/851,303 US8086660B2 (en) 2004-05-21 2004-05-21 Distributed data model
US10/851,303 2004-05-21

Publications (1)

Publication Number Publication Date
CN1700665A true CN1700665A (zh) 2005-11-23

Family

ID=34465815

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2005100598919A Pending CN1700665A (zh) 2004-05-21 2005-04-01 分布式数据模型

Country Status (5)

Country Link
US (1) US8086660B2 (zh)
JP (1) JP4991124B2 (zh)
CN (1) CN1700665A (zh)
DE (1) DE102005013301A1 (zh)
GB (1) GB2414312A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101957851A (zh) * 2010-09-26 2011-01-26 清华大学 一种用于仿真系统的配置数据的存储管理方法和装置
CN102594583A (zh) * 2011-11-23 2012-07-18 华为技术有限公司 流量监测和切换的方法、装置及系统
CN103428192A (zh) * 2012-05-25 2013-12-04 腾讯科技(北京)有限公司 一种封装与解析二进制协议数据的方法和装置

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7984294B1 (en) * 2005-04-14 2011-07-19 Avaya Inc. Method and apparatus for trust based routing in data networks
WO2008054790A2 (en) * 2006-10-31 2008-05-08 Live Cargo, Inc. Systems and methods for optimized serialization
US8462369B2 (en) 2007-04-23 2013-06-11 International Business Machines Corporation Hybrid image processing system for a single field of view having a plurality of inspection threads
US8675219B2 (en) 2007-10-24 2014-03-18 International Business Machines Corporation High bandwidth image processing with run time library function offload via task distribution to special purpose engines
US9135073B2 (en) 2007-11-15 2015-09-15 International Business Machines Corporation Server-processor hybrid system for processing data
US9332074B2 (en) 2007-12-06 2016-05-03 International Business Machines Corporation Memory to memory communication and storage for hybrid systems
US8379963B2 (en) * 2008-03-28 2013-02-19 International Business Machines Corporation Visual inspection system
US8264972B2 (en) * 2008-05-30 2012-09-11 Spirent Communications, Inc. Method and apparatus for emulating network devices
US7958387B2 (en) 2008-05-30 2011-06-07 Spirent Communications, Inc. Realtime test result promulgation from network component test device
US9152740B1 (en) * 2012-01-18 2015-10-06 Msc.Software Corporation Interactive simulation and solver for mechanical, fluid, and electro-mechanical systems
US9652264B2 (en) * 2012-09-21 2017-05-16 Ixia Methods, systems, and computer readable media for providing a unified framework to support diverse data generation engines
US9628356B2 (en) * 2013-10-10 2017-04-18 Ixia Methods, systems, and computer readable media for providing user interfaces for specification of system under test (SUT) and network tap topology and for presenting topology specific test results
US9356855B2 (en) * 2013-10-10 2016-05-31 Ixia Methods, systems, and computer readable media for providing for specification or autodiscovery of device under test (DUT) topology information
US11182399B2 (en) 2018-09-04 2021-11-23 Spirent Communications, Inc. Effective correlation of multiple time-series result sets
US10917326B1 (en) 2019-08-23 2021-02-09 Keysight Technologies, Inc. Methods, systems, and computer readable media for debugging test traffic generation
DE102021200191B3 (de) 2021-01-11 2022-04-07 Geze Gmbh Verfahren zum Verarbeiten von Konfigurations-Daten einer Vielzahl von Entitäten, damit zusammenwirkende Verfahren und Vorrichtungen sowie Computerprogrammprodukt und Signalfolge

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4745593A (en) * 1986-11-17 1988-05-17 American Telephone And Telegraph Company, At&T Bell Laboratories Arrangement for testing packet switching networks
US5818603A (en) * 1996-03-29 1998-10-06 Ricoh Company, Ltd. Method and system for controlling and communicating with machines using multiple communication formats
US5680585A (en) * 1995-03-31 1997-10-21 Bay Networks, Inc. Method and apparatus for defining data packet formats
US5822520A (en) * 1995-12-26 1998-10-13 Sun Microsystems, Inc. Method and apparatus for building network test packets
US5948060A (en) 1997-01-24 1999-09-07 International Business Machines Corporation Speeding-up communication rates on links transferring data structures by a method of handing scatter/gather of storage blocks in commanded computer systems
JPH10285252A (ja) * 1997-02-10 1998-10-23 Advantest Corp 通信機器の試験・測定方法及び装置
US5961589A (en) * 1997-09-09 1999-10-05 Intel Corporation Emulation of analog modem signaling over IDSN for translation-less interoperability with PSTN based H.324 system
US6167537A (en) * 1997-09-22 2000-12-26 Hewlett-Packard Company Communications protocol for an automated testing system
US20010011215A1 (en) * 1998-08-31 2001-08-02 Scott A. Beeker Network device simulation system and method
US6654761B2 (en) * 1998-07-29 2003-11-25 Inxight Software, Inc. Controlling which part of data defining a node-link structure is in memory
US6373822B1 (en) * 1999-01-08 2002-04-16 Cisco Technology, Inc. Data network protocol conformance test system
US6356950B1 (en) * 1999-01-11 2002-03-12 Novilit, Inc. Method for encoding and decoding data according to a protocol specification
US6710893B1 (en) * 1999-11-02 2004-03-23 Ricoh Co., Ltd. Automated system and method of testing a facsimile machine
US20040268242A1 (en) * 2000-08-09 2004-12-30 Microsoft Corporation Object persister
JP2002108665A (ja) 2000-09-29 2002-04-12 Toshiba Information Systems (Japan) Corp 電子データ配信システム、データベース・タグ書式データ変換インターフェース、タグ名・セル名変換インターフェース、セルデータ書込みインターフェース及び電子データ配信方法
JP2002152206A (ja) * 2000-11-10 2002-05-24 Hitachi Ltd ルータ装置の検証方式
JP2002152317A (ja) * 2000-11-10 2002-05-24 Fujitsu Ltd 試験装置
US6993037B2 (en) * 2001-03-21 2006-01-31 International Business Machines Corporation System and method for virtual private network network address translation propagation over nested connections with coincident local endpoints
US20020156885A1 (en) * 2001-04-23 2002-10-24 Thakkar Bina Kunal Protocol emulator
US6928488B1 (en) * 2001-06-27 2005-08-09 Microsoft Corporation Architecture and method for serialization and deserialization of objects
JP3985944B2 (ja) 2001-11-22 2007-10-03 株式会社日立超エル・エス・アイ・システムズ ネットワーク装置およびプログラム
US8089888B2 (en) * 2001-12-10 2012-01-03 Qualcomm Incorporated Method and apparatus for testing traffic and auxiliary channels in a wireless data communication system
US20030156548A1 (en) * 2002-02-15 2003-08-21 Sapp Kevin Allen Methods and systems for testing throughput of a packet-based communications node
FR2836568A1 (fr) 2002-02-28 2003-08-29 Bull Sa Procede iteratif de serialisation d'objets logiciels structures
US7278061B2 (en) * 2002-10-08 2007-10-02 Agilent Technologies, Inc. Building packets of data for testing a communication network
US7970779B2 (en) * 2003-09-12 2011-06-28 Oracle International Corporation Application interface including dynamic transform definitions

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101957851A (zh) * 2010-09-26 2011-01-26 清华大学 一种用于仿真系统的配置数据的存储管理方法和装置
CN101957851B (zh) * 2010-09-26 2012-07-18 清华大学 一种用于仿真系统的配置数据的存储管理方法和装置
CN102594583A (zh) * 2011-11-23 2012-07-18 华为技术有限公司 流量监测和切换的方法、装置及系统
CN102594583B (zh) * 2011-11-23 2014-09-17 华为技术有限公司 流量监测和切换的方法、装置及系统
CN103428192A (zh) * 2012-05-25 2013-12-04 腾讯科技(北京)有限公司 一种封装与解析二进制协议数据的方法和装置

Also Published As

Publication number Publication date
DE102005013301A1 (de) 2006-02-16
US20050259594A1 (en) 2005-11-24
JP2005339538A (ja) 2005-12-08
GB2414312A (en) 2005-11-23
JP4991124B2 (ja) 2012-08-01
GB0504878D0 (en) 2005-04-13
US8086660B2 (en) 2011-12-27

Similar Documents

Publication Publication Date Title
CN1700665A (zh) 分布式数据模型
JP4509916B2 (ja) Snmp基盤のネットワーク管理装置および方法
CN1722681A (zh) 便携分布式应用框架
Gokhale et al. Measuring and optimizing CORBA latency and scalability over high-speed networks
US6836890B1 (en) Methods and systems for message translation and parsing of data structures in a distributed component architecture
US6170065B1 (en) Automatic system for dynamic diagnosis and repair of computer configurations
KR100845234B1 (ko) 통신 소프트웨어 구조에서의 도메인 프로파일 파싱 장치 및그 방법
KR20050001321A (ko) 분산 구축 환경의 소프트웨어 이미지 생성
JP2005348405A (ja) プロトコルエミュレータ
WO1995017064A1 (en) Object-oriented distributed communications directory service
CN1801097A (zh) 用于使用md4校验和链接跨机器事务的方法和系统
JP5398213B2 (ja) 生成装置、プログラムおよび生成方法
US8819135B2 (en) Method of performing data mediation, and an associated computer program product, data mediation device and information system
US7272836B1 (en) Method and apparatus for bridging service for standard object identifier based protocols
US7308684B2 (en) Classifying software and reformulating resources according to classifications
Brune et al. RSD—Resource and Service Description
CN109416683B (zh) 数据处理设备、数据库系统和数据库系统的通信操作方法
CN105574125B (zh) 基于ldapv3扩展操作的目录条目批量增删操作实现方法
Liu et al. Composition of Autonomous Services with Distributed Data Flows and Computations
Bossardt et al. Service deployment on high performance active network nodes
Perumalla et al. TED models for ATM internetworks
WO1995016956A1 (en) Object-oriented rule-based directory system
Chandranmenon Reducing internet latency using precomputed hints
Koberstein et al. Shared information spaces for small devices: The SWARMS software concept
Yücesan et al. A GENERAL SIMULATION ENVIRONMENT FOR IP MOBILITY

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication