mirror of https://github.com/grpc/grpc.git
[core] Add support for vsock transport (#32847)
This is another attempt to add support for vsock in grpc since previous PRs(#24551, #21745) all closed without merging. The VSOCK address family facilitates communication between virtual machines and the host they are running on. This patch will introduce new scheme: [vsock:cid:port] to support VSOCK address family. Fixes #32738. --------- Signed-off-by: Yadong Qi <yadong.qi@intel.com> Co-authored-by: AJ Heller <hork@google.com> Co-authored-by: YadongQi <YadongQi@users.noreply.github.com>pull/33277/head
parent
272a89ad2b
commit
9d765860ef
36 changed files with 465 additions and 13 deletions
@ -1 +1 @@ |
||||
Support for resolving ipv4:, ipv6:, unix: schemes |
||||
Support for resolving ipv4:, ipv6:, unix:, vsock: schemes |
||||
|
@ -0,0 +1,59 @@ |
||||
//
|
||||
//
|
||||
// Copyright 2023 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include "src/core/lib/iomgr/vsock.h" |
||||
|
||||
#ifdef GRPC_HAVE_VSOCK |
||||
|
||||
#include <string.h> |
||||
#include <sys/stat.h> |
||||
#include <sys/types.h> |
||||
|
||||
#include "absl/strings/str_cat.h" |
||||
|
||||
#include <grpc/support/alloc.h> |
||||
#include <grpc/support/log.h> |
||||
|
||||
#include "src/core/lib/address_utils/parse_address.h" |
||||
#include "src/core/lib/gpr/useful.h" |
||||
#include "src/core/lib/gprpp/crash.h" |
||||
#include "src/core/lib/iomgr/sockaddr.h" |
||||
#include "src/core/lib/transport/error_utils.h" |
||||
|
||||
absl::StatusOr<std::vector<grpc_resolved_address>> grpc_resolve_vsock_address( |
||||
absl::string_view name) { |
||||
grpc_resolved_address addr; |
||||
grpc_error_handle error = grpc_core::VSockaddrPopulate(name, &addr); |
||||
GRPC_RETURN_IF_ERROR(error); |
||||
return std::vector<grpc_resolved_address>({addr}); |
||||
} |
||||
|
||||
int grpc_is_vsock(const grpc_resolved_address* resolved_addr) { |
||||
const grpc_sockaddr* addr = |
||||
reinterpret_cast<const grpc_sockaddr*>(resolved_addr->addr); |
||||
return addr->sa_family == AF_VSOCK; |
||||
} |
||||
#else |
||||
absl::StatusOr<std::vector<grpc_resolved_address>> grpc_resolve_vsock_address( |
||||
absl::string_view /*name*/) { |
||||
return absl::InvalidArgumentError("VSOCK is not supported."); |
||||
} |
||||
|
||||
int grpc_is_vsock(const grpc_resolved_address* /*resolved_addr*/) { return 0; } |
||||
#endif |
@ -0,0 +1,38 @@ |
||||
//
|
||||
//
|
||||
// Copyright 2023 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//
|
||||
|
||||
#ifndef GRPC_SRC_CORE_LIB_IOMGR_VSOCK_H |
||||
#define GRPC_SRC_CORE_LIB_IOMGR_VSOCK_H |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include <string> |
||||
|
||||
#include "absl/strings/string_view.h" |
||||
|
||||
#include <grpc/support/string_util.h> |
||||
|
||||
#include "src/core/lib/iomgr/port.h" |
||||
#include "src/core/lib/iomgr/resolve_address.h" |
||||
|
||||
absl::StatusOr<std::vector<grpc_resolved_address>> grpc_resolve_vsock_address( |
||||
absl::string_view name); |
||||
|
||||
int grpc_is_vsock(const grpc_resolved_address* resolved_addr); |
||||
|
||||
#endif /* GRPC_SRC_CORE_LIB_IOMGR_VSOCK_H */ |
Loading…
Reference in new issue