uclinux下ucd-snmp的编译
2013-03-12
标签: uClinux

一、开发环境:

  • 操作系统:uClinux-ifax-2007-03-16.tar.gz
  • 交叉编译工具:arm-elf-tools-20030314.sh
  • 硬件平台:Samsung 4510B (snds-100)

二、编译ucd-snmp主要步骤

1.配置uClinux

修改config/config.in文件,确保改文件中有如下内容:

配置用户程序,选中ucd-snmp

2.使用snmpconf工具生成配置文件,内容如下:

###########################################################################

#

# snmpd.conf

#

#- created by the snmpconf configuration program

#

###########################################################################

# SECTION: System Information Setup

#

#This section defines some of the information reported in

#the "system" mib group in the mibII tree.

# syslocation: The [typically physical] location of the system.

#Note that setting this value here means that when trying to

#perform an snmp SET operation to the sysLocation.0 variable will make

#the agent return the "notWritable" error code.IE, including

#this token in the snmpd.conf file will disable write access to

#the variable.

#arguments:location_string

syslocationxi'an

# syscontact: The contact information for the administrator

#Note that setting this value here means that when trying to

#perform an snmp SET operation to the sysContact.0 variable will make

#the agent return the "notWritable" error code.IE, including

#this token in the snmpd.conf file will disable write access to

#the variable.

#arguments:contact_string

syscontactlazy_linux@126.com

# sysservices: The proper value for the sysServices object.

#arguments:sysservices_number

sysservices 77

sysservices 0*1 + 0*2 + 0*4 + 0*8 + 0*64

sysservices 0*1 + 0*2 + 1*4 + 1*8 + 0*64

###########################################################################

# SECTION: Access Control Setup

#

#This section defines who is allowed to talk to your running

#snmp agent.

# rwuser: a SNMPv3 read-write user

#arguments:user [noauth|auth|priv] [restriction_oid]

rwuserrw3 noauth

# rwcommunity: a SNMPv1/SNMPv2c read-write access community name

#arguments:community [default|hostname|network/bits] [oid]

rwcommunityrw12

###########################################################################

# SECTION: Trap Destinations

#

#Here we define who the agent will send traps to.

# trap2sink: A SNMPv2c trap receiver

#arguments: host [community] [portnum]

trap2sink202.117.129.75

3.编译生成image.rom并下载到目标板上,运行如下:

4.在开发主机上进行验证

三、扩展ucdsnmp主要步骤

1.主要修改的文件

MIB文件:定义扩展的MIB库

编译的头文件:需要修改头文件,使得编译时包括用户扩展的功能

.c文件:实现SNMP get,set,trap等功能

.h文件:头文件

2.MIB文件

/uClinux-dist/user/ucdsnmp/mibs/UCD-DEMO-MIB.txt

其中定义了用户扩展的agent管理节点

UCD-DEMO-MIB DEFINITIONS ::= BEGIN

IMPORTS

MODULE-IDENTITY, OBJECT-TYPE, Integer32 FROM SNMPv2-SMI

ucdavisFROM UCD-SNMP-MIB;

ucdDemoMIB MODULE-IDENTITY

LAST-UPDATED "9912090000Z"

ORGANIZATION "University of California, Davis"

CONTACT-INFO

"The ucd-snmp-coders mailing list is the best place to

write for public questions about the ucd-snmp

project: ucd-snmp-coders@ucd-snmp.ucdavis.edu

Primary Author: Wes Hardaker

postal:IT-DCAS

UCDavis

Davis CA95616

phone:+1 530 754-7571

email:wjhardaker@ucdavis.edu"

DESCRIPTION

"The UCD-SNMP Demonstration MIB."

REVISION"9912090000Z"

DESCRIPTION

"SMIv2 version converted from older MIB definitions."

::= { ucdavis 14 }

//该节点位于ucdavis下的第14个节点

