Skip to content

Commit d0be573

Browse files
committed
EMAC: Fix LWIP_IPV4 and DEVICE_EMAC flag usage
1 parent 5cd2d78 commit d0be573

File tree

3 files changed

+67
-84
lines changed

3 files changed

+67
-84
lines changed

features/FEATURE_LWIP/lwip-interface/emac_lwip.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,6 @@ static err_t emac_lwip_low_level_output(struct netif *netif, struct pbuf *p)
3333
return ret ? ERR_OK : ERR_IF;
3434
}
3535

36-
static err_t emac_lwip_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr)
37-
{
38-
return etharp_output(netif, q, ipaddr);
39-
}
40-
4136
static void emac_lwip_input(void *data, emac_stack_t *buf)
4237
{
4338
struct eth_hdr *ethhdr;
@@ -81,7 +76,10 @@ err_t emac_lwip_if_init(struct netif *netif)
8176

8277
mac->ops.get_ifname(mac, netif->name, 2);
8378

84-
netif->output = emac_lwip_output;
79+
#if LWIP_IPV4
80+
netif->output = etharp_output;
81+
#endif /* LWIP_IPV4 */
82+
8583
netif->linkoutput = emac_lwip_low_level_output;
8684

8785
if (!mac->ops.power_up(mac)) {

features/FEATURE_LWIP/lwip-interface/eth_arch.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,17 @@
2929
extern "C" {
3030
#endif
3131

32+
#if DEVICE_EMAC
33+
err_t emac_lwip_if_init(struct netif *netif);
34+
35+
#else /* DEVICE_EMAC */
3236
void eth_arch_enable_interrupts(void);
3337
void eth_arch_disable_interrupts(void);
3438
err_t eth_arch_enetif_init(struct netif *netif);
39+
#endif
3540

3641
#ifdef __cplusplus
3742
}
3843
#endif
3944

4045
#endif // #ifndef ETHARCHINTERFACE_H_
41-

features/FEATURE_LWIP/lwip-interface/lwip_stack.c

Lines changed: 58 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,14 @@
3535

3636
#include "emac_api.h"
3737

38+
#if DEVICE_EMAC
39+
#define NETIF_INIT_FN emac_lwip_if_init
40+
#else
41+
#define NETIF_INIT_FN eth_arch_enetif_init
42+
#endif
43+
44+
#define DHCP_TIMEOUT 15000
45+
3846
/* Static arena of sockets */
3947
static struct lwip_socket {
4048
bool in_use;
@@ -352,6 +360,47 @@ char *lwip_get_gateway(char *buf, int buflen)
352360
#endif
353361
}
354362

363+
int lwip_start_dhcp(unsigned int timeout)
364+
{
365+
err_t err = 0;
366+
#if LWIP_IPV4
367+
err = dhcp_start(&lwip_netif);
368+
if (err) {
369+
return NSAPI_ERROR_DHCP_FAILURE;
370+
}
371+
#endif
372+
373+
#if DEVICE_EMAC
374+
// If doesn't have address
375+
if (!lwip_get_ip_addr(true, &lwip_netif)) {
376+
err = sys_arch_sem_wait(&lwip_netif_has_addr, timeout);
377+
if (err == SYS_ARCH_TIMEOUT) {
378+
return NSAPI_ERROR_DHCP_FAILURE;
379+
}
380+
lwip_connected = true;
381+
}
382+
#endif /* DEVICE_EMAC */
383+
384+
return err;
385+
}
386+
387+
int lwip_start_static_ip(const char *ip, const char *netmask, const char *gw)
388+
{
389+
390+
#if LWIP_IPV4
391+
ip4_addr_t ip_addr;
392+
ip4_addr_t netmask_addr;
393+
ip4_addr_t gw_addr;
394+
395+
if (!inet_aton(ip, &ip_addr) ||
396+
!inet_aton(netmask, &netmask_addr) ||
397+
!inet_aton(gw, &gw_addr)) {
398+
return NSAPI_ERROR_PARAMETER;
399+
}
400+
401+
netif_set_addr(&lwip_netif, &ip_addr, &netmask_addr, &gw_addr);
402+
#endif
403+
}
355404

356405
int lwip_bringup(emac_interface_t *emac, bool dhcp, const char *ip, const char *netmask, const char *gw)
357406
{
@@ -373,23 +422,14 @@ int lwip_bringup(emac_interface_t *emac, bool dhcp, const char *ip, const char *
373422
sys_arch_sem_wait(&lwip_tcpip_inited, 0);
374423

375424
memset(&lwip_netif, 0, sizeof lwip_netif);
376-
#if DEVICE_EMAC
377425
if (!netif_add(&lwip_netif,
378426
#if LWIP_IPV4
379427
0, 0, 0,
380428
#endif
381-
emac, emac_lwip_if_init, tcpip_input)) {
429+
emac, NETIF_INIT_FN, tcpip_input)) {
382430
return -1;
383431
}
384-
#else /* DEVICE_EMAC */
385-
if (!netif_add(&lwip_netif,
386-
#if LWIP_IPV4
387-
0, 0, 0,
388-
#endif
389-
NULL, eth_arch_enetif_init, tcpip_input)) {
390-
return -1;
391-
}
392-
#endif /* DEVICE_EMAC */
432+
393433
netif_set_default(&lwip_netif);
394434

395435
netif_set_link_callback (&lwip_netif, lwip_netif_link_irq);
@@ -435,47 +475,26 @@ int lwip_bringup(emac_interface_t *emac, bool dhcp, const char *ip, const char *
435475
}
436476
}
437477

438-
#if LWIP_IPV4
478+
#if !DEVICE_EMAC
439479
if (!dhcp) {
440-
ip4_addr_t ip_addr;
441-
ip4_addr_t netmask_addr;
442-
ip4_addr_t gw_addr;
443-
444-
if (!inet_aton(ip, &ip_addr) ||
445-
!inet_aton(netmask, &netmask_addr) ||
446-
!inet_aton(gw, &gw_addr)) {
447-
return NSAPI_ERROR_PARAMETER;
448-
}
449-
450-
netif_set_addr(&lwip_netif, &ip_addr, &netmask_addr, &gw_addr);
480+
lwip_start_static_ip(ip, netmask, gw);
451481
}
452-
#endif
453482

454483
netif_set_up(&lwip_netif);
455484

456-
#if !DEVICE_EMAC
457-
#if LWIP_IPV4
458-
// Connect to the network
459485
lwip_dhcp = dhcp;
460-
461-
if (lwip_dhcp) {
462-
err_t err = dhcp_start(&lwip_netif);
463-
if (err) {
464-
return NSAPI_ERROR_DHCP_FAILURE;
465-
}
486+
if (dhcp) {
487+
lwip_start_dhcp(DHCP_TIMEOUT);
466488
}
467-
#endif
468489

469490
// If doesn't have address
470491
if (!lwip_get_ip_addr(true, &lwip_netif)) {
471-
//ret = sys_arch_sem_wait(&lwip_netif_has_addr, 15000);
472-
ret = sys_arch_sem_wait(&lwip_netif_has_addr, 30000);
492+
ret = sys_arch_sem_wait(&lwip_netif_has_addr, DHCP_TIMEOUT);
473493
if (ret == SYS_ARCH_TIMEOUT) {
474494
return NSAPI_ERROR_DHCP_FAILURE;
475495
}
476496
lwip_connected = true;
477497
}
478-
#endif /* DEVICE_EMAC */
479498

480499
#if ADDR_TIMEOUT
481500
// If address is not for preferred stack waits a while to see
@@ -485,6 +504,8 @@ int lwip_bringup(emac_interface_t *emac, bool dhcp, const char *ip, const char *
485504
}
486505
#endif
487506

507+
#endif /* DEVICE_EMAC */
508+
488509
#if LWIP_IPV6
489510
add_dns_addr(&lwip_netif);
490511
#endif
@@ -537,46 +558,6 @@ static int lwip_err_remap(err_t err) {
537558
}
538559
}
539560

540-
int lwip_start_dhcp(unsigned int timeout)
541-
{
542-
err_t err = NSAPI_ERROR_DNS_FAILURE;
543-
#if LWIP_IPV4
544-
err = dhcp_start(&lwip_netif);
545-
if (err) {
546-
return NSAPI_ERROR_DHCP_FAILURE;
547-
}
548-
#endif
549-
550-
// If doesn't have address
551-
if (!lwip_get_ip_addr(true, &lwip_netif)) {
552-
err = sys_arch_sem_wait(&lwip_netif_has_addr, timeout);
553-
if (err == SYS_ARCH_TIMEOUT) {
554-
return NSAPI_ERROR_DHCP_FAILURE;
555-
}
556-
lwip_connected = true;
557-
}
558-
return err;
559-
}
560-
561-
int lwip_start_static_ip(const char *ip, const char *netmask, const char *gw)
562-
{
563-
564-
#if LWIP_IPV4
565-
ip4_addr_t ip_addr;
566-
ip4_addr_t netmask_addr;
567-
ip4_addr_t gw_addr;
568-
569-
if (!inet_aton(ip, &ip_addr) ||
570-
!inet_aton(netmask, &netmask_addr) ||
571-
!inet_aton(gw, &gw_addr)) {
572-
return NSAPI_ERROR_PARAMETER;
573-
}
574-
575-
netif_set_addr(&lwip_netif, &ip_addr, &netmask_addr, &gw_addr);
576-
#endif
577-
578-
}
579-
580561
/* LWIP network stack implementation */
581562
static int lwip_gethostbyname(nsapi_stack_t *stack, const char *host, nsapi_addr_t *addr, nsapi_version_t version)
582563
{

0 commit comments

Comments
 (0)