|
version 1.1.1.1, 2012/02/21 17:26:12
|
version 1.1.1.2, 2013/07/21 23:54:39
|
|
Line 22
|
Line 22
|
| #ifndef _ZEBRA_SNMP_H |
#ifndef _ZEBRA_SNMP_H |
| #define _ZEBRA_SNMP_H |
#define _ZEBRA_SNMP_H |
| |
|
| #define SMUX_PORT_DEFAULT 199 | #include <net-snmp/agent/net-snmp-agent-includes.h> |
| | #include <net-snmp/agent/snmp_vars.h> |
| |
|
| #define SMUXMAXPKTSIZE 1500 |
|
| #define SMUXMAXSTRLEN 256 |
|
| |
|
| #define SMUX_OPEN (ASN_APPLICATION | ASN_CONSTRUCTOR | 0) |
|
| #define SMUX_CLOSE (ASN_APPLICATION | ASN_PRIMITIVE | 1) |
|
| #define SMUX_RREQ (ASN_APPLICATION | ASN_CONSTRUCTOR | 2) |
|
| #define SMUX_RRSP (ASN_APPLICATION | ASN_PRIMITIVE | 3) |
|
| #define SMUX_SOUT (ASN_APPLICATION | ASN_PRIMITIVE | 4) |
|
| |
|
| #define SMUX_GET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0) |
|
| #define SMUX_GETNEXT (ASN_CONTEXT | ASN_CONSTRUCTOR | 1) |
|
| #define SMUX_GETRSP (ASN_CONTEXT | ASN_CONSTRUCTOR | 2) |
|
| #define SMUX_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | 3) |
|
| #define SMUX_TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 4) |
|
| |
|
| #define SMUX_MAX_FAILURE 3 |
|
| |
|
| /* Structures here are mostly compatible with UCD SNMP 4.1.1 */ |
/* Structures here are mostly compatible with UCD SNMP 4.1.1 */ |
| #define MATCH_FAILED (-1) |
#define MATCH_FAILED (-1) |
| #define MATCH_SUCCEEDED 0 |
#define MATCH_SUCCEEDED 0 |
|
Line 55
|
Line 39
|
| |
|
| #define IN_ADDR_SIZE sizeof(struct in_addr) |
#define IN_ADDR_SIZE sizeof(struct in_addr) |
| |
|
| struct variable; | #undef REGISTER_MIB |
| |
| #define REGISTER_MIB(descr, var, vartype, theoid) \ |
#define REGISTER_MIB(descr, var, vartype, theoid) \ |
| smux_register_mib(descr, (struct variable *)var, sizeof(struct vartype), \ |
smux_register_mib(descr, (struct variable *)var, sizeof(struct vartype), \ |
| sizeof(var)/sizeof(struct vartype), \ |
sizeof(var)/sizeof(struct vartype), \ |
| theoid, sizeof(theoid)/sizeof(oid)) |
theoid, sizeof(theoid)/sizeof(oid)) |
| |
|
| typedef int (WriteMethod)(int action, |
|
| u_char *var_val, |
|
| u_char var_val_type, |
|
| size_t var_val_len, |
|
| u_char *statP, |
|
| oid *name, |
|
| size_t length, |
|
| struct variable *v); |
|
| |
|
| typedef u_char *(FindVarMethod)(struct variable *v, |
|
| oid *name, |
|
| size_t *length, |
|
| int exact, |
|
| size_t *var_len, |
|
| WriteMethod **write_method); |
|
| |
|
| /* SNMP variable */ |
|
| struct variable |
|
| { |
|
| /* Index of the MIB.*/ |
|
| u_char magic; |
|
| |
|
| /* Type of variable. */ |
|
| char type; |
|
| |
|
| /* Access control list. */ |
|
| u_short acl; |
|
| |
|
| /* Callback function. */ |
|
| FindVarMethod *findVar; |
|
| |
|
| /* Suffix of the MIB. */ |
|
| int namelen; |
|
| oid name[MAX_OID_LEN]; |
|
| }; |
|
| |
|
| /* SNMP tree. */ |
|
| struct subtree |
|
| { |
|
| /* Tree's oid. */ |
|
| oid name[MAX_OID_LEN]; |
|
| u_char name_len; |
|
| |
|
| /* List of the variables. */ |
|
| struct variable *variables; |
|
| |
|
| /* Length of the variables list. */ |
|
| int variables_num; |
|
| |
|
| /* Width of the variables list. */ |
|
| int variables_width; |
|
| |
|
| /* Registered flag. */ |
|
| int registered; |
|
| }; |
|
| |
|
| struct trap_object |
struct trap_object |
| { |
{ |
| FindVarMethod *findVar; | int namelen; /* Negative if the object is not indexed */ |
| int namelen; | |
| oid name[MAX_OID_LEN]; |
oid name[MAX_OID_LEN]; |
| }; |
}; |
| |
|
|
Line 145 struct trap_object
|
Line 71 struct trap_object
|
| ) |
) |
| |
|
| extern void smux_init (struct thread_master *tm); |
extern void smux_init (struct thread_master *tm); |
| extern void smux_start (void); |
|
| extern void smux_register_mib(const char *, struct variable *, |
extern void smux_register_mib(const char *, struct variable *, |
| size_t, int, oid [], size_t); |
size_t, int, oid [], size_t); |
| extern int smux_header_generic (struct variable *, oid [], size_t *, |
extern int smux_header_generic (struct variable *, oid [], size_t *, |
| int, size_t *, WriteMethod **); |
int, size_t *, WriteMethod **); |
| extern int smux_trap (const oid *, size_t, const oid *, size_t, | extern int smux_header_table (struct variable *, oid *, size_t *, |
| const struct trap_object *, | int, size_t *, WriteMethod **); |
| size_t, unsigned int, u_char); | |
| | /* For traps, three OID are provided: |
| | |
| | 1. The enterprise OID to use (the last argument will be appended to |
| | it to form the SNMP trap OID) |
| | |
| | 2. The base OID for objects to be sent in traps. |
| | |
| | 3. The index OID for objects to be sent in traps. This index is used |
| | to designate a particular instance of a column. |
| | |
| | The provided trap object contains the bindings to be sent with the |
| | trap. The base OID will be prefixed to the provided OID and, if the |
| | length is positive, the requested OID is assumed to be a columnar |
| | object and the index OID will be appended. |
| | |
| | The two first arguments are the MIB registry used to locate the trap |
| | objects. |
| | |
| | The use of the arguments may differ depending on the implementation |
| | used. |
| | */ |
| | extern int smux_trap (struct variable *, size_t, |
| | const oid *, size_t, |
| | const oid *, size_t, |
| | const oid *, size_t, |
| | const struct trap_object *, size_t, |
| | u_char); |
| | |
| extern int oid_compare (oid *, int, oid *, int); |
extern int oid_compare (oid *, int, oid *, int); |
| extern void oid2in_addr (oid [], int, struct in_addr *); |
extern void oid2in_addr (oid [], int, struct in_addr *); |
| extern void *oid_copy (void *, const void *, size_t); |
extern void *oid_copy (void *, const void *, size_t); |