-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsnmp.h
159 lines (115 loc) · 4.94 KB
/
snmp.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/*
Copyright (c) 2011, Fraunhofer FOKUS - Fraunhofer Institute for Open Communication Systems FOKUS
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of Fraunhofer FOKUS - Fraunhofer Institute for Open Communication Systems FOKUS
nor the names of its contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
///////////////////////////////////////////////////////////////////////
// Module: snmp.h
// Author: Andreas Bartusch <[email protected]>
// Contact@FOKUS: [email protected]
// Date: 22.02.2011
////////////////////////////////////////////////////////////////////////
#ifndef SNMP_H_INCLUDED
#define SNMP_H_INCLUDED
/* PDU Types */
#define PDU_GET_REQ 0xA0
#define PDU_GET_NEXT_REQ 0xA1
#define PDU_GET_RESP 0xA2
#define PDU_SET_REQ 0xA3
#define PDU_TRAP 0xA4
/* Primitive Types */
#define PRIMV_INT 0x02
#define PRIMV_OCTSTR 0x04
#define PRIMV_NULL 0x05
#define PRIMV_OBJID 0x06
#define PRIMV_IPADDR 0x40
#define PRIMV_COUNTR 0x41
#define PRIMV_GAUGE 0x42
#define PRIMV_TIMTICK 0x43
#define PRIMV_OPAQUE 0x44
#define PRIMV_NSAPADDR 0x45
struct snmp_message_rx{
unsigned int snmp_message_length;
unsigned char version;
unsigned char* community;
unsigned char* snmp_pdu;
unsigned int snmp_pdu_length;
};
struct snmp_pdu_rx{
unsigned char snmp_pdu_type;
unsigned int snmp_pdu_length;
unsigned int request_id;
unsigned char error;
unsigned char error_index;
unsigned char* varbindings;
unsigned int varbindings_length;
};
struct varbind{
unsigned char* oid;
unsigned char data_type;
void* value;
};
struct varbind_list_rx{
unsigned int varbind_list_length;
unsigned char varbind_idx;
struct varbind** varbind_list;
};
struct varbind_list_tx{
unsigned int varbind_list_len;
unsigned char* varbind_list;
};
struct snmp_pdu_tx{
unsigned int snmp_pdu_len;
unsigned char* snmp_pdu;
};
struct snmp_message_tx{
unsigned int snmp_message_len;
unsigned char* snmp_message;
};
int decode_integer(unsigned char*, unsigned int*);
unsigned char* decode_string(unsigned char*, unsigned int*);
unsigned char* decode_oid(unsigned char*, unsigned int*);
unsigned char* encode_oid(unsigned char*);
unsigned char* encode_string(unsigned char*);
unsigned char* encode_integer(unsigned int);
unsigned char* encode_integer_by_length(unsigned int, unsigned char, unsigned char);
unsigned char* return_pdu_type_string(unsigned char);
unsigned char* return_data_type_string(unsigned char);
void disp_snmp_message_rx(struct snmp_message_rx*);
void disp_snmp_pdu_rx(struct snmp_pdu_rx*);
void disp_varbind_list_rx(struct varbind_list_rx*);
void disp_varbind(struct varbind*);
struct snmp_message_rx* create_snmp_message_rx(unsigned char*);
struct snmp_pdu_rx* create_snmp_pdu_rx(unsigned char*);
struct varbind_list_rx* create_varbind_list_rx(unsigned char*);
struct varbind* create_varbind(unsigned char*, unsigned char, void*);
struct varbind_list_tx* create_varbind_list_tx(struct varbind_list_rx*);
struct snmp_pdu_tx *create_snmp_pdu_tx(unsigned char, unsigned int, unsigned char,
unsigned char, struct varbind_list_tx *);
struct snmp_message_tx* create_snmp_message_tx(unsigned char*, struct snmp_pdu_tx*);
void update_varbind(struct varbind*, unsigned char, void*);
void clr_snmp_message_rx(struct snmp_message_rx*);
void clr_snmp_pdu_rx(struct snmp_pdu_rx*);
void clr_varbind_list_rx(struct varbind_list_rx*);
void clr_varbind(struct varbind*);
void clr_varbind_list_tx(struct varbind_list_tx*);
void clr_snmp_pdu_tx(struct snmp_pdu_tx*);
void clr_snmp_message_tx(struct snmp_message_tx*);
#endif