首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用LWIP SNMP,当第二个snmp_vabind_alloc被调用时会发生错误。

使用LWIP SNMP,当第二个snmp_vabind_alloc被调用时会发生错误。
EN

Stack Overflow用户
提问于 2015-07-02 12:53:29
回答 3查看 658关注 0票数 0

我试图使用轻量级Internet协议(LWIP) SNMP发送一个适当的陷阱。

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

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

但是,当第二个snmp_varbind_alloc被调用时,它会在snmp_varbind_alloc中出错。

当只发送变量绑定而不发送其他绑定时,陷阱将发送到网络管理站ok。

EN

回答 3

Stack Overflow用户

发布于 2015-07-03 14:26:11

如果在RAM中定义了结构并填充了字段,有效地手动执行分配,那么我就可以得到两个绑定。它将一步一步,但不运行。所以,现在我需要看一下,在我销毁它们之前,当RAM结构被发送出去时,它是否存在。因此,我可以添加一个延迟,这是不理想的,或者找到一个函数,可以告诉我什么时候发出陷阱,这样我就可以继续前进了。我在发布不起作用的代码方面犹豫不决。当我让它工作的时候,我会给你看代码。

票数 0
EN

Stack Overflow用户

发布于 2015-07-07 15:43:03

下面是从opt.h更改的3个绑定的代码:

#定义MEMP_NUM_SNMP_VALUE 3

至:

#定义MEMP_NUM_SNMP_VALUE 9

代码语言:javascript
运行
复制
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为1.3.6.1.4.1.45629.3.18时,OID的值为0(Itu)。

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

票数 0
EN

Stack Overflow用户

发布于 2016-08-05 13:38:21

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

解决方案是增加我的临时控制器的堆大小。当使用STM32CubeMX时,它位于(对我来说) startup_stm32f107xc.s文件的第61行,默认值为0x200 (512字节),我只需将其翻一番即可达到0x400。

代码语言:javascript
运行
复制
; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size      EQU     0x400

我希望这将有助于谁试图使用LWIP!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31185229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档