ipc: infer socket family from address
Up until now the socket family used by the IPC layer was
hardcoded depending on the plaform (AF_UNIX on Linux/Mac/Android,
TCP on Windows).
Upcoming changes for VMs require more flexibility.
This change make it so that the IPC layer (and hence the env vars
PERFETTO_*_SOCK_NAME) figures out the family from the address.
This has also the benefit that we can now forward the consumer socket
over TCP on a Linux system.
Test: PERFETTO_CONSUMER_SOCK_NAME=127.0.0.1:1234 traced
PERFETTO_CONSUMER_SOCK_NAME=127.0.0.1:1234 perfetto -c :test -o /dev/null
Bug: 284258446
Change-Id: I4fc9150cc0fe4437dbf2d563be7b969964c3e819
diff --git a/src/base/unix_socket_unittest.cc b/src/base/unix_socket_unittest.cc
index 361c0a1..3210c49 100644
--- a/src/base/unix_socket_unittest.cc
+++ b/src/base/unix_socket_unittest.cc
@@ -1016,6 +1016,17 @@
}
#endif // OS_LINUX || OS_ANDROID
+TEST_F(UnixSocketTest, GetSockFamily) {
+ ASSERT_EQ(GetSockFamily(""), SockFamily::kUnspec);
+ ASSERT_EQ(GetSockFamily("/path/to/sock"), SockFamily::kUnix);
+ ASSERT_EQ(GetSockFamily("local_dir_sock"), SockFamily::kUnix);
+ ASSERT_EQ(GetSockFamily("@abstract"), SockFamily::kUnix);
+ ASSERT_EQ(GetSockFamily("0.0.0.0:80"), SockFamily::kInet);
+ ASSERT_EQ(GetSockFamily("127.0.0.1:80"), SockFamily::kInet);
+ ASSERT_EQ(GetSockFamily("[effe::acca]:1234"), SockFamily::kInet6);
+ ASSERT_EQ(GetSockFamily("[::1]:123456"), SockFamily::kInet6);
+}
+
} // namespace
} // namespace base
} // namespace perfetto