| .TH SNMP_SESS_API 3 "19 May 2011" VVERSIONINFO "Net-SNMP" |
| .SH NAME |
| snmp_sess_init, snmp_sess_open, snmp_sess_session, |
| snmp_sess_send, snmp_sess_async_send, |
| snmp_sess_select_info, snmp_sess_read, |
| snmp_sess_timeout, snmp_sess_synch_response, |
| snmp_sess_close, snmp_sess_error - session functions |
| .SH SYNOPSIS |
| .B #include <net-snmp/session_api.h> |
| .PP |
| .BI "void snmp_sess_init(struct snmp_session *" session ");" |
| .PP |
| .BI "void *snmp_sess_open(struct snmp_session *" session ");" |
| .PP |
| .BI "struct snmp_session *snmp_sess_session(void *" handle ");" |
| .PP |
| .BI "int snmp_sess_send(void *" handle ", struct snmp_pdu *" pdu ");" |
| .PP |
| .BI "int snmp_sess_async_send(void *" handle "," |
| .br |
| .BI " struct snmp_pdu *" pdu ", " |
| .br |
| .BI " snmp_callback " callback ", " |
| .br |
| .BI " void *" callbackData ");" |
| .PP |
| .BI "int snmp_sess_select_info(void *" handle "," |
| .br |
| .BI " int *" numfds ", fd_set *" fdset ", " |
| .br |
| .BI " struct timeval *" timeout ", " |
| .br |
| .BI " int *" block ");" |
| .PP |
| .BI "int snmp_sess_read(void *" handle ", fd_set *" fdset ");" |
| .PP |
| .BI "void snmp_sess_timeout(void *" handle ");" |
| .PP |
| .BI "int snmp_sess_synch_response(void *" handle "," |
| .br |
| .BI " struct snmp_pdu *" pdu ", " |
| .br |
| .BI " struct snmp_pdu **" response ");" |
| .PP |
| .BI "int snmp_sess_close(void *" handle ");" |
| .PP |
| .BI "void snmp_sess_error(void *" handle ", int *" pcliberr ", " |
| .br |
| .BI " int *" psnmperr ", char **" pperrstring ");" |
| .SH DESCRIPTION |
| These functions define a subset of the API that can be used |
| to manage single SNMP sessions in a multi-threaded application. |
| Except for |
| .BR snmp_sess_session() , |
| these functions are single session versions of the traditional |
| SNMP library API. |
| .PP |
| Note that these functions use an opaque pointer |
| .RI ( handle |
| in the above prototypes) to identify a single session in lieu of a |
| .I session |
| pointer (as in the traditional API). |
| .PP |
| .B snmp_sess_init() |
| prepares a struct snmp_session that sources transport characteristics |
| and common information that will be used for a set of SNMP transactions. |
| After this structure is passed to |
| .B snmp_sess_open() |
| to create an SNMP session, the structure is no longer used. Instead |
| the opaque pointer returned by |
| .B snmp_sess_open() |
| is used to refer to that session henceforth. |
| .PP |
| SNMP sessions that are created with |
| .B snmp_sess_open() |
| are not affected by, and SHOULD NOT BE USED WITH, |
| .BR snmp_select_info() ", " snmp_read() ", " snmp_timeout() " nor" |
| .BR snmp_close() . |
| Rather the equivalent single session functions described here should |
| be used. |
| .PP |
| .B snmp_sess_init() |
| and |
| .B snmp_sess_open() |
| each take as input a pointer to a struct snmp_session object. |
| This structure contains information for a set of transactions that |
| will share similar transport characteristics. |
| .B snmp_sess_session() |
| takes the opaque session handle and returns a pointer to |
| its associated struct snmp_session. |
| .PP |
| .B snmp_sess_send() |
| and |
| .B snmp_sess_async_send() |
| each take a |
| .I pdu |
| parameter, which points to a struct snmp_pdu object containing |
| information that describes a transaction that will be performed over |
| an open session. |
| .PP |
| Consult snmp_api.h for the definitions of these structures. |
| .PP |
| With the |
| .I snmp_sess_async_send() |
| call, |
| .I snmp_sess_read() |
| will invoke the specified callback when the response is received. |
| .PP |
| .BR snmp_sess_select_info() ", " snmp_sess_read() " and " snmp_sess_timeout() |
| provide an interface for the use of the |
| .BR select (2) |
| system call so that SNMP transactions for a single session can occur |
| asynchronously. |
| .PP |
| .B snmp_sess_select_info() |
| is passed the information that would have been passed to |
| .BR select (2) |
| in the absence of SNMP. For example, this might include file |
| descriptors associated with the main loop of a graphical |
| application. This information is modified so that SNMP will get the |
| service it requires from the call to |
| .BR select (2). |
| In this case, |
| .IR numfds ", " fdset " and " timeout |
| correspond to the |
| .IR nfds ", " readfds " and " timeout |
| arguments to |
| .BR select (2) |
| respectively. The only exception is that timeout must ALWAYS point to |
| an allocated (but perhaps uninitialized) |
| .I struct timeval |
| (it cannot be NULL as for |
| .BR select (2)). |
| If |
| .I timeout |
| would have been passed as NULL, |
| .I block |
| is instead set to true, and |
| .I timeout |
| is treated as undefined. This same rule applies upon return from |
| .BR snmp_select_info() . |
| .PP |
| After calling |
| .B snmp_sess_select_info() , |
| .BR select (2) |
| should be called with the returned data. When it returns, |
| .B snmp_sess_read() |
| should then be called with the |
| .I fd_set |
| returned from |
| .BR select (2). |
| This will read any input from this session's SNMP socket. If |
| .BR select (2) |
| times out (that is, it returns zero), |
| .B snmp_sess_timeout() |
| should be called to see if a timeout has occurred on the SNMP |
| session. |
| .PP |
| .I snmp_sess_synch_response |
| is a convenience routine that will send the request, |
| wait for the response and process it before returning. |
| See the descriptions of |
| .I "snmp_sess_send" ", " "snmp_sess_read" |
| etc for details. |
| .SH DIAGNOSTICS |
| .PP |
| Error return status from |
| .B snmp_sess_open() |
| is indicated by return of a NULL pointer. |
| Error return status from |
| .B snmp_sess_close() |
| and |
| .B snmp_sess_send() |
| is indicated by a return value of 0. A successful status will return |
| 1. |
| .PP |
| Further information can be obtained by using |
| .B snmp_sess_error() |
| to see what type of error has occurred. This function returns the |
| SNMP |
| .I snmp_errno |
| variable, the value of the system |
| .I errno |
| variable, and a string interpretation of both variables. The string |
| must be freed after use by the caller. |
| .PP |
| For errors returned by |
| .BR snmp_sess_open() , |
| use the corresponding function |
| .B snmp_error() |
| instead of |
| .BR snmp_sess_error() . |
| .PP |
| Consult snmp_api.h for the complete set of SNMP library |
| error values. |
| The SNMP library error value |
| .IR snmperr |
| can be one of the following values: |
| .RS 2n |
| .IP SNMPERR_GENERR \w'SNMPERR_BAD_REPETITIONS'u+2n |
| A generic error occurred. |
| .IP SNMPERR_BAD_LOCPORT \w'SNMPERR_BAD_REPETITIONS'u+2n |
| The local port was bad because it had already been |
| allocated or permission was denied. |
| .IP SNMPERR_BAD_ADDRESS \w'SNMPERR_BAD_REPETITIONS'u+2n |
| The host name or address given was not useable. |
| .IP SNMPERR_BAD_SESSION \w'SNMPERR_BAD_REPETITIONS'u+2n |
| The specified session was not open. |
| .IP SNMPERR_TOO_LONG \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .IP SNMPERR_NO_SOCKET \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .IP SNMPERR_V2_IN_V1 \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .IP SNMPERR_V1_IN_V2 \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .IP SNMPERR_BAD_REPEATERS \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .IP SNMPERR_BAD_REPETITIONS \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .IP SNMPERR_BAD_ASN1_BUILD \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .IP SNMPERR_BAD_SENDTO \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .IP SNMPERR_BAD_RCVFROM \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .IP SNMPERR_BAD_PARSE \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .IP SNMPERR_BAD_VERSION \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .IP SNMPERR_BAD_COMMUNITY \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .IP SNMPERR_NOAUTH_DESPRIV \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .IP SNMPERR_ABORT \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .IP SNMPERR_UNKNOWN_PDU \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .IP SNMPERR_TIMEOUT \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .RE |
| .PP |
| .SH "SEE ALSO" |
| .BR select "(2), " snmp_api "(3), " snmp_api.h |