From b70ddf7b5428a6f1ace7aea8c74fc327d6cb0a97 Mon Sep 17 00:00:00 2001 From: Dirk Ziegelmeier Date: Wed, 2 Nov 2016 11:58:33 +0100 Subject: [PATCH] Cleanup unmap_ipv6_mapped_ipv4() macro --- src/api/api_msg.c | 12 +++++------- src/include/lwip/ip_addr.h | 13 +++++++------ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/api/api_msg.c b/src/api/api_msg.c index 76131aed..2b76f077 100644 --- a/src/api/api_msg.c +++ b/src/api/api_msg.c @@ -1401,8 +1401,9 @@ lwip_netconn_do_send(void *m) #if LWIP_IPV4 && LWIP_IPV6 /* Dual-stack: Unmap IPv6 mapped IPv4 addresses */ - if(NETCONNTYPE_ISIPV6(netconn_type(msg->conn)) && IP_IS_V4_VAL(msg->msg.b->addr)) { - unmap_ipv6_mapped_ipv4(&msg->msg.b->addr, &msg->msg.b->addr); + if (NETCONNTYPE_ISIPV6(netconn_type(msg->conn)) && ip6_addr_isipv6mappedipv4(ip_2_ip6(&msg->msg.b->addr))) { + unmap_ipv6_mapped_ipv4(ip_2_ip4(&msg->msg.b->addr), ip_2_ip6(&msg->msg.b->addr)); + IP_SET_TYPE(&msg->msg.b->addr, IPADDR_TYPE_V4); } #endif /* LWIP_IPV4 && LWIP_IPV6 */ @@ -1722,11 +1723,8 @@ lwip_netconn_do_getaddr(void *m) #if LWIP_IPV4 && LWIP_IPV6 /* Dual-stack: Map IPv4 addresses to IPv6 */ - if(NETCONNTYPE_ISIPV6(netconn_type(msg->conn)) && IP_IS_V4_VAL(API_EXPR_DEREF(msg->msg.ad.ipaddr))) { - ip4_addr_t ip4; - - ip4_addr_copy(ip4, *ip_2_ip4(&API_EXPR_DEREF(msg->msg.ad.ipaddr))); - ip4_2_ipv6_mapped_ipv4(ip_2_ip6(&API_EXPR_DEREF(msg->msg.ad.ipaddr)), &ip4); + if (NETCONNTYPE_ISIPV6(netconn_type(msg->conn)) && IP_IS_V4_VAL(API_EXPR_DEREF(msg->msg.ad.ipaddr))) { + ip4_2_ipv6_mapped_ipv4(ip_2_ip6(&API_EXPR_DEREF(msg->msg.ad.ipaddr)), ip_2_ip4(&API_EXPR_DEREF(msg->msg.ad.ipaddr))); IP_SET_TYPE_VAL(API_EXPR_DEREF(msg->msg.ad.ipaddr), IPADDR_TYPE_V6); } #endif /* LWIP_IPV4 && LWIP_IPV6 */ diff --git a/src/include/lwip/ip_addr.h b/src/include/lwip/ip_addr.h index 8ec640e7..7e850377 100644 --- a/src/include/lwip/ip_addr.h +++ b/src/include/lwip/ip_addr.h @@ -215,15 +215,16 @@ int ipaddr_aton(const char *cp, ip_addr_t *addr); /** @ingroup ipaddr */ #define IPADDR_STRLEN_MAX IP6ADDR_STRLEN_MAX +/** @ingroup ipaddr */ #define ip4_2_ipv6_mapped_ipv4(ip6addr, ip4addr) do { \ - (ip6addr)->addr[0] = 0; \ - (ip6addr)->addr[1] = 0; \ + (ip6addr)->addr[3] = (ip4addr)->addr; \ (ip6addr)->addr[2] = PP_HTONL(0x0000FFFFUL); \ - (ip6addr)->addr[3] = (ip4addr)->addr; } while(0); + (ip6addr)->addr[1] = 0; \ + (ip6addr)->addr[0] = 0; } while(0); -#define unmap_ipv6_mapped_ipv4(target, source) do { \ - (target)->u_addr.ip4.addr = (source)->u_addr.ip6.addr[3]; \ - (target)->type = IPADDR_TYPE_V4; } while(0); +/** @ingroup ipaddr */ +#define unmap_ipv6_mapped_ipv4(target, source) \ + (target)->addr = (source)->addr[3]; #else /* LWIP_IPV4 && LWIP_IPV6 */