NSH networking: There is now a configuration option that will bring up the network on an separate thread. Since the network bring-up is asynchronous, there are not serial console start-up delays due to the network negotiation time.

This commit is contained in:
Gregory Nutt
2014-08-06 11:59:41 -06:00
parent 291697ba8d
commit dc57af80fc
4 changed files with 117 additions and 8 deletions

View File

@@ -42,6 +42,7 @@
#include <nuttx/config.h>
#include <pthread.h>
#include <debug.h>
#include <net/if.h>
@@ -95,18 +96,14 @@
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: nsh_netinit
* Name: nsh_netinit_thread
*
* Description:
* Initialize the network per the selected NuttX configuration
*
****************************************************************************/
int nsh_netinit(void)
pthread_addr_t nsh_netinit_thread(pthread_addr_t arg)
{
struct in_addr addr;
#if defined(CONFIG_NSH_DHCPC)
@@ -116,6 +113,8 @@ int nsh_netinit(void)
uint8_t mac[IFHWADDRLEN];
#endif
nvdbg("Entry\n");
/* Many embedded network interfaces must have a software assigned MAC */
#if defined(CONFIG_NSH_NOMAC) && !defined(CONFIG_NET_SLIP)
@@ -207,7 +206,65 @@ int nsh_netinit(void)
}
#endif
nvdbg("Exit\n");
return OK;
}
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: nsh_netinit
*
* Description:
* Initialize the network per the selected NuttX configuration
*
****************************************************************************/
int nsh_netinit(void)
{
#ifdef CONFIG_NSH_NETINIT_THREAD
struct sched_param sparam;
pthread_attr_t attr;
pthread_t tid;
void *value;
int ret;
/* Start the network initialization thread to perform the network bring-up
* asynchronously.
*/
pthread_attr_init(&attr);
sparam.sched_priority = CONFIG_NSH_NETINIT_THREAD_PRIORITY;
(void)pthread_attr_setschedparam(&attr, &sparam);
(void)pthread_attr_setstacksize(&attr, CONFIG_NSH_NETINIT_THREAD_STACKSIZE);
nvdbg("Starting netinit thread\n");
ret = pthread_create(&tid, &attr, nsh_netinit_thread, NULL);
if (ret != OK)
{
ndbg("ERROR: Failed to create netinit thread: %d\n", ret);
(void)nsh_netinit_thread(NULL);
}
else
{
/* Detach the thread because we will not be joining to it */
(void)pthread_detach(tid);
/* Name the thread */
pthread_setname_np(tid, "netinit");
}
return OK;
#else
/* Perform network initialization sequentially */
(void)nsh_netinit_thread(NULL);
#endif
}
#endif /* CONFIG_NET */