⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc1228.txt

📁 著名的RFC文档,其中有一些文档是已经翻译成中文的的.
💻 TXT
📖 第 1 页 / 共 5 页
字号:
Carpenter & Wijnen                                             [Page 18]RFC 1228                        SNMP-DPI                        May 1991VARIABLE TYPE VALUES   The variable type field can have the following values:+----------------------------------------------------------------------+| Table 12. Valid values for the Value Type field                      |+-------+--------------------------------------------------------------+| VALUE | VALUE TYPE                                                   |+-------+--------------------------------------------------------------+| 0     | text representation                                          |+-------+--------------------------------------------------------------+| 129   | number (integer)                                             |+-------+--------------------------------------------------------------+| 2     | octet string                                                 |+-------+--------------------------------------------------------------+| 3     | object identifier                                            |+-------+--------------------------------------------------------------+| 4     | empty (no value)                                             |+-------+--------------------------------------------------------------+| 133   | internet address                                             |+-------+--------------------------------------------------------------+| 134   | counter (unsigned)                                           |+-------+--------------------------------------------------------------+| 135   | gauge (unsigned)                                             |+-------+--------------------------------------------------------------+| 136   | time ticks (1/100ths seconds)                                |+-------+--------------------------------------------------------------+| 9     | display string                                               |+-------+--------------------------------------------------------------++----------------------------------------------------------------------+   NOTE:  Fields which represent values that are stored as a 4-byte   integer are indicated by ORing their base type value with 128.Error Code Values for SNMP Agent Detected Errors   The error code can have one of the following values:Carpenter & Wijnen                                             [Page 19]RFC 1228                        SNMP-DPI                        May 1991+----------------------------------------------------------------------+| Table 13. Valid values for the SNMP Agent Minor Error Code field     |+-------+--------------------------------------------------------------+| VALUE | SNMP AGENT ERROR CODE                                        |+-------+--------------------------------------------------------------+| 0     | no error                                                     |+-------+--------------------------------------------------------------+| 1     | too big                                                      |+-------+--------------------------------------------------------------+| 2     | no such name                                                 |+-------+--------------------------------------------------------------+| 3     | bad value                                                    |+-------+--------------------------------------------------------------+| 4     | read only                                                    |+-------+--------------------------------------------------------------+| 5     | general error                                                |+-------+--------------------------------------------------------------++----------------------------------------------------------------------+SNMP DPI APPLICATION PROGRAM INTERFACE   This section documents an API that implements the SNMP DPI.  This   information has been previously published [6, 8], but the information   provided below is more current as of May 14, 1991.OVERVIEW OF REQUEST PROCESSINGGET PROCESSING   A GET request is the easiest to process.  When the DPI packet is   parsed, the parse tree holds the object ID of the variable being   requested.   If the specified object is not supported by the sub-agent, it would   return an error indication of "no such name".  No name/type/value   information would be returned.        unsigned char *cp;        cp = mkDPIresponse(SNMP_NO_SUCH_NAME,0);   If the object is recognized, then the sub-agent creates a parse tree   representing the name/type/value of the object in question (using the   DPI API routine mkDPIset()), and returns no error indication.  This   is demonstrated below (a string is being returned).Carpenter & Wijnen                                             [Page 20]RFC 1228                        SNMP-DPI                        May 1991        char *obj_id;        unsigned char *cp;        struct dpi_set_packet *ret_value;        char *data;        /* obj_id = object ID of variable, like 1.3.6.1.2.1.1.1 */        /* should be identical to object ID sent in get request */        data = "a string to be returned";        ret_value = mkDPIset(obj_id,SNMP_TYPE_STRING,                        strlen(data)+1,data);        cp = mkDPIresponse(0,ret_value);SET PROCESSING   Processing a SET request is only slightly more difficult than a GET   request.  In this case, additional information is made available in   the parse tree, namely the type, length and value to be set.   The sub-agent may return an error indication of "no such name" if the   variable is unrecognized, just as in a GET request.  If the variable   is recognized, but cannot be set, an error indication of "no such   name" should be also be returned, although it is tempting to return a   "read only" error.GET NEXT PROCESSING   GET-NEXT requests are the most complicated requests to process.   After parsing a GET-NEXT request, the parse tree will contain two   parameters.  One is the object ID on which the GET-NEXT operation is   being performed.  The semantics of the operation are that the sub-   agent is to return the name/type/value of the next variable it   supports whose name lexicographically follows the passed object ID.   It is important to realize that a given sub-agent may support several   discontiguous sections of the MIB tree.  In such a situation it would   be incorrect to jump from one section to another.  This problem is   correctly handled by examining the second parameter which is passed.   This parameter represents the "reason" why the sub-agent is being   called.  It holds the prefix of the tree that the sub-agent had   indicated it supported.   If the next variable supported by the sub-agent does not begin with   that prefix, the sub-agent must return an error indication of "no   such name".  If required, the SNMP agent will call upon the sub-agent   again, but pass it a different group prefix.  This is illustrated in   the discussion below:Carpenter & Wijnen                                             [Page 21]RFC 1228                        SNMP-DPI                        May 1991   Assume there are two sub-agents.  The first sub-agent registers two   distinct sections of the tree, A and C.  In reality, the sub-agent   supports variables A.1 and A.2, but it correctly registers the   minimal prefix required to uniquely identify the variable class it   supports.   The second sub-agent registers a different section, B, which appears   between the two sections registered by the first agent.   If a remote management station begins dumping the MIB, starting from   A, the following sequence of queries would be performed:     Sub-agent 1 gets called:            get-next(A,A) == A.1            get-next(A.1,A) = A.2            get-next(A.2,A) = error(no such name)     Sub-agent 2 is then called:            get-next(A.2,B) = B.1            get-next(B.1,B) = error(no such name)     Sub-agent 1 gets called again:            get-next(B.1,C) = C.1REGISTER REQUESTS   A sub-agent must register the variables it supports with the SNMP   agent.  The appropriate packets may be created using the DPI API   library routine mkDPIregister().         unsigned char *cp;         cp = mkDPIregister("1.3.6.1.2.1.1.2.");NOTE:  object IDs are registered with a trailing dot (".").TRAP REQUESTS   A sub-agent can request that the SNMP agent generate a trap for it.   The sub-agent must provide the desired values for the generic and   specific parameters of the trap.  It may optionally provide a   name/type/value parameter that will be included in the trap packet.   The DPI API library routine mkDPItrap() can be used to generate the   required packet.Carpenter & Wijnen                                             [Page 22]RFC 1228                        SNMP-DPI                        May 1991DPI API LIBRARY ROUTINES   This section documents Application Program Interfaces to the DPI.   QUERY_DPI_PORT()     int port;     char *hostname, *community_name;     port = query_DPI_port(hostname, community_name);   The query_DPI_port() function is used by a DPI client to determine   what TCP port number is associated with the DPI.  This port number is   needed to connect() to the SNMP agent.  If the port cannot be   determined, -1 is returned.   The function is passed two arguments:  a string representing the   host's name or IP address and the community name to be used when   making the request.   This function enables a DPI client to "bootstrap" itself.  The port   number is obtained via an SNMP GET request, but the DPI client does   not have to be able to create and parse SNMP packets--this is all   done by the query_DPI_port() function.   NOTE:  the query_DPI_port() function assumes that the community name   does not contain any null characters.  If this is not the case, use   the _query_DPI_port() function which takes a third parameter, the   length of the community name.MKDPIREGISTER     #include "snmp_dpi.h"     unsigned char *packet;     int len;     /* register sysDescr variable */     packet = mkDPIregister("1.3.6.1.2.1.1.1.");     len = *packet * 256 + *(packet + 1);     len += 2;  /* include length bytes */   The mkDPIregister() function creates the necessary register-request   packet and returns a pointer to a static buffer holding the packet   contents.  The null pointer (0) is returned if there is an error   detected during the creation of the packet.Carpenter & Wijnen                                             [Page 23]RFC 1228                        SNMP-DPI                        May 1991   The length of the remainder packet is stored in the first two bytes   of the packet, as demonstrated in the example above.   NOTE:  object identifiers are registered with a trailing dot (".").MKDPISET     #include "snmp_dpi.h"     struct dpi_set_packet *set_value;     char *obj_id;     int type, length;     char *value;     set_value = mkDPIset(obj_id, type, length, value);   The mkDPIset() function can be used to create the portion of a parse   tree that represents a name/value pair (as would be normally be   returned in a response packet).  It returns a pointer to a   dynamically allocated parse tree representing the name/type/value   information.  If there is an error detected while creating the parse   tree, the null pointer (0) is returned.   The value of type can be one of the following (which are defined in   the include file "snmp_dpi.h"):      o   SNMP_TYPE_NUMBER      o   SNMP_TYPE_STRING      o   SNMP_TYPE_OBJECT      o   SNMP_TYPE_INTERNET      o   SNMP_TYPE_COUNTER      o   SNMP_TYPE_GAUGE      o   SNMP_TYPE_TICKS   The value parameter is always a pointer to the first byte of the   object's value.   NOTE:  the parse tree is dynamically allocated and copies are made of   the passed parameters.  After a successful call to mkDPIset(), they   can be disposed of in any manner the application chooses without   affecting the parse tree contents.MKDPIRESPONSE     #include "snmp_dpi.h"     unsigned char *packet;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -