#include <stdlib.h>
#include <stdio.h>
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/types.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/agent_trap.h>
#include <net-snmp/agent/snmp_agent.h>
#include <net-snmp/agent/agent_callbacks.h>
#include <string.h>
#include"snmptrap.h"
int snmptrap(trap_msg_s *p_data)
{
oid id_oid[MAX_OID_LEN];
size_t id_len = MAX_OID_LEN;
struct snmp_session session;
snmp_sess_init(&session);
session.version = SNMP_VERSION_2c;
session.peername = p_data->ip_address;
session.community = (unsigned char*)"dcpublic";
session.community_len = strlen((char*)session.community);
session.retries = p_data->retries;
session.timeout = p_data->timeout;
session.sessid = p_data->sessid;
struct snmp_session *ss;
ss = snmp_open(&session);
if (ss == NULL)
{
return -1;
}
struct snmp_pdu *pdu;
pdu = snmp_pdu_create(SNMP_MSG_TRAP2);
if(!snmp_parse_oid(p_data->point_oid, id_oid, &id_len))
{
snmp_log(LOG_ERR, "snmp_parse_oid error!\n");
return -1;
}
int status = snmp_add_var(pdu, id_oid,id_len,p_data->types,p_data->values);
printf("status = %d\n",status);
status = snmp_send(ss,pdu);
printf("status = %d\n",status);
snmp_close(ss);
return 0;
}