ucdDemoMIBObjects OBJECT IDENTIFIER ::= { ucdDemoMIB 1 }

//在UCD-SNMP-MIB中定义,

// --ucdDemoMIBOBJECT IDENTIFIER ::= { ucdavis14 } - UCD-DEMO-MIB

//OID: ucdavis.14.1

ucdDemoPublic OBJECT IDENTIFIER ::= { ucdDemoMIBObjects 1 }

//OID: ucdavis.14.1.1

ucdDemoResetKeys OBJECT-TYPE

SYNTAXInteger32 (0..2147483647)

MAX-ACCESSread-write

STATUScurrent

DESCRIPTION

"A set of value 1 to this object resets the

demonstration user's auth and priv keys to the

keys based on the P->Ku->Kul transformation of the

value of the ucdDemoPasspharse object.

Values other than 1 are ignored."

::= { ucdDemoPublic 1 }

//OID: ucdavis.14.1.1

ucdDemoPublicString OBJECT-TYPE

SYNTAXOCTET STRING (SIZE(0..1024))

MAX-ACCESSread-write

STATUScurrent

DESCRIPTION

"A publicly settable string that can be set for testing

snmpsets.This value has no real usage other than

testing purposes."

::= { ucdDemoPublic 2 }

ucdDemoUserList OBJECT-TYPE

SYNTAXOCTET STRING

MAX-ACCESSread-only

STATUScurrent

DESCRIPTION

"The list of users affected by the ucdDemoResetKeys object."

::= { ucdDemoPublic 3 }

ucdDemoPassphraseOBJECT-TYPE

SYNTAXOCTET STRING

MAX-ACCESSread-only

STATUScurrent

DESCRIPTION

"The demo passphrase that ucdDemoResetKeys changes each

users localized key to based on the P->Ku->Kul transformation."

::= { ucdDemoPublic 4 }

//定义了2个trap类型的节点

TheTrap1 NOTIFICATION-TYPE

STATUS current

DESCRIPTION

"This is 1st trap."

::= { ucdDemoPublic 5 }

//OID: ucdavis.14.1.5

TheTrap2 NOTIFICATION-TYPE

SYNTAX Integer32

MAX-ACCESSread-write

STATUSmandatory

DESCRIPTION

"This is 2nd trap."

::= { ucdDemoPublic 6 }

//OID: ucdavis.14.1.6

END

2.编译的头文件

/uClinux-dist/user/ucdsnmp/agent/Makefile

在MIBOBJS中增加需要编译的c文件的目标文件名称:

MIBOBJS=mibgroup/mibII/system_mib.omibgroup/misc/ipfwacc.o mibgroup/mibII/sysORTable.omibgroup/mibII/at.omibgroup/mibII/interfaces.omibgroup/mibII/snmp_mib.omibgroup/mibII/tcp.omibgroup/mibII/icmp.omibgroup/mibII/ip.omibgroup/mibII/udp.omibgroup/mibII/vacm_vars.omibgroup/ucd-snmp/memory.omibgroup/ucd-snmp/proc.omibgroup/ucd-snmp/versioninfo.omibgroup/ucd-snmp/pass.omibgroup/ucd-snmp/pass_persist.omibgroup/ucd-snmp/disk.omibgroup/ucd-snmp/loadave.omibgroup/ucd-snmp/extensible.omibgroup/ucd-snmp/errormib.omibgroup/ucd-snmp/registry.omibgroup/ucd-snmp/file.omibgroup/snmpv3/snmpEngine.omibgroup/snmpv3/snmpMPDStats.omibgroup/snmpv3/usmStats.omibgroup/snmpv3/usmUser.omibgroup/util_funcs.omibgroup/mibII/var_route.omibgroup/mibII/route_write.omib_modules.o mibgroup/examples/ucdDemoPublic.o

/uClinux-dist/user/ucdsnmp/agent/mibgroup/Makefile

OBJS和SRCS中增加目标文件名称和c文件名称

