SNMP_PP_CHS Charpter 6 - 7

1.         SNMP Syntax Classes

SNMP++SNMP Syntax的对象模型(Object Modeling Technique)视图

SNMP++SNMP syntax classe描绘了一个(具有)C++面向对象风格的视图。(即)用于(描述)SNMPSMIASN.1的数据类型视图。它包含了映射到对应的SMI类型的一组类的集合。而且为了方便使用,还引入了一些非SMI的类。SNMP++为这些SNMP数据类型提供了强大、简单易用的接口。下表概要地描述了各种SNMP++ syntax classes

SNMP++ Syntax Class Name

Class Description

SMI or ASN.1 Counter part

SnmpSyntax

Parent of all syntax classes.

No ASN.1 counter part, used for OO structure.

Oid

Object identifier class.

ASN.1 Object Identifier.

OctectStr

Octet string class.

ASN.1 Octet string.

Uint32

Unsigned 32 bit integer class.

SMI unsigned 32 bit integer.

TimeTicks

TimeTicks class.

SMI time ticks.

Counter32

32 bit counter class.

SMI 32 bit counter.

Gauge32

32 bit gauge class.

SMI 32 bit gauge.

Int32

Signed 32 bit integer.

SMI 32 bit signed integer.

Counter64

64 bit counter class.

SMI 64 bit counter.

Address

Abstract address class.

No ASN.1 counter part used for OO structure.

IpAddress

IP address class.

SMI IP address.

UdpAddress

UdpAddress class

SMI IP address with port specification.

IpxAddress

IPX address class.

No ASN.1 or SMI counter part

IpxSockAddress

IPX Address class with socket number.

No ASN.1 or SMI counter part

MacAddress

MAC address class.

SMI counter part

GenAddress

Generic Address

No ASN.1 or SMI counter part.

 

2.         Object Id Class

SNMP++Oid Class的对象模型(Object Modeling Technique)视图

2.1.        对象标识符类

对象标识符类(Oid)封装了SMI的对象标识。信息管理库(MIB)中所定义的SMI的对象是一种在MIB中找到的数据元素的数据标识。与SMI Oid相关的结构和函数,自然都是面向对象的。事实上Oid classC++String class有许多共同之处。如果你熟悉C++String class或者MFCCString class,那么你就会感觉Oid class用起来很亲切、简单。Oid class被设计成了快速有效的类;它可以定义和操作对象标识;不依赖现有的 SNMP API,完全是可移植的;可以在任何ANSI C++编译器上进行编译。

2.2.        Oid Class的成员函数列表

Oid Class Member Functions

Description

Constructors

 

     Oid::Oid( void);

构造一个空的的Oid

     Oid::Oid( const char *dotted_string);

用带点的字符串构造新的Oid

     Oid::Oid( const Oid &oid);

用已有的Oid构造新的Oid

     Oid::Oid( const unsigned long *data, int len);

通过一个指针和长度来构造一个新的Oid

Destructor

 

     Oid::~Oid( );

销毁一个Oid,释放所有的堆

Overloaded Operators

 

     Oid & operator = ( const char *dotted_string);

将一个带点的字符串付给一个Oid

     Oid & operator = ( const Oid &oid);

将一个Oid付给另一个Oid

     int operator == ( const Oid &lhs, const Oid& rhs);

判断两个Oid是否相等

     int operator == ( const Oid& lhs, const char*dotted_string);

判断一个Oid是否和一个带点的字符串相等

     int operator != ( const Oid &lhs, const Oid& rhs);

判断两个Oid是否不等

     int operator != ( const Oid & lhs, const char *dotted_string);

判断一个Oid是否和一个带点的字符串不相等

     int operator < ( const Oid &lhs, const Oid& rhs);

判断一个Oid是否比另一个小

     int operator < ( const Oid &lhs, const char *dotted_string);

判断一个Oid是否比一个带点的字符串小

     int operator <=( const Oid &lhs,const Oid &rhs);

判断一个Oid是否小于等于另一个

     int operator <= ( const Oid &lhs, const char *dotted_string);

判断一个Oid是否小于等于一个带点的字符串

     int operator > ( const Oid &lhs, const Oid &rhs);

判断一个Oid是否比另一个大

     int operator > ( const Oid &lhs, const char * dotted_string);

判断一个Oid是否比一个带点的字符串大

     int operator >= ( const Oid&lhs, const Oid &rhs);

判断一个Oid是否大于等于另一个

     int operator >= ( const Oid &lhs, const char* dotted_string);

判断一个Oid是否大于等于一个带点的字符串

     Oid& operator += ( const char *dotted_string);

将一个带点的字符串加到一个Oid后面

     Oid& operator +=( const unsigned long i);

将一个整数加到一个带点的Oid字符串后面

     Oid& operator+=( const Oid& oid);

将一个Oid加到另一个Oid后面

     unsigned long &operator [ ] ( int position);

Access an individual sub-element of an Oid, read or write.

访问Oid的一个独立子单元

Output Member Functions   

 

     char * get_printable( const unsigned int n);

返回一个Oidn个带点格式的子单元

     char *get_printable( const unsigned long s, const unsigned long n);

返回从s开始,以点号分割的n个子单元

     char *get_printable();

返回以点号分割的Oid字符串

     operator char *();

同上

Miscellaneous Member Functions

 

     set_data (const unsigned long *data,const unsigned long n);

用指针和长度来设置一个Oid

     unsigned long len( );

返回Oid中子单元的个数(长度)

     trim(  const unsigned long n=1);

删除Oid最右边的n个子单元,默认删除1

     nCompare( const unsigned long n, const Oid& oid);

从左至右比较Oid的前n个子单元

     RnCompare( const unsigned long n, const Oid& oid);

从右至左比较Oid的后n个子单元

     int valid( );

返回Oid的有效性

2.3.        一些Oid Class的例子

下面的例子展示了Oid Class的不同用法。Oid Class不需要依赖其他库和模块。下列代码在ANSI/ISO C++上编译通过

#include “oid.h”

void oid_example()

{

   // construct an Oid with a dotted string and print it out

   Oid o1(" 1.2.3 .4.5.6.7.8.9.1");

   cout << “o1= “ << o1.get_printable ();

   // construct an Oid with another Oid and print it out

   Oid o2(o1);

   cout << “o2=  << o2.get_printable();

   // trim o 2’ s last value and print it out

   o2.trim(1);

   cout <<  “o2=  ” << o2.get_printable();

 

   // add a 2 value to the end of o2 and print it out

   o2+=2;

   cout << “o2=  ” << o2.get_printable();

 

   // create a new Oid, o3

   Oid o3;

   // assign o 3 a value and print it out

   o3=" 1.2.3 .4.5.6.7.8.9.3";

   cout << “o3= ” << o3.get_printable();

 

   // create o4

   Oid o4;

   // assign o4 o 1’ s value

   o4=o1;

 

   // trim off o4 by 1

   o4.trim(1);

 

   // concat a 4 onto o4 and print it out

   o4+=” .4” ;

   cout <<  “o4= ” << o4.get_printable();

 

   // make o5 from o1 and print it out

   Oid o5(o1);

   cout << “o5= ” << o5.get_printable();



 

   // compare two not equal oids

   if (o1==o2)   cout << "O1 EQUALS O2";

   else    cout << "o1 not equal to o2";

              

   // print out a piece of o1

   cout << "strval(3) of O1 = “ << o1.get_printable(3);

 

   // print out a piece of o1

   cout << "strval(1,3) of O1 = “ << o1.get_printable(1,3);

 

   // set o1's last subid

   o1[ o1.len()-1] = 49;

   cout << "O1 modified = “ << o1.get_printable();

 

   // set o1's 3rd subid

   o1[2]=49;

   cout << "O1 modified = “ << o1.get_printable();

  

   // get the last subid of 02

   cout << "last of o2 = “ << o2[o2.len()-1];

  

   // get the 3rd subid of 02

   cout << "3rd of o2 = “ << o2[2];

  

   // ncompare

   if (o1.nCompare(3,o2))

      cout << "nCompare o1,o2,3 ==";

   else

     cout << "nCompare o1,o2,3 !=";                

    

   // make an array of oids

   Oid oids[30]; int w;

   for ( w=0;w<30;w++)                          

   {

     oids[w] = "300.301.302.303.304.305.306.307";

     oids[w] += (w+1);

   }  

   for (w=0;w<25;w++)

   {

     sprintf( msg,"Oids[%d] = %s",w, oids[w].get_printable());

     printf(“%s”,msg, strlen(msg));

    } 

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值