xref: /freebsd/contrib/bsnmp/lib/bsnmplib.3 (revision 896052c10f33c29a53b63fc67d4c8238b87f5b3e)
1f06ca4afSHartmut Brandt.\"
2f06ca4afSHartmut Brandt.\" Copyright (c) 2001-2003
3f06ca4afSHartmut Brandt.\"	Fraunhofer Institute for Open Communication Systems (FhG Fokus).
4f06ca4afSHartmut Brandt.\"	All rights reserved.
5f06ca4afSHartmut Brandt.\"
6f06ca4afSHartmut Brandt.\" Author: Harti Brandt <harti@freebsd.org>
7f06ca4afSHartmut Brandt.\"
8896052c1SHartmut Brandt.\" Redistribution and use in source and binary forms, with or without
9896052c1SHartmut Brandt.\" modification, are permitted provided that the following conditions
10896052c1SHartmut Brandt.\" are met:
11896052c1SHartmut Brandt.\" 1. Redistributions of source code must retain the above copyright
12896052c1SHartmut Brandt.\"    notice, this list of conditions and the following disclaimer.
13f06ca4afSHartmut Brandt.\" 2. Redistributions in binary form must reproduce the above copyright
14f06ca4afSHartmut Brandt.\"    notice, this list of conditions and the following disclaimer in the
15f06ca4afSHartmut Brandt.\"    documentation and/or other materials provided with the distribution.
16f06ca4afSHartmut Brandt.\"
17896052c1SHartmut Brandt.\" THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18896052c1SHartmut Brandt.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19896052c1SHartmut Brandt.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20896052c1SHartmut Brandt.\" ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
21896052c1SHartmut Brandt.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22896052c1SHartmut Brandt.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23896052c1SHartmut Brandt.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24896052c1SHartmut Brandt.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25896052c1SHartmut Brandt.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26896052c1SHartmut Brandt.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27896052c1SHartmut Brandt.\" SUCH DAMAGE.
28f06ca4afSHartmut Brandt.\"
29896052c1SHartmut Brandt.\" $Begemot: bsnmp/lib/bsnmplib.3,v 1.5 2004/08/06 08:46:52 brandt Exp $
30f06ca4afSHartmut Brandt.\"
31f06ca4afSHartmut Brandt.Dd August 15, 2002
32f06ca4afSHartmut Brandt.Dt bsnmplib 3
33f06ca4afSHartmut Brandt.Os
34f06ca4afSHartmut Brandt.Sh NAME
35f06ca4afSHartmut Brandt.Nm snmp_value_free ,
36f06ca4afSHartmut Brandt.Nm snmp_value_parse ,
37f06ca4afSHartmut Brandt.Nm snmp_value_copy ,
38f06ca4afSHartmut Brandt.Nm snmp_pdu_free ,
39f06ca4afSHartmut Brandt.Nm snmp_code snmp_pdu_decode ,
40f06ca4afSHartmut Brandt.Nm snmp_code snmp_pdu_encode ,
41f06ca4afSHartmut Brandt.Nm snmp_pdu_dump ,
42f06ca4afSHartmut Brandt.Nm TRUTH_MK ,
43f06ca4afSHartmut Brandt.Nm TRUTH_GET ,
44f06ca4afSHartmut Brandt.Nm TRUTH_OK
45f06ca4afSHartmut Brandt.Nd "SNMP decoding and encoding library"
46f06ca4afSHartmut Brandt.Sh LIBRARY
47f06ca4afSHartmut BrandtBegemot SNMP library
48f06ca4afSHartmut Brandt.Pq libbsnmp, -lbsnmp
49f06ca4afSHartmut Brandt.Sh SYNOPSIS
50f06ca4afSHartmut Brandt.In bsnmp/asn1.h
51f06ca4afSHartmut Brandt.In bsnmp/snmp.h
52f06ca4afSHartmut Brandt.Ft void
53f06ca4afSHartmut Brandt.Fn snmp_value_free "struct snmp_value *value"
54f06ca4afSHartmut Brandt.Ft int
55f06ca4afSHartmut Brandt.Fn snmp_value_parse "const char *buf" "enum snmp_syntax" "union snmp_values *value"
56f06ca4afSHartmut Brandt.Ft int
57f06ca4afSHartmut Brandt.Fn snmp_value_copy "struct snmp_value *to" "const struct snmp_value *from"
58f06ca4afSHartmut Brandt.Ft void
59f06ca4afSHartmut Brandt.Fn snmp_pdu_free "struct snmp_pdu *value"
60f06ca4afSHartmut Brandt.Ft enum snmp_code
61f06ca4afSHartmut Brandt.Fn snmp_pdu_decode "struct asn_buf *buf" "struct snmp_pdu *pdu" "int32_t *ip"
62f06ca4afSHartmut Brandt.Ft enum snmp_code
63f06ca4afSHartmut Brandt.Fn snmp_pdu_encode "struct snmp_pdu *pdu" "struct asn_buf *buf"
64f06ca4afSHartmut Brandt.Ft void
65f06ca4afSHartmut Brandt.Fn snmp_pdu_dump "const struct snmp_pdu *pdu"
66f06ca4afSHartmut Brandt.Ft int
67f06ca4afSHartmut Brandt.Fn TRUTH_MK "F"
68f06ca4afSHartmut Brandt.Ft int
69f06ca4afSHartmut Brandt.Fn TRUTH_GET "T"
70f06ca4afSHartmut Brandt.Ft int
71f06ca4afSHartmut Brandt.Fn TRUTH_OK "T"
72f06ca4afSHartmut Brandt.Sh DESCRIPTION
73f06ca4afSHartmut BrandtThe SNMP library contains routines to handle SNMP version 1 and 2 PDUs.
74f06ca4afSHartmut BrandtThere are two basic structures used throughout the library:
75f06ca4afSHartmut Brandt.Bd -literal -offset indent
76f06ca4afSHartmut Brandtstruct snmp_value {
77f06ca4afSHartmut Brandt	struct asn_oid		var;
78f06ca4afSHartmut Brandt	enum snmp_syntax	syntax;
79f06ca4afSHartmut Brandt	union snmp_values {
80f06ca4afSHartmut Brandt	  int32_t		integer;/* also integer32 */
81f06ca4afSHartmut Brandt	  struct {
82f06ca4afSHartmut Brandt	    u_int		len;
83f06ca4afSHartmut Brandt	    u_char		*octets;
84f06ca4afSHartmut Brandt	  }			octetstring;
85f06ca4afSHartmut Brandt	  struct asn_oid	oid;
86f06ca4afSHartmut Brandt	  u_char		ipaddress[4];
87f06ca4afSHartmut Brandt	  u_int32_t		uint32;	/* also gauge32, counter32,
88f06ca4afSHartmut Brandt					   unsigned32, timeticks */
89f06ca4afSHartmut Brandt	  u_int64_t		counter64;
90f06ca4afSHartmut Brandt	}			v;
91f06ca4afSHartmut Brandt};
92f06ca4afSHartmut Brandt.Ed
93f06ca4afSHartmut Brandt.Pp
94f06ca4afSHartmut BrandtThis structure represents one variable binding from an SNMP PDU. The
95f06ca4afSHartmut Brandtfield
96f06ca4afSHartmut Brandt.Fa var
97f06ca4afSHartmut Brandtis the ASN.1 of the variable that is bound.
98f06ca4afSHartmut Brandt.Fa syntax
99f06ca4afSHartmut Brandtcontains either the syntax code of the value or an exception code for SNMPv2
100f06ca4afSHartmut Brandtand may be one of:
101f06ca4afSHartmut Brandt.Bd -literal -offset indent
102f06ca4afSHartmut Brandtenum snmp_syntax {
103f06ca4afSHartmut Brandt	SNMP_SYNTAX_NULL	= 0,
104f06ca4afSHartmut Brandt	SNMP_SYNTAX_INTEGER,	/* == INTEGER32 */
105f06ca4afSHartmut Brandt	SNMP_SYNTAX_OCTETSTRING,
106f06ca4afSHartmut Brandt	SNMP_SYNTAX_OID,
107f06ca4afSHartmut Brandt	SNMP_SYNTAX_IPADDRESS,
108f06ca4afSHartmut Brandt	SNMP_SYNTAX_COUNTER,
109f06ca4afSHartmut Brandt	SNMP_SYNTAX_GAUGE,	/* == UNSIGNED32 */
110f06ca4afSHartmut Brandt	SNMP_SYNTAX_TIMETICKS,
111f06ca4afSHartmut Brandt
112f06ca4afSHartmut Brandt	/* v2 additions */
113f06ca4afSHartmut Brandt	SNMP_SYNTAX_COUNTER64,
114f06ca4afSHartmut Brandt	/* exceptions */
115f06ca4afSHartmut Brandt	SNMP_SYNTAX_NOSUCHOBJECT,
116f06ca4afSHartmut Brandt	SNMP_SYNTAX_NOSUCHINSTANCE,
117f06ca4afSHartmut Brandt	SNMP_SYNTAX_ENDOFMIBVIEW,
118f06ca4afSHartmut Brandt};
119f06ca4afSHartmut Brandt.Ed
120f06ca4afSHartmut BrandtThe field
121f06ca4afSHartmut Brandt.Fa v
122f06ca4afSHartmut Brandtholds the actual value depending on
123f06ca4afSHartmut Brandt.Fa syntax .
124f06ca4afSHartmut BrandtNote, that if
125f06ca4afSHartmut Brandt.Fa syntax
126f06ca4afSHartmut Brandtis
127f06ca4afSHartmut Brandt.Li SNMP_SYNTAX_OCTETSTRING
128f06ca4afSHartmut Brandtand
129f06ca4afSHartmut Brandt.Fa v.octetstring.len
130f06ca4afSHartmut Brandtis not zero,
131f06ca4afSHartmut Brandt.Fa v.octetstring.octets
132f06ca4afSHartmut Brandtpoints to a string allocated by
133f06ca4afSHartmut Brandt.Xr malloc 3 .
134f06ca4afSHartmut Brandt.Pp
135f06ca4afSHartmut Brandt.Bd -literal -offset indent
136f06ca4afSHartmut Brandt#define SNMP_COMMUNITY_MAXLEN	128
137f06ca4afSHartmut Brandt#define SNMP_MAX_BINDINGS	100
138f06ca4afSHartmut Brandt
139f06ca4afSHartmut Brandtstruct snmp_pdu {
140f06ca4afSHartmut Brandt	char		community[SNMP_COMMUNITY_MAXLEN + 1];
141f06ca4afSHartmut Brandt	enum snmp_version version;
142f06ca4afSHartmut Brandt	u_int		type;
143f06ca4afSHartmut Brandt
144f06ca4afSHartmut Brandt	/* trap only */
145f06ca4afSHartmut Brandt	struct asn_oid	enterprise;
146f06ca4afSHartmut Brandt	u_char		agent_addr[4];
147f06ca4afSHartmut Brandt	int32_t		generic_trap;
148f06ca4afSHartmut Brandt	int32_t		specific_trap;
149f06ca4afSHartmut Brandt	u_int32_t	time_stamp;
150f06ca4afSHartmut Brandt
151f06ca4afSHartmut Brandt	/* others */
152f06ca4afSHartmut Brandt	int32_t		request_id;
153f06ca4afSHartmut Brandt	int32_t		error_status;
154f06ca4afSHartmut Brandt	int32_t		error_index;
155f06ca4afSHartmut Brandt
156f06ca4afSHartmut Brandt	/* fixes for encoding */
157f06ca4afSHartmut Brandt	u_char		*outer_ptr;
158f06ca4afSHartmut Brandt	u_char		*pdu_ptr;
159f06ca4afSHartmut Brandt	u_char		*vars_ptr;
160f06ca4afSHartmut Brandt
161f06ca4afSHartmut Brandt	struct snmp_value bindings[SNMP_MAX_BINDINGS];
162f06ca4afSHartmut Brandt	u_int		nbindings;
163f06ca4afSHartmut Brandt};
164f06ca4afSHartmut Brandt.Ed
165f06ca4afSHartmut BrandtThis structure contains a decoded SNMP PDU.
166f06ca4afSHartmut Brandt.Fa version
167f06ca4afSHartmut Brandtis one of
168f06ca4afSHartmut Brandt.Bd -literal -offset indent
169f06ca4afSHartmut Brandtenum snmp_version {
170f06ca4afSHartmut Brandt	SNMP_Verr = 0,
171f06ca4afSHartmut Brandt	SNMP_V1 = 1,
172f06ca4afSHartmut Brandt	SNMP_V2c,
173f06ca4afSHartmut Brandt};
174f06ca4afSHartmut Brandt.Ed
175f06ca4afSHartmut Brandtand
176f06ca4afSHartmut Brandt.Fa type
177f06ca4afSHartmut Brandtis the type of the PDU.
178f06ca4afSHartmut Brandt.Pp
179f06ca4afSHartmut BrandtThe function
180f06ca4afSHartmut Brandt.Fn snmp_value_free
181f06ca4afSHartmut Brandtis used to free all the dynamic allocated contents of an SNMP value. It does
182f06ca4afSHartmut Brandtnot free the structure pointed to by
183f06ca4afSHartmut Brandt.Fa value
184f06ca4afSHartmut Brandtitself.
185f06ca4afSHartmut Brandt.Pp
186f06ca4afSHartmut BrandtThe function
187f06ca4afSHartmut Brandt.Fn snmp_value_parse
188f06ca4afSHartmut Brandtparses the ASCII representation of an SNMP value into its binary form.
189f06ca4afSHartmut BrandtThis function is mainly used by the configuration file reader of
190f06ca4afSHartmut Brandt.Xr snmpd 1 .
191f06ca4afSHartmut Brandt.Pp
192f06ca4afSHartmut BrandtThe function
193f06ca4afSHartmut Brandt.Fn snmp_value_copy
194f06ca4afSHartmut Brandtmakes a deep copy of the value pointed to by
195f06ca4afSHartmut Brandt.Fa from
196f06ca4afSHartmut Brandtto the structure pointed to by
197f06ca4afSHartmut Brandt.Fa to .
198f06ca4afSHartmut BrandtIt assumes that
199f06ca4afSHartmut Brandt.Fa to
200f06ca4afSHartmut Brandtis uninitialized and will overwrite its previous contents. It does not itself
201f06ca4afSHartmut Brandtallocate the structure pointed to by
202f06ca4afSHartmut Brandt.Fa to .
203f06ca4afSHartmut Brandt.Pp
204f06ca4afSHartmut BrandtThe function
205f06ca4afSHartmut Brandt.Fn snmp_pdu_free
206f06ca4afSHartmut Brandtfrees all the dynamically allocated components of the PDU. It does not itself
207f06ca4afSHartmut Brandtfree the structure pointed to by
208f06ca4afSHartmut Brandt.Fa pdu .
209f06ca4afSHartmut Brandt.Pp
210f06ca4afSHartmut BrandtThe function
211f06ca4afSHartmut Brandt.Fn snmp_pdu_decode
212f06ca4afSHartmut Brandtdecodes the PDU pointed to by
213f06ca4afSHartmut Brandt.Fa buf
214f06ca4afSHartmut Brandtand stores the result into
215f06ca4afSHartmut Brandt.Fa pdu .
216f06ca4afSHartmut BrandtIf an error occurs in a variable binding the (1 based) index of this binding
217f06ca4afSHartmut Brandtis stored in the variable pointed to by
218f06ca4afSHartmut Brandt.Fa ip .
219f06ca4afSHartmut Brandt.Pp
220f06ca4afSHartmut BrandtThe function
221f06ca4afSHartmut Brandt.Fn snmp_pdu_encode
222f06ca4afSHartmut Brandtencodes the PDU
223f06ca4afSHartmut Brandt.Fa pdu
224f06ca4afSHartmut Brandtinto the an octetstring in buffer
225f06ca4afSHartmut Brandt.Fa buf .
226f06ca4afSHartmut Brandt.Pp
227f06ca4afSHartmut BrandtThe function
228f06ca4afSHartmut Brandt.Fn snmp_pdu_dump
229f06ca4afSHartmut Brandtdumps the PDU in a human readable form by calling
230f06ca4afSHartmut Brandt.Fn snmp_printf .
231f06ca4afSHartmut Brandt.Pp
232f06ca4afSHartmut BrandtThe function
233f06ca4afSHartmut Brandt.Fn TRUTH_MK
234f06ca4afSHartmut Brandttakes a C truth value (zero or non-zero) and makes an SNMP truth value (2 or 1).
235f06ca4afSHartmut BrandtThe function
236f06ca4afSHartmut Brandt.Fn TRUTH_GET
237f06ca4afSHartmut Brandttakes an SNMP truth value and makes a C truth value (0 or 1).
238f06ca4afSHartmut BrandtThe function
239f06ca4afSHartmut Brandt.Fn TRUTH_OK
240f06ca4afSHartmut Brandtchecks, whether its argument is a legal SNMP truth value.
241f06ca4afSHartmut Brandt.Sh DIAGNOSTICS
242f06ca4afSHartmut BrandtWhen an error occures in any of the function the function pointed to
243f06ca4afSHartmut Brandtby the global pointer
244f06ca4afSHartmut Brandt.Bd -literal -offset indent
245f06ca4afSHartmut Brandtextern void (*snmp_error)(const char *, ...);
246f06ca4afSHartmut Brandt.Ed
247f06ca4afSHartmut Brandt.Pp
248f06ca4afSHartmut Brandtwith a
249f06ca4afSHartmut Brandt.Xr printf 3
250f06ca4afSHartmut Brandtstyle format string.
251f06ca4afSHartmut BrandtThere is a default error handler in the library that prints a message
252f06ca4afSHartmut Brandtstarting with
253f06ca4afSHartmut Brandt.Sq SNMP:
254f06ca4afSHartmut Brandtfollowed by the error message to standard error.
255f06ca4afSHartmut Brandt.Pp
256f06ca4afSHartmut BrandtThe function pointed to by
257f06ca4afSHartmut Brandt.Bd -literal -offset indent
258f06ca4afSHartmut Brandtextern void (*snmp_printf)(const char *, ...);
259f06ca4afSHartmut Brandt.Ed
260f06ca4afSHartmut Brandt.Pp
261f06ca4afSHartmut Brandtis called by the
262f06ca4afSHartmut Brandt.Fn snmp_pdu_dump
263f06ca4afSHartmut Brandtfunction.
264f06ca4afSHartmut BrandtThe default handler is
265f06ca4afSHartmut Brandt.Xr printf 3 .
266f06ca4afSHartmut Brandt.Sh ERRORS
267f06ca4afSHartmut Brandt.Fn snmp_pdu_decode
268f06ca4afSHartmut Brandtwill return one of the following return codes:
269f06ca4afSHartmut Brandt.Bl -tag -width Er
270f06ca4afSHartmut Brandt.It Bq Er SNMP_CODE_OK
271f06ca4afSHartmut BrandtSuccess.
272f06ca4afSHartmut Brandt.It Bq Er SNMP_CODE_FAILED
273f06ca4afSHartmut BrandtThe ASN.1 coding was wrong.
274f06ca4afSHartmut Brandt.It Bq Er SNMP_CODE_BADLEN
275f06ca4afSHartmut BrandtA variable binding value had a wrong length field.
276f06ca4afSHartmut Brandt.It Bq Er SNMP_CODE_OORANGE
277f06ca4afSHartmut BrandtA variable binding value was out of the allowed range.
278f06ca4afSHartmut Brandt.It Bq Er SNMP_CODE_BADVERS
279f06ca4afSHartmut BrandtThe PDU is of an unsupported version.
280f06ca4afSHartmut Brandt.It Bq Er SNMP_CODE_BADENQ
281f06ca4afSHartmut BrandtThere was an ASN.1 value with an unsupported tag.
282f06ca4afSHartmut Brandt.El
283f06ca4afSHartmut Brandt.Pp
284f06ca4afSHartmut Brandt.Fn snmp_pdu_encode
285f06ca4afSHartmut Brandtwill return one of the following return codes:
286f06ca4afSHartmut Brandt.Bl -tag -width Er
287f06ca4afSHartmut Brandt.It Bq Er SNMP_CODE_OK
288f06ca4afSHartmut BrandtSuccess.
289f06ca4afSHartmut Brandt.It Bq Er SNMP_CODE_FAILED
290f06ca4afSHartmut BrandtEncoding failed.
291f06ca4afSHartmut Brandt.El
292f06ca4afSHartmut Brandt.Sh SEE ALSO
293f06ca4afSHartmut Brandt.Xr snmpd 1 ,
294f06ca4afSHartmut Brandt.Xr gensnmptree 1 ,
295f06ca4afSHartmut Brandt.Xr bsnmplib 3
296f06ca4afSHartmut Brandt.Xr bsnmpclient 3 ,
297f06ca4afSHartmut Brandt.Xr bsnmpagent 3
298f06ca4afSHartmut Brandt.Sh STANDARDS
299f06ca4afSHartmut BrandtThis implementation conforms to the applicable IETF RFCs and ITU-T
300f06ca4afSHartmut Brandtrecommendations.
301f06ca4afSHartmut Brandt.Sh AUTHORS
3028eecd77aSHartmut Brandt.An Hartmut Brandt Aq harti@freebsd.org
303