diff options
-rw-r--r-- | libs/binder/RpcServer.cpp | 4 | ||||
-rw-r--r-- | libs/binder/RpcSession.cpp | 4 | ||||
-rw-r--r-- | libs/binder/RpcSocketAddress.h | 8 | ||||
-rw-r--r-- | libs/binder/include/binder/RpcServer.h | 2 | ||||
-rw-r--r-- | libs/binder/include/binder/RpcSession.h | 2 | ||||
-rw-r--r-- | libs/binder/tests/binderRpcTest.cpp | 18 | ||||
-rw-r--r-- | libs/binder/vm_sockets.h | 54 |
7 files changed, 59 insertions, 33 deletions
diff --git a/libs/binder/RpcServer.cpp b/libs/binder/RpcServer.cpp index aaebb23f6f..cc77c27d50 100644 --- a/libs/binder/RpcServer.cpp +++ b/libs/binder/RpcServer.cpp @@ -49,8 +49,6 @@ bool RpcServer::setupUnixDomainServer(const char* path) { return setupSocketServer(UnixSocketAddress(path)); } -#ifdef __BIONIC__ - bool RpcServer::setupVsockServer(unsigned int port) { // realizing value w/ this type at compile time to avoid ubsan abort constexpr unsigned int kAnyCid = VMADDR_CID_ANY; @@ -58,8 +56,6 @@ bool RpcServer::setupVsockServer(unsigned int port) { return setupSocketServer(VsockSocketAddress(kAnyCid, port)); } -#endif // __BIONIC__ - bool RpcServer::setupInetServer(unsigned int port, unsigned int* assignedPort) { const char* kAddr = "127.0.0.1"; diff --git a/libs/binder/RpcSession.cpp b/libs/binder/RpcSession.cpp index f4a3cffa24..f406c2d7d0 100644 --- a/libs/binder/RpcSession.cpp +++ b/libs/binder/RpcSession.cpp @@ -61,14 +61,10 @@ bool RpcSession::setupUnixDomainClient(const char* path) { return setupSocketClient(UnixSocketAddress(path)); } -#ifdef __BIONIC__ - bool RpcSession::setupVsockClient(unsigned int cid, unsigned int port) { return setupSocketClient(VsockSocketAddress(cid, port)); } -#endif // __BIONIC__ - bool RpcSession::setupInetClient(const char* addr, unsigned int port) { auto aiStart = InetSocketAddress::getAddrInfo(addr, port); if (aiStart == nullptr) return false; diff --git a/libs/binder/RpcSocketAddress.h b/libs/binder/RpcSocketAddress.h index c6a06cf817..c7ba5d96a7 100644 --- a/libs/binder/RpcSocketAddress.h +++ b/libs/binder/RpcSocketAddress.h @@ -24,9 +24,7 @@ #include <sys/types.h> #include <sys/un.h> -#ifdef __BIONIC__ -#include <linux/vm_sockets.h> -#endif +#include "vm_sockets.h" namespace android { @@ -59,8 +57,6 @@ private: sockaddr_un mAddr; }; -#ifdef __BIONIC__ - class VsockSocketAddress : public RpcSocketAddress { public: VsockSocketAddress(unsigned int cid, unsigned int port) @@ -80,8 +76,6 @@ private: sockaddr_vm mAddr; }; -#endif // __BIONIC__ - class InetSocketAddress : public RpcSocketAddress { public: InetSocketAddress(const sockaddr* sockAddr, size_t size, const char* addr, unsigned int port) diff --git a/libs/binder/include/binder/RpcServer.h b/libs/binder/include/binder/RpcServer.h index 8c9ba00f06..3534d5196e 100644 --- a/libs/binder/include/binder/RpcServer.h +++ b/libs/binder/include/binder/RpcServer.h @@ -57,12 +57,10 @@ public: */ [[nodiscard]] bool setupUnixDomainServer(const char* path); -#ifdef __BIONIC__ /** * Creates an RPC server at the current port. */ [[nodiscard]] bool setupVsockServer(unsigned int port); -#endif // __BIONIC__ /** * Creates an RPC server at the current port using IPv4. diff --git a/libs/binder/include/binder/RpcSession.h b/libs/binder/include/binder/RpcSession.h index d49d48d40e..2b545c4580 100644 --- a/libs/binder/include/binder/RpcSession.h +++ b/libs/binder/include/binder/RpcSession.h @@ -52,12 +52,10 @@ public: */ [[nodiscard]] bool setupUnixDomainClient(const char* path); -#ifdef __BIONIC__ /** * Connects to an RPC server at the CVD & port. */ [[nodiscard]] bool setupVsockClient(unsigned int cvd, unsigned int port); -#endif // __BIONIC__ /** * Connects to an RPC server at the given address and port. diff --git a/libs/binder/tests/binderRpcTest.cpp b/libs/binder/tests/binderRpcTest.cpp index 8d10727c5b..db7f67da5a 100644 --- a/libs/binder/tests/binderRpcTest.cpp +++ b/libs/binder/tests/binderRpcTest.cpp @@ -34,14 +34,11 @@ #include <iostream> #include <thread> -#ifdef __BIONIC__ -#include <linux/vm_sockets.h> -#endif //__BIONIC__ - #include <sys/prctl.h> #include <unistd.h> -#include "../RpcState.h" // for debugging +#include "../RpcState.h" // for debugging +#include "../vm_sockets.h" // for VMADDR_* namespace android { @@ -291,19 +288,15 @@ struct BinderRpcTestProcessSession { enum class SocketType { UNIX, -#ifdef __BIONIC__ VSOCK, -#endif // __BIONIC__ INET, }; static inline std::string PrintSocketType(const testing::TestParamInfo<SocketType>& info) { switch (info.param) { case SocketType::UNIX: return "unix_domain_socket"; -#ifdef __BIONIC__ case SocketType::VSOCK: return "vm_socket"; -#endif // __BIONIC__ case SocketType::INET: return "inet_socket"; default: @@ -338,11 +331,9 @@ public: case SocketType::UNIX: CHECK(server->setupUnixDomainServer(addr.c_str())) << addr; break; -#ifdef __BIONIC__ case SocketType::VSOCK: CHECK(server->setupVsockServer(vsockPort)); break; -#endif // __BIONIC__ case SocketType::INET: { unsigned int outPort = 0; CHECK(server->setupInetServer(0, &outPort)); @@ -376,11 +367,9 @@ public: case SocketType::UNIX: if (session->setupUnixDomainClient(addr.c_str())) goto success; break; -#ifdef __BIONIC__ case SocketType::VSOCK: if (session->setupVsockClient(VMADDR_CID_LOCAL, vsockPort)) goto success; break; -#endif // __BIONIC__ case SocketType::INET: if (session->setupInetClient("127.0.0.1", inetPort)) goto success; break; @@ -934,9 +923,10 @@ TEST_P(BinderRpc, Fds) { INSTANTIATE_TEST_CASE_P(PerSocket, BinderRpc, ::testing::ValuesIn({ SocketType::UNIX, +// TODO(b/185269356): working on host #ifdef __BIONIC__ SocketType::VSOCK, -#endif // __BIONIC__ +#endif SocketType::INET, }), PrintSocketType); diff --git a/libs/binder/vm_sockets.h b/libs/binder/vm_sockets.h new file mode 100644 index 0000000000..7d9732b0fa --- /dev/null +++ b/libs/binder/vm_sockets.h @@ -0,0 +1,54 @@ +/**************************************************************************** + **************************************************************************** + *** + *** This header was automatically generated from a Linux kernel header + *** of the same name, to make information necessary for userspace to + *** call into the kernel available to libc. It contains only constants, + *** structures, and macros generated from the original header, and thus, + *** contains no copyrightable information. + *** + *** Copied and modified from bionic/libc/kernel/uapi/linux/vm_sockets.h + *** + **************************************************************************** + ****************************************************************************/ +#pragma once + +#ifdef __BIONIC__ +#include <linux/vm_sockets.h> +#else + +#ifndef _UAPI_VM_SOCKETS_H +#define _UAPI_VM_SOCKETS_H +#define SO_VM_SOCKETS_BUFFER_SIZE 0 +#define SO_VM_SOCKETS_BUFFER_MIN_SIZE 1 +#define SO_VM_SOCKETS_BUFFER_MAX_SIZE 2 +#define SO_VM_SOCKETS_PEER_HOST_VM_ID 3 +#define SO_VM_SOCKETS_TRUSTED 5 +#define SO_VM_SOCKETS_CONNECT_TIMEOUT 6 +#define SO_VM_SOCKETS_NONBLOCK_TXRX 7 +#define VMADDR_CID_ANY (-1U) +#define VMADDR_PORT_ANY (-1U) +#define VMADDR_CID_HYPERVISOR 0 +#define VMADDR_CID_LOCAL 1 +#define VMADDR_CID_HOST 2 +#define VM_SOCKETS_INVALID_VERSION (-1U) +#define VM_SOCKETS_VERSION_EPOCH(_v) (((_v)&0xFF000000) >> 24) +#define VM_SOCKETS_VERSION_MAJOR(_v) (((_v)&0x00FF0000) >> 16) +#define VM_SOCKETS_VERSION_MINOR(_v) (((_v)&0x0000FFFF)) +struct sockaddr_vm { + sa_family_t svm_family; + // NOLINTNEXTLINE(google-runtime-int) + unsigned short svm_reserved1; + unsigned int svm_port; + unsigned int svm_cid; + // NOLINTNEXTLINE(google-runtime-int) + unsigned char svm_zero[sizeof(struct sockaddr) - sizeof(sa_family_t) - sizeof(unsigned short) - + sizeof(unsigned int) - sizeof(unsigned int)]; +}; +#define IOCTL_VM_SOCKETS_GET_LOCAL_CID _IO(7, 0xb9) +#ifndef AF_VSOCK +#define AF_VSOCK 40 +#endif +#endif + +#endif |