47 const ip_addr_t ip_addr_any = IPADDR4_INIT(IPADDR_ANY);
48 const ip_addr_t ip_addr_broadcast = IPADDR4_INIT(IPADDR_BROADCAST);
61 ip4_addr_set_u32(&ipaddr, addr);
64 if ((~addr == IPADDR_ANY) ||
65 (addr == IPADDR_ANY)) {
73 }
else if (addr == ip4_addr_get_u32(netif_ip4_addr(
netif))) {
76 }
else if (ip4_addr_netcmp(&ipaddr, netif_ip4_addr(
netif), netif_ip4_netmask(
netif))
78 && ((addr & ~ip4_addr_get_u32(netif_ip4_netmask(
netif))) ==
79 (IPADDR_BROADCAST & ~ip4_addr_get_u32(netif_ip4_netmask(
netif))))) {
93 ip4_addr_netmask_valid(
u32_t netmask)
99 for (mask = 1UL << 31 ; mask != 0; mask >>= 1) {
100 if ((nm_hostorder & mask) == 0) {
105 for (; mask != 0; mask >>= 1) {
106 if ((nm_hostorder & mask) != 0) {
117 #define in_range(c, lo, up) ((u8_t)c >= lo && (u8_t)c <= up)
118 #define isprint(c) in_range(c, 0x20, 0x7f)
119 #define isdigit(c) in_range(c, '0', '9')
120 #define isxdigit(c) (isdigit(c) || in_range(c, 'a', 'f') || in_range(c, 'A', 'F'))
121 #define islower(c) in_range(c, 'a', 'z')
122 #define isspace(c) (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v')
133 ipaddr_addr(
const char *cp)
137 if (ip4addr_aton(cp, &val)) {
138 return ip4_addr_get_u32(&val);
140 return (IPADDR_NONE);
155 ip4addr_aton(
const char *cp, ip4_addr_t *addr)
177 if (c ==
'x' || c ==
'X') {
186 val = (val * base) + (
u32_t)(c -
'0');
188 }
else if (base == 16 && isxdigit(c)) {
189 val = (val << 4) | (
u32_t)(c + 10 - (islower(c) ?
'a' :
'A'));
202 if (pp >= parts + 3) {
214 if (c !=
'\0' && !isspace(c)) {
221 switch (pp - parts + 1) {
230 if (val > 0xffffffUL) {
233 if (parts[0] > 0xff) {
236 val |= parts[0] << 24;
243 if ((parts[0] > 0xff) || (parts[1] > 0xff)) {
246 val |= (parts[0] << 24) | (parts[1] << 16);
253 if ((parts[0] > 0xff) || (parts[1] > 0xff) || (parts[2] > 0xff)) {
256 val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
277 ip4addr_ntoa(
const ip4_addr_t *addr)
279 static char str[IP4ADDR_STRLEN_MAX];
280 return ip4addr_ntoa_r(addr, str, IP4ADDR_STRLEN_MAX);
293 ip4addr_ntoa_r(
const ip4_addr_t *addr,
char *
buf,
int buflen)
304 s_addr = ip4_addr_get_u32(addr);
307 ap = (
u8_t *)&s_addr;
308 for (n = 0; n < 4; n++) {
311 rem = *ap % (
u8_t)10;
313 inv[i++] = (char)(
'0' + rem);
316 if (len++ >= buflen) {
321 if (len++ >= buflen) {