.\" /***********************************************************
.\" 	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 SNMP_SESS_API 3 "18 August, 1998"
.UC 5
.SH NAME
snmp_sess_init, snmp_sess_open, snmp_sess_session,
snmp_sess_send, snmp_sess_async_send, snmp_sess_read,
snmp_sess_select_info,
snmp_sess_timeout, snmp_sess_close, snmp_sess_error
.SH SYNOPSIS
.B "#include <sys/types>
.br
.B "#include <netinet/in.h>
.br
.B "#include <sys/time.h>
.br
.B #include <ucd-snmp/snmp.h>
.br
.B #include <ucd-snmp/snmp_impl.h>
.br
.B #include <ucd-snmp/asn1.h>
.br
.B #include <ucd-snmp/snmp_api.h>
.PP
.B "void snmp_sess_init (Session)
.br
.B "struct snmp_session * Session;
.PP
.B "void *snmp_sess_open (Session)
.br
.B "struct snmp_session * Session;
.PP
.B "struct snmp_session* snmp_sess_session (Opaque)
.br
.B "void * Opaque;
.PP
.B "int snmp_sess_send (Opaque, PDU)
.br
.B "void * Opaque;
.br
.B "struct snmp_pdu * PDU;
.PP
.B "int snmp_sess_async_send (Opaque, PDU, Callback, CallbackData)
.br
.B "void * Opaque;
.br
.B "struct snmp_pdu * PDU;
.br
.B "snmp_callback Callback;
.br
.B "void * CallbackData;
.PP
.B "int snmp_sess_select_info (Opaque, numfds, fdset, timeout, block)
.br
.B "void * Opaque;
.br
.B "int * numfds;
.br
.B "fd_set * fdset;
.br
.B "struct timeval * timeout;
.br
.B "int * block;
.PP
.B "void snmp_sess_read (Opaque, fdset)
.br
.B "void * Opaque;
.br
.B "fd_set * fdset;
.PP
.B "void snmp_sess_timeout (Opaque)
.br
.B "void * Opaque;
.PP
.B "int snmp_sess_close (Opaque)
.br
.B "void * Opaque;
.PP
.B "void snmp_sess_error (Opaque, p_errno, p_snmp_errno, errstr)
.br
.B "void * Opaque;
.br
.B "int * p_errno;
.br
.B "int * p_snmp_errno;
.br
.B "char ** errstr;
.PP
.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
.I snmp_sess_init
and
.I snmp_sess_session,
these functions are single session versions of the traditional
SNMP library API.
.PP
Note that these functions use an
.I Opaque
pointer to identify a single session in lieu of a
.I session
pointer.
.PP
SNMP sessions that are created with
.I snmp_sess_open
are not affected by and should not be used with
.I snmp_select_info,
.I snmp_read,
.I snmp_timeout,
nor
.I snmp_close.
Use the other functions described here with similar capabilities.
.PP
.I Snmp_sess_init
and
.I snmp_sess_open
each take as input a pointer to an object with the
following structure.
.I Snmp_sess_session
returns a pointer to an object with this structure.
This structure contains information for a set of transactions that
will share similar transport characteristics.
.RS
.PP
.nf
struct snmp_session {
    u_char  *community;	/* community for outgoing requests. */
    int	    community_len;  /* Length of community name. */
    int	    retries;	/* Number of retries before timeout. */
    long    timeout;    /* Number of uS until first timeout, then exponential backoff */
    char    *peername;	/* Domain name or dotted IP address of default peer */
    u_short remote_port;/* UDP port number of peer. */
    u_short local_port; /* My UDP port number, 0 for default, picked randomly */

    /* Authentication function or NULL if null authentication is used */
    u_char  *(*authenticator)();

    int	    (*callback)();  /* Function to interpret incoming data */

    /* Pointer to data that the callback function may consider important */
    void    *callback_magic;
    int     version;	/* 0 for SNMP, 1 for secure SNMP */
    oid     *srcParty;	/* partyID of source party */
    int     srcPartyLen; /* length in subIDs of srcParty */
    oid     *dstParty;	/* partyID of destination party */
    int     dstPartyLen; /* length in subIDs of dstParty */
    int     s_errno;     /* copy of system errno */
    int     s_snmp_errno; /* copy of library errno */
};

/*
 * Set fields in session and pdu to the following to get a default or unconfigured value.
 */
