При использовании LWIP SNMP возникают ошибки при вызове второго snmp_vabind_alloc

Я пытаюсь отправить правильную ловушку, используя SNMP облегченного интернет-протокола (LWIP).

SNMP Wiki утверждает, что правильная ловушка должна иметь

  1. привязка текущего значения sysUpTime
  2. OID, идентифицирующий тип привязки ловушки
  3. необязательная привязка переменной

Однако он ошибается с vb->value != NULL, когда вызывается второй snmp_varbind_alloc.

Когда отправляется только привязка переменной и никакая другая, ловушка отправляется на станцию ​​управления сетью в порядке.


person Ben McCormick    schedule 02.07.2015    source источник
comment
Предлагаем вам добавить SSCCE. См. sscce.org .   -  person k1eran    schedule 02.07.2015


Ответы (3)


Если структура определена в оперативной памяти, а поля заполнены, эффективно выполняя выделение вручную, то я могу получить две привязки для выхода. Он будет делать один шаг, но не будет работать. Итак, теперь мне нужно убедиться, что структуры ОЗУ существуют, когда они отправляются, прежде чем я их уничтожу. Итак, я могу добавить задержку, что не идеально, или найти функцию, которая сообщит мне, когда ловушка была отправлена, чтобы я мог двигаться дальше. Я не решаюсь публиковать код, который не работает. Когда (если) я заработаю, тогда я покажу код.

person Ben McCormick    schedule 03.07.2015
comment
В opt.h увеличение значения #define MEMP_NUM_SNMP_VALUE с 3 до 9 позволяет выделить еще 2 привязки. Однако я выяснил, что одной привязки достаточно для ловушки 1 уровня. Ловушки уровня 2 требуют 3 привязки. - person Ben McCormick; 07.07.2015

Вот код для 3 привязок с измененным opt.h:

#define MEMP_NUM_SNMP_VALUE 3

to:

#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.

person Ben McCormick    schedule 07.07.2015

Ваш вопрос был опубликован некоторое время назад, но у меня была та же проблема, что и у вас, и я не смог найти ответ... Я использую LWIP на STM32F107 и совершенно не смог добавить второй varbind к своим ловушкам. ..

Решение состояло в том, чтобы увеличить размер HEAP моего µcontroller. При использовании STM32CubeMX он находится (для меня) в строке 61 файла startup_stm32f107xc.s и имеет значение по умолчанию 0x200 (512 байт), я просто удвоил это значение до 0x400.

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

Heap_Size      EQU     0x400

Я надеюсь, что это поможет тем, кто пытается использовать LWIP!

person Clément    schedule 05.08.2016