OBJS =misc/ipfwacc.o mibII/system_mib.o mibII/sysORTable.o mibII/at.o mibII/interfaces.o mibII/snmp_mib.o mibII/tcp.o mibII/icmp.o mibII/ip.o mibII/udp.o mibII/vacm_vars.o ucd-snmp/memory.o ucd-snmp/proc.o ucd-snmp/versioninfo.o ucd-snmp/pass.o ucd-snmp/pass_persist.o ucd-snmp/disk.o ucd-snmp/loadave.o ucd-snmp/extensible.o ucd-snmp/errormib.o ucd-snmp/registry.o ucd-snmp/file.o snmpv3/snmpEngine.o snmpv3/snmpMPDStats.o snmpv3/usmStats.o snmpv3/usmUser.o util_funcs.o mibII/var_route.o mibII/route_write.o examples/ucdDemoPublic.o

SRCS =misc/ipfwacc.c mibII/system_mib.c mibII/sysORTable.c mibII/at.c mibII/interfaces.c mibII/snmp_mib.c mibII/tcp.c mibII/icmp.c mibII/ip.c mibII/udp.c mibII/vacm_vars.c ucd-snmp/memory.c ucd-snmp/proc.c ucd-snmp/versioninfo.c ucd-snmp/pass.c ucd-snmp/pass_persist.c ucd-snmp/disk.c ucd-snmp/loadave.c ucd-snmp/extensible.c ucd-snmp/errormib.c ucd-snmp/registry.c ucd-snmp/file.c snmpv3/snmpEngine.c snmpv3/snmpMPDStats.c snmpv3/usmStats.c snmpv3/usmUser.c util_funcs.c mibII/var_route.c mibII/route_write.c examples/ucdDemoPublic.c

/uClinux-dist/user/ucdsnmp/agent/mibgroup/mib_module_inits.h中增加自定义的初始化函数名称

/* This file is automatically generated by configure.Do not modify by hand. */

init_system_mib();

init_sysORTable();

init_at();

init_interfaces();

init_snmp_mib();

init_tcp();

init_icmp();

init_ip();

init_udp();

init_vacm_vars();

init_memory();

init_proc();

init_versioninfo();

init_pass();

init_pass_persist();

init_disk();

init_loadave();

init_extensible();

init_errormib();

init_registry();

init_file();

init_snmpEngine();

init_snmpMPDStats();

init_usmStats();

init_usmUser();

init_var_route();

init_ipfwacc();

init_ucdDemoPublic();

/uClinux-dist/user/ucdsnmp/agent/mibgroup/mib_module_includes.h中增加自定义的头文件名称

/* This file is automatically generated by configure.Do not modify by hand. */

#include "mibgroup/mibII.h"

#include "mibgroup/ucd_snmp.h"

#include "mibgroup/snmpv3mibs.h"

#include "mibgroup/mibII/system_mib.h"

#include "mibgroup/mibII/sysORTable.h"

#include "mibgroup/mibII/at.h"

#include "mibgroup/mibII/interfaces.h"

#include "mibgroup/mibII/snmp_mib.h"

#include "mibgroup/mibII/tcp.h"

#include "mibgroup/mibII/icmp.h"

#include "mibgroup/mibII/ip.h"

#include "mibgroup/mibII/udp.h"

#include "mibgroup/mibII/vacm_vars.h"

#include "mibgroup/ucd-snmp/memory.h"

#include "mibgroup/ucd-snmp/proc.h"

#include "mibgroup/ucd-snmp/versioninfo.h"

#include "mibgroup/ucd-snmp/pass.h"

#include "mibgroup/ucd-snmp/pass_persist.h"

#include "mibgroup/ucd-snmp/disk.h"

#include "mibgroup/ucd-snmp/loadave.h"

#include "mibgroup/ucd-snmp/extensible.h"

#include "mibgroup/ucd-snmp/errormib.h"

