/*
 *  Copyright (c) 1996-2007 Digi International Inc., All Rights Reserved
 *
 *  This software contains proprietary and confidential information of Digi
 *  International Inc.  By accepting transfer of this copy, Recipient agrees
 *  to retain this software in confidence, to prevent disclosure to others,
 *  and to make no use of this software other than that for which it was
 *  delivered.  This is an unpublished copyrighted work of Digi International
 *  Inc.  Except as permitted by federal law, 17 USC 117, copying is strictly
 *  prohibited.
 *
 *  Restricted Rights Legend
 *
 *  Use, duplication, or disclosure by the Government is subject to
 *  restrictions set forth in sub-paragraph (c)(1)(ii) of The Rights in
 *  Technical Data and Computer Software clause at DFARS 252.227-7031 or
 *  subparagraphs (c)(1) and (2) of the Commercial Computer Software -
 *  Restricted Rights at 48 CFR 52.227-19, as applicable.
 *
 *  Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343
 *
**************************************************************************
*  File Description:
*       Definitions for the Simple Network Management Protocol (RFC 1067).
**************************************************************************/
/***********************************************************
    Copyright 1988, 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.
******************************************************************/
/*
 * Edit History
 *
 * Date     Initials                Change description
 *
 * 08/05/03 JZW                     Added include of sysaccess.h
 *                                  Include struct SNMPUser
 */

#ifndef _SNMP_
#define _SNMP_

#ifdef __cplusplus
extern "C"
{
#endif

#if defined(NET_OS) || defined(WIN32)
#include <sysAccess.h>
#endif
    
#define SNMP_PORT           161
#define SNMP_TRAP_PORT      162

#define SNMP_MAX_LEN        1500

#define SNMP_VERSION_1      0
#define SNMP_VERSION_2c     1
#define SNMP_VERSION_2      2
#define SNMP_VERSION_3      3

#define GET_REQ_MSG         (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x0)
#define GETNEXT_REQ_MSG     (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x1)
#define GET_RSP_MSG         (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x2)
#define SET_REQ_MSG         (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x3)
#define TRP_REQ_MSG         (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x4)
#define BULK_REQ_MSG        (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x5)
#define INFORM_REQ_MSG      (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x6)
#define TRP2_REQ_MSG        (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x7)
#define REPORT_REQ_MSG      (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x8)

#define SNMP_NOSUCHOBJECT   (ASN_CONTEXT | ASN_PRIMITIVE | 0x0)
#define SNMP_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | 0x1)
#define SNMP_ENDOFMIBVIEW   (ASN_CONTEXT | ASN_PRIMITIVE | 0x2)

/*ad*
 * snmp errors
 *
 * @external
 * @category SNMP
 * @since 6.0
 * @name SNMP_ERRORS "SNMP Error Codes"
 *
 * @param SNMP_ERR_NOERROR           The write succeeded.                                                      
 * @param SNMP_ERR_TOOBIG            Value is too big.                                                         
 * @param SNMP_ERR_NOSUCHNAME        Unable to find object.                                                    
 * @param SNMP_ERR_BADVALUE          Value is out of range.                                                    
 * @param SNMP_ERR_READONLY          Object is read only.                                                      
 * @param SNMP_ERR_GENERR            General error.                                                            
 * @param SNMP_ERR_NOACCESS          Access denied.                                                            
 * @param SNMP_ERR_WRONGTYPE         The object is a different type than the value passed.                     
 * @param SNMP_ERR_WRONGLENGTH       The value is the wrong length.                                            
 * @param SNMP_ERR_WRONGENCODING     The value uses the wrong encoding.                                        
 * @param SNMP_ERR_WRONGVALUE        The value is incorrect.                                                   
 * @param SNMP_ERR_NOCREATION        Unable to create object.                                                  
 * @param SNMP_ERR_INCONSISTENTVALUE Value is inconsistent.                                                    
 * @param SNMP_ERR_RESOURCEUNAVAILABLE     Out of memory or some other resource.                               
 * @param SNMP_ERR_COMMITFAILED      Unable to write to variable.                                              
 * @param SNMP_ERR_UNDOFAILED        Write failed, but was unable to completely restore all fields in the row. 
 * @param SNMP_ERR_AUTHORIZATIONERROR Access denied.                                                           
 * @param SNMP_ERR_NOTWRITABLE       Object is not writable.                                                   
 * @param SNMP_ERR_INCONSISTENTNAME  OID is inconsistent.                                                      
*ad*/
#define SNMP_ERR_NOERROR                0
#define SNMP_ERR_TOOBIG                 1
#define SNMP_ERR_NOSUCHNAME             2
#define SNMP_ERR_BADVALUE               3
#define SNMP_ERR_READONLY               4
#define SNMP_ERR_GENERR                 5
#define SNMP_ERR_NOACCESS               6
#define SNMP_ERR_WRONGTYPE              7
#define SNMP_ERR_WRONGLENGTH            8
#define SNMP_ERR_WRONGENCODING          9
#define SNMP_ERR_WRONGVALUE             10
#define SNMP_ERR_NOCREATION             11
#define SNMP_ERR_INCONSISTENTVALUE      12
#define SNMP_ERR_RESOURCEUNAVAILABLE    13
#define SNMP_ERR_COMMITFAILED           14
#define SNMP_ERR_UNDOFAILED             15
#define SNMP_ERR_AUTHORIZATIONERROR     16
#define SNMP_ERR_NOTWRITABLE            17
#define SNMP_ERR_INCONSISTENTNAME       18

/*
 * Error codes:
 * These must not clash with SNMP error codes (all positive).
 */
#define PARSE_ERROR                     -1
#define BUILD_ERROR                     -2
#define SECURITY_ERROR                  -3
#define WRONG_SECURITY_LEVEL            -13
#define WRONG_ENCRYPTION                -14
#define WRONG_TIMELINESS                -15
#define WRONG_DIGEST                    -16
#define WRONG_ENGINE_ID                 -17
#define WRONG_USER_NAME                 -18
#define WRONG_PDU_HANDLER               -19

#ifdef INLINE_SNMP

int snmp_init(pr_t * prp);
st snmp_up(m * mp);
int snmp_close(so_t * sop);

#endif /* INLINE_SNMP */

#if defined(NET_OS) || defined(WIN32)
/* added to support linked list of users */
/************************************************************************/
/* SNMP user structure                                                  */
/************************************************************************/
struct SNMPUser 
{
    char             username[NASYSACC_STRLEN_USERNAME + 4]; 
    struct SNMPUser *next;
    struct SNMPUser *prev;
};

#endif

#ifdef __cplusplus
}
#endif

#endif /* _SNMP_ */


