65struct snmp_msg_trap trap_msg;
 
   67static u16_t snmp_resp_header_sum(
struct snmp_msg_pstat *m_stat, 
u16_t vb_len);
 
   68static u16_t snmp_trap_header_sum(
struct snmp_msg_trap *m_trap, 
u16_t vb_len);
 
   69static u16_t snmp_varbind_list_sum(
struct snmp_varbind_root *root);
 
   71static u16_t snmp_resp_header_enc(
struct snmp_msg_pstat *m_stat, 
struct pbuf *p);
 
   72static u16_t snmp_trap_header_enc(
struct snmp_msg_trap *m_trap, 
struct pbuf *p);
 
   73static u16_t snmp_varbind_list_enc(
struct snmp_varbind_root *root, 
struct pbuf *p, 
u16_t ofs);
 
   81snmp_trap_dst_enable(
u8_t dst_idx, 
u8_t enable)
 
   85    trap_dst[dst_idx].enable = enable;
 
  113snmp_send_response(
struct snmp_msg_pstat *m_stat)
 
  115  struct snmp_varbind_root emptyvb = {
NULL, 
NULL, 0, 0, 0};
 
  121  tot_len = snmp_varbind_list_sum(&m_stat->outvb);
 
  131    m_stat->error_status = SNMP_ES_TOOBIG;
 
  132    m_stat->error_index = 0;
 
  134    tot_len = snmp_varbind_list_sum(&emptyvb);
 
  147    ofs = snmp_resp_header_enc(m_stat, p);
 
  148    snmp_varbind_list_enc(&m_stat->outvb, p, ofs);
 
  150    switch (m_stat->error_status)
 
  155      case SNMP_ES_NOSUCHNAME:
 
  158      case SNMP_ES_BADVALUE:
 
  161      case SNMP_ES_GENERROR:
 
  170    udp_connect(m_stat->pcb, &m_stat->sip, m_stat->sp);
 
  171    err = udp_send(m_stat->pcb, p);
 
  182    udp_disconnect(m_stat->pcb);
 
  213snmp_send_trap(
s8_t generic_trap, 
struct snmp_obj_id *eoid, 
s32_t specific_trap)
 
  215  struct snmp_trap_dst *td;
 
  216  struct netif *dst_if;
 
  231      trap_msg.sip_raw[0] = 
ip4_addr1(&dst_ip);
 
  232      trap_msg.sip_raw[1] = 
ip4_addr2(&dst_ip);
 
  233      trap_msg.sip_raw[2] = 
ip4_addr3(&dst_ip);
 
  234      trap_msg.sip_raw[3] = 
ip4_addr4(&dst_ip);
 
  235      trap_msg.gen_trap = generic_trap;
 
  236      trap_msg.spc_trap = specific_trap;
 
  237      if (generic_trap == SNMP_GENTRAP_ENTERPRISESPC)
 
  240        trap_msg.enterprise = eoid;
 
  250      tot_len = snmp_varbind_list_sum(&trap_msg.outvb);
 
  260        ofs = snmp_trap_header_enc(&trap_msg, p);
 
  261        snmp_varbind_list_enc(&trap_msg.outvb, p, ofs);
 
  267        udp_sendto(trap_msg.pcb, p, &trap_msg.dip, SNMP_TRAP_PORT);
 
  281snmp_coldstart_trap(
void)
 
  283  trap_msg.outvb.head = 
NULL;
 
  284  trap_msg.outvb.tail = 
NULL;
 
  285  trap_msg.outvb.count = 0;
 
  286  snmp_send_trap(SNMP_GENTRAP_COLDSTART, 
NULL, 0);
 
  290snmp_authfail_trap(
void)
 
  296    trap_msg.outvb.head = 
NULL;
 
  297    trap_msg.outvb.tail = 
