From 125b03cd352bcdd9fdae3da0710773f3fa74beec Mon Sep 17 00:00:00 2001 From: Google APIs Date: Thu, 24 Jun 2021 09:55:41 -0700 Subject: [PATCH] feat: Network Management public protos Committer: @alexander-fenster PiperOrigin-RevId: 381277241 --- google/cloud/networkmanagement/v1/BUILD.bazel | 341 +++++++ .../v1/connectivity_test.proto | 225 +++++ ...networkmanagement_grpc_service_config.json | 12 + .../v1/networkmanagement_v1.yaml | 108 +++ .../networkmanagement/v1/reachability.proto | 275 ++++++ google/cloud/networkmanagement/v1/trace.proto | 891 ++++++++++++++++++ .../networkmanagement/v1beta1/BUILD.bazel | 341 +++++++ .../v1beta1/connectivity_test.proto | 313 ++++++ ...networkmanagement_grpc_service_config.json | 12 + .../v1beta1/networkmanagement_v1beta1.yaml | 108 +++ .../v1beta1/reachability.proto | 270 ++++++ .../networkmanagement/v1beta1/trace.proto | 891 ++++++++++++++++++ 12 files changed, 3787 insertions(+) create mode 100644 google/cloud/networkmanagement/v1/BUILD.bazel create mode 100644 google/cloud/networkmanagement/v1/connectivity_test.proto create mode 100644 google/cloud/networkmanagement/v1/networkmanagement_grpc_service_config.json create mode 100644 google/cloud/networkmanagement/v1/networkmanagement_v1.yaml create mode 100644 google/cloud/networkmanagement/v1/reachability.proto create mode 100644 google/cloud/networkmanagement/v1/trace.proto create mode 100644 google/cloud/networkmanagement/v1beta1/BUILD.bazel create mode 100644 google/cloud/networkmanagement/v1beta1/connectivity_test.proto create mode 100644 google/cloud/networkmanagement/v1beta1/networkmanagement_grpc_service_config.json create mode 100644 google/cloud/networkmanagement/v1beta1/networkmanagement_v1beta1.yaml create mode 100644 google/cloud/networkmanagement/v1beta1/reachability.proto create mode 100644 google/cloud/networkmanagement/v1beta1/trace.proto diff --git a/google/cloud/networkmanagement/v1/BUILD.bazel b/google/cloud/networkmanagement/v1/BUILD.bazel new file mode 100644 index 0000000000..1b59e60d9d --- /dev/null +++ b/google/cloud/networkmanagement/v1/BUILD.bazel @@ -0,0 +1,341 @@ +# This file was automatically generated by BuildFileGenerator +# https://github.com/googleapis/rules_gapic/tree/master/bazel + +# Most of the manual changes to this file will be overwritten. +# It's **only** allowed to change the following rule attribute values: +# - names of *_gapic_assembly_* rules +# - certain parameters of *_gapic_library rules, including but not limited to: +# * extra_protoc_parameters +# * extra_protoc_file_parameters +# The complete list of preserved parameters can be found in the source code. + +# This is an API workspace, having public visibility by default makes perfect sense. +package(default_visibility = ["//visibility:public"]) + +############################################################################## +# Common +############################################################################## +load("@rules_proto//proto:defs.bzl", "proto_library") +load("@com_google_googleapis_imports//:imports.bzl", "proto_library_with_info") + +proto_library( + name = "networkmanagement_proto", + srcs = [ + "connectivity_test.proto", + "reachability.proto", + "trace.proto", + ], + deps = [ + "//google/api:annotations_proto", + "//google/api:client_proto", + "//google/api:field_behavior_proto", + "//google/api:resource_proto", + "//google/longrunning:operations_proto", + "//google/rpc:status_proto", + "@com_google_protobuf//:field_mask_proto", + "@com_google_protobuf//:timestamp_proto", + ], +) + +proto_library_with_info( + name = "networkmanagement_proto_with_info", + deps = [ + ":networkmanagement_proto", + "//google/cloud:common_resources_proto", + ], +) + +############################################################################## +# Java +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "java_gapic_assembly_gradle_pkg", + "java_gapic_library", + "java_gapic_test", + "java_grpc_library", + "java_proto_library", +) + +java_proto_library( + name = "networkmanagement_java_proto", + deps = [":networkmanagement_proto"], +) + +java_grpc_library( + name = "networkmanagement_java_grpc", + srcs = [":networkmanagement_proto"], + deps = [":networkmanagement_java_proto"], +) + +java_gapic_library( + name = "networkmanagement_java_gapic", + srcs = [":networkmanagement_proto_with_info"], + grpc_service_config = "networkmanagement_grpc_service_config.json", + test_deps = [ + ":networkmanagement_java_grpc", + ], + deps = [ + ":networkmanagement_java_proto", + ], +) + +java_gapic_test( + name = "networkmanagement_java_gapic_test_suite", + test_classes = [ + "com.google.cloud.networkmanagement.v1.ReachabilityServiceClientTest", + ], + runtime_deps = [":networkmanagement_java_gapic_test"], +) + +# Open Source Packages +java_gapic_assembly_gradle_pkg( + name = "google-cloud-networkmanagement-v1-java", + deps = [ + ":networkmanagement_java_gapic", + ":networkmanagement_java_grpc", + ":networkmanagement_java_proto", + ":networkmanagement_proto", + ], +) + +############################################################################## +# Go +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "go_gapic_assembly_pkg", + "go_gapic_library", + "go_proto_library", + "go_test", +) + +go_proto_library( + name = "networkmanagement_go_proto", + compilers = ["@io_bazel_rules_go//proto:go_grpc"], + importpath = "google.golang.org/genproto/googleapis/cloud/networkmanagement/v1", + protos = [":networkmanagement_proto"], + deps = [ + "//google/api:annotations_go_proto", + "//google/longrunning:longrunning_go_proto", + "//google/rpc:status_go_proto", + ], +) + +go_gapic_library( + name = "networkmanagement_go_gapic", + srcs = [":networkmanagement_proto_with_info"], + grpc_service_config = "networkmanagement_grpc_service_config.json", + importpath = "cloud.google.com/go/networkmanagement/apiv1;networkmanagement", + metadata = True, + service_yaml = "networkmanagement_v1.yaml", + deps = [ + ":networkmanagement_go_proto", + "//google/longrunning:longrunning_go_proto", + "@com_google_cloud_go//longrunning:go_default_library", + "@com_google_cloud_go//longrunning/autogen:go_default_library", + ], +) + +go_test( + name = "networkmanagement_go_gapic_test", + srcs = [":networkmanagement_go_gapic_srcjar_test"], + embed = [":networkmanagement_go_gapic"], + importpath = "cloud.google.com/go/networkmanagement/apiv1", +) + +# Open Source Packages +go_gapic_assembly_pkg( + name = "gapi-cloud-networkmanagement-v1-go", + deps = [ + ":networkmanagement_go_gapic", + ":networkmanagement_go_gapic_srcjar-metadata.srcjar", + ":networkmanagement_go_gapic_srcjar-test.srcjar", + ":networkmanagement_go_proto", + ], +) + +############################################################################## +# Python +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "py_gapic_assembly_pkg", + "py_gapic_library", +) + +py_gapic_library( + name = "networkmanagement_py_gapic", + srcs = [":networkmanagement_proto"], + grpc_service_config = "networkmanagement_grpc_service_config.json", +) + +# Open Source Packages +py_gapic_assembly_pkg( + name = "networkmanagement-v1-py", + deps = [ + ":networkmanagement_py_gapic", + ], +) + +############################################################################## +# PHP +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "php_gapic_assembly_pkg", + "php_gapic_library", + "php_grpc_library", + "php_proto_library", +) + +php_proto_library( + name = "networkmanagement_php_proto", + deps = [":networkmanagement_proto"], +) + +php_grpc_library( + name = "networkmanagement_php_grpc", + srcs = [":networkmanagement_proto"], + deps = [":networkmanagement_php_proto"], +) + +php_gapic_library( + name = "networkmanagement_php_gapic", + srcs = [":networkmanagement_proto_with_info"], + grpc_service_config = "networkmanagement_grpc_service_config.json", + service_yaml = "networkmanagement_v1.yaml", + deps = [ + ":networkmanagement_php_grpc", + ":networkmanagement_php_proto", + ], +) + +# Open Source Packages +php_gapic_assembly_pkg( + name = "google-cloud-networkmanagement-v1-php", + deps = [ + ":networkmanagement_php_gapic", + ":networkmanagement_php_grpc", + ":networkmanagement_php_proto", + ], +) + +############################################################################## +# Node.js +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "nodejs_gapic_assembly_pkg", + "nodejs_gapic_library", +) + +nodejs_gapic_library( + name = "networkmanagement_nodejs_gapic", + package_name = "@google-cloud/networkmanagement", + src = ":networkmanagement_proto_with_info", + extra_protoc_parameters = ["metadata"], + grpc_service_config = "networkmanagement_grpc_service_config.json", + package = "google.cloud.networkmanagement.v1", + service_yaml = "networkmanagement_v1.yaml", + deps = [], +) + +nodejs_gapic_assembly_pkg( + name = "networkmanagement-v1-nodejs", + deps = [ + ":networkmanagement_nodejs_gapic", + ":networkmanagement_proto", + ], +) + +############################################################################## +# Ruby +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "ruby_cloud_gapic_library", + "ruby_gapic_assembly_pkg", + "ruby_grpc_library", + "ruby_proto_library", +) + +ruby_proto_library( + name = "networkmanagement_ruby_proto", + deps = [":networkmanagement_proto"], +) + +ruby_grpc_library( + name = "networkmanagement_ruby_grpc", + srcs = [":networkmanagement_proto"], + deps = [":networkmanagement_ruby_proto"], +) + +ruby_cloud_gapic_library( + name = "networkmanagement_ruby_gapic", + srcs = [":networkmanagement_proto_with_info"], + extra_protoc_parameters = ["ruby-cloud-gem-name=google-cloud-networkmanagement-v1"], + grpc_service_config = "networkmanagement_grpc_service_config.json", + deps = [ + ":networkmanagement_ruby_grpc", + ":networkmanagement_ruby_proto", + ], +) + +# Open Source Packages +ruby_gapic_assembly_pkg( + name = "google-cloud-networkmanagement-v1-ruby", + deps = [ + ":networkmanagement_ruby_gapic", + ":networkmanagement_ruby_grpc", + ":networkmanagement_ruby_proto", + ], +) + +############################################################################## +# C# +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "csharp_gapic_assembly_pkg", + "csharp_gapic_library", + "csharp_grpc_library", + "csharp_proto_library", +) + +csharp_proto_library( + name = "networkmanagement_csharp_proto", + deps = [":networkmanagement_proto"], +) + +csharp_grpc_library( + name = "networkmanagement_csharp_grpc", + srcs = [":networkmanagement_proto"], + deps = [":networkmanagement_csharp_proto"], +) + +csharp_gapic_library( + name = "networkmanagement_csharp_gapic", + srcs = [":networkmanagement_proto_with_info"], + common_resources_config = "@gax_dotnet//:Google.Api.Gax/ResourceNames/CommonResourcesConfig.json", + grpc_service_config = "networkmanagement_grpc_service_config.json", + deps = [ + ":networkmanagement_csharp_grpc", + ":networkmanagement_csharp_proto", + ], +) + +# Open Source Packages +csharp_gapic_assembly_pkg( + name = "google-cloud-networkmanagement-v1-csharp", + deps = [ + ":networkmanagement_csharp_gapic", + ":networkmanagement_csharp_grpc", + ":networkmanagement_csharp_proto", + ], +) + +############################################################################## +# C++ +############################################################################## +# Put your C++ rules here diff --git a/google/cloud/networkmanagement/v1/connectivity_test.proto b/google/cloud/networkmanagement/v1/connectivity_test.proto new file mode 100644 index 0000000000..fed96ce14f --- /dev/null +++ b/google/cloud/networkmanagement/v1/connectivity_test.proto @@ -0,0 +1,225 @@ +// Copyright 2021 Google LLC +// +// 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. + +syntax = "proto3"; + +package google.cloud.networkmanagement.v1; + +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/cloud/networkmanagement/v1/trace.proto"; +import "google/protobuf/timestamp.proto"; +import "google/rpc/status.proto"; +import "google/api/annotations.proto"; + +option csharp_namespace = "Google.Cloud.NetworkManagement.V1"; +option go_package = "google.golang.org/genproto/googleapis/cloud/networkmanagement/v1;networkmanagement"; +option java_multiple_files = true; +option java_outer_classname = "TestOuterClass"; +option java_package = "com.google.cloud.networkmanagement.v1"; +option php_namespace = "Google\\Cloud\\NetworkManagement\\V1"; +option ruby_package = "Google::Cloud::NetworkManagement::V1"; + +// A Connectivity Test for a network reachability analysis. +message ConnectivityTest { + option (google.api.resource) = { + type: "networkmanagement.googleapis.com/ConnectivityTest" + pattern: "projects/{project}/locations/global/connectivityTests/{test}" + }; + + // Required. Unique name of the resource using the form: + // `projects/{project_id}/locations/global/connectivityTests/{test_id}` + string name = 1 [(google.api.field_behavior) = REQUIRED]; + + // The user-supplied description of the Connectivity Test. + // Maximum of 512 characters. + string description = 2; + + // Required. Source specification of the Connectivity Test. + // + // You can use a combination of source IP address, virtual machine + // (VM) instance, or Compute Engine network to uniquely identify + // the source location. + // + // Examples: + // If the source IP address is an internal IP address within a Google Cloud + // Virtual Private Cloud (VPC) network, then you must also specify the VPC + // network. Otherwise, specify the VM instance, which already contains its + // internal IP address and VPC network information. + // + // If the source of the test is within an on-premises network, then you must + // provide the destination VPC network. + // + // If the source endpoint is a Compute Engine VM instance with multiple + // network interfaces, the instance itself is not sufficient to identify the + // endpoint. So, you must also specify the source IP address or VPC network. + // + // A reachability analysis proceeds even if the source location is + // ambiguous. However, the test result may include endpoints that you don't + // intend to test. + Endpoint source = 3 [(google.api.field_behavior) = REQUIRED]; + + // Required. Destination specification of the Connectivity Test. + // + // You can use a combination of destination IP address, Compute Engine + // VM instance, or VPC network to uniquely identify the destination + // location. + // + // Even if the destination IP address is not unique, the source IP + // location is unique. Usually, the analysis can infer the destination + // endpoint from route information. + // + // If the destination you specify is a VM instance and the instance has + // multiple network interfaces, then you must also specify either + // a destination IP address or VPC network to identify the destination + // interface. + // + // A reachability analysis proceeds even if the destination location is + // ambiguous. However, the result can include endpoints that you don't + // intend to test. + Endpoint destination = 4 [(google.api.field_behavior) = REQUIRED]; + + // IP Protocol of the test. When not provided, "TCP" is assumed. + string protocol = 5; + + // Other projects that may be relevant for reachability analysis. + // This is applicable to scenarios where a test can cross project boundaries. + repeated string related_projects = 6; + + // Output only. The display name of a Connectivity Test. + string display_name = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Resource labels to represent user-provided metadata. + map labels = 8; + + // Output only. The time the test was created. + google.protobuf.Timestamp create_time = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The time the test's configuration was updated. + google.protobuf.Timestamp update_time = 11 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The reachability details of this test from the latest run. + // The details are updated when creating a new test, updating an + // existing test, or triggering a one-time rerun of an existing test. + ReachabilityDetails reachability_details = 12 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Source or destination of the Connectivity Test. +message Endpoint { + // The type definition of an endpoint's network. Use one of the + // following choices: + enum NetworkType { + // Default type if unspecified. + NETWORK_TYPE_UNSPECIFIED = 0; + + // A network hosted within Google Cloud Platform. + // To receive more detailed output, specify the URI for the source or + // destination network. + GCP_NETWORK = 1; + + // A network hosted outside of Google Cloud Platform. + // This can be an on-premises network, or a network hosted by another cloud + // provider. + NON_GCP_NETWORK = 2; + } + + // The IP address of the endpoint, which can be an external or internal IP. + // An IPv6 address is only allowed when the test's destination is a + // [global load balancer VIP](/load-balancing/docs/load-balancing-overview). + string ip_address = 1; + + // The IP protocol port of the endpoint. + // Only applicable when protocol is TCP or UDP. + int32 port = 2; + + // A Compute Engine instance URI. + string instance = 3; + + // A cluster URI for [Google Kubernetes Engine + // master](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-architecture). + string gke_master_cluster = 7; + + // A [Cloud SQL](https://cloud.google.com/sql) instance URI. + string cloud_sql_instance = 8; + + // A Compute Engine network URI. + string network = 4; + + // Type of the network where the endpoint is located. + // Applicable only to source endpoint, as destination network type can be + // inferred from the source. + NetworkType network_type = 5; + + // Project ID where the endpoint is located. + // The Project ID can be derived from the URI if you provide a VM instance or + // network URI. + // The following are two cases where you must provide the project ID: + // 1. Only the IP address is specified, and the IP address is within a GCP + // project. + // 2. When you are using Shared VPC and the IP address that you provide is + // from the service project. In this case, the network that the IP address + // resides in is defined in the host project. + string project_id = 6; +} + +// Results of the configuration analysis from the last run of the test. +message ReachabilityDetails { + // The overall result of the test's configuration analysis. + enum Result { + // No result was specified. + RESULT_UNSPECIFIED = 0; + + // Possible scenarios are: + // + // * The configuration analysis determined that a packet originating from + // the source is expected to reach the destination. + // * The analysis didn't complete because the user lacks permission for + // some of the resources in the trace. However, at the time the user's + // permission became insufficient, the trace had been successful so far. + REACHABLE = 1; + + // A packet originating from the source is expected to be dropped before + // reaching the destination. + UNREACHABLE = 2; + + // The source and destination endpoints do not uniquely identify + // the test location in the network, and the reachability result contains + // multiple traces. For some traces, a packet could be delivered, and for + // others, it would not be. + AMBIGUOUS = 4; + + // The configuration analysis did not complete. Possible reasons are: + // + // * A permissions error occurred--for example, the user might not have + // read permission for all of the resources named in the test. + // * An internal error occurred. + // * The analyzer received an invalid or unsupported argument or was unable + // to identify a known endpoint. + UNDETERMINED = 5; + } + + // The overall result of the test's configuration analysis. + Result result = 1; + + // The time of the configuration analysis. + google.protobuf.Timestamp verify_time = 2; + + // The details of a failure or a cancellation of reachability analysis. + google.rpc.Status error = 3; + + // Result may contain a list of traces if a test has multiple possible + // paths in the network, such as when destination endpoint is a load balancer + // with multiple backends. + repeated Trace traces = 5; +} diff --git a/google/cloud/networkmanagement/v1/networkmanagement_grpc_service_config.json b/google/cloud/networkmanagement/v1/networkmanagement_grpc_service_config.json new file mode 100644 index 0000000000..2840f21a2c --- /dev/null +++ b/google/cloud/networkmanagement/v1/networkmanagement_grpc_service_config.json @@ -0,0 +1,12 @@ +{ + "methodConfig": [ + { + "name": [ + { + "service": "google.cloud.networkmanagement.v1.ReachabilityService" + } + ], + "timeout": "60s" + } + ] +} diff --git a/google/cloud/networkmanagement/v1/networkmanagement_v1.yaml b/google/cloud/networkmanagement/v1/networkmanagement_v1.yaml new file mode 100644 index 0000000000..b72b648544 --- /dev/null +++ b/google/cloud/networkmanagement/v1/networkmanagement_v1.yaml @@ -0,0 +1,108 @@ +type: google.api.Service +config_version: 3 +name: networkmanagement.googleapis.com +title: Network Management API + +apis: +- name: google.cloud.networkmanagement.v1.ReachabilityService + +types: +- name: google.cloud.networkmanagement.v1.OperationMetadata + +documentation: + summary: |- + The Network Management API provides a collection of network performance + monitoring and diagnostic capabilities. + rules: + - selector: google.cloud.location.Locations.GetLocation + description: Gets information about a location. + + - selector: google.cloud.location.Locations.ListLocations + description: Lists information about the supported locations for this service. + + - selector: google.iam.v1.IAMPolicy.GetIamPolicy + description: |- + Gets the access control policy for a resource. Returns an empty policy + if the resource exists and does not have a policy set. + + - selector: google.iam.v1.IAMPolicy.SetIamPolicy + description: |- + Sets the access control policy on the specified resource. Replaces + any existing policy. + + Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` + errors. + + - selector: google.iam.v1.IAMPolicy.TestIamPermissions + description: |- + Returns permissions that a caller has on the specified resource. If the + resource does not exist, this will return an empty set of + permissions, not a `NOT_FOUND` error. + + Note: This operation is designed to be used for building + permission-aware UIs and command-line tools, not for authorization + checking. This operation may "fail open" without warning. + +backend: + rules: + - selector: google.cloud.location.Locations.GetLocation + deadline: 60.0 + - selector: google.cloud.location.Locations.ListLocations + deadline: 60.0 + - selector: google.cloud.networkmanagement.v1.ReachabilityService.GetConnectivityTest + deadline: 60.0 + - selector: google.cloud.networkmanagement.v1.ReachabilityService.ListConnectivityTests + deadline: 60.0 + - selector: 'google.iam.v1.IAMPolicy.*' + deadline: 60.0 + - selector: 'google.longrunning.Operations.*' + deadline: 60.0 + - selector: google.longrunning.Operations.GetOperation + deadline: 10.0 + +http: + rules: + - selector: google.cloud.location.Locations.GetLocation + get: '/v1/{name=projects/*/locations/*}' + - selector: google.cloud.location.Locations.ListLocations + get: '/v1/{name=projects/*}/locations' + - selector: google.iam.v1.IAMPolicy.GetIamPolicy + get: '/v1/{resource=projects/*/locations/global/connectivityTests/*}:getIamPolicy' + - selector: google.iam.v1.IAMPolicy.SetIamPolicy + post: '/v1/{resource=projects/*/locations/global/connectivityTests/*}:setIamPolicy' + body: '*' + - selector: google.iam.v1.IAMPolicy.TestIamPermissions + post: '/v1/{resource=projects/*/locations/global/connectivityTests/*}:testIamPermissions' + body: '*' + - selector: google.longrunning.Operations.CancelOperation + post: '/v1/{name=projects/*/locations/global/operations/*}:cancel' + body: '*' + - selector: google.longrunning.Operations.DeleteOperation + delete: '/v1/{name=projects/*/locations/global/operations/*}' + - selector: google.longrunning.Operations.GetOperation + get: '/v1/{name=projects/*/locations/global/operations/*}' + - selector: google.longrunning.Operations.ListOperations + get: '/v1/{name=projects/*/locations/global}/operations' + +authentication: + rules: + - selector: google.cloud.location.Locations.GetLocation + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: google.cloud.location.Locations.ListLocations + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: 'google.cloud.networkmanagement.v1.ReachabilityService.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: 'google.iam.v1.IAMPolicy.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: 'google.longrunning.Operations.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform diff --git a/google/cloud/networkmanagement/v1/reachability.proto b/google/cloud/networkmanagement/v1/reachability.proto new file mode 100644 index 0000000000..d7499d3fda --- /dev/null +++ b/google/cloud/networkmanagement/v1/reachability.proto @@ -0,0 +1,275 @@ +// Copyright 2021 Google LLC +// +// 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. + +syntax = "proto3"; + +package google.cloud.networkmanagement.v1; + +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/cloud/networkmanagement/v1/connectivity_test.proto"; +import "google/longrunning/operations.proto"; +import "google/protobuf/field_mask.proto"; +import "google/protobuf/timestamp.proto"; + +option csharp_namespace = "Google.Cloud.NetworkManagement.V1"; +option go_package = "google.golang.org/genproto/googleapis/cloud/networkmanagement/v1;networkmanagement"; +option java_multiple_files = true; +option java_outer_classname = "ReachabilityServiceProto"; +option java_package = "com.google.cloud.networkmanagement.v1"; +option php_namespace = "Google\\Cloud\\NetworkManagement\\V1"; +option ruby_package = "Google::Cloud::NetworkManagement::V1"; + +// The Reachability service in Google Cloud Network Management API + +// The Reachability service in the Google Cloud Network Management API provides +// services that analyze the reachability within a single Google Virtual Private +// Cloud (VPC) network, between peered VPC networks, between VPC and on-premises +// networks, or between VPC networks and internet hosts. A reachability analysis +// is based on Google Cloud network configurations. +// +// You can use the analysis results to verify these configurations and +// to troubleshoot connectivity issues. +service ReachabilityService { + option (google.api.default_host) = "networkmanagement.googleapis.com"; + option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; + + // Lists all Connectivity Tests owned by a project. + rpc ListConnectivityTests(ListConnectivityTestsRequest) returns (ListConnectivityTestsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/global}/connectivityTests" + }; + option (google.api.method_signature) = "parent"; + } + + // Gets the details of a specific Connectivity Test. + rpc GetConnectivityTest(GetConnectivityTestRequest) returns (ConnectivityTest) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/global/connectivityTests/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Creates a new Connectivity Test. + // After you create a test, the reachability analysis is performed as part + // of the long running operation, which completes when the analysis completes. + // + // If the endpoint specifications in `ConnectivityTest` are invalid + // (for example, containing non-existent resources in the network, or you + // don't have read permissions to the network configurations of listed + // projects), then the reachability result returns a value of `UNKNOWN`. + // + // If the endpoint specifications in `ConnectivityTest` are + // incomplete, the reachability result returns a value of + // AMBIGUOUS. For more information, + // see the Connectivity Test documentation. + rpc CreateConnectivityTest(CreateConnectivityTestRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/global}/connectivityTests" + body: "resource" + }; + option (google.api.method_signature) = "parent,test_id,resource"; + option (google.longrunning.operation_info) = { + response_type: "google.cloud.networkmanagement.v1.ConnectivityTest" + metadata_type: "OperationMetadata" + }; + } + + // Updates the configuration of an existing `ConnectivityTest`. + // After you update a test, the reachability analysis is performed as part + // of the long running operation, which completes when the analysis completes. + // The Reachability state in the test resource is updated with the new result. + // + // If the endpoint specifications in `ConnectivityTest` are invalid + // (for example, they contain non-existent resources in the network, or the + // user does not have read permissions to the network configurations of + // listed projects), then the reachability result returns a value of + // UNKNOWN. + // + // If the endpoint specifications in `ConnectivityTest` are incomplete, the + // reachability result returns a value of `AMBIGUOUS`. See the documentation + // in `ConnectivityTest` for for more details. + rpc UpdateConnectivityTest(UpdateConnectivityTestRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + patch: "/v1/{resource.name=projects/*/locations/global/connectivityTests/*}" + body: "resource" + }; + option (google.api.method_signature) = "update_mask,resource"; + option (google.longrunning.operation_info) = { + response_type: "google.cloud.networkmanagement.v1.ConnectivityTest" + metadata_type: "OperationMetadata" + }; + } + + // Rerun an existing `ConnectivityTest`. + // After the user triggers the rerun, the reachability analysis is performed + // as part of the long running operation, which completes when the analysis + // completes. + // + // Even though the test configuration remains the same, the reachability + // result may change due to underlying network configuration changes. + // + // If the endpoint specifications in `ConnectivityTest` become invalid (for + // example, specified resources are deleted in the network, or you lost + // read permissions to the network configurations of listed projects), then + // the reachability result returns a value of `UNKNOWN`. + rpc RerunConnectivityTest(RerunConnectivityTestRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/global/connectivityTests/*}:rerun" + body: "*" + }; + option (google.longrunning.operation_info) = { + response_type: "google.cloud.networkmanagement.v1.ConnectivityTest" + metadata_type: "OperationMetadata" + }; + } + + // Deletes a specific `ConnectivityTest`. + rpc DeleteConnectivityTest(DeleteConnectivityTestRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/locations/global/connectivityTests/*}" + }; + option (google.api.method_signature) = "name"; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "OperationMetadata" + }; + } +} + +// Request for the `ListConnectivityTests` method. +message ListConnectivityTestsRequest { + // Required. The parent resource of the Connectivity Tests: + // `projects/{project_id}/locations/global` + string parent = 1 [(google.api.field_behavior) = REQUIRED]; + + // Number of `ConnectivityTests` to return. + int32 page_size = 2; + + // Page token from an earlier query, as returned in `next_page_token`. + string page_token = 3; + + // Lists the `ConnectivityTests` that match the filter expression. A filter + // expression filters the resources listed in the response. The expression + // must be of the form ` ` where operators: `<`, `>`, + // `<=`, + // `>=`, + // `!=`, `=`, `:` are supported (colon `:` represents a HAS operator which is + // roughly synonymous with equality). can refer to a proto or JSON + // field, or a synthetic field. Field names can be camelCase or snake_case. + // + // Examples: + // - Filter by name: + // name = "projects/proj-1/locations/global/connectivityTests/test-1 + // + // - Filter by labels: + // - Resources that have a key called `foo` + // labels.foo:* + // - Resources that have a key called `foo` whose value is `bar` + // labels.foo = bar + string filter = 4; + + // Field to use to sort the list. + string order_by = 5; +} + +// Response for the `ListConnectivityTests` method. +message ListConnectivityTestsResponse { + // List of Connectivity Tests. + repeated ConnectivityTest resources = 1; + + // Page token to fetch the next set of Connectivity Tests. + string next_page_token = 2; + + // Locations that could not be reached (when querying all locations with `-`). + repeated string unreachable = 3; +} + +// Request for the `GetConnectivityTest` method. +message GetConnectivityTestRequest { + // Required. `ConnectivityTest` resource name using the form: + // `projects/{project_id}/locations/global/connectivityTests/{test_id}` + string name = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the `CreateConnectivityTest` method. +message CreateConnectivityTestRequest { + // Required. The parent resource of the Connectivity Test to create: + // `projects/{project_id}/locations/global` + string parent = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. The logical name of the Connectivity Test in your project + // with the following restrictions: + // + // * Must contain only lowercase letters, numbers, and hyphens. + // * Must start with a letter. + // * Must be between 1-40 characters. + // * Must end with a number or a letter. + // * Must be unique within the customer project + string test_id = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. A `ConnectivityTest` resource + ConnectivityTest resource = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the `UpdateConnectivityTest` method. +message UpdateConnectivityTestRequest { + // Required. Mask of fields to update. At least one path must be supplied in + // this field. + google.protobuf.FieldMask update_mask = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Only fields specified in update_mask are updated. + ConnectivityTest resource = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the `DeleteConnectivityTest` method. +message DeleteConnectivityTestRequest { + // Required. Connectivity Test resource name using the form: + // `projects/{project_id}/locations/global/connectivityTests/{test_id}` + string name = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the `RerunConnectivityTest` method. +message RerunConnectivityTestRequest { + // Required. Connectivity Test resource name using the form: + // `projects/{project_id}/locations/global/connectivityTests/{test_id}` + string name = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Metadata describing an [Operation][google.longrunning.Operation] +message OperationMetadata { + // The time the operation was created. + google.protobuf.Timestamp create_time = 1; + + // The time the operation finished running. + google.protobuf.Timestamp end_time = 2; + + // Target of the operation - for example + // projects/project-1/locations/global/connectivityTests/test-1 + string target = 3; + + // Name of the verb executed by the operation. + string verb = 4; + + // Human-readable status of the operation, if any. + string status_detail = 5; + + // Specifies if cancellation was requested for the operation. + bool cancel_requested = 6; + + // API version. + string api_version = 7; +} diff --git a/google/cloud/networkmanagement/v1/trace.proto b/google/cloud/networkmanagement/v1/trace.proto new file mode 100644 index 0000000000..fdc2c93ccf --- /dev/null +++ b/google/cloud/networkmanagement/v1/trace.proto @@ -0,0 +1,891 @@ +// Copyright 2021 Google LLC +// +// 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. + +syntax = "proto3"; + +package google.cloud.networkmanagement.v1; + +import "google/api/annotations.proto"; + +option csharp_namespace = "Google.Cloud.NetworkManagement.V1"; +option go_package = "google.golang.org/genproto/googleapis/cloud/networkmanagement/v1;networkmanagement"; +option java_multiple_files = true; +option java_outer_classname = "TraceProto"; +option java_package = "com.google.cloud.networkmanagement.v1"; +option php_namespace = "Google\\Cloud\\NetworkManagement\\V1"; +option ruby_package = "Google::Cloud::NetworkManagement::V1"; + +// Trace represents one simulated packet forwarding path. +// +// * Each trace contains multiple ordered steps. +// * Each step is in a particular state with associated configuration. +// * State is categorized as final or non-final states. +// * Each final state has a reason associated. +// * Each trace must end with a final state (the last step). +// ``` +// |---------------------Trace----------------------| +// Step1(State) Step2(State) --- StepN(State(final)) +// ``` +message Trace { + // Derived from the source and destination endpoints definition specified by + // user request, and validated by the data plane model. + // If there are multiple traces starting from different source locations, then + // the endpoint_info may be different between traces. + EndpointInfo endpoint_info = 1; + + // A trace of a test contains multiple steps from the initial state to the + // final state (delivered, dropped, forwarded, or aborted). + // + // The steps are ordered by the processing sequence within the simulated + // network state machine. It is critical to preserve the order of the steps + // and avoid reordering or sorting them. + repeated Step steps = 2; +} + +// A simulated forwarding path is composed of multiple steps. +// Each step has a well-defined state and an associated configuration. +message Step { + // Type of states that are defined in the network state machine. + // Each step in the packet trace is in a specific state. + enum State { + // Unspecified state. + STATE_UNSPECIFIED = 0; + + // Initial state: packet originating from a Compute Engine instance. + // An InstanceInfo is populated with starting instance information. + START_FROM_INSTANCE = 1; + + // Initial state: packet originating from the internet. + // The endpoint information is populated. + START_FROM_INTERNET = 2; + + // Initial state: packet originating from a VPC or on-premises network + // with internal source IP. + // If the source is a VPC network visible to the user, a NetworkInfo + // is populated with details of the network. + START_FROM_PRIVATE_NETWORK = 3; + + // Initial state: packet originating from a Google Kubernetes Engine cluster + // master. A GKEMasterInfo is populated with starting instance information. + START_FROM_GKE_MASTER = 21; + + // Initial state: packet originating from a Cloud SQL instance. + // A CloudSQLInstanceInfo is populated with starting instance information. + START_FROM_CLOUD_SQL_INSTANCE = 22; + + // Config checking state: verify ingress firewall rule. + APPLY_INGRESS_FIREWALL_RULE = 4; + + // Config checking state: verify egress firewall rule. + APPLY_EGRESS_FIREWALL_RULE = 5; + + // Config checking state: verify route. + APPLY_ROUTE = 6; + + // Config checking state: match forwarding rule. + APPLY_FORWARDING_RULE = 7; + + // Config checking state: packet sent or received under foreign IP + // address and allowed. + SPOOFING_APPROVED = 8; + + // Forwarding state: arriving at a Compute Engine instance. + ARRIVE_AT_INSTANCE = 9; + + // Forwarding state: arriving at a Compute Engine internal load balancer. + ARRIVE_AT_INTERNAL_LOAD_BALANCER = 10; + + // Forwarding state: arriving at a Compute Engine external load balancer. + ARRIVE_AT_EXTERNAL_LOAD_BALANCER = 11; + + // Forwarding state: arriving at a Cloud VPN gateway. + ARRIVE_AT_VPN_GATEWAY = 12; + + // Forwarding state: arriving at a Cloud VPN tunnel. + ARRIVE_AT_VPN_TUNNEL = 13; + + // Transition state: packet header translated. + NAT = 14; + + // Transition state: original connection is terminated and a new proxied + // connection is initiated. + PROXY_CONNECTION = 15; + + // Final state: packet could be delivered. + DELIVER = 16; + + // Final state: packet could be dropped. + DROP = 17; + + // Final state: packet could be forwarded to a network with an unknown + // configuration. + FORWARD = 18; + + // Final state: analysis is aborted. + ABORT = 19; + + // Special state: viewer of the test result does not have permission to + // see the configuration in this step. + VIEWER_PERMISSION_MISSING = 20; + } + + // A description of the step. Usually this is a summary of the state. + string description = 1; + + // Each step is in one of the pre-defined states. + State state = 2; + + // This is a step that leads to the final state Drop. + bool causes_drop = 3; + + // Project ID that contains the configuration this step is validating. + string project_id = 4; + + // Configuration or metadata associated with each step. + // The configuration is filtered based on viewer's permission. If a viewer + // has no permission to view the configuration in this step, for non-final + // states a special state is populated (VIEWER_PERMISSION_MISSING), and for + // final state the configuration is cleared. + oneof step_info { + // Display information of a Compute Engine instance. + InstanceInfo instance = 5; + + // Display information of a Compute Engine firewall rule. + FirewallInfo firewall = 6; + + // Display information of a Compute Engine route. + RouteInfo route = 7; + + // Display information of the source and destination under analysis. + // The endpoint information in an intermediate state may differ with the + // initial input, as it might be modified by state like NAT, + // or Connection Proxy. + EndpointInfo endpoint = 8; + + // Display information of a Compute Engine forwarding rule. + ForwardingRuleInfo forwarding_rule = 9; + + // Display information of a Compute Engine VPN gateway. + VpnGatewayInfo vpn_gateway = 10; + + // Display information of a Compute Engine VPN tunnel. + VpnTunnelInfo vpn_tunnel = 11; + + // Display information of the final state "deliver" and reason. + DeliverInfo deliver = 12; + + // Display information of the final state "forward" and reason. + ForwardInfo forward = 13; + + // Display information of the final state "abort" and reason. + AbortInfo abort = 14; + + // Display information of the final state "drop" and reason. + DropInfo drop = 15; + + // Display information of the load balancers. + LoadBalancerInfo load_balancer = 16; + + // Display information of a Google Cloud network. + NetworkInfo network = 17; + + // Display information of a Google Kubernetes Engine cluster master. + GKEMasterInfo gke_master = 18; + + // Display information of a Cloud SQL instance. + CloudSQLInstanceInfo cloud_sql_instance = 19; + } +} + +// For display only. Metadata associated with a Compute Engine instance. +message InstanceInfo { + // Name of a Compute Engine instance. + string display_name = 1; + + // URI of a Compute Engine instance. + string uri = 2; + + // Name of the network interface of a Compute Engine instance. + string interface = 3; + + // URI of a Compute Engine network. + string network_uri = 4; + + // Internal IP address of the network interface. + string internal_ip = 5; + + // External IP address of the network interface. + string external_ip = 6; + + // Network tags configured on the instance. + repeated string network_tags = 7; + + // Service account authorized for the instance. + string service_account = 8 [deprecated = true]; +} + +// For display only. Metadata associated with a Compute Engine network. +message NetworkInfo { + // Name of a Compute Engine network. + string display_name = 1; + + // URI of a Compute Engine network. + string uri = 2; + + // The IP range that matches the test. + string matched_ip_range = 4; +} + +// For display only. Metadata associated with a VPC firewall rule, an implied +// VPC firewall rule, or a hierarchical firewall policy rule. +message FirewallInfo { + // The firewall rule's type. + enum FirewallRuleType { + // Unspecified type. + FIREWALL_RULE_TYPE_UNSPECIFIED = 0; + + // Hierarchical firewall policy rule. For details, see + // [Hierarchical firewall policies + // overview](https://cloud.google.com/vpc/docs/firewall-policies). + HIERARCHICAL_FIREWALL_POLICY_RULE = 1; + + // VPC firewall rule. For details, see + // [VPC firewall rules + // overview](https://cloud.google.com/vpc/docs/firewalls). + VPC_FIREWALL_RULE = 2; + + // Implied VPC firewall rule. For details, see + // [Implied + // rules](https://cloud.google.com/vpc/docs/firewalls#default_firewall_rules). + IMPLIED_VPC_FIREWALL_RULE = 3; + } + + // The display name of the VPC firewall rule. This field is not applicable + // to hierarchical firewall policy rules. + string display_name = 1; + + // The URI of the VPC firewall rule. This field is not applicable to + // implied firewall rules or hierarchical firewall policy rules. + string uri = 2; + + // Possible values: INGRESS, EGRESS + string direction = 3; + + // Possible values: ALLOW, DENY + string action = 4; + + // The priority of the firewall rule. + int32 priority = 5; + + // The URI of the VPC network that the firewall rule is associated with. + // This field is not applicable to hierarchical firewall policy rules. + string network_uri = 6; + + // The target tags defined by the VPC firewall rule. This field is not + // applicable to hierarchical firewall policy rules. + repeated string target_tags = 7; + + // The target service accounts specified by the firewall rule. + repeated string target_service_accounts = 8; + + // The hierarchical firewall policy that this rule is associated with. + // This field is not applicable to VPC firewall rules. + string policy = 9; + + // The firewall rule's type. + FirewallRuleType firewall_rule_type = 10; +} + +// For display only. Metadata associated with a Compute Engine route. +message RouteInfo { + // Type of route: + enum RouteType { + // Unspecified type. Default value. + ROUTE_TYPE_UNSPECIFIED = 0; + + // Route is a subnet route automatically created by the system. + SUBNET = 1; + + // Static route created by the user, including the default route to the + // internet. + STATIC = 2; + + // Dynamic route exchanged between BGP peers. + DYNAMIC = 3; + + // A subnet route received from peering network. + PEERING_SUBNET = 4; + + // A static route received from peering network. + PEERING_STATIC = 5; + + // A dynamic route received from peering network. + PEERING_DYNAMIC = 6; + } + + // Type of next hop: + enum NextHopType { + // Unspecified type. Default value. + NEXT_HOP_TYPE_UNSPECIFIED = 0; + + // Next hop is an IP address. + NEXT_HOP_IP = 1; + + // Next hop is a Compute Engine instance. + NEXT_HOP_INSTANCE = 2; + + // Next hop is a VPC network gateway. + NEXT_HOP_NETWORK = 3; + + // Next hop is a peering VPC. + NEXT_HOP_PEERING = 4; + + // Next hop is an interconnect. + NEXT_HOP_INTERCONNECT = 5; + + // Next hop is a VPN tunnel. + NEXT_HOP_VPN_TUNNEL = 6; + + // Next hop is a VPN gateway. This scenario only happens when tracing + // connectivity from an on-premises network to Google Cloud through a VPN. + // The analysis simulates a packet departing from the on-premises network + // through a VPN tunnel and arriving at a Cloud VPN gateway. + NEXT_HOP_VPN_GATEWAY = 7; + + // Next hop is an internet gateway. + NEXT_HOP_INTERNET_GATEWAY = 8; + + // Next hop is blackhole; that is, the next hop either does not exist or is + // not running. + NEXT_HOP_BLACKHOLE = 9; + + // Next hop is the forwarding rule of an Internal Load Balancer. + NEXT_HOP_ILB = 10; + } + + // Type of route. + RouteType route_type = 8; + + // Type of next hop. + NextHopType next_hop_type = 9; + + // Name of a Compute Engine route. + string display_name = 1; + + // URI of a Compute Engine route. + // Dynamic route from cloud router does not have a URI. + // Advertised route from Google Cloud VPC to on-premises network also does + // not have a URI. + string uri = 2; + + // Destination IP range of the route. + string dest_ip_range = 3; + + // Next hop of the route. + string next_hop = 4; + + // URI of a Compute Engine network. + string network_uri = 5; + + // Priority of the route. + int32 priority = 6; + + // Instance tags of the route. + repeated string instance_tags = 7; +} + +// For display only. Metadata associated with a Compute Engine forwarding rule. +message ForwardingRuleInfo { + // Name of a Compute Engine forwarding rule. + string display_name = 1; + + // URI of a Compute Engine forwarding rule. + string uri = 2; + + // Protocol defined in the forwarding rule that matches the test. + string matched_protocol = 3; + + // Port range defined in the forwarding rule that matches the test. + string matched_port_range = 6; + + // VIP of the forwarding rule. + string vip = 4; + + // Target type of the forwarding rule. + string target = 5; + + // Network URI. Only valid for Internal Load Balancer. + string network_uri = 7; +} + +// For display only. Metadata associated with a load balancer. +message LoadBalancerInfo { + // The type definition for a load balancer: + enum LoadBalancerType { + // Type is unspecified. + LOAD_BALANCER_TYPE_UNSPECIFIED = 0; + + // Internal TCP/UDP load balancer. + INTERNAL_TCP_UDP = 1; + + // Network TCP/UDP load balancer. + NETWORK_TCP_UDP = 2; + + // HTTP(S) proxy load balancer. + HTTP_PROXY = 3; + + // TCP proxy load balancer. + TCP_PROXY = 4; + + // SSL proxy load balancer. + SSL_PROXY = 5; + } + + // The type definition for a load balancer backend configuration: + enum BackendType { + // Type is unspecified. + BACKEND_TYPE_UNSPECIFIED = 0; + + // Backend Service as the load balancer's backend. + BACKEND_SERVICE = 1; + + // Target Pool as the load balancer's backend. + TARGET_POOL = 2; + } + + // Type of the load balancer. + LoadBalancerType load_balancer_type = 1; + + // URI of the health check for the load balancer. + string health_check_uri = 2; + + // Information for the loadbalancer backends. + repeated LoadBalancerBackend backends = 3; + + // Type of load balancer's backend configuration. + BackendType backend_type = 4; + + // Backend configuration URI. + string backend_uri = 5; +} + +// For display only. Metadata associated with a specific load balancer backend. +message LoadBalancerBackend { + // State of a health check firewall configuration: + enum HealthCheckFirewallState { + // State is unspecified. Default state if not populated. + HEALTH_CHECK_FIREWALL_STATE_UNSPECIFIED = 0; + + // There are configured firewall rules to allow health check probes to the + // backend. + CONFIGURED = 1; + + // There are firewall rules configured to allow partial health check ranges + // or block all health check ranges. + // If a health check probe is sent from denied IP ranges, + // the health check to the backend will fail. Then, the backend will be + // marked unhealthy and will not receive traffic sent to the load balancer. + MISCONFIGURED = 2; + } + + // Name of a Compute Engine instance or network endpoint. + string display_name = 1; + + // URI of a Compute Engine instance or network endpoint. + string uri = 2; + + // State of the health check firewall configuration. + HealthCheckFirewallState health_check_firewall_state = 3; + + // A list of firewall rule URIs allowing probes from health check IP ranges. + repeated string health_check_allowing_firewall_rules = 4; + + // A list of firewall rule URIs blocking probes from health check IP ranges. + repeated string health_check_blocking_firewall_rules = 5; +} + +// For display only. Metadata associated with a Compute Engine VPN gateway. +message VpnGatewayInfo { + // Name of a VPN gateway. + string display_name = 1; + + // URI of a VPN gateway. + string uri = 2; + + // URI of a Compute Engine network where the VPN gateway is configured. + string network_uri = 3; + + // IP address of the VPN gateway. + string ip_address = 4; + + // A VPN tunnel that is associated with this VPN gateway. + // There may be multiple VPN tunnels configured on a VPN gateway, and only + // the one relevant to the test is displayed. + string vpn_tunnel_uri = 5; + + // Name of a Google Cloud region where this VPN gateway is configured. + string region = 6; +} + +// For display only. Metadata associated with a Compute Engine VPN tunnel. +message VpnTunnelInfo { + // Types of VPN routing policy. For details, refer to [Networks and Tunnel + // routing](https://cloud.google.com/network-connectivity/docs/vpn/concepts/choosing-networks-routing/). + enum RoutingType { + // Unspecified type. Default value. + ROUTING_TYPE_UNSPECIFIED = 0; + + // Route based VPN. + ROUTE_BASED = 1; + + // Policy based routing. + POLICY_BASED = 2; + + // Dynamic (BGP) routing. + DYNAMIC = 3; + } + + // Name of a VPN tunnel. + string display_name = 1; + + // URI of a VPN tunnel. + string uri = 2; + + // URI of the VPN gateway at local end of the tunnel. + string source_gateway = 3; + + // URI of a VPN gateway at remote end of the tunnel. + string remote_gateway = 4; + + // Remote VPN gateway's IP address. + string remote_gateway_ip = 5; + + // Local VPN gateway's IP address. + string source_gateway_ip = 6; + + // URI of a Compute Engine network where the VPN tunnel is configured. + string network_uri = 7; + + // Name of a Google Cloud region where this VPN tunnel is configured. + string region = 8; + + // Type of the routing policy. + RoutingType routing_type = 9; +} + +// For display only. The specification of the endpoints for the test. +// EndpointInfo is derived from source and destination Endpoint and validated +// by the backend data plane model. +message EndpointInfo { + // Source IP address. + string source_ip = 1; + + // Destination IP address. + string destination_ip = 2; + + // IP protocol in string format, for example: "TCP", "UDP", "ICMP". + string protocol = 3; + + // Source port. Only valid when protocol is TCP or UDP. + int32 source_port = 4; + + // Destination port. Only valid when protocol is TCP or UDP. + int32 destination_port = 5; + + // URI of the network where this packet originates from. + string source_network_uri = 6; + + // URI of the network where this packet is sent to. + string destination_network_uri = 7; +} + +// Details of the final state "deliver" and associated resource. +message DeliverInfo { + // Deliver target types: + enum Target { + // Target not specified. + TARGET_UNSPECIFIED = 0; + + // Target is a Compute Engine instance. + INSTANCE = 1; + + // Target is the internet. + INTERNET = 2; + + // Target is a Google API. + GOOGLE_API = 3; + + // Target is a Google Kubernetes Engine cluster master. + GKE_MASTER = 4; + + // Target is a Cloud SQL instance. + CLOUD_SQL_INSTANCE = 5; + } + + // Target type where the packet is delivered to. + Target target = 1; + + // URI of the resource that the packet is delivered to. + string resource_uri = 2; +} + +// Details of the final state "forward" and associated resource. +message ForwardInfo { + // Forward target types. + enum Target { + // Target not specified. + TARGET_UNSPECIFIED = 0; + + // Forwarded to a VPC peering network. + PEERING_VPC = 1; + + // Forwarded to a Cloud VPN gateway. + VPN_GATEWAY = 2; + + // Forwarded to a Cloud Interconnect connection. + INTERCONNECT = 3; + + // Forwarded to a Google Kubernetes Engine Container cluster master. + GKE_MASTER = 4; + + // Forwarded to the next hop of a custom route imported from a peering VPC. + IMPORTED_CUSTOM_ROUTE_NEXT_HOP = 5; + + // Forwarded to a Cloud SQL instance. + CLOUD_SQL_INSTANCE = 6; + } + + // Target type where this packet is forwarded to. + Target target = 1; + + // URI of the resource that the packet is forwarded to. + string resource_uri = 2; +} + +// Details of the final state "abort" and associated resource. +message AbortInfo { + // Abort cause types: + enum Cause { + // Cause is unspecified. + CAUSE_UNSPECIFIED = 0; + + // Aborted due to unknown network. + // The reachability analysis cannot proceed because the user does not have + // access to the host project's network configurations, including firewall + // rules and routes. This happens when the project is a service project and + // the endpoints being traced are in the host project's network. + UNKNOWN_NETWORK = 1; + + // Aborted because the IP address(es) are unknown. + UNKNOWN_IP = 2; + + // Aborted because no project information can be derived from the test + // input. + UNKNOWN_PROJECT = 3; + + // Aborted because the user lacks the permission to access all or part of + // the network configurations required to run the test. + PERMISSION_DENIED = 4; + + // Aborted because no valid source endpoint is derived from the input test + // request. + NO_SOURCE_LOCATION = 5; + + // Aborted because the source and/or destination endpoint specified in + // the test are invalid. The possible reasons that an endpoint is + // invalid include: malformed IP address; nonexistent instance or + // network URI; IP address not in the range of specified network URI; and + // instance not owning the network interface in the specified network. + INVALID_ARGUMENT = 6; + + // Aborted because traffic is sent from a public IP to an instance without + // an external IP. + NO_EXTERNAL_IP = 7; + + // Aborted because none of the traces matches destination information + // specified in the input test request. + UNINTENDED_DESTINATION = 8; + + // Aborted because the number of steps in the trace exceeding a certain + // limit which may be caused by routing loop. + TRACE_TOO_LONG = 9; + + // Aborted due to internal server error. + INTERNAL_ERROR = 10; + + // Aborted because the source endpoint could not be found. + SOURCE_ENDPOINT_NOT_FOUND = 11; + + // Aborted because the source network does not match the source endpoint. + MISMATCHED_SOURCE_NETWORK = 12; + + // Aborted because the destination endpoint could not be found. + DESTINATION_ENDPOINT_NOT_FOUND = 13; + + // Aborted because the destination network does not match the destination + // endpoint. + MISMATCHED_DESTINATION_NETWORK = 14; + } + + // Causes that the analysis is aborted. + Cause cause = 1; + + // URI of the resource that caused the abort. + string resource_uri = 2; +} + +// Details of the final state "drop" and associated resource. +message DropInfo { + // Drop cause types: + enum Cause { + // Cause is unspecified. + CAUSE_UNSPECIFIED = 0; + + // Destination external address cannot be resolved to a known target. If + // the address is used in a Google Cloud project, provide the project ID + // as test input. + UNKNOWN_EXTERNAL_ADDRESS = 1; + + // A Compute Engine instance can only send or receive a packet with a + // foreign IP address if ip_forward is enabled. + FOREIGN_IP_DISALLOWED = 2; + + // Dropped due to a firewall rule, unless allowed due to connection + // tracking. + FIREWALL_RULE = 3; + + // Dropped due to no routes. + NO_ROUTE = 4; + + // Dropped due to invalid route. Route's next hop is a blackhole. + ROUTE_BLACKHOLE = 5; + + // Packet is sent to a wrong (unintended) network. Example: you trace a + // packet from VM1:Network1 to VM2:Network2, however, the route configured + // in Network1 sends the packet destined for VM2's IP addresss to Network3. + ROUTE_WRONG_NETWORK = 6; + + // Packet with internal destination address sent to the internet gateway. + PRIVATE_TRAFFIC_TO_INTERNET = 7; + + // Instance with only an internal IP address tries to access Google API and + // services, but private Google access is not enabled. + PRIVATE_GOOGLE_ACCESS_DISALLOWED = 8; + + // Instance with only an internal IP address tries to access external hosts, + // but Cloud NAT is not enabled in the subnet, unless special configurations + // on a VM allow this connection. For more details, see [Special + // configurations for VM + // instances](https://cloud.google.com/vpc/docs/special-configurations). + NO_EXTERNAL_ADDRESS = 9; + + // Destination internal address cannot be resolved to a known target. If + // this is a shared VPC scenario, verify if the service project ID is + // provided as test input. Otherwise, verify if the IP address is being + // used in the project. + UNKNOWN_INTERNAL_ADDRESS = 10; + + // Forwarding rule's protocol and ports do not match the packet header. + FORWARDING_RULE_MISMATCH = 11; + + // Forwarding rule does not have backends configured. + FORWARDING_RULE_NO_INSTANCES = 12; + + // Firewalls block the health check probes to the backends and cause + // the backends to be unavailable for traffic from the load balancer. + // For more details, see [Health check firewall + // rules](https://cloud.google.com/load-balancing/docs/health-checks#firewall_rules). + FIREWALL_BLOCKING_LOAD_BALANCER_BACKEND_HEALTH_CHECK = 13; + + // Packet is sent from or to a Compute Engine instance that is not in a + // running state. + INSTANCE_NOT_RUNNING = 14; + + // The type of traffic is blocked and the user cannot configure a firewall + // rule to enable it. See [Always blocked + // traffic](https://cloud.google.com/vpc/docs/firewalls#blockedtraffic) for + // more details. + TRAFFIC_TYPE_BLOCKED = 15; + + // Access to Google Kubernetes Engine cluster master's endpoint is not + // authorized. See [Access to the cluster + // endpoints](https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters#access_to_the_cluster_endpoints) + // for more details. + GKE_MASTER_UNAUTHORIZED_ACCESS = 16; + + // Access to the Cloud SQL instance endpoint is not authorized. + // See [Authorizing with authorized + // networks](https://cloud.google.com/sql/docs/mysql/authorize-networks) for + // more details. + CLOUD_SQL_INSTANCE_UNAUTHORIZED_ACCESS = 17; + + // Packet was dropped inside Google Kubernetes Engine Service. + DROPPED_INSIDE_GKE_SERVICE = 18; + + // Packet was dropped inside Cloud SQL Service. + DROPPED_INSIDE_CLOUD_SQL_SERVICE = 19; + + // Packet was dropped because there is no peering between the originating + // network and the Google Managed Services Network. + GOOGLE_MANAGED_SERVICE_NO_PEERING = 20; + + // Packet was dropped because the Cloud SQL instance has neither a private + // nor a public IP address. + CLOUD_SQL_INSTANCE_NO_IP_ADDRESS = 21; + } + + // Cause that the packet is dropped. + Cause cause = 1; + + // URI of the resource that caused the drop. + string resource_uri = 2; +} + +// For display only. Metadata associated with a Google Kubernetes Engine (GKE) +// cluster master. +message GKEMasterInfo { + // URI of a GKE cluster. + string cluster_uri = 2; + + // URI of a GKE cluster network. + string cluster_network_uri = 4; + + // Internal IP address of a GKE cluster master. + string internal_ip = 5; + + // External IP address of a GKE cluster master. + string external_ip = 6; +} + +// For display only. Metadata associated with a Cloud SQL instance. +message CloudSQLInstanceInfo { + // Name of a Cloud SQL instance. + string display_name = 1; + + // URI of a Cloud SQL instance. + string uri = 2; + + // URI of a Cloud SQL instance network or empty string if the instance does + // not have one. + string network_uri = 4; + + // Internal IP address of a Cloud SQL instance. + string internal_ip = 5; + + // External IP address of a Cloud SQL instance. + string external_ip = 6; + + // Region in which the Cloud SQL instance is running. + string region = 7; +} diff --git a/google/cloud/networkmanagement/v1beta1/BUILD.bazel b/google/cloud/networkmanagement/v1beta1/BUILD.bazel new file mode 100644 index 0000000000..6747beb4d7 --- /dev/null +++ b/google/cloud/networkmanagement/v1beta1/BUILD.bazel @@ -0,0 +1,341 @@ +# This file was automatically generated by BuildFileGenerator +# https://github.com/googleapis/rules_gapic/tree/master/bazel + +# Most of the manual changes to this file will be overwritten. +# It's **only** allowed to change the following rule attribute values: +# - names of *_gapic_assembly_* rules +# - certain parameters of *_gapic_library rules, including but not limited to: +# * extra_protoc_parameters +# * extra_protoc_file_parameters +# The complete list of preserved parameters can be found in the source code. + +# This is an API workspace, having public visibility by default makes perfect sense. +package(default_visibility = ["//visibility:public"]) + +############################################################################## +# Common +############################################################################## +load("@rules_proto//proto:defs.bzl", "proto_library") +load("@com_google_googleapis_imports//:imports.bzl", "proto_library_with_info") + +proto_library( + name = "networkmanagement_proto", + srcs = [ + "connectivity_test.proto", + "reachability.proto", + "trace.proto", + ], + deps = [ + "//google/api:annotations_proto", + "//google/api:client_proto", + "//google/api:field_behavior_proto", + "//google/api:resource_proto", + "//google/longrunning:operations_proto", + "//google/rpc:status_proto", + "@com_google_protobuf//:field_mask_proto", + "@com_google_protobuf//:timestamp_proto", + ], +) + +proto_library_with_info( + name = "networkmanagement_proto_with_info", + deps = [ + ":networkmanagement_proto", + "//google/cloud:common_resources_proto", + ], +) + +############################################################################## +# Java +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "java_gapic_assembly_gradle_pkg", + "java_gapic_library", + "java_gapic_test", + "java_grpc_library", + "java_proto_library", +) + +java_proto_library( + name = "networkmanagement_java_proto", + deps = [":networkmanagement_proto"], +) + +java_grpc_library( + name = "networkmanagement_java_grpc", + srcs = [":networkmanagement_proto"], + deps = [":networkmanagement_java_proto"], +) + +java_gapic_library( + name = "networkmanagement_java_gapic", + srcs = [":networkmanagement_proto_with_info"], + grpc_service_config = "networkmanagement_grpc_service_config.json", + test_deps = [ + ":networkmanagement_java_grpc", + ], + deps = [ + ":networkmanagement_java_proto", + ], +) + +java_gapic_test( + name = "networkmanagement_java_gapic_test_suite", + test_classes = [ + "com.google.cloud.networkmanagement.v1beta1.ReachabilityServiceClientTest", + ], + runtime_deps = [":networkmanagement_java_gapic_test"], +) + +# Open Source Packages +java_gapic_assembly_gradle_pkg( + name = "google-cloud-networkmanagement-v1beta1-java", + deps = [ + ":networkmanagement_java_gapic", + ":networkmanagement_java_grpc", + ":networkmanagement_java_proto", + ":networkmanagement_proto", + ], +) + +############################################################################## +# Go +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "go_gapic_assembly_pkg", + "go_gapic_library", + "go_proto_library", + "go_test", +) + +go_proto_library( + name = "networkmanagement_go_proto", + compilers = ["@io_bazel_rules_go//proto:go_grpc"], + importpath = "google.golang.org/genproto/googleapis/cloud/networkmanagement/v1beta1", + protos = [":networkmanagement_proto"], + deps = [ + "//google/api:annotations_go_proto", + "//google/longrunning:longrunning_go_proto", + "//google/rpc:status_go_proto", + ], +) + +go_gapic_library( + name = "networkmanagement_go_gapic", + srcs = [":networkmanagement_proto_with_info"], + grpc_service_config = "networkmanagement_grpc_service_config.json", + importpath = "cloud.google.com/go/networkmanagement/apiv1beta1;networkmanagement", + metadata = True, + service_yaml = "networkmanagement_v1beta1.yaml", + deps = [ + ":networkmanagement_go_proto", + "//google/longrunning:longrunning_go_proto", + "@com_google_cloud_go//longrunning:go_default_library", + "@com_google_cloud_go//longrunning/autogen:go_default_library", + ], +) + +go_test( + name = "networkmanagement_go_gapic_test", + srcs = [":networkmanagement_go_gapic_srcjar_test"], + embed = [":networkmanagement_go_gapic"], + importpath = "cloud.google.com/go/networkmanagement/apiv1beta1", +) + +# Open Source Packages +go_gapic_assembly_pkg( + name = "gapi-cloud-networkmanagement-v1beta1-go", + deps = [ + ":networkmanagement_go_gapic", + ":networkmanagement_go_gapic_srcjar-metadata.srcjar", + ":networkmanagement_go_gapic_srcjar-test.srcjar", + ":networkmanagement_go_proto", + ], +) + +############################################################################## +# Python +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "py_gapic_assembly_pkg", + "py_gapic_library", +) + +py_gapic_library( + name = "networkmanagement_py_gapic", + srcs = [":networkmanagement_proto"], + grpc_service_config = "networkmanagement_grpc_service_config.json", +) + +# Open Source Packages +py_gapic_assembly_pkg( + name = "networkmanagement-v1beta1-py", + deps = [ + ":networkmanagement_py_gapic", + ], +) + +############################################################################## +# PHP +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "php_gapic_assembly_pkg", + "php_gapic_library", + "php_grpc_library", + "php_proto_library", +) + +php_proto_library( + name = "networkmanagement_php_proto", + deps = [":networkmanagement_proto"], +) + +php_grpc_library( + name = "networkmanagement_php_grpc", + srcs = [":networkmanagement_proto"], + deps = [":networkmanagement_php_proto"], +) + +php_gapic_library( + name = "networkmanagement_php_gapic", + srcs = [":networkmanagement_proto_with_info"], + grpc_service_config = "networkmanagement_grpc_service_config.json", + service_yaml = "networkmanagement_v1beta1.yaml", + deps = [ + ":networkmanagement_php_grpc", + ":networkmanagement_php_proto", + ], +) + +# Open Source Packages +php_gapic_assembly_pkg( + name = "google-cloud-networkmanagement-v1beta1-php", + deps = [ + ":networkmanagement_php_gapic", + ":networkmanagement_php_grpc", + ":networkmanagement_php_proto", + ], +) + +############################################################################## +# Node.js +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "nodejs_gapic_assembly_pkg", + "nodejs_gapic_library", +) + +nodejs_gapic_library( + name = "networkmanagement_nodejs_gapic", + package_name = "@google-cloud/networkmanagement", + src = ":networkmanagement_proto_with_info", + extra_protoc_parameters = ["metadata"], + grpc_service_config = "networkmanagement_grpc_service_config.json", + package = "google.cloud.networkmanagement.v1beta1", + service_yaml = "networkmanagement_v1beta1.yaml", + deps = [], +) + +nodejs_gapic_assembly_pkg( + name = "networkmanagement-v1beta1-nodejs", + deps = [ + ":networkmanagement_nodejs_gapic", + ":networkmanagement_proto", + ], +) + +############################################################################## +# Ruby +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "ruby_cloud_gapic_library", + "ruby_gapic_assembly_pkg", + "ruby_grpc_library", + "ruby_proto_library", +) + +ruby_proto_library( + name = "networkmanagement_ruby_proto", + deps = [":networkmanagement_proto"], +) + +ruby_grpc_library( + name = "networkmanagement_ruby_grpc", + srcs = [":networkmanagement_proto"], + deps = [":networkmanagement_ruby_proto"], +) + +ruby_cloud_gapic_library( + name = "networkmanagement_ruby_gapic", + srcs = [":networkmanagement_proto_with_info"], + extra_protoc_parameters = ["ruby-cloud-gem-name=google-cloud-networkmanagement-v1beta1"], + grpc_service_config = "networkmanagement_grpc_service_config.json", + deps = [ + ":networkmanagement_ruby_grpc", + ":networkmanagement_ruby_proto", + ], +) + +# Open Source Packages +ruby_gapic_assembly_pkg( + name = "google-cloud-networkmanagement-v1beta1-ruby", + deps = [ + ":networkmanagement_ruby_gapic", + ":networkmanagement_ruby_grpc", + ":networkmanagement_ruby_proto", + ], +) + +############################################################################## +# C# +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "csharp_gapic_assembly_pkg", + "csharp_gapic_library", + "csharp_grpc_library", + "csharp_proto_library", +) + +csharp_proto_library( + name = "networkmanagement_csharp_proto", + deps = [":networkmanagement_proto"], +) + +csharp_grpc_library( + name = "networkmanagement_csharp_grpc", + srcs = [":networkmanagement_proto"], + deps = [":networkmanagement_csharp_proto"], +) + +csharp_gapic_library( + name = "networkmanagement_csharp_gapic", + srcs = [":networkmanagement_proto_with_info"], + common_resources_config = "@gax_dotnet//:Google.Api.Gax/ResourceNames/CommonResourcesConfig.json", + grpc_service_config = "networkmanagement_grpc_service_config.json", + deps = [ + ":networkmanagement_csharp_grpc", + ":networkmanagement_csharp_proto", + ], +) + +# Open Source Packages +csharp_gapic_assembly_pkg( + name = "google-cloud-networkmanagement-v1beta1-csharp", + deps = [ + ":networkmanagement_csharp_gapic", + ":networkmanagement_csharp_grpc", + ":networkmanagement_csharp_proto", + ], +) + +############################################################################## +# C++ +############################################################################## +# Put your C++ rules here diff --git a/google/cloud/networkmanagement/v1beta1/connectivity_test.proto b/google/cloud/networkmanagement/v1beta1/connectivity_test.proto new file mode 100644 index 0000000000..a81027d4e1 --- /dev/null +++ b/google/cloud/networkmanagement/v1beta1/connectivity_test.proto @@ -0,0 +1,313 @@ +// Copyright 2021 Google LLC +// +// 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. + +syntax = "proto3"; + +package google.cloud.networkmanagement.v1beta1; + +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/cloud/networkmanagement/v1beta1/trace.proto"; +import "google/protobuf/timestamp.proto"; +import "google/rpc/status.proto"; +import "google/api/annotations.proto"; + +option csharp_namespace = "Google.Cloud.NetworkManagement.V1Beta1"; +option go_package = "google.golang.org/genproto/googleapis/cloud/networkmanagement/v1beta1;networkmanagement"; +option java_multiple_files = true; +option java_outer_classname = "TestOuterClass"; +option java_package = "com.google.cloud.networkmanagement.v1beta1"; +option php_namespace = "Google\\Cloud\\NetworkManagement\\V1beta1"; +option ruby_package = "Google::Cloud::NetworkManagement::V1beta1"; + +// A Connectivity Test for a network reachability analysis. +message ConnectivityTest { + option (google.api.resource) = { + type: "networkmanagement.googleapis.com/ConnectivityTest" + pattern: "projects/{project}/locations/global/connectivityTests/{test}" + }; + + // Required. Unique name of the resource using the form: + // `projects/{project_id}/locations/global/connectivityTests/{test}` + string name = 1 [(google.api.field_behavior) = REQUIRED]; + + // The user-supplied description of the Connectivity Test. + // Maximum of 512 characters. + string description = 2; + + // Required. Source specification of the Connectivity Test. + // + // You can use a combination of source IP address, virtual machine + // (VM) instance, or Compute Engine network to uniquely identify + // the source location. + // + // Examples: + // If the source IP address is an internal IP address within a Google Cloud + // Virtual Private Cloud (VPC) network, then you must also specify the VPC + // network. Otherwise, specify the VM instance, which already contains its + // internal IP address and VPC network information. + // + // If the source of the test is within an on-premises network, then you must + // provide the destination VPC network. + // + // If the source endpoint is a Compute Engine VM instance with multiple + // network interfaces, the instance itself is not sufficient to identify the + // endpoint. So, you must also specify the source IP address or VPC network. + // + // A reachability analysis proceeds even if the source location is + // ambiguous. However, the test result may include endpoints that you don't + // intend to test. + Endpoint source = 3 [(google.api.field_behavior) = REQUIRED]; + + // Required. Destination specification of the Connectivity Test. + // + // You can use a combination of destination IP address, Compute Engine + // VM instance, or VPC network to uniquely identify the destination + // location. + // + // Even if the destination IP address is not unique, the source IP + // location is unique. Usually, the analysis can infer the destination + // endpoint from route information. + // + // If the destination you specify is a VM instance and the instance has + // multiple network interfaces, then you must also specify either + // a destination IP address or VPC network to identify the destination + // interface. + // + // A reachability analysis proceeds even if the destination location is + // ambiguous. However, the result can include endpoints that you don't + // intend to test. + Endpoint destination = 4 [(google.api.field_behavior) = REQUIRED]; + + // IP Protocol of the test. When not provided, "TCP" is assumed. + string protocol = 5; + + // Other projects that may be relevant for reachability analysis. + // This is applicable to scenarios where a test can cross project boundaries. + repeated string related_projects = 6; + + // Output only. The display name of a Connectivity Test. + string display_name = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Resource labels to represent user-provided metadata. + map labels = 8; + + // Output only. The time the test was created. + google.protobuf.Timestamp create_time = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The time the test's configuration was updated. + google.protobuf.Timestamp update_time = 11 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The reachability details of this test from the latest run. + // The details are updated when creating a new test, updating an + // existing test, or triggering a one-time rerun of an existing test. + ReachabilityDetails reachability_details = 12 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The probing details of this test from the latest run, present for + // applicable tests only. The details are updated when creating a new test, + // updating an existing test, or triggering a one-time rerun of an existing + // test. + ProbingDetails probing_details = 14 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Source or destination of the Connectivity Test. +message Endpoint { + // The type definition of an endpoint's network. Use one of the + // following choices: + enum NetworkType { + // Default type if unspecified. + NETWORK_TYPE_UNSPECIFIED = 0; + + // A network hosted within Google Cloud Platform. + // To receive more detailed output, specify the URI for the source or + // destination network. + GCP_NETWORK = 1; + + // A network hosted outside of Google Cloud Platform. + // This can be an on-premises network, or a network hosted by another cloud + // provider. + NON_GCP_NETWORK = 2; + } + + // The IP address of the endpoint, which can be an external or internal IP. + // An IPv6 address is only allowed when the test's destination is a + // [global load balancer + // VIP](https://cloud.google.com/load-balancing/docs/load-balancing-overview). + string ip_address = 1; + + // The IP protocol port of the endpoint. + // Only applicable when protocol is TCP or UDP. + int32 port = 2; + + // A Compute Engine instance URI. + string instance = 3; + + // A cluster URI for [Google Kubernetes Engine + // master](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-architecture). + string gke_master_cluster = 7; + + // A [Cloud SQL](https://cloud.google.com/sql) instance URI. + string cloud_sql_instance = 8; + + // A Compute Engine network URI. + string network = 4; + + // Type of the network where the endpoint is located. + // Applicable only to source endpoint, as destination network type can be + // inferred from the source. + NetworkType network_type = 5; + + // Project ID where the endpoint is located. + // The Project ID can be derived from the URI if you provide a VM instance or + // network URI. + // The following are two cases where you must provide the project ID: + // 1. Only the IP address is specified, and the IP address is within a GCP + // project. + // 2. When you are using Shared VPC and the IP address that you provide is + // from the service project. In this case, the network that the IP address + // resides in is defined in the host project. + string project_id = 6; +} + +// Results of the configuration analysis from the last run of the test. +message ReachabilityDetails { + // The overall result of the test's configuration analysis. + enum Result { + // No result was specified. + RESULT_UNSPECIFIED = 0; + + // Possible scenarios are: + // + // * The configuration analysis determined that a packet originating from + // the source is expected to reach the destination. + // * The analysis didn't complete because the user lacks permission for + // some of the resources in the trace. However, at the time the user's + // permission became insufficient, the trace had been successful so far. + REACHABLE = 1; + + // A packet originating from the source is expected to be dropped before + // reaching the destination. + UNREACHABLE = 2; + + // The source and destination endpoints do not uniquely identify + // the test location in the network, and the reachability result contains + // multiple traces. For some traces, a packet could be delivered, and for + // others, it would not be. + AMBIGUOUS = 4; + + // The configuration analysis did not complete. Possible reasons are: + // + // * A permissions error occurred--for example, the user might not have + // read permission for all of the resources named in the test. + // * An internal error occurred. + // * The analyzer received an invalid or unsupported argument or was unable + // to identify a known endpoint. + UNDETERMINED = 5; + } + + // The overall result of the test's configuration analysis. + Result result = 1; + + // The time of the configuration analysis. + google.protobuf.Timestamp verify_time = 2; + + // The details of a failure or a cancellation of reachability analysis. + google.rpc.Status error = 3; + + // Result may contain a list of traces if a test has multiple possible + // paths in the network, such as when destination endpoint is a load balancer + // with multiple backends. + repeated Trace traces = 5; +} + +// Latency percentile rank and value. +message LatencyPercentile { + // Percentage of samples this data point applies to. + int32 percent = 1; + + // percent-th percentile of latency observed, in microseconds. + // Fraction of percent/100 of samples have latency lower or + // equal to the value of this field. + int64 latency_micros = 2; +} + +// Describes measured latency distribution. +message LatencyDistribution { + // Representative latency percentiles. + repeated LatencyPercentile latency_percentiles = 1; +} + +// Results of active probing from the last run of the test. +message ProbingDetails { + // Overall probing result of the test. + enum ProbingResult { + // No result was specified. + PROBING_RESULT_UNSPECIFIED = 0; + + // At least 95% of packets reached the destination. + REACHABLE = 1; + + // No packets reached the destination. + UNREACHABLE = 2; + + // Less than 95% of packets reached the destination. + REACHABILITY_INCONSISTENT = 3; + + // Reachability could not be determined. Possible reasons are: + // * The user lacks permission to access some of the network resources + // required to run the test. + // * No valid source endpoint could be derived from the request. + // * An internal error occurred. + UNDETERMINED = 4; + } + + // Abort cause types. + enum ProbingAbortCause { + // No reason was specified. + PROBING_ABORT_CAUSE_UNSPECIFIED = 0; + + // The user lacks permission to access some of the + // network resources required to run the test. + PERMISSION_DENIED = 1; + + // No valid source endpoint could be derived from the request. + NO_SOURCE_LOCATION = 2; + } + + // The overall result of active probing. + ProbingResult result = 1; + + // The time that reachability was assessed through active probing. + google.protobuf.Timestamp verify_time = 2; + + // Details about an internal failure or the cancellation of active probing. + google.rpc.Status error = 3; + + // The reason probing was aborted. + ProbingAbortCause abort_cause = 4; + + // Number of probes sent. + int32 sent_probe_count = 5; + + // Number of probes that reached the destination. + int32 successful_probe_count = 6; + + // The source and destination endpoints derived from the test input and used + // for active probing. + EndpointInfo endpoint_info = 7; + + // Latency as measured by active probing in one direction: + // from the source to the destination endpoint. + LatencyDistribution probing_latency = 8; +} diff --git a/google/cloud/networkmanagement/v1beta1/networkmanagement_grpc_service_config.json b/google/cloud/networkmanagement/v1beta1/networkmanagement_grpc_service_config.json new file mode 100644 index 0000000000..34d01093cb --- /dev/null +++ b/google/cloud/networkmanagement/v1beta1/networkmanagement_grpc_service_config.json @@ -0,0 +1,12 @@ +{ + "methodConfig": [ + { + "name": [ + { + "service": "google.cloud.networkmanagement.v1beta1.ReachabilityService" + } + ], + "timeout": "60s" + } + ] +} diff --git a/google/cloud/networkmanagement/v1beta1/networkmanagement_v1beta1.yaml b/google/cloud/networkmanagement/v1beta1/networkmanagement_v1beta1.yaml new file mode 100644 index 0000000000..95d04c6775 --- /dev/null +++ b/google/cloud/networkmanagement/v1beta1/networkmanagement_v1beta1.yaml @@ -0,0 +1,108 @@ +type: google.api.Service +config_version: 3 +name: networkmanagement.googleapis.com +title: Network Management API + +apis: +- name: google.cloud.networkmanagement.v1beta1.ReachabilityService + +types: +- name: google.cloud.networkmanagement.v1beta1.OperationMetadata + +documentation: + summary: |- + The Network Management API provides a collection of network performance + monitoring and diagnostic capabilities. + rules: + - selector: google.cloud.location.Locations.GetLocation + description: Gets information about a location. + + - selector: google.cloud.location.Locations.ListLocations + description: Lists information about the supported locations for this service. + + - selector: google.iam.v1.IAMPolicy.GetIamPolicy + description: |- + Gets the access control policy for a resource. Returns an empty policy + if the resource exists and does not have a policy set. + + - selector: google.iam.v1.IAMPolicy.SetIamPolicy + description: |- + Sets the access control policy on the specified resource. Replaces + any existing policy. + + Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` + errors. + + - selector: google.iam.v1.IAMPolicy.TestIamPermissions + description: |- + Returns permissions that a caller has on the specified resource. If the + resource does not exist, this will return an empty set of + permissions, not a `NOT_FOUND` error. + + Note: This operation is designed to be used for building + permission-aware UIs and command-line tools, not for authorization + checking. This operation may "fail open" without warning. + +backend: + rules: + - selector: google.cloud.location.Locations.GetLocation + deadline: 60.0 + - selector: google.cloud.location.Locations.ListLocations + deadline: 60.0 + - selector: google.cloud.networkmanagement.v1beta1.ReachabilityService.GetConnectivityTest + deadline: 60.0 + - selector: google.cloud.networkmanagement.v1beta1.ReachabilityService.ListConnectivityTests + deadline: 60.0 + - selector: 'google.iam.v1.IAMPolicy.*' + deadline: 60.0 + - selector: 'google.longrunning.Operations.*' + deadline: 60.0 + - selector: google.longrunning.Operations.GetOperation + deadline: 10.0 + +http: + rules: + - selector: google.cloud.location.Locations.GetLocation + get: '/v1beta1/{name=projects/*/locations/*}' + - selector: google.cloud.location.Locations.ListLocations + get: '/v1beta1/{name=projects/*}/locations' + - selector: google.iam.v1.IAMPolicy.GetIamPolicy + get: '/v1beta1/{resource=projects/*/locations/global/connectivityTests/*}:getIamPolicy' + - selector: google.iam.v1.IAMPolicy.SetIamPolicy + post: '/v1beta1/{resource=projects/*/locations/global/connectivityTests/*}:setIamPolicy' + body: '*' + - selector: google.iam.v1.IAMPolicy.TestIamPermissions + post: '/v1beta1/{resource=projects/*/locations/global/connectivityTests/*}:testIamPermissions' + body: '*' + - selector: google.longrunning.Operations.CancelOperation + post: '/v1beta1/{name=projects/*/locations/global/operations/*}:cancel' + body: '*' + - selector: google.longrunning.Operations.DeleteOperation + delete: '/v1beta1/{name=projects/*/locations/global/operations/*}' + - selector: google.longrunning.Operations.GetOperation + get: '/v1beta1/{name=projects/*/locations/global/operations/*}' + - selector: google.longrunning.Operations.ListOperations + get: '/v1beta1/{name=projects/*/locations/global}/operations' + +authentication: + rules: + - selector: google.cloud.location.Locations.GetLocation + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: google.cloud.location.Locations.ListLocations + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: 'google.cloud.networkmanagement.v1beta1.ReachabilityService.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: 'google.iam.v1.IAMPolicy.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: 'google.longrunning.Operations.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform diff --git a/google/cloud/networkmanagement/v1beta1/reachability.proto b/google/cloud/networkmanagement/v1beta1/reachability.proto new file mode 100644 index 0000000000..83f19aa095 --- /dev/null +++ b/google/cloud/networkmanagement/v1beta1/reachability.proto @@ -0,0 +1,270 @@ +// Copyright 2021 Google LLC +// +// 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. + +syntax = "proto3"; + +package google.cloud.networkmanagement.v1beta1; + +import "google/api/annotations.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/cloud/networkmanagement/v1beta1/connectivity_test.proto"; +import "google/longrunning/operations.proto"; +import "google/protobuf/field_mask.proto"; +import "google/protobuf/timestamp.proto"; +import "google/api/client.proto"; + +option csharp_namespace = "Google.Cloud.NetworkManagement.V1Beta1"; +option go_package = "google.golang.org/genproto/googleapis/cloud/networkmanagement/v1beta1;networkmanagement"; +option java_multiple_files = true; +option java_outer_classname = "ReachabilityServiceProto"; +option java_package = "com.google.cloud.networkmanagement.v1beta1"; +option php_namespace = "Google\\Cloud\\NetworkManagement\\V1beta1"; +option ruby_package = "Google::Cloud::NetworkManagement::V1beta1"; + +// The Reachability service in Google Cloud Network Management API + +// The Reachability service in the Google Cloud Network Management API provides +// services that analyze the reachability within a single Google Virtual Private +// Cloud (VPC) network, between peered VPC networks, between VPC and on-premises +// networks, or between VPC networks and internet hosts. A reachability analysis +// is based on Google Cloud network configurations. +// +// You can use the analysis results to verify these configurations and +// to troubleshoot connectivity issues. +service ReachabilityService { + option (google.api.default_host) = "networkmanagement.googleapis.com"; + option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; + + // Lists all Connectivity Tests owned by a project. + rpc ListConnectivityTests(ListConnectivityTestsRequest) returns (ListConnectivityTestsResponse) { + option (google.api.http) = { + get: "/v1beta1/{parent=projects/*/locations/global}/connectivityTests" + }; + } + + // Gets the details of a specific Connectivity Test. + rpc GetConnectivityTest(GetConnectivityTestRequest) returns (ConnectivityTest) { + option (google.api.http) = { + get: "/v1beta1/{name=projects/*/locations/global/connectivityTests/*}" + }; + } + + // Creates a new Connectivity Test. + // After you create a test, the reachability analysis is performed as part + // of the long running operation, which completes when the analysis completes. + // + // If the endpoint specifications in `ConnectivityTest` are invalid + // (for example, containing non-existent resources in the network, or you + // don't have read permissions to the network configurations of listed + // projects), then the reachability result returns a value of `UNKNOWN`. + // + // If the endpoint specifications in `ConnectivityTest` are + // incomplete, the reachability result returns a value of + // AMBIGUOUS. For more information, + // see the Connectivity Test documentation. + rpc CreateConnectivityTest(CreateConnectivityTestRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1beta1/{parent=projects/*/locations/global}/connectivityTests" + body: "resource" + }; + option (google.longrunning.operation_info) = { + response_type: "google.cloud.networkmanagement.v1beta1.ConnectivityTest" + metadata_type: "OperationMetadata" + }; + } + + // Updates the configuration of an existing `ConnectivityTest`. + // After you update a test, the reachability analysis is performed as part + // of the long running operation, which completes when the analysis completes. + // The Reachability state in the test resource is updated with the new result. + // + // If the endpoint specifications in `ConnectivityTest` are invalid + // (for example, they contain non-existent resources in the network, or the + // user does not have read permissions to the network configurations of + // listed projects), then the reachability result returns a value of + // UNKNOWN. + // + // If the endpoint specifications in `ConnectivityTest` are incomplete, the + // reachability result returns a value of `AMBIGUOUS`. See the documentation + // in `ConnectivityTest` for for more details. + rpc UpdateConnectivityTest(UpdateConnectivityTestRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + patch: "/v1beta1/{resource.name=projects/*/locations/global/connectivityTests/*}" + body: "resource" + }; + option (google.longrunning.operation_info) = { + response_type: "google.cloud.networkmanagement.v1beta1.ConnectivityTest" + metadata_type: "OperationMetadata" + }; + } + + // Rerun an existing `ConnectivityTest`. + // After the user triggers the rerun, the reachability analysis is performed + // as part of the long running operation, which completes when the analysis + // completes. + // + // Even though the test configuration remains the same, the reachability + // result may change due to underlying network configuration changes. + // + // If the endpoint specifications in `ConnectivityTest` become invalid (for + // example, specified resources are deleted in the network, or you lost + // read permissions to the network configurations of listed projects), then + // the reachability result returns a value of `UNKNOWN`. + rpc RerunConnectivityTest(RerunConnectivityTestRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1beta1/{name=projects/*/locations/global/connectivityTests/*}:rerun" + body: "*" + }; + option (google.longrunning.operation_info) = { + response_type: "google.cloud.networkmanagement.v1beta1.ConnectivityTest" + metadata_type: "OperationMetadata" + }; + } + + // Deletes a specific `ConnectivityTest`. + rpc DeleteConnectivityTest(DeleteConnectivityTestRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1beta1/{name=projects/*/locations/global/connectivityTests/*}" + }; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "OperationMetadata" + }; + } +} + +// Request for the `ListConnectivityTests` method. +message ListConnectivityTestsRequest { + // Required. The parent resource of the Connectivity Tests: + // `projects/{project_id}/locations/global` + string parent = 1 [(google.api.field_behavior) = REQUIRED]; + + // Number of `ConnectivityTests` to return. + int32 page_size = 2; + + // Page token from an earlier query, as returned in `next_page_token`. + string page_token = 3; + + // Lists the `ConnectivityTests` that match the filter expression. A filter + // expression filters the resources listed in the response. The expression + // must be of the form ` ` where operators: `<`, `>`, + // `<=`, + // `>=`, + // `!=`, `=`, `:` are supported (colon `:` represents a HAS operator which is + // roughly synonymous with equality). can refer to a proto or JSON + // field, or a synthetic field. Field names can be camelCase or snake_case. + // + // Examples: + // - Filter by name: + // name = "projects/proj-1/locations/global/connectivityTests/test-1 + // + // - Filter by labels: + // - Resources that have a key called `foo` + // labels.foo:* + // - Resources that have a key called `foo` whose value is `bar` + // labels.foo = bar + string filter = 4; + + // Field to use to sort the list. + string order_by = 5; +} + +// Response for the `ListConnectivityTests` method. +message ListConnectivityTestsResponse { + // List of Connectivity Tests. + repeated ConnectivityTest resources = 1; + + // Page token to fetch the next set of Connectivity Tests. + string next_page_token = 2; + + // Locations that could not be reached (when querying all locations with `-`). + repeated string unreachable = 3; +} + +// Request for the `GetConnectivityTest` method. +message GetConnectivityTestRequest { + // Required. `ConnectivityTest` resource name using the form: + // `projects/{project_id}/locations/global/connectivityTests/{test_id}` + string name = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the `CreateConnectivityTest` method. +message CreateConnectivityTestRequest { + // Required. The parent resource of the Connectivity Test to create: + // `projects/{project_id}/locations/global` + string parent = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. The logical name of the Connectivity Test in your project + // with the following restrictions: + // + // * Must contain only lowercase letters, numbers, and hyphens. + // * Must start with a letter. + // * Must be between 1-40 characters. + // * Must end with a number or a letter. + // * Must be unique within the customer project + string test_id = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. A `ConnectivityTest` resource + ConnectivityTest resource = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the `UpdateConnectivityTest` method. +message UpdateConnectivityTestRequest { + // Required. Mask of fields to update. At least one path must be supplied in + // this field. + google.protobuf.FieldMask update_mask = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Only fields specified in update_mask are updated. + ConnectivityTest resource = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the `DeleteConnectivityTest` method. +message DeleteConnectivityTestRequest { + // Required. Connectivity Test resource name using the form: + // `projects/{project_id}/locations/global/connectivityTests/{test_id}` + string name = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the `RerunConnectivityTest` method. +message RerunConnectivityTestRequest { + // Required. Connectivity Test resource name using the form: + // `projects/{project_id}/locations/global/connectivityTests/{test_id}` + string name = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Metadata describing an [Operation][google.longrunning.Operation] +message OperationMetadata { + // The time the operation was created. + google.protobuf.Timestamp create_time = 1; + + // The time the operation finished running. + google.protobuf.Timestamp end_time = 2; + + // Target of the operation - for example + // projects/project-1/locations/global/connectivityTests/test-1 + string target = 3; + + // Name of the verb executed by the operation. + string verb = 4; + + // Human-readable status of the operation, if any. + string status_detail = 5; + + // Specifies if cancellation was requested for the operation. + bool cancel_requested = 6; + + // API version. + string api_version = 7; +} diff --git a/google/cloud/networkmanagement/v1beta1/trace.proto b/google/cloud/networkmanagement/v1beta1/trace.proto new file mode 100644 index 0000000000..535a910d7c --- /dev/null +++ b/google/cloud/networkmanagement/v1beta1/trace.proto @@ -0,0 +1,891 @@ +// Copyright 2021 Google LLC +// +// 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. + +syntax = "proto3"; + +package google.cloud.networkmanagement.v1beta1; + +import "google/api/annotations.proto"; + +option csharp_namespace = "Google.Cloud.NetworkManagement.V1Beta1"; +option go_package = "google.golang.org/genproto/googleapis/cloud/networkmanagement/v1beta1;networkmanagement"; +option java_multiple_files = true; +option java_outer_classname = "TraceProto"; +option java_package = "com.google.cloud.networkmanagement.v1beta1"; +option php_namespace = "Google\\Cloud\\NetworkManagement\\V1beta1"; +option ruby_package = "Google::Cloud::NetworkManagement::V1beta1"; + +// Trace represents one simulated packet forwarding path. +// +// * Each trace contains multiple ordered steps. +// * Each step is in a particular state with associated configuration. +// * State is categorized as final or non-final states. +// * Each final state has a reason associated. +// * Each trace must end with a final state (the last step). +// ``` +// |---------------------Trace----------------------| +// Step1(State) Step2(State) --- StepN(State(final)) +// ``` +message Trace { + // Derived from the source and destination endpoints definition specified by + // user request, and validated by the data plane model. + // If there are multiple traces starting from different source locations, then + // the endpoint_info may be different between traces. + EndpointInfo endpoint_info = 1; + + // A trace of a test contains multiple steps from the initial state to the + // final state (delivered, dropped, forwarded, or aborted). + // + // The steps are ordered by the processing sequence within the simulated + // network state machine. It is critical to preserve the order of the steps + // and avoid reordering or sorting them. + repeated Step steps = 2; +} + +// A simulated forwarding path is composed of multiple steps. +// Each step has a well-defined state and an associated configuration. +message Step { + // Type of states that are defined in the network state machine. + // Each step in the packet trace is in a specific state. + enum State { + // Unspecified state. + STATE_UNSPECIFIED = 0; + + // Initial state: packet originating from a Compute Engine instance. + // An InstanceInfo is populated with starting instance information. + START_FROM_INSTANCE = 1; + + // Initial state: packet originating from the internet. + // The endpoint information is populated. + START_FROM_INTERNET = 2; + + // Initial state: packet originating from a VPC or on-premises network + // with internal source IP. + // If the source is a VPC network visible to the user, a NetworkInfo + // is populated with details of the network. + START_FROM_PRIVATE_NETWORK = 3; + + // Initial state: packet originating from a Google Kubernetes Engine cluster + // master. A GKEMasterInfo is populated with starting instance information. + START_FROM_GKE_MASTER = 21; + + // Initial state: packet originating from a Cloud SQL instance. + // A CloudSQLInstanceInfo is populated with starting instance information. + START_FROM_CLOUD_SQL_INSTANCE = 22; + + // Config checking state: verify ingress firewall rule. + APPLY_INGRESS_FIREWALL_RULE = 4; + + // Config checking state: verify egress firewall rule. + APPLY_EGRESS_FIREWALL_RULE = 5; + + // Config checking state: verify route. + APPLY_ROUTE = 6; + + // Config checking state: match forwarding rule. + APPLY_FORWARDING_RULE = 7; + + // Config checking state: packet sent or received under foreign IP + // address and allowed. + SPOOFING_APPROVED = 8; + + // Forwarding state: arriving at a Compute Engine instance. + ARRIVE_AT_INSTANCE = 9; + + // Forwarding state: arriving at a Compute Engine internal load balancer. + ARRIVE_AT_INTERNAL_LOAD_BALANCER = 10; + + // Forwarding state: arriving at a Compute Engine external load balancer. + ARRIVE_AT_EXTERNAL_LOAD_BALANCER = 11; + + // Forwarding state: arriving at a Cloud VPN gateway. + ARRIVE_AT_VPN_GATEWAY = 12; + + // Forwarding state: arriving at a Cloud VPN tunnel. + ARRIVE_AT_VPN_TUNNEL = 13; + + // Transition state: packet header translated. + NAT = 14; + + // Transition state: original connection is terminated and a new proxied + // connection is initiated. + PROXY_CONNECTION = 15; + + // Final state: packet could be delivered. + DELIVER = 16; + + // Final state: packet could be dropped. + DROP = 17; + + // Final state: packet could be forwarded to a network with an unknown + // configuration. + FORWARD = 18; + + // Final state: analysis is aborted. + ABORT = 19; + + // Special state: viewer of the test result does not have permission to + // see the configuration in this step. + VIEWER_PERMISSION_MISSING = 20; + } + + // A description of the step. Usually this is a summary of the state. + string description = 1; + + // Each step is in one of the pre-defined states. + State state = 2; + + // This is a step that leads to the final state Drop. + bool causes_drop = 3; + + // Project ID that contains the configuration this step is validating. + string project_id = 4; + + // Configuration or metadata associated with each step. + // The configuration is filtered based on viewer's permission. If a viewer + // has no permission to view the configuration in this step, for non-final + // states a special state is populated (VIEWER_PERMISSION_MISSING), and for + // final state the configuration is cleared. + oneof step_info { + // Display information of a Compute Engine instance. + InstanceInfo instance = 5; + + // Display information of a Compute Engine firewall rule. + FirewallInfo firewall = 6; + + // Display information of a Compute Engine route. + RouteInfo route = 7; + + // Display information of the source and destination under analysis. + // The endpoint information in an intermediate state may differ with the + // initial input, as it might be modified by state like NAT, + // or Connection Proxy. + EndpointInfo endpoint = 8; + + // Display information of a Compute Engine forwarding rule. + ForwardingRuleInfo forwarding_rule = 9; + + // Display information of a Compute Engine VPN gateway. + VpnGatewayInfo vpn_gateway = 10; + + // Display information of a Compute Engine VPN tunnel. + VpnTunnelInfo vpn_tunnel = 11; + + // Display information of the final state "deliver" and reason. + DeliverInfo deliver = 12; + + // Display information of the final state "forward" and reason. + ForwardInfo forward = 13; + + // Display information of the final state "abort" and reason. + AbortInfo abort = 14; + + // Display information of the final state "drop" and reason. + DropInfo drop = 15; + + // Display information of the load balancers. + LoadBalancerInfo load_balancer = 16; + + // Display information of a Google Cloud network. + NetworkInfo network = 17; + + // Display information of a Google Kubernetes Engine cluster master. + GKEMasterInfo gke_master = 18; + + // Display information of a Cloud SQL instance. + CloudSQLInstanceInfo cloud_sql_instance = 19; + } +} + +// For display only. Metadata associated with a Compute Engine instance. +message InstanceInfo { + // Name of a Compute Engine instance. + string display_name = 1; + + // URI of a Compute Engine instance. + string uri = 2; + + // Name of the network interface of a Compute Engine instance. + string interface = 3; + + // URI of a Compute Engine network. + string network_uri = 4; + + // Internal IP address of the network interface. + string internal_ip = 5; + + // External IP address of the network interface. + string external_ip = 6; + + // Network tags configured on the instance. + repeated string network_tags = 7; + + // Service account authorized for the instance. + string service_account = 8 [deprecated = true]; +} + +// For display only. Metadata associated with a Compute Engine network. +message NetworkInfo { + // Name of a Compute Engine network. + string display_name = 1; + + // URI of a Compute Engine network. + string uri = 2; + + // The IP range that matches the test. + string matched_ip_range = 4; +} + +// For display only. Metadata associated with a VPC firewall rule, an implied +// VPC firewall rule, or a hierarchical firewall policy rule. +message FirewallInfo { + // The firewall rule's type. + enum FirewallRuleType { + // Unspecified type. + FIREWALL_RULE_TYPE_UNSPECIFIED = 0; + + // Hierarchical firewall policy rule. For details, see + // [Hierarchical firewall policies + // overview](https://cloud.google.com/vpc/docs/firewall-policies). + HIERARCHICAL_FIREWALL_POLICY_RULE = 1; + + // VPC firewall rule. For details, see + // [VPC firewall rules + // overview](https://cloud.google.com/vpc/docs/firewalls). + VPC_FIREWALL_RULE = 2; + + // Implied VPC firewall rule. For details, see + // [Implied + // rules](https://cloud.google.com/vpc/docs/firewalls#default_firewall_rules). + IMPLIED_VPC_FIREWALL_RULE = 3; + } + + // The display name of the VPC firewall rule. This field is not applicable + // to hierarchical firewall policy rules. + string display_name = 1; + + // The URI of the VPC firewall rule. This field is not applicable to + // implied firewall rules or hierarchical firewall policy rules. + string uri = 2; + + // Possible values: INGRESS, EGRESS + string direction = 3; + + // Possible values: ALLOW, DENY + string action = 4; + + // The priority of the firewall rule. + int32 priority = 5; + + // The URI of the VPC network that the firewall rule is associated with. + // This field is not applicable to hierarchical firewall policy rules. + string network_uri = 6; + + // The target tags defined by the VPC firewall rule. This field is not + // applicable to hierarchical firewall policy rules. + repeated string target_tags = 7; + + // The target service accounts specified by the firewall rule. + repeated string target_service_accounts = 8; + + // The hierarchical firewall policy that this rule is associated with. + // This field is not applicable to VPC firewall rules. + string policy = 9; + + // The firewall rule's type. + FirewallRuleType firewall_rule_type = 10; +} + +// For display only. Metadata associated with a Compute Engine route. +message RouteInfo { + // Type of route: + enum RouteType { + // Unspecified type. Default value. + ROUTE_TYPE_UNSPECIFIED = 0; + + // Route is a subnet route automatically created by the system. + SUBNET = 1; + + // Static route created by the user, including the default route to the + // internet. + STATIC = 2; + + // Dynamic route exchanged between BGP peers. + DYNAMIC = 3; + + // A subnet route received from peering network. + PEERING_SUBNET = 4; + + // A static route received from peering network. + PEERING_STATIC = 5; + + // A dynamic route received from peering network. + PEERING_DYNAMIC = 6; + } + + // Type of next hop: + enum NextHopType { + // Unspecified type. Default value. + NEXT_HOP_TYPE_UNSPECIFIED = 0; + + // Next hop is an IP address. + NEXT_HOP_IP = 1; + + // Next hop is a Compute Engine instance. + NEXT_HOP_INSTANCE = 2; + + // Next hop is a VPC network gateway. + NEXT_HOP_NETWORK = 3; + + // Next hop is a peering VPC. + NEXT_HOP_PEERING = 4; + + // Next hop is an interconnect. + NEXT_HOP_INTERCONNECT = 5; + + // Next hop is a VPN tunnel. + NEXT_HOP_VPN_TUNNEL = 6; + + // Next hop is a VPN gateway. This scenario only happens when tracing + // connectivity from an on-premises network to Google Cloud through a VPN. + // The analysis simulates a packet departing from the on-premises network + // through a VPN tunnel and arriving at a Cloud VPN gateway. + NEXT_HOP_VPN_GATEWAY = 7; + + // Next hop is an internet gateway. + NEXT_HOP_INTERNET_GATEWAY = 8; + + // Next hop is blackhole; that is, the next hop either does not exist or is + // not running. + NEXT_HOP_BLACKHOLE = 9; + + // Next hop is the forwarding rule of an Internal Load Balancer. + NEXT_HOP_ILB = 10; + } + + // Type of route. + RouteType route_type = 8; + + // Type of next hop. + NextHopType next_hop_type = 9; + + // Name of a Compute Engine route. + string display_name = 1; + + // URI of a Compute Engine route. + // Dynamic route from cloud router does not have a URI. + // Advertised route from Google Cloud VPC to on-premises network also does + // not have a URI. + string uri = 2; + + // Destination IP range of the route. + string dest_ip_range = 3; + + // Next hop of the route. + string next_hop = 4; + + // URI of a Compute Engine network. + string network_uri = 5; + + // Priority of the route. + int32 priority = 6; + + // Instance tags of the route. + repeated string instance_tags = 7; +} + +// For display only. Metadata associated with a Compute Engine forwarding rule. +message ForwardingRuleInfo { + // Name of a Compute Engine forwarding rule. + string display_name = 1; + + // URI of a Compute Engine forwarding rule. + string uri = 2; + + // Protocol defined in the forwarding rule that matches the test. + string matched_protocol = 3; + + // Port range defined in the forwarding rule that matches the test. + string matched_port_range = 6; + + // VIP of the forwarding rule. + string vip = 4; + + // Target type of the forwarding rule. + string target = 5; + + // Network URI. Only valid for Internal Load Balancer. + string network_uri = 7; +} + +// For display only. Metadata associated with a load balancer. +message LoadBalancerInfo { + // The type definition for a load balancer: + enum LoadBalancerType { + // Type is unspecified. + LOAD_BALANCER_TYPE_UNSPECIFIED = 0; + + // Internal TCP/UDP load balancer. + INTERNAL_TCP_UDP = 1; + + // Network TCP/UDP load balancer. + NETWORK_TCP_UDP = 2; + + // HTTP(S) proxy load balancer. + HTTP_PROXY = 3; + + // TCP proxy load balancer. + TCP_PROXY = 4; + + // SSL proxy load balancer. + SSL_PROXY = 5; + } + + // The type definition for a load balancer backend configuration: + enum BackendType { + // Type is unspecified. + BACKEND_TYPE_UNSPECIFIED = 0; + + // Backend Service as the load balancer's backend. + BACKEND_SERVICE = 1; + + // Target Pool as the load balancer's backend. + TARGET_POOL = 2; + } + + // Type of the load balancer. + LoadBalancerType load_balancer_type = 1; + + // URI of the health check for the load balancer. + string health_check_uri = 2; + + // Information for the loadbalancer backends. + repeated LoadBalancerBackend backends = 3; + + // Type of load balancer's backend configuration. + BackendType backend_type = 4; + + // Backend configuration URI. + string backend_uri = 5; +} + +// For display only. Metadata associated with a specific load balancer backend. +message LoadBalancerBackend { + // State of a health check firewall configuration: + enum HealthCheckFirewallState { + // State is unspecified. Default state if not populated. + HEALTH_CHECK_FIREWALL_STATE_UNSPECIFIED = 0; + + // There are configured firewall rules to allow health check probes to the + // backend. + CONFIGURED = 1; + + // There are firewall rules configured to allow partial health check ranges + // or block all health check ranges. + // If a health check probe is sent from denied IP ranges, + // the health check to the backend will fail. Then, the backend will be + // marked unhealthy and will not receive traffic sent to the load balancer. + MISCONFIGURED = 2; + } + + // Name of a Compute Engine instance or network endpoint. + string display_name = 1; + + // URI of a Compute Engine instance or network endpoint. + string uri = 2; + + // State of the health check firewall configuration. + HealthCheckFirewallState health_check_firewall_state = 3; + + // A list of firewall rule URIs allowing probes from health check IP ranges. + repeated string health_check_allowing_firewall_rules = 4; + + // A list of firewall rule URIs blocking probes from health check IP ranges. + repeated string health_check_blocking_firewall_rules = 5; +} + +// For display only. Metadata associated with a Compute Engine VPN gateway. +message VpnGatewayInfo { + // Name of a VPN gateway. + string display_name = 1; + + // URI of a VPN gateway. + string uri = 2; + + // URI of a Compute Engine network where the VPN gateway is configured. + string network_uri = 3; + + // IP address of the VPN gateway. + string ip_address = 4; + + // A VPN tunnel that is associated with this VPN gateway. + // There may be multiple VPN tunnels configured on a VPN gateway, and only + // the one relevant to the test is displayed. + string vpn_tunnel_uri = 5; + + // Name of a Google Cloud region where this VPN gateway is configured. + string region = 6; +} + +// For display only. Metadata associated with a Compute Engine VPN tunnel. +message VpnTunnelInfo { + // Types of VPN routing policy. For details, refer to [Networks and Tunnel + // routing](https://cloud.google.com/network-connectivity/docs/vpn/concepts/choosing-networks-routing/). + enum RoutingType { + // Unspecified type. Default value. + ROUTING_TYPE_UNSPECIFIED = 0; + + // Route based VPN. + ROUTE_BASED = 1; + + // Policy based routing. + POLICY_BASED = 2; + + // Dynamic (BGP) routing. + DYNAMIC = 3; + } + + // Name of a VPN tunnel. + string display_name = 1; + + // URI of a VPN tunnel. + string uri = 2; + + // URI of the VPN gateway at local end of the tunnel. + string source_gateway = 3; + + // URI of a VPN gateway at remote end of the tunnel. + string remote_gateway = 4; + + // Remote VPN gateway's IP address. + string remote_gateway_ip = 5; + + // Local VPN gateway's IP address. + string source_gateway_ip = 6; + + // URI of a Compute Engine network where the VPN tunnel is configured. + string network_uri = 7; + + // Name of a Google Cloud region where this VPN tunnel is configured. + string region = 8; + + // Type of the routing policy. + RoutingType routing_type = 9; +} + +// For display only. The specification of the endpoints for the test. +// EndpointInfo is derived from source and destination Endpoint and validated +// by the backend data plane model. +message EndpointInfo { + // Source IP address. + string source_ip = 1; + + // Destination IP address. + string destination_ip = 2; + + // IP protocol in string format, for example: "TCP", "UDP", "ICMP". + string protocol = 3; + + // Source port. Only valid when protocol is TCP or UDP. + int32 source_port = 4; + + // Destination port. Only valid when protocol is TCP or UDP. + int32 destination_port = 5; + + // URI of the network where this packet originates from. + string source_network_uri = 6; + + // URI of the network where this packet is sent to. + string destination_network_uri = 7; +} + +// Details of the final state "deliver" and associated resource. +message DeliverInfo { + // Deliver target types: + enum Target { + // Target not specified. + TARGET_UNSPECIFIED = 0; + + // Target is a Compute Engine instance. + INSTANCE = 1; + + // Target is the internet. + INTERNET = 2; + + // Target is a Google API. + GOOGLE_API = 3; + + // Target is a Google Kubernetes Engine cluster master. + GKE_MASTER = 4; + + // Target is a Cloud SQL instance. + CLOUD_SQL_INSTANCE = 5; + } + + // Target type where the packet is delivered to. + Target target = 1; + + // URI of the resource that the packet is delivered to. + string resource_uri = 2; +} + +// Details of the final state "forward" and associated resource. +message ForwardInfo { + // Forward target types. + enum Target { + // Target not specified. + TARGET_UNSPECIFIED = 0; + + // Forwarded to a VPC peering network. + PEERING_VPC = 1; + + // Forwarded to a Cloud VPN gateway. + VPN_GATEWAY = 2; + + // Forwarded to a Cloud Interconnect connection. + INTERCONNECT = 3; + + // Forwarded to a Google Kubernetes Engine Container cluster master. + GKE_MASTER = 4; + + // Forwarded to the next hop of a custom route imported from a peering VPC. + IMPORTED_CUSTOM_ROUTE_NEXT_HOP = 5; + + // Forwarded to a Cloud SQL instance. + CLOUD_SQL_INSTANCE = 6; + } + + // Target type where this packet is forwarded to. + Target target = 1; + + // URI of the resource that the packet is forwarded to. + string resource_uri = 2; +} + +// Details of the final state "abort" and associated resource. +message AbortInfo { + // Abort cause types: + enum Cause { + // Cause is unspecified. + CAUSE_UNSPECIFIED = 0; + + // Aborted due to unknown network. + // The reachability analysis cannot proceed because the user does not have + // access to the host project's network configurations, including firewall + // rules and routes. This happens when the project is a service project and + // the endpoints being traced are in the host project's network. + UNKNOWN_NETWORK = 1; + + // Aborted because the IP address(es) are unknown. + UNKNOWN_IP = 2; + + // Aborted because no project information can be derived from the test + // input. + UNKNOWN_PROJECT = 3; + + // Aborted because the user lacks the permission to access all or part of + // the network configurations required to run the test. + PERMISSION_DENIED = 4; + + // Aborted because no valid source endpoint is derived from the input test + // request. + NO_SOURCE_LOCATION = 5; + + // Aborted because the source and/or destination endpoint specified in + // the test are invalid. The possible reasons that an endpoint is + // invalid include: malformed IP address; nonexistent instance or + // network URI; IP address not in the range of specified network URI; and + // instance not owning the network interface in the specified network. + INVALID_ARGUMENT = 6; + + // Aborted because traffic is sent from a public IP to an instance without + // an external IP. + NO_EXTERNAL_IP = 7; + + // Aborted because none of the traces matches destination information + // specified in the input test request. + UNINTENDED_DESTINATION = 8; + + // Aborted because the number of steps in the trace exceeding a certain + // limit which may be caused by routing loop. + TRACE_TOO_LONG = 9; + + // Aborted due to internal server error. + INTERNAL_ERROR = 10; + + // Aborted because the source endpoint could not be found. + SOURCE_ENDPOINT_NOT_FOUND = 11; + + // Aborted because the source network does not match the source endpoint. + MISMATCHED_SOURCE_NETWORK = 12; + + // Aborted because the destination endpoint could not be found. + DESTINATION_ENDPOINT_NOT_FOUND = 13; + + // Aborted because the destination network does not match the destination + // endpoint. + MISMATCHED_DESTINATION_NETWORK = 14; + } + + // Causes that the analysis is aborted. + Cause cause = 1; + + // URI of the resource that caused the abort. + string resource_uri = 2; +} + +// Details of the final state "drop" and associated resource. +message DropInfo { + // Drop cause types: + enum Cause { + // Cause is unspecified. + CAUSE_UNSPECIFIED = 0; + + // Destination external address cannot be resolved to a known target. If + // the address is used in a Google Cloud project, provide the project ID + // as test input. + UNKNOWN_EXTERNAL_ADDRESS = 1; + + // a Compute Engine instance can only send or receive a packet with a + // foreign IP address if ip_forward is enabled. + FOREIGN_IP_DISALLOWED = 2; + + // Dropped due to a firewall rule, unless allowed due to connection + // tracking. + FIREWALL_RULE = 3; + + // Dropped due to no routes. + NO_ROUTE = 4; + + // Dropped due to invalid route. Route's next hop is a blackhole. + ROUTE_BLACKHOLE = 5; + + // Packet is sent to a wrong (unintended) network. Example: you trace a + // packet from VM1:Network1 to VM2:Network2, however, the route configured + // in Network1 sends the packet destined for VM2's IP addresss to Network3. + ROUTE_WRONG_NETWORK = 6; + + // Packet with internal destination address sent to the internet gateway. + PRIVATE_TRAFFIC_TO_INTERNET = 7; + + // Instance with only an internal IP address tries to access Google API and + // services, but private Google access is not enabled. + PRIVATE_GOOGLE_ACCESS_DISALLOWED = 8; + + // Instance with only an internal IP address tries to access external hosts, + // but Cloud NAT is not enabled in the subnet, unless special configurations + // on a VM allow this connection. For more details, see [Special + // configurations for VM + // instances](https://cloud.google.com/vpc/docs/special-configurations). + NO_EXTERNAL_ADDRESS = 9; + + // Destination internal address cannot be resolved to a known target. If + // this is a shared VPC scenario, verify if the service project ID is + // provided as test input. Otherwise, verify if the IP address is being + // used in the project. + UNKNOWN_INTERNAL_ADDRESS = 10; + + // Forwarding rule's protocol and ports do not match the packet header. + FORWARDING_RULE_MISMATCH = 11; + + // Forwarding rule does not have backends configured. + FORWARDING_RULE_NO_INSTANCES = 12; + + // Firewalls block the health check probes to the backends and cause + // the backends to be unavailable for traffic from the load balancer. + // For more details, see [Health check firewall + // rules](https://cloud.google.com/load-balancing/docs/health-checks#firewall_rules). + FIREWALL_BLOCKING_LOAD_BALANCER_BACKEND_HEALTH_CHECK = 13; + + // Packet is sent from or to a Compute Engine instance that is not in a + // running state. + INSTANCE_NOT_RUNNING = 14; + + // The type of traffic is blocked and the user cannot configure a firewall + // rule to enable it. See [Always blocked + // traffic](https://cloud.google.com/vpc/docs/firewalls#blockedtraffic) for + // more details. + TRAFFIC_TYPE_BLOCKED = 15; + + // Access to Google Kubernetes Engine cluster master's endpoint is not + // authorized. See [Access to the cluster + // endpoints](https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters#access_to_the_cluster_endpoints) + // for more details. + GKE_MASTER_UNAUTHORIZED_ACCESS = 16; + + // Access to the Cloud SQL instance endpoint is not authorized. + // See [Authorizing with authorized + // networks](https://cloud.google.com/sql/docs/mysql/authorize-networks) for + // more details. + CLOUD_SQL_INSTANCE_UNAUTHORIZED_ACCESS = 17; + + // Packet was dropped inside Google Kubernetes Engine Service. + DROPPED_INSIDE_GKE_SERVICE = 18; + + // Packet was dropped inside Cloud SQL Service. + DROPPED_INSIDE_CLOUD_SQL_SERVICE = 19; + + // Packet was dropped because there is no peering between the originating + // network and the Google Managed Services Network. + GOOGLE_MANAGED_SERVICE_NO_PEERING = 20; + + // Packet was dropped because the Cloud SQL instance has neither a private + // nor a public IP address. + CLOUD_SQL_INSTANCE_NO_IP_ADDRESS = 21; + } + + // Cause that the packet is dropped. + Cause cause = 1; + + // URI of the resource that caused the drop. + string resource_uri = 2; +} + +// For display only. Metadata associated with a Google Kubernetes Engine (GKE) +// cluster master. +message GKEMasterInfo { + // URI of a GKE cluster. + string cluster_uri = 2; + + // URI of a GKE cluster network. + string cluster_network_uri = 4; + + // Internal IP address of a GKE cluster master. + string internal_ip = 5; + + // External IP address of a GKE cluster master. + string external_ip = 6; +} + +// For display only. Metadata associated with a Cloud SQL instance. +message CloudSQLInstanceInfo { + // Name of a Cloud SQL instance. + string display_name = 1; + + // URI of a Cloud SQL instance. + string uri = 2; + + // URI of a Cloud SQL instance network or empty string if the instance does + // not have one. + string network_uri = 4; + + // Internal IP address of a Cloud SQL instance. + string internal_ip = 5; + + // External IP address of a Cloud SQL instance. + string external_ip = 6; + + // Region in which the Cloud SQL instance is running. + string region = 7; +}