]> CyberLeo.Net >> Repos - FreeBSD/releng/8.1.git/blob - contrib/bsnmp/lib/snmp.h
Copy stable/8 to releng/8.1 in preparation for 8.1-RC1.
[FreeBSD/releng/8.1.git] / contrib / bsnmp / lib / snmp.h
1 /*
2  * Copyright (c) 2001-2003
3  *      Fraunhofer Institute for Open Communication Systems (FhG Fokus).
4  *      All rights reserved.
5  *
6  * Author: Harti Brandt <harti@freebsd.org>
7  * 
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 
17  * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  *
29  * $Begemot: bsnmp/lib/snmp.h,v 1.30 2004/08/06 08:46:54 brandt Exp $
30  *
31  * Header file for SNMP functions.
32  */
33 #ifndef snmp_h_
34 #define snmp_h_
35
36 #include <sys/types.h>
37
38 #define SNMP_COMMUNITY_MAXLEN   128
39 #define SNMP_MAX_BINDINGS       100
40
41 enum snmp_syntax {
42         SNMP_SYNTAX_NULL        = 0,
43         SNMP_SYNTAX_INTEGER,            /* == INTEGER32 */
44         SNMP_SYNTAX_OCTETSTRING,
45         SNMP_SYNTAX_OID,
46         SNMP_SYNTAX_IPADDRESS,
47         SNMP_SYNTAX_COUNTER,
48         SNMP_SYNTAX_GAUGE,              /* == UNSIGNED32 */
49         SNMP_SYNTAX_TIMETICKS,
50
51         /* v2 additions */
52         SNMP_SYNTAX_COUNTER64,
53         SNMP_SYNTAX_NOSUCHOBJECT,       /* exception */
54         SNMP_SYNTAX_NOSUCHINSTANCE,     /* exception */
55         SNMP_SYNTAX_ENDOFMIBVIEW,       /* exception */
56 };
57
58 struct snmp_value {
59         struct asn_oid          var;
60         enum snmp_syntax        syntax;
61         union snmp_values {
62           int32_t               integer;        /* also integer32 */
63           struct {
64             u_int               len;
65             u_char              *octets;
66           }                     octetstring;
67           struct asn_oid        oid;
68           u_char                ipaddress[4];
69           uint32_t              uint32;         /* also gauge32, counter32,
70                                                    unsigned32, timeticks */
71           uint64_t              counter64;
72         }                       v;
73 };
74
75 enum snmp_version {
76         SNMP_Verr = 0,
77         SNMP_V1 = 1,
78         SNMP_V2c,
79 };
80
81 struct snmp_pdu {
82         char            community[SNMP_COMMUNITY_MAXLEN + 1];
83         enum snmp_version version;
84         u_int           type;
85
86         /* trap only */
87         struct asn_oid  enterprise;
88         u_char          agent_addr[4];
89         int32_t         generic_trap;
90         int32_t         specific_trap;
91         uint32_t        time_stamp;
92
93         /* others */
94         int32_t         request_id;
95         int32_t         error_status;
96         int32_t         error_index;
97
98         /* fixes for encoding */
99         u_char          *outer_ptr;
100         u_char          *pdu_ptr;
101         u_char          *vars_ptr;
102
103         struct snmp_value bindings[SNMP_MAX_BINDINGS];
104         u_int           nbindings;
105 };
106 #define snmp_v1_pdu snmp_pdu
107
108 #define SNMP_PDU_GET            0
109 #define SNMP_PDU_GETNEXT        1
110 #define SNMP_PDU_RESPONSE       2
111 #define SNMP_PDU_SET            3
112 #define SNMP_PDU_TRAP           4       /* v1 */
113 #define SNMP_PDU_GETBULK        5       /* v2 */
114 #define SNMP_PDU_INFORM         6       /* v2 */
115 #define SNMP_PDU_TRAP2          7       /* v2 */
116 #define SNMP_PDU_REPORT         8       /* v2 */
117
118 #define SNMP_ERR_NOERROR        0
119 #define SNMP_ERR_TOOBIG         1
120 #define SNMP_ERR_NOSUCHNAME     2       /* v1 */
121 #define SNMP_ERR_BADVALUE       3       /* v1 */
122 #define SNMP_ERR_READONLY       4       /* v1 */
123 #define SNMP_ERR_GENERR         5
124 #define SNMP_ERR_NO_ACCESS      6       /* v2 */
125 #define SNMP_ERR_WRONG_TYPE     7       /* v2 */
126 #define SNMP_ERR_WRONG_LENGTH   8       /* v2 */
127 #define SNMP_ERR_WRONG_ENCODING 9       /* v2 */
128 #define SNMP_ERR_WRONG_VALUE    10      /* v2 */
129 #define SNMP_ERR_NO_CREATION    11      /* v2 */
130 #define SNMP_ERR_INCONS_VALUE   12      /* v2 */
131 #define SNMP_ERR_RES_UNAVAIL    13      /* v2 */
132 #define SNMP_ERR_COMMIT_FAILED  14      /* v2 */
133 #define SNMP_ERR_UNDO_FAILED    15      /* v2 */
134 #define SNMP_ERR_AUTH_ERR       16      /* v2 */
135 #define SNMP_ERR_NOT_WRITEABLE  17      /* v2 */
136 #define SNMP_ERR_INCONS_NAME    18      /* v2 */
137
138 #define SNMP_TRAP_COLDSTART     0
139 #define SNMP_TRAP_WARMSTART     1
140 #define SNMP_TRAP_LINKDOWN      2
141 #define SNMP_TRAP_LINKUP        3
142 #define SNMP_TRAP_AUTHENTICATION_FAILURE        4
143 #define SNMP_TRAP_EGP_NEIGHBOR_LOSS     5
144 #define SNMP_TRAP_ENTERPRISE    6
145
146 enum snmp_code {
147         SNMP_CODE_OK = 0,
148         SNMP_CODE_FAILED,
149         SNMP_CODE_BADVERS,
150         SNMP_CODE_BADLEN,
151         SNMP_CODE_BADENC,
152         SNMP_CODE_OORANGE,
153 };
154
155 void snmp_value_free(struct snmp_value *);
156 int snmp_value_parse(const char *, enum snmp_syntax, union snmp_values *);
157 int snmp_value_copy(struct snmp_value *, const struct snmp_value *);
158
159 void snmp_pdu_free(struct snmp_pdu *);
160 enum snmp_code snmp_pdu_decode(struct asn_buf *b, struct snmp_pdu *pdu, int32_t *);
161 enum snmp_code snmp_pdu_encode(struct snmp_pdu *pdu, struct asn_buf *resp_b);
162
163 int snmp_pdu_snoop(const struct asn_buf *);
164
165 void snmp_pdu_dump(const struct snmp_pdu *pdu);
166
167 extern void (*snmp_error)(const char *, ...);
168 extern void (*snmp_printf)(const char *, ...);
169
170 #define TRUTH_MK(F) ((F) ? 1 : 2)
171 #define TRUTH_GET(T) (((T) == 1) ? 1 : 0)
172 #define TRUTH_OK(T)  ((T) == 1 || (T) == 2)
173
174 #endif