diff options
-rw-r--r-- | Userland/Libraries/LibC/netinet/in.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/Userland/Libraries/LibC/netinet/in.h b/Userland/Libraries/LibC/netinet/in.h index 9f340719ed..5b8e1274e5 100644 --- a/Userland/Libraries/LibC/netinet/in.h +++ b/Userland/Libraries/LibC/netinet/in.h @@ -41,10 +41,19 @@ static inline uint32_t ntohl(uint32_t value) return htonl(value); } +// NOTE: The IPv6 Addressing Scheme that we detect are documented in RFC# 2373. +// See: https://datatracker.ietf.org/doc/html/rfc2373 + +// RFC# 2373 - 2.5.3 The Loopback Address #define IN6_IS_ADDR_LOOPBACK(addr) \ ((addr)->s6_addr[0] == 0 && (addr)->s6_addr[1] == 0 && (addr)->s6_addr[2] == 0 && (addr)->s6_addr[3] == 0 && (addr)->s6_addr[4] == 0 && (addr)->s6_addr[5] == 0 && (addr)->s6_addr[6] == 0 && (addr)->s6_addr[7] == 0 && (addr)->s6_addr[8] == 0 && (addr)->s6_addr[9] == 0 && (addr)->s6_addr[10] == 0 && (addr)->s6_addr[11] == 0 && (addr)->s6_addr[12] == 0 && (addr)->s6_addr[13] == 0 && (addr)->s6_addr[14] == 0 && (addr)->s6_addr[15] == 1) +// RFC# 2373 - 2.5.4 IPv6 Addresses with Embedded IPv4 Addresses #define IN6_IS_ADDR_V4MAPPED(addr) \ ((((addr)->s6_addr[0]) == 0) && (((addr)->s6_addr[1]) == 0) && (((addr)->s6_addr[2]) == 0) && (((addr)->s6_addr[3]) == 0) && (((addr)->s6_addr[4]) == 0) && (((addr)->s6_addr[5]) == 0) && (((addr)->s6_addr[6]) == 0) && (((addr)->s6_addr[7]) == 0) && (((addr)->s6_addr[8]) == 0) && (((addr)->s6_addr[9]) == 0) && (((addr)->s6_addr[10]) == 0xFF) && (((addr)->s6_addr[11]) == 0xFF)) +// RFC# 2373 - 2.5.8 Local-Use IPv6 Unicast Addresses +#define IN6_IS_ADDR_LINKLOCAL(addr) \ + (((addr)->s6_addr[0] == 0xfe) && (((addr)->s6_addr[1] & 0xc0) == 0x80)) + __END_DECLS |