[libc-commits] [libc] [libc] Add the sockaddr_in6 type and IN6ADDR_*_INIT macros (PR #201357)
Jeff Bailey via libc-commits
libc-commits at lists.llvm.org
Wed Jun 3 06:54:44 PDT 2026
================
@@ -52,3 +54,51 @@ TEST(LlvmLibcNetinetInTest, In6AddrLayout) {
16),
0);
}
+
+TEST(LlvmLibcNetinetInTest, IN6AddrInitMacros) {
+ struct in6_addr any = IN6ADDR_ANY_INIT;
+ const uint8_t ANY_CONTENT[16] = {0};
+ EXPECT_EQ(LIBC_NAMESPACE::memcmp(&any, ANY_CONTENT, 16), 0);
+ EXPECT_TRUE(IN6_IS_ADDR_UNSPECIFIED(&any));
+
+ struct in6_addr loopback = IN6ADDR_LOOPBACK_INIT;
+ const uint8_t LOOPBACK_CONTENT[16] = {0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1};
+ EXPECT_EQ(LIBC_NAMESPACE::memcmp(&loopback, LOOPBACK_CONTENT, 16), 0);
+ EXPECT_TRUE(IN6_IS_ADDR_LOOPBACK(&loopback));
+}
+
+TEST(LlvmLibcNetinetInTest, SockaddrIn6Layout) {
----------------
kaladron wrote:
I think this test isn't telling us anything useful since we're just packing things into the struct and reading them out again. htons should have its own tests.
If we need to test that this is laid out exactly in memory, we could do something like this:
// 3. Verify exact ABI memory layout (replaces the byte-level memcmp offsets)
EXPECT_EQ(offsetof(struct sockaddr_in6, sin6_family), static_cast<size_t>(0));
EXPECT_EQ(offsetof(struct sockaddr_in6, sin6_port), static_cast<size_t>(2));
EXPECT_EQ(offsetof(struct sockaddr_in6, sin6_flowinfo), static_cast<size_t>(4));
EXPECT_EQ(offsetof(struct sockaddr_in6, sin6_addr), static_cast<size_t>(8));
EXPECT_EQ(offsetof(struct sockaddr_in6, sin6_scope_id), static_cast<size_t>(24));
// 4. Verify exact field sizes (replaces the byte-level memcmp lengths)
EXPECT_EQ(sizeof(sockaddr_in6::sin6_family), static_cast<size_t>(2));
EXPECT_EQ(sizeof(sockaddr_in6::sin6_port), static_cast<size_t>(2));
EXPECT_EQ(sizeof(sockaddr_in6::sin6_flowinfo), static_cast<size_t>(4));
EXPECT_EQ(sizeof(sockaddr_in6::sin6_addr), static_cast<size_t>(16));
EXPECT_EQ(sizeof(sockaddr_in6::sin6_scope_id), static_cast<size_t>(4));
But I don't think we care since the kernel is just expecting a struct. Am I missing something?
https://github.com/llvm/llvm-project/pull/201357
More information about the libc-commits
mailing list