mirror of https://github.com/ARMmbed/mbed-os.git
Separate LWIP core and Ethernet interface initialisation
Will allow LWIP to be initialised for PPP use.pull/4119/head
parent
ae7fd61d65
commit
be00c1720b
|
|
@ -57,12 +57,8 @@ static struct lwip_socket {
|
|||
void *data;
|
||||
} lwip_arena[MEMP_NUM_NETCONN];
|
||||
|
||||
static bool lwip_connected = false;
|
||||
|
||||
static void mbed_lwip_arena_init(void)
|
||||
{
|
||||
memset(lwip_arena, 0, sizeof lwip_arena);
|
||||
}
|
||||
static bool lwip_inited = false;
|
||||
static bool lwip_connected = true;
|
||||
|
||||
static struct lwip_socket *mbed_lwip_arena_alloc(void)
|
||||
{
|
||||
|
|
@ -404,15 +400,14 @@ char *mbed_lwip_get_gateway(char *buf, nsapi_size_t buflen)
|
|||
#endif
|
||||
}
|
||||
|
||||
nsapi_error_t mbed_lwip_init(emac_interface_t *emac)
|
||||
void mbed_lwip_init()
|
||||
{
|
||||
|
||||
// Check if we've already brought up lwip
|
||||
if (!mbed_lwip_get_mac_address()) {
|
||||
// Seed lwip random
|
||||
if (!lwip_inited) {
|
||||
// Seed lwip random
|
||||
lwip_seed_random();
|
||||
|
||||
// Set up network
|
||||
// Initialise TCP sequence number
|
||||
uint32_t tcp_isn_secret[4];
|
||||
for (int i = 0; i < 4; i++) {
|
||||
|
|
@ -421,12 +416,22 @@ nsapi_error_t mbed_lwip_init(emac_interface_t *emac)
|
|||
lwip_init_tcp_isn(0, (u8_t *) &tcp_isn_secret);
|
||||
|
||||
sys_sem_new(&lwip_tcpip_inited, 0);
|
||||
sys_sem_new(&lwip_netif_linked, 0);
|
||||
sys_sem_new(&lwip_netif_has_addr, 0);
|
||||
|
||||
tcpip_init(mbed_lwip_tcpip_init_irq, NULL);
|
||||
sys_arch_sem_wait(&lwip_tcpip_inited, 0);
|
||||
|
||||
lwip_inited = true;
|
||||
}
|
||||
}
|
||||
|
||||
nsapi_error_t mbed_lwip_emac_init(emac_interface_t *emac)
|
||||
{
|
||||
// Check if we've already set up netif
|
||||
if (!mbed_lwip_get_mac_address()) {
|
||||
// Set up network
|
||||
sys_sem_new(&lwip_netif_linked, 0);
|
||||
sys_sem_new(&lwip_netif_has_addr, 0);
|
||||
|
||||
memset(&lwip_netif, 0, sizeof lwip_netif);
|
||||
if (!netif_add(&lwip_netif,
|
||||
#if LWIP_IPV4
|
||||
|
|
@ -457,13 +462,12 @@ nsapi_error_t mbed_lwip_bringup(bool dhcp, const char *ip, const char *netmask,
|
|||
return NSAPI_ERROR_PARAMETER;
|
||||
}
|
||||
|
||||
if(mbed_lwip_init(NULL) != NSAPI_ERROR_OK) {
|
||||
mbed_lwip_init();
|
||||
|
||||
if (mbed_lwip_emac_init(NULL) != NSAPI_ERROR_OK) {
|
||||
return NSAPI_ERROR_DEVICE_ERROR;
|
||||
}
|
||||
|
||||
// Zero out socket set
|
||||
mbed_lwip_arena_init();
|
||||
|
||||
#if LWIP_IPV6
|
||||
netif_create_ip6_linklocal_address(&lwip_netif, 1/*from MAC*/);
|
||||
#if LWIP_IPV6_MLD
|
||||
|
|
|
|||
|
|
@ -25,7 +25,8 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
// Access to lwip through the nsapi
|
||||
nsapi_error_t mbed_lwip_init(emac_interface_t *emac);
|
||||
void mbed_lwip_init();
|
||||
nsapi_error_t mbed_lwip_emac_init(emac_interface_t *emac);
|
||||
nsapi_error_t mbed_lwip_bringup(bool dhcp, const char *ip, const char *netmask, const char *gw);
|
||||
nsapi_error_t mbed_lwip_bringdown(void);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue