xref: /illumos-gate/usr/src/cmd/picl/plugins/sun4v/lib/snmp/pdu.h (revision 2a8bcb4efb45d99ac41c94a75c396b362c414f7f)
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