0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * CDDL HEADER START
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki *
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * The contents of this file are subject to the terms of the
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Common Development and Distribution License (the "License").
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * You may not use this file except in compliance with the License.
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki *
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * or http://www.opensolaris.org/os/licensing.
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * See the License for the specific language governing permissions
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * and limitations under the License.
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki *
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * When distributing Covered Code, include this CDDL HEADER in each
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * If applicable, add the following below this CDDL HEADER, with the
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * fields enclosed by brackets "[]" replaced with your own identifying
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * information: Portions Copyright [yyyy] [name of copyright owner]
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki *
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * CDDL HEADER END
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Use is subject to license terms.
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#ifndef _PDU_H
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define _PDU_H
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#pragma ident "%Z%%M% %I% %E% SMI"
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#ifdef __cplusplus
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkiextern "C" {
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#endif
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkitypedef uint_t oid;
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * SNMP PDU variable list
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkitypedef struct pdu_varlist {
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki struct pdu_varlist *nextvar;
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki oid *name;
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki size_t name_len; /* number of subids in the name */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki union {
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki uint_t *uiptr; /* unused except while parsing */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki int *iptr;
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki uchar_t *str;
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki oid *objid;
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki } val;
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki size_t val_len; /* in bytes even if val is objid */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki uchar_t type;
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki} pdu_varlist_t;
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Essential snmp message/PDU fields
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkitypedef struct snmp_pdu {
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki int version;
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki uchar_t *community;
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki size_t community_len;
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki int command;
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki int reqid;
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki int errstat; /* shared with non-repeaters for GETBULK */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki int errindex; /* shared with max-repetitions for GETBULK */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki pdu_varlist_t *vars;
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki uchar_t *req_pkt; /* not really part of PDU */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki size_t req_pktsz; /* not really part of PDU */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki uchar_t *reply_pkt; /* not really part of PDU */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki size_t reply_pktsz; /* not really part of PDU */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki} snmp_pdu_t;
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define non_repeaters errstat
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define max_repetitions errindex
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Supported SNMP versions
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_VERSION_1 0
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_VERSION_2c 1
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Community strings for supported PDUs
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_DEF_COMMUNITY "public"
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_DEF_COMMUNITY_LEN 6
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * PDU types (not all are supported)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_MSG_GET (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x0)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_MSG_GETNEXT (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x1)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_MSG_RESPONSE (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x2)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_MSG_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x3)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_MSG_TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x4)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_MSG_GETBULK (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x5)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_MSG_INFORM (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x6)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_MSG_TRAP2 (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x7)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_MSG_REPORT (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x8)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Exception values (not all are supported)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_NOSUCHOBJECT (ASN_CONTEXT | ASN_PRIMITIVE | (uchar_t)0x0)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | (uchar_t)0x1)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ENDOFMIBVIEW (ASN_CONTEXT | ASN_PRIMITIVE | (uchar_t)0x2)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Error codes (not all are supported)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_NOERROR (0)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_TOOBIG (1)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_NOSUCHNAME (2)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_BADVALUE (3)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_READONLY (4)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_GENERR (5)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_NOACCESS (6)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_WRONGTYPE (7)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_WRONGLENGTH (8)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_WRONGENCODING (9)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_WRONGVALUE (10)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_NOCREATION (11)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_INCONSISTENTVALUE (12)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_RESOURCEUNAVAILABLE (13)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_COMMITFAILED (14)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_UNDOFAILED (15)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_AUTHORIZATIONERROR (16)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_NOTWRITABLE (17)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_ERR_INCONSISTENTNAME (18)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Default values
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_DEF_NON_REPEATERS 0
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_DEF_MAX_REPETITIONS 25
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_DEF_PKTBUF_SZ 2048
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_PKTBUF_BLKSZ 1024
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define SNMP_MAX_ERR 18
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define MIN_SUBIDS_IN_OID 2
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define MAX_SUBIDS_IN_OID 128
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Exported interfaces used by other parts of snmplib
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkisnmp_pdu_t *snmp_create_pdu(int, int, char *, int, int);
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkiint snmp_make_packet(snmp_pdu_t *);
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkisnmp_pdu_t *snmp_parse_reply(int, uchar_t *, size_t);
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkivoid snmp_free_pdu(snmp_pdu_t *);
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Imported from elsewhere
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkiint snmp_get_reqid(void);
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#ifdef __cplusplus
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki}
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#endif
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#endif /* _PDU_H */