From 7754f965495cccba64d1ea6974cd82f2813bb7f6 Mon Sep 17 00:00:00 2001 From: sg Date: Mon, 24 Aug 2015 20:30:48 +0200 Subject: [PATCH] Change IP6_ADDR/IP_ADDR6 to initialize a full IPv6 address (e.g. use with PP_HTONL) - renamed old IP6_ADDR() to IP6_ADDR_PART() --- src/include/lwip/ip6_addr.h | 12 ++++++++++-- src/include/lwip/ip_addr.h | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/include/lwip/ip6_addr.h b/src/include/lwip/ip6_addr.h index 835df3d1..c55f2a81 100644 --- a/src/include/lwip/ip6_addr.h +++ b/src/include/lwip/ip6_addr.h @@ -78,7 +78,7 @@ typedef struct ip6_addr_packed ip6_addr_p_t; #if BYTE_ORDER == BIG_ENDIAN /** Set an IPv6 partial address given by byte-parts. */ -#define IP6_ADDR(ip6addr, index, a,b,c,d) \ +#define IP6_ADDR_PART(ip6addr, index, a,b,c,d) \ (ip6addr)->addr[index] = ((u32_t)((a) & 0xff) << 24) | \ ((u32_t)((b) & 0xff) << 16) | \ ((u32_t)((c) & 0xff) << 8) | \ @@ -86,13 +86,21 @@ typedef struct ip6_addr_packed ip6_addr_p_t; #else /** Set an IPv6 partial address given by byte-parts. Little-endian version, stored in network order (no htonl). */ -#define IP6_ADDR(ip6addr, index, a,b,c,d) \ +#define IP6_ADDR_PART(ip6addr, index, a,b,c,d) \ (ip6addr)->addr[index] = ((u32_t)((d) & 0xff) << 24) | \ ((u32_t)((c) & 0xff) << 16) | \ ((u32_t)((b) & 0xff) << 8) | \ (u32_t)((a) & 0xff) #endif +/** Set a full IPv6 address by passing the 4 u32_t indices in network byte order + (use PP_HTONL() for constants) */ +#define IP6_ADDR(ip6addr, idx0, idx1, idx2, idx3) do { \ + (ip6addr)->addr[0] = idx0; \ + (ip6addr)->addr[1] = idx1; \ + (ip6addr)->addr[2] = idx2; \ + (ip6addr)->addr[3] = idx3; } while(0) + /** Access address in 16-bit block */ #define IP6_ADDR_BLOCK1(ip6addr) ((u16_t)(htonl((ip6addr)->addr[0]) >> 16) & 0xffff) #define IP6_ADDR_BLOCK2(ip6addr) ((u16_t)(htonl((ip6addr)->addr[0])) & 0xffff) diff --git a/src/include/lwip/ip_addr.h b/src/include/lwip/ip_addr.h index 95f646c1..a341f1bb 100644 --- a/src/include/lwip/ip_addr.h +++ b/src/include/lwip/ip_addr.h @@ -85,7 +85,7 @@ static ip4_addr_t* ip_2_ip4(const ip_addr_t *ipaddr) #define IP_ADDR4(ipaddr,a,b,c,d) do { IP4_ADDR(ip_2_ip4(ipaddr),a,b,c,d); \ IP_SET_TYPE_VAL(*(ipaddr), IPADDR_TYPE_V4); } while(0) -#define IP_ADDR6(ipaddr,idx,a,b,c,d) do { IP6_ADDR(ip_2_ip6(ipaddr),idx,a,b,c,d); \ +#define IP_ADDR6(ipaddr,i0,i1,i2,i3) do { IP6_ADDR(ip_2_ip6(ipaddr),i0,i1,i2,i3); \ IP_SET_TYPE_VAL(*(ipaddr), IPADDR_TYPE_V6); } while(0) #define ip_addr_copy(dest, src) do{if(IP_IS_V6_VAL(src)){ \