[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-users] R: Re: DNS thread-safe functions

From: address@hidden
Subject: [lwip-users] R: Re: DNS thread-safe functions
Date: Tue, 4 Feb 2020 11:49:21 +0100 (CET)

Dear Simon and Ajay,

Thanks you so much for your attention in this matter.

I appreciate your suggestions and I evaluate them carefully. I hope to interpret correctly the three your solutions:
- LOCK_TCPIP_CORE / UNLOCK_TCPIP_CORE. They allow to access in exclusive way to TCIPIP mechanism. However, I don’t want interfere with the regular mechanisms of TCIPIP thread and of operating system;

- tcpip_callback. It allows to call a specific function inside TCPIP thread. However, tcpip_callback doesn’t  expect a wait until the end of the function executed in TCPIP thread.

- tcpip_try_callback. As for the above function, tcpip_try_callback also allows to call a specific function inside the TCPIP thread. However, tcpip_try_callback doesn’t block when the request can’t be posted in the tcpip_mbox.

For these reasons I choose to use the tcpip_api_call function. In this way the caller task waits for the TCPIP operation to be completed and the modifications to the existing project are marginal.
I follow the netifapi_netif_set_addr function as example. So, I introduce:
- dnsapi_dns_setserver. Function called from non-TCPIP threads. It passes to TCPIP thread the dnsapi_do_dns_setserver function through the tcpip_api_call function;

- dnsapi_do_dns_setserver. Function called inside the TCPIP thread. It calls the dns_setserver function. So the dns_setserver is executed in thread-safe way;

- dns_server_api_msg. Structure used to modelized the message passed to TCPIP thread through tcpip_api_call function.
This solution works fine.

At this point I would like to know your position about the use of the tcpip_api_call function instead of your suggestions. Is it an equally acceptable alternative from your point of view?.

Thanks in advance.

You can write a simple wrapper function for DNS setup and use tcpip_callback to call it from TCPIP thread context. There is also tcpip_try_callback.

Ajay Bhargav

> Dear all,
> I would like to ask some questions about the thread-safe functions.
> According the http://www.nongnu.org/lwip/2_0_x/pitfalls.html page, in
> the OS mode, all the callback-style APIs function must only be called
> from the TCPIP thread.
> In the OS mode, the functions belongs to NETIF, DHCP, DNS, … modules
> require corresponding thread-safe functions to be used from threads
> different from TCPIP thread.
> For example instead of calling directly the /netif_set_up/ function it’s
> necessary use the /netifapi_netif_set_up/ function, or instead of
> calling directly the /dhcp_start/ function it’s necessary use the
> /netifapi_dhcp_start/ function.
> I am looking for the thread-safe function corresponding to the
> /dns_setserver /function. I am using LwIP 2.1.2, but I don’t find it.

I don't think such a function exists.

> At this point I would know if there is a thread-safe function
> corresponding to the /dns_setserver/ or if I should build a similar
> function myself. In this last case, which function could I take as a model?.

The simple solution would be to enable LWIP_TCPIP_CORE_LOCKING and
surround your call with LOCK_TCPIP_CORE()/UNLOCK_TCPIP_CORE().


> Thanks in advance for your attention and for your suggestions.
> Regards

lwip-users mailing list

reply via email to

[Prev in Thread] Current Thread [Next in Thread]