diff options
| author | [email protected] <[email protected]> | 2011-05-27 06:05:56 +0000 |
|---|---|---|
| committer | [email protected] <[email protected]> | 2011-05-27 06:05:56 +0000 |
| commit | e9e1c20aebe1556a7e63ae84754949a0bc2cd006 (patch) | |
| tree | f647a2e02ffa26ec7c1417f2ee7f6a60d3efd63e | |
| parent | 1d56e975cb919495bcd399675c8ff898f99af96f (diff) | |
lwip1.4.0 is able to run now!
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1437 bbd45198-f89e-11dd-88c7-29a3b14d5316
| -rw-r--r-- | components/net/lwip-1.4.0/src/netif/ethernetif.c | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/components/net/lwip-1.4.0/src/netif/ethernetif.c b/components/net/lwip-1.4.0/src/netif/ethernetif.c index 8e76076e40..ed757dc4f7 100644 --- a/components/net/lwip-1.4.0/src/netif/ethernetif.c +++ b/components/net/lwip-1.4.0/src/netif/ethernetif.c @@ -128,8 +128,18 @@ static err_t ethernetif_init(struct netif *netif) netif->hwaddr_len = 6; /* maximum transfer unit */ netif->mtu = ETHERNET_MTU; - /* broadcast capability */ - netif->flags = NETIF_FLAG_BROADCAST; + + /* NOTE: the NETIF_FLAG_UP and NETIF_FLAG_LINK_UP flag is not set here. + They should be set by netif_set_up() and netif_set_link_up() automatically */ + netif->flags = NETIF_FLAG_BROADCAST | + NETIF_FLAG_ETHARP; +#ifdef LWIP_IGMP + netif->flags |= NETIF_FLAG_IGMP; +#endif + +#ifdef LWIP_DHCP + netif->flags |= NETIF_FLAG_DHCP; +#endif /* get hardware address */ rt_device_control(&(eth_dev->parent), NIOCTL_GADDR, netif->hwaddr); @@ -145,19 +155,19 @@ static err_t ethernetif_init(struct netif *netif) /* ethernetif APIs */ rt_err_t eth_device_init(struct eth_device* dev, const char* name) { - struct netif* netif; + struct netif* pnetif; /* allocate memory */ - netif = (struct netif*) rt_malloc (sizeof(struct netif)); - if (netif == RT_NULL) + pnetif = (struct netif*) rt_malloc (sizeof(struct netif)); + if (pnetif == RT_NULL) { rt_kprintf("malloc netif failed\n"); return -RT_ERROR; } - rt_memset(netif, 0, sizeof(struct netif)); + rt_memset(pnetif, 0, sizeof(struct netif)); /* set netif */ - dev->netif = netif; + dev->netif = pnetif; /* register to rt-thread device manager */ rt_device_register(&(dev->parent), name, RT_DEVICE_FLAG_RDWR); dev->parent.type = RT_Device_Class_NetIf; @@ -168,18 +178,23 @@ rt_err_t eth_device_init(struct eth_device* dev, const char* name) /* NOTE: eth_init will be called back by netif_add, we should put some initialization code to eth_init(). See include/lwip/netif.h line 97 */ eth_dev = dev; - if (netif_add(netif, IP_ADDR_ANY, IP_ADDR_BROADCAST, IP_ADDR_ANY, dev, + if (netif_add(pnetif, IP_ADDR_ANY, IP_ADDR_BROADCAST, IP_ADDR_ANY, dev, ethernetif_init, ethernet_input) == RT_NULL) { /* failed, unregister device and free netif */ rt_device_unregister(&(dev->parent)); - rt_free(netif); + rt_free(pnetif); eth_dev = RT_NULL; return -RT_ERROR; } eth_dev = RT_NULL; - netif_set_default(netif); + netif_set_default(pnetif); + + /* We bring up the netif here cause we still don't have a call back function + which indicates the ethernet interface status from the ethernet driver. */ + netif_set_up(pnetif); + netif_set_link_up(pnetif); return RT_EOK; } |
