00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef __LWIP_IP_ADDR_H__
00039 #define __LWIP_IP_ADDR_H__
00040
00041 #include "lwip/arch.h"
00042
00043 #define IP_ADDR_ANY (&ip_addr_any)
00044 #define IP_ADDR_BROADCAST (&ip_addr_broadcast)
00045
00046 #define INADDR_NONE ((u32_t) 0xffffffff)
00047 #define INADDR_LOOPBACK ((u32_t) 0x7f000001)
00048
00049
00050
00051
00052
00053
00054 #define IN_CLASSA(a) ((((u32_t)(a)) & 0x80000000) == 0)
00055 #define IN_CLASSA_NET 0xff000000
00056 #define IN_CLASSA_NSHIFT 24
00057 #define IN_CLASSA_HOST (0xffffffff & ~IN_CLASSA_NET)
00058 #define IN_CLASSA_MAX 128
00059
00060 #define IN_CLASSB(a) ((((u32_t)(a)) & 0xc0000000) == 0x80000000)
00061 #define IN_CLASSB_NET 0xffff0000
00062 #define IN_CLASSB_NSHIFT 16
00063 #define IN_CLASSB_HOST (0xffffffff & ~IN_CLASSB_NET)
00064 #define IN_CLASSB_MAX 65536
00065
00066 #define IN_CLASSC(a) ((((u32_t)(a)) & 0xe0000000) == 0xc0000000)
00067 #define IN_CLASSC_NET 0xffffff00
00068 #define IN_CLASSC_NSHIFT 8
00069 #define IN_CLASSC_HOST (0xffffffff & ~IN_CLASSC_NET)
00070
00071 #define IN_CLASSD(a) (((u32_t)(a) & 0xf0000000) == 0xe0000000)
00072 #define IN_CLASSD_NET 0xf0000000
00073 #define IN_CLASSD_NSHIFT 28
00074 #define IN_CLASSD_HOST 0x0fffffff
00075 #define IN_MULTICAST(a) IN_CLASSD(a)
00076
00077 #define IN_EXPERIMENTAL(a) (((u32_t)(a) & 0xf0000000) == 0xf0000000)
00078 #define IN_BADCLASS(a) (((u32_t)(a) & 0xf0000000) == 0xf0000000)
00079
00080 #define IN_LOOPBACKNET 127
00081
00082 #ifdef PACK_STRUCT_USE_INCLUDES
00083 # include "arch/bpstruct.h"
00084 #endif
00085 PACK_STRUCT_BEGIN
00086 struct ip_addr {
00087 PACK_STRUCT_FIELD(u32_t addr);
00088 } PACK_STRUCT_STRUCT;
00089 PACK_STRUCT_END
00090 #ifdef PACK_STRUCT_USE_INCLUDES
00091 # include "arch/epstruct.h"
00092 #endif
00093
00094
00095 struct in_addr {
00096 u32_t s_addr;
00097 };
00098
00099 extern struct ip_addr ip_addr_any;
00100 extern struct ip_addr ip_addr_broadcast;
00101
00102 #define IP4_ADDR(ipaddr, a,b,c,d) (ipaddr)->addr = htonl(((u32_t)(a & 0xff) << 24) | ((u32_t)(b & 0xff) << 16) | \
00103 ((u32_t)(c & 0xff) << 8) | (u32_t)(d & 0xff))
00104
00105 #define ip_addr_set(dest, src) (dest)->addr = ((struct ip_addr *)src)->addr
00106 #define ip_addr_maskcmp(addr1, addr2, mask) (((addr1)->addr & \
00107 (mask)->addr) == \
00108 ((addr2)->addr & \
00109 (mask)->addr))
00110 #define ip_addr_cmp(addr1, addr2) ((addr1)->addr == (addr2)->addr)
00111
00112 #define ip_addr_isany(addr1) ((addr1) == NULL || (addr1)->addr == 0)
00113
00114 #define ip_addr_isbroadcast(addr1, mask) (((((addr1)->addr) & ~((mask)->addr)) == \
00115 (0xffffffff & ~((mask)->addr))) || \
00116 ((addr1)->addr == 0xffffffff) || \
00117 ((addr1)->addr == 0x00000000))
00118
00119
00120 #define ip_addr_ismulticast(addr1) (((addr1)->addr & ntohl(0xf0000000)) == ntohl(0xe0000000))
00121
00122
00123 #define ip_addr_debug_print(ipaddr) DEBUGF(LWIP_DEBUG, ("%d.%d.%d.%d", \
00124 (u8_t)(ntohl((ipaddr)->addr) >> 24) & 0xff, \
00125 (u8_t)(ntohl((ipaddr)->addr) >> 16) & 0xff, \
00126 (u8_t)(ntohl((ipaddr)->addr) >> 8) & 0xff, \
00127 (u8_t)ntohl((ipaddr)->addr) & 0xff))
00128
00129
00130 #define ip4_addr1(ipaddr) ((u8_t)(ntohl((ipaddr)->addr) >> 24) & 0xff)
00131 #define ip4_addr2(ipaddr) ((u8_t)(ntohl((ipaddr)->addr) >> 16) & 0xff)
00132 #define ip4_addr3(ipaddr) ((u8_t)(ntohl((ipaddr)->addr) >> 8) & 0xff)
00133 #define ip4_addr4(ipaddr) ((u8_t)(ntohl((ipaddr)->addr)) & 0xff)
00134
00135 void string2ip_addr(struct ip_addr *ip, char *name, int size);
00136
00137 #endif
00138
00139
00140
00141
00142
00143