| .\" -*- nroff -*- |
| .\" Portions of this file are subject to the following copyright. See |
| .\" the Net-SNMP COPYING file for more details and other copyrights |
| .\" that may apply: |
| .\" /*********************************************************** |
| .\" Copyright 1989 by Carnegie Mellon University |
| .\" |
| .\" All Rights Reserved |
| .\" |
| .\" Permission to use, copy, modify, and distribute this software and its |
| .\" documentation for any purpose and without fee is hereby granted, |
| .\" provided that the above copyright notice appear in all copies and that |
| .\" both that copyright notice and this permission notice appear in |
| .\" supporting documentation, and that the name of CMU not be |
| .\" used in advertising or publicity pertaining to distribution of the |
| .\" software without specific, written prior permission. |
| .\" |
| .\" CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING |
| .\" ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL |
| .\" CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR |
| .\" ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, |
| .\" WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, |
| .\" ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS |
| .\" SOFTWARE. |
| .\" ******************************************************************/ |
| .TH NETSNMP_SESSION_API 3 "19 May 2011" VVERSIONINFO "Net-SNMP" |
| .SH NAME |
| snmp_sess_init, |
| snmp_open, |
| snmp_send, |
| snmp_async_send, |
| snmp_select_info, |
| snmp_read, |
| snmp_timeout, |
| snmp_synch_response, |
| snmp_close, |
| snmp_perror, |
| snmp_sess_perror, |
| snmp_error, |
| snmp_api_errstring \- netsnmp_session_api functions |
| .SH SYNOPSIS |
| .B #include <net-snmp/session_api.h> |
| .PP |
| .BI "void snmp_sess_init ( netsnmp_session*" "sess" ); |
| .PP |
| .BI "netsnmp_session* snmp_open ( netsnmp_session *" "sess"); |
| .RS |
| .I /* Input parameter not used in active sessions */ |
| .RE |
| .PP |
| .BI "int snmp_send ( netsnmp_session *" "session," |
| .RS |
| .BI "netsnmp_pdu *" "pdu" ); |
| .RE |
| .PP |
| .BI "int snmp_async_send ( netsnmp_session *" "session," |
| .RS |
| .BI " netsnmp_pdu *" pdu ", " |
| .br |
| .BI " snmp_callback " callback ", " |
| .br |
| .BI " void *" callbackData ");" |
| .RE |
| .PP |
| .BI "int snmp_select_info ( int * " numfds, "fd_set *" fdset, |
| .RS |
| .BI "struct timeval *" timeout, "int *" block ); |
| .RE |
| .PP |
| .BI "void snmp_read ( fd_set *" fdset ); |
| .PP |
| .B void snmp_timeout ( void ); |
| .PP |
| .BI "int snmp_synch_response ( netsnmp_session *" "session," |
| .RS |
| .BI "netsnmp_pdu *" "pdu" ", " |
| .br |
| .BI "netsnmp_pdu **" "response" ); |
| .RE |
| .PP |
| .BI "int snmp_close ( netsnmp_session *" session ); |
| .br |
| .B "int snmp_close_sessions ( void ); |
| .PP |
| .SS Error Reporting |
| .I (Move to output_api(3)) |
| .br |
| .BI "void snmp_error ( netsnmp_session *session, |
| .RS |
| .BI "int *" pcliberr, "int *" psnmperr, "char **" pperrstring ); |
| .RE |
| .PP |
| .BI "char *snmp_api_errstring ( int" snmperr ); |
| .PP |
| .BI "void snmp_perror ( char *" msg ); |
| .RS |
| .I /* for parsing errors only */ |
| .RE |
| .PP |
| .BI "void snmp_sess_perror (char *" msg, "netsnmp_session *" sess ); |
| .RS |
| .I /* all other SNMP library errors */ |
| .RE |
| .PP |
| .SH DESCRIPTION |
| .I Snmp_sess_init |
| prepares a netsnmp_session that sources transport characteristics |
| and common information that will be used for a set of SNMP transactions. |
| After this structure is passed to |
| .I snmp_open |
| to create an SNMP session, the structure is not used. |
| .PP |
| .I Snmp_open |
| returns a pointer to a newly-formed |
| .I netsnmp_session |
| object, which the application must use to reference the |
| active SNMP session. |
| .PP |
| .I snmp_send |
| and |
| .I snmp_async_send() |
| each take as input a pointer to a |
| .I netsnmp_pdu |
| object. |
| This structure contains 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_async_send() |
| call, |
| .I snmp_read |
| will invoke the specified callback when the response is received. |
| .PP |
| .I Snmp_read, snmp_select_info, |
| and |
| .I snmp_timeout |
| provide an interface for the use of the |
| .IR select(2) |
| system call so that SNMP transactions can occur asynchronously. |
| .PP |
| .I Snmp_select_info |
| is given the information that would have been passed to |
| .I select |
| in the absence of SNMP. For example, this might include window update information. |
| This information is modified so that SNMP will get the service it requires from the |
| call to |
| .I select. |
| In this case, |
| .I numfds, fdset, |
| and |
| .I timeout |
| correspond to the |
| .I nfds, readfds, |
| and |
| .I timeout |
| arguments to |
| .I select, |
| respectively. The only exception is that timeout must always point to an allocated (but perhaps uninitialized) |
| .I struct timeval. |
| If |
| .I timeout |
| would have been passed as NULL, |
| .I block |
| is set to true, and |
| .I timeout |
| is treated as undefined. This same rule applies upon return from |
| .I snmp_select_info. |
| .PP |
| After calling |
| .I snmp_select_info, select |
| is called with the returned data. When select returns, |
| .I snmp_read |
| should be called with the |
| .I fd_set |
| returned from |
| .I select |
| to read each SNMP socket that has input. |
| If |
| .I select |
| times out, |
| .I snmp_timeout |
| should be called to see if the timeout was intended for SNMP. |
| .PP |
| .I snmp_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_send" ", " "snmp_read" |
| etc for details. |
| .SH DIAGNOSTICS |
| .PP |
| Previous versions of the library used |
| .IR snmp_get_errno |
| to read the global variable |
| .I snmp_errno |
| which may have held the error status within the SNMP library. |
| The existing method |
| .I snmp_perror |
| should be used to log ASN.1 coding errors only. |
| .PP |
| The new method |
| .I snmp_sess_perror |
| is provided to capture errors that occur during the processing |
| of a particular SNMP session. |
| .I Snmp_sess_perror |
| calls |
| .IR snmp_error |
| function to obtain the "C" library error |
| .I errno |
| , the SNMP library error |
| .I snmperr |
| , and the SNMP library detailed error message |
| that is associated with an error that occurred during a given session. |
| .PP |
| Note that in all cases except one, |
| .IR snmp_sess_perror |
| should be handed the |
| .I netsnmp_session * |
| pointer returned from |
| .IR snmp_open. |
| If |
| .IR snmp_open |
| returns a null pointer, pass the INPUT |
| .I netsnmp_session * |
| pointer used to call |
| .IR snmp_open. |
| .PP |
| Error return status from |
| .I snmp_close |
| and |
| .I snmp_send |
| is indicated by return of 0. A successful status will return a 1 for |
| .I snmp_close |
| and the request id of the packet for |
| .I snmp_send. |
| Upon successful return from |
| .I snmp_send |
| the pdu will be freed by the library. |
| .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_PARSE \w'SNMPERR_BAD_REPETITIONS'u+2n |
| .IP SNMPERR_BAD_VERSION \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 |
| A string representation of the error code can be obtained with |
| .IR snmp_api_errstring , |
| and a standard error message may be printed using |
| .I snmp_perror |
| that functions like the |
| .I perror |
| standard routine. |
| .SH "SEE ALSO" |
| select(2), netsnmp_sess_api(3), netsnmp_mib_api(3), netsnmp_pdu_api(3), |
| netsnmp_varbind_api(3), snmp_api.h |