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