Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of OmniWheels by
ip_addr.h
00001 /** 00002 * @file 00003 * IP address API (common IPv4 and IPv6) 00004 */ 00005 00006 /* 00007 * Copyright (c) 2001-2004 Swedish Institute of Computer Science. 00008 * All rights reserved. 00009 * 00010 * Redistribution and use in source and binary forms, with or without modification, 00011 * are permitted provided that the following conditions are met: 00012 * 00013 * 1. Redistributions of source code must retain the above copyright notice, 00014 * this list of conditions and the following disclaimer. 00015 * 2. Redistributions in binary form must reproduce the above copyright notice, 00016 * this list of conditions and the following disclaimer in the documentation 00017 * and/or other materials provided with the distribution. 00018 * 3. The name of the author may not be used to endorse or promote products 00019 * derived from this software without specific prior written permission. 00020 * 00021 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 00022 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 00023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 00024 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00025 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 00026 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00027 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00028 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 00029 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 00030 * OF SUCH DAMAGE. 00031 * 00032 * This file is part of the lwIP TCP/IP stack. 00033 * 00034 * Author: Adam Dunkels <adam@sics.se> 00035 * 00036 */ 00037 #ifndef LWIP_HDR_IP_ADDR_H 00038 #define LWIP_HDR_IP_ADDR_H 00039 00040 #include "lwip/opt.h" 00041 #include "lwip/def.h" 00042 00043 #include "lwip/ip4_addr.h" 00044 #include "lwip/ip6_addr.h" 00045 00046 #ifdef __cplusplus 00047 extern "C" { 00048 #endif 00049 00050 /** @ingroup ipaddr 00051 * IP address types for use in ip_addr_t.type member. 00052 * @see tcp_new_ip_type(), udp_new_ip_type(), raw_new_ip_type(). 00053 */ 00054 enum lwip_ip_addr_type { 00055 /** IPv4 */ 00056 IPADDR_TYPE_V4 = 0U, 00057 /** IPv6 */ 00058 IPADDR_TYPE_V6 = 6U, 00059 /** IPv4+IPv6 ("dual-stack") */ 00060 IPADDR_TYPE_ANY = 46U 00061 }; 00062 00063 #if LWIP_IPV4 && LWIP_IPV6 00064 /** 00065 * @ingroup ipaddr 00066 * A union struct for both IP version's addresses. 00067 * ATTENTION: watch out for its size when adding IPv6 address scope! 00068 */ 00069 typedef struct ip_addr { 00070 union { 00071 ip6_addr_t ip6; 00072 ip4_addr_t ip4; 00073 } u_addr; 00074 /** @ref lwip_ip_addr_type */ 00075 u8_t type; 00076 } ip_addr_t; 00077 00078 extern const ip_addr_t ip_addr_any_type; 00079 00080 /** @ingroup ip4addr */ 00081 #define IPADDR4_INIT(u32val) { { { { u32val, 0ul, 0ul, 0ul } } }, IPADDR_TYPE_V4 } 00082 /** @ingroup ip4addr */ 00083 #define IPADDR4_INIT_BYTES(a,b,c,d) IPADDR4_INIT(PP_HTONL(LWIP_MAKEU32(a,b,c,d))) 00084 /** @ingroup ip6addr */ 00085 #define IPADDR6_INIT(a, b, c, d) { { { { a, b, c, d } } }, IPADDR_TYPE_V6 } 00086 /** @ingroup ip6addr */ 00087 #define IPADDR6_INIT_HOST(a, b, c, d) { { { { PP_HTONL(a), PP_HTONL(b), PP_HTONL(c), PP_HTONL(d) } } }, IPADDR_TYPE_V6 } 00088 00089 /** @ingroup ipaddr */ 00090 #define IP_IS_ANY_TYPE_VAL(ipaddr) (IP_GET_TYPE(&ipaddr) == IPADDR_TYPE_ANY) 00091 /** @ingroup ipaddr */ 00092 #define IPADDR_ANY_TYPE_INIT { { { { 0ul, 0ul, 0ul, 0ul } } }, IPADDR_TYPE_ANY } 00093 00094 /** @ingroup ip4addr */ 00095 #define IP_IS_V4_VAL(ipaddr) (IP_GET_TYPE(&ipaddr) == IPADDR_TYPE_V4) 00096 /** @ingroup ip6addr */ 00097 #define IP_IS_V6_VAL(ipaddr) (IP_GET_TYPE(&ipaddr) == IPADDR_TYPE_V6) 00098 /** @ingroup ip4addr */ 00099 #define IP_IS_V4(ipaddr) (((ipaddr) == NULL) || IP_IS_V4_VAL(*(ipaddr))) 00100 /** @ingroup ip6addr */ 00101 #define IP_IS_V6(ipaddr) (((ipaddr) != NULL) && IP_IS_V6_VAL(*(ipaddr))) 00102 00103 #define IP_SET_TYPE_VAL(ipaddr, iptype) do { (ipaddr).type = (iptype); }while(0) 00104 #define IP_SET_TYPE(ipaddr, iptype) do { if((ipaddr) != NULL) { IP_SET_TYPE_VAL(*(ipaddr), iptype); }}while(0) 00105 #define IP_GET_TYPE(ipaddr) ((ipaddr)->type) 00106 00107 #define IP_ADDR_PCB_VERSION_MATCH_EXACT(pcb, ipaddr) (IP_GET_TYPE(&pcb->local_ip) == IP_GET_TYPE(ipaddr)) 00108 #define IP_ADDR_PCB_VERSION_MATCH(pcb, ipaddr) (IP_IS_ANY_TYPE_VAL(pcb->local_ip) || IP_ADDR_PCB_VERSION_MATCH_EXACT(pcb, ipaddr)) 00109 00110 /** @ingroup ip6addr 00111 * Convert generic ip address to specific protocol version 00112 */ 00113 #define ip_2_ip6(ipaddr) (&((ipaddr)->u_addr.ip6)) 00114 /** @ingroup ip4addr 00115 * Convert generic ip address to specific protocol version 00116 */ 00117 #define ip_2_ip4(ipaddr) (&((ipaddr)->u_addr.ip4)) 00118 00119 /** @ingroup ip4addr */ 00120 #define IP_ADDR4(ipaddr,a,b,c,d) do { IP4_ADDR(ip_2_ip4(ipaddr),a,b,c,d); \ 00121 IP_SET_TYPE_VAL(*(ipaddr), IPADDR_TYPE_V4); } while(0) 00122 /** @ingroup ip6addr */ 00123 #define IP_ADDR6(ipaddr,i0,i1,i2,i3) do { IP6_ADDR(ip_2_ip6(ipaddr),i0,i1,i2,i3); \ 00124 IP_SET_TYPE_VAL(*(ipaddr), IPADDR_TYPE_V6); } while(0) 00125 /** @ingroup ip6addr */ 00126 #define IP_ADDR6_HOST(ipaddr,i0,i1,i2,i3) IP_ADDR6(ipaddr,PP_HTONL(i0),PP_HTONL(i1),PP_HTONL(i2),PP_HTONL(i3)) 00127 00128 /** @ingroup ipaddr */ 00129 #define ip_addr_copy(dest, src) do{ IP_SET_TYPE_VAL(dest, IP_GET_TYPE(&src)); if(IP_IS_V6_VAL(src)){ \ 00130 ip6_addr_copy(*ip_2_ip6(&(dest)), *ip_2_ip6(&(src))); }else{ \ 00131 ip4_addr_copy(*ip_2_ip4(&(dest)), *ip_2_ip4(&(src))); }}while(0) 00132 /** @ingroup ip6addr */ 00133 #define ip_addr_copy_from_ip6(dest, src) do{ \ 00134 ip6_addr_copy(*ip_2_ip6(&(dest)), src); IP_SET_TYPE_VAL(dest, IPADDR_TYPE_V6); }while(0) 00135 /** @ingroup ip4addr */ 00136 #define ip_addr_copy_from_ip4(dest, src) do{ \ 00137 ip4_addr_copy(*ip_2_ip4(&(dest)), src); IP_SET_TYPE_VAL(dest, IPADDR_TYPE_V4); }while(0) 00138 /** @ingroup ip4addr */ 00139 #define ip_addr_set_ip4_u32(ipaddr, val) do{if(ipaddr){ip4_addr_set_u32(ip_2_ip4(ipaddr), val); \ 00140 IP_SET_TYPE(ipaddr, IPADDR_TYPE_V4); }}while(0) 00141 /** @ingroup ip4addr */ 00142 #define ip_addr_get_ip4_u32(ipaddr) (((ipaddr) && IP_IS_V4(ipaddr)) ? \ 00143 ip4_addr_get_u32(ip_2_ip4(ipaddr)) : 0) 00144 /** @ingroup ipaddr */ 00145 #define ip_addr_set(dest, src) do{ IP_SET_TYPE(dest, IP_GET_TYPE(src)); if(IP_IS_V6(src)){ \ 00146 ip6_addr_set(ip_2_ip6(dest), ip_2_ip6(src)); }else{ \ 00147 ip4_addr_set(ip_2_ip4(dest), ip_2_ip4(src)); }}while(0) 00148 /** @ingroup ipaddr */ 00149 #define ip_addr_set_ipaddr(dest, src) ip_addr_set(dest, src) 00150 /** @ingroup ipaddr */ 00151 #define ip_addr_set_zero(ipaddr) do{ \ 00152 ip6_addr_set_zero(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, 0); }while(0) 00153 /** @ingroup ip5addr */ 00154 #define ip_addr_set_zero_ip4(ipaddr) do{ \ 00155 ip6_addr_set_zero(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V4); }while(0) 00156 /** @ingroup ip6addr */ 00157 #define ip_addr_set_zero_ip6(ipaddr) do{ \ 00158 ip6_addr_set_zero(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V6); }while(0) 00159 /** @ingroup ipaddr */ 00160 #define ip_addr_set_any(is_ipv6, ipaddr) do{if(is_ipv6){ \ 00161 ip6_addr_set_any(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V6); }else{ \ 00162 ip4_addr_set_any(ip_2_ip4(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V4); }}while(0) 00163 /** @ingroup ipaddr */ 00164 #define ip_addr_set_loopback(is_ipv6, ipaddr) do{if(is_ipv6){ \ 00165 ip6_addr_set_loopback(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V6); }else{ \ 00166 ip4_addr_set_loopback(ip_2_ip4(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V4); }}while(0) 00167 /** @ingroup ipaddr */ 00168 #define ip_addr_set_hton(dest, src) do{if(IP_IS_V6(src)){ \ 00169 ip6_addr_set_hton(ip_2_ip6(ipaddr), (src)); IP_SET_TYPE(dest, IPADDR_TYPE_V6); }else{ \ 00170 ip4_addr_set_hton(ip_2_ip4(ipaddr), (src)); IP_SET_TYPE(dest, IPADDR_TYPE_V4); }}while(0) 00171 /** @ingroup ipaddr */ 00172 #define ip_addr_get_network(target, host, netmask) do{if(IP_IS_V6(host)){ \ 00173 ip4_addr_set_zero(ip_2_ip4(target)); IP_SET_TYPE(target, IPADDR_TYPE_V6); } else { \ 00174 ip4_addr_get_network(ip_2_ip4(target), ip_2_ip4(host), ip_2_ip4(netmask)); IP_SET_TYPE(target, IPADDR_TYPE_V4); }}while(0) 00175 /** @ingroup ipaddr */ 00176 #define ip_addr_netcmp(addr1, addr2, mask) ((IP_IS_V6(addr1) && IP_IS_V6(addr2)) ? \ 00177 0 : \ 00178 ip4_addr_netcmp(ip_2_ip4(addr1), ip_2_ip4(addr2), mask)) 00179 /** @ingroup ipaddr */ 00180 #define ip_addr_cmp(addr1, addr2) ((IP_GET_TYPE(addr1) != IP_GET_TYPE(addr2)) ? 0 : (IP_IS_V6_VAL(*(addr1)) ? \ 00181 ip6_addr_cmp(ip_2_ip6(addr1), ip_2_ip6(addr2)) : \ 00182 ip4_addr_cmp(ip_2_ip4(addr1), ip_2_ip4(addr2)))) 00183 /** @ingroup ipaddr */ 00184 #define ip_addr_isany(ipaddr) ((IP_IS_V6(ipaddr)) ? \ 00185 ip6_addr_isany(ip_2_ip6(ipaddr)) : \ 00186 ip4_addr_isany(ip_2_ip4(ipaddr))) 00187 /** @ingroup ipaddr */ 00188 #define ip_addr_isany_val(ipaddr) ((IP_IS_V6_VAL(ipaddr)) ? \ 00189 ip6_addr_isany_val(*ip_2_ip6(&(ipaddr))) : \ 00190 ip4_addr_isany_val(*ip_2_ip4(&(ipaddr)))) 00191 /** @ingroup ipaddr */ 00192 #define ip_addr_isbroadcast(ipaddr, netif) ((IP_IS_V6(ipaddr)) ? \ 00193 0 : \ 00194 ip4_addr_isbroadcast(ip_2_ip4(ipaddr), netif)) 00195 /** @ingroup ipaddr */ 00196 #define ip_addr_ismulticast(ipaddr) ((IP_IS_V6(ipaddr)) ? \ 00197 ip6_addr_ismulticast(ip_2_ip6(ipaddr)) : \ 00198 ip4_addr_ismulticast(ip_2_ip4(ipaddr))) 00199 /** @ingroup ipaddr */ 00200 #define ip_addr_isloopback(ipaddr) ((IP_IS_V6(ipaddr)) ? \ 00201 ip6_addr_isloopback(ip_2_ip6(ipaddr)) : \ 00202 ip4_addr_isloopback(ip_2_ip4(ipaddr))) 00203 /** @ingroup ipaddr */ 00204 #define ip_addr_islinklocal(ipaddr) ((IP_IS_V6(ipaddr)) ? \ 00205 ip6_addr_islinklocal(ip_2_ip6(ipaddr)) : \ 00206 ip4_addr_islinklocal(ip_2_ip4(ipaddr))) 00207 #define ip_addr_debug_print(debug, ipaddr) do { if(IP_IS_V6(ipaddr)) { \ 00208 ip6_addr_debug_print(debug, ip_2_ip6(ipaddr)); } else { \ 00209 ip4_addr_debug_print(debug, ip_2_ip4(ipaddr)); }}while(0) 00210 #define ip_addr_debug_print_val(debug, ipaddr) do { if(IP_IS_V6_VAL(ipaddr)) { \ 00211 ip6_addr_debug_print_val(debug, *ip_2_ip6(&(ipaddr))); } else { \ 00212 ip4_addr_debug_print_val(debug, *ip_2_ip4(&(ipaddr))); }}while(0) 00213 /** @ingroup ipaddr */ 00214 #define ipaddr_ntoa(addr) (((addr) == NULL) ? "NULL" : \ 00215 ((IP_IS_V6(addr)) ? ip6addr_ntoa(ip_2_ip6(addr)) : ip4addr_ntoa(ip_2_ip4(addr)))) 00216 /** @ingroup ipaddr */ 00217 #define ipaddr_ntoa_r(addr, buf, buflen) (((addr) == NULL) ? "NULL" : \ 00218 ((IP_IS_V6(addr)) ? ip6addr_ntoa_r(ip_2_ip6(addr), buf, buflen) : ip4addr_ntoa_r(ip_2_ip4(addr), buf, buflen))) 00219 int ipaddr_aton(const char *cp, ip_addr_t *addr); 00220 00221 /** @ingroup ipaddr */ 00222 #define IPADDR_STRLEN_MAX IP6ADDR_STRLEN_MAX 00223 00224 /** @ingroup ipaddr */ 00225 #define ip4_2_ipv4_mapped_ipv6(ip6addr, ip4addr) do { \ 00226 (ip6addr)->addr[3] = (ip4addr)->addr; \ 00227 (ip6addr)->addr[2] = PP_HTONL(0x0000FFFFUL); \ 00228 (ip6addr)->addr[1] = 0; \ 00229 (ip6addr)->addr[0] = 0; } while(0); 00230 00231 /** @ingroup ipaddr */ 00232 #define unmap_ipv4_mapped_ipv6(ip4addr, ip6addr) \ 00233 (ip4addr)->addr = (ip6addr)->addr[3]; 00234 00235 #define IP46_ADDR_ANY(type) (((type) == IPADDR_TYPE_V6)? IP6_ADDR_ANY : IP4_ADDR_ANY) 00236 00237 #else /* LWIP_IPV4 && LWIP_IPV6 */ 00238 00239 #define IP_ADDR_PCB_VERSION_MATCH(addr, pcb) 1 00240 #define IP_ADDR_PCB_VERSION_MATCH_EXACT(pcb, ipaddr) 1 00241 00242 #if LWIP_IPV4 00243 00244 typedef ip4_addr_t ip_addr_t; 00245 #define IPADDR4_INIT(u32val) { u32val } 00246 #define IPADDR4_INIT_BYTES(a,b,c,d) IPADDR4_INIT(PP_HTONL(LWIP_MAKEU32(a,b,c,d))) 00247 #define IP_IS_V4_VAL(ipaddr) 1 00248 #define IP_IS_V6_VAL(ipaddr) 0 00249 #define IP_IS_V4(ipaddr) 1 00250 #define IP_IS_V6(ipaddr) 0 00251 #define IP_IS_ANY_TYPE_VAL(ipaddr) 0 00252 #define IP_SET_TYPE_VAL(ipaddr, iptype) 00253 #define IP_SET_TYPE(ipaddr, iptype) 00254 #define IP_GET_TYPE(ipaddr) IPADDR_TYPE_V4 00255 #define ip_2_ip4(ipaddr) (ipaddr) 00256 #define IP_ADDR4(ipaddr,a,b,c,d) IP4_ADDR(ipaddr,a,b,c,d) 00257 00258 #define ip_addr_copy(dest, src) ip4_addr_copy(dest, src) 00259 #define ip_addr_copy_from_ip4(dest, src) ip4_addr_copy(dest, src) 00260 #define ip_addr_set_ip4_u32(ipaddr, val) ip4_addr_set_u32(ip_2_ip4(ipaddr), val) 00261 #define ip_addr_get_ip4_u32(ipaddr) ip4_addr_get_u32(ip_2_ip4(ipaddr)) 00262 #define ip_addr_set(dest, src) ip4_addr_set(dest, src) 00263 #define ip_addr_set_ipaddr(dest, src) ip4_addr_set(dest, src) 00264 #define ip_addr_set_zero(ipaddr) ip4_addr_set_zero(ipaddr) 00265 #define ip_addr_set_zero_ip4(ipaddr) ip4_addr_set_zero(ipaddr) 00266 #define ip_addr_set_any(is_ipv6, ipaddr) ip4_addr_set_any(ipaddr) 00267 #define ip_addr_set_loopback(is_ipv6, ipaddr) ip4_addr_set_loopback(ipaddr) 00268 #define ip_addr_set_hton(dest, src) ip4_addr_set_hton(dest, src) 00269 #define ip_addr_get_network(target, host, mask) ip4_addr_get_network(target, host, mask) 00270 #define ip_addr_netcmp(addr1, addr2, mask) ip4_addr_netcmp(addr1, addr2, mask) 00271 #define ip_addr_cmp(addr1, addr2) ip4_addr_cmp(addr1, addr2) 00272 #define ip_addr_isany(ipaddr) ip4_addr_isany(ipaddr) 00273 #define ip_addr_isany_val(ipaddr) ip4_addr_isany_val(ipaddr) 00274 #define ip_addr_isloopback(ipaddr) ip4_addr_isloopback(ipaddr) 00275 #define ip_addr_islinklocal(ipaddr) ip4_addr_islinklocal(ipaddr) 00276 #define ip_addr_isbroadcast(addr, netif) ip4_addr_isbroadcast(addr, netif) 00277 #define ip_addr_ismulticast(ipaddr) ip4_addr_ismulticast(ipaddr) 00278 #define ip_addr_debug_print(debug, ipaddr) ip4_addr_debug_print(debug, ipaddr) 00279 #define ip_addr_debug_print_val(debug, ipaddr) ip4_addr_debug_print_val(debug, ipaddr) 00280 #define ipaddr_ntoa(ipaddr) ip4addr_ntoa(ipaddr) 00281 #define ipaddr_ntoa_r(ipaddr, buf, buflen) ip4addr_ntoa_r(ipaddr, buf, buflen) 00282 #define ipaddr_aton(cp, addr) ip4addr_aton(cp, addr) 00283 00284 #define IPADDR_STRLEN_MAX IP4ADDR_STRLEN_MAX 00285 00286 #define IP46_ADDR_ANY(type) (IP4_ADDR_ANY) 00287 00288 #else /* LWIP_IPV4 */ 00289 00290 typedef ip6_addr_t ip_addr_t; 00291 #define IPADDR6_INIT(a, b, c, d) { { a, b, c, d } } 00292 #define IPADDR6_INIT_HOST(a, b, c, d) { { PP_HTONL(a), PP_HTONL(b), PP_HTONL(c), PP_HTONL(d) } } 00293 #define IP_IS_V4_VAL(ipaddr) 0 00294 #define IP_IS_V6_VAL(ipaddr) 1 00295 #define IP_IS_V4(ipaddr) 0 00296 #define IP_IS_V6(ipaddr) 1 00297 #define IP_IS_ANY_TYPE_VAL(ipaddr) 0 00298 #define IP_SET_TYPE_VAL(ipaddr, iptype) 00299 #define IP_SET_TYPE(ipaddr, iptype) 00300 #define IP_GET_TYPE(ipaddr) IPADDR_TYPE_V6 00301 #define ip_2_ip6(ipaddr) (ipaddr) 00302 #define IP_ADDR6(ipaddr,i0,i1,i2,i3) IP6_ADDR(ipaddr,i0,i1,i2,i3) 00303 #define IP_ADDR6_HOST(ipaddr,i0,i1,i2,i3) IP_ADDR6(ipaddr,PP_HTONL(i0),PP_HTONL(i1),PP_HTONL(i2),PP_HTONL(i3)) 00304 00305 #define ip_addr_copy(dest, src) ip6_addr_copy(dest, src) 00306 #define ip_addr_copy_from_ip6(dest, src) ip6_addr_copy(dest, src) 00307 #define ip_addr_set(dest, src) ip6_addr_set(dest, src) 00308 #define ip_addr_set_ipaddr(dest, src) ip6_addr_set(dest, src) 00309 #define ip_addr_set_zero(ipaddr) ip6_addr_set_zero(ipaddr) 00310 #define ip_addr_set_zero_ip6(ipaddr) ip6_addr_set_zero(ipaddr) 00311 #define ip_addr_set_any(is_ipv6, ipaddr) ip6_addr_set_any(ipaddr) 00312 #define ip_addr_set_loopback(is_ipv6, ipaddr) ip6_addr_set_loopback(ipaddr) 00313 #define ip_addr_set_hton(dest, src) ip6_addr_set_hton(dest, src) 00314 #define ip_addr_get_network(target, host, mask) ip6_addr_set_zero(target) 00315 #define ip_addr_netcmp(addr1, addr2, mask) 0 00316 #define ip_addr_cmp(addr1, addr2) ip6_addr_cmp(addr1, addr2) 00317 #define ip_addr_isany(ipaddr) ip6_addr_isany(ipaddr) 00318 #define ip_addr_isany_val(ipaddr) ip6_addr_isany_val(ipaddr) 00319 #define ip_addr_isloopback(ipaddr) ip6_addr_isloopback(ipaddr) 00320 #define ip_addr_islinklocal(ipaddr) ip6_addr_islinklocal(ipaddr) 00321 #define ip_addr_isbroadcast(addr, netif) 0 00322 #define ip_addr_ismulticast(ipaddr) ip6_addr_ismulticast(ipaddr) 00323 #define ip_addr_debug_print(debug, ipaddr) ip6_addr_debug_print(debug, ipaddr) 00324 #define ip_addr_debug_print_val(debug, ipaddr) ip6_addr_debug_print_val(debug, ipaddr) 00325 #define ipaddr_ntoa(ipaddr) ip6addr_ntoa(ipaddr) 00326 #define ipaddr_ntoa_r(ipaddr, buf, buflen) ip6addr_ntoa_r(ipaddr, buf, buflen) 00327 #define ipaddr_aton(cp, addr) ip6addr_aton(cp, addr) 00328 00329 #define IPADDR_STRLEN_MAX IP6ADDR_STRLEN_MAX 00330 00331 #define IP46_ADDR_ANY(type) (IP6_ADDR_ANY) 00332 00333 #endif /* LWIP_IPV4 */ 00334 #endif /* LWIP_IPV4 && LWIP_IPV6 */ 00335 00336 #if LWIP_IPV4 00337 00338 extern const ip_addr_t ip_addr_any; 00339 extern const ip_addr_t ip_addr_broadcast; 00340 00341 /** 00342 * @ingroup ip4addr 00343 * Can be used as a fixed/const ip_addr_t 00344 * for the IP wildcard. 00345 * Defined to @ref IP4_ADDR_ANY when IPv4 is enabled. 00346 * Defined to @ref IP6_ADDR_ANY in IPv6 only systems. 00347 * Use this if you can handle IPv4 _AND_ IPv6 addresses. 00348 * Use @ref IP4_ADDR_ANY or @ref IP6_ADDR_ANY when the IP 00349 * type matters. 00350 */ 00351 #define IP_ADDR_ANY IP4_ADDR_ANY 00352 /** 00353 * @ingroup ip4addr 00354 * Can be used as a fixed/const ip_addr_t 00355 * for the IPv4 wildcard and the broadcast address 00356 */ 00357 #define IP4_ADDR_ANY (&ip_addr_any) 00358 /** 00359 * @ingroup ip4addr 00360 * Can be used as a fixed/const ip4_addr_t 00361 * for the wildcard and the broadcast address 00362 */ 00363 #define IP4_ADDR_ANY4 (ip_2_ip4(&ip_addr_any)) 00364 00365 /** @ingroup ip4addr */ 00366 #define IP_ADDR_BROADCAST (&ip_addr_broadcast) 00367 /** @ingroup ip4addr */ 00368 #define IP4_ADDR_BROADCAST (ip_2_ip4(&ip_addr_broadcast)) 00369 00370 #endif /* LWIP_IPV4*/ 00371 00372 #if LWIP_IPV6 00373 00374 extern const ip_addr_t ip6_addr_any; 00375 00376 /** 00377 * @ingroup ip6addr 00378 * IP6_ADDR_ANY can be used as a fixed ip_addr_t 00379 * for the IPv6 wildcard address 00380 */ 00381 #define IP6_ADDR_ANY (&ip6_addr_any) 00382 /** 00383 * @ingroup ip6addr 00384 * IP6_ADDR_ANY6 can be used as a fixed ip6_addr_t 00385 * for the IPv6 wildcard address 00386 */ 00387 #define IP6_ADDR_ANY6 (ip_2_ip6(&ip6_addr_any)) 00388 00389 #if !LWIP_IPV4 00390 /** IPv6-only configurations */ 00391 #define IP_ADDR_ANY IP6_ADDR_ANY 00392 #endif /* !LWIP_IPV4 */ 00393 00394 #endif 00395 00396 #if LWIP_IPV4 && LWIP_IPV6 00397 /** @ingroup ipaddr */ 00398 #define IP_ANY_TYPE (&ip_addr_any_type) 00399 #else 00400 #define IP_ANY_TYPE IP_ADDR_ANY 00401 #endif 00402 00403 #ifdef __cplusplus 00404 } 00405 #endif 00406 00407 #endif /* LWIP_HDR_IP_ADDR_H */
Generated on Fri Jul 22 2022 04:53:50 by
 1.7.2
 1.7.2 
    