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