bhushan
2006-12-04 14:10:11 UTC
hello friends
Greetings,
I have installed netsnmp-5.4 using win32( MVC++), i am writing code
for subagent which will send traps to AgentX master agent.
Problem with the code is it execute all api of netsnmp correctly
(put up code at end) but no trap received by main agent( even if no
packet received by main agent according to dump )
I am running main agent in debug mode(sorry if i use wrong phrase) i.e.
snmpd -Lo -f -d -C -c c:\usr\etc\snmp\snmpd.conf
so if trap come to main agent it dump out trap to stdout
for agentx support enabling i putted following line in my snmpd.conf
master agentx
agentXSocket tcp:127.0.0.1:755
so it receive data on this port
dump of my snmpd process when i start agent
C:\NETSNMP\NET-SN~1.4\win32\bin\release>snmpd -Lo -f -d -C -c
c:\usr\etc\snmp\snmpd.conf
Turning on AgentX master support.
Sending 93 bytes to UDP: [127.0.0.1]:162
0000: 30 5B 02 01 01 04 06 70 75 62 6C 69 63 A7 4E 02 0[.....publicºN.
0016: 02 3A 8A 02 01 00 02 01 00 30 42 30 0D 06 08 2B .:è......0B0...+
0032: 06 01 02 01 01 03 00 43 01 1C 30 17 06 0A 2B 06 .......C..0...+.
0048: 01 06 03 01 01 04 01 00 06 09 2B 06 01 06 03 01 .........
+.....
0064: 01 05 01 30 18 06 0A 2B 06 01 06 03 01 01 04 03 ...0...+........
0080: 00 06 0A 2B 06 01 04 01 BF 08 03 02 0D
This is subagent code which send trap to main agent
static oid snmptrap_oid[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 };
int
send_trap( void)
{
netsnmp_variable_list *var_list = NULL;
int i;
oid data_oid[] =
{ 1, 3, 6, 1, 4, 1, 16901, 0, 1 };
oid ShortText_oid[] =
{ 1, 3, 6, 1, 4, 1, 16901, 4, 0 };
char *data = "testing trap in windows";
snmp_varlist_add_variable(&var_list,
snmptrap_oid,
OID_LENGTH(snmptrap_oid),//11*sizeof(oid),
ASN_OBJECT_ID,
( u_char* ) data_oid,
sizeof(data_oid) );
snmp_varlist_add_variable( &var_list,
ShortText_oid,
OID_LENGTH(ShortText_oid) ,
ASN_OCTET_STR,
data , strlen(data));
send_v2trap(var_list);
snmp_free_varbind(var_list);
return SNMP_ERR_NOERROR;
}
int main (int argc, char **argv)
{
int agentx_subagent=1; /* change this if you want to be a SNMP master
agent */
int background = 1; /* change this if you want to run in the background */
int num_fds;
fd_set fdset;
int count;
int listen_fd;
int sock_fd;
int syslog = 1;
char *p = "c:\\usr\\etc\\snmp\\snmpd";
char *cptr= "tcp:localhost:705";
int keep_running = 0;
/* we're an agentx subagent? */
if (agentx_subagent) {
/* make us a agentx client. */
netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE,
1);
netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
NETSNMP_DS_AGENT_X_SOCKET, cptr);
}
/* run in background, if requested */
if (background && netsnmp_daemonize(1, !syslog))
exit(1);
/* initialize the agent library */
while( init_agent("sub-agent") != 0 ) {
sleep(2);
}
init_snmp("sub-agent");
send_trap();
return 0;
}
Please point if any mistake i made in code/ agent configuration
Thanks in advance
Regards
Bhushan. E . Sonawane
Greetings,
I have installed netsnmp-5.4 using win32( MVC++), i am writing code
for subagent which will send traps to AgentX master agent.
Problem with the code is it execute all api of netsnmp correctly
(put up code at end) but no trap received by main agent( even if no
packet received by main agent according to dump )
I am running main agent in debug mode(sorry if i use wrong phrase) i.e.
snmpd -Lo -f -d -C -c c:\usr\etc\snmp\snmpd.conf
so if trap come to main agent it dump out trap to stdout
for agentx support enabling i putted following line in my snmpd.conf
master agentx
agentXSocket tcp:127.0.0.1:755
so it receive data on this port
dump of my snmpd process when i start agent
C:\NETSNMP\NET-SN~1.4\win32\bin\release>snmpd -Lo -f -d -C -c
c:\usr\etc\snmp\snmpd.conf
Turning on AgentX master support.
Sending 93 bytes to UDP: [127.0.0.1]:162
0000: 30 5B 02 01 01 04 06 70 75 62 6C 69 63 A7 4E 02 0[.....publicºN.
0016: 02 3A 8A 02 01 00 02 01 00 30 42 30 0D 06 08 2B .:è......0B0...+
0032: 06 01 02 01 01 03 00 43 01 1C 30 17 06 0A 2B 06 .......C..0...+.
0048: 01 06 03 01 01 04 01 00 06 09 2B 06 01 06 03 01 .........
+.....
0064: 01 05 01 30 18 06 0A 2B 06 01 06 03 01 01 04 03 ...0...+........
0080: 00 06 0A 2B 06 01 04 01 BF 08 03 02 0D
This is subagent code which send trap to main agent
static oid snmptrap_oid[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 };
int
send_trap( void)
{
netsnmp_variable_list *var_list = NULL;
int i;
oid data_oid[] =
{ 1, 3, 6, 1, 4, 1, 16901, 0, 1 };
oid ShortText_oid[] =
{ 1, 3, 6, 1, 4, 1, 16901, 4, 0 };
char *data = "testing trap in windows";
snmp_varlist_add_variable(&var_list,
snmptrap_oid,
OID_LENGTH(snmptrap_oid),//11*sizeof(oid),
ASN_OBJECT_ID,
( u_char* ) data_oid,
sizeof(data_oid) );
snmp_varlist_add_variable( &var_list,
ShortText_oid,
OID_LENGTH(ShortText_oid) ,
ASN_OCTET_STR,
data , strlen(data));
send_v2trap(var_list);
snmp_free_varbind(var_list);
return SNMP_ERR_NOERROR;
}
int main (int argc, char **argv)
{
int agentx_subagent=1; /* change this if you want to be a SNMP master
agent */
int background = 1; /* change this if you want to run in the background */
int num_fds;
fd_set fdset;
int count;
int listen_fd;
int sock_fd;
int syslog = 1;
char *p = "c:\\usr\\etc\\snmp\\snmpd";
char *cptr= "tcp:localhost:705";
int keep_running = 0;
/* we're an agentx subagent? */
if (agentx_subagent) {
/* make us a agentx client. */
netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE,
1);
netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
NETSNMP_DS_AGENT_X_SOCKET, cptr);
}
/* run in background, if requested */
if (background && netsnmp_daemonize(1, !syslog))
exit(1);
/* initialize the agent library */
while( init_agent("sub-agent") != 0 ) {
sleep(2);
}
init_snmp("sub-agent");
send_trap();
return 0;
}
Please point if any mistake i made in code/ agent configuration
Thanks in advance
Regards
Bhushan. E . Sonawane