lwipstack: add start dhcp and static ip functions

pull/3975/head
Martin Kojtal 2016-09-29 14:44:03 +01:00
parent 1b797bbd16
commit d40c19bc73
3 changed files with 45 additions and 2 deletions

View File

@ -41,7 +41,7 @@ int IPStackInterface::start_dhcp(uint timeout)
int IPStackInterface::start_static_ip(const char *ip, const char *netmask, const char *gw)
{
return lwip_start_static_ip();
return lwip_start_static_ip(ip, netmask, gw);
}
const char * IPStackInterface::get_mac_address()

View File

@ -509,7 +509,7 @@ int lwip_bringdown(void)
netif_set_down(&lwip_netif);
}
#endif
}
/* LWIP error remapping */
static int lwip_err_remap(err_t err) {
@ -537,6 +537,46 @@ static int lwip_err_remap(err_t err) {
}
}
int lwip_start_dhcp(unsigned int timeout)
{
err_t err = NSAPI_ERROR_DNS_FAILURE;
#if LWIP_IPV4
err = dhcp_start(&lwip_netif);
if (err) {
return NSAPI_ERROR_DHCP_FAILURE;
}
#endif
// If doesn't have address
if (!lwip_get_ip_addr(true, &lwip_netif)) {
err = sys_arch_sem_wait(&lwip_netif_has_addr, timeout);
if (err == SYS_ARCH_TIMEOUT) {
return NSAPI_ERROR_DHCP_FAILURE;
}
lwip_connected = true;
}
return err;
}
int lwip_start_static_ip(const char *ip, const char *netmask, const char *gw)
{
#if LWIP_IPV4
ip4_addr_t ip_addr;
ip4_addr_t netmask_addr;
ip4_addr_t gw_addr;
if (!inet_aton(ip, &ip_addr) ||
!inet_aton(netmask, &netmask_addr) ||
!inet_aton(gw, &gw_addr)) {
return NSAPI_ERROR_PARAMETER;
}
netif_set_addr(&lwip_netif, &ip_addr, &netmask_addr, &gw_addr);
#endif
}
/* LWIP network stack implementation */
static int lwip_gethostbyname(nsapi_stack_t *stack, const char *host, nsapi_addr_t *addr, nsapi_version_t version)
{

View File

@ -34,6 +34,9 @@ char *lwip_get_ip_address(char *buf, int buflen);
char *lwip_get_netmask(char *buf, int buflen);
char *lwip_get_gateway(char *buf, int buflen);
int lwip_start_dhcp(unsigned int timeout);
int lwip_start_static_ip(const char *ip, const char *netmask, const char *gw);
extern nsapi_stack_t lwip_stack;