SNMP_PP_CHS Charpter 19 - 21

1.         运行模式

SNMP++的设计(决定了它)支持多种运行模式。这些运行模式允许(用户)创建图形用户接口(GUI)以及控制台模式的应用。GUI运行模式与现有的GUI事件(驱动)系统协同工作;而控制台运行模式允许使用自定义的事件(驱动)系统,甚至不需要事件(驱动)系统。

1.1.        Microsoft Windows事件(驱动)系统的运作

为了在MS-Windows上使用,SNMP++MS-Windows消息系统协同工作。调用阻塞模式(可以)允许处理其他消息。

1.2.        Open Systems Foundation (OSF) X11 Motif的运作

X11接口与MS-Windows接口一样。在MS-WindowsX11各种版本上的SNMP++都支持阻塞和异步方式的使用。为了用SNMP++X11应用注册X11的上下文(context)需要一个额外的函数(该操作是为了在X11的事件系统上使用SNMP++)。这就要用到XtAppMainLoop()或类似的函数来显式地认可并分发所有异步的SNMP++事件。

·           The context parameter passed in is returned from a call to XtAppInitialize().

·           The return value is zero if the function is successful in registering with X11.

·           (需要)传入的上下文参数会由XtAppInitialize()的调用返回

·           如果对X11注册成功,则该函数返回零

//----------------[ initialize SNMP++ X11 Context ]--------------------------

int SNMPX11Initialize( XtAppContext context);

1.3.        不以GUI为基础的应用的运作

SNMP++的第三种运作模式是用文本形式构造的控制台应用。这些类型的应用上的操作也可以调用阻塞或异步的模式。SNMP++提供了一组函数调用来读取当前用到的文件描述符(socket handles)。调用者在它们各自的“select”调用中用到这些文件描述符。如果SNMP++文件描述符有一个挂起的事件,调用者将激活例行程序来处理所有挂起的事件。

SNMPGetFdSets

用以决定需要潜在地激活的文件描述符。该函数会填充读、写、异常模块,以便传递到“select”

//-------[ get file descriptor set from SNMP++ ]------------------------------------

void SNMPGetFdSets( int &maxfds,                          // max # of fds represented

                   fd_set &read_fds,                   // mask representing read actions

                   fd_set &write_fds,                   // mask representing write actions

                   fd_set &exceptfds);                   // mask representing exception actions

SNMPGetNextTimeout

用以决定下次出现超时事件的时间。该值可在阻塞操作中被用作最大间隔值。比如select在控制权返回之前必须等待(该间隔时间)。超时的计算的基础是:所有用户注册超时(user-registered time-outs)以及SNMP重发的时间间隔中最近的一次。

//---------[ Get the next time-out value ]----------------------------------------------------

unsigned long int SNMPGetNextTimeout( );         // returns value in 1/100 of seconds

SNMPProcessPendingEvents

用以处理目前所有的突出的(outstanding)事件。该函数会调用所有与已完成的超时、文件描述符或突出的(outstandingSNMP消息相关的回调。该函数是非阻塞的,在同一时候它只处理突出的(outstanding)事件。

//------[ process pending events ]----------------------------------------------------------

int SNMPProcessPendingEvents();


2.         状态&错误编号

当使用Snmp class操作的时候SNMP++提供了两种级别的错误(信息)。所有的Snmp class成员函数都返回一个状态值。“SNMP_CLASS_ERR_STATUS_SET”这个特别的错误值表明了Pdu发生了一个内部错误,必须用成员函数Pdu::get_error_status()来检索该错误(信息)。所有的SNMP++错误值都可传进成员函数Snmp::err_msg()以打印出该错误的文本描述。

SNMP++ General Errors

Value

Description

    SNMP_CLASS_SUCCESS

0

成功状态

    SNMP_CLASS_ERROR             

-1

普通错误

    SNMP_CLASS_RESOURCE_UNAVAIL   

-2

内存分配失败(Newmalloc

    SNMP_CLASS_INTERNAL_ERROR

-3

未知的内部错误

    SNMP_CLASS_UNSUPPORTED

-4

不支持的函数

Callback Reasons

 

 

    SNMP_CLASS_TIMEOUT

-5

明显的请求超时

    SNMP_CLASS_ASYNC_RESPONSE     

-6

收到应答

    SNMP_CLASS_NOTIFICATION  

-7

收到notification (trap/inform)

    SNMP_CLASS_SESSION_DESTROYED

-8

销毁Snmp对象

Snmp Class Errors

 

 

    SNMP_CLASS_INVALID      

-10

在无效的实例上调用了Snmp成员函数

    SNMP_CLASS_INVALID_PDU         

-11

向映像函数传递了无效的PDU

    SNMP_CLASS_INVALID_TARGET

-12

向映像函数传递了无效的target

    SNMP_CLASS_INVALID_CALLBACK

-13

向映像函数传递了无效的回调函数

    SNMP_CLASS_INVALID_REQID

-14

要取消的请求ID无效

    SNMP_CLASS_INVALID_NOTIFYID

-15

trap/inform Oid丢失

    SNMP_CLASS_INVALID_OPERATION

-16

指定的target不允许进行Snmp操作

    SNMP_CLASS_INVALID_OID       

-17

向映像函数传递了无效的Oid

    SNMP_CLASS_INVALID_ADDRESS

-18

向映像函数传递了无效的address

    SNMP_CLASS_ERR_STATUS_SET

-19

代理端返回带有错误信息的应答PDU

    SNMP_CLASS_TL_UNSUPPORTED

-20

不支持的传输

    SNMP_CLASS_TL_IN_USE

-21

传输被占用

    SNMP_CLASS_TL_FAILED

-22

传输失败


3.         错误状态值

SNMP++的成员函数返回值是“SNMP_CLASS_ERR_STATUS_SET”时,可以由成员函数Pdu::get_error_status()获取一个额外的错误状态。该值表示的是RFC 1905中实际的SMI PDU错误状态值。这些值可以传进成员函数Snmp::err_msg()以友好(的方式)描述。

Pdu Error Status Macro

Value

Description

SNMP_ERROR_TOO_BIG             

1

Pdu太大,查看错误索引

SNMP_ERROR_NO_SUCH_NAME        

2

没有对应的帮定变量名称,查看返回的错误索引

SNMP_ERROR_BAD_VALUE        

3

错误的帮定变量,查看返回的错误索引

SNMP_ERROR_READ_ONLY       

4

帮定变量是只读的,查看返回的错误索引

SNMP_ERROR_GENERAL_VB_ERR   

5

普通帮定变量错误,查看返回的错误索引

SNMP_ERROR_NO_ACCESS        

6

操作失败,拒绝访问

SNMP_ERROR_WRONG_TYPE      

7

操作失败,类型错误

SNMP_ERROR_WRONG_LENGTH    

8

操作失败,长度错误

SNMP_ERROR_WRONG_ENCODING   

9

操作失败,译码错误

SNMP_ERROR_WRONG_VALUE     

10

操作失败,值错误

SNMP_ERROR_NO_CREATION     

11

操作失败,拒绝创建

SNMP_ERROR_INCONSIST_VAL   

12

操作失败,值不相容

SNMP_ERROR_RESOURCE_UNAVAIL

13

操作失败,无法使用资源

SNMP_ERROR_COMITFAIL       

14

操作失败,提交失败

SNMP_ERROR_UNDO_FAIL       

15

操作失败,撤销失败

SNMP_ERROR_AUTH_ERR        

16

操作失败,权限错误

SNMP_ERROR_NOT_WRITEABLE   

17

操作失败,拒绝更改

SNMP_ERROR_INCONSIS_NAME   

18

操作失败,名字不相容

你可能感兴趣的:(云的SNMP++)