#ifndef COSMOPOLITAN_LIBC_SOCK_IPCLASSIFY_H_ #define COSMOPOLITAN_LIBC_SOCK_IPCLASSIFY_H_ #ifndef __STRICT_ANSI__ #include "libc/sock/sock.h" #include "libc/sysv/consts/af.h" #include "libc/sysv/consts/inaddr.h" #include "libc/sysv/errfuns.h" #if !(__ASSEMBLER__ + __LINKER__ + 0) COSMOPOLITAN_C_START_ /** * Returns true if address is part of standardized test-only subnet. */ forceinline bool istestip(int sin_family, void *sin_addr) { if (sin_family == AF_INET) { uint32_t ip4net24 = ntohl(*(const uint32_t *)sin_addr) & 0xffffff00u; if (ip4net24 == INADDR_TESTNET1 || ip4net24 == INADDR_TESTNET2 || ip4net24 == INADDR_TESTNET3) { return true; } } else { eafnosupport(); } return false; } /** * Returns true if address is part of a local-only subnet. */ forceinline bool islocalip(int sin_family, void *sin_addr) { if (sin_family == AF_INET) { uint32_t ip4net8 = ntohl(*(const uint32_t *)sin_addr) & 0xff000000u; if (ip4net8 == 0x7f000000u) { return true; } } else { eafnosupport(); } return false; } /** * Returns true if address is part of a well-known private subnet. */ forceinline bool isprivateip(int sin_family, void *sin_addr) { if (sin_family == AF_INET) { uint32_t ip4 = ntohl(*(const uint32_t *)sin_addr); if ((0x0a000000u <= ip4 && ip4 <= 0x0affffffu) /* 10.0.0.0/8 */ || (0xac100000u <= ip4 && ip4 <= 0xac1fffffu) /* 172.16.0.0/12 */ || (0xc0a80000u <= ip4 && ip4 <= 0xc0a8ffffu) /* 192.168.0.0/16 */) { return true; } } else { eafnosupport(); } return false; } /** * Returns true if address is most likely part of the public Internet. */ forceinline bool ispublicip(int sin_family, void *sin_addr) { return !islocalip(sin_family, sin_addr) && !isprivateip(sin_family, sin_addr) && !istestip(sin_family, sin_addr); } COSMOPOLITAN_C_END_ #endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ #endif /* !ANSI */ #endif /* COSMOPOLITAN_LIBC_SOCK_IPCLASSIFY_H_ */