snmpEngine.c
资源名称:snmp.src.rar [点击查看]
上传用户:cxs890
上传日期:2021-05-22
资源大小:347k
文件大小:6k
源码类别:
SNMP编程
开发平台:
C/C++
- /* snmpEngine.c: implement's the SNMP-FRAMEWORK-MIB. */
- #include <config.h>
- #ifdef OS_VXWORKS
- #include <sys/times.h>
- #endif
- #if HAVE_WINSOCK_H
- #include <ip/socket.h>
- #endif
- #include "mibincl.h"
- #include "snmpv3.h"
- #include "util_funcs.h"
- #include "lcd_time.h"
- #include "../mibII/sysORTable.h"
- #include "snmpEngine.h"
- #ifdef OS_VXWORKS
- #include "asn1.h"
- #endif
- #include "config_struct.h"
- struct variable2 snmpEngine_variables[] = {
- { SNMPENGINEID , ASN_OCTET_STR , RONLY , var_snmpEngine, 1, { 1 } },
- #ifdef SNMP_TESTING_CODE
- { SNMPENGINEBOOTS , ASN_INTEGER , RWRITE, var_snmpEngine, 1, { 2 } },
- { SNMPENGINETIME , ASN_INTEGER , RWRITE, var_snmpEngine, 1, { 3 } },
- #else /* !SNMP_TESTING_CODE */
- { SNMPENGINEBOOTS , ASN_INTEGER , RONLY , var_snmpEngine, 1, { 2 } },
- { SNMPENGINETIME , ASN_INTEGER , RONLY , var_snmpEngine, 1, { 3 } },
- #endif /* SNMP_TESTING_CODE */
- { SNMPENGINEMAXMESSAGESIZE, ASN_INTEGER, RONLY , var_snmpEngine, 1, { 4 } },
- };
- /* now load this mib into the agents mib table */
- oid snmpEngine_variables_oid[] = {1,3,6,1,6,3,10,2,1};
- void init_snmpEngine (void) {
- #ifdef USING_MIBII_SYSORTABLE_MODULE
- static oid reg[] = {1,3,6,1,6,3,10,3,1,1};
- register_sysORTable(reg,10,"The SNMP Management Architecture MIB.");
- #endif
- REGISTER_MIB("snmpv3/snmpEngine", snmpEngine_variables, variable2,
- snmpEngine_variables_oid);
- /* place any initialization routines needed here */
- }
- #ifdef SNMP_TESTING_CODE
- int write_engineBoots(int, u_char *,u_char, int, u_char *,oid*, int);
- int write_engineTime(int, u_char *,u_char, int, u_char *,oid*, int);
- #endif /* SNMP_TESTING_CODE */
- u_char *
- var_snmpEngine(
- struct variable *vp,
- oid *name,
- int *length,
- int exact,
- int *var_len,
- WriteMethod **write_method)
- {
- /* variables we may use later */
- static long long_ret;
- static unsigned char engineID[SNMP_MAXBUF];
- *write_method = 0; /* assume it isnt writable for the time being */
- *var_len = sizeof(long_ret); /* assume an integer and change later if not */
- if (header_generic(vp,name,length,exact,var_len,write_method))
- return 0;
- /* this is where we do the value assignments for the mib results. */
- switch(vp->magic) {
- case SNMPENGINEID:
- *var_len = snmpv3_get_engineID(engineID, SNMP_MAXBUF);
- /* XXX Set ERROR_MSG() upon error? */
- return (unsigned char *) engineID;
- case SNMPENGINEBOOTS:
- #ifdef SNMP_TESTING_CODE
- *write_method = write_engineBoots;
- #endif /* SNMP_TESTING_CODE */
- long_ret = snmpv3_local_snmpEngineBoots();
- return (unsigned char *) &long_ret;
- case SNMPENGINETIME:
- #ifdef SNMP_TESTING_CODE
- *write_method = write_engineTime;
- #endif /* SNMP_TESTING_CODE */
- long_ret = snmpv3_local_snmpEngineTime();
- return (unsigned char *) &long_ret;
- case SNMPENGINEMAXMESSAGESIZE:
- long_ret = snmp_para.packetsize;
- return (unsigned char *) &long_ret;
- default:
- DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_snmpEnginen", vp->magic));
- }
- return 0;
- }
- #ifdef SNMP_TESTING_CODE
- /* write_engineBoots():
- This is technically not writable a writable mib object, but we
- allow it so we can run some time synchronization tests.
- */
- int
- write_engineBoots(
- int action,
- u_char *var_val,
- u_char var_val_type,
- int var_val_len,
- u_char *statP,
- oid *name,
- int name_len)
- {
- /* variables we may use later */
- static long long_ret;
- int size;
- int bigsize=SNMP_MAXBUF_MEDIUM;
- u_char engineIDBuf[SNMP_MAXBUF_MEDIUM];
- int engineIDBufLen = 0;
- if (var_val_type != ASN_INTEGER){
- DEBUGMSGTL(("snmpEngine","write to engineBoots not ASN_INTEGERn"));
- return SNMP_ERR_WRONGTYPE;
- }
- if (var_val_len > sizeof(long_ret)){
- DEBUGMSGTL(("snmpEngine","write to engineBoots: bad lengthn"));
- return SNMP_ERR_WRONGLENGTH;
- }
- long_ret = *((long *) var_val);
- if (action == COMMIT) {
- engineIDBufLen = snmpv3_get_engineID(engineIDBuf, SNMP_MAXBUF_MEDIUM);
- /* set our local engineTime in the LCD timing cache */
- snmpv3_set_engineBootsAndTime(long_ret, snmpv3_local_snmpEngineTime());
- set_enginetime(engineIDBuf, engineIDBufLen,
- snmpv3_local_snmpEngineBoots(),
- snmpv3_local_snmpEngineTime(),
- TRUE);
- }
- return SNMP_ERR_NOERROR;
- }
- /* write_engineTime():
- This is technically not writable a writable mib object, but we
- allow it so we can run some time synchronization tests.
- */
- int
- write_engineTime(
- int action,
- u_char *var_val,
- u_char var_val_type,
- int var_val_len,
- u_char *statP,
- oid *name,
- int name_len)
- {
- /* variables we may use later */
- static long long_ret;
- int size;
- int bigsize=SNMP_MAXBUF_MEDIUM;
- u_char engineIDBuf[SNMP_MAXBUF_MEDIUM];
- int engineIDBufLen = 0;
- if (var_val_type != ASN_INTEGER){
- DEBUGMSGTL(("snmpEngine","write to engineTime not ASN_INTEGERn"));
- return SNMP_ERR_WRONGTYPE;
- }
- if (var_val_len > sizeof(long_ret)){
- DEBUGMSGTL(("snmpEngine","write to engineTime: bad lengthn"));
- return SNMP_ERR_WRONGLENGTH;
- }
- long_ret = *((long *) var_val);
- if (action == COMMIT) {
- engineIDBufLen = snmpv3_get_engineID(engineIDBuf, SNMP_MAXBUF_MEDIUM);
- /* set our local engineTime in the LCD timing cache */
- snmpv3_set_engineBootsAndTime(snmpv3_local_snmpEngineBoots(), long_ret);
- set_enginetime(engineIDBuf, engineIDBufLen,
- snmpv3_local_snmpEngineBoots(),
- snmpv3_local_snmpEngineTime(),
- TRUE);
- }
- return SNMP_ERR_NOERROR;
- }
- #endif /* SNMP_TESTING_CODE */