trace.proto 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900
  1. // Copyright 2022 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. syntax = "proto3";
  15. package google.cloud.networkmanagement.v1;
  16. option csharp_namespace = "Google.Cloud.NetworkManagement.V1";
  17. option go_package = "google.golang.org/genproto/googleapis/cloud/networkmanagement/v1;networkmanagement";
  18. option java_multiple_files = true;
  19. option java_outer_classname = "TraceProto";
  20. option java_package = "com.google.cloud.networkmanagement.v1";
  21. option php_namespace = "Google\\Cloud\\NetworkManagement\\V1";
  22. option ruby_package = "Google::Cloud::NetworkManagement::V1";
  23. // Trace represents one simulated packet forwarding path.
  24. //
  25. // * Each trace contains multiple ordered steps.
  26. // * Each step is in a particular state with associated configuration.
  27. // * State is categorized as final or non-final states.
  28. // * Each final state has a reason associated.
  29. // * Each trace must end with a final state (the last step).
  30. // ```
  31. // |---------------------Trace----------------------|
  32. // Step1(State) Step2(State) --- StepN(State(final))
  33. // ```
  34. message Trace {
  35. // Derived from the source and destination endpoints definition specified by
  36. // user request, and validated by the data plane model.
  37. // If there are multiple traces starting from different source locations, then
  38. // the endpoint_info may be different between traces.
  39. EndpointInfo endpoint_info = 1;
  40. // A trace of a test contains multiple steps from the initial state to the
  41. // final state (delivered, dropped, forwarded, or aborted).
  42. //
  43. // The steps are ordered by the processing sequence within the simulated
  44. // network state machine. It is critical to preserve the order of the steps
  45. // and avoid reordering or sorting them.
  46. repeated Step steps = 2;
  47. }
  48. // A simulated forwarding path is composed of multiple steps.
  49. // Each step has a well-defined state and an associated configuration.
  50. message Step {
  51. // Type of states that are defined in the network state machine.
  52. // Each step in the packet trace is in a specific state.
  53. enum State {
  54. // Unspecified state.
  55. STATE_UNSPECIFIED = 0;
  56. // Initial state: packet originating from a Compute Engine instance.
  57. // An InstanceInfo is populated with starting instance information.
  58. START_FROM_INSTANCE = 1;
  59. // Initial state: packet originating from the internet.
  60. // The endpoint information is populated.
  61. START_FROM_INTERNET = 2;
  62. // Initial state: packet originating from a VPC or on-premises network
  63. // with internal source IP.
  64. // If the source is a VPC network visible to the user, a NetworkInfo
  65. // is populated with details of the network.
  66. START_FROM_PRIVATE_NETWORK = 3;
  67. // Initial state: packet originating from a Google Kubernetes Engine cluster
  68. // master. A GKEMasterInfo is populated with starting instance information.
  69. START_FROM_GKE_MASTER = 21;
  70. // Initial state: packet originating from a Cloud SQL instance.
  71. // A CloudSQLInstanceInfo is populated with starting instance information.
  72. START_FROM_CLOUD_SQL_INSTANCE = 22;
  73. // Config checking state: verify ingress firewall rule.
  74. APPLY_INGRESS_FIREWALL_RULE = 4;
  75. // Config checking state: verify egress firewall rule.
  76. APPLY_EGRESS_FIREWALL_RULE = 5;
  77. // Config checking state: verify route.
  78. APPLY_ROUTE = 6;
  79. // Config checking state: match forwarding rule.
  80. APPLY_FORWARDING_RULE = 7;
  81. // Config checking state: packet sent or received under foreign IP
  82. // address and allowed.
  83. SPOOFING_APPROVED = 8;
  84. // Forwarding state: arriving at a Compute Engine instance.
  85. ARRIVE_AT_INSTANCE = 9;
  86. // Forwarding state: arriving at a Compute Engine internal load balancer.
  87. ARRIVE_AT_INTERNAL_LOAD_BALANCER = 10;
  88. // Forwarding state: arriving at a Compute Engine external load balancer.
  89. ARRIVE_AT_EXTERNAL_LOAD_BALANCER = 11;
  90. // Forwarding state: arriving at a Cloud VPN gateway.
  91. ARRIVE_AT_VPN_GATEWAY = 12;
  92. // Forwarding state: arriving at a Cloud VPN tunnel.
  93. ARRIVE_AT_VPN_TUNNEL = 13;
  94. // Transition state: packet header translated.
  95. NAT = 14;
  96. // Transition state: original connection is terminated and a new proxied
  97. // connection is initiated.
  98. PROXY_CONNECTION = 15;
  99. // Final state: packet could be delivered.
  100. DELIVER = 16;
  101. // Final state: packet could be dropped.
  102. DROP = 17;
  103. // Final state: packet could be forwarded to a network with an unknown
  104. // configuration.
  105. FORWARD = 18;
  106. // Final state: analysis is aborted.
  107. ABORT = 19;
  108. // Special state: viewer of the test result does not have permission to
  109. // see the configuration in this step.
  110. VIEWER_PERMISSION_MISSING = 20;
  111. }
  112. // A description of the step. Usually this is a summary of the state.
  113. string description = 1;
  114. // Each step is in one of the pre-defined states.
  115. State state = 2;
  116. // This is a step that leads to the final state Drop.
  117. bool causes_drop = 3;
  118. // Project ID that contains the configuration this step is validating.
  119. string project_id = 4;
  120. // Configuration or metadata associated with each step.
  121. // The configuration is filtered based on viewer's permission. If a viewer
  122. // has no permission to view the configuration in this step, for non-final
  123. // states a special state is populated (VIEWER_PERMISSION_MISSING), and for
  124. // final state the configuration is cleared.
  125. oneof step_info {
  126. // Display information of a Compute Engine instance.
  127. InstanceInfo instance = 5;
  128. // Display information of a Compute Engine firewall rule.
  129. FirewallInfo firewall = 6;
  130. // Display information of a Compute Engine route.
  131. RouteInfo route = 7;
  132. // Display information of the source and destination under analysis.
  133. // The endpoint information in an intermediate state may differ with the
  134. // initial input, as it might be modified by state like NAT,
  135. // or Connection Proxy.
  136. EndpointInfo endpoint = 8;
  137. // Display information of a Compute Engine forwarding rule.
  138. ForwardingRuleInfo forwarding_rule = 9;
  139. // Display information of a Compute Engine VPN gateway.
  140. VpnGatewayInfo vpn_gateway = 10;
  141. // Display information of a Compute Engine VPN tunnel.
  142. VpnTunnelInfo vpn_tunnel = 11;
  143. // Display information of the final state "deliver" and reason.
  144. DeliverInfo deliver = 12;
  145. // Display information of the final state "forward" and reason.
  146. ForwardInfo forward = 13;
  147. // Display information of the final state "abort" and reason.
  148. AbortInfo abort = 14;
  149. // Display information of the final state "drop" and reason.
  150. DropInfo drop = 15;
  151. // Display information of the load balancers.
  152. LoadBalancerInfo load_balancer = 16;
  153. // Display information of a Google Cloud network.
  154. NetworkInfo network = 17;
  155. // Display information of a Google Kubernetes Engine cluster master.
  156. GKEMasterInfo gke_master = 18;
  157. // Display information of a Cloud SQL instance.
  158. CloudSQLInstanceInfo cloud_sql_instance = 19;
  159. }
  160. }
  161. // For display only. Metadata associated with a Compute Engine instance.
  162. message InstanceInfo {
  163. // Name of a Compute Engine instance.
  164. string display_name = 1;
  165. // URI of a Compute Engine instance.
  166. string uri = 2;
  167. // Name of the network interface of a Compute Engine instance.
  168. string interface = 3;
  169. // URI of a Compute Engine network.
  170. string network_uri = 4;
  171. // Internal IP address of the network interface.
  172. string internal_ip = 5;
  173. // External IP address of the network interface.
  174. string external_ip = 6;
  175. // Network tags configured on the instance.
  176. repeated string network_tags = 7;
  177. // Service account authorized for the instance.
  178. string service_account = 8 [deprecated = true];
  179. }
  180. // For display only. Metadata associated with a Compute Engine network.
  181. message NetworkInfo {
  182. // Name of a Compute Engine network.
  183. string display_name = 1;
  184. // URI of a Compute Engine network.
  185. string uri = 2;
  186. // The IP range that matches the test.
  187. string matched_ip_range = 4;
  188. }
  189. // For display only. Metadata associated with a VPC firewall rule, an implied
  190. // VPC firewall rule, or a hierarchical firewall policy rule.
  191. message FirewallInfo {
  192. // The firewall rule's type.
  193. enum FirewallRuleType {
  194. // Unspecified type.
  195. FIREWALL_RULE_TYPE_UNSPECIFIED = 0;
  196. // Hierarchical firewall policy rule. For details, see
  197. // [Hierarchical firewall policies
  198. // overview](https://cloud.google.com/vpc/docs/firewall-policies).
  199. HIERARCHICAL_FIREWALL_POLICY_RULE = 1;
  200. // VPC firewall rule. For details, see
  201. // [VPC firewall rules
  202. // overview](https://cloud.google.com/vpc/docs/firewalls).
  203. VPC_FIREWALL_RULE = 2;
  204. // Implied VPC firewall rule. For details, see
  205. // [Implied
  206. // rules](https://cloud.google.com/vpc/docs/firewalls#default_firewall_rules).
  207. IMPLIED_VPC_FIREWALL_RULE = 3;
  208. }
  209. // The display name of the VPC firewall rule. This field is not applicable
  210. // to hierarchical firewall policy rules.
  211. string display_name = 1;
  212. // The URI of the VPC firewall rule. This field is not applicable to
  213. // implied firewall rules or hierarchical firewall policy rules.
  214. string uri = 2;
  215. // Possible values: INGRESS, EGRESS
  216. string direction = 3;
  217. // Possible values: ALLOW, DENY
  218. string action = 4;
  219. // The priority of the firewall rule.
  220. int32 priority = 5;
  221. // The URI of the VPC network that the firewall rule is associated with.
  222. // This field is not applicable to hierarchical firewall policy rules.
  223. string network_uri = 6;
  224. // The target tags defined by the VPC firewall rule. This field is not
  225. // applicable to hierarchical firewall policy rules.
  226. repeated string target_tags = 7;
  227. // The target service accounts specified by the firewall rule.
  228. repeated string target_service_accounts = 8;
  229. // The hierarchical firewall policy that this rule is associated with.
  230. // This field is not applicable to VPC firewall rules.
  231. string policy = 9;
  232. // The firewall rule's type.
  233. FirewallRuleType firewall_rule_type = 10;
  234. }
  235. // For display only. Metadata associated with a Compute Engine route.
  236. message RouteInfo {
  237. // Type of route:
  238. enum RouteType {
  239. // Unspecified type. Default value.
  240. ROUTE_TYPE_UNSPECIFIED = 0;
  241. // Route is a subnet route automatically created by the system.
  242. SUBNET = 1;
  243. // Static route created by the user, including the default route to the
  244. // internet.
  245. STATIC = 2;
  246. // Dynamic route exchanged between BGP peers.
  247. DYNAMIC = 3;
  248. // A subnet route received from peering network.
  249. PEERING_SUBNET = 4;
  250. // A static route received from peering network.
  251. PEERING_STATIC = 5;
  252. // A dynamic route received from peering network.
  253. PEERING_DYNAMIC = 6;
  254. }
  255. // Type of next hop:
  256. enum NextHopType {
  257. // Unspecified type. Default value.
  258. NEXT_HOP_TYPE_UNSPECIFIED = 0;
  259. // Next hop is an IP address.
  260. NEXT_HOP_IP = 1;
  261. // Next hop is a Compute Engine instance.
  262. NEXT_HOP_INSTANCE = 2;
  263. // Next hop is a VPC network gateway.
  264. NEXT_HOP_NETWORK = 3;
  265. // Next hop is a peering VPC.
  266. NEXT_HOP_PEERING = 4;
  267. // Next hop is an interconnect.
  268. NEXT_HOP_INTERCONNECT = 5;
  269. // Next hop is a VPN tunnel.
  270. NEXT_HOP_VPN_TUNNEL = 6;
  271. // Next hop is a VPN gateway. This scenario only happens when tracing
  272. // connectivity from an on-premises network to Google Cloud through a VPN.
  273. // The analysis simulates a packet departing from the on-premises network
  274. // through a VPN tunnel and arriving at a Cloud VPN gateway.
  275. NEXT_HOP_VPN_GATEWAY = 7;
  276. // Next hop is an internet gateway.
  277. NEXT_HOP_INTERNET_GATEWAY = 8;
  278. // Next hop is blackhole; that is, the next hop either does not exist or is
  279. // not running.
  280. NEXT_HOP_BLACKHOLE = 9;
  281. // Next hop is the forwarding rule of an Internal Load Balancer.
  282. NEXT_HOP_ILB = 10;
  283. // Next hop is a
  284. // [router appliance
  285. // instance](https://cloud.google.com/network-connectivity/docs/network-connectivity-center/concepts/ra-overview).
  286. NEXT_HOP_ROUTER_APPLIANCE = 11;
  287. }
  288. // Type of route.
  289. RouteType route_type = 8;
  290. // Type of next hop.
  291. NextHopType next_hop_type = 9;
  292. // Name of a Compute Engine route.
  293. string display_name = 1;
  294. // URI of a Compute Engine route.
  295. // Dynamic route from cloud router does not have a URI.
  296. // Advertised route from Google Cloud VPC to on-premises network also does
  297. // not have a URI.
  298. string uri = 2;
  299. // Destination IP range of the route.
  300. string dest_ip_range = 3;
  301. // Next hop of the route.
  302. string next_hop = 4;
  303. // URI of a Compute Engine network.
  304. string network_uri = 5;
  305. // Priority of the route.
  306. int32 priority = 6;
  307. // Instance tags of the route.
  308. repeated string instance_tags = 7;
  309. }
  310. // For display only. Metadata associated with a Compute Engine forwarding rule.
  311. message ForwardingRuleInfo {
  312. // Name of a Compute Engine forwarding rule.
  313. string display_name = 1;
  314. // URI of a Compute Engine forwarding rule.
  315. string uri = 2;
  316. // Protocol defined in the forwarding rule that matches the test.
  317. string matched_protocol = 3;
  318. // Port range defined in the forwarding rule that matches the test.
  319. string matched_port_range = 6;
  320. // VIP of the forwarding rule.
  321. string vip = 4;
  322. // Target type of the forwarding rule.
  323. string target = 5;
  324. // Network URI. Only valid for Internal Load Balancer.
  325. string network_uri = 7;
  326. }
  327. // For display only. Metadata associated with a load balancer.
  328. message LoadBalancerInfo {
  329. // The type definition for a load balancer:
  330. enum LoadBalancerType {
  331. // Type is unspecified.
  332. LOAD_BALANCER_TYPE_UNSPECIFIED = 0;
  333. // Internal TCP/UDP load balancer.
  334. INTERNAL_TCP_UDP = 1;
  335. // Network TCP/UDP load balancer.
  336. NETWORK_TCP_UDP = 2;
  337. // HTTP(S) proxy load balancer.
  338. HTTP_PROXY = 3;
  339. // TCP proxy load balancer.
  340. TCP_PROXY = 4;
  341. // SSL proxy load balancer.
  342. SSL_PROXY = 5;
  343. }
  344. // The type definition for a load balancer backend configuration:
  345. enum BackendType {
  346. // Type is unspecified.
  347. BACKEND_TYPE_UNSPECIFIED = 0;
  348. // Backend Service as the load balancer's backend.
  349. BACKEND_SERVICE = 1;
  350. // Target Pool as the load balancer's backend.
  351. TARGET_POOL = 2;
  352. }
  353. // Type of the load balancer.
  354. LoadBalancerType load_balancer_type = 1;
  355. // URI of the health check for the load balancer.
  356. string health_check_uri = 2;
  357. // Information for the loadbalancer backends.
  358. repeated LoadBalancerBackend backends = 3;
  359. // Type of load balancer's backend configuration.
  360. BackendType backend_type = 4;
  361. // Backend configuration URI.
  362. string backend_uri = 5;
  363. }
  364. // For display only. Metadata associated with a specific load balancer backend.
  365. message LoadBalancerBackend {
  366. // State of a health check firewall configuration:
  367. enum HealthCheckFirewallState {
  368. // State is unspecified. Default state if not populated.
  369. HEALTH_CHECK_FIREWALL_STATE_UNSPECIFIED = 0;
  370. // There are configured firewall rules to allow health check probes to the
  371. // backend.
  372. CONFIGURED = 1;
  373. // There are firewall rules configured to allow partial health check ranges
  374. // or block all health check ranges.
  375. // If a health check probe is sent from denied IP ranges,
  376. // the health check to the backend will fail. Then, the backend will be
  377. // marked unhealthy and will not receive traffic sent to the load balancer.
  378. MISCONFIGURED = 2;
  379. }
  380. // Name of a Compute Engine instance or network endpoint.
  381. string display_name = 1;
  382. // URI of a Compute Engine instance or network endpoint.
  383. string uri = 2;
  384. // State of the health check firewall configuration.
  385. HealthCheckFirewallState health_check_firewall_state = 3;
  386. // A list of firewall rule URIs allowing probes from health check IP ranges.
  387. repeated string health_check_allowing_firewall_rules = 4;
  388. // A list of firewall rule URIs blocking probes from health check IP ranges.
  389. repeated string health_check_blocking_firewall_rules = 5;
  390. }
  391. // For display only. Metadata associated with a Compute Engine VPN gateway.
  392. message VpnGatewayInfo {
  393. // Name of a VPN gateway.
  394. string display_name = 1;
  395. // URI of a VPN gateway.
  396. string uri = 2;
  397. // URI of a Compute Engine network where the VPN gateway is configured.
  398. string network_uri = 3;
  399. // IP address of the VPN gateway.
  400. string ip_address = 4;
  401. // A VPN tunnel that is associated with this VPN gateway.
  402. // There may be multiple VPN tunnels configured on a VPN gateway, and only
  403. // the one relevant to the test is displayed.
  404. string vpn_tunnel_uri = 5;
  405. // Name of a Google Cloud region where this VPN gateway is configured.
  406. string region = 6;
  407. }
  408. // For display only. Metadata associated with a Compute Engine VPN tunnel.
  409. message VpnTunnelInfo {
  410. // Types of VPN routing policy. For details, refer to [Networks and Tunnel
  411. // routing](https://cloud.google.com/network-connectivity/docs/vpn/concepts/choosing-networks-routing/).
  412. enum RoutingType {
  413. // Unspecified type. Default value.
  414. ROUTING_TYPE_UNSPECIFIED = 0;
  415. // Route based VPN.
  416. ROUTE_BASED = 1;
  417. // Policy based routing.
  418. POLICY_BASED = 2;
  419. // Dynamic (BGP) routing.
  420. DYNAMIC = 3;
  421. }
  422. // Name of a VPN tunnel.
  423. string display_name = 1;
  424. // URI of a VPN tunnel.
  425. string uri = 2;
  426. // URI of the VPN gateway at local end of the tunnel.
  427. string source_gateway = 3;
  428. // URI of a VPN gateway at remote end of the tunnel.
  429. string remote_gateway = 4;
  430. // Remote VPN gateway's IP address.
  431. string remote_gateway_ip = 5;
  432. // Local VPN gateway's IP address.
  433. string source_gateway_ip = 6;
  434. // URI of a Compute Engine network where the VPN tunnel is configured.
  435. string network_uri = 7;
  436. // Name of a Google Cloud region where this VPN tunnel is configured.
  437. string region = 8;
  438. // Type of the routing policy.
  439. RoutingType routing_type = 9;
  440. }
  441. // For display only. The specification of the endpoints for the test.
  442. // EndpointInfo is derived from source and destination Endpoint and validated
  443. // by the backend data plane model.
  444. message EndpointInfo {
  445. // Source IP address.
  446. string source_ip = 1;
  447. // Destination IP address.
  448. string destination_ip = 2;
  449. // IP protocol in string format, for example: "TCP", "UDP", "ICMP".
  450. string protocol = 3;
  451. // Source port. Only valid when protocol is TCP or UDP.
  452. int32 source_port = 4;
  453. // Destination port. Only valid when protocol is TCP or UDP.
  454. int32 destination_port = 5;
  455. // URI of the network where this packet originates from.
  456. string source_network_uri = 6;
  457. // URI of the network where this packet is sent to.
  458. string destination_network_uri = 7;
  459. }
  460. // Details of the final state "deliver" and associated resource.
  461. message DeliverInfo {
  462. // Deliver target types:
  463. enum Target {
  464. // Target not specified.
  465. TARGET_UNSPECIFIED = 0;
  466. // Target is a Compute Engine instance.
  467. INSTANCE = 1;
  468. // Target is the internet.
  469. INTERNET = 2;
  470. // Target is a Google API.
  471. GOOGLE_API = 3;
  472. // Target is a Google Kubernetes Engine cluster master.
  473. GKE_MASTER = 4;
  474. // Target is a Cloud SQL instance.
  475. CLOUD_SQL_INSTANCE = 5;
  476. }
  477. // Target type where the packet is delivered to.
  478. Target target = 1;
  479. // URI of the resource that the packet is delivered to.
  480. string resource_uri = 2;
  481. }
  482. // Details of the final state "forward" and associated resource.
  483. message ForwardInfo {
  484. // Forward target types.
  485. enum Target {
  486. // Target not specified.
  487. TARGET_UNSPECIFIED = 0;
  488. // Forwarded to a VPC peering network.
  489. PEERING_VPC = 1;
  490. // Forwarded to a Cloud VPN gateway.
  491. VPN_GATEWAY = 2;
  492. // Forwarded to a Cloud Interconnect connection.
  493. INTERCONNECT = 3;
  494. // Forwarded to a Google Kubernetes Engine Container cluster master.
  495. GKE_MASTER = 4;
  496. // Forwarded to the next hop of a custom route imported from a peering VPC.
  497. IMPORTED_CUSTOM_ROUTE_NEXT_HOP = 5;
  498. // Forwarded to a Cloud SQL instance.
  499. CLOUD_SQL_INSTANCE = 6;
  500. }
  501. // Target type where this packet is forwarded to.
  502. Target target = 1;
  503. // URI of the resource that the packet is forwarded to.
  504. string resource_uri = 2;
  505. }
  506. // Details of the final state "abort" and associated resource.
  507. message AbortInfo {
  508. // Abort cause types:
  509. enum Cause {
  510. // Cause is unspecified.
  511. CAUSE_UNSPECIFIED = 0;
  512. // Aborted due to unknown network.
  513. // The reachability analysis cannot proceed because the user does not have
  514. // access to the host project's network configurations, including firewall
  515. // rules and routes. This happens when the project is a service project and
  516. // the endpoints being traced are in the host project's network.
  517. UNKNOWN_NETWORK = 1;
  518. // Aborted because the IP address(es) are unknown.
  519. UNKNOWN_IP = 2;
  520. // Aborted because no project information can be derived from the test
  521. // input.
  522. UNKNOWN_PROJECT = 3;
  523. // Aborted because the user lacks the permission to access all or part of
  524. // the network configurations required to run the test.
  525. PERMISSION_DENIED = 4;
  526. // Aborted because no valid source endpoint is derived from the input test
  527. // request.
  528. NO_SOURCE_LOCATION = 5;
  529. // Aborted because the source and/or destination endpoint specified in
  530. // the test are invalid. The possible reasons that an endpoint is
  531. // invalid include: malformed IP address; nonexistent instance or
  532. // network URI; IP address not in the range of specified network URI; and
  533. // instance not owning the network interface in the specified network.
  534. INVALID_ARGUMENT = 6;
  535. // Aborted because traffic is sent from a public IP to an instance without
  536. // an external IP.
  537. NO_EXTERNAL_IP = 7;
  538. // Aborted because none of the traces matches destination information
  539. // specified in the input test request.
  540. UNINTENDED_DESTINATION = 8;
  541. // Aborted because the number of steps in the trace exceeding a certain
  542. // limit which may be caused by routing loop.
  543. TRACE_TOO_LONG = 9;
  544. // Aborted due to internal server error.
  545. INTERNAL_ERROR = 10;
  546. // Aborted because the source endpoint could not be found.
  547. SOURCE_ENDPOINT_NOT_FOUND = 11;
  548. // Aborted because the source network does not match the source endpoint.
  549. MISMATCHED_SOURCE_NETWORK = 12;
  550. // Aborted because the destination endpoint could not be found.
  551. DESTINATION_ENDPOINT_NOT_FOUND = 13;
  552. // Aborted because the destination network does not match the destination
  553. // endpoint.
  554. MISMATCHED_DESTINATION_NETWORK = 14;
  555. // Aborted because the test scenario is not supported.
  556. UNSUPPORTED = 15;
  557. }
  558. // Causes that the analysis is aborted.
  559. Cause cause = 1;
  560. // URI of the resource that caused the abort.
  561. string resource_uri = 2;
  562. // List of project IDs that the user has specified in the request but does
  563. // not have permission to access network configs. Analysis is aborted in this
  564. // case with the PERMISSION_DENIED cause.
  565. repeated string projects_missing_permission = 3;
  566. }
  567. // Details of the final state "drop" and associated resource.
  568. message DropInfo {
  569. // Drop cause types:
  570. enum Cause {
  571. // Cause is unspecified.
  572. CAUSE_UNSPECIFIED = 0;
  573. // Destination external address cannot be resolved to a known target. If
  574. // the address is used in a Google Cloud project, provide the project ID
  575. // as test input.
  576. UNKNOWN_EXTERNAL_ADDRESS = 1;
  577. // A Compute Engine instance can only send or receive a packet with a
  578. // foreign IP address if ip_forward is enabled.
  579. FOREIGN_IP_DISALLOWED = 2;
  580. // Dropped due to a firewall rule, unless allowed due to connection
  581. // tracking.
  582. FIREWALL_RULE = 3;
  583. // Dropped due to no routes.
  584. NO_ROUTE = 4;
  585. // Dropped due to invalid route. Route's next hop is a blackhole.
  586. ROUTE_BLACKHOLE = 5;
  587. // Packet is sent to a wrong (unintended) network. Example: you trace a
  588. // packet from VM1:Network1 to VM2:Network2, however, the route configured
  589. // in Network1 sends the packet destined for VM2's IP addresss to Network3.
  590. ROUTE_WRONG_NETWORK = 6;
  591. // Packet with internal destination address sent to the internet gateway.
  592. PRIVATE_TRAFFIC_TO_INTERNET = 7;
  593. // Instance with only an internal IP address tries to access Google API and
  594. // services, but private Google access is not enabled.
  595. PRIVATE_GOOGLE_ACCESS_DISALLOWED = 8;
  596. // Instance with only an internal IP address tries to access external hosts,
  597. // but Cloud NAT is not enabled in the subnet, unless special configurations
  598. // on a VM allow this connection.
  599. NO_EXTERNAL_ADDRESS = 9;
  600. // Destination internal address cannot be resolved to a known target. If
  601. // this is a shared VPC scenario, verify if the service project ID is
  602. // provided as test input. Otherwise, verify if the IP address is being
  603. // used in the project.
  604. UNKNOWN_INTERNAL_ADDRESS = 10;
  605. // Forwarding rule's protocol and ports do not match the packet header.
  606. FORWARDING_RULE_MISMATCH = 11;
  607. // Forwarding rule does not have backends configured.
  608. FORWARDING_RULE_NO_INSTANCES = 12;
  609. // Firewalls block the health check probes to the backends and cause
  610. // the backends to be unavailable for traffic from the load balancer.
  611. // For more details, see [Health check firewall
  612. // rules](https://cloud.google.com/load-balancing/docs/health-checks#firewall_rules).
  613. FIREWALL_BLOCKING_LOAD_BALANCER_BACKEND_HEALTH_CHECK = 13;
  614. // Packet is sent from or to a Compute Engine instance that is not in a
  615. // running state.
  616. INSTANCE_NOT_RUNNING = 14;
  617. // The type of traffic is blocked and the user cannot configure a firewall
  618. // rule to enable it. See [Always blocked
  619. // traffic](https://cloud.google.com/vpc/docs/firewalls#blockedtraffic) for
  620. // more details.
  621. TRAFFIC_TYPE_BLOCKED = 15;
  622. // Access to Google Kubernetes Engine cluster master's endpoint is not
  623. // authorized. See [Access to the cluster
  624. // endpoints](https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters#access_to_the_cluster_endpoints)
  625. // for more details.
  626. GKE_MASTER_UNAUTHORIZED_ACCESS = 16;
  627. // Access to the Cloud SQL instance endpoint is not authorized.
  628. // See [Authorizing with authorized
  629. // networks](https://cloud.google.com/sql/docs/mysql/authorize-networks) for
  630. // more details.
  631. CLOUD_SQL_INSTANCE_UNAUTHORIZED_ACCESS = 17;
  632. // Packet was dropped inside Google Kubernetes Engine Service.
  633. DROPPED_INSIDE_GKE_SERVICE = 18;
  634. // Packet was dropped inside Cloud SQL Service.
  635. DROPPED_INSIDE_CLOUD_SQL_SERVICE = 19;
  636. // Packet was dropped because there is no peering between the originating
  637. // network and the Google Managed Services Network.
  638. GOOGLE_MANAGED_SERVICE_NO_PEERING = 20;
  639. // Packet was dropped because the Cloud SQL instance has neither a private
  640. // nor a public IP address.
  641. CLOUD_SQL_INSTANCE_NO_IP_ADDRESS = 21;
  642. }
  643. // Cause that the packet is dropped.
  644. Cause cause = 1;
  645. // URI of the resource that caused the drop.
  646. string resource_uri = 2;
  647. }
  648. // For display only. Metadata associated with a Google Kubernetes Engine (GKE)
  649. // cluster master.
  650. message GKEMasterInfo {
  651. // URI of a GKE cluster.
  652. string cluster_uri = 2;
  653. // URI of a GKE cluster network.
  654. string cluster_network_uri = 4;
  655. // Internal IP address of a GKE cluster master.
  656. string internal_ip = 5;
  657. // External IP address of a GKE cluster master.
  658. string external_ip = 6;
  659. }
  660. // For display only. Metadata associated with a Cloud SQL instance.
  661. message CloudSQLInstanceInfo {
  662. // Name of a Cloud SQL instance.
  663. string display_name = 1;
  664. // URI of a Cloud SQL instance.
  665. string uri = 2;
  666. // URI of a Cloud SQL instance network or empty string if the instance does
  667. // not have one.
  668. string network_uri = 4;
  669. // Internal IP address of a Cloud SQL instance.
  670. string internal_ip = 5;
  671. // External IP address of a Cloud SQL instance.
  672. string external_ip = 6;
  673. // Region in which the Cloud SQL instance is running.
  674. string region = 7;
  675. }