orbas(CORBA实现开源项目)

初识CORBA/SNMP网关


(来源:http://www2.ccw.com.cn/)

北方交通大学网络管理研究中心 李艳霞

CORBA(通用对象请求代理体系结构)是OMG定义的软件体系结构,它允许软件对象之间互相作用,而不管它们的位置、主机的类型或编程语言。1999年春兴起了将CORBA应用于TMN的热潮,许多企业开始为特定的网络技术(如ATM和SONET/SDH)定义基于CORBA的网络管理接口。最近几年,CORBA在开发大型分布式软件的过程中也起到了越来越重要的作用。利用CORBA可以很方便地实现DCOM、WWW、Java、SNMP以及CMIP的集成与互操作(如右图所示)。

由此可见,对于开发大型的分布式综合网络管理平台,CORBA是最佳选择。

在当前的通信网络中,遵循传统标准的网络设备仍占有相当大的比例,因此将CORBA应用到网络管理系统中时,必须考虑以CORBA为中心开发出来的运行系统的框架与基于已有标准建立的管理系统之间的交互问题。以CORBA为中心的运行系统要管理传统的标准网络资源,必须通过网关进行通信协议的转换。在这种体系结构中目前有两个标准的接口—TMN Q3和Internet SNMP接口,相应的是CORBA/CMIP(公共管理信息协议)网关和CORBA/SNMP(简单网管协议)网关(如右图所示)。本文将重点讨论CORBA/SNMP网关的理论规范与实现技术。

理论规范

在CORBA/SNMP网关中,管理者就是CORBA的客户方。它扩充了CORBA的命名、事件以及接口库等对象服务,使得远程SNMP代理看似CORBA服务程序。

CORBA/SNMP网关为CORBA应用程序与SNMP代理之间的交互提供了接口。 CORBA域的应用程序员不必懂SNMP,因为网关对于上层CORBA的应用程序员是透明的。从CORBA域的角度看,该网关相当于CORBA服务端程序;从SNMP代理的角度看,该网关相当于SNMP管理程序。

CORBA/SNMP网关体现的是CORBA管理域与SNMP代理域之间的互操作性。该互操作规范在JIDM(联合域间管理)中有定义,包括静态翻译和交互翻译两个部分。

1. 静态翻译

1998年,国际组织NMF和The OpenGroup联合制定了“Inter-domain Management: Specification Translation”,简称XoJIDM。它给出了由ASN.1到IDL、由GDMO到IDL、由IDL到ASN.1和GDMO以及SNMP SMI到IDL的翻译语法。CORBA/SNMP网关使用SNMP SMI到IDL的翻译部分,这一部分主要描述了ASN.1的类型和SMI宏怎样映射为IDL的类型和接口,适用于SNMPv1、SNMPv2、SNMPv3等不同SNMP版本的MIB信息模块。

2.互交翻译

简称JIDMi,它定义了一系列的接口,并规定了这些接口的行为,主要给出运行时各管理域之间的交互过程及实现。它主要分为三个部分:JIDM设施、OSI管理设置、SNMP管理设施。在CORBA/SNMP网关中主要使用JIDM设施和SNMP管理设施。

● JIDM设施

JIDM设施提供通用的“管理者-代理”框架,其IDL接口定义都在JIDM模块中。JIDM模块定义了所有特殊管理设施共有的接口,包括管理域的接入、事件的上报以及对象创建的通用方法。其中,供管理应用程序使用的JIDM接口如下:

JIDM::ProxyAgent接口

JIDM::ProxyAgentController接口

JIDM::ProxyAgentFinder接口

JIDM::EventPort接口

JIDM::EventPortFactory接口

供代理应用程序使用的JIDM接口如下:

JIDM::DomainPort接口

JIDM::DomainPortFactory接口

JIDM::EventPortFinder接口

由于其通用性,JIDM接口不具备每个系统参考模型的特性,这是因为:

第一, 有些管理参考模型的特性在另一些系统参考模型中不存在。

第二, 不同的管理参考模型对同一功能的实现方式不同。

● SNMP管理设施

JIDM互操作规范把与系统管理参考模型相关的特性放在具体的管理设施模块中进行定义。SNMP管理设施在SNMPMgmt模块中进行定义,主要描述了SNMP域中的命名、消息和事件(陷阱或通知)与CORBA域中的命名、操作调用和事件的相互映射。SNMPMgmt模块在JIDM模块的基础上,定义了SNMP特有的部分,其接口和服务适用于开发基于CORBA的SNMP管理应用程序。这些接口包括:

SNMPMgmt::ProxyAgent

SNMPMgmt::SmiEntry

SNMPMgmt::GenericFactory

SNMPMgmt::NamingContext

SNMPMgmt::SmiTableIterator

SNMPMgmt::GetNextEntryIterator

由于在静态翻译的过程中,并不是所有的 SMI信息都转换为 CORBA IDL,有些信息在转换的过程中被丢失了,如OID信息。而且,利用CORBA接口库(IFR)访问SMI的原信息也很不方便。因此,JIDM互操作规范在CORBA接口库(IFR)之上又定义了SMI特有的库接口,称为SMI库,在SNMP MIR模块中定义。SMI库包括两个部分,OID库和SMI宏库。OID库提供OID的层次化信息以及各层OID对应的字符名称;SMI宏库提供SMI模块的原信息以及组、表目、变量的宏信息。

实现技术

在实现的时候,把静态翻译部分和动态(交互)翻译部分分开实现比较方便。静态翻译部分相当于编译器,可以用C语言实现语法、语义的分析,把基于SMI的MIB信息转换为IDL文件。

在实现CORBA/SNMP网关的动态翻译部分时,可根据具体需要实现不同的接口。

1. 管理应用程序端

● 主要需要实现以下接口:

JIDM::ProxyAgentFinder

SNMPMgmt::ProxyAgent

SNMPMgmt::NamingContext

CosLifeCycle::FactoryFinder

SNMPMgmt::GenericFactory

SNMPMgmt::SMIEntry

● 使用为SNMP定义的特有MO接口。

● 如果需要,实现JIDM::ProxyAgent Controller对象的接口和行为。

● 如果要在管理端接收事件,则需实现JIDM::EventPortFinder接口,以访问管理域的CosEventChannelAdmin::SupplierAdmin对象。

在管理应用程序端,CORBA域和SNMP域之间的互操作可以通过4种方法来实现: 利用SNMP协议版本专有的IDL接口

利用CORBA对象的DII/DSI

利用PropertySet接口访问MIB

利用SMI到IDL的映射生成的stub

其中,最常用的是利用CORBA对象的DII/DSI或利用SMI到IDL的映射生成的stub。

2. 代理端

● 主要需要实现以下接口:

JIDM::ProxyAgentFinder

SNMPMgmt::ProxyAgent

SNMPMgmt::NamingContext

CosLifeCycle::FactoryFinder

SNMPMgmt::SMIEntry

● 实现MO特有的接口。

● 如果需要在代理端创建对象,则需实现SNMPMgmt::GenericFactory接口。

● 如果代理需要发送事件,则需执行客户端JIDM::EventPortFinder对象的行为,并把事件传给相应的CosEventChannelAdmin::SupplierAdmin接口。

除此以外,对于CORBA/SNMP网关还需实现SNMP MIR模块的接口。

为了方便实现以上的接口,还需自定义一些IDL接口,如SnmpNaming.idl、SnmpGateway.idl、SNMPNotifications.idl以及SnmpService.idl等。

最后,是要选择一门合适的语言来实现。考虑到软件的可移植性,可以选择用Java来实现,并选择用VisiBroker for Java来编写服务程序与客户应用程序。