diff --git a/src/core/ipv6/nd6.c b/src/core/ipv6/nd6.c index 31f4ff4b..f8497f99 100644 --- a/src/core/ipv6/nd6.c +++ b/src/core/ipv6/nd6.c @@ -761,10 +761,9 @@ nd6_tmr(void) for (j = 1; j < LWIP_IPV6_NUM_ADDRESSES; j++) { if (netif_ip6_addr_state(prefix_list[i].netif, j) == IP6_ADDR_INVALID) { /* Generate an address using this prefix and interface ID from link-local address. */ - prefix_list[i].netif->ip6_addr[j].addr[0] = prefix_list[i].prefix.addr[0]; - prefix_list[i].netif->ip6_addr[j].addr[1] = prefix_list[i].prefix.addr[1]; - prefix_list[i].netif->ip6_addr[j].addr[2] = prefix_list[i].netif->ip6_addr[0].addr[2]; - prefix_list[i].netif->ip6_addr[j].addr[3] = prefix_list[i].netif->ip6_addr[0].addr[3]; + IP6_ADDR(&prefix_list[i].netif->ip6_addr[j], + prefix_list[i].prefix.addr[0], prefix_list[i].prefix.addr[1], + netif_ip6_addr(prefix_list[i].netif, 0)->addr[2], netif_ip6_addr(prefix_list[i].netif, 0)->addr[3]); /* Mark it as tentative (DAD will be performed if configured). */ netif_ip6_addr_set_state(prefix_list[i].netif, j, IP6_ADDR_TENTATIVE); diff --git a/src/core/netif.c b/src/core/netif.c index 2fb48266..ccbbe48a 100644 --- a/src/core/netif.c +++ b/src/core/netif.c @@ -152,10 +152,7 @@ netif_init(void) #endif /* NO_SYS */ #if LWIP_IPV6 - loop_netif.ip6_addr[0].addr[0] = 0; - loop_netif.ip6_addr[0].addr[1] = 0; - loop_netif.ip6_addr[0].addr[2] = 0; - loop_netif.ip6_addr[0].addr[3] = PP_HTONL(0x00000001UL); + IP6_ADDR(loop_netif.ip6_addr, 0, 0, 0, PP_HTONL(0x00000001UL)); loop_netif.ip6_addr_state[0] = IP6_ADDR_VALID; #endif /* LWIP_IPV6 */ diff --git a/src/include/lwip/ip_addr.h b/src/include/lwip/ip_addr.h index a341f1bb..ccc33856 100644 --- a/src/include/lwip/ip_addr.h +++ b/src/include/lwip/ip_addr.h @@ -107,6 +107,8 @@ static ip4_addr_t* ip_2_ip4(const ip_addr_t *ipaddr) ip4_addr_set(ip_2_ip4(dest), ip_2_ip4(src)); IP_SET_TYPE(dest, IPADDR_TYPE_V4); }}while(0) #define ip_addr_set_zero(ipaddr) do{ \ ip6_addr_set_zero(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, 0); }while(0) +#define ip_addr_set_zero_ip6(ipaddr) do{ \ + ip6_addr_set_zero(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V6); }while(0) #define ip_addr_set_any(is_ipv6, ipaddr) do{if(is_ipv6){ \ ip6_addr_set_any(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V6); }else{ \ ip4_addr_set_any(ip_2_ip4(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V4); }}while(0) @@ -213,6 +215,7 @@ typedef ip6_addr_t ip_addr_t; #define ip_addr_set(dest, src) ip6_addr_set(dest, src) #define ip_addr_set_ipaddr(dest, src) ip6_addr_set(dest, src) #define ip_addr_set_zero(ipaddr) ip6_addr_set_zero(ipaddr) +#define ip_addr_set_zero_ip6(ipaddr) ip6_addr_set_zero(ipaddr) #define ip_addr_set_any(is_ipv6, ipaddr) ip6_addr_set_any(ipaddr) #define ip_addr_set_loopback(is_ipv6, ipaddr) ip6_addr_set_loopback(ipaddr) #define ip_addr_set_hton(dest, src) ip6_addr_set_hton(dest, src) diff --git a/src/include/lwip/netif.h b/src/include/lwip/netif.h index e4678740..188b29ef 100644 --- a/src/include/lwip/netif.h +++ b/src/include/lwip/netif.h @@ -342,6 +342,9 @@ void netif_set_default(struct netif *netif); void netif_set_ipaddr(struct netif *netif, const ip4_addr_t *ipaddr); void netif_set_netmask(struct netif *netif, const ip4_addr_t *netmask); void netif_set_gw(struct netif *netif, const ip4_addr_t *gw); +#define netif_ip4_addr(netif) (&((netif)->ip_addr)) +#define netif_ip4_netmask(netif) (&((netif)->netmask)) +#define netif_ip4_gw(netif) (&((netif)->gw)) #endif /* LWIP_IPV4 */ void netif_set_up(struct netif *netif); @@ -388,14 +391,9 @@ void netif_poll_all(void); #endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ #endif /* ENABLE_LOOPBACK */ -#if LWIP_IPV4 -#define netif_ip4_addr(netif) (&((netif)->ip_addr)) -#define netif_ip4_netmask(netif) (&((netif)->netmask)) -#define netif_ip4_gw(netif) (&((netif)->gw)) -#endif /* LWIP_IPV4 */ - #if LWIP_IPV6 #define netif_ip6_addr(netif, i) (&((netif)->ip6_addr[(i)])) +#define netif_ip6_addr_set(netif, i, addr6) ip6_addr_set(&((netif)->ip6_addr[(i)]), addr6) #define netif_ip6_addr_state(netif, i) ((netif)->ip6_addr_state[(i)]) #define netif_ip6_addr_set_state(netif, i, state) ((netif)->ip6_addr_state[(i)] = (state)) s8_t netif_get_ip6_addr_match(struct netif *netif, ip6_addr_t *ip6addr); diff --git a/src/netif/ppp/ppp.c b/src/netif/ppp/ppp.c index 6883e739..838327dd 100644 --- a/src/netif/ppp/ppp.c +++ b/src/netif/ppp/ppp.c @@ -1209,7 +1209,7 @@ int sif6addr(ppp_pcb *pcb, eui64_t our_eui64, eui64_t his_eui64) { LWIP_UNUSED_ARG(his_eui64); IN6_LLADDR_FROM_EUI64(ip6, our_eui64); - ip6_addr_copy(pcb->netif->ip6_addr[0], ip6); + netif_ip6_addr_set(pcb->netif, 0, &ip6); netif_ip6_addr_set_state(pcb->netif, 0, IP6_ADDR_PREFERRED); /* FIXME: should we add an IPv6 static neighbor using his_eui64 ? */ return 1; @@ -1223,8 +1223,8 @@ int cif6addr(ppp_pcb *pcb, eui64_t our_eui64, eui64_t his_eui64) { LWIP_UNUSED_ARG(our_eui64); LWIP_UNUSED_ARG(his_eui64); + netif_ip6_addr_set(pcb->netif, 0, IP6_ADDR_ANY6); netif_ip6_addr_set_state(pcb->netif, 0, IP6_ADDR_INVALID); - ip6_addr_set_zero(&pcb->netif->ip6_addr[0]); return 1; }