NULL;
 
  298    trap_msg.outvb.count = 0;
 
  299    snmp_send_trap(SNMP_GENTRAP_AUTHFAIL, 
NULL, 0);
 
  312snmp_resp_header_sum(
struct snmp_msg_pstat *m_stat, 
u16_t vb_len)
 
  315  struct snmp_resp_header_lengths *rhl;
 
  319  snmp_asn1_enc_s32t_cnt(m_stat->error_index, &rhl->erridxlen);
 
  320  snmp_asn1_enc_length_cnt(rhl->erridxlen, &rhl->erridxlenlen);
 
  321  tot_len += 1 + rhl->erridxlenlen + rhl->erridxlen;
 
  323  snmp_asn1_enc_s32t_cnt(m_stat->error_status, &rhl->errstatlen);
 
  324  snmp_asn1_enc_length_cnt(rhl->errstatlen, &rhl->errstatlenlen);
 
  325  tot_len += 1 + rhl->errstatlenlen + rhl->errstatlen;
 
  327  snmp_asn1_enc_s32t_cnt(m_stat->rid, &rhl->ridlen);
 
  328  snmp_asn1_enc_length_cnt(rhl->ridlen, &rhl->ridlenlen);
 
  329  tot_len += 1 + rhl->ridlenlen + rhl->ridlen;
 
  331  rhl->pdulen = tot_len;
 
  332  snmp_asn1_enc_length_cnt(rhl->pdulen, &rhl->pdulenlen);
 
  333  tot_len += 1 + rhl->pdulenlen;
 
  335  rhl->comlen = m_stat->com_strlen;
 
  336  snmp_asn1_enc_length_cnt(rhl->comlen, &rhl->comlenlen);
 
  337  tot_len += 1 + rhl->comlenlen + rhl->comlen;
 
  339  snmp_asn1_enc_s32t_cnt(snmp_version, &rhl->verlen);
 
  340  snmp_asn1_enc_length_cnt(rhl->verlen, &rhl->verlenlen);
 
  341  tot_len += 1 + rhl->verlen + rhl->verlenlen;
 
  343  rhl->seqlen = tot_len;
 
  344  snmp_asn1_enc_length_cnt(rhl->seqlen, &rhl->seqlenlen);
 
  345  tot_len += 1 + rhl->seqlenlen;
 
  359snmp_trap_header_sum(
struct snmp_msg_trap *m_trap, 
u16_t vb_len)
 
  362  struct snmp_trap_header_lengths *thl;
 
  367  snmp_asn1_enc_u32t_cnt(m_trap->ts, &thl->tslen);
 
  368  snmp_asn1_enc_length_cnt(thl->tslen, &thl->tslenlen);
 
  369  tot_len += 1 + thl->tslen + thl->tslenlen;
 
  371  snmp_asn1_enc_s32t_cnt(m_trap->spc_trap, &thl->strplen);
 
  372  snmp_asn1_enc_length_cnt(thl->strplen, &thl->strplenlen);
 
  373  tot_len += 1 + thl->strplen + thl->strplenlen;
 
  375  snmp_asn1_enc_s32t_cnt(m_trap->gen_trap, &thl->gtrplen);
 
  376  snmp_asn1_enc_length_cnt(thl->gtrplen, &thl->gtrplenlen);
 
  377  tot_len += 1 + thl->gtrplen + thl->gtrplenlen;
 
  380  snmp_asn1_enc_length_cnt(thl->aaddrlen, &thl->aaddrlenlen);
 
  381  tot_len += 1 + thl->aaddrlen + thl->aaddrlenlen;
 
  383  snmp_asn1_enc_oid_cnt(m_trap->enterprise->len, &m_trap->enterprise->id[0], &thl->eidlen);
 
  384  snmp_asn1_enc_length_cnt(thl->eidlen, &thl->eidlenlen);
 
  385  tot_len += 1 + thl->eidlen + thl->eidlenlen;
 
  387  thl->pdulen = tot_len;
 
  388  snmp_asn1_enc_length_cnt(thl->pdulen, &thl->pdulenlen);
 
  389  tot_len += 1 + thl->pdulenlen;
 
  391  thl->comlen = 
