ip_addr.h 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
  3. * All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without modification,
  6. * are permitted provided that the following conditions are met:
  7. *
  8. * 1. Redistributions of source code must retain the above copyright notice,
  9. * this list of conditions and the following disclaimer.
  10. * 2. Redistributions in binary form must reproduce the above copyright notice,
  11. * this list of conditions and the following disclaimer in the documentation
  12. * and/or other materials provided with the distribution.
  13. * 3. The name of the author may not be used to endorse or promote products
  14. * derived from this software without specific prior written permission.
  15. *
  16. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
  17. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  18. * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
  19. * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  20. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
  21. * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  22. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  23. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  24. * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
  25. * OF SUCH DAMAGE.
  26. *
  27. * This file is part of the lwIP TCP/IP stack.
  28. *
  29. * Author: Adam Dunkels <adam@sics.se>
  30. *
  31. */
  32. #ifndef __LWIP_IP_ADDR_H__
  33. #define __LWIP_IP_ADDR_H__
  34. #include "lwip/opt.h"
  35. #ifdef __cplusplus
  36. extern "C" {
  37. #endif
  38. #define IP_ADDR_ANY 0
  39. #ifdef PACK_STRUCT_USE_INCLUDES
  40. # include "arch/bpstruct.h"
  41. #endif
  42. PACK_STRUCT_BEGIN
  43. struct ip_addr {
  44. PACK_STRUCT_FIELD(u32_t addr[4]);
  45. } PACK_STRUCT_STRUCT;
  46. PACK_STRUCT_END
  47. #ifdef PACK_STRUCT_USE_INCLUDES
  48. # include "arch/epstruct.h"
  49. #endif
  50. /*
  51. * struct ipaddr2 is used in the definition of the ARP packet format in
  52. * order to support compilers that don't have structure packing.
  53. */
  54. #ifdef PACK_STRUCT_USE_INCLUDES
  55. # include "arch/bpstruct.h"
  56. #endif
  57. PACK_STRUCT_BEGIN
  58. struct ip_addr2 {
  59. PACK_STRUCT_FIELD(u16_t addrw[2]);
  60. } PACK_STRUCT_STRUCT;
  61. PACK_STRUCT_END
  62. #ifdef PACK_STRUCT_USE_INCLUDES
  63. # include "arch/epstruct.h"
  64. #endif
  65. #define IP6_ADDR(ipaddr, a,b,c,d,e,f,g,h) do { (ipaddr)->addr[0] = htonl((u32_t)((a & 0xffff) << 16) | (b & 0xffff)); \
  66. (ipaddr)->addr[1] = htonl(((c & 0xffff) << 16) | (d & 0xffff)); \
  67. (ipaddr)->addr[2] = htonl(((e & 0xffff) << 16) | (f & 0xffff)); \
  68. (ipaddr)->addr[3] = htonl(((g & 0xffff) << 16) | (h & 0xffff)); } while(0)
  69. u8_t ip_addr_netcmp(struct ip_addr *addr1, struct ip_addr *addr2,
  70. struct ip_addr *mask);
  71. u8_t ip_addr_cmp(struct ip_addr *addr1, struct ip_addr *addr2);
  72. void ip_addr_set(struct ip_addr *dest, struct ip_addr *src);
  73. u8_t ip_addr_isany(struct ip_addr *addr);
  74. #define ip_addr_debug_print(debug, ipaddr) \
  75. LWIP_DEBUGF(debug, ("%"X32_F":%"X32_F":%"X32_F":%"X32_F":%"X32_F":%"X32_F":%"X32_F":%"X32_F"\n", \
  76. (ntohl(ipaddr->addr[0]) >> 16) & 0xffff, \
  77. ntohl(ipaddr->addr[0]) & 0xffff, \
  78. (ntohl(ipaddr->addr[1]) >> 16) & 0xffff, \
  79. ntohl(ipaddr->addr[1]) & 0xffff, \
  80. (ntohl(ipaddr->addr[2]) >> 16) & 0xffff, \
  81. ntohl(ipaddr->addr[2]) & 0xffff, \
  82. (ntohl(ipaddr->addr[3]) >> 16) & 0xffff, \
  83. ntohl(ipaddr->addr[3]) & 0xffff));
  84. #ifdef __cplusplus
  85. }
  86. #endif
  87. #endif /* __LWIP_IP_ADDR_H__ */