使用LWIP SNMP时,在调用第二个snmp_vabind_alloc时会发生错误

时间:2015-07-02 12:53:30

标签: embedded snmp lwip

我正在尝试使用轻量级互联网协议(LWIP)SNMP发送适当的陷阱。

SNMP Wiki声明,一个适当的陷阱应该

  
      
  1. 当前的sysUpTime值绑定
  2.   
  3. 标识陷阱绑定类型的OID
  4.   
  5. 可选的变量绑定
  6.   

但是,当调用第二个vb->value != NULL时,snmp_varbind_alloc会出错。

当仅发送变量绑定而没有其他时,陷阱将被发送到网络管理站ok。

3 个答案:

答案 0 :(得分:0)

如果在RAM中定义了结构并且填充了字段,那么我可以有效地进行分配,那么我可以获得两个绑定。它会单步但不会运行。所以,现在我需要在销毁之前确保RAM结构在发送时存在。所以,我可以添加一个不理想的延迟,或找到一个能告诉我陷阱何时被发送的功能,所以我可以继续前进。我在发布不起作用的代码时犹豫不决。当(如果)我得到它工作,那么我将显示代码。

答案 1 :(得分:0)

以下是使用opt.h更改的3个绑定的代码:

#define MEMP_NUM_SNMP_VALUE 3

为:

#define MEMP_NUM_SNMP_VALUE 9

struct snmp_obj_id sysupid = {9,{1,3,6,1,2,1,1,3,0}};
struct snmp_obj_id trapoid = {11,{1,3,6,1,6,3,1,1,4,1,0}};
struct snmp_obj_id pttnotifyoid = {8,{1,3,6,1,4,SNMP_ENTERPRISE_ID,3,18}};
static unsigned char trapOID[10] = { 0x2b, 6, 1, 4, 1, 0x82, 0xe4, 0x3d, 3, 18};
struct snmp_varbind *vb1, *vb2, *vb3;
u32_t *u32ptr, sysuptime;
void vSendTrapTaskDemo( void ){
   snmp_varbind_list_free(&trap_msg.outvb);
   vb1 = snmp_varbind_alloc(&sysupid,SNMP_ASN1_TIMETICKS, 4);
   snmp_get_sysuptime(&sysuptime);
   vb1->value_len=4;
   vb1->value_type=0x43;  //Timerticks
   u32ptr=vb1->value;
   *u32ptr=sysuptime;
   snmp_varbind_tail_add(&trap_msg.outvb,vb1);

   vb2 = snmp_varbind_alloc(&trapoid,SNMP_ASN1_OBJ_ID, 11);
   memcpy (vb2->value, trapOID, 10);
   snmp_varbind_tail_add(&trap_msg.outvb,vb2);

   vb3 = snmp_varbind_alloc(&pttnotifyoid, SNMP_ASN1_COUNTER, 4);
   vb3->value_len=4;
   vb3->value_type=0x02; //Integer32
   u32ptr=vb3->value;
   *u32ptr=1;
   snmp_varbind_tail_add(&trap_msg.outvb,vb3);

   snmp_send_trap(SNMP_GENTRAP_ENTERPRISESPC, &sysupid,18);
   snmp_varbind_list_free(&trap_msg.outvb);
} 

第二个绑定存在问题。 应该是OID的值为0(itu-t): 1.3.6.1.4.1.45629.3.18

但是,由于1级只需要一个绑定,我现在将忘记3绑定方法,直到被告知需要2级。

答案 2 :(得分:0)

你的问题已经发布了一段时间,但我和你有同样的问题,但找不到答案...... 我在STM32F107上使用LWIP,并且完全无法在我的陷阱中添加第二个varbind ......

解决方案是增加μ控制器的HEAP大小。 当使用STM32CubeMX时,它位于(对我来说)startup_stm32f107xc.s文件的第61行,并且默认值为0x200(512字节),我只是将其加倍为0x400。

; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size      EQU     0x400

我希望这会对试图使用LWIP的人有所帮助!