diff --git a/components/net/SConscript b/components/net/SConscript index c1246a601c66e6b911d6dae9c49d512e3237c349..587018d809e1f94a25db0cd716ac03075666fe9d 100644 --- a/components/net/SConscript +++ b/components/net/SConscript @@ -7,7 +7,7 @@ objs = [] list = os.listdir(os.path.join(RTT_ROOT, 'components', 'net')) # the default version of LWIP is 1.4.1 -if not GetDepend('RT_USING_LWIP132') and not GetDepend('RT_USING_LWIP140'): +if not GetDepend('RT_USING_LWIP132') and not GetDepend('RT_USING_LWIP140') and not GetDepend('RT_USING_LWIP_HEAD'): AddDepend('RT_USING_LWIP141') for d in list: diff --git a/components/net/lwip-head/CHANGELOG b/components/net/lwip-head/CHANGELOG index 32ca51a5e7ca4ed32c65a3cc3e6b56c03b56ad91..b2a735ce5ab2d0f10c0d37152d4068a554813f94 100644 --- a/components/net/lwip-head/CHANGELOG +++ b/components/net/lwip-head/CHANGELOG @@ -6,6 +6,10 @@ HISTORY ++ New features: + 2013-08-19: Simon Goldschmidt + * netif.h: bug #42998: made NETIF_MAX_HWADDR_LEN overridable for some special + networks + 2013-03-17: Simon Goldschmidt (patch by Ghobad Emadi) * opt.h, etharp.c: Added LWIP_HOOK_ETHARP_GET_GW to implement IPv4 routing with multiple gateways diff --git a/components/net/lwip-head/SConscript b/components/net/lwip-head/SConscript index 7ce23dcf76570f5cf2c7c2ab295d5f7e6ecf319b..f075886853696b26b5128414b85cee596c53a3cc 100644 --- a/components/net/lwip-head/SConscript +++ b/components/net/lwip-head/SConscript @@ -29,12 +29,18 @@ src/core/tcp_out.c src/core/timers.c src/core/udp.c src/core/inet_chksum.c +src/netif/etharp.c +src/netif/ethernetif.c +src/netif/slipif.c src/core/ipv4/autoip.c src/core/ipv4/icmp.c src/core/ipv4/igmp.c src/core/ipv4/ip4.c src/core/ipv4/ip4_addr.c src/core/ipv4/ip_frag.c +""") + +ipv6_src = Split(""" src/core/ipv6/dhcp6.c src/core/ipv6/ethip6.c src/core/ipv6/icmp6.c @@ -44,9 +50,6 @@ src/core/ipv6/ip6.c src/core/ipv6/ip6_frag.c src/core/ipv6/mld6.c src/core/ipv6/nd6.c -src/netif/etharp.c -src/netif/ethernetif.c -src/netif/slipif.c """) snmp_src = Split(""" @@ -91,10 +94,13 @@ src/netif/ppp/polarssl/sha1.c path = [GetCurrentDir() + '/src', GetCurrentDir() + '/src/include', GetCurrentDir() + '/src/include/ipv4', - GetCurrentDir() + '/src/include/ipv6', + GetCurrentDir() + '/src/include/ipv6', GetCurrentDir() + '/src/arch/include', GetCurrentDir() + '/src/include/netif'] +if GetDepend(['RT_LWIP_IPV6']): + src += ipv6_src + if GetDepend(['RT_LWIP_SNMP']): src += snmp_src diff --git a/components/net/lwip-head/src/arch/sys_arch.c b/components/net/lwip-head/src/arch/sys_arch.c index 8317e49eeb59570a0cf35b363074386306571dbc..7ad6757bca751e2c141c807c3aac7523291133d8 100644 --- a/components/net/lwip-head/src/arch/sys_arch.c +++ b/components/net/lwip-head/src/arch/sys_arch.c @@ -95,15 +95,16 @@ static void tcpip_init_done_callback(void *arg) if (netif_default == RT_NULL) netif_set_default(ethif->netif); #ifdef LWIP_IPV6 - ethif->netif->output_ip6 = ethip6_output; - netif_create_ip6_linklocal_address(ethif->netif, 1); - #ifdef LWIP_IPV6_AUTOCONFIG - ethif->netif->ip6_autoconfig_enabled = 1; - #endif - #ifdef LWIP_IPV6_MLD - ethif->netif->mld_mac_filter = NULL; - #endif + ethif->netif->output_ip6 = ethip6_output; + netif_create_ip6_linklocal_address(ethif->netif, 1); +#ifdef LWIP_IPV6_AUTOCONFIG + ethif->netif->ip6_autoconfig_enabled = 1; #endif +#ifdef LWIP_IPV6_MLD + ethif->netif->mld_mac_filter = NULL; +#endif +#endif + #if LWIP_DHCP if (ethif->flags & NETIF_FLAG_DHCP) { @@ -175,14 +176,6 @@ int lwip_system_init(void) netifapi_netif_set_addr(netif_default, &ipaddr, &netmask, &gw); } #endif -/*#if LWIP_IPV6 && LWIP_IPV6_MLD - ip6_addr_t ip6addr_group; - IP6_ADDR(&ip6addr_group, 0, 0xfe, 0x80, 0x00, 0x00); - IP6_ADDR(&ip6addr_group, 0, 0x00, 0x00, 0x00, 0x00); - IP6_ADDR(&ip6addr_group, 0, 0x00, 0x00, 0x00, 0x00); - IP6_ADDR(&ip6addr_group, 0, 0x00, 0x00, 0x00, 0x01); - netif_mld_mac_filter_fn(netif_default, &ip6addr_group, 0); -#endif*/ rt_kprintf("lwIP-%d.%d.%d initialized!\n", LWIP_VERSION_MAJOR, LWIP_VERSION_MINOR, LWIP_VERSION_REVISION); return 0; diff --git a/components/net/lwip-head/src/core/init.c b/components/net/lwip-head/src/core/init.c index a9bf6797229998ea21d586cb741d4f8651ff76ba..cfd7ff5aae2a79f4eccdac5a8f591145a8a81bb9 100644 --- a/components/net/lwip-head/src/core/init.c +++ b/components/net/lwip-head/src/core/init.c @@ -106,7 +106,7 @@ #error "If you want to use Sequential API, you have to define MEMP_NUM_TCPIP_MSG_API>=1 in your lwipopts.h" #endif /* There must be sufficient timeouts, taking into account requirements of the subsystems. */ -#if (LWIP_TIMERS && (MEMP_NUM_SYS_TIMEOUT < (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + PPP_SUPPORT + (LWIP_IPV6 ? (1 + LWIP_IPV6_REASS + LWIP_IPV6_MLD) : 0)))) +#if LWIP_TIMERS && (MEMP_NUM_SYS_TIMEOUT < (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + PPP_SUPPORT + (LWIP_IPV6 ? (1 + LWIP_IPV6_REASS + LWIP_IPV6_MLD) : 0))) #error "MEMP_NUM_SYS_TIMEOUT is too low to accomodate all required timeouts" #endif #if (IP_REASSEMBLY && (MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS)) diff --git a/components/net/lwip-head/src/include/lwip/netif.h b/components/net/lwip-head/src/include/lwip/netif.h index 8a9a9a3a0f54b9b10e96c7fe3c48f9dbe62b057e..5c7bf164c34d5e525cca01a15f5a8ec7133e1cc2 100644 --- a/components/net/lwip-head/src/include/lwip/netif.h +++ b/components/net/lwip-head/src/include/lwip/netif.h @@ -60,9 +60,12 @@ extern "C" { /* Throughout this file, IP addresses are expected to be in * the same byte order as in IP_PCB. */ -/** must be the maximum of all used hardware address lengths - across all types of interfaces in use */ +/** Must be the maximum of all used hardware address lengths + across all types of interfaces in use. + This does not have to be changed, normally. */ +#ifndef NETIF_MAX_HWADDR_LEN #define NETIF_MAX_HWADDR_LEN 6U +#endif /** Whether the network interface is 'up'. This is * a software flag used to control whether this network diff --git a/components/net/lwip-head/src/include/lwip/opt.h b/components/net/lwip-head/src/include/lwip/opt.h index 2a96b5477ac10967ff7db4694017ae34ee823666..c0af6d02123c2dc9d7a0fbaeee3bd98fbbe67c7c 100644 --- a/components/net/lwip-head/src/include/lwip/opt.h +++ b/components/net/lwip-head/src/include/lwip/opt.h @@ -502,7 +502,7 @@ * Old packets are dropped, new packets are queued. */ #ifndef ARP_QUEUE_LEN -#define ARP_QUEUE_LEN 3 +#define ARP_QUEUE_LEN 3 #endif /** diff --git a/components/net/lwip-head/src/lwipopts.h b/components/net/lwip-head/src/lwipopts.h index 84fa32c76e6403d8782a15da6026eb5196f77b51..4d7961d8e883f6748dfb27c2673d2e5167c76ba5 100644 --- a/components/net/lwip-head/src/lwipopts.h +++ b/components/net/lwip-head/src/lwipopts.h @@ -10,14 +10,15 @@ #define LWIP_NETCONN 1 #ifdef RT_LWIP_IPV6 -#define LWIP_IPV6 1 +#define LWIP_IPV6 1 //#define LWIP_IPV6_DHCP6 1 -#define LWIP_ICMP6 1 -#define LWIP_IPV6_NUM_ADDRESSES 3 -#endif +#define LWIP_ICMP6 1 +#define LWIP_IPV6_NUM_ADDRESSES 3 #ifdef RT_LWIP_IPV6_AUTOCONFIG -#define LWIP_IPV6_AUTOCONFIG 1 +#define LWIP_IPV6_AUTOCONFIG 1 +#endif + #endif #ifdef RT_LWIP_IPV6_MLD diff --git a/components/net/lwip-head/src/netif/ethernetif.c b/components/net/lwip-head/src/netif/ethernetif.c index bced7e8b3780386282519f7d5fed1e5f59197ed5..cf3262b4fc9b9f08b856dba1479ab03950946af0 100644 --- a/components/net/lwip-head/src/netif/ethernetif.c +++ b/components/net/lwip-head/src/netif/ethernetif.c @@ -208,18 +208,18 @@ rt_err_t eth_device_init_with_flag(struct eth_device *dev, char *name, rt_uint8_ /* if tcp thread has been started up, we add this netif to the system */ if (rt_thread_find("tcpip") != RT_NULL) { - struct ip_addr ipaddr, netmask, gw; + struct ip_addr ipaddr, netmask, gw; #if !LWIP_DHCP - IP4_ADDR(&ipaddr, RT_LWIP_IPADDR0, RT_LWIP_IPADDR1, RT_LWIP_IPADDR2, RT_LWIP_IPADDR3); + IP4_ADDR(&ipaddr, RT_LWIP_IPADDR0, RT_LWIP_IPADDR1, RT_LWIP_IPADDR2, RT_LWIP_IPADDR3); IP4_ADDR(&gw, RT_LWIP_GWADDR0, RT_LWIP_GWADDR1, RT_LWIP_GWADDR2, RT_LWIP_GWADDR3); IP4_ADDR(&netmask, RT_LWIP_MSKADDR0, RT_LWIP_MSKADDR1, RT_LWIP_MSKADDR2, RT_LWIP_MSKADDR3); #else - IP4_ADDR(&ipaddr, 0, 0, 0, 0); - IP4_ADDR(&gw, 0, 0, 0, 0); - IP4_ADDR(&netmask, 0, 0, 0, 0); + IP4_ADDR(&ipaddr, 0, 0, 0, 0); + IP4_ADDR(&gw, 0, 0, 0, 0); + IP4_ADDR(&netmask, 0, 0, 0, 0); #endif - netifapi_netif_add(netif, &ipaddr, &netmask, &gw, dev, eth_netif_device_init, tcpip_input); + netifapi_netif_add(netif, &ipaddr, &netmask, &gw, dev, eth_netif_device_init, tcpip_input); } return RT_EOK; @@ -437,6 +437,7 @@ void set_if(char* netif_name, char* ip_addr, char* gw_addr, char* nm_addr) } FINSH_FUNCTION_EXPORT(set_if, set network interface address); +#if LWIP_IPV6 void set_if6(char* netif_name, char* ip6_addr) { struct netif* netif = netif_list; @@ -467,6 +468,7 @@ void set_if6(char* netif_name, char* ip6_addr) } } FINSH_FUNCTION_EXPORT(set_if6, set ipv6 local address) +#endif #if LWIP_DNS #include @@ -514,12 +516,12 @@ void list_if(void) rt_kprintf("ip address: %s\n", ipaddr_ntoa(&(netif->ip_addr))); rt_kprintf("gw address: %s\n", ipaddr_ntoa(&(netif->gw))); rt_kprintf("net mask : %s\n", ipaddr_ntoa(&(netif->netmask))); - - rt_kprintf("link-local address: %s\n", ip6addr_ntoa(&(netif->ip6_addr[0]))); - rt_kprintf("ipv6[1] address: %s\n", ip6addr_ntoa(&(netif->ip6_addr[1]))); - rt_kprintf("\r\n"); - - netif = netif->next; +#if LWIP_IPV6 + rt_kprintf("link-local address: %s\n", ip6addr_ntoa(&(netif->ip6_addr[0]))); + rt_kprintf("ipv6[1] address: %s\n", ip6addr_ntoa(&(netif->ip6_addr[1]))); + rt_kprintf("\r\n"); +#endif + netif = netif->next; } #if LWIP_DNS @@ -558,13 +560,13 @@ void list_tcps(void) rt_kprintf("Active PCB states:\n"); for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { - #ifndef LWIP_IPV6 +#ifndef LWIP_IPV6 strcpy(local_ip_str, ipaddr_ntoa(&(pcb->local_ip))); strcpy(remote_ip_str, ipaddr_ntoa(&(pcb->remote_ip))); - #else - strcpy(local_ip_str, ip6addr_ntoa((ip6_addr_t *)&(pcb->local_ip))); +#else + strcpy(local_ip_str, ip6addr_ntoa((ip6_addr_t *)&(pcb->local_ip))); strcpy(remote_ip_str, ip6addr_ntoa((ip6_addr_t *)&(pcb->remote_ip))); - #endif +#endif rt_kprintf("#%d %s:%d <==> %s:%d snd_nxt 0x%08X rcv_nxt 0x%08X ", num++, local_ip_str, @@ -588,13 +590,13 @@ void list_tcps(void) num = 0; for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { - #ifndef LWIP_IPV6 - strcpy(local_ip_str, ipaddr_ntoa(&(pcb->local_ip))); +#ifndef LWIP_IPV6 + strcpy(local_ip_str, ipaddr_ntoa(&(pcb->local_ip))); strcpy(remote_ip_str, ipaddr_ntoa(&(pcb->remote_ip))); - #else - strcpy(local_ip_str, ip6addr_ntoa((ip6_addr_t *)&(pcb->local_ip))); +#else + strcpy(local_ip_str, ip6addr_ntoa((ip6_addr_t *)&(pcb->local_ip))); strcpy(remote_ip_str, ip6addr_ntoa((ip6_addr_t *)&(pcb->remote_ip))); - #endif +#endif rt_kprintf("#%d %s:%d <==> %s:%d snd_nxt 0x%08X rcv_nxt 0x%08X ", num++, diff --git a/components/net/lwip-head/test/unit/dhcp/test_dhcp.c b/components/net/lwip-head/test/unit/dhcp/test_dhcp.c index 0055b492981a92cabb6d2eea8aa2091b0fb17190..2d59036ede6d5c25d7b8592786a3402d92afad43 100644 --- a/components/net/lwip-head/test/unit/dhcp/test_dhcp.c +++ b/components/net/lwip-head/test/unit/dhcp/test_dhcp.c @@ -369,7 +369,6 @@ static err_t lwip_tx_func(struct netif *netif, struct pbuf *p) case 3: case 4: case 5: - case 6: { const u8_t arpproto[] = { 0x08, 0x06 }; @@ -379,7 +378,7 @@ static err_t lwip_tx_func(struct netif *netif, struct pbuf *p) check_pkt(p, 12, arpproto, sizeof(arpproto)); /* eth level proto: ip */ break; } - case 7: + case 6: { const u8_t fake_arp[6] = { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xab }; const u8_t ipproto[] = { 0x08, 0x00 }; @@ -773,13 +772,13 @@ START_TEST(test_dhcp_relayed) } fail_unless(netif_is_up(&net_test)); - fail_unless(txpacket == 6, "txpacket = %d", txpacket); + fail_unless(txpacket == 5, "txpacket = %d", txpacket); /* We need to send arp response here.. */ send_pkt(&net_test, arp_resp, sizeof(arp_resp)); - fail_unless(txpacket == 7, "txpacket = %d", txpacket); + fail_unless(txpacket == 6, "txpacket = %d", txpacket); fail_unless(netif_is_up(&net_test)); xid = htonl(net_test.dhcp->xid); /* xid updated */ @@ -790,7 +789,7 @@ START_TEST(test_dhcp_relayed) tick_lwip(); } - fail_unless(txpacket == 7, "txpacket = %d", txpacket); + fail_unless(txpacket == 6, "txpacket = %d", txpacket); netif_remove(&net_test);