#include "mibgroup/ucd-snmp/registry.h"

#include "mibgroup/ucd-snmp/file.h"

#include "mibgroup/snmpv3/snmpEngine.h"

#include "mibgroup/snmpv3/snmpMPDStats.h"

#include "mibgroup/snmpv3/usmStats.h"

#include "mibgroup/snmpv3/usmUser.h"

#include "mibgroup/util_funcs.h"

#include "mibgroup/mibII/var_route.h"

#include "mibgroup/mibII/route_write.h"

#include "mibgroup/misc/ipfwacc.h"

#include "mibgroup/examples/ucdDemoPublic.h"

3..c文件:实现SNMP get,set,trap等功能

/uClinux-dist/user/ucdsnmp/agent/mibgroup/examples/ucdDemoPublic.c

/* ucdDemoPublic.c */

#include

#include

#include

#include

#include

#include

#include "mibincl.h"

#include "snmpv3.h"

#include "snmpusm.h"

#include "agent_read_config.h"

#include "ucdDemoPublic.h"

#include "util_funcs.h"

#define MYMAX 1024

#define MAXUSERS 10

int num=0;

static char demoUsers[MAXUSERS][MYMAX+1];

static char demopass[MYMAX+1];

char mynode_str[300];

void ucdDemo_parse_user(const char *word, char *line) {

if (num == MAXUSERS)

return;

if (strlen(line) > MYMAX)

return;

strcpy(demoUsers[num++], line);

}

void ucdDemo_parse_userpass(const char *word, char *line) {

if (strlen(line) > MYMAX)

return;

strcpy(demopass, line);

}

/* this variable defines function callbacks and type return information

for the ucdDemoPublic mib */

//与MIB中的定义相对应

struct variable2 ucdDemoPublic_variables[] = {

{ UCDDEMORESETKEYS, ASN_INTEGER, RWRITE, var_ucdDemoPublic, 1, { 1 } },

{ UCDDEMOPUBLICSTRING , ASN_OCTET_STR , RWRITE, var_ucdDemoPublic, 1, { 2 } },

{ UCDDEMOUSERLIST, ASN_OCTET_STR , RWRITE, var_ucdDemoPublic, 1, { 3 } },

{ UCDDEMOPASSPHRASE, ASN_OCTET_STR , RWRITE, var_ucdDemoPublic, 1, { 4 } },

{ 5, ASN_INTEGER, RWRITE, var_ucdDemoPublic, 1, {5}},

{ 6, ASN_INTEGER, RWRITE, var_ucdDemoPublic, 1, {6}}

};

/* Define the OID pointer to the top of the mib tree that we're

registering underneath */

oid ucdDemoPublic_variables_oid[] = { 1,3,6,1,4,1,2021,14,1,1 };

void init_ucdDemoPublic(void) {

REGISTER_MIB( "examples/ucdDemoPublic", ucdDemoPublic_variables,

variable2, ucdDemoPublic_variables_oid);

snmpd_register_config_handler("demoUser", ucdDemo_parse_user, NULL, "USER");

snmpd_register_config_handler("demoPass", ucdDemo_parse_userpass, NULL, "PASSPHASE");

//定义定时的trap发送

snmp_alarm_register(10, SA_REPEAT, snmploop_callback, NULL);

}

//定义自定义的定时trap动作

void snmploop_callback(unsigned int reg, void *clientarg){

send_easy_trap(SNMP_TRAP_ENTERPRISESPECIFIC, 1);

}

unsigned char publicString[MYMAX+1];

long long_ret;

unsigned char *

var_ucdDemoPublic(

struct variable *vp,

oid*name,

size_t*length,

intexact,

size_t*var_len,

WriteMethod **write_method)