sizeof(snmp_publiccommunity) - 1;
 
  392  snmp_asn1_enc_length_cnt(thl->comlen, &thl->comlenlen);
 
  393  tot_len += 1 + thl->comlenlen + thl->comlen;
 
  395  snmp_asn1_enc_s32t_cnt(snmp_version, &thl->verlen);
 
  396  snmp_asn1_enc_length_cnt(thl->verlen, &thl->verlenlen);
 
  397  tot_len += 1 + thl->verlen + thl->verlenlen;
 
  399  thl->seqlen = tot_len;
 
  400  snmp_asn1_enc_length_cnt(thl->seqlen, &thl->seqlenlen);
 
  401  tot_len += 1 + thl->seqlenlen;
 
  414snmp_varbind_list_sum(
struct snmp_varbind_root *root)
 
  416  struct snmp_varbind *vb;
 
  426    switch (vb->value_type)
 
  428      case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG):
 
  429        sint_ptr = (
s32_t*)vb->value;
 
  430        snmp_asn1_enc_s32t_cnt(*sint_ptr, &vb->vlen);
 
  432      case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER):
 
  433      case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_GAUGE):
 
  434      case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS):
 
  435        uint_ptr = (
u32_t*)vb->value;
 
  436        snmp_asn1_enc_u32t_cnt(*uint_ptr, &vb->vlen);
 
  438      case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR):
 
  439      case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_NUL):
 
  440      case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR):
 
  441      case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_OPAQUE):
 
  442        vb->vlen = vb->value_len;
 
  444      case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID):
 
  445        sint_ptr = (
s32_t*)vb->value;
 
  446        snmp_asn1_enc_oid_cnt(vb->value_len / 
sizeof(
s32_t), sint_ptr, &vb->vlen);
 
  454    snmp_asn1_enc_length_cnt(vb->vlen, &vb->vlenlen);
 
  455    snmp_asn1_enc_oid_cnt(vb->ident_len, vb->ident, &vb->olen);
 
  456    snmp_asn1_enc_length_cnt(vb->olen, &vb->olenlen);
 
  458    vb->seqlen = 1 + vb->vlenlen + vb->vlen;
 
  459    vb->seqlen += 1 + vb->olenlen + vb->olen;
 
  460    snmp_asn1_enc_length_cnt(vb->seqlen, &vb->seqlenlen);
 
  463    tot_len += 1 + vb->seqlenlen + vb->seqlen;
 
  469  root->seqlen = tot_len;
 
  470  snmp_asn1_enc_length_cnt(root->seqlen, &root->seqlenlen);
 
  471  tot_len += 1 + root->seqlenlen;
 
  480snmp_resp_header_enc(
struct snmp_msg_pstat *m_stat, 
struct pbuf *p)
 
  485  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ));
 
  487  snmp_asn1_enc_length(p, ofs, m_stat->rhl.seqlen);
 
  488  ofs += m_stat->rhl.seqlenlen;
 
  490  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
 
  492  snmp_asn1_enc_length(p, ofs, m_stat->rhl.verlen);
 
  493  ofs += m_stat->rhl.verlenlen;
 
  494  snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.verlen, snmp_version);
 
  495  ofs += m_stat->rhl.verlen;
 
  497  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR));
 
  499  snmp_asn1_enc_length(p, ofs, m_stat->rhl.comlen);
 
  500  ofs += m_stat->rhl.comlenlen;
 
  501  snmp_asn1_enc_raw(p, ofs, m_stat->rhl.comlen, m_stat->community);
 
  502  ofs += m_stat->rhl.comlen;
 
  504  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_RESP));
 
  506  snmp_asn1_enc_length(p, ofs, m_stat->rhl.pdulen);
 
  507  ofs += m_stat->rhl.pdulenlen;
 
  509  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
 
  511  snmp_asn1_enc_length(p, ofs, m_stat->rhl.ridlen);
 
  512  ofs += m_stat->rhl.ridlenlen;
 
  513  snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.ridlen, m_stat->rid);
 
  514  ofs += m_stat->rhl.ridlen;
 
  516  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
 
  518  snmp_asn1_enc_length(p, ofs, m_stat->rhl.errstatlen);
 
  519  ofs += m_stat->rhl.errstatlenlen;
 
  520  snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.errstatlen, m_stat->error_status);
 
  521  ofs += m_stat->rhl.errstatlen;
 
  523  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
 
  525  snmp_asn1_enc_length(p, ofs, m_stat->rhl.erridxlen);
 
  526  ofs += m_stat->rhl.erridxlenlen;
 
  527  snmp_asn1_enc_s32t(p, ofs, m_stat->rhl.erridxlen, m_stat->error_index);
 
  528  ofs += m_stat->rhl.erridxlen;
 
  537snmp_trap_header_enc(
struct snmp_msg_trap *m_trap, 
struct pbuf *p)
 
  542  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ));
 
  544  snmp_asn1_enc_length(p, ofs, m_trap->thl.seqlen);
 
  545  ofs += m_trap->thl.seqlenlen;
 
  547  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
 
  549  snmp_asn1_enc_length(p, ofs, m_trap->thl.verlen);
 
  550  ofs += m_trap->thl.verlenlen;
 
  551  snmp_asn1_enc_s32t(p, ofs, m_trap->thl.verlen, snmp_version);
 
  552  ofs += m_trap->thl.verlen;
 
  554  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR));
 
  556  snmp_asn1_enc_length(p, ofs, m_trap->thl.comlen);
 
  557  ofs += m_trap->thl.comlenlen;
 
  558  snmp_asn1_enc_raw(p, ofs, m_trap->thl.comlen, (
u8_t *)&snmp_publiccommunity[0]);
 
  559  ofs += m_trap->thl.comlen;
 
  561  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_TRAP));
 
  563  snmp_asn1_enc_length(p, ofs, m_trap->thl.pdulen);
 
  564  ofs += m_trap->thl.pdulenlen;
 
  566  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID));
 
  568  snmp_asn1_enc_length(p, ofs, m_trap->thl.eidlen);
 
  569  ofs += m_trap->thl.eidlenlen;
 
  570  snmp_asn1_enc_oid(p, ofs, m_trap->enterprise->len, &m_trap->enterprise->id[0]);
 
  571  ofs += m_trap->thl.eidlen;
 
  573  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR));
 
  575  snmp_asn1_enc_length(p, ofs, m_trap->thl.aaddrlen);
 
  576  ofs += m_trap->thl.aaddrlenlen;
 
  577  snmp_asn1_enc_raw(p, ofs, m_trap->thl.aaddrlen, &m_trap->sip_raw[0]);
 
  578  ofs += m_trap->thl.aaddrlen;
 
  580  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
 
  582  snmp_asn1_enc_length(p, ofs, m_trap->thl.gtrplen);
 
  583  ofs += m_trap->thl.gtrplenlen;
 
  584  snmp_asn1_enc_u32t(p, ofs, m_trap->thl.gtrplen, m_trap->gen_trap);
 
  585  ofs += m_trap->thl.gtrplen;
 
  587  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG));
 
  589  snmp_asn1_enc_length(p, ofs, m_trap->thl.strplen);
 
  590  ofs += m_trap->thl.strplenlen;
 
  591  snmp_asn1_enc_u32t(p, ofs, m_trap->thl.strplen, m_trap->spc_trap);
 
  592  ofs += m_trap->thl.strplen;
 
  594  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS));
 
  596  snmp_asn1_enc_length(p, ofs, m_trap->thl.tslen);
 
  597  ofs += m_trap->thl.tslenlen;
 
  598  snmp_asn1_enc_u32t(p, ofs, m_trap->thl.tslen, m_trap->ts);
 
  599  ofs += m_trap->thl.tslen;
 
  608snmp_varbind_list_enc(
struct snmp_varbind_root *root, 
struct pbuf *p, 
u16_t ofs)
 
  610  struct snmp_varbind *vb;
 
  615  snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ));
 
  617  snmp_asn1_enc_length(p, ofs, root->seqlen);
 
  618  ofs += root->seqlenlen;
 
  623    snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ));
 
  625    snmp_asn1_enc_length(p, ofs, vb->seqlen);
 
  626    ofs += vb->seqlenlen;
 
  628    snmp_asn1_enc_type(p, ofs, (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID));
 
  630    snmp_asn1_enc_length(p, ofs, vb->olen);
 
  632    snmp_asn1_enc_oid(p, ofs, vb->ident_len, &vb->ident[0]);
 
  635    snmp_asn1_enc_type(p, ofs, vb->value_type);
 
  637    snmp_asn1_enc_length(p, ofs, vb->vlen);
 
  640    switch (vb->value_type)
 
  642      case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG):
 
  643        sint_ptr = (
s32_t*)vb->value;
 
  644        snmp_asn1_enc_s32t(p, ofs, vb->vlen, *sint_ptr);
 
  646      case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_COUNTER):
 
  647      case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_GAUGE):
 
  648      case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_TIMETICKS):
 
  649        uint_ptr = (
u32_t*)vb->value;
 
  650        snmp_asn1_enc_u32t(p, ofs, vb->vlen, *uint_ptr);
 
  652      case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR):
 
  653      case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_IPADDR):
 
  654      case (SNMP_ASN1_APPLIC | SNMP_ASN1_PRIMIT | SNMP_ASN1_OPAQUE):
 
  655        raw_ptr = (
u8_t*)vb->value;
 
  656        snmp_asn1_enc_raw(p, ofs, vb->vlen, raw_ptr);
 
  658      case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_NUL):
 
  660      case (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID):
 
  661        sint_ptr = (
s32_t*)vb->value;
 
  662        snmp_asn1_enc_oid(p, ofs, vb->value_len / 
sizeof(
s32_t), sint_ptr);
 
#define LWIP_DEBUGF(debug, message)
 
struct netif * ip_route(ip_addr_t *dest)
 
#define ip_addr_isany(addr1)
 
#define ip4_addr1(ipaddr)
 
#define ip_addr_set(dest, src)
 
#define ip_addr_copy(dest, src)
 
#define ip4_addr4(ipaddr)
 
typedefPACK_STRUCT_END struct ip_addr ip_addr_t
 
#define ip4_addr3(ipaddr)
 
#define ip4_addr2(ipaddr)
 
#define SNMP_TRAP_DESTINATIONS
 
struct pbuf * pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type)
 
u8_t pbuf_free(struct pbuf *p)
 
#define snmp_inc_snmpouttoobigs()
 
#define snmp_inc_snmpoutpkts()
 
#define snmp_get_sysuptime(value)
 
#define snmp_get_snmpenableauthentraps(value)
 
#define snmp_inc_snmpouttraps()
 
#define snmp_inc_snmpoutbadvalues()
 
#define snmp_inc_snmpoutgetresponses()
 
#define snmp_inc_snmpoutgenerrs()
 
#define snmp_get_snmpgrpid_ptr(oid)
 
#define snmp_inc_snmpoutnosuchnames()