// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

syntax = "proto3";

package hashicorp.consul.mesh.v2beta1;

// +kubebuilder:validation:Enum=MESH_GATEWAY_MODE_UNSPECIFIED;MESH_GATEWAY_MODE_NONE;MESH_GATEWAY_MODE_LOCAL;MESH_GATEWAY_MODE_REMOTE
// +kubebuilder:validation:Type=string
enum MeshGatewayMode {
  // MESH_GATEWAY_MODE_UNSPECIFIED represents no specific mode and should be
  // used to indicate that the decision on the mode will be made by other
  // configuration or default settings.
  MESH_GATEWAY_MODE_UNSPECIFIED = 0;

  // MESH_GATEWAY_MODE_NONE is the mode to use when traffic should not be
  // routed through any gateway but instead be routed directly to the
  // destination.
  MESH_GATEWAY_MODE_NONE = 1;

  // MESH_GATEWAY_MODE_LOCAL is the mode to use when traffic should be routed
  // to the local gateway. The local gateway will then ensure that the
  // connection is proxied correctly to its final destination. This mode will
  // most often be needed for workloads that are prevented from making outbound
  // requests outside of their local network/environment. In this case a
  // gateway will sit at the edge of sit at the edge of the network and will
  // proxy outbound connections potentially to other gateways in remote
  // environments.
  MESH_GATEWAY_MODE_LOCAL = 2;

  // MESH_GATEWAY_MODE_REMOTE is the mode to use when traffic should be routed
  // to a remote mesh gateway. This mode will most often be used when workloads
  // can make outbound requests destined for a remote network/environment but
  // where the remote network/environment will not allow direct addressing. The
  // mesh gateway in the remote environment will sit at the edge and proxy
  // requests into that environment.
  MESH_GATEWAY_MODE_REMOTE = 3;
}