{

//static long long_ret;

static char string[MYMAX+1], *cp;

int i;

*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 UCDDEMORESETKEYS:

*write_method = write_ucdDemoResetKeys;

//long_ret = 0;

return (unsigned char *) &long_ret;

case UCDDEMOPUBLICSTRING:

*write_method = write_ucdDemoPublicString;

*var_len = strlen(publicString);

return (unsigned char *) publicString;

case UCDDEMOUSERLIST:

cp = string;

for(i=0; i < num; i++) {

sprintf(cp, " %s", demoUsers[i]);

cp = cp + strlen(cp);

}

*var_len = strlen(string);

return (unsigned char *) string;

case UCDDEMOPASSPHRASE:

*var_len = strlen(demopass);

return (unsigned char *) demopass;

case 5:

long_ret=0;

*write_method = write_mynodetrap;

return (u_char *)&long_ret;

case 6:

/*

* This object is essentially "write-only".

* It only exists to trigger the sending of a v2 trap.

* Reading it will always return 0.

*/

long_ret = 0; /*FIX*/

*write_method = write_mynodetrap2;

return (u_char *)&long_ret;

default:

DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ucdDemoPublic ", vp->magic));

}

return 0;

}

int

write_ucdDemoResetKeys(

intaction,

u_char*var_val,

u_charvar_val_type,

size_tvar_val_len,

u_char*statP,

oid*name,

size_tname_len)

{

/* variables we may use later */

//static long long_ret;

static unsigned char string[1500];

static oid objid[MAX_OID_LEN];

static struct counter64 c64;

int bigsize=1000;

unsigned char *engineID;

int engineIDLen;

int i;

struct usmUser *user;

if (var_val_type != ASN_INTEGER) {

printf("ASN_INTEGER ");

DEBUGMSGTL(("ucdDemoPublic","write to ucdDemoResetKeys not ASN_INTEGER "));

return SNMP_ERR_WRONGTYPE;

}

if (var_val_len > sizeof(long_ret)) {

DEBUGMSGTL(("ucdDemoPublic","write to ucdDemoResetKeys: bad length "));

return SNMP_ERR_WRONGLENGTH;

}

if (action == COMMIT) {

int fd = open("/dev/lamp", O_RDWR, 0644);

if(fd<0){

printf("open /dev/lamp error ");

return SNMP_ERR_NOERROR;

}

printf("new value: %x ", *(long*)var_val);

if( *(long *)var_val == 0) write(fd,"00 ", 3);

if( *(long *)var_val == 1) write(fd,"01 ", 3);

if( *(long *)var_val == 2) write(fd,"10 ", 3);

if( *(long *)var_val == 3) write(fd,"11 ", 3);

close(fd);

long_ret = *((long *) var_val);

/*if (long_ret == 1) {

engineID = snmpv3_generate_engineID(&engineIDLen);

for(i=0; i < num; i++) {

user = usm_get_user(engineID, engineIDLen, demoUsers[i]);

if (user) {

usm_set_user_password(user, "userSetAuthPass", demopass);

usm_set_user_password(user, "userSetPrivPass", demopass);

}

}

reset the keys

}*/

}

return SNMP_ERR_NOERROR;

}

int

write_ucdDemoPublicString(

intaction,

u_char*var_val,

u_charvar_val_type,

size_tvar_val_len,

u_char*statP,

oid*name,

size_tname_len)

{

if (var_val_type != ASN_OCTET_STR) {

DEBUGMSGTL(("ucdDemoPublic","write to ucdDemoPublicString not ASN_OCTET_STR "));

return SNMP_ERR_WRONGTYPE;

}

if (var_val_len > MYMAX) {

DEBUGMSGTL(("ucdDemoPublic","write to ucdDemoPublicString: bad length "));

return SNMP_ERR_WRONGLENGTH;

}

if (action == COMMIT) {

strcpy(publicString, var_val);

}

return SNMP_ERR_NOERROR;

}

int write_mynodetrap(int action,

u_char * var_val,

u_char var_val_type,

size_t var_val_len,

u_char * statP, oid * name, size_t name_len)

