NetBurner 3.5.7
PDF Version
snmp_table.h
1/*NB_REVISION*/
2
3/*NB_COPYRIGHT*/
4
10#ifndef _NB_SNMP_TABLE_H
11#define _NB_SNMP_TABLE_H
12
13#include "asn1.h"
14
59typedef int *snmp_typeObjID;
60typedef const char *snmp_typeString;
61typedef int snmp_typeEnumVal;
62typedef int snmp_typeINTEGER;
64typedef unsigned int snmp_typeCounter;
65typedef int snmp_typeGauge;
66typedef unsigned long snmp_typeTimeTic;
67typedef unsigned long long snmp_typeCounter64;
68typedef unsigned int snmp_typeUnsigned;
69typedef unsigned int snmp_typeUInteger;
70typedef int snmp_typeInteger32;
73typedef unsigned long snmp_typeTimeTicks;
82void GetOid(const char *tOid, int *oid);
83
88#define SNMP_SET_WRONG_TYPE (-2)
89#define SNMP_SET_FAIL (-1)
90#define SNMP_SET_OK (0)
93#define MAX_COMMUNITY_SIZE (80)
94
105struct SNMP_Request
106{
107 uint8_t community_buffer[MAX_COMMUNITY_SIZE];
108 uint8_t pdu_type;
109 uint8_t version;
110 uint32_t comm_mask;
111 int request_id;
112 int error_status;
113 int error_index;
114 int cur_index;
115 ASN get_asn;
116 ASN put_asn;
117 puint8_t pError_Index;
118 puint8_t pError_Value;
119};
120
128#define ASN_typeObjID ASN_OBJECT_ID
129#define ASN_typeString ASN_OCTET_STR
130#define ASN_typeEnumVal ASN_INTEGER
131#define ASN_typeINTEGER ASN_INTEGER
132#define ASN_typeNetAddr ASN_OCTET_STR
133#define ASN_typeCounter SMI_COUNTER32
134#define ASN_typeGauge SMI_GAUGE32
135#define ASN_typeTimeTic SMI_UNSIGNED32
136#define ASN_typeCounter64 SMI_COUNTER64
137#define ASN_typeUnsigned SMI_UNSIGNED32
138#define ASN_typeUInteger SMI_UNSIGNED32
139#define ASN_typeInteger32 SMI_INTEGER
140#define ASN_typeIpAddr SMI_IPADDRESS
141#define ASN_typeTimeTicks SMI_TIMETICKS
144 /* end snmpTypesAndCodes */
145
158typedef int *(GetpIFunc)();
159typedef const char *(GetCCFunc)();
160typedef void(GetOTFunc)(uint8_t *&pData, int &len);
161typedef int(GetIFunc)();
162typedef unsigned int(GetuIFunc)();
163typedef unsigned long(GetulFunc)();
164typedef unsigned long long(GetullFunc)();
165typedef MACADR(GetMadrFunc)();
176typedef int(PutpIFunc)(int *, int);
177typedef int(PutCCFunc)(const char *, int);
178typedef int(PutOTFunc)(const unsigned char *, int, int);
179typedef int(PutIFunc)(int, int);
180typedef int(PutuIFunc)(unsigned int, int);
181typedef int(PutulFunc)(unsigned long, int);
182typedef int(PutullFunc)(unsigned long long, int);
183typedef int(PutMadrFunc)(MACADR, int);
192typedef int(PutpIFuncTab)(int *, int, void *);
193typedef int(PutCCFuncTab)(const char *, int, void *);
194typedef int(PutOTFuncTab)(const unsigned char *, int, int, void *);
195typedef int(PutIFuncTab)(int, int, void *);
196typedef int(PutuIFuncTab)(unsigned int, int, void *);
197typedef int(PutulFuncTab)(unsigned long, int, void *);
198typedef int(PutullFuncTab)(unsigned long long, int, void *);
199typedef int(PutMadrFuncTab)(MACADR, int, void *);
202 /* end snmpCallbackSignatures */
203
208typedef void(GetOIDFunction)(SNMP_Request &req, void *data_el, int subid);
209
215{
216 void *pData;
217 int Opaque_int;
218 GetOIDFunction *pf;
219 uint32_t cmask;
220 const char *pOid;
221 ReadLookUpObject *pNext;
222 ReadLookUpObject *pPrev;
223};
224
229typedef int(PutOIDFunction)(SNMP_Request &req, BOOL second_pass, void *pdata, int subid);
230
236{
237 void *pData;
238 int ObjectType;
239 int WriteType;
240 PutOIDFunction *pf;
241 uint32_t cmask;
242 const char *pOid;
243 WriteLookUpObject *pNext;
244 WriteLookUpObject *pPrev;
245};
246
269{
271
272 void PopulatelookUpObj(const char *oid, int typ, void *pData, GetOIDFunction *pf, uint32_t commmask);
273
274 public:
276 static void GetpIFunction(SNMP_Request &req, void *data_el, int subid);
277 static void GetuIFunction(SNMP_Request &req, void *data_el, int subid);
278 static void GetCCFunction(SNMP_Request &req, void *data_el, int subid);
279 static void GetOTFunction(SNMP_Request &req, void *data_el, int subid);
280 static void GetIFunction(SNMP_Request &req, void *data_el, int subid);
281 static void GetulFunction(SNMP_Request &req, void *data_el, int subid);
282 static void GetullFunction(SNMP_Request &req, void *data_el, int subid);
283 static void GetMadrFunction(SNMP_Request &req, void *data_el, int subid);
285
286 public:
294 SNMPReadObject(const char *oid, int typ, GetpIFunc *pf, uint32_t commmask)
295 {
296 PopulatelookUpObj(oid, typ, (void *)pf, GetpIFunction, commmask);
297 }
298
300 SNMPReadObject(const char *oid, int typ, GetuIFunc *pf, uint32_t commmask)
301 {
302 PopulatelookUpObj(oid, typ, (void *)pf, GetuIFunction, commmask);
303 }
304 SNMPReadObject(const char *oid, int typ, GetCCFunc *pf, uint32_t commmask)
305 {
306 PopulatelookUpObj(oid, typ, (void *)pf, GetCCFunction, commmask);
307 }
308 SNMPReadObject(const char *oid, int typ, GetOTFunc *pf, uint32_t commmask)
309 {
310 PopulatelookUpObj(oid, typ, (void *)pf, GetOTFunction, commmask);
311 }
312 SNMPReadObject(const char *oid, int typ, GetIFunc *pf, uint32_t commmask)
313 {
314 PopulatelookUpObj(oid, typ, (void *)pf, GetIFunction, commmask);
315 }
316 SNMPReadObject(const char *oid, int typ, GetulFunc *pf, uint32_t commmask)
317 {
318 PopulatelookUpObj(oid, typ, (void *)pf, GetulFunction, commmask);
319 }
320 SNMPReadObject(const char *oid, int typ, GetullFunc *pf, uint32_t commmask)
321 {
322 PopulatelookUpObj(oid, typ, (void *)pf, GetullFunction, commmask);
323 }
324 SNMPReadObject(const char *oid, int typ, GetMadrFunc *pf, uint32_t commmask)
325 {
326 PopulatelookUpObj(oid, typ, (void *)pf, GetMadrFunction, commmask);
327 }
329};
330
353{
355
357 static int PutpIFunction(SNMP_Request &req, BOOL second_pass, void *pdata, int subid);
358 static int PutuIFunction(SNMP_Request &req, BOOL second_pass, void *pdata, int subid);
359 static int PutCCFunction(SNMP_Request &req, BOOL second_pass, void *pdata, int subid);
360 static int PutOTFunction(SNMP_Request &req, BOOL second_pass, void *pdata, int subid);
361 static int PutIFunction(SNMP_Request &req, BOOL second_pass, void *pdata, int subid);
362 static int PutulFunction(SNMP_Request &req, BOOL second_pass, void *pdata, int subid);
363 static int PutullFunction(SNMP_Request &req, BOOL second_pass, void *pdata, int subid);
364 static int PutMadrFunction(SNMP_Request &req, BOOL second_pass, void *pdata, int subid);
366
367 void PopulatelookUpObj(const char *oid, int typ, void *pData, PutOIDFunction *pf, uint32_t commmask);
368
369 public:
377 SNMPWriteObject(const char *oid, int typ, PutpIFunc *pf, uint32_t commmask)
378 {
379 PopulatelookUpObj(oid, typ, (void *)pf, PutpIFunction, commmask);
380 }
381
383 SNMPWriteObject(const char *oid, int typ, PutuIFunc *pf, uint32_t commmask)
384 {
385 PopulatelookUpObj(oid, typ, (void *)pf, PutuIFunction, commmask);
386 }
387 SNMPWriteObject(const char *oid, int typ, PutCCFunc *pf, uint32_t commmask)
388 {
389 PopulatelookUpObj(oid, typ, (void *)pf, PutCCFunction, commmask);
390 }
391 SNMPWriteObject(const char *oid, int typ, PutOTFunc *pf, uint32_t commmask)
392 {
393 PopulatelookUpObj(oid, typ, (void *)pf, PutOTFunction, commmask);
394 }
395 SNMPWriteObject(const char *oid, int typ, PutIFunc *pf, uint32_t commmask)
396 {
397 PopulatelookUpObj(oid, typ, (void *)pf, PutIFunction, commmask);
398 }
399 SNMPWriteObject(const char *oid, int typ, PutulFunc *pf, uint32_t commmask)
400 {
401 PopulatelookUpObj(oid, typ, (void *)pf, PutulFunction, commmask);
402 }
403 SNMPWriteObject(const char *oid, int typ, PutullFunc *pf, uint32_t commmask)
404 {
405 PopulatelookUpObj(oid, typ, (void *)pf, PutullFunction, commmask);
406 }
407 SNMPWriteObject(const char *oid, int typ, PutMadrFunc *pf, uint32_t commmask)
408 {
409 PopulatelookUpObj(oid, typ, (void *)pf, PutMadrFunction, commmask);
410 }
412};
413
422void InitializeMibs();
423
444#define SNMPREADFUNC(w, x, y, z, q) static SNMPReadObject W##w(x, y, z, q);
445
471#define SNMPWRITEFUNC(w, x, y, z, q) static SNMPWriteObject R##w(x, y, z, q);
472
473 /* end snmpScalarRegister */
474
491void AddToIndex(int asn_type, snmp_typeInteger32 val, int &len, int *oidadd);
492
494void AddToIndex(int asn_type, snmp_typeObjID val, int &len, int *oidadd);
495void AddToIndex(int asn_type, snmp_typeString val, int &len, int *oidadd);
496void AddToIndex(int asn_type, snmp_typeEnumVal val, int &len, int *oidadd);
497void AddToIndex(int asn_type, snmp_typeINTEGER val, int &len, int *oidadd);
498void AddToIndex(int asn_type, snmp_typeNetAddr val, int &len, int *oidadd);
499void AddToIndex(int asn_type, snmp_typeCounter val, int &len, int *oidadd);
500void AddToIndex(int asn_type, snmp_typeGauge val, int &len, int *oidadd);
501void AddToIndex(int asn_type, snmp_typeTimeTic val, int &len, int *oidadd);
502void AddToIndex(int asn_type, snmp_typeCounter64 val, int &len, int *oidadd);
503void AddToIndex(int asn_type, snmp_typeUnsigned val, int &len, int *oidadd);
504void AddToIndex(int asn_type, snmp_typeUInteger val, int &len, int *oidadd);
505void AddToIndex(int asn_type, snmp_typeIpAddr val, int &len, int *oidadd);
506void AddToIndex(int asn_type, snmp_typeTimeTicks val, int &len, int *oidadd);
508
520typedef void(TableElementFunc)(SNMP_Request &req, void *data_el, int subid);
521
532void AddSnmpEntry(int subid, const char *root, int add_len, int *suffix, TableElementFunc *pf, void *pData, uint32_t comm_mask);
533
549void AddSnmpWriteEntry(int asn_type, const char *root, int add_len, int *suffix, PutIFuncTab *pf, void *pData, uint32_t comm_mask);
550
552void AddSnmpWriteEntry(int asn_type, const char *root, int add_len, int *suffix, PutpIFuncTab *pf, void *pData, uint32_t comm_mask);
553void AddSnmpWriteEntry(int asn_type, const char *root, int add_len, int *suffix, PutCCFuncTab *pf, void *pData, uint32_t comm_mask);
554void AddSnmpWriteEntry(int asn_type, const char *root, int add_len, int *suffix, PutOTFuncTab *pf, void *pData, uint32_t comm_mask);
555void AddSnmpWriteEntry(int asn_type, const char *root, int add_len, int *suffix, PutulFuncTab *pf, void *pData, uint32_t comm_mask);
556void AddSnmpWriteEntry(int asn_type, const char *root, int add_len, int *suffix, PutuIFuncTab *pf, void *pData, uint32_t comm_mask);
557void AddSnmpWriteEntry(int asn_type, const char *root, int add_len, int *suffix, PutullFuncTab *pf, void *pData, uint32_t comm_mask);
558void AddSnmpWriteEntry(int asn_type, const char *root, int add_len, int *suffix, PutMadrFuncTab *pf, void *pData, uint32_t comm_mask);
560
566void SnmpRemoveTableElement(const char *root, void *data_el);
567
568 /* end snmpTableRegister */
569
570#endif
Used to store and manipulate IPv4 addresses in dual stack mode.
Definition nettypes.h:225
Used to hold and manipulate IPv4 and IPv6 addresses in dual stack mode.
Definition ipv6_addr.h:41
Used to store and manipulate MAC addresses.
Definition nettypes.h:69
Registers a scalar read callback with the SNMP agent.
Definition snmp_table.h:269
SNMPReadObject(const char *oid, int typ, GetpIFunc *pf, uint32_t commmask)
Register a read callback for one SNMP scalar.
Definition snmp_table.h:294
Registers a scalar write callback with the SNMP agent.
Definition snmp_table.h:353
SNMPWriteObject(const char *oid, int typ, PutpIFunc *pf, uint32_t commmask)
Register a write callback for one SNMP scalar.
Definition snmp_table.h:377
class MACADR MACADR
Used to store and manipulate MAC addresses.
const char * GetCCFunc()
Returns a C string.
Definition snmp_table.h:159
int PutIFuncTab(int, int, void *)
Table variant of PutIFunc.
Definition snmp_table.h:195
int PutullFunc(unsigned long long, int)
Writes unsigned long long.
Definition snmp_table.h:182
int PutuIFuncTab(unsigned int, int, void *)
Table variant of PutuIFunc.
Definition snmp_table.h:196
int PutpIFuncTab(int *, int, void *)
Table variant of PutpIFunc.
Definition snmp_table.h:192
int PutCCFuncTab(const char *, int, void *)
Table variant of PutCCFunc.
Definition snmp_table.h:193
unsigned long GetulFunc()
Returns unsigned long.
Definition snmp_table.h:163
MACADR GetMadrFunc()
Returns a MAC address.
Definition snmp_table.h:165
int PutpIFunc(int *, int)
Writes pointer-to-int.
Definition snmp_table.h:176
int PutIFunc(int, int)
Writes signed int.
Definition snmp_table.h:179
void GetOTFunc(uint8_t *&pData, int &len)
Returns a raw octet buffer and its length.
Definition snmp_table.h:160
int PutuIFunc(unsigned int, int)
Writes unsigned int.
Definition snmp_table.h:180
int PutulFuncTab(unsigned long, int, void *)
Table variant of PutulFunc.
Definition snmp_table.h:197
int GetIFunc()
Returns signed int.
Definition snmp_table.h:161
int PutCCFunc(const char *, int)
Writes a C string.
Definition snmp_table.h:177
int PutOTFunc(const unsigned char *, int, int)
Writes an octet string (buffer, length, bTest).
Definition snmp_table.h:178
int PutMadrFunc(MACADR, int)
Writes a MAC address.
Definition snmp_table.h:183
int PutullFuncTab(unsigned long long, int, void *)
Table variant of PutullFunc.
Definition snmp_table.h:198
unsigned int GetuIFunc()
Returns unsigned int.
Definition snmp_table.h:162
unsigned long long GetullFunc()
Returns unsigned long long.
Definition snmp_table.h:164
int PutMadrFuncTab(MACADR, int, void *)
Table variant of PutMadrFunc.
Definition snmp_table.h:199
int PutulFunc(unsigned long, int)
Writes unsigned long.
Definition snmp_table.h:181
int * GetpIFunc()
Returns pointer-to-int (OID values).
Definition snmp_table.h:158
int PutOTFuncTab(const unsigned char *, int, int, void *)
Table variant of PutOTFunc.
Definition snmp_table.h:194
void AddToIndex(int asn_type, snmp_typeInteger32 val, int &len, int *oidadd)
Append a value to the OID index being constructed for a table row.
void AddSnmpEntry(int subid, const char *root, int add_len, int *suffix, TableElementFunc *pf, void *pData, uint32_t comm_mask)
Register a read entry for one column of an SNMP table row.
void SnmpRemoveTableElement(const char *root, void *data_el)
Remove a previously registered table element from the SNMP agent.
void AddSnmpWriteEntry(int asn_type, const char *root, int add_len, int *suffix, PutIFuncTab *pf, void *pData, uint32_t comm_mask)
Register a write callback for a single cell of an SNMP table.
void TableElementFunc(SNMP_Request &req, void *data_el, int subid)
Signature of a table-element read callback.
Definition snmp_table.h:520
IPADDR4 snmp_typeIpAddr4
IPv4 address.
Definition snmp_table.h:71
unsigned long snmp_typeTimeTic
TimeTicks (legacy spelling, hundredths of a second).
Definition snmp_table.h:66
unsigned long long snmp_typeCounter64
Counter64.
Definition snmp_table.h:67
unsigned long snmp_typeTimeTicks
TimeTicks in hundredths of a second.
Definition snmp_table.h:73
unsigned int snmp_typeCounter
Counter32 — monotonically increasing count.
Definition snmp_table.h:64
int snmp_typeInteger32
Signed 32-bit integer.
Definition snmp_table.h:70
unsigned int snmp_typeUnsigned
Unsigned32.
Definition snmp_table.h:68
const char * snmp_typeString
Octet string (C string).
Definition snmp_table.h:60
#define MAX_COMMUNITY_SIZE
Maximum length of an SNMP community string in bytes.
Definition snmp_table.h:93
int snmp_typeGauge
Gauge32 — instantaneous value that may rise or fall.
Definition snmp_table.h:65
unsigned int snmp_typeUInteger
Unsigned integer (alias of Unsigned32).
Definition snmp_table.h:69
int * snmp_typeObjID
Object identifier (OID).
Definition snmp_table.h:59
int snmp_typeEnumVal
Enumerated integer value.
Definition snmp_table.h:61
MACADR snmp_typeNetAddr
MAC / network-layer address.
Definition snmp_table.h:63
IPADDR snmp_typeIpAddr
IP address (IPv4/IPv6-aware).
Definition snmp_table.h:72
int snmp_typeINTEGER
Generic INTEGER.
Definition snmp_table.h:62
Internal read-side lookup record linking an OID to its dispatcher.
Definition snmp_table.h:215
Internal write-side lookup record linking an OID to its dispatcher.
Definition snmp_table.h:236