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