{

longintval;

DEBUGMSGTL(("mynode", "write_mynodetrap entered: action=%d ",

action));

switch (action) {

case RESERVE1:

/*

*The only acceptable value is the integer 1

*/

if (var_val_type != ASN_INTEGER) {

DEBUGMSGTL(("mynode", "%x not integer type", var_val_type));

return SNMP_ERR_WRONGTYPE;

}

if (var_val_len > sizeof(long)) {

DEBUGMSGTL(("mynode", "wrong length %x", var_val_len));

return SNMP_ERR_WRONGLENGTH;

}

intval = *((long *) var_val);

if (intval != 1) {

DEBUGMSGTL(("mynode", "wrong value %x", intval));

return SNMP_ERR_WRONGVALUE;

}

break;

case RESERVE2:

/*

* No resources are required....

*/

break;

case FREE:

/*

* ... so no resources need be freed

*/

break;

case ACTION:

/*

*Having triggered the sending of a trap,

*it would be impossible to revoke this,

*so we can't actually invoke the action here.

*/

break;

case UNDO:

/*

* We haven't done anything yet,

* so there's nothing to undo

*/

break;

case COMMIT:

/*

*Everything else worked, so it's now safe

*to trigger the trap.

*Note that this is *only* acceptable since

*the trap sending routines are "failsafe".

*(In fact, they can fail, but they return no

*indication of this, which is the next best thing!)

*/

DEBUGMSGTL(("mynode", "write_mynodetrap sending the trap ",

action));

send_easy_trap(SNMP_TRAP_ENTERPRISESPECIFIC, 99);

DEBUGMSGTL(("mynode", "write_mynodetrap trap sent ", action));

break;

}

return SNMP_ERR_NOERROR;

}

/*

* this documents how to send a SNMPv2 (and higher) trap via the

* send_v2trap() API.

*

* Coding SNMP-v2 Trap:

*

* The SNMPv2-Trap PDU contains at least a pair of object names and

* values: - sysUpTime.0 whose value is the time in hundredths of a

* second since the netwok management portion of system was last

* reinitialized.- snmpTrapOID.0 which is part of the trap group SNMPv2

* MIB whose value is the object-id of the specific trap you have defined

* in your own MIB.Other variables can be added to caracterize the

* trap.

*

* The function send_v2trap adds automaticallys the two objects but the

* value of snmpTrapOID.0 is 0.0 by default. If you want to add your trap

* name, you have to reconstruct this object and to add your own

* variable.

*

*/

int write_mynodetrap2(int action,

u_char * var_val,

u_char var_val_type,

size_t var_val_len,

u_char * statP, oid * name, size_t name_len)

