1*0d63ce2bSvenki /* 2*0d63ce2bSvenki * CDDL HEADER START 3*0d63ce2bSvenki * 4*0d63ce2bSvenki * The contents of this file are subject to the terms of the 5*0d63ce2bSvenki * Common Development and Distribution License (the "License"). 6*0d63ce2bSvenki * You may not use this file except in compliance with the License. 7*0d63ce2bSvenki * 8*0d63ce2bSvenki * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*0d63ce2bSvenki * or http://www.opensolaris.org/os/licensing. 10*0d63ce2bSvenki * See the License for the specific language governing permissions 11*0d63ce2bSvenki * and limitations under the License. 12*0d63ce2bSvenki * 13*0d63ce2bSvenki * When distributing Covered Code, include this CDDL HEADER in each 14*0d63ce2bSvenki * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*0d63ce2bSvenki * If applicable, add the following below this CDDL HEADER, with the 16*0d63ce2bSvenki * fields enclosed by brackets "[]" replaced with your own identifying 17*0d63ce2bSvenki * information: Portions Copyright [yyyy] [name of copyright owner] 18*0d63ce2bSvenki * 19*0d63ce2bSvenki * CDDL HEADER END 20*0d63ce2bSvenki */ 21*0d63ce2bSvenki 22*0d63ce2bSvenki /* 23*0d63ce2bSvenki * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 24*0d63ce2bSvenki * Use is subject to license terms. 25*0d63ce2bSvenki */ 26*0d63ce2bSvenki 27*0d63ce2bSvenki #ifndef _PDU_H 28*0d63ce2bSvenki #define _PDU_H 29*0d63ce2bSvenki 30*0d63ce2bSvenki #ifdef __cplusplus 31*0d63ce2bSvenki extern "C" { 32*0d63ce2bSvenki #endif 33*0d63ce2bSvenki 34*0d63ce2bSvenki typedef uint_t oid; 35*0d63ce2bSvenki 36*0d63ce2bSvenki /* 37*0d63ce2bSvenki * SNMP PDU variable list 38*0d63ce2bSvenki */ 39*0d63ce2bSvenki typedef struct pdu_varlist { 40*0d63ce2bSvenki struct pdu_varlist *nextvar; 41*0d63ce2bSvenki oid *name; 42*0d63ce2bSvenki size_t name_len; /* number of subids in the name */ 43*0d63ce2bSvenki union { 44*0d63ce2bSvenki uint_t *uiptr; /* unused except while parsing */ 45*0d63ce2bSvenki int *iptr; 46*0d63ce2bSvenki uchar_t *str; 47*0d63ce2bSvenki oid *objid; 48*0d63ce2bSvenki } val; 49*0d63ce2bSvenki size_t val_len; /* in bytes even if val is objid */ 50*0d63ce2bSvenki uchar_t type; 51*0d63ce2bSvenki } pdu_varlist_t; 52*0d63ce2bSvenki 53*0d63ce2bSvenki /* 54*0d63ce2bSvenki * Essential snmp message/PDU fields 55*0d63ce2bSvenki */ 56*0d63ce2bSvenki typedef struct snmp_pdu { 57*0d63ce2bSvenki int version; 58*0d63ce2bSvenki uchar_t *community; 59*0d63ce2bSvenki size_t community_len; 60*0d63ce2bSvenki int command; 61*0d63ce2bSvenki int reqid; 62*0d63ce2bSvenki int errstat; /* shared with non-repeaters for GETBULK */ 63*0d63ce2bSvenki int errindex; /* shared with max-repetitions for GETBULK */ 64*0d63ce2bSvenki pdu_varlist_t *vars; 65*0d63ce2bSvenki 66*0d63ce2bSvenki uchar_t *req_pkt; /* not really part of PDU */ 67*0d63ce2bSvenki size_t req_pktsz; /* not really part of PDU */ 68*0d63ce2bSvenki uchar_t *reply_pkt; /* not really part of PDU */ 69*0d63ce2bSvenki size_t reply_pktsz; /* not really part of PDU */ 70*0d63ce2bSvenki } snmp_pdu_t; 71*0d63ce2bSvenki #define non_repeaters errstat 72*0d63ce2bSvenki #define max_repetitions errindex 73*0d63ce2bSvenki 74*0d63ce2bSvenki /* 75*0d63ce2bSvenki * Supported SNMP versions 76*0d63ce2bSvenki */ 77*0d63ce2bSvenki #define SNMP_VERSION_1 0 78*0d63ce2bSvenki #define SNMP_VERSION_2c 1 79*0d63ce2bSvenki 80*0d63ce2bSvenki /* 81*0d63ce2bSvenki * Community strings for supported PDUs 82*0d63ce2bSvenki */ 83*0d63ce2bSvenki #define SNMP_DEF_COMMUNITY "public" 84*0d63ce2bSvenki #define SNMP_DEF_COMMUNITY_LEN 6 85*0d63ce2bSvenki 86*0d63ce2bSvenki /* 87*0d63ce2bSvenki * PDU types (not all are supported) 88*0d63ce2bSvenki */ 89*0d63ce2bSvenki #define SNMP_MSG_GET (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x0) 90*0d63ce2bSvenki #define SNMP_MSG_GETNEXT (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x1) 91*0d63ce2bSvenki #define SNMP_MSG_RESPONSE (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x2) 92*0d63ce2bSvenki #define SNMP_MSG_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x3) 93*0d63ce2bSvenki #define SNMP_MSG_TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x4) 94*0d63ce2bSvenki #define SNMP_MSG_GETBULK (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x5) 95*0d63ce2bSvenki #define SNMP_MSG_INFORM (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x6) 96*0d63ce2bSvenki #define SNMP_MSG_TRAP2 (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x7) 97*0d63ce2bSvenki #define SNMP_MSG_REPORT (ASN_CONTEXT | ASN_CONSTRUCTOR | (uchar_t)0x8) 98*0d63ce2bSvenki 99*0d63ce2bSvenki /* 100*0d63ce2bSvenki * Exception values (not all are supported) 101*0d63ce2bSvenki */ 102*0d63ce2bSvenki #define SNMP_NOSUCHOBJECT (ASN_CONTEXT | ASN_PRIMITIVE | (uchar_t)0x0) 103*0d63ce2bSvenki #define SNMP_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | (uchar_t)0x1) 104*0d63ce2bSvenki #define SNMP_ENDOFMIBVIEW (ASN_CONTEXT | ASN_PRIMITIVE | (uchar_t)0x2) 105*0d63ce2bSvenki 106*0d63ce2bSvenki /* 107*0d63ce2bSvenki * Error codes (not all are supported) 108*0d63ce2bSvenki */ 109*0d63ce2bSvenki #define SNMP_ERR_NOERROR (0) 110*0d63ce2bSvenki #define SNMP_ERR_TOOBIG (1) 111*0d63ce2bSvenki #define SNMP_ERR_NOSUCHNAME (2) 112*0d63ce2bSvenki #define SNMP_ERR_BADVALUE (3) 113*0d63ce2bSvenki #define SNMP_ERR_READONLY (4) 114*0d63ce2bSvenki #define SNMP_ERR_GENERR (5) 115*0d63ce2bSvenki #define SNMP_ERR_NOACCESS (6) 116*0d63ce2bSvenki #define SNMP_ERR_WRONGTYPE (7) 117*0d63ce2bSvenki #define SNMP_ERR_WRONGLENGTH (8) 118*0d63ce2bSvenki #define SNMP_ERR_WRONGENCODING (9) 119*0d63ce2bSvenki #define SNMP_ERR_WRONGVALUE (10) 120*0d63ce2bSvenki #define SNMP_ERR_NOCREATION (11) 121*0d63ce2bSvenki #define SNMP_ERR_INCONSISTENTVALUE (12) 122*0d63ce2bSvenki #define SNMP_ERR_RESOURCEUNAVAILABLE (13) 123*0d63ce2bSvenki #define SNMP_ERR_COMMITFAILED (14) 124*0d63ce2bSvenki #define SNMP_ERR_UNDOFAILED (15) 125*0d63ce2bSvenki #define SNMP_ERR_AUTHORIZATIONERROR (16) 126*0d63ce2bSvenki #define SNMP_ERR_NOTWRITABLE (17) 127*0d63ce2bSvenki #define SNMP_ERR_INCONSISTENTNAME (18) 128*0d63ce2bSvenki 129*0d63ce2bSvenki /* 130*0d63ce2bSvenki * Default values 131*0d63ce2bSvenki */ 132*0d63ce2bSvenki #define SNMP_DEF_NON_REPEATERS 0 133*0d63ce2bSvenki #define SNMP_DEF_MAX_REPETITIONS 25 134*0d63ce2bSvenki #define SNMP_DEF_PKTBUF_SZ 2048 135*0d63ce2bSvenki #define SNMP_PKTBUF_BLKSZ 1024 136*0d63ce2bSvenki #define SNMP_MAX_ERR 18 137*0d63ce2bSvenki #define MIN_SUBIDS_IN_OID 2 138*0d63ce2bSvenki #define MAX_SUBIDS_IN_OID 128 139*0d63ce2bSvenki 140*0d63ce2bSvenki /* 141*0d63ce2bSvenki * Exported interfaces used by other parts of snmplib 142*0d63ce2bSvenki */ 143*0d63ce2bSvenki snmp_pdu_t *snmp_create_pdu(int, int, char *, int, int); 144*0d63ce2bSvenki int snmp_make_packet(snmp_pdu_t *); 145*0d63ce2bSvenki snmp_pdu_t *snmp_parse_reply(int, uchar_t *, size_t); 146*0d63ce2bSvenki void snmp_free_pdu(snmp_pdu_t *); 147*0d63ce2bSvenki 148*0d63ce2bSvenki /* 149*0d63ce2bSvenki * Imported from elsewhere 150*0d63ce2bSvenki */ 151*0d63ce2bSvenki int snmp_get_reqid(void); 152*0d63ce2bSvenki 153*0d63ce2bSvenki #ifdef __cplusplus 154*0d63ce2bSvenki } 155*0d63ce2bSvenki #endif 156*0d63ce2bSvenki 157*0d63ce2bSvenki #endif /* _PDU_H */ 158