Hm, you again found a bug. In this case I don't even have quick fix... We
(the company I work for) never used traps so they are basically untested.

Sorry
Dirk


Harrold Spier <harrold.sp...@gmail.com> schrieb am Do., 12. März 2020,
14:38:

>
> I tried, but unfortunately the last two options both did not work :-(
>
> I see function snmp_coldstart_trap() at the end is calling
> netconn_sendto() to send the packet.
> So I wonder whether it allowed anyway to call the netconn_sendto()
> functions in the tcpip thread?
> The function will probably try to do the core lock itself.
> This would explain it does not work.
>
> Regards,
> Harrold
>
>
> On Thu, Mar 12, 2020 at 2:07 PM Dirk Ziegelmeier <d...@ziegelmeier.net>
> wrote:
>
>> The last two options will both work. Read the lwip threading hints in the
>> docs!
>>
>> Harrold Spier <harrold.sp...@gmail.com> schrieb am Do., 12. März 2020,
>> 13:42:
>>
>>> Hi Dirk,
>>>
>>> Yes, this fixes the reported problem. But there is probably more.
>>> Executing snmpwalk using a wrong community may generate an authentication
>>> trap:
>>>
>>> snmpwalk -v1 -c wrongcommunity 192.168.28.2 1.3
>>>
>>>
>>> [image: image.png]
>>>
>>> This will also generate the core lock assert,
>>> because snmp_send_trap_or_notification_or_inform_generic() checks for it.
>>>
>>> So I'm a little bit confused :-|
>>>
>>> Assume I want to generate a coldstart trap at the start of my
>>> application, what would be the correct way to do so, using the netconn
>>> implementation?
>>>
>>>    - Call snmp_coldstart_trap() directly from any thread you like.
>>>    - Call snmp_coldstart_trap() only via the tcpip_callback() function.
>>>    - Call snmp_coldstart_trap() after calling LOCK_TCPIP_CORE() and before
>>>    UNLOCK_TCPIP_CORE().
>>>
>>> Best regards,
>>> Harrold
>>>
>>>
>>> On Thu, Mar 12, 2020 at 11:48 AM Dirk Ziegelmeier <d...@ziegelmeier.net>
>>> wrote:
>>>
>>>> you found a bug :-)
>>>>
>>>> Try this, and please create a bug entry:
>>>>
>>>> static s16_t
>>>> system_get_value(const struct snmp_scalar_array_node_def *node, void
>>>> *value)
>>>> {
>>>>   const u8_t  *var = NULL;
>>>>   const s16_t *var_len;
>>>>   u16_t result;
>>>>
>>>>   switch (node->oid) {
>>>>     case 1: /* sysDescr */
>>>>       var     = sysdescr;
>>>>       var_len = (const s16_t *)sysdescr_len;
>>>>       break;
>>>>     case 2: { /* sysObjectID */
>>>> #if SNMP_USE_NETCONN && LWIP_TCPIP_CORE_LOCKING
>>>>       LOCK_TCPIP_CORE();
>>>> #endif
>>>>       const struct snmp_obj_id *dev_enterprise_oid =
>>>> snmp_get_device_enterprise_oid();
>>>> #if SNMP_USE_NETCONN && LWIP_TCPIP_CORE_LOCKING
>>>>       UNLOCK_TCPIP_CORE();
>>>> #endif
>>>>       MEMCPY(value, dev_enterprise_oid->id, dev_enterprise_oid->len *
>>>> sizeof(u32_t));
>>>>       return dev_enterprise_oid->len * sizeof(u32_t);
>>>>     }
>>>>     case 3: /* sysUpTime */
>>>>       MIB2_COPY_SYSUPTIME_TO((u32_t *)value);
>>>>       return sizeof(u32_t);
>>>>     case 4: /* sysContact */
>>>>       var     = syscontact;
>>>>       var_len = (const s16_t *)syscontact_len;
>>>>       break;
>>>>     case 5: /* sysName */
>>>>       var     = sysname;
>>>>       var_len = (const s16_t *)sysname_len;
>>>>
>>>> Ciao
>>>> Dirk
>>>>
>>>> --
>>>> Dirk Ziegelmeier * d...@ziegelmeier.net * http://www.ziegelmeier.net
>>>>
>>>>
>>>> On Thu, Mar 12, 2020 at 11:34 AM Harrold Spier <harrold.sp...@gmail.com>
>>>> wrote:
>>>>
>>>>> Hi Dirk,
>>>>>
>>>>> Thanks for your quick response.
>>>>>
>>>>> Function snmp_set_device_enterprise_oid() is called by my
>>>>> application, but snmp_get_device_enterprise_oid() for example is
>>>>> called (indirectly) by snmp_receive(), which runs in the snmp_netconn
>>>>> thread.
>>>>>
>>>>> [image: image.png]
>>>>>
>>>>> Best regards,
>>>>> Harrold
>>>>>
>>>>>
>>>>> On Thu, Mar 12, 2020 at 11:16 AM Dirk Ziegelmeier <
>>>>> d...@ziegelmeier.net> wrote:
>>>>>
>>>>>> The netconn thread receives SNMP packets and processes them in the
>>>>>> SNMP stack, nothing else. It never calls 
>>>>>> snmp_set_device_enterprise_oid().
>>>>>> Put a breakpoint in calls snmp_set_device_enterprise_oid() and check the
>>>>>> call stack. I guess it's your application that makes this call from the
>>>>>> wrong thread.
>>>>>>
>>>>>> Ciao
>>>>>> Dirk
>>>>>>
>>>>>>
>>>>>> On Thu, Mar 12, 2020 at 10:57 AM Harrold Spier <
>>>>>> harrold.sp...@gmail.com> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> After enabling core locked check (LWIP_ASSERT_CORE_LOCKED
>>>>>>> and LWIP_MARK_TCPIP_THREAD), I got a lot of asserts in SNMP functions.
>>>>>>>
>>>>>>> I use the SNMP netconn implementation (SNMP_USE_NETCONN = 1), so I
>>>>>>> assume all SNMP functions should be called by the snmp_netconn thread, 
>>>>>>> not
>>>>>>> by the tcpip_thread.
>>>>>>> So why does a function like snmp_set_device_enterprise_oid() does a
>>>>>>> core check (LWIP_ASSERT_CORE_LOCKED())?
>>>>>>> I assume this would only be valid for the snmp raw implementation.
>>>>>>>
>>>>>>> Or do I miss something?
>>>>>>>
>>>>>>> Best regards,
>>>>>>> Harrold
>>>>>>> _______________________________________________
>>>>>>> lwip-users mailing list
>>>>>>> lwip-users@nongnu.org
>>>>>>> https://lists.nongnu.org/mailman/listinfo/lwip-users
>>>>>>
>>>>>> _______________________________________________
>>>>>> lwip-users mailing list
>>>>>> lwip-users@nongnu.org
>>>>>> https://lists.nongnu.org/mailman/listinfo/lwip-users
>>>>>
>>>>> _______________________________________________
>>>>> lwip-users mailing list
>>>>> lwip-users@nongnu.org
>>>>> https://lists.nongnu.org/mailman/listinfo/lwip-users
>>>>
>>>> _______________________________________________
>>>> lwip-users mailing list
>>>> lwip-users@nongnu.org
>>>> https://lists.nongnu.org/mailman/listinfo/lwip-users
>>>
>>> _______________________________________________
>>> lwip-users mailing list
>>> lwip-users@nongnu.org
>>> https://lists.nongnu.org/mailman/listinfo/lwip-users
>>
>> _______________________________________________
>> lwip-users mailing list
>> lwip-users@nongnu.org
>> https://lists.nongnu.org/mailman/listinfo/lwip-users
>
> _______________________________________________
> lwip-users mailing list
> lwip-users@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/lwip-users
_______________________________________________
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to