{

longintval;

/*

* these variales will be used when we send the trap

*/

oidobjid_snmptrap[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 };/* snmpTrapOID.0 */

oiddemo_trap[] = { 1, 3, 6, 1, 4, 1, 2021, 13, 990 };/*demo-trap */

oidmynode_string_oid[] =

{ 1, 3, 6, 1, 4, 1, 2021, 254, 1, 0 };

static struct variable_list var_trap;

static struct variable_list var_obj;

DEBUGMSGTL(("mynode", "write_mynodetrap2 entered: action=%d ",

action));

switch (action) {

case RESERVE1:

/*

*The only acceptable value is the integer 1

*/

if (var_val_type != ASN_INTEGER) {

DEBUGMSGTL(("mynode", "%x not integer type", var_val_type));

return SNMP_ERR_WRONGTYPE;

}

if (var_val_len > sizeof(long)) {

DEBUGMSGTL(("mynode", "wrong length %x", var_val_len));

return SNMP_ERR_WRONGLENGTH;

}

intval = *((long *) var_val);

if (intval != 1) {

DEBUGMSGTL(("mynode", "wrong value %x", intval));

return SNMP_ERR_WRONGVALUE;

}

break;

case RESERVE2:

/*

* No resources are required....

*/

break;

case FREE:

/*

* ... so no resources need be freed

*/

break;

case ACTION:

/*

*Having triggered the sending of a trap,

*it would be impossible to revoke this,

*so we can't actually invoke the action here.

*/

//mynode_int = intval;

//Temp_ret=intval;

break;

case UNDO:

/*

* We haven't done anything yet,

* so there's nothing to undo

*/

break;

case COMMIT:

/*

*Everything else worked, so it's now safe

*to trigger the trap.

*Note that this is *only* acceptable since

*the trap sending routines are "failsafe".

*(In fact, they can fail, but they return no

*indication of this, which is the next best thing!)

*/

/*

* trap definition objects

*/

//Temp_ret=intval;

var_trap.next_variable = &var_obj;/* next variable */

var_trap.name = objid_snmptrap;/* snmpTrapOID.0 */

var_trap.name_length = sizeof(objid_snmptrap) / sizeof(oid);/* number of sub-ids */

var_trap.type = ASN_OBJECT_ID;

var_trap.val.objid = demo_trap; /* demo-trap objid*/

var_trap.val_len = sizeof(demo_trap);/* length in bytes (not number of subids!) */

/*

* additional objects

*/

strcpy(mynode_str, "HHHHHHHHHHH");

var_obj.next_variable = NULL;/* No more variables after this one */

var_obj.name = mynode_string_oid;

var_obj.name_length = sizeof(mynode_string_oid) / sizeof(oid); /* number of sub-ids */

var_obj.type = ASN_OCTET_STR;/* type of variable */

var_obj.val.string = mynode_str; /* value */

var_obj.val_len = strlen(mynode_str);

DEBUGMSGTL(("mynode", "write_mynodetrap2 sending the v2 trap ",

action));

send_v2trap(&var_trap);

DEBUGMSGTL(("mynode", "write_mynodetrap2 v2 trap sent ",

action));

break;

}

return SNMP_ERR_NOERROR;

}

4..h文件:头文件

/uClinux-dist/user/ucdsnmp/agent/mibgroup/examples/ ucdDemoPublic.h

/* ucdDemoPublic.h */

#ifndef _MIBGROUP_UCDDEMOPUBLIC_H

#define _MIBGROUP_UCDDEMOPUBLIC_H

#include

#include

/* we use header_generic and checkmib from the util_funcs module */

config_require(util_funcs)

/* Magic number definitions: */

#defineUCDDEMORESETKEYS1

#defineUCDDEMOPUBLICSTRING2

#defineUCDDEMOUSERLIST3

#defineUCDDEMOPASSPHRASE4

/* function definitions */

extern voidinit_ucdDemoPublic(void);

extern FindVarMethod var_ucdDemoPublic;

//自定义的定时trap函数

SNMPAlarmCallbacksnmploop_callback;

WriteMethod write_ucdDemoResetKeys;

WriteMethod write_ucdDemoPublicString;

//自定义的函数声明

WriteMethod write_mynodetrap;

WriteMethod write_mynodetrap2;

#endif /* _MIBGROUP_UCDDEMOPUBLIC_H */

四、调试输出

1.开发板的命令运行:

snmptrapd –c /etc/snmpd.conf -V

其中-c /etc/snmpd.conf 用来指定配置文件

2.开发主机的测试命令及其输出:

可以看到可以使用get,set来读取并设置节点的值,由于1.3.6.1.4.1.2021.14.1.1.6.0是trap节点,所以当其值被设置后,就会自动向管理站发送trap。

如果需要检测agent的trap报文,需要在管理站运行snmptrapd命令,可以如下使用:

snmptrapd –f –Lo

另外,如果agent上有定时的trap报文,同样可以使用snmptrapd命令进行检测,如图为10秒中一次的定时trap报文的接收情况。

可能会用到的工具/仪表
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号