#define SNMP_DEFAULT_COMMUNITY_LEN  0/* for default community name */
#define SNMP_DEFAULT_RETRIES	    -1
#define SNMP_DEFAULT_TIMEOUT	    -1
#define SNMP_DEFAULT_REMPORT	    0
#define SNMP_DEFAULT_REQID	    0
#define SNMP_DEFAULT_ERRSTAT	    -1
#define SNMP_DEFAULT_ERRINDEX	    -1
#define SNMP_DEFAULT_ADDRESS	    0
#define SNMP_DEFAULT_PEERNAME	    NULL
#define SNMP_DEFAULT_ENTERPRISE_LENGTH	0
#define SNMP_DEFAULT_TIME	    0

/*
 * This routine must be supplied by the application:
 *
 * u_char *authenticator(pdu, length, community, community_len)
 * u_char *pdu;		The rest of the PDU to be authenticated
 * int *length;		The length of the PDU (updated by the authenticator)
 * u_char *community;	The community name to authenticate under.
 * int	community_len	The length of the community name.
 *
 * Returns the authenticated pdu, or NULL if authentication failed.
 * If null authentication is used, the authenticator in snmp_session can be
 * set to NULL(0).
 */

/*
 * This routine must be supplied by the application:
 *
 * int callback(operation, session, reqid, pdu, magic)
 * int operation;
 * struct snmp_session *session;    The session authenticated under.
 * int reqid;			    The request id of this pdu (0 for TRAP)
 * struct snmp_pdu *pdu;	    The pdu information.
 * void *magic			    A link to the data for this routine.
 *
 * Returns 1 if request was successful, 0 if it should be kept pending.
 * Any data in the pdu must be copied because it will be freed elsewhere.
 * Operations are defined below:
 */
#define RECEIVED_MESSAGE   1
#define TIMED_OUT	   2
.ft R
.ad
.fi
.RE
.PP
.I Snmp_sess_send
and
.I snmp_sess_async_send
each take as input a pointer to an object with the
following structure.
This structure contains information that describes a transaction
that will be performed over an open session.
.RS
.PP
.nf
struct snmp_pdu {
    ipaddr  address;	/* Address of peer */

    int	    command;	/* Type of this PDU */

    u_long  reqid;	/* Request id */
    u_long  errstat;	/* Error status */
    u_long  errindex;	/* Error index */

    /* Trap information */
    oid	    *enterprise;/* System OID */
    int	    enterprise_length;
    ipaddr  agent_addr;	/* address of object generating trap */
    int	    trap_type;	/* trap type */
    int	    specific_type;  /* specific type */
    u_long  time;	/* Uptime */

    struct variable_list *variables;
};


struct variable_list {
    struct variable_list *next_variable;    /* NULL for last variable */
    oid	    *name;  /* Object identifier of variable */
    int	    name_length;    /* number of subid's in name */
    u_char  type;   /* ASN type of variable */
    union { /* value of variable */
	long	*integer;
	u_char	*string;
	oid	*objid;
    } val;
    int	    val_len;
};
.ft R
.ad
.fi
.RE
.PP
.I Snmp_sess_select_info, snmp_sess_read,
and
.I snmp_sess_timeout
provide an interface for the use of the
.IR select (2)
system call so that SNMP transactions for a single session can occur asynchronously.
.PP
.I Snmp_sess_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_sess_select_info, select
is called with the returned data.  When select returns,
.I snmp_sess_read
is called with the
.I fd_set
returned from
.I select.
This will read any input from this session's SNMP socket.
If
.I select
times out,
.I snmp_sess_timeout
should be called to see if the timeout was intended for SNMP.
.SH DIAGNOSTICS
.PP
Error return status from 
.I snmp_sess_open
is indicated by return of a null pointer.
Error return status from 
.I snmp_sess_close
and
.I snmp_sess_send
is indicated by return of 0.  A successful status will return a 1.
.PP
Further information can be obtained by using
.I snmp_sess_error
to see what type of error has occurred.
This function returns the SNMP "snmp_errno" variable,
the value of the system "errno" variable,
and a string interpretation of both variables.
The string must be freed after use by the caller.
.PP
For errors returned by
.I snmp_sess_open,
use the corresponding function
.I snmp_error
instead of
.I snmp_sess_error.
.PP
.IR snmp_errno
can have 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_SRC_PARTY \w'SNMPERR_BAD_REPETITIONS'u+2n
.IP SNMPERR_BAD_DST_PARTY \w'SNMPERR_BAD_REPETITIONS'u+2n
.IP SNMPERR_BAD_CONTEXT \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_BAD_ACL \w'SNMPERR_BAD_REPETITIONS'u+2n
.IP SNMPERR_BAD_PARTY \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"
select(2), snmp_api(3), snmp_api.h
