Warning, cross-references for /kernel/include/lwip/ip_addr.h need to be fixed.
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032 #ifndef __LWIP_IP_ADDR_H__
0033 #define __LWIP_IP_ADDR_H__
0034
0035 #include "lwip/opt.h"
0036
0037 #include "lwip/inet.h"
0038
0039 #ifdef __cplusplus
0040 extern "C" {
0041 #endif
0042
0043 #ifdef PACK_STRUCT_USE_INCLUDES
0044 # include "arch/bpstruct.h"
0045 #endif
0046 PACK_STRUCT_BEGIN
0047 struct ip_addr {
0048 PACK_STRUCT_FIELD(u32_t addr);
0049 } PACK_STRUCT_STRUCT;
0050 PACK_STRUCT_END
0051 #ifdef PACK_STRUCT_USE_INCLUDES
0052 # include "arch/epstruct.h"
0053 #endif
0054
0055
0056
0057
0058
0059 #ifdef PACK_STRUCT_USE_INCLUDES
0060 # include "arch/bpstruct.h"
0061 #endif
0062 PACK_STRUCT_BEGIN
0063 struct ip_addr2 {
0064 PACK_STRUCT_FIELD(u16_t addrw[2]);
0065 } PACK_STRUCT_STRUCT;
0066 PACK_STRUCT_END
0067 #ifdef PACK_STRUCT_USE_INCLUDES
0068 # include "arch/epstruct.h"
0069 #endif
0070
0071 struct netif;
0072
0073 extern const struct ip_addr ip_addr_any;
0074 extern const struct ip_addr ip_addr_broadcast;
0075
0076
0077
0078
0079 #define IP_ADDR_ANY ((struct ip_addr *)&ip_addr_any)
0080 #define IP_ADDR_BROADCAST ((struct ip_addr *)&ip_addr_broadcast)
0081
0082
0083
0084
0085
0086
0087 #define IN_CLASSA(a) ((((u32_t)(a)) & 0x80000000UL) == 0)
0088 #define IN_CLASSA_NET 0xff000000
0089 #define IN_CLASSA_NSHIFT 24
0090 #define IN_CLASSA_HOST (0xffffffff & ~IN_CLASSA_NET)
0091 #define IN_CLASSA_MAX 128
0092
0093 #define IN_CLASSB(a) ((((u32_t)(a)) & 0xc0000000UL) == 0x80000000UL)
0094 #define IN_CLASSB_NET 0xffff0000
0095 #define IN_CLASSB_NSHIFT 16
0096 #define IN_CLASSB_HOST (0xffffffff & ~IN_CLASSB_NET)
0097 #define IN_CLASSB_MAX 65536
0098
0099 #define IN_CLASSC(a) ((((u32_t)(a)) & 0xe0000000UL) == 0xc0000000UL)
0100 #define IN_CLASSC_NET 0xffffff00
0101 #define IN_CLASSC_NSHIFT 8
0102 #define IN_CLASSC_HOST (0xffffffff & ~IN_CLASSC_NET)
0103
0104 #define IN_CLASSD(a) (((u32_t)(a) & 0xf0000000UL) == 0xe0000000UL)
0105 #define IN_CLASSD_NET 0xf0000000
0106 #define IN_CLASSD_NSHIFT 28
0107 #define IN_CLASSD_HOST 0x0fffffff
0108 #define IN_MULTICAST(a) IN_CLASSD(a)
0109
0110 #define IN_EXPERIMENTAL(a) (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL)
0111 #define IN_BADCLASS(a) (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL)
0112
0113 #define IN_LOOPBACKNET 127
0114
0115 #define IP4_ADDR(ipaddr, a,b,c,d) \
0116 (ipaddr)->addr = htonl(((u32_t)((a) & 0xff) << 24) | \
0117 ((u32_t)((b) & 0xff) << 16) | \
0118 ((u32_t)((c) & 0xff) << 8) | \
0119 (u32_t)((d) & 0xff))
0120
0121 #define ip_addr_set(dest, src) (dest)->addr = \
0122 ((src) == NULL? 0:\
0123 (src)->addr)
0124
0125
0126
0127
0128
0129
0130
0131
0132 #define ip_addr_netcmp(addr1, addr2, mask) (((addr1)->addr & \
0133 (mask)->addr) == \
0134 ((addr2)->addr & \
0135 (mask)->addr))
0136 #define ip_addr_cmp(addr1, addr2) ((addr1)->addr == (addr2)->addr)
0137
0138 #define ip_addr_isany(addr1) ((addr1) == NULL || (addr1)->addr == 0)
0139
0140 u8_t ip_addr_isbroadcast(struct ip_addr *, struct netif *);
0141
0142 #define ip_addr_ismulticast(addr1) (((addr1)->addr & ntohl(0xf0000000UL)) == ntohl(0xe0000000UL))
0143
0144 #define ip_addr_islinklocal(addr1) (((addr1)->addr & ntohl(0xffff0000UL)) == ntohl(0xa9fe0000UL))
0145
0146 #define ip_addr_debug_print(debug, ipaddr) \
0147 LWIP_DEBUGF(debug, ("%"U16_F".%"U16_F".%"U16_F".%"U16_F, \
0148 ipaddr != NULL ? \
0149 (u16_t)(ntohl((ipaddr)->addr) >> 24) & 0xff : 0, \
0150 ipaddr != NULL ? \
0151 (u16_t)(ntohl((ipaddr)->addr) >> 16) & 0xff : 0, \
0152 ipaddr != NULL ? \
0153 (u16_t)(ntohl((ipaddr)->addr) >> 8) & 0xff : 0, \
0154 ipaddr != NULL ? \
0155 (u16_t)ntohl((ipaddr)->addr) & 0xff : 0))
0156
0157
0158
0159 #define ip4_addr1(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 24) & 0xff)
0160 #define ip4_addr2(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 16) & 0xff)
0161 #define ip4_addr3(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 8) & 0xff)
0162 #define ip4_addr4(ipaddr) ((u16_t)(ntohl((ipaddr)->addr)) & 0xff)
0163
0164
0165
0166
0167 #define ip_ntoa(addr) ((addr != NULL) ? inet_ntoa(*((struct in_addr*)(addr))) : "NULL")
0168
0169 #ifdef __cplusplus
0170 }
0171 #endif
0172
0173 #endif