xref: /aosp_15_r20/external/googleapis/google/cloud/networkconnectivity/v1/hub.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
1// Copyright 2023 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15syntax = "proto3";
16
17package google.cloud.networkconnectivity.v1;
18
19import "google/api/annotations.proto";
20import "google/api/client.proto";
21import "google/api/field_behavior.proto";
22import "google/api/resource.proto";
23import "google/cloud/networkconnectivity/v1/common.proto";
24import "google/longrunning/operations.proto";
25import "google/protobuf/empty.proto";
26import "google/protobuf/field_mask.proto";
27import "google/protobuf/timestamp.proto";
28
29option csharp_namespace = "Google.Cloud.NetworkConnectivity.V1";
30option go_package = "cloud.google.com/go/networkconnectivity/apiv1/networkconnectivitypb;networkconnectivitypb";
31option java_multiple_files = true;
32option java_outer_classname = "HubProto";
33option java_package = "com.google.cloud.networkconnectivity.v1";
34option php_namespace = "Google\\Cloud\\NetworkConnectivity\\V1";
35option ruby_package = "Google::Cloud::NetworkConnectivity::V1";
36option (google.api.resource_definition) = {
37  type: "compute.googleapis.com/VpnTunnel"
38  pattern: "projects/{project}/regions/{region}/vpnTunnels/{resource_id}"
39};
40option (google.api.resource_definition) = {
41  type: "compute.googleapis.com/Instance"
42  pattern: "projects/{project}/zones/{zone}/instances/{instance}"
43};
44
45// Network Connectivity Center is a hub-and-spoke abstraction for network
46// connectivity management in Google Cloud. It reduces operational complexity
47// through a simple, centralized connectivity management model.
48service HubService {
49  option (google.api.default_host) = "networkconnectivity.googleapis.com";
50  option (google.api.oauth_scopes) =
51      "https://www.googleapis.com/auth/cloud-platform";
52
53  // Lists the Network Connectivity Center hubs associated with a given project.
54  rpc ListHubs(ListHubsRequest) returns (ListHubsResponse) {
55    option (google.api.http) = {
56      get: "/v1/{parent=projects/*/locations/global}/hubs"
57    };
58    option (google.api.method_signature) = "parent";
59  }
60
61  // Gets details about a Network Connectivity Center hub.
62  rpc GetHub(GetHubRequest) returns (Hub) {
63    option (google.api.http) = {
64      get: "/v1/{name=projects/*/locations/global/hubs/*}"
65    };
66    option (google.api.method_signature) = "name";
67  }
68
69  // Creates a new Network Connectivity Center hub in the specified project.
70  rpc CreateHub(CreateHubRequest) returns (google.longrunning.Operation) {
71    option (google.api.http) = {
72      post: "/v1/{parent=projects/*/locations/global}/hubs"
73      body: "hub"
74    };
75    option (google.api.method_signature) = "parent,hub,hub_id";
76    option (google.longrunning.operation_info) = {
77      response_type: "Hub"
78      metadata_type: "OperationMetadata"
79    };
80  }
81
82  // Updates the description and/or labels of a Network Connectivity Center
83  // hub.
84  rpc UpdateHub(UpdateHubRequest) returns (google.longrunning.Operation) {
85    option (google.api.http) = {
86      patch: "/v1/{hub.name=projects/*/locations/global/hubs/*}"
87      body: "hub"
88    };
89    option (google.api.method_signature) = "hub,update_mask";
90    option (google.longrunning.operation_info) = {
91      response_type: "Hub"
92      metadata_type: "OperationMetadata"
93    };
94  }
95
96  // Deletes a Network Connectivity Center hub.
97  rpc DeleteHub(DeleteHubRequest) returns (google.longrunning.Operation) {
98    option (google.api.http) = {
99      delete: "/v1/{name=projects/*/locations/global/hubs/*}"
100    };
101    option (google.api.method_signature) = "name";
102    option (google.longrunning.operation_info) = {
103      response_type: "google.protobuf.Empty"
104      metadata_type: "OperationMetadata"
105    };
106  }
107
108  // Lists the Network Connectivity Center spokes associated with a
109  // specified hub and location. The list includes both spokes that are attached
110  // to the hub and spokes that have been proposed but not yet accepted.
111  rpc ListHubSpokes(ListHubSpokesRequest) returns (ListHubSpokesResponse) {
112    option (google.api.http) = {
113      get: "/v1/{name=projects/*/locations/global/hubs/*}:listSpokes"
114    };
115    option (google.api.method_signature) = "name";
116  }
117
118  // Lists the Network Connectivity Center spokes in a specified project and
119  // location.
120  rpc ListSpokes(ListSpokesRequest) returns (ListSpokesResponse) {
121    option (google.api.http) = {
122      get: "/v1/{parent=projects/*/locations/*}/spokes"
123    };
124    option (google.api.method_signature) = "parent";
125  }
126
127  // Gets details about a Network Connectivity Center spoke.
128  rpc GetSpoke(GetSpokeRequest) returns (Spoke) {
129    option (google.api.http) = {
130      get: "/v1/{name=projects/*/locations/*/spokes/*}"
131    };
132    option (google.api.method_signature) = "name";
133  }
134
135  // Creates a Network Connectivity Center spoke.
136  rpc CreateSpoke(CreateSpokeRequest) returns (google.longrunning.Operation) {
137    option (google.api.http) = {
138      post: "/v1/{parent=projects/*/locations/*}/spokes"
139      body: "spoke"
140    };
141    option (google.api.method_signature) = "parent,spoke,spoke_id";
142    option (google.longrunning.operation_info) = {
143      response_type: "Spoke"
144      metadata_type: "OperationMetadata"
145    };
146  }
147
148  // Updates the parameters of a Network Connectivity Center spoke.
149  rpc UpdateSpoke(UpdateSpokeRequest) returns (google.longrunning.Operation) {
150    option (google.api.http) = {
151      patch: "/v1/{spoke.name=projects/*/locations/*/spokes/*}"
152      body: "spoke"
153    };
154    option (google.api.method_signature) = "spoke,update_mask";
155    option (google.longrunning.operation_info) = {
156      response_type: "Spoke"
157      metadata_type: "OperationMetadata"
158    };
159  }
160
161  // Rejects a Network Connectivity Center spoke from being attached to a hub.
162  // If the spoke was previously in the `ACTIVE` state, it
163  // transitions to the `INACTIVE` state and is no longer able to
164  // connect to other spokes that are attached to the hub.
165  rpc RejectHubSpoke(RejectHubSpokeRequest)
166      returns (google.longrunning.Operation) {
167    option (google.api.http) = {
168      post: "/v1/{name=projects/*/locations/global/hubs/*}:rejectSpoke"
169      body: "*"
170    };
171    option (google.api.method_signature) = "name,spoke_uri";
172    option (google.longrunning.operation_info) = {
173      response_type: "RejectHubSpokeResponse"
174      metadata_type: "OperationMetadata"
175    };
176  }
177
178  // Accepts a proposal to attach a Network Connectivity Center spoke
179  // to a hub.
180  rpc AcceptHubSpoke(AcceptHubSpokeRequest)
181      returns (google.longrunning.Operation) {
182    option (google.api.http) = {
183      post: "/v1/{name=projects/*/locations/global/hubs/*}:acceptSpoke"
184      body: "*"
185    };
186    option (google.api.method_signature) = "name,spoke_uri";
187    option (google.longrunning.operation_info) = {
188      response_type: "AcceptHubSpokeResponse"
189      metadata_type: "OperationMetadata"
190    };
191  }
192
193  // Deletes a Network Connectivity Center spoke.
194  rpc DeleteSpoke(DeleteSpokeRequest) returns (google.longrunning.Operation) {
195    option (google.api.http) = {
196      delete: "/v1/{name=projects/*/locations/*/spokes/*}"
197    };
198    option (google.api.method_signature) = "name";
199    option (google.longrunning.operation_info) = {
200      response_type: "google.protobuf.Empty"
201      metadata_type: "OperationMetadata"
202    };
203  }
204
205  // Gets details about a Network Connectivity Center route table.
206  rpc GetRouteTable(GetRouteTableRequest) returns (RouteTable) {
207    option (google.api.http) = {
208      get: "/v1/{name=projects/*/locations/global/hubs/*/routeTables/*}"
209    };
210    option (google.api.method_signature) = "name";
211  }
212
213  // Gets details about the specified route.
214  rpc GetRoute(GetRouteRequest) returns (Route) {
215    option (google.api.http) = {
216      get: "/v1/{name=projects/*/locations/global/hubs/*/routeTables/*/routes/*}"
217    };
218    option (google.api.method_signature) = "name";
219  }
220
221  // Lists routes in a given project.
222  rpc ListRoutes(ListRoutesRequest) returns (ListRoutesResponse) {
223    option (google.api.http) = {
224      get: "/v1/{parent=projects/*/locations/global/hubs/*/routeTables/*}/routes"
225    };
226    option (google.api.method_signature) = "parent";
227  }
228
229  // Lists route tables in a given project.
230  rpc ListRouteTables(ListRouteTablesRequest)
231      returns (ListRouteTablesResponse) {
232    option (google.api.http) = {
233      get: "/v1/{parent=projects/*/locations/global/hubs/*}/routeTables"
234    };
235    option (google.api.method_signature) = "parent";
236  }
237
238  // Gets details about a Network Connectivity Center group.
239  rpc GetGroup(GetGroupRequest) returns (Group) {
240    option (google.api.http) = {
241      get: "/v1/{name=projects/*/locations/global/hubs/*/groups/*}"
242    };
243    option (google.api.method_signature) = "name";
244  }
245
246  // Lists groups in a given hub.
247  rpc ListGroups(ListGroupsRequest) returns (ListGroupsResponse) {
248    option (google.api.http) = {
249      get: "/v1/{parent=projects/*/locations/global/hubs/*}/groups"
250    };
251    option (google.api.method_signature) = "parent";
252  }
253}
254
255// Supported features for a location
256enum LocationFeature {
257  // No publicly supported feature in this location
258  LOCATION_FEATURE_UNSPECIFIED = 0;
259
260  // Site-to-cloud spokes are supported in this location
261  SITE_TO_CLOUD_SPOKES = 1;
262
263  // Site-to-site spokes are supported in this location
264  SITE_TO_SITE_SPOKES = 2;
265}
266
267// The route's type
268enum RouteType {
269  // No route type information specified
270  ROUTE_TYPE_UNSPECIFIED = 0;
271
272  // The route leads to a destination within the primary address range of the
273  // VPC network's subnet.
274  VPC_PRIMARY_SUBNET = 1;
275
276  // The route leads to a destination within the secondary address range of the
277  // VPC network's subnet.
278  VPC_SECONDARY_SUBNET = 2;
279}
280
281// The State enum represents the lifecycle stage of a Network Connectivity
282// Center resource.
283enum State {
284  // No state information available
285  STATE_UNSPECIFIED = 0;
286
287  // The resource's create operation is in progress.
288  CREATING = 1;
289
290  // The resource is active
291  ACTIVE = 2;
292
293  // The resource's delete operation is in progress.
294  DELETING = 3;
295
296  // The resource's accept operation is in progress.
297  ACCEPTING = 8;
298
299  // The resource's reject operation is in progress.
300  REJECTING = 9;
301
302  // The resource's update operation is in progress.
303  UPDATING = 6;
304
305  // The resource is inactive.
306  INACTIVE = 7;
307
308  // The hub associated with this spoke resource has been deleted.
309  // This state applies to spoke resources only.
310  OBSOLETE = 10;
311}
312
313// The SpokeType enum represents the type of spoke. The type
314// reflects the kind of resource that a spoke is associated with.
315enum SpokeType {
316  // Unspecified spoke type.
317  SPOKE_TYPE_UNSPECIFIED = 0;
318
319  // Spokes associated with VPN tunnels.
320  VPN_TUNNEL = 1;
321
322  // Spokes associated with VLAN attachments.
323  INTERCONNECT_ATTACHMENT = 2;
324
325  // Spokes associated with router appliance instances.
326  ROUTER_APPLIANCE = 3;
327
328  // Spokes associated with VPC networks.
329  VPC_NETWORK = 4;
330}
331
332// A Network Connectivity Center hub is a global management resource to which
333// you attach spokes. A single hub can contain spokes from multiple regions.
334// However, if any of a hub's spokes use the site-to-site data transfer feature,
335// the resources associated with those spokes must all be in the same VPC
336// network. Spokes that do not use site-to-site data transfer can be associated
337// with any VPC network in your project.
338message Hub {
339  option (google.api.resource) = {
340    type: "networkconnectivity.googleapis.com/Hub"
341    pattern: "projects/{project}/locations/global/hubs/{hub}"
342  };
343
344  // Immutable. The name of the hub. Hub names must be unique. They use the
345  // following form:
346  //     `projects/{project_number}/locations/global/hubs/{hub_id}`
347  string name = 1 [(google.api.field_behavior) = IMMUTABLE];
348
349  // Output only. The time the hub was created.
350  google.protobuf.Timestamp create_time = 2
351      [(google.api.field_behavior) = OUTPUT_ONLY];
352
353  // Output only. The time the hub was last updated.
354  google.protobuf.Timestamp update_time = 3
355      [(google.api.field_behavior) = OUTPUT_ONLY];
356
357  // Optional labels in key-value pair format. For more information about
358  // labels, see [Requirements for
359  // labels](https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements).
360  map<string, string> labels = 4;
361
362  // An optional description of the hub.
363  string description = 5;
364
365  // Output only. The Google-generated UUID for the hub. This value is unique
366  // across all hub resources. If a hub is deleted and another with the same
367  // name is created, the new hub is assigned a different unique_id.
368  string unique_id = 8 [(google.api.field_behavior) = OUTPUT_ONLY];
369
370  // Output only. The current lifecycle state of this hub.
371  State state = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
372
373  // The VPC networks associated with this hub's spokes.
374  //
375  // This field is read-only. Network Connectivity Center automatically
376  // populates it based on the set of spokes attached to the hub.
377  repeated RoutingVPC routing_vpcs = 10;
378
379  // Output only. The route tables that belong to this hub. They use the
380  // following form:
381  //    `projects/{project_number}/locations/global/hubs/{hub_id}/routeTables/{route_table_id}`
382  //
383  // This field is read-only. Network Connectivity Center automatically
384  // populates it based on the route tables nested under the hub.
385  repeated string route_tables = 11 [(google.api.field_behavior) = OUTPUT_ONLY];
386
387  // Output only. A summary of the spokes associated with a hub. The
388  // summary includes a count of spokes according to type
389  // and according to state. If any spokes are inactive,
390  // the summary also lists the reasons they are inactive,
391  // including a count for each reason.
392  SpokeSummary spoke_summary = 12 [(google.api.field_behavior) = OUTPUT_ONLY];
393}
394
395// RoutingVPC contains information about the VPC networks associated
396// with the spokes of a Network Connectivity Center hub.
397message RoutingVPC {
398  // The URI of the VPC network.
399  string uri = 1 [
400    (google.api.resource_reference) = { type: "compute.googleapis.com/Network" }
401  ];
402
403  // Output only. If true, indicates that this VPC network is currently
404  // associated with spokes that use the data transfer feature (spokes where the
405  // site_to_site_data_transfer field is set to true). If you create new spokes
406  // that use data transfer, they must be associated with this VPC network. At
407  // most, one VPC network will have this field set to true.
408  bool required_for_new_site_to_site_data_transfer_spokes = 2
409      [(google.api.field_behavior) = OUTPUT_ONLY];
410}
411
412// A Network Connectivity Center spoke represents one or more network
413// connectivity resources.
414//
415// When you create a spoke, you associate it with a hub. You must also
416// identify a value for exactly one of the following fields:
417//
418// * linked_vpn_tunnels
419// * linked_interconnect_attachments
420// * linked_router_appliance_instances
421// * linked_vpc_network
422message Spoke {
423  option (google.api.resource) = {
424    type: "networkconnectivity.googleapis.com/Spoke"
425    pattern: "projects/{project}/locations/{location}/spokes/{spoke}"
426  };
427
428  // The reason a spoke is inactive.
429  message StateReason {
430    // The Code enum represents the various reasons a state can be `INACTIVE`.
431    enum Code {
432      // No information available.
433      CODE_UNSPECIFIED = 0;
434
435      // The proposed spoke is pending review.
436      PENDING_REVIEW = 1;
437
438      // The proposed spoke has been rejected by the hub administrator.
439      REJECTED = 2;
440
441      // The spoke has been deactivated internally.
442      PAUSED = 3;
443
444      // Network Connectivity Center encountered errors while accepting
445      // the spoke.
446      FAILED = 4;
447    }
448
449    // The code associated with this reason.
450    Code code = 1;
451
452    // Human-readable details about this reason.
453    string message = 2;
454
455    // Additional information provided by the user in the RejectSpoke call.
456    string user_details = 3;
457  }
458
459  // Immutable. The name of the spoke. Spoke names must be unique. They use the
460  // following form:
461  //     `projects/{project_number}/locations/{region}/spokes/{spoke_id}`
462  string name = 1 [(google.api.field_behavior) = IMMUTABLE];
463
464  // Output only. The time the spoke was created.
465  google.protobuf.Timestamp create_time = 2
466      [(google.api.field_behavior) = OUTPUT_ONLY];
467
468  // Output only. The time the spoke was last updated.
469  google.protobuf.Timestamp update_time = 3
470      [(google.api.field_behavior) = OUTPUT_ONLY];
471
472  // Optional labels in key-value pair format. For more information about
473  // labels, see [Requirements for
474  // labels](https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements).
475  map<string, string> labels = 4;
476
477  // An optional description of the spoke.
478  string description = 5;
479
480  // Immutable. The name of the hub that this spoke is attached to.
481  string hub = 6 [
482    (google.api.field_behavior) = IMMUTABLE,
483    (google.api.resource_reference) = {
484      type: "networkconnectivity.googleapis.com/Hub"
485    }
486  ];
487
488  // Optional. The name of the group that this spoke is associated with.
489  string group = 23 [
490    (google.api.field_behavior) = OPTIONAL,
491    (google.api.resource_reference) = {
492      type: "networkconnectivity.googleapis.com/Group"
493    }
494  ];
495
496  // VPN tunnels that are associated with the spoke.
497  LinkedVpnTunnels linked_vpn_tunnels = 17;
498
499  // VLAN attachments that are associated with the spoke.
500  LinkedInterconnectAttachments linked_interconnect_attachments = 18;
501
502  // Router appliance instances that are associated with the spoke.
503  LinkedRouterApplianceInstances linked_router_appliance_instances = 19;
504
505  // Optional. VPC network that is associated with the spoke.
506  LinkedVpcNetwork linked_vpc_network = 20
507      [(google.api.field_behavior) = OPTIONAL];
508
509  // Output only. The Google-generated UUID for the spoke. This value is unique
510  // across all spoke resources. If a spoke is deleted and another with the same
511  // name is created, the new spoke is assigned a different `unique_id`.
512  string unique_id = 11 [(google.api.field_behavior) = OUTPUT_ONLY];
513
514  // Output only. The current lifecycle state of this spoke.
515  State state = 15 [(google.api.field_behavior) = OUTPUT_ONLY];
516
517  // Output only. The reasons for current state of the spoke. Only present when
518  // the spoke is in the `INACTIVE` state.
519  repeated StateReason reasons = 21 [(google.api.field_behavior) = OUTPUT_ONLY];
520
521  // Output only. The type of resource associated with the spoke.
522  SpokeType spoke_type = 22 [(google.api.field_behavior) = OUTPUT_ONLY];
523}
524
525message RouteTable {
526  option (google.api.resource) = {
527    type: "networkconnectivity.googleapis.com/RouteTable"
528    pattern: "projects/{project}/locations/global/hubs/{hub}/routeTables/{route_table}"
529  };
530
531  // Immutable. The name of the route table. Route table names must be unique.
532  // They use the following form:
533  //      `projects/{project_number}/locations/global/hubs/{hub}/routeTables/{route_table_id}`
534  string name = 1 [(google.api.field_behavior) = IMMUTABLE];
535
536  // Output only. The time the route table was created.
537  google.protobuf.Timestamp create_time = 2
538      [(google.api.field_behavior) = OUTPUT_ONLY];
539
540  // Output only. The time the route table was last updated.
541  google.protobuf.Timestamp update_time = 3
542      [(google.api.field_behavior) = OUTPUT_ONLY];
543
544  // Optional labels in key-value pair format. For more information about
545  // labels, see [Requirements for
546  // labels](https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements).
547  map<string, string> labels = 4;
548
549  // An optional description of the route table.
550  string description = 5;
551
552  // Output only. The Google-generated UUID for the route table. This value is
553  // unique across all route table resources. If a route table is deleted and
554  // another with the same name is created, the new route table is assigned
555  // a different `uid`.
556  string uid = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
557
558  // Output only. The current lifecycle state of this route table.
559  State state = 7 [(google.api.field_behavior) = OUTPUT_ONLY];
560}
561
562// A route defines a path from VM instances within a spoke to a specific
563// destination resource. Only VPC spokes have routes.
564message Route {
565  option (google.api.resource) = {
566    type: "networkconnectivity.googleapis.com/HubRoute"
567    pattern: "projects/{project}/locations/global/hubs/{hub}/routeTables/{route_table}/routes/{route}"
568  };
569
570  // Immutable. The name of the route. Route names must be unique. Route names
571  // use the following form:
572  //      `projects/{project_number}/locations/global/hubs/{hub}/routeTables/{route_table_id}/routes/{route_id}`
573  string name = 3 [(google.api.field_behavior) = IMMUTABLE];
574
575  // Output only. The time the route was created.
576  google.protobuf.Timestamp create_time = 4
577      [(google.api.field_behavior) = OUTPUT_ONLY];
578
579  // Output only. The time the route was last updated.
580  google.protobuf.Timestamp update_time = 5
581      [(google.api.field_behavior) = OUTPUT_ONLY];
582
583  // The destination IP address range.
584  string ip_cidr_range = 1;
585
586  // Output only. The route's type. Its type is determined by the properties of
587  // its IP address range.
588  RouteType type = 10 [(google.api.field_behavior) = OUTPUT_ONLY];
589
590  // Immutable. The destination VPC network for packets on this route.
591  NextHopVpcNetwork next_hop_vpc_network = 2
592      [(google.api.field_behavior) = IMMUTABLE];
593
594  // Optional labels in key-value pair format. For more information about
595  // labels, see [Requirements for
596  // labels](https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements).
597  map<string, string> labels = 6;
598
599  // An optional description of the route.
600  string description = 7;
601
602  // Output only. The Google-generated UUID for the route. This value is unique
603  // across all Network Connectivity Center route resources. If a
604  // route is deleted and another with the same name is created,
605  // the new route is assigned a different `uid`.
606  string uid = 8 [(google.api.field_behavior) = OUTPUT_ONLY];
607
608  // Output only. The current lifecycle state of the route.
609  State state = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
610
611  // Immutable. The spoke that this route leads to.
612  // Example: projects/12345/locations/global/spokes/SPOKE
613  string spoke = 11 [
614    (google.api.field_behavior) = IMMUTABLE,
615    (google.api.resource_reference) = {
616      type: "networkconnectivity.googleapis.com/Spoke"
617    }
618  ];
619
620  // Output only. The location of the route.
621  // Uses the following form: "projects/{project}/locations/{location}"
622  // Example: projects/1234/locations/us-central1
623  string location = 12 [(google.api.field_behavior) = OUTPUT_ONLY];
624}
625
626// A group represents a subset of spokes attached to a hub.
627message Group {
628  option (google.api.resource) = {
629    type: "networkconnectivity.googleapis.com/Group"
630    pattern: "projects/{project}/locations/global/hubs/{hub}/groups/{group}"
631  };
632
633  // Immutable. The name of the group. Group names must be unique. They
634  // use the following form:
635  //      `projects/{project_number}/locations/global/hubs/{hub}/groups/{group_id}`
636  string name = 1 [(google.api.field_behavior) = IMMUTABLE];
637
638  // Output only. The time the group was created.
639  google.protobuf.Timestamp create_time = 2
640      [(google.api.field_behavior) = OUTPUT_ONLY];
641
642  // Output only. The time the group was last updated.
643  google.protobuf.Timestamp update_time = 3
644      [(google.api.field_behavior) = OUTPUT_ONLY];
645
646  // Optional. Labels in key-value pair format. For more information about
647  // labels, see [Requirements for
648  // labels](https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements).
649  map<string, string> labels = 4 [(google.api.field_behavior) = OPTIONAL];
650
651  // Optional. The description of the group.
652  string description = 5 [(google.api.field_behavior) = OPTIONAL];
653
654  // Output only. The Google-generated UUID for the group. This value is unique
655  // across all group resources. If a group is deleted and
656  // another with the same name is created, the new route table is assigned
657  // a different unique_id.
658  string uid = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
659
660  // Output only. The current lifecycle state of this group.
661  State state = 7 [(google.api.field_behavior) = OUTPUT_ONLY];
662}
663
664// Request for
665// [HubService.ListHubs][google.cloud.networkconnectivity.v1.HubService.ListHubs]
666// method.
667message ListHubsRequest {
668  // Required. The parent resource's name.
669  string parent = 1 [
670    (google.api.field_behavior) = REQUIRED,
671    (google.api.resource_reference) = {
672      type: "locations.googleapis.com/Location"
673    }
674  ];
675
676  // The maximum number of results per page to return.
677  int32 page_size = 2;
678
679  // The page token.
680  string page_token = 3;
681
682  // An expression that filters the list of results.
683  string filter = 4;
684
685  // Sort the results by a certain order.
686  string order_by = 5;
687}
688
689// Response for
690// [HubService.ListHubs][google.cloud.networkconnectivity.v1.HubService.ListHubs]
691// method.
692message ListHubsResponse {
693  // The requested hubs.
694  repeated Hub hubs = 1;
695
696  // The token for the next page of the response. To see more results,
697  // use this value as the page_token for your next request. If this value
698  // is empty, there are no more results.
699  string next_page_token = 2;
700
701  // Locations that could not be reached.
702  repeated string unreachable = 3;
703}
704
705// Request for
706// [HubService.GetHub][google.cloud.networkconnectivity.v1.HubService.GetHub]
707// method.
708message GetHubRequest {
709  // Required. The name of the hub resource to get.
710  string name = 1 [
711    (google.api.field_behavior) = REQUIRED,
712    (google.api.resource_reference) = {
713      type: "networkconnectivity.googleapis.com/Hub"
714    }
715  ];
716}
717
718// Request for
719// [HubService.CreateHub][google.cloud.networkconnectivity.v1.HubService.CreateHub]
720// method.
721message CreateHubRequest {
722  // Required. The parent resource.
723  string parent = 1 [
724    (google.api.field_behavior) = REQUIRED,
725    (google.api.resource_reference) = {
726      type: "locations.googleapis.com/Location"
727    }
728  ];
729
730  // Required. A unique identifier for the hub.
731  string hub_id = 2 [(google.api.field_behavior) = REQUIRED];
732
733  // Required. The initial values for a new hub.
734  Hub hub = 3 [(google.api.field_behavior) = REQUIRED];
735
736  // Optional. A request ID to identify requests. Specify a unique request ID so
737  // that if you must retry your request, the server knows to ignore the request
738  // if it has already been completed. The server guarantees that a request
739  // doesn't result in creation of duplicate commitments for at least 60
740  // minutes.
741  //
742  // For example, consider a situation where you make an initial request and
743  // the request times out. If you make the request again with the same request
744  // ID, the server can check to see whether the original operation
745  // was received. If it was, the server ignores the second request. This
746  // behavior prevents clients from mistakenly creating duplicate commitments.
747  //
748  // The request ID must be a valid UUID, with the exception that zero UUID is
749  // not supported (00000000-0000-0000-0000-000000000000).
750  string request_id = 4 [(google.api.field_behavior) = OPTIONAL];
751}
752
753// Request for
754// [HubService.UpdateHub][google.cloud.networkconnectivity.v1.HubService.UpdateHub]
755// method.
756message UpdateHubRequest {
757  // Optional. In the case of an update to an existing hub, field mask is used
758  // to specify the fields to be overwritten. The fields specified in the
759  // update_mask are relative to the resource, not the full request. A field is
760  // overwritten if it is in the mask. If the user does not provide a mask, then
761  // all fields are overwritten.
762  google.protobuf.FieldMask update_mask = 1
763      [(google.api.field_behavior) = OPTIONAL];
764
765  // Required. The state that the hub should be in after the update.
766  Hub hub = 2 [(google.api.field_behavior) = REQUIRED];
767
768  // Optional. A request ID to identify requests. Specify a unique request ID so
769  // that if you must retry your request, the server knows to ignore the request
770  // if it has already been completed. The server guarantees that a request
771  // doesn't result in creation of duplicate commitments for at least 60
772  // minutes.
773  //
774  // For example, consider a situation where you make an initial request and
775  // the request times out. If you make the request again with the same request
776  // ID, the server can check to see whether the original operation
777  // was received. If it was, the server ignores the second request. This
778  // behavior prevents clients from mistakenly creating duplicate commitments.
779  //
780  // The request ID must be a valid UUID, with the exception that zero UUID is
781  // not supported (00000000-0000-0000-0000-000000000000).
782  string request_id = 3 [(google.api.field_behavior) = OPTIONAL];
783}
784
785// The request for
786// [HubService.DeleteHub][google.cloud.networkconnectivity.v1.HubService.DeleteHub].
787message DeleteHubRequest {
788  // Required. The name of the hub to delete.
789  string name = 1 [
790    (google.api.field_behavior) = REQUIRED,
791    (google.api.resource_reference) = {
792      type: "networkconnectivity.googleapis.com/Hub"
793    }
794  ];
795
796  // Optional. A request ID to identify requests. Specify a unique request ID so
797  // that if you must retry your request, the server knows to ignore the request
798  // if it has already been completed. The server guarantees that a request
799  // doesn't result in creation of duplicate commitments for at least 60
800  // minutes.
801  //
802  // For example, consider a situation where you make an initial request and
803  // the request times out. If you make the request again with the same request
804  // ID, the server can check to see whether the original operation
805  // was received. If it was, the server ignores the second request. This
806  // behavior prevents clients from mistakenly creating duplicate commitments.
807  //
808  // The request ID must be a valid UUID, with the exception that zero UUID is
809  // not supported (00000000-0000-0000-0000-000000000000).
810  string request_id = 2 [(google.api.field_behavior) = OPTIONAL];
811}
812
813// The request for
814// [HubService.ListHubSpokes][google.cloud.networkconnectivity.v1.HubService.ListHubSpokes].
815//
816message ListHubSpokesRequest {
817  // Enum that controls which spoke fields are included in the response.
818  enum SpokeView {
819    // The spoke view is unspecified. When the spoke view is unspecified, the
820    // API returns the same fields as the `BASIC` view.
821    SPOKE_VIEW_UNSPECIFIED = 0;
822
823    // Includes `name`, `create_time`, `hub`, `unique_id`, `state`, `reasons`,
824    // and `spoke_type`. This is the default value.
825    BASIC = 1;
826
827    // Includes all spoke fields except `labels`.
828    // You can use the `DETAILED` view only when you set the `spoke_locations`
829    // field to `[global]`.
830    DETAILED = 2;
831  }
832
833  // Required. The name of the hub.
834  string name = 1 [
835    (google.api.field_behavior) = REQUIRED,
836    (google.api.resource_reference) = {
837      type: "networkconnectivity.googleapis.com/Hub"
838    }
839  ];
840
841  // A list of locations.
842  // Specify one of the following: `[global]`, a single region (for
843  // example, `[us-central1]`), or a combination of
844  // values (for example, `[global, us-central1, us-west1]`).
845  // If the spoke_locations field is populated, the list of results
846  // includes only spokes in the specified location.
847  // If the spoke_locations field is not populated, the list of results
848  // includes spokes in all locations.
849  repeated string spoke_locations = 2;
850
851  // The maximum number of results to return per page.
852  int32 page_size = 3;
853
854  // The page token.
855  string page_token = 4;
856
857  // An expression that filters the list of results.
858  string filter = 5;
859
860  // Sort the results by name or create_time.
861  string order_by = 6;
862
863  // The view of the spoke to return.
864  // The view that you use determines which spoke fields are included in the
865  // response.
866  SpokeView view = 7;
867}
868
869// The response for
870// [HubService.ListHubSpokes][google.cloud.networkconnectivity.v1.HubService.ListHubSpokes].
871message ListHubSpokesResponse {
872  // The requested spokes.
873  // The spoke fields can be partially populated based on the `view` field in
874  // the request message.
875  repeated Spoke spokes = 1;
876
877  // The token for the next page of the response. To see more results,
878  // use this value as the page_token for your next request. If this value
879  // is empty, there are no more results.
880  string next_page_token = 2;
881
882  // Locations that could not be reached.
883  repeated string unreachable = 3;
884}
885
886// The request for
887// [HubService.ListSpokes][google.cloud.networkconnectivity.v1.HubService.ListSpokes].
888message ListSpokesRequest {
889  // Required. The parent resource.
890  string parent = 1 [
891    (google.api.field_behavior) = REQUIRED,
892    (google.api.resource_reference) = {
893      type: "locations.googleapis.com/Location"
894    }
895  ];
896
897  // The maximum number of results to return per page.
898  int32 page_size = 2;
899
900  // The page token.
901  string page_token = 3;
902
903  // An expression that filters the list of results.
904  string filter = 4;
905
906  // Sort the results by a certain order.
907  string order_by = 5;
908}
909
910// The response for
911// [HubService.ListSpokes][google.cloud.networkconnectivity.v1.HubService.ListSpokes].
912message ListSpokesResponse {
913  // The requested spokes.
914  repeated Spoke spokes = 1;
915
916  // The token for the next page of the response. To see more results,
917  // use this value as the page_token for your next request. If this value
918  // is empty, there are no more results.
919  string next_page_token = 2;
920
921  // Locations that could not be reached.
922  repeated string unreachable = 3;
923}
924
925// The request for
926// [HubService.GetSpoke][google.cloud.networkconnectivity.v1.HubService.GetSpoke].
927message GetSpokeRequest {
928  // Required. The name of the spoke resource.
929  string name = 1 [
930    (google.api.field_behavior) = REQUIRED,
931    (google.api.resource_reference) = {
932      type: "networkconnectivity.googleapis.com/Spoke"
933    }
934  ];
935}
936
937// The request for
938// [HubService.CreateSpoke][google.cloud.networkconnectivity.v1.HubService.CreateSpoke].
939message CreateSpokeRequest {
940  // Required. The parent resource.
941  string parent = 1 [
942    (google.api.field_behavior) = REQUIRED,
943    (google.api.resource_reference) = {
944      type: "locations.googleapis.com/Location"
945    }
946  ];
947
948  // Required. Unique id for the spoke to create.
949  string spoke_id = 2 [(google.api.field_behavior) = REQUIRED];
950
951  // Required. The initial values for a new spoke.
952  Spoke spoke = 3 [(google.api.field_behavior) = REQUIRED];
953
954  // Optional. A request ID to identify requests. Specify a unique request ID so
955  // that if you must retry your request, the server knows to ignore the request
956  // if it has already been completed. The server guarantees that a request
957  // doesn't result in creation of duplicate commitments for at least 60
958  // minutes.
959  //
960  // For example, consider a situation where you make an initial request and
961  // the request times out. If you make the request again with the same request
962  // ID, the server can check to see whether the original operation
963  // was received. If it was, the server ignores the second request. This
964  // behavior prevents clients from mistakenly creating duplicate commitments.
965  //
966  // The request ID must be a valid UUID, with the exception that zero UUID is
967  // not supported (00000000-0000-0000-0000-000000000000).
968  string request_id = 4 [(google.api.field_behavior) = OPTIONAL];
969}
970
971// Request for
972// [HubService.UpdateSpoke][google.cloud.networkconnectivity.v1.HubService.UpdateSpoke]
973// method.
974message UpdateSpokeRequest {
975  // Optional. In the case of an update to an existing spoke, field mask is used
976  // to specify the fields to be overwritten. The fields specified in the
977  // update_mask are relative to the resource, not the full request. A field is
978  // overwritten if it is in the mask. If the user does not provide a mask, then
979  // all fields are overwritten.
980  google.protobuf.FieldMask update_mask = 1
981      [(google.api.field_behavior) = OPTIONAL];
982
983  // Required. The state that the spoke should be in after the update.
984  Spoke spoke = 2 [(google.api.field_behavior) = REQUIRED];
985
986  // Optional. A request ID to identify requests. Specify a unique request ID so
987  // that if you must retry your request, the server knows to ignore the request
988  // if it has already been completed. The server guarantees that a request
989  // doesn't result in creation of duplicate commitments for at least 60
990  // minutes.
991  //
992  // For example, consider a situation where you make an initial request and
993  // the request times out. If you make the request again with the same request
994  // ID, the server can check to see whether the original operation
995  // was received. If it was, the server ignores the second request. This
996  // behavior prevents clients from mistakenly creating duplicate commitments.
997  //
998  // The request ID must be a valid UUID, with the exception that zero UUID is
999  // not supported (00000000-0000-0000-0000-000000000000).
1000  string request_id = 3 [(google.api.field_behavior) = OPTIONAL];
1001}
1002
1003// The request for
1004// [HubService.DeleteSpoke][google.cloud.networkconnectivity.v1.HubService.DeleteSpoke].
1005message DeleteSpokeRequest {
1006  // Required. The name of the spoke to delete.
1007  string name = 1 [
1008    (google.api.field_behavior) = REQUIRED,
1009    (google.api.resource_reference) = {
1010      type: "networkconnectivity.googleapis.com/Spoke"
1011    }
1012  ];
1013
1014  // Optional. A request ID to identify requests. Specify a unique request ID so
1015  // that if you must retry your request, the server knows to ignore the request
1016  // if it has already been completed. The server guarantees that a request
1017  // doesn't result in creation of duplicate commitments for at least 60
1018  // minutes.
1019  //
1020  // For example, consider a situation where you make an initial request and
1021  // the request times out. If you make the request again with the same request
1022  // ID, the server can check to see whether the original operation
1023  // was received. If it was, the server ignores the second request. This
1024  // behavior prevents clients from mistakenly creating duplicate commitments.
1025  //
1026  // The request ID must be a valid UUID, with the exception that zero UUID is
1027  // not supported (00000000-0000-0000-0000-000000000000).
1028  string request_id = 2 [(google.api.field_behavior) = OPTIONAL];
1029}
1030
1031// The request for
1032// [HubService.AcceptHubSpoke][google.cloud.networkconnectivity.v1.HubService.AcceptHubSpoke].
1033message AcceptHubSpokeRequest {
1034  // Required. The name of the hub into which to accept the spoke.
1035  string name = 1 [
1036    (google.api.field_behavior) = REQUIRED,
1037    (google.api.resource_reference) = {
1038      type: "networkconnectivity.googleapis.com/Hub"
1039    }
1040  ];
1041
1042  // Required. The URI of the spoke to accept into the hub.
1043  string spoke_uri = 2 [
1044    (google.api.field_behavior) = REQUIRED,
1045    (google.api.resource_reference) = {
1046      type: "networkconnectivity.googleapis.com/Spoke"
1047    }
1048  ];
1049
1050  // Optional. A request ID to identify requests. Specify a unique request ID so
1051  // that if you must retry your request, the server knows to ignore the request
1052  // if it has already been completed. The server guarantees that a request
1053  // doesn't result in creation of duplicate commitments for at least 60
1054  // minutes.
1055  //
1056  // For example, consider a situation where you make an initial request and
1057  // the request times out. If you make the request again with the same request
1058  // ID, the server can check to see whether the original operation
1059  // was received. If it was, the server ignores the second request. This
1060  // behavior prevents clients from mistakenly creating duplicate commitments.
1061  //
1062  // The request ID must be a valid UUID, with the exception that zero UUID is
1063  // not supported (00000000-0000-0000-0000-000000000000).
1064  string request_id = 3 [(google.api.field_behavior) = OPTIONAL];
1065}
1066
1067// The response for
1068// [HubService.AcceptHubSpoke][google.cloud.networkconnectivity.v1.HubService.AcceptHubSpoke].
1069message AcceptHubSpokeResponse {
1070  // The spoke that was operated on.
1071  Spoke spoke = 1;
1072}
1073
1074// The request for
1075// [HubService.RejectHubSpoke][google.cloud.networkconnectivity.v1.HubService.RejectHubSpoke].
1076message RejectHubSpokeRequest {
1077  // Required. The name of the hub from which to reject the spoke.
1078  string name = 1 [
1079    (google.api.field_behavior) = REQUIRED,
1080    (google.api.resource_reference) = {
1081      type: "networkconnectivity.googleapis.com/Hub"
1082    }
1083  ];
1084
1085  // Required. The URI of the spoke to reject from the hub.
1086  string spoke_uri = 2 [
1087    (google.api.field_behavior) = REQUIRED,
1088    (google.api.resource_reference) = {
1089      type: "networkconnectivity.googleapis.com/Spoke"
1090    }
1091  ];
1092
1093  // Optional. A request ID to identify requests. Specify a unique request ID so
1094  // that if you must retry your request, the server knows to ignore the request
1095  // if it has already been completed. The server guarantees that a request
1096  // doesn't result in creation of duplicate commitments for at least 60
1097  // minutes.
1098  //
1099  // For example, consider a situation where you make an initial request and
1100  // the request times out. If you make the request again with the same request
1101  // ID, the server can check to see whether the original operation
1102  // was received. If it was, the server ignores the second request. This
1103  // behavior prevents clients from mistakenly creating duplicate commitments.
1104  //
1105  // The request ID must be a valid UUID, with the exception that zero UUID is
1106  // not supported (00000000-0000-0000-0000-000000000000).
1107  string request_id = 3 [(google.api.field_behavior) = OPTIONAL];
1108
1109  // Optional. Additional information provided by the hub administrator.
1110  string details = 4 [(google.api.field_behavior) = OPTIONAL];
1111}
1112
1113// The response for
1114// [HubService.RejectHubSpoke][google.cloud.networkconnectivity.v1.HubService.RejectHubSpoke].
1115message RejectHubSpokeResponse {
1116  // The spoke that was operated on.
1117  Spoke spoke = 1;
1118}
1119
1120// The request for
1121// [HubService.GetRouteTable][google.cloud.networkconnectivity.v1.HubService.GetRouteTable].
1122message GetRouteTableRequest {
1123  // Required. The name of the route table resource.
1124  string name = 1 [
1125    (google.api.field_behavior) = REQUIRED,
1126    (google.api.resource_reference) = {
1127      type: "networkconnectivity.googleapis.com/RouteTable"
1128    }
1129  ];
1130}
1131
1132// The request for
1133// [HubService.GetRoute][google.cloud.networkconnectivity.v1.HubService.GetRoute].
1134message GetRouteRequest {
1135  // Required. The name of the route resource.
1136  string name = 1 [
1137    (google.api.field_behavior) = REQUIRED,
1138    (google.api.resource_reference) = {
1139      type: "networkconnectivity.googleapis.com/HubRoute"
1140    }
1141  ];
1142}
1143
1144// Request for
1145// [HubService.ListRoutes][google.cloud.networkconnectivity.v1.HubService.ListRoutes]
1146// method.
1147message ListRoutesRequest {
1148  // Required. The parent resource's name.
1149  string parent = 1 [
1150    (google.api.field_behavior) = REQUIRED,
1151    (google.api.resource_reference) = {
1152      type: "networkconnectivity.googleapis.com/RouteTable"
1153    }
1154  ];
1155
1156  // The maximum number of results to return per page.
1157  int32 page_size = 2;
1158
1159  // The page token.
1160  string page_token = 3;
1161
1162  // An expression that filters the list of results.
1163  string filter = 4;
1164
1165  // Sort the results by a certain order.
1166  string order_by = 5;
1167}
1168
1169// Response for
1170// [HubService.ListRoutes][google.cloud.networkconnectivity.v1.HubService.ListRoutes]
1171// method.
1172message ListRoutesResponse {
1173  // The requested routes.
1174  repeated Route routes = 1;
1175
1176  // The token for the next page of the response. To see more results,
1177  // use this value as the page_token for your next request. If this value
1178  // is empty, there are no more results.
1179  string next_page_token = 2;
1180
1181  // RouteTables that could not be reached.
1182  repeated string unreachable = 3;
1183}
1184
1185// Request for
1186// [HubService.ListRouteTables][google.cloud.networkconnectivity.v1.HubService.ListRouteTables]
1187// method.
1188message ListRouteTablesRequest {
1189  // Required. The parent resource's name.
1190  string parent = 1 [
1191    (google.api.field_behavior) = REQUIRED,
1192    (google.api.resource_reference) = {
1193      type: "networkconnectivity.googleapis.com/Hub"
1194    }
1195  ];
1196
1197  // The maximum number of results to return per page.
1198  int32 page_size = 2;
1199
1200  // The page token.
1201  string page_token = 3;
1202
1203  // An expression that filters the list of results.
1204  string filter = 4;
1205
1206  // Sort the results by a certain order.
1207  string order_by = 5;
1208}
1209
1210// Response for
1211// [HubService.ListRouteTables][google.cloud.networkconnectivity.v1.HubService.ListRouteTables]
1212// method.
1213message ListRouteTablesResponse {
1214  // The requested route tables.
1215  repeated RouteTable route_tables = 1;
1216
1217  // The token for the next page of the response. To see more results,
1218  // use this value as the page_token for your next request. If this value
1219  // is empty, there are no more results.
1220  string next_page_token = 2;
1221
1222  // Hubs that could not be reached.
1223  repeated string unreachable = 3;
1224}
1225
1226// Request for
1227// [HubService.ListGroups][google.cloud.networkconnectivity.v1.HubService.ListGroups]
1228// method.
1229message ListGroupsRequest {
1230  // Required. The parent resource's name.
1231  string parent = 1 [
1232    (google.api.field_behavior) = REQUIRED,
1233    (google.api.resource_reference) = {
1234      type: "networkconnectivity.googleapis.com/Hub"
1235    }
1236  ];
1237
1238  // The maximum number of results to return per page.
1239  int32 page_size = 2;
1240
1241  // The page token.
1242  string page_token = 3;
1243
1244  // An expression that filters the list of results.
1245  string filter = 4;
1246
1247  // Sort the results by a certain order.
1248  string order_by = 5;
1249}
1250
1251// Response for
1252// [HubService.ListGroups][google.cloud.networkconnectivity.v1.HubService.ListGroups]
1253// method.
1254message ListGroupsResponse {
1255  // The requested groups.
1256  repeated Group groups = 1;
1257
1258  // The token for the next page of the response. To see more results,
1259  // use this value as the page_token for your next request. If this value
1260  // is empty, there are no more results.
1261  string next_page_token = 2;
1262
1263  // Hubs that could not be reached.
1264  repeated string unreachable = 3;
1265}
1266
1267// A collection of Cloud VPN tunnel resources. These resources should be
1268// redundant HA VPN tunnels that all advertise the same prefixes to Google
1269// Cloud. Alternatively, in a passive/active configuration, all tunnels
1270// should be capable of advertising the same prefixes.
1271message LinkedVpnTunnels {
1272  // The URIs of linked VPN tunnel resources.
1273  repeated string uris = 1 [(google.api.resource_reference) = {
1274    type: "compute.googleapis.com/VpnTunnel"
1275  }];
1276
1277  // A value that controls whether site-to-site data transfer is enabled for
1278  // these resources. Data transfer is available only in [supported
1279  // locations](https://cloud.google.com/network-connectivity/docs/network-connectivity-center/concepts/locations).
1280  bool site_to_site_data_transfer = 2;
1281
1282  // Output only. The VPC network where these VPN tunnels are located.
1283  string vpc_network = 3 [
1284    (google.api.field_behavior) = OUTPUT_ONLY,
1285    (google.api.resource_reference) = { type: "compute.googleapis.com/Network" }
1286  ];
1287}
1288
1289// A collection of VLAN attachment resources. These resources should
1290// be redundant attachments that all advertise the same prefixes to Google
1291// Cloud. Alternatively, in active/passive configurations, all attachments
1292// should be capable of advertising the same prefixes.
1293message LinkedInterconnectAttachments {
1294  // The URIs of linked interconnect attachment resources
1295  repeated string uris = 1 [(google.api.resource_reference) = {
1296    type: "compute.googleapis.com/InterconnectAttachment"
1297  }];
1298
1299  // A value that controls whether site-to-site data transfer is enabled for
1300  // these resources. Data transfer is available only in [supported
1301  // locations](https://cloud.google.com/network-connectivity/docs/network-connectivity-center/concepts/locations).
1302  bool site_to_site_data_transfer = 2;
1303
1304  // Output only. The VPC network where these VLAN attachments are located.
1305  string vpc_network = 3 [
1306    (google.api.field_behavior) = OUTPUT_ONLY,
1307    (google.api.resource_reference) = { type: "compute.googleapis.com/Network" }
1308  ];
1309}
1310
1311// A collection of router appliance instances. If you configure multiple router
1312// appliance instances to receive data from the same set of sites outside of
1313// Google Cloud, we recommend that you associate those instances with the same
1314// spoke.
1315message LinkedRouterApplianceInstances {
1316  // The list of router appliance instances.
1317  repeated RouterApplianceInstance instances = 1;
1318
1319  // A value that controls whether site-to-site data transfer is enabled for
1320  // these resources. Data transfer is available only in [supported
1321  // locations](https://cloud.google.com/network-connectivity/docs/network-connectivity-center/concepts/locations).
1322  bool site_to_site_data_transfer = 2;
1323
1324  // Output only. The VPC network where these router appliance instances are
1325  // located.
1326  string vpc_network = 3 [
1327    (google.api.field_behavior) = OUTPUT_ONLY,
1328    (google.api.resource_reference) = { type: "compute.googleapis.com/Network" }
1329  ];
1330}
1331
1332// An existing VPC network.
1333message LinkedVpcNetwork {
1334  // Required. The URI of the VPC network resource.
1335  string uri = 1 [
1336    (google.api.field_behavior) = REQUIRED,
1337    (google.api.resource_reference) = { type: "compute.googleapis.com/Network" }
1338  ];
1339
1340  // Optional. IP ranges encompassing the subnets to be excluded from peering.
1341  repeated string exclude_export_ranges = 2
1342      [(google.api.field_behavior) = OPTIONAL];
1343}
1344
1345// A router appliance instance is a Compute Engine virtual machine (VM) instance
1346// that acts as a BGP speaker. A router appliance instance is specified by the
1347// URI of the VM and the internal IP address of one of the VM's network
1348// interfaces.
1349message RouterApplianceInstance {
1350  // The URI of the VM.
1351  string virtual_machine = 1 [(google.api.resource_reference) = {
1352    type: "compute.googleapis.com/Instance"
1353  }];
1354
1355  // The IP address on the VM to use for peering.
1356  string ip_address = 3;
1357}
1358
1359// Metadata about locations
1360message LocationMetadata {
1361  // List of supported features
1362  repeated LocationFeature location_features = 1;
1363}
1364
1365message NextHopVpcNetwork {
1366  // The URI of the VPC network resource
1367  string uri = 1 [
1368    (google.api.resource_reference) = { type: "compute.googleapis.com/Network" }
1369  ];
1370}
1371
1372// Summarizes information about the spokes associated with a hub.
1373// The summary includes a count of spokes according to type
1374// and according to state. If any spokes are inactive,
1375// the summary also lists the reasons they are inactive,
1376// including a count for each reason.
1377message SpokeSummary {
1378  // The number of spokes of a given type that are associated
1379  // with a specific hub. The type indicates what kind of
1380  // resource is associated with the spoke.
1381  message SpokeTypeCount {
1382    // Output only. The type of the spokes.
1383    SpokeType spoke_type = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
1384
1385    // Output only. The total number of spokes of this type that are
1386    // associated with the hub.
1387    int64 count = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
1388  }
1389
1390  // The number of spokes that are in a particular state
1391  // and associated with a given hub.
1392  message SpokeStateCount {
1393    // Output only. The state of the spokes.
1394    State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
1395
1396    // Output only. The total number of spokes that are in this state
1397    // and associated with a given hub.
1398    int64 count = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
1399  }
1400
1401  // The number of spokes in the hub that are inactive for this reason.
1402  message SpokeStateReasonCount {
1403    // Output only. The reason that a spoke is inactive.
1404    Spoke.StateReason.Code state_reason_code = 1
1405        [(google.api.field_behavior) = OUTPUT_ONLY];
1406
1407    // Output only. The total number of spokes that are inactive for a
1408    // particular reason and associated with a given hub.
1409    int64 count = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
1410  }
1411
1412  // Output only. Counts the number of spokes of each type that are
1413  // associated with a specific hub.
1414  repeated SpokeTypeCount spoke_type_counts = 1
1415      [(google.api.field_behavior) = OUTPUT_ONLY];
1416
1417  // Output only. Counts the number of spokes that are in each state
1418  // and associated with a given hub.
1419  repeated SpokeStateCount spoke_state_counts = 2
1420      [(google.api.field_behavior) = OUTPUT_ONLY];
1421
1422  // Output only. Counts the number of spokes that are inactive for each
1423  // possible reason and associated with a given hub.
1424  repeated SpokeStateReasonCount spoke_state_reason_counts = 3
1425      [(google.api.field_behavior) = OUTPUT_ONLY];
1426}
1427
1428// The request for
1429// [HubService.GetGroup][google.cloud.networkconnectivity.v1.HubService.GetGroup].
1430message GetGroupRequest {
1431  // Required. The name of the route table resource.
1432  string name = 1 [
1433    (google.api.field_behavior) = REQUIRED,
1434    (google.api.resource_reference) = {
1435      type: "networkconnectivity.googleapis.com/Group"
1436    }
1437  ];
1438}
1439