07070100000000000081A4000003E800000064000000015E17A24700001DE7000000000000000000000000000000000000001F00000000cilium-proxy-20200109/.bazelrc    # Copied from https://github.com/envoyproxy/envoy/blob/master/.bazelrc
# Envoy specific Bazel build/test options.

# Bazel doesn't need more than 200MB of memory for local build based on memory profiling:
# https://docs.bazel.build/versions/master/skylark/performance.html#memory-profiling
# The default JVM max heapsize is 1/4 of physical memory up to 32GB which could be large
# enough to consume all memory constrained by cgroup in large host, which is the case in CircleCI.
# Limiting JVM heapsize here to let it do GC more when approaching the limit to
# leave room for compiler/linker.
startup --host_jvm_args=-Xmx512m

build --workspace_status_command=tools/get_workspace_status
build --experimental_remap_main_repo

# enable path normalization by default. See https://github.com/envoyproxy/envoy/pull/6519
build --define path_normalization_by_default=true
test --define path_normalization_by_default=true

build --experimental_local_memory_estimate
build --experimental_strict_action_env=true
build --host_force_python=PY2
build --action_env=BAZEL_LINKLIBS=-l%:libstdc++.a
build --action_env=BAZEL_LINKOPTS=-lm
build --host_javabase=@bazel_tools//tools/jdk:remote_jdk11
build --javabase=@bazel_tools//tools/jdk:remote_jdk11
build --copt=-fPIC

# We already have absl in the build, define absl=1 to tell googletest to use absl for backtrace.
build --define absl=1

# Pass PATH, CC and CXX variables from the environment.
build --action_env=CC
build --action_env=CXX
build --action_env=PATH

# Common flags for sanitizers
build:sanitizer --define tcmalloc=disabled
build:sanitizer --linkopt -ldl
build:sanitizer --build_tag_filters=-no_san
build:sanitizer --test_tag_filters=-no_san

# Common flags for Clang
build:clang --action_env=BAZEL_COMPILER=clang
build:clang --linkopt=-fuse-ld=lld

# Basic ASAN/UBSAN that works for gcc
build:asan --config=sanitizer
# ASAN install its signal handler, disable ours so the stacktrace will be printed by ASAN
build:asan --define signal_trace=disabled
build:asan --define ENVOY_CONFIG_ASAN=1
build:asan --copt -fsanitize=address,undefined
build:asan --linkopt -fsanitize=address,undefined
# TODO(lizan): vptr and function requires C++ UBSAN runtime which we're not currently linking to.
# Enable them when bazel has better support for that or with explicit linker options.
build:asan --copt -fno-sanitize=vptr,function
build:asan --linkopt -fno-sanitize=vptr,function
build:asan --copt -DADDRESS_SANITIZER=1
build:asan --copt -D__SANITIZE_ADDRESS__
build:asan --test_env=ASAN_OPTIONS=handle_abort=1:allow_addr2line=true:check_initialization_order=true:strict_init_order=true:detect_odr_violation=1
build:asan --test_env=UBSAN_OPTIONS=halt_on_error=true:print_stacktrace=1
build:asan --test_env=ASAN_SYMBOLIZER_PATH

# Clang ASAN/UBSAN
build:clang-asan --config=asan
build:clang-asan --linkopt -fuse-ld=lld

# macOS ASAN/UBSAN
build:macos-asan --config=asan
# Workaround, see https://github.com/bazelbuild/bazel/issues/6932
build:macos-asan --copt -Wno-macro-redefined
build:macos-asan --copt -D_FORTIFY_SOURCE=0
# Workaround, see https://github.com/bazelbuild/bazel/issues/4341
build:macos-asan --copt -DGRPC_BAZEL_BUILD
# Dynamic link cause issues like: `dyld: malformed mach-o: load commands size (59272) > 32768`
build:macos-asan --dynamic_mode=off

# Clang TSAN
build:clang-tsan --config=sanitizer
build:clang-tsan --define ENVOY_CONFIG_TSAN=1
build:clang-tsan --copt -fsanitize=thread
build:clang-tsan --linkopt -fsanitize=thread
build:clang-tsan --linkopt -fuse-ld=lld
# Needed due to https://github.com/libevent/libevent/issues/777
build:clang-tsan --copt -DEVENT__DISABLE_DEBUG_MODE

# Clang MSAN - broken today since we need to rebuild lib[std]c++ and external deps with MSAN
# support (see https://github.com/envoyproxy/envoy/issues/443).
build:clang-msan --config=sanitizer
build:clang-msan --define ENVOY_CONFIG_MSAN=1
build:clang-msan --copt -fsanitize=memory
build:clang-msan --linkopt -fsanitize=memory
build:clang-msan --copt -fsanitize-memory-track-origins=2

# Clang with libc++
# TODO(cmluciano) fix and re-enable _LIBCPP_VERSION testing for TCMALLOC in Envoy::Stats::TestUtil::hasDeterministicMallocStats
# and update stats_integration_test with appropriate m_per_cluster value
build:libc++ --config=clang
build:libc++ --action_env=CXXFLAGS=-stdlib=libc++
build:libc++ --action_env=BAZEL_CXXOPTS=-stdlib=libc++
build:libc++ --action_env=BAZEL_LINKLIBS=-l%:libc++.a:-l%:libc++abi.a:-lm
build:libc++ --define force_libcpp=enabled

# Optimize build for binary size reduction.
build:sizeopt -c opt --copt -Os

# Test options
build --test_env=HEAPCHECK=normal --test_env=PPROF_PATH

# Remote execution: https://docs.bazel.build/versions/master/remote-execution.html
build:rbe-toolchain --host_platform=@envoy_build_tools//toolchains:rbe_ubuntu_clang_platform
build:rbe-toolchain --platforms=@envoy_build_tools//toolchains:rbe_ubuntu_clang_platform
build:rbe-toolchain --action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1

build:rbe-toolchain-clang --config=rbe-toolchain
build:rbe-toolchain-clang --crosstool_top=@rbe_ubuntu_clang//cc:toolchain
build:rbe-toolchain-clang --extra_toolchains=@rbe_ubuntu_clang//config:cc-toolchain
build:rbe-toolchain-clang --action_env=CC=clang --action_env=CXX=clang++ --action_env=PATH=/usr/sbin:/usr/bin:/sbin:/bin:/opt/llvm/bin

build:rbe-toolchain-clang-libc++ --config=rbe-toolchain
build:rbe-toolchain-clang-libc++ --crosstool_top=@rbe_ubuntu_clang_libcxx//cc:toolchain
build:rbe-toolchain-clang-libc++ --extra_toolchains=@rbe_ubuntu_clang_libcxx//config:cc-toolchain
build:rbe-toolchain-clang-libc++ --action_env=CC=clang --action_env=CXX=clang++ --action_env=PATH=/usr/sbin:/usr/bin:/sbin:/bin:/opt/llvm/bin
build:rbe-toolchain-clang-libc++ --define force_libcpp=enabled

build:rbe-toolchain-gcc --config=rbe-toolchain
build:rbe-toolchain-gcc --crosstool_top=@rbe_ubuntu_gcc//cc:toolchain
build:rbe-toolchain-gcc --extra_toolchains=@rbe_ubuntu_gcc//config:cc-toolchain

build:remote --spawn_strategy=remote,sandboxed,local
build:remote --strategy=Javac=remote,sandboxed,local
build:remote --strategy=Closure=remote,sandboxed,local
build:remote --strategy=Genrule=remote,sandboxed,local
build:remote --remote_timeout=3600
build:remote --auth_enabled=true
build:remote --remote_download_toplevel

build:remote-clang --config=remote
build:remote-clang --config=rbe-toolchain-clang

# Docker sandbox
# NOTE: Update this from https://github.com/envoyproxy/envoy-build-tools/blob/master/.circleci/config.yml#L8
build:docker-sandbox --experimental_docker_image=envoyproxy/envoy-build-ubuntu@sha256:3ca8acc35fdb57ab26e1bb5f9488f37095f45acd77a12602510410dbefa00b58
build:docker-sandbox --spawn_strategy=docker
build:docker-sandbox --strategy=Javac=docker
build:docker-sandbox --strategy=Closure=docker
build:docker-sandbox --strategy=Genrule=docker
build:docker-sandbox --define=EXECUTOR=remote
build:docker-sandbox --experimental_docker_verbose
build:docker-sandbox --experimental_enable_docker_sandbox

build:docker-clang --config=docker-sandbox
build:docker-clang --config=rbe-toolchain-clang

# CI configurations
build:remote-ci --remote_cache=grpcs://remotebuildexecution.googleapis.com
build:remote-ci --remote_executor=grpcs://remotebuildexecution.googleapis.com

# Fuzz builds
build:asan-fuzzer --config=asan
build:asan-fuzzer --define=FUZZING_ENGINE=libfuzzer
build:asan-fuzzer --copt=-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
build:asan-fuzzer --copt=-fsanitize=fuzzer-no-link
# Remove UBSAN halt_on_error to avoid crashing on protobuf errors.
build:asan-fuzzer --test_env=UBSAN_OPTIONS=print_stacktrace=1

try-import clang.bazelrc
try-import user.bazelrc
 07070100000001000081A4000003E800000064000000015E17A24700000006000000000000000000000000000000000000002400000000cilium-proxy-20200109/BAZEL_VERSION   1.1.0
  07070100000002000081A4000003E800000064000000015E17A247000007F5000000000000000000000000000000000000001C00000000cilium-proxy-20200109/BUILD   licenses(["notice"])  # Apache 2

load(
    "@envoy//bazel:envoy_build_system.bzl",
    "envoy_cc_binary",
    "envoy_cc_test",
)

exports_files(["linux/bpf_common.h", "linux/bpf.h", "linux/type_mapper.h",
               "proxylib/libcilium.h", "proxylib/types.h"])

envoy_cc_binary(
    name = "cilium-envoy",
    repository = "@envoy",
    deps = [
        # Cilium filters.
        "//cilium:bpf_metadata_lib",
        "//cilium:network_filter_lib",
        "//cilium:l7policy_lib",
        "//cilium:tls_wrapper_lib",

        # Istio filters.
        # Cf. https://github.com/istio/proxy/blob/master/src/envoy/BUILD#L23
        #"@istio_proxy//src/envoy/http/authn:filter_lib",
        #"@istio_proxy//src/envoy/http/jwt_auth:http_filter_factory",
        #"@istio_proxy//src/envoy/http/mixer:filter_lib",
        #"@istio_proxy//src/envoy/tcp/mixer:filter_lib",
        #"@istio_proxy//src/envoy/tcp/tcp_cluster_rewrite:config_lib",

        "@envoy//source/exe:envoy_main_entry_lib",
    ],
)

envoy_cc_test(
    name = "cilium_integration_test",
    srcs = ["cilium_integration_test.cc"],
    data = [
        "cilium_proxy_test.json",
        "proxylib/libcilium.so",
        "@envoy//test/config/integration/certs",
    ],
    repository = "@envoy",
    deps = [
        "//cilium:bpf_metadata_lib",
        "//cilium:network_filter_lib",
        "//cilium:l7policy_lib",
        "//cilium:tls_wrapper_lib",
        "@envoy//test/integration:http_integration_lib",
        #"@envoy//source/extensions/transport_sockets/tls:context_config_lib",
    ],
)

sh_test(
    name = "envoy_binary_test",
    srcs = ["envoy_binary_test.sh"],
    data = [":cilium-envoy"],
)

sh_binary(
    name = "check_format.py",
    srcs = ["@envoy//tools:check_format.py"],
    deps = [
        ":envoy_build_fixer.py",
        ":header_order.py",
    ],
)

sh_library(
    name = "header_order.py",
    srcs = ["@envoy//tools:header_order.py"],
)

sh_library(
    name = "envoy_build_fixer.py",
    srcs = ["@envoy//tools:envoy_build_fixer.py"],
)
   07070100000003000081A4000003E800000064000000015E17A247000003A9000000000000000000000000000000000000002100000000cilium-proxy-20200109/Dockerfile  #
# Cilium incremental build. Should be fast given builder-deps is up-to-date!
#
# cilium-builder tag is the Git SHA of the compatible build image commit.
# Keeping the old images available will allow older versions to be built
# while allowing the new versions to make changes that are not backwards compatible.
#
FROM quay.io/cilium/cilium-envoy-builder:61c816b2bb6dd33815793b717eb48a0ce246c790 as builder
LABEL maintainer="maintainer@cilium.io"
WORKDIR /go/src/github.com/cilium/cilium/envoy
COPY . ./
ARG V
#
# Please do not add any dependency updates before the 'make install' here,
# as that will mess with caching for incremental builds!
#
RUN ./tools/get_workspace_status
RUN make BAZEL_BUILD_OPTS=--jobs=2 PKG_BUILD=1 V=$V DESTDIR=/tmp/install cilium-envoy install

#
# Extract installed cilium-envoy binaries to an otherwise empty image
#
FROM scratch
LABEL maintainer="maintainer@cilium.io"
COPY --from=builder /tmp/install /
   07070100000004000081A4000003E800000064000000015E17A247000005F7000000000000000000000000000000000000002900000000cilium-proxy-20200109/Dockerfile.builder  #
# Builder dependencies. This takes a long time to build from scratch!
# Also note that if build fails due to C++ internal error or similar,
# it is possible that the image build needs more RAM than available by
# default on non-Linux docker installs.
#
# Using cilium-builder as the base to ensure libc etc. are in sync.
#
FROM quay.io/cilium/cilium-builder:2019-07-11 as builder
LABEL maintainer="maintainer@cilium.io"
WORKDIR /go/src/github.com/cilium/cilium/envoy
COPY . ./

#
# Additional Envoy Build dependencies
#
RUN apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get upgrade -y --no-install-recommends \
	&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
		automake \
		cmake \
		g++ \
		git \
		libtool \
		make \
		ninja-build \
		python3 \
		wget \
		zip \
	&& apt-get clean \
	&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

#
# Install Bazel
#
RUN export BAZEL_VERSION=`cat BAZEL_VERSION` \
	&& curl -sfL https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VERSION}/bazel-${BAZEL_VERSION}-installer-linux-x86_64.sh -o bazel-${BAZEL_VERSION}-installer-linux-x86_64.sh \
	&& chmod +x bazel-${BAZEL_VERSION}-installer-linux-x86_64.sh \
	&& ./bazel-${BAZEL_VERSION}-installer-linux-x86_64.sh \
	&& mv /usr/local/bin/bazel /usr/bin \
	&& rm bazel-${BAZEL_VERSION}-installer-linux-x86_64.sh

#
# Build and keep the cache
#
RUN make BAZEL_BUILD_OPTS=--jobs=1 PKG_BUILD=1 cilium-envoy && rm ./bazel-bin/cilium-envoy

#
# Absolutely nothing after making envoy deps!
#
 07070100000005000081A4000003E800000064000000015E17A247000006CC000000000000000000000000000000000000003000000000cilium-proxy-20200109/Dockerfile.istio_proxy.in   #
# Pre-built cilium-envoy image
#
FROM quay.io/cilium/cilium-envoy:5fd04721d8db90e1d5f3ad1ac8ba4f6ac91e623a as cilium-envoy

FROM istio/proxytproxy:@ISTIO_VERSION@

# Istio image runs on Xenial, which has too old glibc for Envoy built on Bionic
# As a stopgap measure update the glibc to the required version (2.27)
RUN echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu bionic main" | tee /etc/apt/sources.list.d/bionic.list \
    && apt-get update \
	&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
		libc6=2.27-3ubuntu1 \
	&& apt-get clean \
	&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Replace Istio's Envoy binary with Cilium's.
COPY --from=cilium-envoy /usr/bin/cilium-envoy /usr/local/bin/envoy

# pilot-agent and envoy may run with effective uid 0 in order to run envoy with
# CAP_NET_ADMIN, so any iptables rule matching on "-m owner --uid-owner
# istio-proxy" will not match connections from those processes anymore.
# Instead, rely on the process's effective gid being istio-proxy and create a
# "-m owner --gid-owner istio-proxy" iptables rule in istio-iptables.sh.
RUN \
chgrp 1337 /usr/local/bin/envoy && \
chmod 2755 /usr/local/bin/envoy

# Override the Envoy bootstrap to configure Envoy to use API v2 and to define
# the "xds-grpc-cilium" cluster used by the Cilium filters to connect to Cilium
# agent via a Unix domain socket.
# This file is adapted from Istio's API v2 bootstrap:
# $ wget https://raw.githubusercontent.com/istio/istio/1.2.2/tools/packaging/common/envoy_bootstrap_v2.json
# $ patch -o envoy_bootstrap_tmpl.json < envoy_bootstrap_v2.patch
COPY envoy_bootstrap_tmpl.json /var/lib/istio/envoy/envoy_bootstrap_tmpl.json

ENTRYPOINT ["/usr/local/bin/pilot-agent"]
07070100000006000081A4000003E800000064000000015E17A247000004FF000000000000000000000000000000000000003600000000cilium-proxy-20200109/Dockerfile.istio_proxy_debug.in #
# Pre-built cilium-envoy image
#
FROM quay.io/cilium/cilium-envoy:5fd04721d8db90e1d5f3ad1ac8ba4f6ac91e623a as cilium-envoy

FROM istio/proxytproxy_debug:@ISTIO_VERSION@

# Replace Istio's Envoy binary with Cilium's.
COPY --from=cilium-envoy /usr/bin/cilium-envoy /usr/local/bin/envoy

# pilot-agent and envoy may run with effective uid 0 in order to run envoy with
# CAP_NET_ADMIN, so any iptables rule matching on "-m owner --uid-owner
# istio-proxy" will not match connections from those processes anymore.
# Instead, rely on the process's effective gid being istio-proxy and create a
# "-m owner --gid-owner istio-proxy" iptables rule in istio-iptables.sh.
RUN \
chgrp 1337 /usr/local/bin/envoy && \
chmod 2755 /usr/local/bin/envoy

# Override the Envoy bootstrap to configure Envoy to use API v2 and to define
# the "xds-grpc-cilium" cluster used by the Cilium filters to connect to Cilium
# agent via a Unix domain socket.
# This file is adapted from Istio's API v2 bootstrap:
# $ wget https://raw.githubusercontent.com/istio/istio/1.2.2/tools/packaging/common/envoy_bootstrap_v2.json
# $ patch -o envoy_bootstrap_tmpl.json < envoy_bootstrap_v2.patch
COPY envoy_bootstrap_tmpl.json /var/lib/istio/envoy/envoy_bootstrap_tmpl.json

ENTRYPOINT ["/usr/local/bin/pilot-agent"]
 07070100000007000081A4000003E800000064000000015E17A24700000E0B000000000000000000000000000000000000002100000000cilium-proxy-20200109/Gopkg.lock  # This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.


[[projects]]
  digest = "0:"
  name = "github.com/gogo/protobuf"
  packages = [
    "gogoproto",
    "proto",
    "protoc-gen-gogo/descriptor",
  ]
  pruneopts = "NUT"
  revision = "v1.2.1"

[[projects]]
  digest = "0:"
  name = "github.com/golang/protobuf"
  packages = [
    "proto",
    "protoc-gen-go/descriptor",
    "ptypes",
    "ptypes/any",
    "ptypes/duration",
    "ptypes/empty",
    "ptypes/struct",
    "ptypes/timestamp",
    "ptypes/wrappers",
  ]
  pruneopts = "NUT"
  revision = "b5d812f8a3706043e23a9cd5babf2e5423744d30"
  version = "v1.3.1"

[[projects]]
  digest = "0:"
  name = "github.com/lyft/protoc-gen-validate"
  packages = ["validate"]
  pruneopts = "NUT"
  revision = "v0.0.13"

[[projects]]
  branch = "master"
  digest = "0:"
  name = "golang.org/x/net"
  packages = [
    "http/httpguts",
    "http2",
    "http2/hpack",
    "idna",
    "internal/timeseries",
    "trace",
  ]
  pruneopts = "NUT"
  revision = "3ec19112720433827bbce8be9342797f5a6aaaf9"

[[projects]]
  branch = "master"
  digest = "0:"
  name = "golang.org/x/sys"
  packages = ["unix"]
  pruneopts = "NUT"
  revision = "61b9204099cb1bebc803c9ffb9b2d3acd9d457d9"

[[projects]]
  digest = "0:"
  name = "golang.org/x/text"
  packages = [
    "collate",
    "collate/build",
    "internal/colltab",
    "internal/gen",
    "internal/language",
    "internal/language/compact",
    "internal/tag",
    "internal/triegen",
    "internal/ucd",
    "language",
    "secure/bidirule",
    "transform",
    "unicode/bidi",
    "unicode/cldr",
    "unicode/norm",
    "unicode/rangetable",
  ]
  pruneopts = "NUT"
  revision = "342b2e1fbaa52c93f31447ad2c6abc048c63e475"
  version = "v0.3.2"

[[projects]]
  branch = "master"
  digest = "0:"
  name = "google.golang.org/genproto"
  packages = [
    "googleapis/api/annotations",
    "googleapis/rpc/status",
  ]
  pruneopts = "NUT"
  revision = "bb713bdc0e5239f2b68e560efbe1c701a6fe78f9"

[[projects]]
  digest = "0:"
  name = "google.golang.org/grpc"
  packages = [
    ".",
    "balancer",
    "balancer/base",
    "balancer/roundrobin",
    "binarylog/grpc_binarylog_v1",
    "codes",
    "connectivity",
    "credentials",
    "credentials/internal",
    "encoding",
    "encoding/proto",
    "grpclog",
    "internal",
    "internal/backoff",
    "internal/balancerload",
    "internal/binarylog",
    "internal/channelz",
    "internal/envconfig",
    "internal/grpcrand",
    "internal/grpcsync",
    "internal/syscall",
    "internal/transport",
    "keepalive",
    "metadata",
    "naming",
    "peer",
    "resolver",
    "resolver/dns",
    "resolver/passthrough",
    "stats",
    "status",
    "tap",
  ]
  pruneopts = "NUT"
  revision = "25c4f928eaa6d96443009bd842389fb4fa48664e"
  version = "v1.20.1"

[solve-meta]
  analyzer-name = "dep"
  analyzer-version = 1
  input-imports = [
    "github.com/gogo/protobuf/gogoproto",
    "github.com/golang/protobuf/proto",
    "github.com/golang/protobuf/ptypes",
    "github.com/golang/protobuf/ptypes/any",
    "github.com/golang/protobuf/ptypes/duration",
    "github.com/golang/protobuf/ptypes/empty",
    "github.com/golang/protobuf/ptypes/struct",
    "github.com/golang/protobuf/ptypes/timestamp",
    "github.com/golang/protobuf/ptypes/wrappers",
    "github.com/lyft/protoc-gen-validate/validate",
    "google.golang.org/genproto/googleapis/api/annotations",
    "google.golang.org/genproto/googleapis/rpc/status",
    "google.golang.org/grpc",
  ]
  solver-name = "gps-cdcl"
  solver-version = 1
 07070100000008000081A4000003E800000064000000015E17A247000000C0000000000000000000000000000000000000002100000000cilium-proxy-20200109/Gopkg.toml  [[constraint]]
  name = "github.com/envoyproxy/protoc-gen-validate"
  revision = "2feaabb13a5d697b80fcb938c0ce37b24c9381ee"

[prune]
  go-tests = true
  unused-packages = true
  non-go = true
07070100000009000081A4000003E800000064000000015E17A24700002C56000000000000000000000000000000000000001E00000000cilium-proxy-20200109/LICENSE                                  Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} Authors of Cilium

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

  0707010000000A000081A4000003E800000064000000015E17A24700001960000000000000000000000000000000000000001F00000000cilium-proxy-20200109/Makefile    # Copyright 2017-2019 Authors of Cilium
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

include Makefile.defs

CILIUM_ENVOY_BIN = ./bazel-bin/cilium-envoy
CILIUM_ENVOY_RELEASE_BIN = ./cilium-envoy
ENVOY_BINS = \
	$(CILIUM_ENVOY_BIN) \
	$(CILIUM_ENVOY_RELEASE_BIN) \
	./bazel-bin/cilium_integration_test
CHECK_FORMAT ?= ./bazel-bin/check_format.py.runfiles/envoy/tools/check_format.py

SHELL=/bin/bash -o pipefail
BAZEL ?= $(QUIET) bazel
BAZEL_FILTER ?=
BAZEL_OPTS ?=
BAZEL_TEST_OPTS ?= --jobs=1
BAZEL_CACHE ?= ~/.cache/bazel
BAZEL_ARCHIVE ?= ~/bazel-cache.tar.bz2
CLANG ?= clang
CLANG_FORMAT ?= clang-format
BUILDIFIER ?= buildifier
STRIP ?= $(QUIET) strip

ISTIO_VERSION = 1.2.2

DOCKER=$(QUIET)docker

BAZEL_BUILD_OPTS ?= --jobs=3

# Dockerfile builds require special options
ifdef PKG_BUILD
BAZEL_BUILD_OPTS += --local_resources 4096,2.0,1.0
all: precheck install-bazel clean-bins $(CILIUM_ENVOY_RELEASE_BIN) shutdown-bazel
else
all: precheck install-bazel clean-bins envoy-default api shutdown-bazel
endif

# Fetch and install Bazel if needed
install-bazel:
	tools/install_bazel.sh `cat BAZEL_VERSION`

ifdef KEEP_BAZEL_RUNNING
shutdown-bazel:
else
shutdown-bazel:
	$(BAZEL) shutdown
endif

SOURCE_VERSION =

# Use git only if in a Git repo
ifneq ($(wildcard $(dir $(lastword $(MAKEFILE_LIST)))/.git),)
	SOURCE_VERSION = $(shell git rev-parse HEAD)
else
	SOURCE_VERSION = $(shell cat SOURCE_VERSION)
endif

docker-image-builder: Dockerfile.builder clean
	$(DOCKER) build -f $< -t "quay.io/cilium/cilium-envoy-builder:$(SOURCE_VERSION)" .

docker-image-envoy: Dockerfile clean
	@$(ECHO_GEN) docker-image-envoy
	$(DOCKER) build -t "quay.io/cilium/cilium-envoy:$(SOURCE_VERSION)" .
	$(QUIET)echo "Push like this when ready:"
	$(QUIET)echo "docker push quay.io/cilium/cilium-envoy:$(SOURCE_VERSION)"

debug: envoy-debug

api: force-non-root Makefile.api
	$(MAKE) -f Makefile.api all

envoy-default: force-non-root
	@$(ECHO_BAZEL)
	-rm -f bazel-out/k8-fastbuild/bin/_objs/cilium-envoy/external/envoy/source/common/common/version_linkstamp.o
	$(BAZEL) $(BAZEL_OPTS) build $(BAZEL_BUILD_OPTS) //:cilium-envoy $(BAZEL_FILTER)

# Allow root build for release
$(CILIUM_ENVOY_BIN) $(CILIUM_ENVOY_RELEASE_BIN): force
	@$(ECHO_BAZEL)
	-rm -f bazel-out/k8-opt/bin/_objs/cilium-envoy/external/envoy/source/common/common/version_linkstamp.o
	$(BAZEL) $(BAZEL_OPTS) build $(BAZEL_BUILD_OPTS) -c opt //:cilium-envoy $(BAZEL_FILTER)
	$(STRIP) -o $(CILIUM_ENVOY_RELEASE_BIN) $(CILIUM_ENVOY_BIN)

Dockerfile.%: Dockerfile.%.in
	-sed "s/@ISTIO_VERSION@/$(ISTIO_VERSION)/" <$< >$@

docker-istio-proxy: Dockerfile.istio_proxy envoy_bootstrap_tmpl.json
	@$(ECHO_GEN) docker-istio-proxy
	$(DOCKER) build -f $< -t cilium/istio_proxy:$(ISTIO_VERSION) .
	$(QUIET)echo "Push like this when ready:"
	$(QUIET)echo "docker push cilium/istio_proxy:$(ISTIO_VERSION)"

docker-istio-proxy-debug: Dockerfile.istio_proxy_debug envoy_bootstrap_tmpl.json
	@$(ECHO_GEN) docker-istio-proxy-debug
	$(DOCKER) build -f $< -t cilium/istio_proxy_debug:$(ISTIO_VERSION) .
	$(QUIET)echo "Push like this when ready:"
	$(QUIET)echo "docker push cilium/istio_proxy_debug:$(ISTIO_VERSION)"

envoy-debug: force-non-root
	@$(ECHO_BAZEL)
	-rm -f bazel-out/k8-dbg/bin/_objs/envoy/external/envoy/source/common/common/version_linkstamp.o
	$(BAZEL) $(BAZEL_OPTS) build $(BAZEL_BUILD_OPTS) -c dbg //:cilium-envoy $(BAZEL_FILTER)

$(CHECK_FORMAT): force-non-root
	$(BAZEL) $(BAZEL_OPTS) build $(BAZEL_BUILD_OPTS) //:check_format.py

install: force-root
	$(INSTALL) -m 0755 -d $(DESTDIR)$(BINDIR)
	$(INSTALL) -m 0755 -T $(CILIUM_ENVOY_BIN) $(DESTDIR)$(BINDIR)/cilium-envoy
# Strip only non-debug builds
ifeq "$(findstring -dbg,$(realpath bazel-bin))" ""
	$(STRIP) $(DESTDIR)$(BINDIR)/cilium-envoy
endif

bazel-archive: force-non-root tests clean-bins
	-sudo rm -f $(BAZEL_ARCHIVE)
	echo "Archiving bazel cache ($(BAZEL_CACHE)), this will take some time..."
	cd $(dir $(BAZEL_CACHE)) && sudo tar cjf $(BAZEL_ARCHIVE) --atime-preserve=system $(notdir $(BAZEL_CACHE))

bazel-clean-archive: force-non-root veryclean bazel-archive

bazel-restore: $(BAZEL_ARCHIVE)
	echo "Clearing & restoring bazel archive ($(BAZEL_ARCHIVE))..."
	-sudo rm -Rf $(BAZEL_CACHE)
	-mkdir $(dir $(BAZEL_CACHE))
	cd $(dir $(BAZEL_CACHE)) && sudo tar xjf $(BAZEL_ARCHIVE) --warning=no-timestamp

# Remove the binaries to get fresh version SHA
clean-bins: force
	@$(ECHO_CLEAN) $(notdir $(shell pwd))
	-$(QUIET) rm -f $(ENVOY_BINS) \
		Dockerfile.istio_proxy \
		Dockerfile.istio_proxy_debug

clean: force clean-bins
	@$(ECHO_CLEAN) $(notdir $(shell pwd))
	-rm .dockerignore
	git status
	@echo "Bazel clean skipped, try 'make veryclean' instead."

veryclean: force clean-bins
	-sudo $(BAZEL) $(BAZEL_OPTS) clean
	-sudo rm -Rf $(BAZEL_CACHE)

precheck:
	tools/check_repositories.sh

check: $(CHECK_FORMAT) force-non-root
	CLANG_FORMAT=$(CLANG_FORMAT) BUILDIFIER=$(BUILDIFIER) $(CHECK_FORMAT) --add-excluded-prefixes="./linux/" check

fix: $(CHECK_FORMAT) force-non-root
	CLANG_FORMAT=$(CLANG_FORMAT) BUILDIFIER=$(BUILDIFIER) $(CHECK_FORMAT) --add-excluded-prefixes="./linux/" fix

# Run tests using the fastbuild by default.
tests: force-non-root
	$(BAZEL) $(BAZEL_OPTS) test $(BAZEL_BUILD_OPTS) -c fastbuild //:envoy_binary_test $(BAZEL_FILTER)
	$(BAZEL) $(BAZEL_OPTS) test $(BAZEL_BUILD_OPTS) -c fastbuild $(BAZEL_TEST_OPTS) //:cilium_integration_test $(BAZEL_FILTER)

debug-tests: force-non-root
	$(BAZEL) $(BAZEL_OPTS) test $(BAZEL_BUILD_OPTS) -c debug $(BAZEL_TEST_OPTS) //:envoy_binary_test $(BAZEL_FILTER)
	$(BAZEL) $(BAZEL_OPTS) test $(BAZEL_BUILD_OPTS) -c debug $(BAZEL_TEST_OPTS) //:cilium_integration_test $(BAZEL_FILTER)

.PHONY: \
	install-bazel \
	shutdown-bazel \
	bazel-restore \
	docker-istio-proxy \
	docker-istio-proxy-debug \
	force \
	force-non-root \
	force-root

force :;

force-root:
ifndef PKG_BUILD
ifneq ($(USER),root)
	$(error This target must be run as root!)
endif
endif

force-non-root:
ifeq ($(USER),root)
	$(error This target cannot be run as root!)
endif
0707010000000B000081A4000003E800000064000000015E17A24700000E58000000000000000000000000000000000000002300000000cilium-proxy-20200109/Makefile.api    # Copyright 2018 Authors of Cilium
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

include Makefile.quiet

# Depends on Envoy dependencies, Envoy must be built first

PROTOC ?= bazel-out/host/bin/external/com_google_protobuf/protoc
BIN_PATH ?= bazel-out/host/bin/external/com_github_golang_protobuf/protoc-gen-go/linux_amd64_stripped:bazel-out/host/bin/external/com_envoyproxy_protoc_gen_validate/linux_amd64_stripped

ENVOY_API_PROTO_PATH = bazel-proxy/external/envoy/api
CILIUM_PROTO_PATH = .
PROTO_DEPS = \
	-I bazel-proxy/external/com_google_protobuf/src \
	-I bazel-proxy/external/com_google_googleapis \
	-I bazel-proxy/external/com_envoyproxy_protoc_gen_validate \
	-I bazel-proxy/external/opencensus_proto \
	-I bazel-proxy/external/prometheus_metrics_model

GO_OUT = go

# Skip draft Envoy APIs that do not compile.
ENVOY_RAW_PROTOS := $(strip $(shell find -H $(ENVOY_API_PROTO_PATH)/envoy \( -name *.proto -and -not -path *service/metrics/v2* -and -not -path */v3alpha/* \) -print))
ENVOY_API_PROTOS := $(subst $(ENVOY_API_PROTO_PATH)/,,$(ENVOY_RAW_PROTOS))

ENVOY_PROTO_SOURCES := $(addprefix $(ENVOY_API_PROTO_PATH)/,$(ENVOY_API_PROTOS))
ENVOY_PROTO_DIRS := $(sort $(dir $(ENVOY_PROTO_SOURCES)))
ENVOY_GO_TARGETS := $(addprefix $(GO_OUT)/,$(ENVOY_API_PROTOS:.proto=.pb.go))
# Produce a raw list of package mappings
RAW_GO_MAPPINGS := $(foreach proto,$(ENVOY_API_PROTOS),$(proto)=github.com/cilium/proxy/go/$(dir $(proto)))

CILIUM_PROTO_SOURCES := \
	cilium/api/accesslog.proto \
	cilium/api/bpf_metadata.proto \
	cilium/api/l7policy.proto \
	cilium/api/network_filter.proto \
	cilium/api/npds.proto \
	cilium/api/nphds.proto
CILIUM_PROTO_DIRS := $(sort $(dir $(CILIUM_PROTO_SOURCES)))
CILIUM_GO_TARGETS := $(addprefix $(GO_OUT)/,$(CILIUM_PROTO_SOURCES:.proto=.pb.go)) \
	$(addprefix $(GO_OUT)/,$(CILIUM_PROTO_SOURCES:.proto=.pb.validate.go))
RAW_GO_MAPPINGS += $(foreach proto,$(CILIUM_PROTO_SOURCES),$(proto)=github.com/cilium/proxy/go/$(dir $(proto)))

# Add mappings to vendored dependencies
RAW_GO_MAPPINGS += gogoproto/gogo.proto=github.com/gogo/protobuf/gogoproto/
RAW_GO_MAPPINGS += google/rpc/status.proto=google.golang.org/genproto/googleapis/rpc/status/

# Add mapping separators and remove the trailing slash
# but first create "/ " and ",M"
file_sep := /
file_sep +=
map_sep := ,M
GO_MAPPINGS := $(patsubst %/,%,$(map_sep)$(subst $(file_sep),$(map_sep),$(RAW_GO_MAPPINGS)))

all: $(ENVOY_API_PROTO_PATH) $(ENVOY_GO_TARGETS) $(CILIUM_GO_TARGETS)

$(ENVOY_GO_TARGETS): $(ENVOY_PROTO_SOURCES) Makefile.api
	$(QUIET)set -e; \
	for path in $(ENVOY_PROTO_DIRS) ; do \
		$(ECHO_GEN) envoy/$$path; \
		PATH=$(PATH):$(BIN_PATH) $(PROTOC) -I $(ENVOY_API_PROTO_PATH) -I $(CILIUM_PROTO_PATH) $(PROTO_DEPS) --go_out=plugins=grpc$(GO_MAPPINGS):$(GO_OUT) $${path}*.proto; \
	done

$(CILIUM_GO_TARGETS): $(CILIUM_PROTO_SOURCES) Makefile.api
	$(QUIET)set -e; \
	for path in $(CILIUM_PROTO_DIRS) ; do \
		$(ECHO_GEN) envoy/$$path; \
		PATH=$(PATH):$(BIN_PATH) $(PROTOC) -I $(ENVOY_API_PROTO_PATH) -I $(CILIUM_PROTO_PATH) $(PROTO_DEPS) --go_out=plugins=grpc$(GO_MAPPINGS):$(GO_OUT) --validate_out=lang=go$(GO_MAPPINGS):$(GO_OUT) $${path}*.proto; \
	done

.PHONY: all
0707010000000C000081A4000003E800000064000000015E17A2470000013E000000000000000000000000000000000000002400000000cilium-proxy-20200109/Makefile.defs   ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
include $(ROOT_DIR)/Makefile.quiet

PREFIX?=/usr
BINDIR?=$(PREFIX)/bin
LIBDIR?=$(PREFIX)/lib
RUNDIR?=/var/run
CONFDIR?=/etc

# GO_NOQUIET should not have any Makefile directives.
GO_NOQUIET = go
GO = $(QUIET)$(GO_NOQUIET)
INSTALL = $(QUIET)install
  0707010000000D000081A4000003E800000064000000015E17A24700000230000000000000000000000000000000000000002500000000cilium-proxy-20200109/Makefile.quiet  ifeq ($(V),0)
	QUIET=@
	ECHO_CC=echo "  CC    $(notdir $(shell pwd))/$@"
	ECHO_GEN=echo "  GEN   $(notdir $(shell pwd))/"
	ECHO_GO=echo "  GO    $(notdir $(shell pwd))/$@"
	ECHO_CHECK=echo "  CHECK"
	ECHO_BAZEL=echo "  BAZEL $(notdir $(shell pwd))/$(notdir $(shell dirname $(ENVOY_BIN)))/$@"
	ECHO_GINKGO=echo "  GINKG $(notdir $(shell pwd))"
	ECHO_CLEAN=echo "  CLEAN"
	SPHINXOPTS+="-q"
else
	# The whitespace at below EOLs is required for verbose case!
	ECHO_CC=: 
	ECHO_GEN=: 
	ECHO_GO=: 
	ECHO_CHECK=: 
	ECHO_BAZEL=: 
	ECHO_GINKGO=: 
	ECHO_CLEAN=: 
endif

0707010000000E000081A4000003E800000064000000015E17A24700000762000000000000000000000000000000000000002600000000cilium-proxy-20200109/README.Istio.md # Envoy binary for Istio sidecar proxy

The integration of Cilium and Istio requires building artifacts from
several repositories in order to build Docker images.  Some of those
artifacts require changes that have not yet been merged upstream.

This document provides the instructions to build the Cilium-specific
Istio images.

## Build the Istio binaries

Build the Istio binaries, especially a `pilot-discovery` modified to
configure Cilium filters in every HTTP filter chain.  This work is
being developed in Cilium's `inject-cilium-filters` branch, which is
based on Istio's release-1.0 branch. Make sure that when you build
the Istio binaries that you are using a Linux box meeting the
requirements of Istio.


    mkdir -p ${GOPATH}/src/istio.io
    cd ${GOPATH}/src/istio.io
    git clone git@github.com:cilium/istio.git
    git checkout inject-cilium-filters
    git submodule sync
    git submodule update --init --recursive --remote
    git submodule update --force --checkout
    make build

## Build the required upstream Istio Docker images

Only one image needs to be built: `cilium/istio_pilot`.

    TAG=1.0.2 make docker.pilot

The `istio/proxytproxy` and `istio/proxytproxy_debug` for pre-releases are not
available on Docker Hub. If the version built is a pre-release, build
them here:

    TAG=1.0.2 make docker.proxytproxy docker.proxytproxy_debug

## Build Cilium's sidecar proxy Docker images

    mkdir -p ${GOPATH}/src/github.com/cilium
    cd ${GOPATH}/src/github.com/cilium
    git clone git@github.com:cilium/cilium.git
    cd cilium/envoy
    # Update ISTIO_VERSION if needed in envoy/Makefile
    make docker-istio-proxy docker-istio-proxy-debug

## Push the Docker images to Docker Hub

    docker login -u ...
    docker image push cilium/istio_pilot:1.0.2
    docker image push cilium/istio_proxy:1.0.2
    docker image push cilium/istio_proxy_debug:1.0.2
  0707010000000F000081A4000003E800000064000000015E17A247000004B0000000000000000000000000000000000000002000000000cilium-proxy-20200109/README.md   # Cilium Proxy

This project provides the Envoy binary with additional Cilium filters.

## Building

To build the Cilium Proxy, Bazel 0.19.0 or later is required.

To build the binary:

```
make
```

To build Docker images with Envoy and Istio:

```
make docker-image-envoy
make docker-istio-proxy
```

## How it works

[Envoy](https://github.com/envoyproxy/envoy) and
[Istio Proxy](https://github.com/istio/proxy) are provided as Bazel
repositories and build dependencies. This repository provides a new
Envoy binary target which links together Cilium filters, Istio filters
and Envoy's main library (`@envoy//source/exe:envoy_main_lib`). Cilium
filters use Envoy API and Envoy libraries as dependencies.

## Updating Gopkg.toml

1) Extract the `ENVOY_SHA` variable from from WORKSPACE

2) Go to `https://raw.githubusercontent.com/envoyproxy/envoy/${ENVOY_SHA}/api/bazel/repository_locations.bzl`

3) Extract `GOGOPROTO_RELEASE` and `PGV_RELEASE` variables.

4) Update the `Gopkg.toml` where `GOGOPROTO_RELEASE` is the revision of `github.com/gogo/protobuf`

5) Update the `Gopkg.toml` where `PGV_RELEASE` is the revision of `github.com/lyft/protoc-gen-validate`

6) Execute `dep ensure -no-vendor`
07070100000010000081A4000003E800000064000000015E17A24700000823000000000000000000000000000000000000002000000000cilium-proxy-20200109/WORKSPACE   workspace(name = "cilium")

#
# We grep for the following line to generate SOURCE_VERSION file for non-git
# distribution builds. This line must start with the string ENVOY_SHA followed by
# an equals sign and a git SHA in double quotes.
#
# No other line in this file may have ENVOY_SHA followed by an equals sign!
#
ENVOY_SHA = "fc40c08a807111943c4b3cbe11df494f3e0df4d4"
ENVOY_SHA256 = "f6bb1bfbd5a6681ef4898f396e671ff4adcd372f6dca8d0cfa980f8b91914ff1"

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "envoy",
    url = "https://github.com/jrajahalme/envoy/archive/" + ENVOY_SHA + ".tar.gz",
    sha256 = ENVOY_SHA256,
    strip_prefix = "envoy-" + ENVOY_SHA,
    patches = [
        "@//patches:sni_support_fix.patch",
    ],
    patch_args = ["-p1"],
)

#
# Bazel does not do transitive dependencies, so we must basically
# include all of Envoy's WORKSPACE file below, with the following
# changes:
# - Skip the 'workspace(name = "envoy")' line as we already defined
#   the workspace above.
# - loads of "//..." need to be renamed as "@envoy//..."
#

load("@envoy//bazel:api_binding.bzl", "envoy_api_binding")
envoy_api_binding()

load("@envoy//bazel:api_repositories.bzl", "envoy_api_dependencies")
envoy_api_dependencies()

load("@envoy//bazel:repositories.bzl", "envoy_dependencies")
envoy_dependencies()

load("@envoy//bazel:dependency_imports.bzl", "envoy_dependency_imports")
envoy_dependency_imports()

# Dependencies for Istio filters.
# Cf. https://github.com/istio/proxy.
# Version 1.2.2
# ISTIO_PROXY_SHA = "a975561b980463f08689d3debe33bb9eefc80c3d"
# ISTIO_PROXY_SHA256 = "c0123fe73be4c9f2fe5e673952743ceb836f5972a8377ea876d90b7ab63af6eb"

#http_archive(
#    name = "istio_proxy",
#    url = "https://github.com/istio/proxy/archive/" + ISTIO_PROXY_SHA + ".tar.gz",
#    sha256 = ISTIO_PROXY_SHA256,
#    strip_prefix = "proxy-" + ISTIO_PROXY_SHA,
#)

#load("@istio_proxy//:repositories.bzl", "mixerapi_dependencies")
#mixerapi_dependencies()

#bind(
#    name = "boringssl_crypto",
#    actual = "//external:ssl",
#)
 07070100000011000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000001D00000000cilium-proxy-20200109/cilium  07070100000012000081A4000003E800000064000000015E17A24700001E15000000000000000000000000000000000000002300000000cilium-proxy-20200109/cilium/BUILD    licenses(["notice"])  # Apache 2

load(
    "@envoy//bazel:envoy_build_system.bzl",
    "envoy_cc_library",
    "envoy_package",
)

envoy_package()

envoy_cc_library(
    name = "tls_wrapper_lib",
    visibility = ["//visibility:public"],
    srcs = ["tls_wrapper.cc"],
    hdrs = ["tls_wrapper.h"],
    repository = "@envoy",
    deps = [
        "@envoy//include/envoy/network:transport_socket_interface",
        "@envoy//include/envoy/registry",
	"@envoy//include/envoy/server:transport_socket_config_interface",
	"@envoy//source/server:transport_socket_config_lib",
        "@envoy//source/extensions/transport_sockets/tls:ssl_socket_lib",
        "//cilium:network_policy_lib",
        "//cilium:socket_option_lib",
    ],
)

envoy_cc_library(
    name = "network_policy_lib",
    srcs = [
	"network_policy.cc",
    ],	    	
    hdrs = [
        "network_policy.h",
    ],
    repository = "@envoy",
    deps = [
        "@envoy//source/exe:envoy_common_lib",
        "@envoy//source/common/common:logger_lib",
        "@envoy//source/common/network:address_lib",
        "@envoy//source/common/local_info:local_info_lib",
        "@envoy//include/envoy/config:subscription_interface",
        "@envoy//include/envoy/singleton:manager_interface",
        "@envoy//source/common/router:config_utility_lib",
        "//cilium/api:npds_cc_proto",
        "//cilium:accesslog_lib",
	"//cilium:conntrack_lib",
	"//cilium:grpc_subscription_lib",
    ],
)

envoy_cc_library(
    name = "socket_option_lib",
    hdrs = [
        "socket_option.h",
    ],
    repository = "@envoy",
    deps = [
        "@envoy//include/envoy/network:listen_socket_interface",
        "@envoy//source/common/common:logger_lib",
        "//cilium:conntrack_lib",
        "//cilium:proxymap_lib",
    ],
)

envoy_cc_library(
    name = "grpc_subscription_lib",
    visibility = ["//visibility:public"],
    srcs = [
        "grpc_subscription.cc",
    ],
    hdrs = [
        "grpc_subscription.h",
    ],
    repository = "@envoy",
    deps = [
        "@envoy//source/exe:envoy_common_lib",
        "@envoy//source/common/config:grpc_mux_lib",
        "@envoy//source/common/config:grpc_mux_subscription_lib",
        "@envoy//include/envoy/config:subscription_interface",
        "@envoy//include/envoy/event:dispatcher_interface",
        "@envoy//include/envoy/grpc:async_client_interface",
        "@envoy_api//envoy/api/v2/core:pkg_cc_proto",
    ],
)

envoy_cc_library(
    name = "l7policy_lib",
    visibility = ["//visibility:public"],
    srcs = [
        "l7policy.cc",
    ],
    hdrs = [
        "l7policy.h",
    ],
    repository = "@envoy",
    deps = [
        "@envoy//include/envoy/config:subscription_interface",
        "//cilium/api:l7policy_cc_proto",
        "//cilium:accesslog_lib",
        "//cilium:network_policy_lib",
        "//cilium:socket_option_lib",
    ],
)

envoy_cc_library(
    name = "accesslog_lib",
    visibility = ["//visibility:public"],
    srcs = [
        "accesslog.cc",
    ],
    hdrs = [
        "accesslog.h",
    ],
    repository = "@envoy",
    deps = [
        "@envoy//source/exe:envoy_common_lib",
        "//cilium:socket_option_lib",
        "//cilium/api:accesslog_proto_cc_proto",
    ],
)

envoy_cc_library(
    name = "bpf_lib",
    srcs = [
        "bpf.cc",
    ],
    hdrs = [
        "bpf.h",
        "//:linux/bpf.h",
        "//:linux/bpf_common.h",
        "//:linux/type_mapper.h",
    ],
    repository = "@envoy",
    deps = [
        "@envoy//source/common/common:logger_lib",
    ],
)

envoy_cc_library(
    name = "ipcache_lib",
    srcs = [
        "ipcache.cc",
    ],
    hdrs = [
        "ipcache.h",
    ],
    repository = "@envoy",
    deps = [
        "@envoy//include/envoy/singleton:manager_interface",
        "@envoy//source/common/common:assert_lib",
        "@envoy//source/common/common:logger_lib",
        "@envoy//source/common/network:address_lib",
        "//cilium:bpf_lib",
    ],
)

envoy_cc_library(
    name = "proxymap_lib",
    srcs = [
        "proxymap.cc",
    ],
    hdrs = [
        "proxymap.h",
    ],
    repository = "@envoy",
    deps = [
        "@envoy//include/envoy/network:listen_socket_interface",
        "@envoy//include/envoy/network:connection_interface",
        "@envoy//include/envoy/singleton:manager_interface",
        "@envoy//source/common/common:assert_lib",
        "@envoy//source/common/common:logger_lib",
        "@envoy//source/common/network:address_lib",
        "//cilium:bpf_lib",
    ],
)

envoy_cc_library(
    name = "conntrack_lib",
    srcs = [
        "conntrack.cc",
    ],
    hdrs = [
        "conntrack.h",
    ],
    repository = "@envoy",
    deps = [
        "@envoy//include/envoy/network:listen_socket_interface",
        "@envoy//include/envoy/network:connection_interface",
        "@envoy//include/envoy/singleton:manager_interface",
        "@envoy//source/common/common:assert_lib",
        "@envoy//source/common/common:logger_lib",
        "@envoy//source/common/network:address_lib",
        "//cilium:bpf_lib",
    ],
)

envoy_cc_library(
    name = "proxylib_lib",
    srcs = [
        "proxylib.cc",
    ],
    hdrs = [
        "proxylib.h",
	"//:proxylib/libcilium.h",
	"//:proxylib/types.h"
    ],
    repository = "@envoy",
    deps = [
        "@envoy//include/envoy/network:connection_interface",
        "@envoy//include/envoy/singleton:manager_interface",
        "@envoy//source/common/buffer:buffer_lib",
        "@envoy//source/common/common:assert_lib",
        "@envoy//source/common/common:logger_lib",
    ],
)

envoy_cc_library(
    name = "network_filter_lib",
    visibility = ["//visibility:public"],
    srcs = [
        "network_filter.cc",
    ],
    hdrs = [
        "network_filter.h",
    ],
    repository = "@envoy",
    deps = [
        "@envoy//include/envoy/buffer:buffer_interface",
        "@envoy//include/envoy/network:connection_interface",
        "@envoy//include/envoy/network:filter_interface",
        "@envoy//include/envoy/registry:registry",
        "@envoy//include/envoy/server:filter_config_interface",
        "@envoy//source/common/common:assert_lib",
        "@envoy//source/common/common:logger_lib",
        "@envoy//source/common/network:address_lib",
        "//cilium/api:network_filter_cc_proto",
        "//cilium:conntrack_lib",
        "//cilium:network_policy_lib",
        "//cilium:proxylib_lib",
        "//cilium:proxymap_lib",
        "//cilium:socket_option_lib",
    ],
)

envoy_cc_library(
    name = "bpf_metadata_lib",
    visibility = ["//visibility:public"],
    srcs = [
        "bpf_metadata.cc",
        "host_map.cc",
    ],
    hdrs = [
        "bpf_metadata.h",
        "host_map.h",
    ],
    repository = "@envoy",
    deps = [
        "@envoy//include/envoy/buffer:buffer_interface",
        "@envoy//include/envoy/config:subscription_interface",
        "@envoy//include/envoy/network:connection_interface",
        "@envoy//include/envoy/network:filter_interface",
        "@envoy//include/envoy/singleton:manager_interface",
        "@envoy//include/envoy/registry:registry",
        "@envoy//include/envoy/server:filter_config_interface",
        "@envoy//source/common/common:assert_lib",
        "@envoy//source/common/common:logger_lib",
        "@envoy//source/common/network:address_lib",
        "@envoy//source/common/router:config_utility_lib",
        "//cilium/api:bpf_metadata_cc_proto",
        "//cilium/api:nphds_cc_proto",
        "//cilium:conntrack_lib",
        "//cilium:grpc_subscription_lib",
        "//cilium:ipcache_lib",
        "//cilium:proxymap_lib",
        "//cilium:socket_option_lib",
        "//cilium:network_policy_lib",
    ],
)
   07070100000013000081A4000003E800000064000000015E17A24700001A4B000000000000000000000000000000000000002A00000000cilium-proxy-20200109/cilium/accesslog.cc #include "accesslog.h"

#include <errno.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>

#include "common/common/utility.h"

#include "socket_option.h"

namespace Envoy {
namespace Cilium {

std::mutex AccessLog::logs_mutex;
std::map<std::string, AccessLogPtr> AccessLog::logs;

AccessLog *AccessLog::Open(std::string path) {
  std::lock_guard<std::mutex> guard1(logs_mutex);
  AccessLog *log;
  auto it = logs.find(path);
  if (it != logs.end()) {
    log = it->second.get();
    std::lock_guard<std::mutex> guard2(log->fd_mutex_);
    log->open_count_++;
    return log;
  }
  // Not found, open
  log = new AccessLog(path);
  if (!log->Connect()) {
    delete log;
    return nullptr;
  }
  logs.emplace(path, AccessLogPtr{log});
  return log;
}

void AccessLog::Close() {
  std::lock_guard<std::mutex> guard1(logs_mutex);
  std::lock_guard<std::mutex> guard2(fd_mutex_);
  open_count_--;

  if (open_count_ > 0) {
    return;
  }
  if (fd_ != -1) {
    ::close(fd_);
    fd_ = -1;
  }

  logs.erase(path_);
}

AccessLog::AccessLog(std::string path) : path_(path), fd_(-1), open_count_(1) {}

AccessLog::~AccessLog() {}

#define CONST_STRING_VIEW(NAME, STR) const absl::string_view NAME = {STR, sizeof (STR) - 1}

CONST_STRING_VIEW(pathSV, ":path");
CONST_STRING_VIEW(methodSV, ":method");
CONST_STRING_VIEW(authoritySV, ":authority");
CONST_STRING_VIEW(xForwardedProtoSV, "x-forwarded-proto");

void AccessLog::Entry::InitFromRequest(
    std::string policy_name, bool ingress, const Network::Connection *conn,
    const Http::HeaderMap &headers, const StreamInfo::StreamInfo &info) {
  auto time = info.startTime();
  entry.set_timestamp(std::chrono::duration_cast<std::chrono::nanoseconds>(
                          time.time_since_epoch())
                          .count());

  ::cilium::HttpProtocol proto;
  switch (info.protocol() ? info.protocol().value() : Http::Protocol::Http11) {
  case Http::Protocol::Http10:
    proto = ::cilium::HttpProtocol::HTTP10;
    break;
  case Http::Protocol::Http11:
  default: // Just to make compiler happy
    proto = ::cilium::HttpProtocol::HTTP11;
    break;
  case Http::Protocol::Http2:
    proto = ::cilium::HttpProtocol::HTTP2;
    break;
  }
  ::cilium::HttpLogEntry* http_entry = entry.mutable_http();
  http_entry->set_http_protocol(proto);

  entry.set_policy_name(policy_name);

  if (conn) {
    const auto& options_ = conn->socketOptions();
    if (options_) {
      const Cilium::SocketOption* option = nullptr;
      for (const auto& option_: *options_) {
	option = dynamic_cast<const Cilium::SocketOption*>(option_.get());
	if (option) {
	  entry.set_source_security_id(option->identity_);
	  entry.set_destination_security_id(option->destination_identity_);
	  break;
	}
      }
      if (!option) {
	ENVOY_CONN_LOG(warn, "accesslog: Cilium Socket Option not found", *conn);
      }
    }
    auto source_address = conn->remoteAddress();
    if (source_address != nullptr) {
      entry.set_source_address(source_address->asString());
    }
    auto destination_address = conn->localAddress();
    if (destination_address != nullptr) {
      entry.set_destination_address(destination_address->asString());
    }
  }

  // request headers
  headers.iterate(
      [](const Http::HeaderEntry &header, void *entry_) -> Http::HeaderMap::Iterate {
        const absl::string_view key = header.key().getStringView();
        const absl::string_view value = header.value().getStringView();
        auto entry = static_cast<::cilium::HttpLogEntry *>(entry_);

        if (key == pathSV) {
          entry->set_path(value.data(), value.size());
        } else if (key == methodSV) {
          entry->set_method(value.data(), value.size());
        } else if (key == authoritySV) {
          entry->set_host(value.data(), value.size());
        } else if (key == xForwardedProtoSV) {
          // Envoy sets the ":scheme" header later in the router filter
          // according to the upstream protocol (TLS vs. clear), but we want to
          // get the downstream scheme, which is provided in
          // "x-forwarded-proto".
          entry->set_scheme(value.data(), value.size());
        } else {
          ::cilium::KeyValue *kv = entry->add_headers();
          kv->set_key(key.data(), key.size());
          kv->set_value(value.data(), value.size());
        }
        return Http::HeaderMap::Iterate::Continue;
      },
      http_entry);

  entry.set_is_ingress(ingress);
}

void AccessLog::Entry::UpdateFromResponse(
    const Http::HeaderMap &headers, TimeSource& time_source) {
  auto time = time_source.systemTime();
  entry.set_timestamp(std::chrono::duration_cast<std::chrono::nanoseconds>(
                          time.time_since_epoch())
                          .count());

  ::cilium::HttpLogEntry* http_entry = entry.mutable_http();
  const Http::HeaderEntry *status_entry = headers.Status();
  if (status_entry) {
    uint64_t status;
    if (absl::SimpleAtoi(status_entry->value().getStringView(), &status)) {
      http_entry->set_status(status);
    }
  }
}

void AccessLog::Log(AccessLog::Entry &entry_,
                    ::cilium::EntryType entry_type) {
  ::cilium::LogEntry &entry = entry_.entry;

  entry.set_entry_type(entry_type);

  if (Connect()) {
    // encode protobuf
    std::string msg;
    entry.SerializeToString(&msg);
    ssize_t length = msg.length();
    ssize_t sent =
        ::send(fd_, msg.data(), length, MSG_DONTWAIT | MSG_EOR | MSG_NOSIGNAL);
    if (sent == length) {
      ENVOY_LOG(trace, "Cilium access log msg sent: {}", entry.DebugString());
      return;
    }
    if (sent == -1) {
      ENVOY_LOG(debug, "Cilium access log send failed: {}", strerror(errno));
    } else {
      ENVOY_LOG(debug, "Cilium access log send truncated by {} bytes.",
                length - sent);
    }
  }
  // Log the message in Envoy logs if it could not be sent to Cilium
  ENVOY_LOG(debug, "Cilium access log msg: {}", entry.DebugString());
}

bool AccessLog::Connect() {
  if (fd_ != -1) {
    return true;
  }
  if (path_.length() == 0) {
    return false;
  }
  std::lock_guard<std::mutex> guard(fd_mutex_);

  fd_ = ::socket(AF_UNIX, SOCK_SEQPACKET, 0);
  if (fd_ == -1) {
    ENVOY_LOG(error, "Can't create socket: {}", strerror(errno));
    return false;
  }

  struct sockaddr_un addr = {.sun_family = AF_UNIX, .sun_path = {}};
  strncpy(addr.sun_path, path_.c_str(), sizeof(addr.sun_path) - 1);
  if (::connect(fd_, reinterpret_cast<struct sockaddr *>(&addr), sizeof(addr)) == -1) {
    ENVOY_LOG(warn, "Connect to {} failed: {}", path_, strerror(errno));
    ::close(fd_);
    fd_ = -1;
    return false;
  }

  return true;
}

} // namespace Cilium
} // namespace Envoy
 07070100000014000081A4000003E800000064000000015E17A247000004A2000000000000000000000000000000000000002900000000cilium-proxy-20200109/cilium/accesslog.h  #pragma once

#include <map>
#include <mutex>
#include <string>

#include "envoy/http/header_map.h"
#include "envoy/network/connection.h"
#include "envoy/stream_info/stream_info.h"
#include "envoy/router/router.h"

#include "common/common/logger.h"

#include "cilium/api/accesslog.pb.h"

namespace Envoy {
namespace Cilium {

class AccessLog : Logger::Loggable<Logger::Id::router> {
public:
  static AccessLog *Open(std::string path);
  void Close();

  // wrapper for protobuf
  class Entry {
  public:
    void InitFromRequest(std::string policy_name, bool ingress, const Network::Connection *,
                         const Http::HeaderMap &, const StreamInfo::StreamInfo &);
    void UpdateFromResponse(const Http::HeaderMap &, TimeSource&);

    ::cilium::LogEntry entry{};
  };
  void Log(Entry &entry, ::cilium::EntryType);

  ~AccessLog();

private:
  static std::mutex logs_mutex;
  static std::map<std::string, std::unique_ptr<AccessLog>> logs;

  AccessLog(std::string path);

  bool Connect();

  const std::string path_;
  std::mutex fd_mutex_;
  int fd_;
  int open_count_;
};

typedef std::unique_ptr<AccessLog> AccessLogPtr;

} // namespace Cilium
} // namespace Envoy
  07070100000015000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000002100000000cilium-proxy-20200109/cilium/api  07070100000016000081A4000003E800000064000000015E17A24700000462000000000000000000000000000000000000002700000000cilium-proxy-20200109/cilium/api/BUILD    licenses(["notice"])  # Apache 2

load(
    "@envoy//bazel:envoy_build_system.bzl",
    "envoy_proto_library",
)

load(
    "@envoy_api//bazel:api_build_system.bzl",
    "api_cc_py_proto_library",
)

api_cc_py_proto_library(
    name = "bpf_metadata",
    srcs = ["bpf_metadata.proto"],
    visibility = ["//visibility:public"],
)

api_cc_py_proto_library(
    name = "network_filter",
    srcs = ["network_filter.proto"],
    visibility = ["//visibility:public"],
)

api_cc_py_proto_library(
    name = "l7policy",
    srcs = ["l7policy.proto"],
    visibility = ["//visibility:public"],
)

envoy_proto_library(
    name = "accesslog_proto",
    srcs = ["accesslog.proto"],
)

api_cc_py_proto_library(
    name = "npds",
    srcs = ["npds.proto"],
    visibility = ["//visibility:public"],
    deps = [
        "@envoy_api//envoy/api/v2:pkg",
        "@envoy_api//envoy/api/v2/core:pkg",
        "@envoy_api//envoy/api/v2/route:pkg",
    ],
)

api_cc_py_proto_library(
    name = "nphds",
    srcs = ["nphds.proto"],
    visibility = ["//visibility:public"],
    deps = [
        "@envoy_api//envoy/api/v2:pkg",
    ],
)
  07070100000017000081A4000003E800000064000000015E17A24700000AD6000000000000000000000000000000000000003100000000cilium-proxy-20200109/cilium/api/accesslog.proto  syntax = "proto3";

package cilium;

message KeyValue {
  string key = 1;
  string value = 2;
}

enum HttpProtocol {
  HTTP10 = 0;
  HTTP11 = 1;
  HTTP2 = 2;
}

enum EntryType {
  Request = 0;
  Response = 1;
  Denied = 2;
}

message HttpLogEntry {
  HttpProtocol http_protocol = 1;

  // Request info that is also retained for the response
  string scheme = 2;      // Envoy "x-forwarded-proto", e.g., "http", "https"
  string host = 3;        // Envoy ":authority" header
  string path = 4;        // Envoy ":path" header
  string method = 5;      // Envoy ":method" header

  // Request headers not included above
  repeated KeyValue headers = 6;

  // Response info
  uint32 status = 7;      // Envoy ":status" header, zero for request

  // missing_headers includes both headers that were added to the
  // request, and headers that were merely logged as missing
  repeated KeyValue missing_headers = 8;

  // rejected_headers includes headers that were flagged as unallowed,
  // which may have been removed, or merely logged and the request still
  // allowed, or the request may have been dropped due to them.
  repeated KeyValue rejected_headers = 9;
}

message L7LogEntry {
  string proto = 1;
  map<string, string> fields = 2;
}

message LogEntry {
  // The time that Cilium filter captured this log entry,
  // in, nanoseconds since 1/1/1970.
  uint64 timestamp = 1;

  // 'true' if the request was received by an ingress listener,
  // 'false' if received by an egress listener
  bool is_ingress = 15;

  EntryType entry_type = 3;

  // Cilium network policy resource name
  string policy_name = 4;

  // Cilium rule reference
  string cilium_rule_ref = 5;
  
  // Cilium security ID of the source and destination
  uint32 source_security_id = 6;
  uint32 destination_security_id = 16;

  // These fields record the original source and destination addresses,
  // stored in ipv4:port or [ipv6]:port format.
  string source_address = 7;
  string destination_address = 8;

  oneof l7 {
    HttpLogEntry http = 100;
    L7LogEntry generic_l7 = 102;
  }
  reserved "kafka"; reserved 101;

  //
  // Deprecated HTTP fields. Use the http field above instead.
  //
  HttpProtocol http_protocol = 2 [deprecated=true];

  // Request info that is also retained for the response
  string scheme = 9 [deprecated=true];      // Envoy "x-forwarded-proto", e.g., "http", "https"
  string host = 10 [deprecated=true];       // Envoy ":authority" header
  string path = 11 [deprecated=true];       // Envoy ":path" header
  string method = 12 [deprecated=true];     // Envoy ":method" header

  uint32 status = 13 [deprecated=true];     // Envoy ":status" header, zero for request
  
  // Request headers not included above
  repeated KeyValue headers = 14 [deprecated=true];
}
  07070100000018000081A4000003E800000064000000015E17A24700000241000000000000000000000000000000000000003400000000cilium-proxy-20200109/cilium/api/bpf_metadata.proto   syntax = "proto3";

package cilium;

message BpfMetadata {
  // File system root for bpf. Defaults to "/sys/fs/bpf" if left empty.
  string bpf_root = 1;

  // 'true' if the filter is on ingress listener, 'false' for egress listener.
  bool is_ingress = 2;

  // Use of the original source address requires kernel datapath support which may or may not be available.
  // 'true' if original source address functionality is availeble. Original source address use may still be
  // skipped in scenarios where it is knows to not work.
  bool may_use_original_source_address = 3;
}
   07070100000019000081A4000003E800000064000000015E17A24700000252000000000000000000000000000000000000003000000000cilium-proxy-20200109/cilium/api/l7policy.proto   syntax = "proto3";

package cilium;

import "google/protobuf/wrappers.proto";

message L7Policy {
  // Path to the unix domain socket for the cilium access log.
  string access_log_path = 1;

  // Cilium endpoint security policy to enforce.
  string policy_name = 2;

  // HTTP response body message for 403 status code.
  // If empty, "Access denied" will be used.
  string denied_403_body = 3;

  // 'true' if the filter is on ingress listener, 'false' for egress listener.
  // Value from the listener filter will be used if not specified here.
  google.protobuf.BoolValue is_ingress = 4;
}
  0707010000001A000081A4000003E800000064000000015E17A24700000167000000000000000000000000000000000000003600000000cilium-proxy-20200109/cilium/api/network_filter.proto syntax = "proto3";

package cilium;

message NetworkFilter {
  // Path to the proxylib to be opened
  string proxylib = 1;

  // Transparent set of parameters provided for proxylib initialization
  map<string, string> proxylib_params = 2;

  // L7 protocol identifier
  string l7_proto = 3;

  // Name of the policy to be enforced
  string policy_name = 4;
}
 0707010000001B000081A4000003E800000064000000015E17A24700002545000000000000000000000000000000000000002C00000000cilium-proxy-20200109/cilium/api/npds.proto   syntax = "proto3";

package cilium;

import "envoy/api/v2/core/address.proto";
import "envoy/api/v2/discovery.proto";
import "envoy/api/v2/route/route.proto";

import "google/api/annotations.proto";

import "validate/validate.proto";

// [#protodoc-title: Network policy management and NPDS]

// Each resource name is a network policy identifier.
service NetworkPolicyDiscoveryService {
  rpc StreamNetworkPolicies(stream envoy.api.v2.DiscoveryRequest)
      returns (stream envoy.api.v2.DiscoveryResponse) {
  }

  rpc FetchNetworkPolicies(envoy.api.v2.DiscoveryRequest) returns (envoy.api.v2.DiscoveryResponse) {
    option (google.api.http) = {
      post: "/v2/discovery:network_policies"
      body: "*"
    };
  }
}

// A network policy that is enforced by a filter on the network flows to/from
// associated hosts.
message NetworkPolicy {
  // The unique identifier of the network policy.
  // Required.
  string name = 1;

  // The policy identifier associated with the network policy. Corresponds to
  // remote_policies entries in PortNetworkPolicyRule.
  // Required.
  uint64 policy = 2;

  // The part of the policy to be enforced at ingress by the filter, as a set
  // of per-port network policies, one per destination L4 port.
  // Every PortNetworkPolicy element in this set has a unique port / protocol
  // combination.
  // Optional. If empty, all flows in this direction are denied.
  repeated PortNetworkPolicy ingress_per_port_policies = 3;

  // The part of the policy to be enforced at egress by the filter, as a set
  // of per-port network policies, one per destination L4 port.
  // Every PortNetworkPolicy element in this set has a unique port / protocol
  // combination.
  // Optional. If empty, all flows in this direction are denied.
  repeated PortNetworkPolicy egress_per_port_policies = 4;

  // Name of the conntrack map to use with this policy.
  // The paths to various Cilium conntrack maps are derived using this name.
  // Optional. If empty, proxymap lookup is used instead of conntrack map.
  string conntrack_map_name = 5;
}

// A network policy to whitelist flows to a specific destination L4 port,
// as a conjunction of predicates on L3/L4/L7 flows.
// If all the predicates of a policy match a flow, the flow is whitelisted.
message PortNetworkPolicy {
  // The flows' destination L4 port number, as an unsigned 16-bit integer.
  // If 0, all destination L4 port numbers are matched by this predicate.
  uint32 port = 1 [(validate.rules).uint32.lte = 65535];

  // The flows' L4 transport protocol.
  // Required.
  envoy.api.v2.core.SocketAddress.Protocol protocol = 2;

  // The network policy rules to be enforced on the flows to the port.
  // Optional. A flow is matched by this predicate if either the set of
  // rules is empty or any of the rules matches it.
  repeated PortNetworkPolicyRule rules = 3;
}

message TLSContext {
	// CA certificates. If present, the counterparty must provide a valid certificate.
	string trusted_ca = 1;

	// Certificate chain
	string certificate_chain = 2;

	// Private key
	string private_key = 3;

	// Server Name Indicator. For downstream this helps choose the certificate to present to the client.
	// For upstream this will be used as the SNI on the client connection.
	repeated string server_names = 4;
}

// A network policy rule, as a conjunction of predicates on L3/L7 flows.
// If all the predicates of a rule match a flow, the flow is matched by the
// rule.
message PortNetworkPolicyRule {
  // The set of identifiers of policies of remote hosts.
  // A flow is matched by this predicate if the identifier of the policy
  // applied on the flow's remote host is contained in this set.
  // Optional. If not specified, any remote host is matched by this predicate.
  repeated uint64 remote_policies = 1 [(validate.rules).repeated.unique = true];

  // Optional downstream TLS context. If present, the incoming connection must be a TLS connection.
  TLSContext downstream_tls_context = 3;

  // Optional upstream TLS context. If present, the outgoing connection will use TLS.
  TLSContext upstream_tls_context = 4;

  // Optional L7 protocol parser name. This is only used if the parser is not
  // one of the well knows ones. If specified, the l7 parser having this name
  // needs to be built in to libcilium.so.
  string l7_proto = 2;

  // Optional. If not specified, any L7 request is matched by this predicate.
  // All rules on any given port must have the same type of L7 rules!
  oneof l7 {
    // The set of HTTP network policy rules.
    // An HTTP request is matched by this predicate if any of its rules matches
    // the request.
    HttpNetworkPolicyRules http_rules = 100;

    // The set of Kafka network policy rules.
    // A Kafka request is matched by this predicate if any of its rules matches
    // the request.
    KafkaNetworkPolicyRules kafka_rules = 101;

    // Set of Generic policy rules used when 'l7_proto' is defined.
    // Only to be used for l7 protocols for which a specific oneof
    // is not defined
    L7NetworkPolicyRules l7_rules = 102;
 }
}

// A set of network policy rules that match HTTP requests.
message HttpNetworkPolicyRules {
  // The set of HTTP network policy rules.
  // An HTTP request is matched if any of its rules matches the request.
  // Required and may not be empty.
  repeated HttpNetworkPolicyRule http_rules = 1 [(validate.rules).repeated.min_items = 1];
}

message HeaderMatch {
  string name = 1 [(validate.rules).string.min_bytes = 1];
  string value = 2; // empty for presence match

  // Action specifies what to do when the header matches.
  enum MatchAction {
    CONTINUE_ON_MATCH = 0; // Keep checking other matches (default)
    FAIL_ON_MATCH     = 1; // Drop the request if no other rule matches
    DELETE_ON_MATCH   = 2; // Remove the whole matching header
  }
  MatchAction match_action = 3;

  enum MismatchAction {
    FAIL_ON_MISMATCH     = 0; // Drop the request if no other rule matches (default)
    CONTINUE_ON_MISMATCH = 1; // Keep checking other matches, log the mismatch
    ADD_ON_MISMATCH      = 2; // Add 'value' to the multivalued header
    DELETE_ON_MISMATCH   = 3; // Remove the whole mismatching header
    REPLACE_ON_MISMATCH  = 4; // Replace the whole mismatching header with 'value'
  }
  MismatchAction mismatch_action = 4;
}

// An HTTP network policy rule, as a conjunction of predicates on HTTP requests.
// If all the predicates of a rule match an HTTP request, the request is allowed. Otherwise, it is
// denied.
message HttpNetworkPolicyRule {
  // A set of matchers on the HTTP request's headers' names and values.
  // If all the matchers in this set match an HTTP request, the request is allowed by this rule.
  // Otherwise, it is denied.
  //
  // Some special header names are:
  //
  // * *:uri*: The HTTP request's URI.
  // * *:method*: The HTTP request's method.
  // * *:authority*: Also maps to the HTTP 1.1 *Host* header.
  //
  // Optional. If empty, matches any HTTP request.
  repeated envoy.api.v2.route.HeaderMatcher headers = 1;

  // header_matches is a set of HTTP header name and value pairs that
  // will be matched against the request headers, if all the other match requirements
  // in 'headers' are met. Each HeaderAction determines what to do when there is a match
  // or mismatch.
  //
  // Optional.
  repeated HeaderMatch header_matches = 2;
}

// A set of network policy rules that match Kafka requests.
message KafkaNetworkPolicyRules {
  // The set of Kafka network policy rules.
  // A Kafka request is matched if any of its rules matches the request.
  // Required and may not be empty.
  repeated KafkaNetworkPolicyRule kafka_rules = 1 [(validate.rules).repeated.min_items = 1];
}

// A Kafka network policy rule, as a conjunction of predicates on Kafka requests.
// If all the predicates of a rule match a Kafka request, the request is allowed. Otherwise, it is
// denied.
message KafkaNetworkPolicyRule {
  // The Kafka request's API key.
  // If <0, all Kafka requests are matched by this predicate.
  int32 api_key = 1;

  // The Kafka request's API version.
  // If <0, all Kafka requests are matched by this predicate.
  int32 api_version = 2;

  // The Kafka request's topic.
  // Optional. If not specified, all Kafka requests are matched by this predicate.
  // If specified, this predicates only matches requests that contain this topic, and never
  // matches requests that don't contain any topic.
  string topic = 3 [(validate.rules).string = {max_len: 255, pattern: "^[a-zA-Z0-9._-]*$"}];

  // The Kafka request's client ID.
  // Optional. If not specified, all Kafka requests are matched by this predicate.
  // If specified, this predicates only matches requests that contain this client ID, and never
  // matches requests that don't contain any client ID.
  string client_id = 4 [(validate.rules).string.pattern = "^[a-zA-Z0-9._-]*$"];
}

// A set of network policy rules that match generic L7 requests.
message L7NetworkPolicyRules {
  // The set of generic key-value pair policy rules.
  // A request is matched if any of these rules matches the request.
  // Required and may not be empty.
  repeated L7NetworkPolicyRule l7_rules = 1 [(validate.rules).repeated.min_items = 1];
}

// A generic L7 policy rule, as a conjunction of predicates on l7 requests.
// If all the predicates of a rule match a request, the request is allowed. Otherwise, it is
// denied.
message L7NetworkPolicyRule {
  // Optional. If empty, matches any request.
  map<string, string> rule = 1;
}
   0707010000001C000081A4000003E800000064000000015E17A247000004D9000000000000000000000000000000000000002D00000000cilium-proxy-20200109/cilium/api/nphds.proto  syntax = "proto3";

package cilium;

import "envoy/api/v2/discovery.proto";

import "google/api/annotations.proto";

import "validate/validate.proto";

// [#protodoc-title: Network policy host management and NPIDDS]

// Each resource name is a network policy identifier in decimal, e.g. `123`.
service NetworkPolicyHostsDiscoveryService {
  rpc StreamNetworkPolicyHosts(stream envoy.api.v2.DiscoveryRequest)
      returns (stream envoy.api.v2.DiscoveryResponse) {
  }

  rpc FetchNetworkPolicyHosts(envoy.api.v2.DiscoveryRequest) returns (envoy.api.v2.DiscoveryResponse) {
    option (google.api.http) = {
      post: "/v2/discovery:network_policy_hosts"
      body: "*"
    };
  }
}

// The mapping of a network policy identifier to the IP addresses of all the
// hosts on which the network policy is enforced.
// A host may be associated only with one network policy.
message NetworkPolicyHosts {
  // The unique identifier of the network policy enforced on the hosts.
  uint64 policy = 1;

  // The set of IP addresses of the hosts on which the network policy is enforced.
  // Optional. May be empty.
  repeated string host_addresses = 2 [(validate.rules).repeated.unique = true, (validate.rules).repeated.items.string.min_bytes = 1];
}
   0707010000001D000081A4000003E800000064000000015E17A247000011A8000000000000000000000000000000000000002400000000cilium-proxy-20200109/cilium/bpf.cc   #include "cilium/bpf.h"

#include <string.h>
#include <sys/resource.h>
#include <unistd.h>

#include <cstdint>
#include <fstream>
#include <iostream>
#include <map>
#include <sstream>
#include <string>
#include <vector>

#include "linux/bpf.h"

#include "common/common/logger.h"

namespace Envoy {
namespace Cilium {

enum {
  BPF_KEY_MAX_LEN = 64,
};

Bpf::Bpf(uint32_t map_type, uint32_t key_size, uint32_t value_size)
    : fd_(-1), map_type_(map_type), key_size_(key_size),
      value_size_(value_size) {
  struct rlimit rl = {RLIM_INFINITY, RLIM_INFINITY};
  setrlimit(RLIMIT_MEMLOCK, &rl);
}

Bpf::~Bpf() { close(); }

void Bpf::close() {
  if (fd_ >= 0)
    ::close(fd_);
  fd_ = -1;
}

bool Bpf::open(const std::string &path) {
  bool log_on_error = ENVOY_LOG_CHECK_LEVEL(trace);
  union bpf_attr attr = {};
  attr.pathname = uintptr_t(path.c_str());

  fd_ = bpfSyscall(BPF_OBJ_GET, &attr);
  if (fd_ >= 0) {
    // Open fdinfo to check the map type and key and value size.
    std::string line;
    std::string bpf_file_path("/proc/" + std::to_string(getpid()) + "/fdinfo/" +
			      std::to_string(fd_));
    std::ifstream bpf_file(bpf_file_path);
    if (bpf_file.is_open()) {
      uint32_t map_type = UINT32_MAX, key_size = UINT32_MAX,
               value_size = UINT32_MAX;

      while (std::getline(bpf_file, line)) {
        std::istringstream iss(line);
        std::string tag;

        if (std::getline(iss, tag, ':')) {
          unsigned int value;

          if (iss >> value) {
            if (tag == "map_type") {
              map_type = value;
            } else if (tag == "key_size") {
              key_size = value;
            } else if (tag == "value_size") {
              value_size = value;
            }
          }
        }
      }
      bpf_file.close();

      if ((map_type == map_type_ || (map_type == BPF_MAP_TYPE_LRU_HASH && map_type_ == BPF_MAP_TYPE_HASH))
	  && key_size == key_size_ && value_size == value_size_) {
        return true;
      }
      if (log_on_error) {
        if (map_type != map_type_) {
          ENVOY_LOG(warn, "cilium.bpf_metadata: map type mismatch on {}: got {}, wanted {}", path, map_type, map_type_);
        } else if (key_size != key_size_) {
          ENVOY_LOG(warn, "cilium.bpf_metadata: map key size mismatch on {}: got {}, wanted {}", path, key_size, key_size_);
        } else {
          ENVOY_LOG(warn, "cilium.bpf_metadata: map value size mismatch on {}: got {}, wanted {}", path, value_size, value_size_);
        }
      }
    } else if (log_on_error) {
      ENVOY_LOG(warn, "cilium.bpf_metadata: map {} could not open bpf file {}", path, bpf_file_path);
    }
    close();
  } else if (errno == ENOENT && log_on_error) {
    ENVOY_LOG(debug, "cilium.bpf_metadata: bpf syscall for map {} failed: {}", path, strerror(errno));
  } else if (log_on_error) {
    ENVOY_LOG(warn, "cilium.bpf_metadata: bpf syscall for map {} failed: {}", path, strerror(errno));
  }

  return false;
}

bool Bpf::create(uint32_t max_entries, uint32_t flags) {
  union bpf_attr attr = {};
  attr.map_type = map_type_;
  attr.key_size = key_size_;
  attr.value_size = value_size_;
  attr.max_entries = max_entries;
  attr.map_flags = flags;

  fd_ = bpfSyscall(BPF_MAP_CREATE, &attr);
  return fd_ >= 0;
}

bool Bpf::pin(const std::string &path) {
  union bpf_attr attr = {};
  attr.pathname = uintptr_t(path.c_str());
  attr.bpf_fd = uint32_t(fd_);

  return bpfSyscall(BPF_OBJ_PIN, &attr) == 0;
}

bool Bpf::insert(const void *key, const void *value) {
  union bpf_attr attr = {};
  attr.map_fd = uint32_t(fd_);
  attr.key = uintptr_t(key);
  attr.value = uintptr_t(value);
  attr.flags = BPF_ANY;

  return bpfSyscall(BPF_MAP_UPDATE_ELEM, &attr) == 0;
}

bool Bpf::remove(const void *key) {
  union bpf_attr attr = {};
  attr.map_fd = uint32_t(fd_);
  attr.key = uintptr_t(key);
  attr.flags = BPF_ANY;

  return bpfSyscall(BPF_MAP_DELETE_ELEM, &attr) == 0;
}

bool Bpf::lookup(const void *key, void *value) {
  union bpf_attr attr = {};
  attr.map_fd = uint32_t(fd_);
  attr.key = uintptr_t(key);
  attr.value = uintptr_t(value);

  return bpfSyscall(BPF_MAP_LOOKUP_ELEM, &attr) == 0;
}

#ifndef __NR_bpf
#if defined(__i386__)
#define __NR_bpf 357
#elif defined(__x86_64__)
#define __NR_bpf 321
#elif defined(__aarch64__)
#define __NR_bpf 280
#else
#error __NR_bpf not defined.
#endif
#endif

int Bpf::bpfSyscall(int cmd, union bpf_attr *attr) {
  return ::syscall(__NR_bpf, cmd, attr, sizeof(*attr));
}

} // namespace Cilium
} // namespace Envoy
0707010000001E000081A4000003E800000064000000015E17A24700000B6D000000000000000000000000000000000000002300000000cilium-proxy-20200109/cilium/bpf.h    #pragma once

#include <string.h>
#include <unistd.h>

#include <cstdint>
#include <fstream>
#include <iostream>
#include <map>
#include <sstream>
#include <string>
#include <vector>

#include "common/common/logger.h"

union bpf_attr;

namespace Envoy {
namespace Cilium {

/**
 * Bpf system call interface.
 */
class Bpf : public Logger::Loggable<Logger::Id::filter> {
public:
  /**
   * Create a bpf map object without actually creating or opening a bpf map yet.
   * @param map_type the type of a bpf map to be opened or created, e.g.,
   * BPF_MAP_TYPE_HASH
   * @param key_size the size of the bpf map entry lookup key.
   * @param value_size the size of the bpf map entry value.
   */
  Bpf(uint32_t map_type, uint32_t key_size, uint32_t value_size);
  virtual ~Bpf();

  /**
   * Close the bpf file descriptor, if open.
   */
  void close();

  /**
   * Open an existing bpf map. The bpf map must have the map type and key and
   * value sizes that match with the ones given to the constructor.
   * @param path the file system path to the pinned bpf map.
   * @returns boolean for success of the operation.
   */
  bool open(const std::string &path);

  /**
   * Create a new bpf map.
   * @param max_entries the maximum capacity of the bpf map to be created. For
   * many map types memory for this number of entries is allocated when the map
   * is created.
   * @param flags the required flags for the map type. Typically 0.
   * @returns boolean for success of the operation.
   */
  bool create(uint32_t max_entries, uint32_t flags);

  /**
   * Pin the map to a file system path.
   * @param path the file system path where to pin the bpf map.
   * @returns boolean for success of the operation.
   */
  bool pin(const std::string &path);

  /**
   * Insert an entry with value and identified with the key to the map.
   * @param key pointer to the key identifying the new entry to be inserted.
   * @param value pointer to the value to be stored in the new entry to be
   * inserted.
   * @returns boolean for success of the operation.
   */
  bool insert(const void *key, const void *value);

  /**
   * Delete the entry identified with the key from the map, if it exists.
   * @param key pointer to the key identifying the new entry to be inserted.
   * @returns boolean for success of the operation.
   */
  bool remove(const void *key);

  /**
   * Lookup an entry from the bpf map identified with the key, storing the found
   * value, if any.
   * @param key pointer to the key identifying the entry to be found.
   * @param value pointer at which the value is copied to if the entry is found.
   * @returns boolean for success of the operation.
   */
  bool lookup(const void *key, void *value);

private:
  int bpfSyscall(int cmd, union bpf_attr *attr);

protected:
  int fd_;

public:
  uint32_t map_type_;
  uint32_t key_size_;
  uint32_t value_size_;
};

} // namespace Cilium
} // namespace Envoy
   0707010000001F000081A4000003E800000064000000015E17A247000027AC000000000000000000000000000000000000002D00000000cilium-proxy-20200109/cilium/bpf_metadata.cc  #include "cilium/bpf_metadata.h"
#include "cilium/api/bpf_metadata.pb.validate.h"

#include <string>

#include "common/common/assert.h"
#include "common/common/fmt.h"
#include "common/network/socket_option_factory.h"
#include "envoy/network/listen_socket.h"
#include "envoy/registry/registry.h"
#include "envoy/singleton/manager.h"

#include "cilium/socket_option.h"

#include <netinet/in.h>
#include <netinet/tcp.h>

namespace Envoy {
namespace Server {
namespace Configuration {

/**
 * Config registration for the bpf metadata filter. @see
 * NamedNetworkFilterConfigFactory.
 */
class BpfMetadataConfigFactory : public NamedListenerFilterConfigFactory {
public:
  // NamedListenerFilterConfigFactory
  Network::ListenerFilterFactoryCb
  createFilterFactoryFromProto(const Protobuf::Message& proto_config,
			       Configuration::ListenerFactoryContext& context) override {
    auto config = std::make_shared<Filter::BpfMetadata::Config>(MessageUtil::downcastAndValidate<const ::cilium::BpfMetadata&>(proto_config, context.messageValidationVisitor()), context);
    return [config](Network::ListenerFilterManager &filter_manager) mutable -> void {
      filter_manager.addAcceptFilter(std::make_unique<Filter::BpfMetadata::Instance>(config));
    };
  }

  ProtobufTypes::MessagePtr createEmptyConfigProto() override {
    return std::make_unique<::cilium::BpfMetadata>();
  }

  std::string name() override { return "cilium.bpf_metadata"; }
};

/**
 * Static registration for the bpf metadata filter. @see RegisterFactory.
 */
static Registry::RegisterFactory<BpfMetadataConfigFactory,
                                 NamedListenerFilterConfigFactory>
    registered_;

} // namespace Configuration
} // namespace Server

namespace Filter {
namespace BpfMetadata {

// Singleton registration via macro defined in envoy/singleton/manager.h
SINGLETON_MANAGER_REGISTRATION(cilium_bpf_conntrack);
SINGLETON_MANAGER_REGISTRATION(cilium_bpf_proxymap);
SINGLETON_MANAGER_REGISTRATION(cilium_host_map);
SINGLETON_MANAGER_REGISTRATION(cilium_ipcache);
SINGLETON_MANAGER_REGISTRATION(cilium_network_policy);

namespace {

std::shared_ptr<const Cilium::PolicyHostMap>
createHostMap(Server::Configuration::ListenerFactoryContext& context) {
  return context.singletonManager().getTyped<const Cilium::PolicyHostMap>(
    SINGLETON_MANAGER_REGISTERED_NAME(cilium_host_map), [&context] {
      auto map = std::make_shared<Cilium::PolicyHostMap>(
          context.localInfo(), context.clusterManager(),
	  context.dispatcher(), context.random(), context.scope(),
	  context.threadLocal());
      map->startSubscription();
      return map;
    });
}

std::shared_ptr<const Cilium::NetworkPolicyMap>
createPolicyMap(Server::Configuration::FactoryContext& context, Cilium::CtMapSharedPtr& ct) {
  return context.singletonManager().getTyped<const Cilium::NetworkPolicyMap>(
    SINGLETON_MANAGER_REGISTERED_NAME(cilium_network_policy), [&context, &ct] {
      auto map = std::make_shared<Cilium::NetworkPolicyMap>(context, ct);
      map->startSubscription();
      return map;
    });
}

} // namespace

Config::Config(const ::cilium::BpfMetadata &config, Server::Configuration::ListenerFactoryContext& context)
    : is_ingress_(config.is_ingress()),
      may_use_original_source_address_(config.may_use_original_source_address()) {
  // Note: all instances use the bpf root of the first filter with non-empty bpf_root instantiated!
  // Only try opening bpf maps if bpf root is explicitly configured
  std::string bpf_root = config.bpf_root();
  if (bpf_root.length() > 0) {
    maps_ = context.singletonManager().getTyped<Cilium::ProxyMap>(
	SINGLETON_MANAGER_REGISTERED_NAME(cilium_bpf_proxymap), [&bpf_root] {
	  auto maps = std::make_shared<Cilium::ProxyMap>(bpf_root);
	  if (!maps->Open()) {
	    maps.reset();
	  }
	  return maps;
	});
    ct_maps_ = context.singletonManager().getTyped<Cilium::CtMap>(
	SINGLETON_MANAGER_REGISTERED_NAME(cilium_bpf_conntrack), [&bpf_root] {
	  // Even if opening the global maps fail, local maps may still succeed later.
	  return std::make_shared<Cilium::CtMap>(bpf_root);
	});
    ipcache_ = context.singletonManager().getTyped<Cilium::IPCache>(
	SINGLETON_MANAGER_REGISTERED_NAME(cilium_ipcache), [&bpf_root] {
	  auto ipcache = std::make_shared<Cilium::IPCache>(bpf_root);
	  if (!ipcache->Open()) {
	    ipcache.reset();
	  }
	  return ipcache;
	});
    if (bpf_root != ct_maps_->bpfRoot()) {
      // bpf root may not change during runtime
      throw EnvoyException(fmt::format("cilium.bpf_metadata: Invalid bpf_root: {}", bpf_root));
    }
  }

  // Only create the hosts map if ipcache can't be opened
  if (ipcache_ == nullptr) {
    hosts_ = createHostMap(context);
  }

  // Get the shared policy provider, or create it if not already created.
  // Note that the API config source is assumed to be the same for all filter instances!

  npmap_ = createPolicyMap(context, ct_maps_);
}

bool Config::getMetadata(Network::ConnectionSocket& socket) {
  uint32_t source_identity = 0, destination_identity = 0;
  uint16_t orig_dport = 0, proxy_port = 0;
  Network::Address::InstanceConstSharedPtr src_address = socket.remoteAddress();
  const auto sip = src_address->ip();
  auto dip = socket.localAddress()->ip();

  if (!sip || !dip) {
    ENVOY_LOG_MISC(debug, "Non-IP addresses: src: {} dst: {}",
		   src_address->asString(), socket.localAddress()->asString());
    return false;
  }

  // Cilium < 1.6 uses REDIRECT, which NATs the destination address
  // and port. Proxymap is used to retrieve the originals, as well as
  // the source security ID.
  // Cilium >= 1.6 and sidecars use TPROXY, so the destination address
  // is not NATted.
  bool with_tproxy = (maps_ == nullptr);
  
  // We do this first as this likely restores the destination address
  if (with_tproxy) {
    // Let the OriginalDstCluster know the destination address can be used.
    socket.restoreLocalAddress(socket.localAddress()); // mark as `restored`
    orig_dport = dip->port();
  } else {
    // Proxymap ('maps_') use will be deprecated when Cilium 1.6 is the oldest
    // supported version.
    maps_->getBpfMetadata(socket, &source_identity, &orig_dport, &proxy_port);
    dip = socket.localAddress()->ip();
  }

  std::string pod_ip, other_ip;
  if (is_ingress_) {
    pod_ip = dip->addressAsString();
    other_ip = sip->addressAsString();
    ENVOY_LOG_MISC(debug, "INGRESS POD IP: {}, source IP: {}", pod_ip, other_ip);
  } else {
    pod_ip = sip->addressAsString();
    other_ip = dip->addressAsString();
    ENVOY_LOG_MISC(debug, "EGRESS POD IP: {}, destination IP: {}", pod_ip, other_ip);
  }

  const auto& policy = npmap_->GetPolicyInstance(pod_ip);

  // Resolve the source security ID, if not already resolved
  if (source_identity == 0) {
    if (ct_maps_ != nullptr) {
      // Cilium >= 1.6 provides the conntrack name in the policy
      auto ct_name = policy->conntrackName();
      if (ct_name.length() > 0) {
	source_identity = ct_maps_->lookupSrcIdentity(ct_name, sip, dip, is_ingress_);
      }
    }
    if (source_identity == 0) {
      if (ipcache_ != nullptr) {
	// Resolve the source security ID from the IPCache
	source_identity = ipcache_->resolve(sip);
      } else if (hosts_ != nullptr) {
	// Resolve the source security ID from xDS hosts map
	source_identity = hosts_->resolve(sip);
      }

      // default source identity to the world if needed
      if (source_identity == 0) {
	source_identity = Cilium::ID::WORLD;
	ENVOY_LOG(trace,
		  "cilium.bpf_metadata ({}): Source identity defaults to WORLD",
		  is_ingress_ ? "ingress" : "egress");
      }
    }
  }

  // Resolve the destination security ID for egress
  if (!is_ingress_) {
    if (ipcache_ != nullptr) {
      destination_identity = ipcache_->resolve(dip);
    } else if (hosts_ != nullptr) {
      destination_identity = hosts_->resolve(dip);
    }
    // default destination identity to the world if needed
    if (destination_identity == 0) {
      destination_identity = Cilium::ID::WORLD;
      ENVOY_LOG(trace, "cilium.bpf_metadata (egress): Destination identity defaults to WORLD");
    }
  }

  // Only use the original source address if permitted and the other node is not in
  // the same node and is not classified as WORLD.
  if (may_use_original_source_address_ && destination_identity != Cilium::ID::WORLD
      && !npmap_->exists(other_ip)) {
    socket.addOptions(Network::SocketOptionFactory::buildIpTransparentOptions());
  } else {
    src_address = nullptr;
  }

  // Pass the metadata to an Envoy socket option we can retrieve
  // later in other Cilium filters.
  socket.addOption(std::make_shared<Cilium::SocketOption>(policy, maps_, source_identity, destination_identity,
      is_ingress_, orig_dport, proxy_port, std::move(pod_ip), src_address));
  return true;
}

Network::FilterStatus Instance::onAccept(Network::ListenerFilterCallbacks &cb) {
  Network::ConnectionSocket &socket = cb.socket();
  config_->getMetadata(socket);

  // Set socket options for linger and keepalive (5 minutes).
  int rc;
  struct ::linger lin{ true, 10 };
  int keepalive = true;
  int secs = 5*60; // Five minutes

  rc = setsockopt(socket.ioHandle().fd(), SOL_SOCKET, SO_LINGER, &lin, sizeof(lin));
  if (rc < 0) {
    ENVOY_LOG(critical, "Socket option failure. Failed to set SO_LINGER: {}", strerror(errno));
  }
  rc = setsockopt(socket.ioHandle().fd(), SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(keepalive));
  if (rc < 0) {
    ENVOY_LOG(critical, "Socket option failure. Failed to set SO_KEEPALIVE: {}", strerror(errno));
  } else {
    rc = setsockopt(socket.ioHandle().fd(), IPPROTO_TCP, TCP_KEEPINTVL, &secs, sizeof(secs));
    if (rc < 0) {
      ENVOY_LOG(critical, "Socket option failure. Failed to set TCP_KEEPINTVL: {}",
		strerror(errno));
    } else {
      rc = setsockopt(socket.ioHandle().fd(), IPPROTO_TCP, TCP_KEEPIDLE, &secs, sizeof(secs));
      if (rc < 0) {
	ENVOY_LOG(critical, "Socket option failure. Failed to set TCP_KEEPIDLE: {}",
		  strerror(errno));
      }
    }
  }

  return Network::FilterStatus::Continue;
}

} // namespace BpfMetadata
} // namespace Filter
} // namespace Envoy
07070100000020000081A4000003E800000064000000015E17A24700000668000000000000000000000000000000000000002C00000000cilium-proxy-20200109/cilium/bpf_metadata.h   #pragma once

#include "envoy/json/json_object.h"
#include "envoy/network/filter.h"
#include "envoy/server/filter_config.h"

#include "common/common/logger.h"

#include "cilium/api/bpf_metadata.pb.h"
#include "cilium/conntrack.h"
#include "cilium/host_map.h"
#include "cilium/ipcache.h"
#include "cilium/network_policy.h"
#include "cilium/proxymap.h"

namespace Envoy {
namespace Filter {
namespace BpfMetadata {

/**
 * Global configuration for Bpf Metadata listener filter. This
 * represents all global state shared among the working thread
 * instances of the filter.
 */
class Config : Logger::Loggable<Logger::Id::config> {
public:
  Config(const ::cilium::BpfMetadata &config, Server::Configuration::ListenerFactoryContext& context);
  virtual ~Config() {}

  virtual bool getMetadata(Network::ConnectionSocket &socket);

  bool is_ingress_;
  bool may_use_original_source_address_;

  std::shared_ptr<const Cilium::NetworkPolicyMap> npmap_{};
  Cilium::ProxyMapSharedPtr maps_{};
  Cilium::CtMapSharedPtr ct_maps_{};
  Cilium::IPCacheSharedPtr ipcache_{};
  std::shared_ptr<const Cilium::PolicyHostMap> hosts_{};
};

typedef std::shared_ptr<Config> ConfigSharedPtr;

/**
 * Implementation of a bpf metadata listener filter.
 */
class Instance : public Network::ListenerFilter,
                 Logger::Loggable<Logger::Id::filter> {
public:
  Instance(const ConfigSharedPtr& config) : config_(config) {}

  // Network::ListenerFilter
  Network::FilterStatus onAccept(Network::ListenerFilterCallbacks &cb) override;

private:
  const ConfigSharedPtr config_;
};

} // namespace BpfMetadata
} // namespace Filter
} // namespace Envoy
07070100000021000081A4000003E800000064000000015E17A247000020C5000000000000000000000000000000000000002A00000000cilium-proxy-20200109/cilium/conntrack.cc #include "conntrack.h"

#include <arpa/inet.h>
#include <string.h>

#include <cstdint>

#include "common/network/address_impl.h"

#include "linux/bpf.h"

namespace Envoy {
namespace Cilium {

// These must be kept in sync with Cilium source code, should refactor
// them to a separate include file we can include here instead of
// copying them!

typedef uint64_t __u64;
typedef uint32_t __be32; // Beware of the byte order!
typedef uint32_t __u32;
typedef uint16_t __be16; // Beware of the byte order!
typedef uint16_t __u16;
typedef uint8_t __u8;

#define TUPLE_F_OUT		0
#define TUPLE_F_IN		1

struct ipv6_ct_tuple {
	__be32		saddr[4];
	__be32		daddr[4];
	__be16		dport;
	__be16		sport;
	__u8		nexthdr;
	__u8		flags;
} __attribute__((packed));

struct ipv4_ct_tuple {
	__be32		saddr;
	__be32		daddr;
	__be16		dport;
	__be16		sport;
	__u8		nexthdr;
	__u8		flags;
} __attribute__((packed));

struct ct_entry {
	__u64 rx_packets;
	__u64 rx_bytes;
	__u64 tx_packets;
	__u64 tx_bytes;
	__u32 lifetime;
	__u16 rx_closing:1,
	      tx_closing:1,
	      nat46:1,
	      lb_loopback:1,
	      seen_non_syn:1,
	      reserve:11;
	__u16 rev_nat_index;
	__u16 slave;

	/* *x_flags_seen represents the OR of all TCP flags seen for the
	 * transmit/receive direction of this entry. */
	__u8  tx_flags_seen;
	__u8  rx_flags_seen;

	__u32 src_sec_id; /* Used from userspace proxies, do not change offset! */

	/* last_*x_report is a timestamp of the last time a monitor
	 * notification was sent for the transmit/receive direction. */
	__u32 last_tx_report;
	__u32 last_rx_report;
};

CtMap::CtMap4::CtMap4()
  : Bpf(BPF_MAP_TYPE_HASH, sizeof(struct ipv4_ct_tuple),
          sizeof(struct ct_entry)) {}

CtMap::CtMap6::CtMap6()
    : Bpf(BPF_MAP_TYPE_HASH, sizeof(struct ipv6_ct_tuple),
          sizeof(struct ct_entry)) {}

CtMap::CtMaps4::CtMaps4(const std::string& bpf_root, const std::string& map_name)
  : ok_(false) {
  // Open the IPv4 bpf maps from Cilium specific paths

  std::string path4tcp(bpf_root + "/tc/globals/cilium_ct4_" + map_name);
  if (!ctmap4_tcp_.open(path4tcp)) {
    ENVOY_LOG(warn, "cilium.bpf_metadata: Cannot open IPv4 conntrack map at {}", path4tcp);
    return;
  }
  std::string path4any(bpf_root + "/tc/globals/cilium_ct_any4_" + map_name);
  if (!ctmap4_any_.open(path4any)) {
    ENVOY_LOG(info, "cilium.bpf_metadata: Cannot open IPv4 conntrack map at {}", path4any);
    // do not fail if non-TCP map can not be opened
  }

  ok_ = true;
}

CtMap::CtMaps6::CtMaps6(const std::string& bpf_root, const std::string& map_name)
  : ok_(false) {
  // Open the IPv6 bpf maps from Cilium specific paths

  std::string path6tcp(bpf_root + "/tc/globals/cilium_ct6_" + map_name);
  if (!ctmap6_tcp_.open(path6tcp)) {
    ENVOY_LOG(warn, "cilium.bpf_metadata: Cannot open IPv6 conntrack map at {}", path6tcp);
    return;
  }
  std::string path6any(bpf_root + "/tc/globals/cilium_ct_any6_" + map_name);
  if (!ctmap6_any_.open(path6any)) {
    ENVOY_LOG(info, "cilium.bpf_metadata: Cannot open IPv6 conntrack map at {}", path6any);
    // do not fail if non-TCP map can not be opened
  }

  ok_ = true;
}

// Must hold mutex!
std::unordered_map<const std::string, std::unique_ptr<CtMap::CtMaps4>>::iterator
CtMap::openMap4(const std::string& map_name) {
  auto pair = ct_maps4_.emplace(std::make_pair(map_name, nullptr));
  // construct the maps only if the entry was inserted
  if (pair.second) {
    auto maps = new CtMaps4(bpf_root_, map_name);
    if (!maps->ok_) {
      // Map open failed, delete and return nullptr
      delete maps;
      ct_maps4_.erase(pair.first);
      return ct_maps4_.end();
    }
    pair.first->second.reset(maps);
  }
  ENVOY_LOG(debug, "cilium.bpf_metadata: Opened IPv4 conntrack map {}", map_name);
  return pair.first;
}

// Must hold mutex!
std::unordered_map<const std::string, std::unique_ptr<CtMap::CtMaps6>>::iterator
CtMap::openMap6(const std::string& map_name) {
  auto pair = ct_maps6_.emplace(std::make_pair(map_name, nullptr));
  // construct the maps only if the entry was inserted
  if (pair.second) {
    auto maps = new CtMaps6(bpf_root_, map_name);
    if (!maps->ok_) {
      // Map open failed, delete and return nullptr
      delete maps;
      ct_maps6_.erase(pair.first);
      return ct_maps6_.end();
    }
    pair.first->second.reset(maps);
  }
  ENVOY_LOG(debug, "cilium.bpf_metadata: Opened IPv6 conntrack map {}", map_name);
  return pair.first;
}

void CtMap::closeMaps(const std::shared_ptr<std::unordered_set<std::string>>& to_be_closed) {
  std::lock_guard<std::mutex> guard(maps_mutex_);

  for (const auto& name: *to_be_closed) {
    auto ct4 = ct_maps4_.find(name);
    if (ct4 != ct_maps4_.end()) {
      ct_maps4_.erase(ct4);
      ENVOY_LOG(debug, "cilium.bpf_metadata: Closed IPv4 conntrack map {}", name);
    }
    auto ct6 = ct_maps6_.find(name);
    if (ct6 != ct_maps6_.end()) {
      ct_maps6_.erase(ct6);
      ENVOY_LOG(debug, "cilium.bpf_metadata: Closed IPv6 conntrack map {}", name);
    }
  }
}

CtMap::CtMap(const std::string &bpf_root) : bpf_root_(bpf_root) {
  if (openMap4("global") == ct_maps4_.end() &&
      openMap6("global") == ct_maps6_.end()) {
    ENVOY_LOG(debug, "cilium.bpf_metadata: conntrack map global open failed: ({})", strerror(errno));
  }
}

// map_name is "global" for the global maps, or endpoint ID for local maps
uint32_t CtMap::lookupSrcIdentity(const std::string& map_name, const Network::Address::Ip* sip,
				  const Network::Address::Ip* dip, bool ingress)
{
  ENVOY_LOG(debug, "cilium.bpf_metadata: Using conntrack map {}", map_name);

  struct ipv4_ct_tuple key4 {};
  struct ipv6_ct_tuple key6 {};
  struct ct_entry value {};

  if (sip->version() == Network::Address::IpVersion::v4 &&
      dip->version() == Network::Address::IpVersion::v4) {
    key4.daddr = dip->ipv4()->address();
    key4.saddr = sip->ipv4()->address();
    key4.sport = htons(sip->port());
    key4.dport = htons(dip->port());
    key4.nexthdr = 6; // TCP only for now
    key4.flags = ingress ? TUPLE_F_IN : TUPLE_F_OUT; // also reversed

    ENVOY_LOG(
        trace,
	"cilium.bpf_metadata: Looking up key: {:x}, {:x}, {:x}, {:x}, {:x}, {:x}",
	ntohl(key4.daddr), ntohl(key4.saddr), ntohs(key4.dport), ntohs(key4.sport), key4.nexthdr,
	key4.flags);
  } else if (sip->version() == Network::Address::IpVersion::v6 &&
	     dip->version() == Network::Address::IpVersion::v6) {
    absl::uint128 daddr = dip->ipv6()->address();
    absl::uint128 saddr = sip->ipv6()->address();
    memcpy(&key6.daddr, &daddr, 16);
    memcpy(&key6.saddr, &saddr, 16);
    key6.sport = htons(sip->port());
    key6.dport = htons(dip->port());
    key6.nexthdr = 6; // TCP only for now
    key6.flags = ingress ? TUPLE_F_IN : TUPLE_F_OUT;
  } else {
    ENVOY_LOG(
        info,
	"cilium.bpf_metadata: Address type mismatch: Source: {}, Dest: {}",
	sip->addressAsString(), dip->addressAsString());
    return 0;
  }

  if (dip->version() == Network::Address::IpVersion::v4) {
    // Lock for the duration of the map lookup and conntrack lookup
    std::lock_guard<std::mutex> guard(maps_mutex_);
    auto it = ct_maps4_.find(map_name);
    if (it == ct_maps4_.end()) {
      it = openMap4(map_name);
    }
    if (it == ct_maps4_.end()) {
      ENVOY_LOG(error, "cilium.bpf_metadata: No IPv4 conntrack map {}", map_name);
      return 0;
    }
    auto ct = it->second.get();
    if (!ct->ctmap4_tcp_.lookup(&key4, &value)) {
      ct_maps4_.erase(it); // flush the map to force reload after each failure.
      ENVOY_LOG(info, "cilium.bpf_metadata: IPv4 conntrack map {} lookup failed: {}",
		map_name, strerror(errno));
      return 0;
    }
  } else { 
    // Lock for the duration of the map lookup and conntrack lookup
    std::lock_guard<std::mutex> guard(maps_mutex_);
    auto it = ct_maps6_.find(map_name);
    if (it == ct_maps6_.end()) {
      it = openMap6(map_name);
    }
    if (it == ct_maps6_.end()) {
      ENVOY_LOG(error, "cilium.bpf_metadata: No IPv6 conntrack map {}", map_name);
      return 0;
    }
    auto ct = it->second.get();
    if (!ct->ctmap6_tcp_.lookup(&key6, &value)) {
      ct_maps6_.erase(it); // flush the map to force reload after each failure.
      ENVOY_LOG(info, "cilium.bpf_metadata: IPv6 conntrack map {} lookup failed: {}",
		map_name, strerror(errno));
      return 0;
    }
  }
  return value.src_sec_id;
}

} // namespace Cilium
} // namespace Envoy
   07070100000022000081A4000003E800000064000000015E17A24700000814000000000000000000000000000000000000002900000000cilium-proxy-20200109/cilium/conntrack.h  #pragma once

#include <unordered_map>
#include <unordered_set>
#include <string>
#include <functional>
#include <memory>

#include "common/common/logger.h"
#include "envoy/network/address.h"
#include "envoy/singleton/instance.h"

#include "bpf.h"

namespace std {
    template <>
        class hash<const string>{
        public :
            size_t operator()(const string& key) const
            {
                return hash<string>()(key);
            }
    };
};

namespace Envoy {
namespace Cilium {

class CtMap : public Singleton::Instance, Logger::Loggable<Logger::Id::filter> {
public:
  CtMap(const std::string &bpf_root);

  const std::string& bpfRoot() { return bpf_root_; }

  uint32_t lookupSrcIdentity(const std::string& map_name, const Network::Address::Ip* sip,
			     const Network::Address::Ip* dip, bool ingress);

private:
  class CtMap4 : public Bpf {
  public:
    CtMap4();
  };

  class CtMap6 : public Bpf {
  public:
    CtMap6();
  };

public:
  class CtMaps4 {
  public:
    CtMaps4(const std::string& bpf_root, const std::string& map_name);

    bool ok_;
    CtMap4 ctmap4_tcp_;
    CtMap4 ctmap4_any_;
  };
  class CtMaps6 {
  public:
    CtMaps6(const std::string& bpf_root, const std::string& map_name);

    bool ok_;
    CtMap6 ctmap6_tcp_;
    CtMap6 ctmap6_any_;
  };
  void closeMaps(const std::shared_ptr<std::unordered_set<std::string>>& to_be_closed);

private:
  std::unordered_map<const std::string, std::unique_ptr<CtMaps4>>::iterator openMap4(const std::string& map_name);
  std::unordered_map<const std::string, std::unique_ptr<CtMaps6>>::iterator openMap6(const std::string& map_name);

  // All known conntrack maps. Populated with the "global" maps at startup,
  // further maps are opened and inserted on demand.
  std::mutex maps_mutex_;
  std::unordered_map<const std::string, std::unique_ptr<CtMaps4>> ct_maps4_;
  std::unordered_map<const std::string, std::unique_ptr<CtMaps6>> ct_maps6_;
  std::string bpf_root_;
};

typedef std::shared_ptr<CtMap> CtMapSharedPtr;
 
} // namespace Cilium
} // namespace Envoy
07070100000023000081A4000003E800000064000000015E17A247000006B1000000000000000000000000000000000000003200000000cilium-proxy-20200109/cilium/grpc_subscription.cc #include "cilium/grpc_subscription.h"

#include "envoy/api/v2/core/base.pb.h"
#include "common/config/utility.h"
#include "common/protobuf/protobuf.h"

namespace Envoy {
namespace Cilium {

std::unique_ptr<GrpcSubscriptionImpl>
subscribe(const std::string& type_url, const std::string& grpc_method,
	  const LocalInfo::LocalInfo& local_info,
	  Upstream::ClusterManager& cm, Event::Dispatcher& dispatcher,
	  Runtime::RandomGenerator& random, Stats::Scope &scope, Envoy::Config::SubscriptionCallbacks& callbacks) {
  // Hard-coded Cilium gRPC cluster
  // Note: No rate-limit settings are used, consider if needed.
  envoy::api::v2::core::ApiConfigSource api_config_source{};
  api_config_source.set_api_type(envoy::api::v2::core::ApiConfigSource::GRPC);
  api_config_source.add_grpc_services()->mutable_envoy_grpc()->set_cluster_name("xds-grpc-cilium"); 

  Config::Utility::checkApiConfigSourceSubscriptionBackingCluster(cm.clusters(), api_config_source);
  const auto* method = Protobuf::DescriptorPool::generated_pool()->FindMethodByName(grpc_method);

  if (method == nullptr) {
    throw EnvoyException(fmt::format("gRPC method {} not found.", grpc_method));
  }

  return std::make_unique<GrpcSubscriptionImpl>(
                local_info,
		Config::Utility::factoryForGrpcApiConfigSource(cm.grpcAsyncClientManager(),
							       api_config_source,
							       scope)->create(),
		dispatcher, random, *method, type_url, callbacks, Config::Utility::generateStats(scope), scope,
		Config::Utility::parseRateLimitSettings(api_config_source),
		std::chrono::milliseconds(0) /* no initial fetch timeout */,
		false /* TODO: Skip subsequent Node identifier */);
}

} // namespace Cilium
} // namespace Envoy
   07070100000024000081A4000003E800000064000000015E17A247000009DC000000000000000000000000000000000000003100000000cilium-proxy-20200109/cilium/grpc_subscription.h  #pragma once

#include "envoy/api/v2/core/base.pb.h"
#include "envoy/config/subscription.h"
#include "envoy/event/dispatcher.h"
#include "envoy/grpc/async_client.h"

#include "common/config/grpc_mux_impl.h"
#include "common/config/grpc_mux_subscription_impl.h"
#include "common/config/utility.h"

namespace Envoy {
namespace Cilium {

class GrpcSubscriptionImpl : public Config::Subscription {
public:
  GrpcSubscriptionImpl(const LocalInfo::LocalInfo& local_info, Grpc::RawAsyncClientPtr async_client,
                       Event::Dispatcher& dispatcher, Runtime::RandomGenerator& random,
                       const Protobuf::MethodDescriptor& service_method, absl::string_view type_url,
                       Config::SubscriptionCallbacks& callbacks, Config::SubscriptionStats stats,
                       Stats::Scope& scope, const Config::RateLimitSettings& rate_limit_settings,
                       std::chrono::milliseconds init_fetch_timeout, bool skip_subsequent_node)
    : callbacks_(callbacks), type_url_(type_url),
        grpc_mux_(std::make_shared<Config::GrpcMuxImpl>(local_info, std::move(async_client),
							dispatcher, service_method, random, scope,
							rate_limit_settings, skip_subsequent_node)),
        grpc_mux_subscription_(grpc_mux_, callbacks_, stats, type_url, dispatcher,
                               init_fetch_timeout) {}

  void pause() { grpc_mux_->pause(type_url_); }
  void resume() { grpc_mux_->resume(type_url_); }

  // Config::Subscription
  void start(const std::set<std::string>& resource_names) override {
    // Subscribe first, so we get failure callbacks if grpc_mux_->start() fails.
    grpc_mux_subscription_.start(resource_names);
    grpc_mux_->start();
  }

  void updateResourceInterest(const std::set<std::string>& update_to_these_names) override {
    grpc_mux_subscription_.updateResourceInterest(update_to_these_names);
  }

  std::shared_ptr<Config::GrpcMuxImpl> grpcMux() { return grpc_mux_; }

private:
  Config::SubscriptionCallbacks& callbacks_;
  std::string type_url_;
  std::shared_ptr<Config::GrpcMuxImpl> grpc_mux_;
  Config::GrpcMuxSubscriptionImpl grpc_mux_subscription_;
};

std::unique_ptr<GrpcSubscriptionImpl>
subscribe(const std::string& type_url, const std::string& grpc_method,
	  const LocalInfo::LocalInfo& local_info,
	  Upstream::ClusterManager& cm, Event::Dispatcher& dispatcher,
	  Runtime::RandomGenerator& random, Stats::Scope &scope, Envoy::Config::SubscriptionCallbacks& callbacks);

} // namespace Cilium
} // namespace Envoy
07070100000025000081A4000003E800000064000000015E17A24700001C80000000000000000000000000000000000000002900000000cilium-proxy-20200109/cilium/host_map.cc  #include "cilium/host_map.h"
#include "cilium/api/nphds.pb.validate.h"
#include "cilium/grpc_subscription.h"

#include <string>
#include <unordered_set>

#include "common/config/utility.h"
#include "common/protobuf/protobuf.h"

namespace Envoy {
namespace Cilium {

template <typename T>
unsigned int checkPrefix(T addr, bool have_prefix, unsigned int plen, absl::string_view host) {
  const unsigned int PLEN_MAX = sizeof(T)*8;
  if (!have_prefix) {
    return PLEN_MAX;
  }
  if (plen > PLEN_MAX) {
    throw EnvoyException(fmt::format("NetworkPolicyHosts: Invalid prefix length in \'{}\'", host));
  }
  // Check for 1-bits after the prefix
  if ((plen == 0 && addr) || (plen > 0 && addr & ntoh((T(1) << (PLEN_MAX - plen)) - 1))) {
    throw EnvoyException(fmt::format("NetworkPolicyHosts: Non-prefix bits set in \'{}\'", host));
  }
  return plen;
}

struct ThreadLocalHostMapInitializer : public PolicyHostMap::ThreadLocalHostMap {
protected:
  friend class PolicyHostMap; // PolicyHostMap can insert();

  // find the map of the given prefix length, insert in the decreasing order if it does
  // not exist
  template <typename M>
  M& getMap(std::vector<std::pair<unsigned int, M>>& maps, unsigned int plen) {
    auto it = maps.begin();
    for (; it != maps.end(); it++) {
      if (it->first > plen) {
	ENVOY_LOG(trace, "Skipping map for prefix length {} while looking for {}", it->first, plen);
	continue; // check the next one
      }
      if (it->first == plen) {
	ENVOY_LOG(trace, "Found existing map for prefix length {}", plen);
	return it->second;
      }
      // Current pair has smaller prefix, insert before it to maintain order
      ENVOY_LOG(trace, "Inserting map for prefix length {} before prefix length {}", plen, it->first);
      break;
    }
    // not found, insert before the position 'it'
    ENVOY_LOG(trace, "Inserting map for prefix length {}", plen);
    return maps.emplace(it, std::make_pair(plen, M{}))->second;
  }

  bool insert(uint32_t addr, unsigned int plen, uint64_t policy) {
    auto pair = getMap(ipv4_to_policy_, plen).emplace(std::make_pair(addr, policy));
    return pair.second;
  }

  bool insert(absl::uint128 addr, unsigned int plen, uint64_t policy) {
    auto pair = getMap(ipv6_to_policy_, plen).emplace(std::make_pair(addr, policy));
    return pair.second;
  }

  void insert(const cilium::NetworkPolicyHosts& proto) {
    uint64_t policy = proto.policy();
    const auto& hosts = proto.host_addresses();
    std::string buf;

    for (const auto& host: hosts) {
      const char *addr = host.c_str();
      unsigned int plen = 0;

      ENVOY_LOG(trace, "NetworkPolicyHosts: Inserting CIDR->ID mapping {}->{}...", host, policy);

      // Find the prefix length if any
      const char *slash = strchr(addr, '/');
      bool have_prefix = (slash != nullptr);
      if (have_prefix) {
	const char *pstr = slash + 1;
	// Must start with a digit and have nothing after a zero.
	if (*pstr < '0' || *pstr > '9' || (*pstr == '0' && *(pstr + 1) != '\0')) {
	  throw EnvoyException(fmt::format("NetworkPolicyHosts: Invalid prefix length in \'{}\'", host));
	}
	// Convert to base 10 integer as long as there are digits and plen is not too large.
	// If plen is already 13, next digit will make it at least 130, which is too much.
	while (*pstr >= '0' && *pstr <= '9' && plen < 13) {
	  plen = plen * 10 + (*pstr++ - '0');
	}
	if (*pstr != '\0') {
	  throw EnvoyException(fmt::format("NetworkPolicyHosts: Invalid prefix length in \'{}\'", host));
	}
	// Copy the address without the prefix
	buf.assign(addr, slash);
	addr = buf.c_str();
      }

      uint32_t addr4;
      int rc = inet_pton(AF_INET, addr, &addr4);
      if (rc == 1) {
	plen = checkPrefix(addr4, have_prefix, plen, host);
	if (!insert(addr4, plen, policy)) {
	  uint64_t existing_policy = resolve(addr4);
	  throw EnvoyException(fmt::format("NetworkPolicyHosts: Duplicate host entry \'{}\' for policy {}, already mapped to {}", host, policy, existing_policy));
	}
	continue;
      }
      absl::uint128 addr6;
      rc = inet_pton(AF_INET6, addr, &addr6);
      if (rc == 1) {
	plen = checkPrefix(addr6, have_prefix, plen, host);
	if (!insert(addr6, plen, policy)) {
	  uint64_t existing_policy = resolve(addr6);
	  throw EnvoyException(fmt::format("NetworkPolicyHosts: Duplicate host entry \'{}\' for policy {}, already mapped to {}", host, policy, existing_policy));
	}
	continue;
      }
      throw EnvoyException(fmt::format("NetworkPolicyHosts: Invalid host entry \'{}\' for policy {}", host, policy));
    }
  }
};

uint64_t PolicyHostMap::instance_id_ = 0;

// This is used directly for testing with a file-based subscription
PolicyHostMap::PolicyHostMap(ThreadLocal::SlotAllocator& tls)
    : tls_(tls.allocateSlot()), validation_visitor_(ProtobufMessage::getNullValidationVisitor()) {
  instance_id_++;
  name_ = "cilium.hostmap." + fmt::format("{}", instance_id_) + ".";
  ENVOY_LOG(debug, "PolicyHostMap({}) created.", name_);  

  auto empty_map = std::make_shared<ThreadLocalHostMapInitializer>();
  tls_->set([empty_map](Event::Dispatcher&) -> ThreadLocal::ThreadLocalObjectSharedPtr {
      return empty_map;
  });
}

// This is used in production
PolicyHostMap::PolicyHostMap(const LocalInfo::LocalInfo& local_info, Upstream::ClusterManager& cm,
			     Event::Dispatcher& dispatcher, Runtime::RandomGenerator& random,
			     Stats::Scope &scope, ThreadLocal::SlotAllocator& tls)
  : PolicyHostMap(tls) {
  scope_ = scope.createScope(name_);
  subscription_ = subscribe("type.googleapis.com/cilium.NetworkPolicyHosts", "cilium.NetworkPolicyHostsDiscoveryService.StreamNetworkPolicyHosts", local_info, cm, dispatcher, random, *scope_, *this);
}

void PolicyHostMap::onConfigUpdate(const Protobuf::RepeatedPtrField<ProtobufWkt::Any>& resources, const std::string& version_info) {
  ENVOY_LOG(debug, "PolicyHostMap::onConfigUpdate({}), {} resources, version: {}", name_, resources.size(), version_info);

  auto newmap = std::make_shared<ThreadLocalHostMapInitializer>();

  for (const auto& resource: resources) {
    auto config = MessageUtil::anyConvert<cilium::NetworkPolicyHosts>(resource);
    ENVOY_LOG(trace, "Received NetworkPolicyHosts for policy {} in onConfigUpdate() version {}", config.policy(), version_info);

    MessageUtil::validate(config, validation_visitor_);

    newmap->insert(config);
  }

  // Force 'this' to be not deleted for as long as the lambda stays
  // alive.  Note that generally capturing a shared pointer is
  // dangerous as it may happen that there is a circular reference
  // from 'this' to itself via the lambda capture, leading to 'this'
  // never being released. It should happen in this case, though.
  std::shared_ptr<PolicyHostMap> shared_this = shared_from_this();

  // Assign the new map to all threads.
  tls_->set([shared_this, newmap](Event::Dispatcher&) -> ThreadLocal::ThreadLocalObjectSharedPtr {
      UNREFERENCED_PARAMETER(shared_this);
      ENVOY_LOG(trace, "PolicyHostMap: Assigning new map");
      return newmap;
  });
  logmaps("onConfigUpdate");
}

void PolicyHostMap::onConfigUpdateFailed(Envoy::Config::ConfigUpdateFailureReason, const EnvoyException*) {
  // We need to allow server startup to continue, even if we have a bad
  // config.
}

} // namespace Cilium
} // namespace Envoy
07070100000026000081A4000003E800000064000000015E17A24700001A97000000000000000000000000000000000000002800000000cilium-proxy-20200109/cilium/host_map.h   #pragma once

#include <arpa/inet.h>

#include "envoy/local_info/local_info.h"
#include "envoy/upstream/cluster_manager.h"
#include "envoy/event/dispatcher.h"

#include "common/common/logger.h"
#include "common/network/utility.h"
#include "common/protobuf/message_validator_impl.h"
#include "envoy/config/subscription.h"
#include "envoy/singleton/instance.h"
#include "envoy/thread_local/thread_local.h"

#include "cilium/api/nphds.pb.h"

#include "absl/numeric/int128.h"

// std::hash specialization for Abseil uint128, needed for unordered_map key.
namespace std {
  template <> struct hash<absl::uint128>
  {
    size_t operator()(const absl::uint128& x) const
    {
      return hash<uint64_t>{}(absl::Uint128Low64(x)) ^ (hash<uint64_t>{}(absl::Uint128High64(x)) << 1);
    }
  };
}

namespace Envoy {
namespace Cilium {

template <typename I> I ntoh(I);
template <> inline uint32_t ntoh(uint32_t addr) { return ntohl(addr); }
template <> inline absl::uint128 ntoh(absl::uint128 addr) { return Network::Utility::Ip6ntohl(addr); }
template <typename I> I hton(I);
template <> inline uint32_t hton(uint32_t addr) { return htonl(addr); }
template <> inline absl::uint128 hton(absl::uint128 addr) { return Network::Utility::Ip6htonl(addr); }

template <typename I> I masked(I addr, unsigned int plen) {
  const unsigned int PLEN_MAX = sizeof(I)*8;
  return plen == 0 ? I(0) : addr & ~hton((I(1) << (PLEN_MAX - plen)) - 1);
};

enum ID : uint64_t { UNKNOWN = 0, WORLD = 2 };

class PolicyHostMap : public Singleton::Instance,
                      public Config::SubscriptionCallbacks,
                      public std::enable_shared_from_this<PolicyHostMap>,
                      public Logger::Loggable<Logger::Id::config> {
public:
  PolicyHostMap(const LocalInfo::LocalInfo& local_info,
		Upstream::ClusterManager& cm, Event::Dispatcher& dispatcher,
		Runtime::RandomGenerator& random, Stats::Scope &scope, ThreadLocal::SlotAllocator& tls);
  PolicyHostMap(ThreadLocal::SlotAllocator& tls);
  ~PolicyHostMap() {
    ENVOY_LOG(debug, "Cilium PolicyHostMap({}): PolicyHostMap is deleted NOW!", name_);
  }

  void startSubscription() { subscription_->start({}); }

  // This is used for testing with a file-based subscription
  void startSubscription(std::unique_ptr<Envoy::Config::Subscription>&& subscription) {
    subscription_ = std::move(subscription);
    startSubscription();
  }

  // A shared pointer to a immutable copy is held by each thread. Changes are done by
  // creating a new version and assigning the new shared pointer to the thread local
  // slot on each thread.
  struct ThreadLocalHostMap : public ThreadLocal::ThreadLocalObject,
                              public Logger::Loggable<Logger::Id::config> {
  public:
    void logmaps(const std::string& msg) const {
      char buf[INET6_ADDRSTRLEN];
      std::string ip4, ip6, prefix;
      bool first = true;
      for (const auto& mask: ipv4_to_policy_) {
	std::string prefix = fmt::format("{}", mask.first);
        for (const auto& pair: mask.second) {
	  if (!first) {
	    ip4 += ", ";
	  }
	  first = false;
	  ip4 += fmt::format("{}/{}->{}", inet_ntop(AF_INET, &pair.first, buf, sizeof(buf)),
			     prefix, pair.second);
	}
      }
      first = true;
      for (const auto& mask: ipv6_to_policy_) {
	std::string prefix = fmt::format("{}", mask.first);
        for (const auto& pair: mask.second) {
	  if (!first) {
	    ip6 += ", ";
	  }
	  first = false;
	  ip6 += fmt::format("{}/{}->{}", inet_ntop(AF_INET6, &pair.first, buf, sizeof(buf)),
			     prefix, pair.second);
	}
      }
      ENVOY_LOG(debug, "PolicyHostMap::{}: IPv4: [{}], IPv6: [{}]", msg, ip4, ip6);
    }

    // Find the longest prefix match of the addr, return the matching policy id,
    // or ID::WORLD if there is no match.
    uint64_t resolve(uint32_t addr4) const {
      for (const auto& pair: ipv4_to_policy_) {
	auto it = pair.second.find(masked(addr4, pair.first));
	if (it != pair.second.end()) {
	  return it->second;
	}
      }
      return ID::UNKNOWN;
    }

    uint64_t resolve(absl::uint128 addr6) const {
      for (const auto& pair: ipv6_to_policy_) {
	auto it = pair.second.find(masked(addr6, pair.first));
	if (it != pair.second.end()) {
	  return it->second;
	}
      }
      return ID::UNKNOWN;
    }
	  
    uint64_t resolve(const Network::Address::Ip* addr) const {
      auto* ipv4 = addr->ipv4();
      if (ipv4) {
	return resolve(ipv4->address());
      }
      auto* ipv6 = addr->ipv6();
      if (ipv6) {
	return resolve(ipv6->address());
      }
      return ID::WORLD;
    }

  protected:
    // Vectors of <prefix-len>, <address-map> pairs, ordered in the decreasing prefix length,
    // where map keys are addresses of the given prefix length. Address bits outside of the
    // prefix are zeroes.
    std::vector<std::pair<unsigned int, std::unordered_map<uint32_t, uint64_t>>> ipv4_to_policy_;
    std::vector<std::pair<unsigned int, std::unordered_map<absl::uint128, uint64_t>>> ipv6_to_policy_;
  };
  typedef std::shared_ptr<ThreadLocalHostMap> ThreadLocalHostMapSharedPtr;

  const ThreadLocalHostMap* getHostMap() const {
    return tls_->get().get() ? &tls_->getTyped<ThreadLocalHostMap>() : nullptr;
  }

  uint64_t resolve(const Network::Address::Ip* addr) const {
    const ThreadLocalHostMap* hostmap = getHostMap();
    return (hostmap != nullptr) ? hostmap->resolve(addr) : ID::UNKNOWN;
  }

  void logmaps(const std::string& msg) {
    if (ENVOY_LOG_CHECK_LEVEL(debug)) {
      auto tlsmap = getHostMap();
      if (tlsmap) {
	tlsmap->logmaps(msg);
      } else {
	ENVOY_LOG(debug, "PolicyHostMap::{}: Error getting thread local map", msg);
      }
    }
  }

  // Config::SubscriptionCallbacks
  void onConfigUpdate(const Protobuf::RepeatedPtrField<ProtobufWkt::Any>& resources, const std::string& version_info) override;
  void onConfigUpdate(const Protobuf::RepeatedPtrField<envoy::api::v2::Resource>& added_resources,
		      const Protobuf::RepeatedPtrField<std::string>& removed_resources,
		      const std::string& system_version_info) override {
    // NOT IMPLEMENTED YET.
    UNREFERENCED_PARAMETER(added_resources);
    UNREFERENCED_PARAMETER(removed_resources);
    UNREFERENCED_PARAMETER(system_version_info);
  }
  void onConfigUpdateFailed(Envoy::Config::ConfigUpdateFailureReason, const EnvoyException* e) override;
  std::string resourceName(const ProtobufWkt::Any& resource) override {
    return fmt::format("{}", MessageUtil::anyConvert<cilium::NetworkPolicyHosts>(resource).policy());
  }

private:
  ThreadLocal::SlotPtr tls_;
  ProtobufMessage::ValidationVisitor& validation_visitor_;
  Stats::ScopePtr scope_;
  std::unique_ptr<Envoy::Config::Subscription> subscription_;
  static uint64_t instance_id_;
  std::string name_;
};

} // namespace Cilium
} // namespace Envoy
 07070100000027000081A4000003E800000064000000015E17A24700000ADE000000000000000000000000000000000000002800000000cilium-proxy-20200109/cilium/ipcache.cc   #include "ipcache.h"

#include <arpa/inet.h>
//#include <string.h>

//#include <cstdint>

#include "linux/bpf.h"

namespace Envoy {
namespace Cilium {

// These must be kept in sync with Cilium source code, should refactor
// them to a separate include file we can include here instead of
// copying them!

typedef uint32_t __be32; // Beware of the byte order!
typedef uint64_t __u64;
typedef uint32_t __u32;
typedef uint16_t __u16;
typedef uint8_t __u8;

struct ipcache_key {
        struct bpf_lpm_trie_key lpm_key;
        __u16 pad1;
        __u8 pad2;
        __u8 family;
        union {
                struct {
                        __u32           ip4;
                        __u32           pad4;
                        __u32           pad5;
                        __u32           pad6;
                };
		__u32 ip6[4];
        };
} __attribute__((packed));

struct remote_endpoint_info {
        __u32           sec_label;
        __u32           tunnel_endpoint;
        __u8            key;
};

#define ENDPOINT_KEY_IPV4 1
#define ENDPOINT_KEY_IPV6 2

IPCache::IPCache(const std::string &bpf_root)
  : Bpf(BPF_MAP_TYPE_LPM_TRIE, sizeof(struct ipcache_key),
	sizeof(struct remote_endpoint_info)),
    bpf_root_(bpf_root) {
}
  
bool IPCache::Open() {
  // Open the bpf maps from Cilium specific paths
  std::string path(bpf_root_ + "/tc/globals/cilium_ipcache");
  if (!open(path)) {
    ENVOY_LOG(info, "cilium.ipcache: Cannot open ipcache map at {}", path);
    return false;
  }
  ENVOY_LOG(debug, "cilium.ipcache: Opened ipcache.");
  return true;
}

uint32_t IPCache::resolve(const Network::Address::Ip* ip) {
  struct ipcache_key key {};
  struct remote_endpoint_info value {};

  if (ip->version() == Network::Address::IpVersion::v4) {
    key.lpm_key = { 32 + 32, {} };
    key.family = ENDPOINT_KEY_IPV4;
    key.ip4 = ip->ipv4()->address();
  } else {
    key.lpm_key = { 32 + 128, {} };
    key.family = ENDPOINT_KEY_IPV6;
    absl::uint128 ip6 = ip->ipv6()->address();
    memcpy(&key.ip6, &ip6, sizeof key.ip6);
  }

  if (key.family == ENDPOINT_KEY_IPV4) {
    ENVOY_LOG(trace,
	      "cilium.ipcache: Looking up key: {:x}, prefixlen: {}",
	      ntohl(key.ip4), key.lpm_key.prefixlen - 32);
  } else if (key.family == ENDPOINT_KEY_IPV6) {
    ENVOY_LOG(trace,
	      "cilium.ipcache: Looking up key: {:x}:{:x}:{:x}:{:x}, prefixlen {}",
	      ntohl(key.ip6[0]), ntohl(key.ip6[1]), ntohl(key.ip6[2]), ntohl(key.ip6[3]), key.lpm_key.prefixlen - 32);
  }

  if (lookup(&key, &value)) {
    ENVOY_LOG(debug, "cilium.ipcache: {} has ID {}", ip->addressAsString(), value.sec_label);
    return value.sec_label;
  }
  ENVOY_LOG(info, "cilium.ipcache: bpf map lookup failed: {}", strerror(errno));
  return 0;
}

} // namespace Cilium
} // namespace Envoy
  07070100000028000081A4000003E800000064000000015E17A2470000021C000000000000000000000000000000000000002700000000cilium-proxy-20200109/cilium/ipcache.h    #pragma once

#include "common/common/logger.h"
#include "envoy/network/address.h"
#include "envoy/singleton/instance.h"

#include "bpf.h"

namespace Envoy {
namespace Cilium {

class IPCache : public Singleton::Instance, public Bpf {
public:
  IPCache(const std::string &bpf_root);
  bool Open();

  const std::string& bpfRoot() { return bpf_root_; }

  uint32_t resolve(const Network::Address::Ip* ip);

private:
  std::string bpf_root_;
};

typedef std::shared_ptr<IPCache> IPCacheSharedPtr;
 
} // namespace Cilium
} // namespace Envoy
07070100000029000081A4000003E800000064000000015E17A247000015C9000000000000000000000000000000000000002900000000cilium-proxy-20200109/cilium/l7policy.cc  #include "cilium/l7policy.h"
#include "cilium/api/l7policy.pb.validate.h"

#include <string>

#include "envoy/registry/registry.h"
#include "envoy/singleton/manager.h"

#include "common/buffer/buffer_impl.h"
#include "common/common/enum_to_int.h"
#include "common/config/utility.h"
#include "common/http/header_map_impl.h"

#include "cilium/network_policy.h"
#include "cilium/socket_option.h"

namespace Envoy {
namespace Cilium {

class ConfigFactory
    : public Server::Configuration::NamedHttpFilterConfigFactory {
public:
  Http::FilterFactoryCb
  createFilterFactory(const Json::Object& json, const std::string &,
                      Server::Configuration::FactoryContext& context) override {
    auto config = std::make_shared<Cilium::Config>(json, context);
    return [config](
               Http::FilterChainFactoryCallbacks& callbacks) mutable -> void {
      callbacks.addStreamFilter(std::make_shared<Cilium::AccessFilter>(config));
    };
  }

  Http::FilterFactoryCb
  createFilterFactoryFromProto(const Protobuf::Message& proto_config, const std::string&,
                               Server::Configuration::FactoryContext& context) override {
    auto config = std::make_shared<Cilium::Config>(
        MessageUtil::downcastAndValidate<const ::cilium::L7Policy&>(proto_config, context.messageValidationVisitor()), context);
    return [config](
               Http::FilterChainFactoryCallbacks &callbacks) mutable -> void {
      callbacks.addStreamFilter(std::make_shared<Cilium::AccessFilter>(config));
    };
  }

  ProtobufTypes::MessagePtr createEmptyConfigProto() override {
    return std::make_unique<::cilium::L7Policy>();
  }

  std::string name() override { return "cilium.l7policy"; }
};

/**
 * Static registration for this filter. @see RegisterFactory.
 */
static Registry::RegisterFactory<
    ConfigFactory, Server::Configuration::NamedHttpFilterConfigFactory>
    register_;

Config::Config(const std::string& access_log_path, const std::string& denied_403_body,
	       Server::Configuration::FactoryContext& context)
    : time_source_(context.timeSource()), stats_{ALL_CILIUM_STATS(POOL_COUNTER_PREFIX(context.scope(), "cilium"))},
      denied_403_body_(denied_403_body), access_log_(nullptr) {
  if (access_log_path.length()) {
    access_log_ = AccessLog::Open(access_log_path);
    if (!access_log_) {
      ENVOY_LOG(warn, "Cilium filter can not open access log socket {}", access_log_path);
    }
  }
  if (denied_403_body_.length() == 0) {
    denied_403_body_ = "Access denied";
  }
  size_t len = denied_403_body_.length();
  if (len < 2 || denied_403_body_[len-2] != '\r' || denied_403_body_[len-1] != '\n') {
    denied_403_body_.append("\r\n");
  }
}

Config::Config(const Json::Object &config, Server::Configuration::FactoryContext& context)
    : Config(config.getString("access_log_path"), config.getString("denied_403_body"), context) {}

Config::Config(const ::cilium::L7Policy &config, Server::Configuration::FactoryContext& context)
    : Config(config.access_log_path(), config.denied_403_body(), context) {
  if (config.policy_name() != "") {
    throw EnvoyException(fmt::format("cilium.l7policy: 'policy_name' is no longer supported: \'{}\'", config.DebugString()));
  }
  if (config.has_is_ingress()) {
    ENVOY_LOG(warn, "cilium.l7policy: 'is_ingress' config option is deprecated and is ignored: \'{}\'", config.DebugString());
  }
}

Config::~Config() {
  if (access_log_) {
    access_log_->Close();
  }
}

void Config::Log(AccessLog::Entry &entry, ::cilium::EntryType type) {
  if (access_log_) {
    access_log_->Log(entry, type);
  }
}

void AccessFilter::onDestroy() {}

Http::FilterHeadersStatus AccessFilter::decodeHeaders(Http::HeaderMap& headers, bool) {
  headers.remove(Http::Headers::get().EnvoyOriginalDstHost);
  const auto& conn = callbacks_->connection();
  bool allowed = false;

  if (conn) {
    const auto option = Cilium::GetSocketOption(conn->socketOptions());
    if (option) {
      std::string policy_name = option->pod_ip_;
      bool ingress = option->ingress_;

      // Fill in the log entry
      log_entry_.InitFromRequest(policy_name, ingress, conn, headers, callbacks_->streamInfo());

      allowed = option->policy_ && option->policy_->Allowed(ingress, option->port_,
							    ingress ? option->identity_ : option->destination_identity_,
							    headers, log_entry_);
      ENVOY_LOG(debug, "Cilium L7: {} ({}->{}) policy lookup for endpoint {}: {}",
		ingress ? "Ingress" : "Egress",
		option->identity_, option->destination_identity_,
		policy_name, allowed ? "ALLOW" : "DENY");
    } else {
      ENVOY_LOG(warn, "Cilium L7: Cilium Socket Option not found");
    }
  } else {
    ENVOY_LOG(warn, "Cilium L7: No connection");
  }

  if (!allowed) {
    denied_ = true;
    config_->stats_.access_denied_.inc();

    // Return a 403 response
    callbacks_->sendLocalReply(Http::Code::Forbidden, config_->denied_403_body_, nullptr, absl::nullopt, absl::string_view());
    return Http::FilterHeadersStatus::StopIteration;
  }

  config_->Log(log_entry_, ::cilium::EntryType::Request);
  return Http::FilterHeadersStatus::Continue;
}

Http::FilterHeadersStatus AccessFilter::encodeHeaders(Http::HeaderMap &headers,
                                                      bool) {
  log_entry_.UpdateFromResponse(headers, config_->time_source_);
  config_->Log(log_entry_, denied_ ? ::cilium::EntryType::Denied
                                   : ::cilium::EntryType::Response);
  return Http::FilterHeadersStatus::Continue;
}

} // namespace Cilium
} // namespace Envoy
   0707010000002A000081A4000003E800000064000000015E17A24700000CC2000000000000000000000000000000000000002800000000cilium-proxy-20200109/cilium/l7policy.h   #pragma once

#include <string>

#include "absl/types/optional.h"

#include "envoy/stats/stats_macros.h"
#include "envoy/server/filter_config.h"

#include "common/common/logger.h"

#include "cilium/accesslog.h"
#include "cilium/api/l7policy.pb.h"

namespace Envoy {
namespace Cilium {

/**
 * All Cilium L7 filter stats. @see stats_macros.h
 */
// clang-format off
#define ALL_CILIUM_STATS(COUNTER)                                                                  \
  COUNTER(access_denied)                                                                           \
// clang-format on

/**
 * Struct definition for all Cilium L7 filter stats. @see stats_macros.h
 */
struct FilterStats {
  ALL_CILIUM_STATS(GENERATE_COUNTER_STRUCT)
};

/**
 * Per listener configuration for Cilium HTTP filter. This
 * is accessed by multiple working thread instances of the filter.
 */
class Config : public Logger::Loggable<Logger::Id::filter> {
public:
  Config(const std::string& access_log_path, const std::string& denied_403_body,
	 Server::Configuration::FactoryContext& context);
  Config(const Json::Object &config, Server::Configuration::FactoryContext& context);
  Config(const ::cilium::L7Policy &config, Server::Configuration::FactoryContext& context);
  ~Config();

  void Log(AccessLog::Entry &, ::cilium::EntryType);

  TimeSource& time_source_;
  FilterStats stats_;
  std::string denied_403_body_;

private:
  AccessLog *access_log_;
};

typedef std::shared_ptr<Config> ConfigSharedPtr;

// Each request gets their own instance of this filter, and
// they can run parallel from multiple worker threads, all accessing
// the shared configuration.
class AccessFilter : public Http::StreamFilter,
                     Logger::Loggable<Logger::Id::filter> {
public:
  AccessFilter(ConfigSharedPtr& config) : config_(config), denied_(false) {}

  // Http::StreamFilterBase
  void onDestroy() override;

  // Http::StreamDecoderFilter
  Http::FilterHeadersStatus decodeHeaders(Http::HeaderMap& headers, bool) override;
  Http::FilterDataStatus decodeData(Buffer::Instance&, bool) override {
    return Http::FilterDataStatus::Continue;
  }
  Http::FilterTrailersStatus decodeTrailers(Http::HeaderMap&) override {
    return Http::FilterTrailersStatus::Continue;
  }
  void setDecoderFilterCallbacks(Http::StreamDecoderFilterCallbacks& callbacks) override {
    callbacks_ = &callbacks;
  }

  // Http::StreamEncoderFilter
  Http::FilterHeadersStatus encode100ContinueHeaders(Http::HeaderMap&) override {
    return Http::FilterHeadersStatus::Continue;
  }
  Http::FilterHeadersStatus encodeHeaders(Http::HeaderMap& headers, bool end_stream) override;
  Http::FilterDataStatus encodeData(Buffer::Instance&, bool) override {
    return Http::FilterDataStatus::Continue;
  }
  Http::FilterTrailersStatus encodeTrailers(Http::HeaderMap&) override {
    return Http::FilterTrailersStatus::Continue;
  }
  void setEncoderFilterCallbacks(Http::StreamEncoderFilterCallbacks&) override {}
  Http::FilterMetadataStatus encodeMetadata(Http::MetadataMap&) override {
    return Http::FilterMetadataStatus::Continue;
  }

private:
  ConfigSharedPtr config_;
  Http::StreamDecoderFilterCallbacks* callbacks_;

  bool denied_;
  AccessLog::Entry log_entry_;
};

} // Cilium
} // Envoy
  0707010000002B000081A4000003E800000064000000015E17A24700001905000000000000000000000000000000000000002F00000000cilium-proxy-20200109/cilium/network_filter.cc    #include <dlfcn.h>

#include "envoy/network/listen_socket.h"
#include "envoy/registry/registry.h"
#include "envoy/server/filter_config.h"

#include "common/buffer/buffer_impl.h"
#include "common/common/assert.h"
#include "common/common/fmt.h"

#include "cilium/api/network_filter.pb.validate.h"
#include "cilium/network_filter.h"
#include "cilium/network_policy.h"
#include "cilium/socket_option.h"

namespace Envoy {
namespace Server {
namespace Configuration {

/**
 * Config registration for the bpf metadata filter. @see
 * NamedNetworkFilterConfigFactory.
 */
class CiliumNetworkConfigFactory : public NamedNetworkFilterConfigFactory {
public:
  // NamedNetworkFilterConfigFactory
  Network::FilterFactoryCb
  createFilterFactoryFromProto(const Protobuf::Message& proto_config,
			       FactoryContext& context) override {
    auto config = std::make_shared<Filter::CiliumL3::Config>(MessageUtil::downcastAndValidate<const ::cilium::NetworkFilter&>(proto_config, context.messageValidationVisitor()), context);
    return [config](Network::FilterManager &filter_manager) mutable -> void {
      filter_manager.addFilter(std::make_shared<Filter::CiliumL3::Instance>(config));
    };
  }

  Network::FilterFactoryCb
  createFilterFactory(const Json::Object& json_config, FactoryContext& context) override {
    auto config = std::make_shared<Filter::CiliumL3::Config>(json_config, context);
    return [config](Network::FilterManager &filter_manager) mutable -> void {
      filter_manager.addFilter(std::make_shared<Filter::CiliumL3::Instance>(config));
    };
  }
  ProtobufTypes::MessagePtr createEmptyConfigProto() override {
    return std::make_unique<::cilium::NetworkFilter>();
  }

  std::string name() override { return "cilium.network"; }
};

/**
 * Static registration for the bpf metadata filter. @see RegisterFactory.
 */
static Registry::RegisterFactory<CiliumNetworkConfigFactory, NamedNetworkFilterConfigFactory>
    registered_;

} // namespace Configuration
} // namespace Server

namespace Filter {
namespace CiliumL3 {

Config::Config(const ::cilium::NetworkFilter& config, Server::Configuration::FactoryContext&) {
  if (config.proxylib().length() > 0) {
    proxylib_ = std::make_shared<Cilium::GoFilter>(config.proxylib(), config.proxylib_params());
  }
  if (config.policy_name() != "" || config.l7_proto() != "") {
    throw EnvoyException(fmt::format("network: 'policy_name' and 'go_proto' are no longer supported: \'{}\'", config.DebugString()));
  }
}
  
Config::Config(const Json::Object&, Server::Configuration::FactoryContext&) {} // Dummy, not used.

Network::FilterStatus Instance::onNewConnection() {
  ENVOY_LOG(debug, "Cilium Network: onNewConnection");
  auto& conn = callbacks_->connection();
  const auto option = Cilium::GetSocketOption(conn.socketOptions());
  if (option) {
    maps_ = option->GetProxyMap();
    if (maps_) {
      // Insert connection callback to delete the proxymap entry once the connection is closed.
      proxy_port_ = option->proxy_port_;
      if (proxy_port_ != 0) {
	conn.addConnectionCallbacks(*this);
	ENVOY_CONN_LOG(debug, "Cilium Network: Added connection callbacks to delete proxymap entry later", conn);
      }
    }

    const std::string& policy_name = option->pod_ip_;
    std::string l7proto;
    if (config_->proxylib_.get() != nullptr && option->policy_ &&
	(option->policy_->useProxylib(option->ingress_, option->port_,
				      option->ingress_ ? option->identity_ : option->destination_identity_,
				      l7proto))) {
      go_parser_ = config_->proxylib_->NewInstance(conn, l7proto, option->ingress_, option->identity_,
						   option->destination_identity_, conn.remoteAddress()->asString(),
						   conn.localAddress()->asString(), policy_name);
      if (go_parser_.get() == nullptr) {
	ENVOY_CONN_LOG(warn, "Cilium Network: Go parser \"{}\" not found", conn, l7proto);
	return Network::FilterStatus::StopIteration;
      }
    }
  } else {
    ENVOY_CONN_LOG(warn, "Cilium Network: Cilium Socket Option not found", conn);
  }

  return Network::FilterStatus::Continue;
}

Network::FilterStatus Instance::onData(Buffer::Instance& data, bool end_stream) {
  if (go_parser_) {
    FilterResult res = go_parser_->OnIO(false, data, end_stream); // 'false' marks original direction data
    ENVOY_CONN_LOG(trace, "Cilium Network::onData: \'GoFilter::OnIO\' returned {}", callbacks_->connection(), res);

    if (res != FILTER_OK) {
      // Drop the connection due to an error
      go_parser_->Close();
      return Network::FilterStatus::StopIteration;
    }

    if (go_parser_->WantReplyInject()) {
      auto& conn = callbacks_->connection();
      ENVOY_CONN_LOG(trace, "Cilium Network::onData: calling write() on an empty buffer", conn);

      // We have no idea when, if ever new data will be received on the
      // reverse direction. Connection write on an empty buffer will cause
      // write filter chain to be called, and gives our write path the
      // opportunity to inject data.
      Buffer::OwnedImpl empty;
      conn.write(empty, false);  
    }

    go_parser_->SetOrigEndStream(end_stream);
  }

  return Network::FilterStatus::Continue;
}

Network::FilterStatus Instance::onWrite(Buffer::Instance& data, bool end_stream) {
  if (go_parser_) {
    FilterResult res = go_parser_->OnIO(true, data, end_stream); // 'true' marks reverse direction data
    ENVOY_CONN_LOG(trace, "Cilium Network::OnWrite: \'GoFilter::OnIO\' returned {}", callbacks_->connection(), res);
  
    if (res != FILTER_OK) {
      // Drop the connection due to an error
      go_parser_->Close();
      return Network::FilterStatus::StopIteration;
    }

    // XXX: Unfortunately continueReading() continues from the next filter, and there seems to be no way
    // to trigger the whole filter chain to be called.

    go_parser_->SetReplyEndStream(end_stream);
  }

  return Network::FilterStatus::Continue;
}

void Instance::onEvent(Network::ConnectionEvent event) {
  if (event == Network::ConnectionEvent::RemoteClose ||
      event == Network::ConnectionEvent::LocalClose) {
    if (maps_) {
      auto& conn = callbacks_->connection();
      bool ok = maps_->removeBpfMetadata(conn, proxy_port_);
      ENVOY_CONN_LOG(debug, "Cilium Network: Connection Closed, proxymap cleanup {}", conn,
		     ok ? "succeeded" : "failed");
    }
  }
}

} // namespace CiliumL3
} // namespace Filter
} // namespace Envoy
   0707010000002C000081A4000003E800000064000000015E17A2470000084E000000000000000000000000000000000000002E00000000cilium-proxy-20200109/cilium/network_filter.h #pragma once

#include "envoy/json/json_object.h"
#include "envoy/network/connection.h"
#include "envoy/network/filter.h"
#include "envoy/server/filter_config.h"

#include "common/buffer/buffer_impl.h"
#include "common/common/logger.h"

#include "cilium/api/network_filter.pb.h"
#include "cilium/conntrack.h"
#include "cilium/proxylib.h"
#include "cilium/proxymap.h"

namespace Envoy {
namespace Filter {
namespace CiliumL3 {

/**
 * Shared configuration for Cilium network filter worker
 * Instances. Each new network connection (on each worker thread)
 * get's their own Instance, but they all share a common Config for
 * any given filter chain.
 */
class Config : Logger::Loggable<Logger::Id::config> {
public:
  Config(const ::cilium::NetworkFilter& config, Server::Configuration::FactoryContext& context);
  Config(const Json::Object& config, Server::Configuration::FactoryContext& context);
  virtual ~Config() {}

  Cilium::GoFilterSharedPtr proxylib_;
};

typedef std::shared_ptr<Config> ConfigSharedPtr;

/**
 * Implementation of a Cilium network filter.
 */
class Instance : public Network::Filter, public Network::ConnectionCallbacks,
                 Logger::Loggable<Logger::Id::filter> {
public:
  Instance(const ConfigSharedPtr& config) : config_(config) {}

  // Network::ReadFilter
  Network::FilterStatus onData(Buffer::Instance&, bool end_stream) override;
  Network::FilterStatus onNewConnection() override;
  void initializeReadFilterCallbacks(Network::ReadFilterCallbacks& callbacks) override {
    callbacks_ = &callbacks;
  }

  // Network::WriteFilter
  Network::FilterStatus onWrite(Buffer::Instance&, bool end_stream) override;
  
  // Network::ConnectionCallbacks
  void onEvent(Network::ConnectionEvent) override;
  void onAboveWriteBufferHighWatermark() override {}
  void onBelowWriteBufferLowWatermark() override {}

private:
  const ConfigSharedPtr config_;
  Network::ReadFilterCallbacks* callbacks_ = nullptr;
  Cilium::ProxyMapSharedPtr maps_{};
  uint16_t proxy_port_ = 0;
  Cilium::GoFilter::InstancePtr go_parser_;
};

} // namespace CiliumL3
} // namespace Filter
} // namespace Envoy
  0707010000002D000081A4000003E800000064000000015E17A24700005ED5000000000000000000000000000000000000002F00000000cilium-proxy-20200109/cilium/network_policy.cc    #include "cilium/network_policy.h"
#include "cilium/api/npds.pb.validate.h"
#include "cilium/grpc_subscription.h"

#include <string>
#include <unordered_set>

#include "common/config/utility.h"
#include "common/protobuf/protobuf.h"

namespace Envoy {
namespace Cilium {

uint64_t NetworkPolicyMap::instance_id_ = 0;

class PolicyInstanceImpl : public PolicyInstance {
public:
  PolicyInstanceImpl(const NetworkPolicyMap& parent, uint64_t hash, const cilium::NetworkPolicy& proto)
    : conntrack_map_name_(proto.conntrack_map_name()), hash_(hash), policy_proto_(proto),
      ingress_(parent, policy_proto_.ingress_per_port_policies()),
      egress_(parent, policy_proto_.egress_per_port_policies()) {}

protected:
  class HttpNetworkPolicyRule : public Logger::Loggable<Logger::Id::config> {
    static envoy::api::v2::route::HeaderMatcher matcher(const cilium::HeaderMatch& config) {
      envoy::api::v2::route::HeaderMatcher match;
      match.set_name(config.name());
      if (config.value().length() == 0) {
	match.set_present_match(true);
      } else {
	match.set_exact_match(config.value());
      }
      return match;
    }
    class HeaderMatch : public Envoy::Http::HeaderUtility::HeaderData {
    public:
      HeaderMatch(const cilium::HeaderMatch& config)
	: HeaderData(matcher(config)),
	match_action_(config.match_action()),
	mismatch_action_(config.mismatch_action()) {}

      cilium::HeaderMatch::MatchAction match_action_;
      cilium::HeaderMatch::MismatchAction mismatch_action_;
    };
  public:
    HttpNetworkPolicyRule(const cilium::HttpNetworkPolicyRule& rule) {
      ENVOY_LOG(trace, "Cilium L7 HttpNetworkPolicyRule():");
      for (const auto& header: rule.headers()) {
	headers_.emplace_back(std::make_unique<Envoy::Http::HeaderUtility::HeaderData>(header));
	const auto& header_data = *headers_.back();
	ENVOY_LOG(trace, "Cilium L7 HttpNetworkPolicyRule(): HeaderData {}={}",
		  header_data.name_.get(),
		  header_data.header_match_type_ == Http::HeaderUtility::HeaderMatchType::Range
		  ? fmt::format("[{}-{})", header_data.range_.start(), header_data.range_.end())
		  : header_data.header_match_type_ == Http::HeaderUtility::HeaderMatchType::Value
		  ? "<VALUE>"
		  : header_data.header_match_type_ == Http::HeaderUtility::HeaderMatchType::Present
		  ? "<PRESENT>"
		  : header_data.header_match_type_ == Http::HeaderUtility::HeaderMatchType::Regex
		  ? "<REGEX>" : "<UNKNOWN>");
      }
      for (const auto& config: rule.header_matches()) {
	header_matches_.emplace_back(HeaderMatch(config));
	const auto& header_data = header_matches_.back();
	ENVOY_LOG(trace, "Cilium L7 HttpNetworkPolicyRule(): HeaderData for headers_action {}={} (match: {}, mismatch: {})",
		  header_data.name_.get(),
		  header_data.header_match_type_ == Http::HeaderUtility::HeaderMatchType::Range
		  ? fmt::format("[{}-{})", header_data.range_.start(), header_data.range_.end())
		  : header_data.header_match_type_ == Http::HeaderUtility::HeaderMatchType::Value
		  ? header_data.value_
		  : header_data.header_match_type_ == Http::HeaderUtility::HeaderMatchType::Present
		  ? "<PRESENT>"
		  : header_data.header_match_type_ == Http::HeaderUtility::HeaderMatchType::Regex
		  ? "<REGEX>" : "<UNKNOWN>",
		  header_data.match_action_, header_data.mismatch_action_);
      }
    }

    bool Matches(const Envoy::Http::HeaderMap& headers) const {
      // Empty set matches any headers.
      return Envoy::Http::HeaderUtility::matchHeaders(headers, headers_);
    }

    // Should only be called after 'Matches' returns 'true'.
    // Returns 'true' if matching can continue
    bool HeaderMatches(Envoy::Http::HeaderMap& headers, Cilium::AccessLog::Entry& log_entry) const {
      bool accepted = true;
      for (const auto& header_data : header_matches_) {
	::cilium::KeyValue *kv;
	if (Envoy::Http::HeaderUtility::matchHeaders(headers, header_data)) {
	  // Match action
	  switch (header_data.match_action_) {
	  case cilium::HeaderMatch::CONTINUE_ON_MATCH:
	    continue;
	  case cilium::HeaderMatch::FAIL_ON_MATCH:
	  default: // fail closed if unknown action
	    accepted = false;
	    break;
	  case cilium::HeaderMatch::DELETE_ON_MATCH:
	    headers.remove(header_data.name_);
	    break;
	  }
	  kv = log_entry.entry.mutable_http()->add_rejected_headers();
	} else {
	  // Mismatch action
	  switch (header_data.mismatch_action_) {
	  case cilium::HeaderMatch::FAIL_ON_MISMATCH:
	  default:
	    kv = log_entry.entry.mutable_http()->add_missing_headers();
	    accepted = false;
	    break;
	  case cilium::HeaderMatch::CONTINUE_ON_MISMATCH:
	    kv = log_entry.entry.mutable_http()->add_missing_headers();
	    continue;
	  case cilium::HeaderMatch::ADD_ON_MISMATCH:
	    headers.addReferenceKey(header_data.name_, header_data.value_);
	    kv = log_entry.entry.mutable_http()->add_missing_headers();
	    break;
	  case cilium::HeaderMatch::DELETE_ON_MISMATCH:
	    if (header_data.header_match_type_ == Http::HeaderUtility::HeaderMatchType::Present) {
	      // presence match failed, nothing to do
	      continue;
	    }
	    {
	      // otherwise need to find out if the header existed or not
	      const Envoy::Http::HeaderEntry* entry;
	      auto res = headers.lookup(header_data.name_, &entry);
	      struct Ctx {
		const std::string& name_;
		const Envoy::Http::HeaderString* value_;
	      } ctx = {
		header_data.name_.get(),
		res == Envoy::Http::HeaderMap::Lookup::Found ? &entry->value() : nullptr
	      };
	      if (res == Envoy::Http::HeaderMap::Lookup::NotSupported) {
		// non-supported header, find by iteration
		headers.iterate([](const Envoy::Http::HeaderEntry& entry, void* ctx_) {
				  auto* ctx = static_cast<Ctx*>(ctx_);
				  if (entry.key() == ctx->name_) {
				    ctx->value_ = &entry.value();
				    return Envoy::Http::HeaderMap::Iterate::Break;
				  }
				  return Envoy::Http::HeaderMap::Iterate::Continue;
				}, &ctx);
	      }
	      if (!ctx.value_) {
		continue; // nothing to remove
	      }
	      // Remove the header with an incorrect value
	      headers.remove(header_data.name_);
	      kv = log_entry.entry.mutable_http()->add_rejected_headers();
	      kv->set_key(ctx.name_);
	      kv->set_value(ctx.value_->getStringView().data(), ctx.value_->getStringView().size());
	    }
	    continue;
	  case cilium::HeaderMatch::REPLACE_ON_MISMATCH:
	    headers.setReferenceKey(header_data.name_, header_data.value_);
	    kv = log_entry.entry.mutable_http()->add_missing_headers();
	    break;
	  }
	}
	kv->set_key(header_data.name_.get());
	kv->set_value(header_data.value_);  
      }
      return accepted;
    }

    std::vector<Envoy::Http::HeaderUtility::HeaderDataPtr> headers_; // Allowed if empty.
    std::vector<HeaderMatch> header_matches_;
  };

  class PortNetworkPolicyRule : public PortPolicy, public Logger::Loggable<Logger::Id::config> {
  public:
    PortNetworkPolicyRule(const NetworkPolicyMap& parent, const cilium::PortNetworkPolicyRule& rule)
      : l7_proto_(rule.l7_proto()) {
      for (const auto& remote: rule.remote_policies()) {
	ENVOY_LOG(trace, "Cilium L7 PortNetworkPolicyRule(): Allowing remote {}", remote);
	allowed_remotes_.emplace(remote);
      }
      if (rule.has_downstream_tls_context()) {
	auto config = rule.downstream_tls_context();
	envoy::api::v2::auth::DownstreamTlsContext context_config;
	auto tls_context = context_config.mutable_common_tls_context();
	if (config.trusted_ca() != "") {
	  auto require_tls_certificate = context_config.mutable_require_client_certificate();
	  require_tls_certificate->set_value(true);
	  auto validation_context = tls_context->mutable_validation_context();
	  auto trusted_ca = validation_context->mutable_trusted_ca();
	  trusted_ca->set_inline_string(config.trusted_ca());
	}
	if (config.certificate_chain() != "") {
	  auto tls_certificate = tls_context->add_tls_certificates();
	  auto certificate_chain = tls_certificate->mutable_certificate_chain();
	  certificate_chain->set_inline_string(config.certificate_chain());
	  if (config.private_key() != "") {
	    auto private_key = tls_certificate->mutable_private_key();
	    private_key->set_inline_string(config.private_key());
	  } else {
	    throw EnvoyException("PortNetworkPolicyRule: TLS context has no private key");
	  }
	} else {
	  throw EnvoyException("PortNetworkPolicyRule: TLS context has no certificate chain");
	}
	for (int i=0; i < config.server_names_size(); i++) {
	  server_names_.emplace_back(config.server_names(i));
	}
	server_config_ = std::make_unique<Extensions::TransportSockets::Tls::ServerContextConfigImpl>(
            context_config, parent.transport_socket_factory_context_);
	server_context_ = parent.transport_socket_factory_context_.sslContextManager().createSslServerContext(
            parent.transport_socket_factory_context_.scope(), *server_config_, server_names_);
      }
      if (rule.has_upstream_tls_context()) {
	auto config = rule.upstream_tls_context();
	envoy::api::v2::auth::UpstreamTlsContext context_config;
	auto tls_context = context_config.mutable_common_tls_context();
	if (config.trusted_ca() != "") {
	  auto validation_context = tls_context->mutable_validation_context();
	  auto trusted_ca = validation_context->mutable_trusted_ca();
	  trusted_ca->set_inline_string(config.trusted_ca());
	} else {
	  throw EnvoyException("PortNetworkPolicyRule: Upstream TLS context has no trusted CA: {}");
	}
	if (config.certificate_chain() != "") {
	  auto tls_certificate = tls_context->add_tls_certificates();
	  auto certificate_chain = tls_certificate->mutable_certificate_chain();
	  certificate_chain->set_inline_string(config.certificate_chain());
	  if (config.private_key() != "") {
	    auto private_key = tls_certificate->mutable_private_key();
	    private_key->set_inline_string(config.private_key());
	  }
	}
	if (config.server_names_size() > 0) {
	  if (config.server_names_size() > 1) {
	    throw EnvoyException("PortNetworkPolicyRule: Upstream TLS context has more than one server name");
	  }
	  context_config.set_sni(config.server_names(1));
	}
	client_config_ = std::make_unique<Extensions::TransportSockets::Tls::ClientContextConfigImpl>(
            context_config, parent.transport_socket_factory_context_);
	client_context_ = parent.transport_socket_factory_context_.sslContextManager().createSslClientContext(
            parent.transport_socket_factory_context_.scope(), *client_config_);
      }
      if (rule.has_http_rules()) {
	for (const auto& http_rule: rule.http_rules().http_rules()) {
	  if (http_rule.header_matches_size() > 0) {
	    have_header_matches_ = true;
	  }
	  http_rules_.emplace_back(http_rule);
	}
      }
    }

    bool Matches(uint64_t remote_id) const {
      // Remote ID must match if we have any.
      if (allowed_remotes_.size() > 0) {
	auto search = allowed_remotes_.find(remote_id);
	if (search == allowed_remotes_.end()) {
	  return false;
	}
      }
      return true;
    }

    bool Matches(uint64_t remote_id, Envoy::Http::HeaderMap& headers, Cilium::AccessLog::Entry& log_entry) const {
      if (!Matches(remote_id)) {
	return false;
      }
      if (http_rules_.size() > 0) {
	bool matched = false;
	for (const auto& rule: http_rules_) {
	  if (rule.Matches(headers)) {
	    // Return on the first match if no rules have header actions
	    if (!have_header_matches_) {
	      return true;
	    }
	    // orherwise evaluate all rules to run all the header actions,
	    // and remember if any of them matched
	    if (rule.HeaderMatches(headers, log_entry)) {
	      matched = true;
	    }
	  }
	}
	return matched;
      }
      // Empty set matches any payload
      return true;
    }

    // PortPolicy
    bool useProxylib(std::string& l7_proto) const override {
      if (l7_proto_.length() > 0) {
	ENVOY_LOG(trace, "Cilium L7 PortNetworkPolicyRules::useProxylib(): returning {}", l7_proto_);
	l7_proto = l7_proto_;
	return true;
      }
      return false;
    }
    Ssl::ContextSharedPtr getServerTlsContext() const override { return server_context_; }
    Ssl::ContextSharedPtr getClientTlsContext() const override { return client_context_; }

    Ssl::ServerContextConfigPtr server_config_;
    std::vector<std::string> server_names_;
    Ssl::ServerContextSharedPtr server_context_;

    Ssl::ClientContextConfigPtr client_config_;
    Ssl::ClientContextSharedPtr client_context_;

    std::unordered_set<uint64_t> allowed_remotes_; // Everyone allowed if empty.
    std::vector<HttpNetworkPolicyRule> http_rules_; // Allowed if empty, but remote is checked first.
    std::string l7_proto_{};
    bool have_header_matches_{false};
  };

  class PortNetworkPolicyRules : public Logger::Loggable<Logger::Id::config> {
  public:
    PortNetworkPolicyRules(const NetworkPolicyMap& parent, const google::protobuf::RepeatedPtrField<cilium::PortNetworkPolicyRule>& rules) {
      if (rules.size() == 0) {
	ENVOY_LOG(trace, "Cilium L7 PortNetworkPolicyRules(): No rules, will allow everything.");
      }
      for (const auto& it: rules) {
	if (it.has_http_rules()) {
	  have_http_rules_ = true;
	}
	rules_.emplace_back(parent, it);
	if (rules_.back().have_header_matches_) {
	  have_header_matches_ = true;
	}
      }
    }

    bool Matches(uint64_t remote_id, Envoy::Http::HeaderMap& headers, Cilium::AccessLog::Entry& log_entry) const {
      if (!have_http_rules_) {
	// If there are no L7 rules, host proxy will not create a proxy redirect at all,
	// whereby the decicion made by the bpf datapath is final. Emulate the same behavior
	// in the sidecar by allowing such traffic.
	// TODO: This will need to be revised when non-bpf datapaths are to be supported.
	return true;
      }
      // Empty set matches any payload from anyone
      if (rules_.size() == 0) {
	return true;
      }
      bool matched = false;
      for (const auto& rule: rules_) {
	if (rule.Matches(remote_id, headers, log_entry)) {
	  matched = true;
	  // Short-circuit on the first match if no rules have HeaderMatches
	  if (!have_header_matches_) {
	    break;
	  }
	}
      }
      return matched;
    }

    const PortPolicy* findPortPolicy(uint64_t remote_id) const {
      for (const auto& rule: rules_) {
	if (rule.Matches(remote_id)) {
	  return &rule;
	}
      }
      return nullptr;
    }

    std::vector<PortNetworkPolicyRule> rules_; // Allowed if empty.
    bool have_http_rules_{};
    bool have_header_matches_{false};
  };
    
  class PortNetworkPolicy : public Logger::Loggable<Logger::Id::config> {
  public:
    PortNetworkPolicy(const NetworkPolicyMap& parent, const google::protobuf::RepeatedPtrField<cilium::PortNetworkPolicy>& rules) {
      for (const auto& it: rules) {
	// Only TCP supported for HTTP
	if (it.protocol() == envoy::api::v2::core::SocketAddress::TCP) {
	  // Port may be zero, which matches any port.
	  ENVOY_LOG(trace, "Cilium L7 PortNetworkPolicy(): installing TCP policy for port {}", it.port());
	  if (!rules_.emplace(it.port(), PortNetworkPolicyRules(parent, it.rules())).second) {
	    throw EnvoyException("PortNetworkPolicy: Duplicate port number");
	  }
	} else {
	  ENVOY_LOG(trace, "Cilium L7 PortNetworkPolicy(): NOT installing non-TCP policy");
	}
      }
    }

    bool Matches(uint32_t port, uint64_t remote_id, Envoy::Http::HeaderMap& headers, Cilium::AccessLog::Entry& log_entry) const {
      bool found_port_rule = false;
      auto it = rules_.find(port);
      if (it != rules_.end()) {
	if (it->second.Matches(remote_id, headers, log_entry)) {
	  return true;
	}
	found_port_rule = true;
      }
      // Check for any rules that wildcard the port
      // Note: Wildcard port makes no sense for an L7 policy, but the policy could be a L3/L4 policy as well.
      it = rules_.find(0);
      if (it != rules_.end()) {
	if (it->second.Matches(remote_id, headers, log_entry)) {
	  return true;
	}
	found_port_rule = true;
      }

      // No policy for the port was found. Cilium always creates a policy for redirects it
      // creates, so the host proxy never gets here. Sidecar gets all the traffic, which we need
      // to pass through since the bpf datapath already allowed it.
      return found_port_rule ? false : true;
    }

    const PortPolicy* findPortPolicy(uint32_t port, uint64_t remote_id) const {
      auto it = rules_.find(port);
      if (it != rules_.end()) {
	return it->second.findPortPolicy(remote_id);
      }
      return nullptr;
    }

    std::unordered_map<uint32_t, PortNetworkPolicyRules> rules_;
  };

public:
  bool Allowed(bool ingress, uint32_t port, uint64_t remote_id,
	       Envoy::Http::HeaderMap& headers, Cilium::AccessLog::Entry& log_entry) const override {
    return ingress
      ? ingress_.Matches(port, remote_id, headers, log_entry)
      : egress_.Matches(port, remote_id, headers, log_entry);
  }

  const PortPolicy* findPortPolicy(bool ingress, uint32_t port, uint64_t remote_id) const override {
    return ingress
      ? ingress_.findPortPolicy(port, remote_id)
      : egress_.findPortPolicy(port, remote_id);
  }

  bool useProxylib(bool ingress, uint32_t port, uint64_t remote_id, std::string& l7_proto) const override {
    const auto* port_policy = findPortPolicy(ingress, port, remote_id);
    if (port_policy != nullptr) {
      return port_policy->useProxylib(l7_proto);
    }
    return false;
  }

  const std::string& conntrackName() const override {
    return conntrack_map_name_;
  }

public:
  std::string conntrack_map_name_;
  uint64_t hash_;
  const cilium::NetworkPolicy policy_proto_;

private:
  const PortNetworkPolicy ingress_;
  const PortNetworkPolicy egress_;
};

struct ThreadLocalPolicyMap : public ThreadLocal::ThreadLocalObject {
  std::map<std::string, std::shared_ptr<const PolicyInstanceImpl>> policies_;
};

// Common base constructor
// This is used directly for testing with a file-based subscription
NetworkPolicyMap::NetworkPolicyMap(Server::Configuration::FactoryContext& context)
  : tls_(context.threadLocal().allocateSlot()), validation_visitor_(ProtobufMessage::getNullValidationVisitor()),
    transport_socket_factory_context_(context.getTransportSocketFactoryContext()) {
  instance_id_++;
  name_ = "cilium.policymap." + fmt::format("{}", instance_id_) + ".";
  ENVOY_LOG(trace, "NetworkPolicyMap({}) created.", name_);  

  tls_->set([&](Event::Dispatcher&) -> ThreadLocal::ThreadLocalObjectSharedPtr {
      return std::make_shared<ThreadLocalPolicyMap>();
  });
}

// This is used in production
NetworkPolicyMap::NetworkPolicyMap(Server::Configuration::FactoryContext& context, Cilium::CtMapSharedPtr& ct)
  : NetworkPolicyMap(context) {
  ctmap_ = ct;
  scope_ = context.scope().createScope(name_);
  subscription_ = subscribe("type.googleapis.com/cilium.NetworkPolicy", "cilium.NetworkPolicyDiscoveryService.StreamNetworkPolicies",
			    context.localInfo(), context.clusterManager(), context.dispatcher(), context.random(), *scope_, *this);
}

static const std::shared_ptr<const PolicyInstanceImpl> null_instance_impl{nullptr};

const std::shared_ptr<const PolicyInstanceImpl>& NetworkPolicyMap::GetPolicyInstanceImpl(const std::string& endpoint_policy_name) const {
  if (tls_->get().get() == nullptr) {
    ENVOY_LOG(warn, "Cilium L7 NetworkPolicyMap::GetPolicyInstance(): NULL TLS object!");
    return null_instance_impl;
  }
  const ThreadLocalPolicyMap& map = tls_->getTyped<ThreadLocalPolicyMap>();
  auto it = map.policies_.find(endpoint_policy_name);
  if (it == map.policies_.end()) {
    return null_instance_impl;
  }
  return it->second;
}

const std::shared_ptr<const PolicyInstance> NetworkPolicyMap::GetPolicyInstance(const std::string& endpoint_policy_name) const {
  return GetPolicyInstanceImpl(endpoint_policy_name);
}

void NetworkPolicyMap::pause() {
  auto sub = dynamic_cast<GrpcSubscriptionImpl*>(subscription_.get());
  if (sub) {
    sub->pause();
  }
}

void NetworkPolicyMap::resume() {
  auto sub = dynamic_cast<GrpcSubscriptionImpl*>(subscription_.get());
  if (sub) {
    sub->resume();
  }
}

void NetworkPolicyMap::onConfigUpdate(const Protobuf::RepeatedPtrField<ProtobufWkt::Any>& resources, const std::string& version_info) {
  ENVOY_LOG(debug, "NetworkPolicyMap::onConfigUpdate({}), {} resources, version: {}", name_, resources.size(), version_info);

  std::unordered_set<std::string> keeps;
  std::unordered_set<std::string> ct_maps_to_keep;

  // Collect a shared vector of policies to be added
  auto to_be_added = std::make_shared<std::vector<std::shared_ptr<PolicyInstanceImpl>>>();
  for (const auto& resource: resources) {
    auto config = MessageUtil::anyConvert<cilium::NetworkPolicy>(resource);
    ENVOY_LOG(debug, "Received Network Policy for endpoint {} in onConfigUpdate() version {}", config.name(), version_info);
    keeps.insert(config.name());
    ct_maps_to_keep.insert(config.conntrack_map_name());

    MessageUtil::validate(config, validation_visitor_);

    // First find the old config to figure out if an update is needed.
    const uint64_t new_hash = MessageUtil::hash(config);
    const auto& old_policy = GetPolicyInstanceImpl(config.name());
    if (old_policy && old_policy->hash_ == new_hash &&
	Protobuf::util::MessageDifferencer::Equals(old_policy->policy_proto_, config)) {
      ENVOY_LOG(trace, "New policy is equal to old one, not updating.");
      continue;
    }

    // May throw
    to_be_added->emplace_back(std::make_shared<PolicyInstanceImpl>(*this, new_hash, config));
  }

  // Collect a shared vector of policy names to be removed
  auto to_be_deleted = std::make_shared<std::vector<std::string>>();
  // Collect a shared vector of conntrack maps to close
  auto cts_to_be_closed = std::make_shared<std::unordered_set<std::string>>();
  for (auto& pair: tls_->getTyped<ThreadLocalPolicyMap>().policies_) {
    if (keeps.find(pair.first) == keeps.end()) {
      to_be_deleted->emplace_back(pair.first);
    }
    // insert conntrack map names we don't want to keep and that have not been already inserted.
    auto& ct_map_name = pair.second->conntrack_map_name_;
    if (ct_maps_to_keep.find(ct_map_name) == ct_maps_to_keep.end() &&
	cts_to_be_closed->find(ct_map_name) == cts_to_be_closed->end()) {
      ENVOY_LOG(debug, "Closing conntrack map {}", ct_map_name);
      cts_to_be_closed->insert(ct_map_name);
    }
  }

  // pause the subscription until the worker threads are done. No throws after this!
  ENVOY_LOG(trace, "Pausing NPDS subscription");
  pause();

  // 'this' may be already deleted when the worker threads get to execute the updates.
  // Manage this by taking a shared_ptr on 'this' for the duration of the posted lambda.
  std::shared_ptr<NetworkPolicyMap> shared_this = shared_from_this();

  // Execute changes on all threads.
  tls_->runOnAllThreads([shared_this, to_be_added, to_be_deleted]() -> void {
      if (shared_this->tls_->get().get() != nullptr) {
	ENVOY_LOG(trace, "Cilium L7 NetworkPolicyMap::onConfigUpdate(): Starting updates on the next thread");
	auto& npmap = shared_this->tls_->getTyped<ThreadLocalPolicyMap>().policies_;
	for (const auto& policy_name: *to_be_deleted) {
	  ENVOY_LOG(trace, "Cilium deleting removed network policy for endpoint {}", policy_name);
	  npmap.erase(policy_name);
	}
	for (const auto& new_policy: *to_be_added) {
	  ENVOY_LOG(trace, "Cilium updating network policy for endpoint {}", new_policy->policy_proto_.name());
	  npmap[new_policy->policy_proto_.name()] = new_policy;
	}
      } else {
	// Keep this at info level for now to see if this happens in the wild
	ENVOY_LOG(warn, "Skipping stale network policy update");
      }
    },
    // resume NPDS and delete old cts when all threads have updated their policies
    [shared_this, cts_to_be_closed]() -> void {
      // resume the subscription
      ENVOY_LOG(trace, "Resuming NPDS subscription");
      shared_this->resume();
      if (shared_this->ctmap_ && shared_this->tls_->get().get() != nullptr && cts_to_be_closed->size() > 0) {
	shared_this->ctmap_->closeMaps(cts_to_be_closed);
      }
    });
}

void NetworkPolicyMap::onConfigUpdateFailed(Envoy::Config::ConfigUpdateFailureReason, const EnvoyException*) {
  // We need to allow server startup to continue, even if we have a bad
  // config.
  ENVOY_LOG(debug, "Network Policy Update failed, keeping existing policy." );
}

} // namespace Cilium
} // namespace Envoy
   0707010000002E000081A4000003E800000064000000015E17A247000010BE000000000000000000000000000000000000002E00000000cilium-proxy-20200109/cilium/network_policy.h #pragma once

#include "envoy/local_info/local_info.h"
#include "envoy/upstream/cluster_manager.h"
#include "envoy/event/dispatcher.h"

#include "common/common/logger.h"
#include "common/http/header_utility.h"
#include "common/protobuf/message_validator_impl.h"
#include "envoy/config/subscription.h"
#include "envoy/singleton/instance.h"
#include "envoy/thread_local/thread_local.h"
#include "envoy/http/header_map.h"
#include "envoy/server/filter_config.h"
#include "server/transport_socket_config_impl.h"

#include "extensions/transport_sockets/tls/context_config_impl.h"

#include "cilium/api/npds.pb.h"
#include "cilium/accesslog.h"
#include "cilium/conntrack.h"

namespace Envoy {
namespace Cilium {

class PortPolicy {
public:
  virtual ~PortPolicy() = default;

  virtual bool useProxylib(std::string& l7_proto) const PURE;
  virtual Ssl::ContextSharedPtr getServerTlsContext() const PURE;
  virtual Ssl::ContextSharedPtr getClientTlsContext() const PURE;
};
    
class PolicyInstance {
public:
  virtual ~PolicyInstance() = default;

  virtual bool Allowed(bool ingress, uint32_t port, uint64_t remote_id,
		       Envoy::Http::HeaderMap& headers,
		       Cilium::AccessLog::Entry& log_entry) const PURE;

  virtual const PortPolicy* findPortPolicy(bool ingress, uint32_t port,
					   uint64_t remote_id) const PURE;

  virtual bool useProxylib(bool ingress, uint32_t port, uint64_t remote_id,
			   std::string& l7_proto) const PURE;

  virtual const std::string& conntrackName() const PURE;
};

class PolicyInstanceImpl;

class NetworkPolicyMap : public Singleton::Instance,
                         public Envoy::Config::SubscriptionCallbacks,
                         public std::enable_shared_from_this<NetworkPolicyMap>,
                         public Logger::Loggable<Logger::Id::config> {
public:
  NetworkPolicyMap(Server::Configuration::FactoryContext& context);
  NetworkPolicyMap(Server::Configuration::FactoryContext& context, Cilium::CtMapSharedPtr& ct);
  ~NetworkPolicyMap() {
    ENVOY_LOG(debug, "Cilium L7 NetworkPolicyMap({}): NetworkPolicyMap is deleted NOW!", name_);
  }

  // subscription_->start() calls onConfigUpdate(), which uses
  // shared_from_this(), which cannot be called before a shared
  // pointer is formed by the caller of the constructor, hence this
  // can't be called from the constructor!
  void startSubscription() { subscription_->start({}); }

  // This is used for testing with a file-based subscription
  void startSubscription(std::unique_ptr<Envoy::Config::Subscription>&& subscription) {
    subscription_ = std::move(subscription);
    startSubscription();
  }

  const std::shared_ptr<const PolicyInstance> GetPolicyInstance(const std::string& endpoint_policy_name) const;

  bool exists(const std::string& endpoint_policy_name) const {
    return GetPolicyInstance(endpoint_policy_name).get() != nullptr;
  }

  // Config::SubscriptionCallbacks
  void onConfigUpdate(const Protobuf::RepeatedPtrField<ProtobufWkt::Any>& resources,
		      const std::string& version_info) override;
  void onConfigUpdate(const Protobuf::RepeatedPtrField<envoy::api::v2::Resource>& added_resources,
		      const Protobuf::RepeatedPtrField<std::string>& removed_resources,
		      const std::string& system_version_info) override {
    // NOT IMPLEMENTED YET.
    UNREFERENCED_PARAMETER(added_resources);
    UNREFERENCED_PARAMETER(removed_resources);
    UNREFERENCED_PARAMETER(system_version_info);
  }
  void onConfigUpdateFailed(Envoy::Config::ConfigUpdateFailureReason, const EnvoyException* e) override;
  std::string resourceName(const ProtobufWkt::Any& resource) override {
    return MessageUtil::anyConvert<cilium::NetworkPolicy>(resource).name();
  }

private:
  const std::shared_ptr<const PolicyInstanceImpl>& GetPolicyInstanceImpl(const std::string& endpoint_policy_name) const;

  void pause();
  void resume();
  
  ThreadLocal::SlotPtr tls_;
  ProtobufMessage::ValidationVisitor& validation_visitor_;
  Stats::ScopePtr scope_;
  std::unique_ptr<Envoy::Config::Subscription> subscription_;
  static uint64_t instance_id_;
  std::string name_;
  Cilium::CtMapSharedPtr ctmap_;
public:
  Server::Configuration::TransportSocketFactoryContext& transport_socket_factory_context_;
};

} // namespace Cilium
} // namespace Envoy
  0707010000002F000081A4000003E800000064000000015E17A2470000302B000000000000000000000000000000000000002900000000cilium-proxy-20200109/cilium/proxylib.cc  #include <dlfcn.h>

#include "envoy/common/exception.h"

#include "common/buffer/buffer_impl.h"
#include "common/common/assert.h"
#include "common/common/fmt.h"
#include "common/common/stack_array.h"

#include "cilium/proxylib.h"

namespace Envoy {
namespace Cilium {

GoFilter::GoFilter(const std::string& go_module,
		   const ::google::protobuf::Map< ::std::string, ::std::string >& params) {
  ENVOY_LOG(info, "GoFilter: Opening go module {}", go_module);
  ::dlerror(); // clear any possible error state
  go_module_handle_ = ::dlopen(go_module.c_str(), RTLD_NOW);
  if (!go_module_handle_) {
    throw EnvoyException(fmt::format("cilium.network: Cannot load go module \'{}\': {}",
				     go_module, dlerror()));
  }

  go_close_module_ = GoCloseModuleCB(::dlsym(go_module_handle_, "CloseModule"));
  if (!go_close_module_) {
    throw EnvoyException(fmt::format("cilium.network: Cannot find symbol \'CloseModule\' from module \'{}\': {}",
				     go_module, dlerror()));
  }
  GoOpenModuleCB go_open_module = GoOpenModuleCB(::dlsym(go_module_handle_, "OpenModule"));
  if (!go_open_module) {
    throw EnvoyException(fmt::format("cilium.network: Cannot find symbol \'OpenModule\' from module \'{}\': {}",
				     go_module, dlerror()));
  } else {
    // Convert params to KeyValue pairs
    auto num = params.size();
    STACK_ARRAY(values, GoStringPair, num);

    int i = 0;
    for (const auto& pair: params) {
      values[i].key = GoString(pair.first);
      values[i++].value = GoString(pair.second);
    }

    go_module_id_ = go_open_module(GoKeyValueSlice(&values[0], num), ENVOY_LOG_CHECK_LEVEL(debug));
    if (go_module_id_ == 0) {
      throw EnvoyException(fmt::format("cilium.network: \'{}::OpenModule()\' rejected parameters",
				       go_module));
    }
  }

  go_on_new_connection_ = GoOnNewConnectionCB(::dlsym(go_module_handle_, "OnNewConnection"));
  if (!go_on_new_connection_) {
    throw EnvoyException(fmt::format("cilium.network: Cannot find symbol \'OnNewConnection\' from module \'{}\': {}",
				     go_module, dlerror()));
  }
  go_on_data_ = GoOnDataCB(::dlsym(go_module_handle_, "OnData"));
  if (!go_on_data_) {
    throw EnvoyException(fmt::format("cilium.network: Cannot find symbol \'OnData\' from module \'{}\': {}",
				     go_module, dlerror()));
  }
  go_close_ = GoCloseCB(::dlsym(go_module_handle_, "Close"));
  if (!go_close_) {
    throw EnvoyException(fmt::format("cilium.network: Cannot find symbol \'Close\' from module \'{}\': {}",
				     go_module, dlerror()));
  }
}

GoFilter::~GoFilter() {
  if (go_module_id_ != 0) {
    go_close_module_(go_module_id_);
  }
  if (go_module_handle_) {
    ::dlclose(go_module_handle_);
  }
}

namespace {

const char* filter_strerror(FilterResult res) {
  switch (res) {
  case FILTER_OK:
    return "No error";
  case FILTER_PARSER_ERROR:
    return "Parser error";
  case FILTER_UNKNOWN_CONNECTION:
    return "Unknown connection";
  case FILTER_UNKNOWN_PARSER:
    return "Unknown parser";
  case FILTER_INVALID_ADDRESS:
    return "Invalid address";
  case FILTER_POLICY_DROP:
    return "Connection rejected";
  case FILTER_INVALID_INSTANCE:
    return "Invalid proxylib instance";
  case FILTER_UNKNOWN_ERROR:
    break;
  }
  return "Unknown error";
}

}

GoFilter::InstancePtr GoFilter::NewInstance(Network::Connection& conn, const std::string& go_proto, bool ingress,
					    uint32_t src_id, uint32_t dst_id,
					    const std::string& src_addr, const std::string& dst_addr,
					    const std::string& policy_name) const {
  InstancePtr parser{nullptr};
  if (go_module_handle_) {
    parser = std::make_unique<Instance>(*this, conn);
    ENVOY_CONN_LOG(trace, "GoFilter: Calling go module", conn);
    auto res = (*go_on_new_connection_)(go_module_id_, go_proto, conn.id(), ingress, src_id, dst_id, src_addr, dst_addr,
					policy_name,
					&parser->orig_.inject_slice_, &parser->reply_.inject_slice_);
    if (res == FILTER_OK) {
      parser->connection_id_ = conn.id();
    } else {
      ENVOY_CONN_LOG(warn, "Cilium Network: Connection with parser \"{}\" rejected: {}", conn, go_proto,
		     filter_strerror(res));
      parser.reset(nullptr);
    }
  }
  return parser;
}

FilterResult GoFilter::Instance::OnIO(bool reply, Buffer::Instance& data, bool end_stream) {
  auto& dir = reply ? reply_ : orig_;
  int64_t input_len = data.length();

  // Pass bytes based on an earlier verdict?
  if (dir.pass_bytes_ > 0) {
    ASSERT(dir.drop_bytes_ == 0);      // Can't drop and pass the same bytes
    ASSERT(dir.buffer_.length() == 0); // Passed data is not buffered
    ASSERT(dir.need_bytes_ == 0);      // Passed bytes can't be needed
    // Can return immediately if passing more that we have input.
    // May need to process injected data even when there is no input left.
    if (dir.pass_bytes_ > input_len) {
      if (input_len > 0) {
	ENVOY_CONN_LOG(debug, "Cilium Network::OnIO: Passing all input: {} bytes: {} ", conn_, input_len, data.toString());
	dir.pass_bytes_ -= input_len;
      }
      return FILTER_OK; // all of 'data' is passed to the next filter
    }
    // Pass of dir.pass_bytes_ is done after buffer rearrangement below.
    // Using the available APIs it is easier to move data from the beginning of a buffer to another
    // rather than from the end of a buffer to another.
  } else {
    // Drop bytes based on an earlier verdict?
    if (dir.drop_bytes_ > 0) {
      ASSERT(dir.buffer_.length() == 0); // Dropped data is not buffered
      ASSERT(dir.need_bytes_ == 0);      // Dropped bytes can't be needed
      // Can return immediately if passing more that we have input.
      // May need to process injected data even when there is no input left.
      if (dir.drop_bytes_ > input_len) {
	if (input_len > 0) {
	  ENVOY_CONN_LOG(debug, "Cilium Network::OnIO: Dropping all input: {} bytes: {} ", conn_, input_len, data.toString());
	  dir.drop_bytes_ -= input_len;
	  data.drain(input_len);
	}
	return FILTER_OK; // everything was dropped, nothing more to be done
      }
      ENVOY_CONN_LOG(debug, "Cilium Network::OnIO: Dropping first {} bytes of input: {}", conn_, dir.drop_bytes_, data.toString());
      data.drain(dir.drop_bytes_);
      input_len -= dir.drop_bytes_;
      dir.drop_bytes_ = 0;
      // At frame boundary, more data may remain
    }
  }

  // Move data to the end of the input buffer, use 'data' as the output buffer
  dir.buffer_.move(data);
  ASSERT(data.length() == 0);
  auto& input = dir.buffer_;
  input_len = input.length();
  auto& output = data;

  // Move pre-passed input to output.
  // Note that the case of all new input being passed is already taken care of above.
  if (dir.pass_bytes_ > 0) {
    ENVOY_CONN_LOG(debug, "Cilium Network::OnIO: Passing first {} bytes of input: {}", conn_, input_len, input.toString());
    output.move(input, dir.pass_bytes_);
    input_len -= dir.pass_bytes_;
    dir.pass_bytes_ = 0;
    // At frame boundary, more data may remain
  }

  // Output now at frame boundary, output frame(s) injected by the reverse direction first
  if (dir.inject_slice_.len() > 0) {
    ENVOY_CONN_LOG(debug, "Cilium Network::OnIO: Reverse Injecting: {} bytes: {} ", conn_, dir.inject_slice_.len(),
		   std::string(reinterpret_cast<char *>(dir.inject_slice_.data_), dir.inject_slice_.len()));
    output.add(dir.inject_slice_.data_, dir.inject_slice_.len());
    dir.inject_slice_.reset();
  }
  
  // Do nothing if we don't have enought input (partial input remains buffered)
  if (input_len < dir.need_bytes_) {
    return FILTER_OK;
  }
  
  const int max_ops = 16; // Make shorter for testing purposes
  FilterOp ops_[max_ops];
  GoFilterOpSlice ops(ops_, max_ops);

  FilterResult res;
  bool terminal_op_seen = false;
  bool inject_buf_exhausted = false;

  do {
    ops.reset();
    uint64_t num_slices = input.getRawSlices(nullptr, 0);
    STACK_ARRAY(raw_slices, Buffer::RawSlice, num_slices);
    input.getRawSlices(raw_slices.begin(), num_slices);

    int64_t total_length = 0;
    STACK_ARRAY(buffer_slices, GoSlice<uint8_t>, num_slices);
    uint64_t non_empty_slices = 0;
    for (const Buffer::RawSlice& raw_slice : raw_slices) {
      if (raw_slice.len_ > 0) {
	buffer_slices[non_empty_slices++] = GoSlice<uint8_t>(reinterpret_cast<uint8_t*>(raw_slice.mem_), raw_slice.len_);
	total_length += raw_slice.len_;
      }
    }
    GoDataSlices input_slices(buffer_slices.begin(), non_empty_slices);

    ENVOY_CONN_LOG(trace, "Cilium Network::OnIO: Calling go module with {} bytes of data", conn_, total_length);
    res = (*parent_.go_on_data_)(connection_id_, reply, end_stream, &input_slices, &ops);
    ENVOY_CONN_LOG(trace, "Cilium Network::OnIO: \'go_on_data\' returned {}, ops({})", conn_, res, ops.len());
    if (res == FILTER_OK) {
      // Process all returned filter operations.
      for (int i = 0; i < ops.len(); i++) {
	auto op = ops_[i].op;
	auto n_bytes = ops_[i].n_bytes;

	if (n_bytes == 0) {
	  ENVOY_CONN_LOG(warn, "Cilium Network::OnIO: INVALID op ({}) length: {} bytes", conn_, op, n_bytes);
	  return FILTER_PARSER_ERROR;
	}

	if (terminal_op_seen) {
	  ENVOY_CONN_LOG(warn, "Cilium Network::OnIO: Filter operation {} after terminal opertion.", conn_, op);
	  return FILTER_PARSER_ERROR;
	}

	switch (op) {
	case FILTEROP_MORE:
	  ENVOY_CONN_LOG(debug, "Cilium Network::OnIO: FILTEROP_MORE: {} bytes", conn_, n_bytes);
	  dir.need_bytes_ = input_len + n_bytes;
	  terminal_op_seen = true;   // MORE can not be followed with other ops.
	  continue;                  // errors out if more operations follow

	case FILTEROP_PASS:
	  ENVOY_CONN_LOG(debug, "Cilium Network::OnIO: FILTEROP_PASS: {} bytes", conn_, n_bytes);
	  if (n_bytes > input_len) {
	    output.move(input, input_len);
	    dir.pass_bytes_ = n_bytes - input_len; // pass the remainder later
	    input_len = 0;
	    terminal_op_seen = true;   // PASS more than input is terminal operation.
	    continue;                  // errors out if more operations follow
	  }
	  output.move(input, n_bytes);
	  input_len -= n_bytes;
	  break;

	case FILTEROP_DROP:
	  ENVOY_CONN_LOG(debug, "Cilium Network::OnIO: FILTEROP_DROP: {} bytes", conn_, n_bytes);
	  if (n_bytes > input_len) {
	    input.drain(input_len);
	    dir.drop_bytes_ = n_bytes - input_len; // drop the remainder later
	    input_len = 0;
	    terminal_op_seen = true;   // DROP more than input is terminal operation.
	    continue;                  // errors out if more operations follow
	  }
	  input.drain(n_bytes);
	  input_len -= n_bytes;
	  break;

	case FILTEROP_INJECT:
	  if (n_bytes > dir.inject_slice_.len()) {
	    ENVOY_CONN_LOG(warn, "Cilium Network::OnIO: FILTEROP_INJECT: INVALID length: {} bytes", conn_, n_bytes);
	    return FILTER_PARSER_ERROR;
	  }
	  ENVOY_CONN_LOG(debug, "Cilium Network::OnIO: FILTEROP_INJECT: {} bytes: {}", conn_, n_bytes,
			 std::string(reinterpret_cast<char *>(dir.inject_slice_.data_), dir.inject_slice_.len()));
	  output.add(dir.inject_slice_.data_, n_bytes);
	  dir.inject_slice_.drain(n_bytes);
	  break;

	case FILTEROP_ERROR:
	default:
	  ENVOY_CONN_LOG(warn, "Cilium Network::OnIO: FILTEROP_ERROR: {} bytes", conn_, n_bytes);
	  return FILTER_PARSER_ERROR;
	}
      }
    } else {
      // Close the connection an any error
      ENVOY_CONN_LOG(warn, "Cilium Network::OnIO: FILTER_POLICY_DROP {}", conn_, filter_strerror(res));
      return FILTER_PARSER_ERROR;
    }

    if (dir.inject_slice_.len() > 0) {
      ENVOY_CONN_LOG(warn, "Cilium Network::OnIO: {} bytes abandoned in inject buffer", conn_, dir.inject_slice_.len());
      return FILTER_PARSER_ERROR;
    }

    inject_buf_exhausted = dir.inject_slice_.at_capacity();

    // Make space for more injected data
    dir.inject_slice_.reset();

    // Loop back if ops or inject buffer was exhausted
  } while (!terminal_op_seen && (ops.len() == max_ops || inject_buf_exhausted));

  if (output.length() < 100) {
    ENVOY_CONN_LOG(debug, "Cilium Network::OnIO: Output on return: {}", conn_, output.toString());
  } else {
    ENVOY_CONN_LOG(debug, "Cilium Network::OnIO: Output length return: {}", conn_, output.length());
  }
  return res;
}

void GoFilter::Instance::Close() {
  (*parent_.go_close_)(connection_id_);
  connection_id_ = 0;
  conn_.close(Network::ConnectionCloseType::NoFlush);
}

} // namespace Cilium
} // namespace Envoy
 07070100000030000081A4000003E800000064000000015E17A247000012EC000000000000000000000000000000000000002800000000cilium-proxy-20200109/cilium/proxylib.h   #pragma once

#include "envoy/network/connection.h"

#include "common/buffer/buffer_impl.h"
#include "common/common/logger.h"

#include "proxylib/libcilium.h"

#include <google/protobuf/map.h>

namespace Envoy {
namespace Cilium {

struct GoString {
  GoString(const std::string& str) : mem_(str.c_str()), len_(str.length()) {}
  GoString() : mem_(nullptr), len_(0) {}

  const char* mem_;
  GoInt len_;
};

template <typename T>
struct GoSlice {
  GoSlice() : data_(nullptr), len_(0) {}
  GoSlice(T* data, GoInt len) : data_(data), len_(len), cap_(len) {} // Initialized as full
  GoInt len() const { return len_; }
  GoInt cap() const { return cap_; }
  T& operator[] (GoInt x) { return data_[x]; }
  const T& operator[] (GoInt x) const { return data_[x]; }
  operator T*() { return data_; }
  operator const T*() const { return data_; }
  operator void*() { return data_; }
  operator const void*() const { return data_; }

  T*    data_;
  GoInt len_;
  GoInt cap_;
};

// Slice that remembers the base pointer and that can be reset.
// Note that these have more header data than GoSlices and therefore may not used
// as array elements passed to Go!
template <typename T>
struct ResetableSlice : GoSlice<T> {
  // Templated base class member access is a bit ugly
  using GoSlice<T>::data_;
  using GoSlice<T>::len_;
  using GoSlice<T>::cap_;

  ResetableSlice(T* data, GoInt cap) : GoSlice<T>(data, cap), base_(data) {
    len_ = 0;  // Init as empty
  }

  // Non-Go helpers to consume data filled in by Go. Must reset() before slice used by Go again.
  GoInt drain(GoInt len) {
    if (len > len_) {
      len = len_;
    }
    data_ += len;
    len_ -= len;

    return len;
  }
  bool at_capacity() {
    // Return true if all of the available space was used, not affected by draining
    return (data_ + len_) >= (base_ + cap_);
  }
  void reset() {
    data_ = base_;
    len_ = 0;
  }
  
  // private part not visible to Go
  T* base_;
};

struct GoStringPair {
  GoString key;
  GoString value;
};
 
typedef GoSlice<GoStringPair> GoKeyValueSlice;
typedef uint64_t (*GoOpenModuleCB)(GoKeyValueSlice, bool);
typedef void (*GoCloseModuleCB)(uint64_t);
 
typedef ResetableSlice<uint8_t> GoBufferSlice;
typedef FilterResult (*GoOnNewConnectionCB)(uint64_t, GoString, uint64_t, bool, uint32_t, uint32_t, GoString, GoString, GoString, GoBufferSlice*, GoBufferSlice*);

typedef GoSlice<GoSlice<uint8_t>> GoDataSlices;  // Scatter-gather buffer list as '[][]byte'
typedef ResetableSlice<FilterOp> GoFilterOpSlice;
typedef FilterResult (*GoOnDataCB)(uint64_t, bool, bool, GoDataSlices*, GoFilterOpSlice*);
typedef void (*GoCloseCB)(uint64_t);

class GoFilter : public Logger::Loggable<Logger::Id::filter> {
public:
  GoFilter(const std::string& go_module, const ::google::protobuf::Map< ::std::string, ::std::string >&);
  ~GoFilter();

  class Instance : public Logger::Loggable<Logger::Id::filter>{
  public:
    Instance(const GoFilter& parent, Network::Connection& conn) : parent_(parent), conn_(conn) {}
    ~Instance() {
      if (connection_id_) {
	// Tell Go parser to scrap the state kept for the connection
	(*parent_.go_close_)(connection_id_);
      }
    }

    void Close();

    FilterResult OnIO(bool reply, Buffer::Instance& data, bool end_stream);

    bool WantReplyInject() const { return reply_.WantToInject(); }
    void SetOrigEndStream(bool end_stream) { orig_.closed_ = end_stream; }
    void SetReplyEndStream(bool end_stream) { reply_.closed_ = end_stream; }

    struct Direction {
      Direction() : inject_slice_(inject_buf_, sizeof(inject_buf_)) {}

      bool WantToInject() const { return !closed_ && inject_slice_.len() > 0; }
      void Close() { closed_ = true; }
      
      Buffer::OwnedImpl buffer_; // Buffered data in this direction
      int64_t need_bytes_{0};    // Number of additional data bytes needed before can parse again
      int64_t pass_bytes_{0};    // Number of bytes to pass without calling the parser again
      int64_t drop_bytes_{0};
      bool closed_{false};
      GoBufferSlice inject_slice_;
      uint8_t inject_buf_[1024];
    };

    const GoFilter& parent_;
    Network::Connection& conn_;
    Direction orig_;
    Direction reply_;
    uint64_t connection_id_ = 0;
  };
  typedef std::unique_ptr<Instance> InstancePtr;

  InstancePtr NewInstance(Network::Connection& conn, const std::string& go_proto, bool ingress,
			  uint32_t src_id, uint32_t dst_id,
			  const std::string& src_addr, const std::string& dst_addr, const std::string& policy_name) const;

private:
  void *go_module_handle_{nullptr};
  GoCloseModuleCB go_close_module_;
  GoOnNewConnectionCB go_on_new_connection_;
  GoOnDataCB go_on_data_;
  GoCloseCB go_close_;
  uint64_t go_module_id_{0};
};

typedef std::shared_ptr<const GoFilter> GoFilterSharedPtr;

} // namespace Cilium
} // namespace Envoy
07070100000031000081A4000003E800000064000000015E17A24700001D04000000000000000000000000000000000000002900000000cilium-proxy-20200109/cilium/proxymap.cc  #include "proxymap.h"

#include <arpa/inet.h>
#include <string.h>

#include <cstdint>

#include "common/network/address_impl.h"

#include "linux/bpf.h"

namespace Envoy {
namespace Cilium {

// These must be kept in sync with Cilium source code, should refactor
// them to a separate include file we can include here instead of
// copying them!

typedef uint32_t __be32; // Beware of the byte order!
typedef uint32_t __u32;
typedef uint16_t __u16;
typedef uint8_t __u8;

struct proxy4_tbl_key {
  __be32 saddr;
  __u16 dport; /* dport must be in front of sport, loaded with 4 bytes read */
  __u16 sport;
  __u8 nexthdr;
  __u8 pad;
} __attribute__((packed));

struct proxy4_tbl_value {
  __be32 orig_daddr;
  __u16 orig_dport;
  __u16 pad;
  __u32 identity;
  __u32 lifetime;
} __attribute__((packed));

struct proxy6_tbl_key {
  __be32 saddr[4];
  __u16 dport;
  __u16 sport;
  __u8 nexthdr;
  __u8 pad;
} __attribute__((packed));

struct proxy6_tbl_value {
  __be32 orig_daddr[4];
  __u16 orig_dport;
  __u16 pad;
  __u32 identity;
  __u32 lifetime;
} __attribute__((packed));

ProxyMap::Proxy4Map::Proxy4Map()
    : Bpf(BPF_MAP_TYPE_HASH, sizeof(struct proxy4_tbl_key),
          sizeof(struct proxy4_tbl_value)) {}

ProxyMap::Proxy6Map::Proxy6Map()
    : Bpf(BPF_MAP_TYPE_HASH, sizeof(struct proxy6_tbl_key),
          sizeof(struct proxy6_tbl_value)) {}

ProxyMap::ProxyMap(const std::string &bpf_root) : bpf_root_(bpf_root) {}

bool ProxyMap::Open() {
  // Open the bpf maps from Cilium specific paths

  std::string path4(bpf_root_ + "/tc/globals/cilium_proxy4");
  bool open4 = proxy4map_.open(path4);
  if (!open4) {
    ENVOY_LOG(debug, "cilium.bpf_metadata: Cannot open IPv4 proxy map at {}", path4);
  }

  std::string path6(bpf_root_ + "/tc/globals/cilium_proxy6");
  bool open6 = proxy6map_.open(path6);
  if (!open6) {
    ENVOY_LOG(debug, "cilium.bpf_metadata: Cannot open IPv6 proxy map at {}", path6);
  }

  if (open4 || open6) {
    ENVOY_LOG(debug, "cilium.bpf_metadata: Opened proxymap.");
  }

  return open4 || open6;
}

bool ProxyMap::getBpfMetadata(Network::ConnectionSocket &socket, uint32_t* identity, uint16_t* orig_dport, uint16_t* proxy_port) {
  Network::Address::InstanceConstSharedPtr local_address =
      socket.localAddress();
  Network::Address::InstanceConstSharedPtr remote_address =
      socket.remoteAddress();

  if (local_address->type() == Network::Address::Type::Ip &&
      remote_address->type() == Network::Address::Type::Ip) {
    const auto &ip = local_address->ip();
    const auto &rip = remote_address->ip();

    if (ip->version() == Network::Address::IpVersion::v4 &&
        rip->version() == Network::Address::IpVersion::v4) {
      struct proxy4_tbl_key key {};
      struct proxy4_tbl_value value {};

      key.saddr = rip->ipv4()->address();
      key.dport = htons(ip->port());
      key.sport = htons(rip->port());
      key.nexthdr = 6;

      ENVOY_LOG(
          trace,
          "cilium.bpf_metadata: Looking up key: {:x}, {:x}, {:x}, {:x}, {:x}",
          ntohl(key.saddr), ntohs(key.dport), ntohs(key.sport), key.nexthdr,
          key.pad);

      if (proxy4map_.lookup(&key, &value)) {
        struct sockaddr_in ip4 {};
        ip4.sin_family = AF_INET;
        ip4.sin_addr.s_addr = value.orig_daddr; // already in network byte order
        ip4.sin_port = value.orig_dport;        // already in network byte order
        Network::Address::InstanceConstSharedPtr orig_local_address =
            std::make_shared<Network::Address::Ipv4Instance>(&ip4);
	if (*orig_local_address != *socket.localAddress()) {
	  socket.restoreLocalAddress(orig_local_address);
	}
        *identity = value.identity;
	*proxy_port = ntohs(key.dport);
        *orig_dport = ntohs(value.orig_dport);
        return true;
      }
      ENVOY_LOG(info, "cilium.bpf_metadata: IPv4 bpf map lookup failed: {}",
                strerror(errno));
    } else if (ip->version() == Network::Address::IpVersion::v6 &&
               rip->version() == Network::Address::IpVersion::v6) {
      struct proxy6_tbl_key key {};
      struct proxy6_tbl_value value {};

      absl::uint128 saddr = rip->ipv6()->address();
      memcpy(&key.saddr, &saddr, 16);
      key.dport = htons(ip->port());
      key.sport = htons(rip->port());
      key.nexthdr = 6;

      if (proxy6map_.lookup(&key, &value)) {
        struct sockaddr_in6 ip6 {};
        ip6.sin6_family = AF_INET6;
        memcpy(&ip6.sin6_addr, &value.orig_daddr, 16);
        ip6.sin6_port = value.orig_dport; // already in network byte order
        Network::Address::InstanceConstSharedPtr orig_local_address =
            std::make_shared<Network::Address::Ipv6Instance>(ip6);
	if (*orig_local_address != *socket.localAddress()) {
	  socket.restoreLocalAddress(orig_local_address);
	}
        *identity = value.identity;
	*proxy_port = ntohs(key.dport);
        *orig_dport = ntohs(value.orig_dport);
        return true;
      }
      ENVOY_LOG(info, "cilium.bpf_metadata: IPv6 bpf map lookup failed: {}",
                strerror(errno));
    } else {
      ENVOY_LOG(
          info,
          "cilium.bpf_metadata: Address type mismatch: Source: {}, Dest: {}",
          rip->addressAsString(), ip->addressAsString());
    }
  }
  return false;
}

bool ProxyMap::removeBpfMetadata(Network::Connection &conn, uint16_t proxy_port) {
  Network::Address::InstanceConstSharedPtr local_address = conn.localAddress();
  Network::Address::InstanceConstSharedPtr remote_address = conn.remoteAddress();

  if (local_address->type() == Network::Address::Type::Ip &&
      remote_address->type() == Network::Address::Type::Ip) {
    const auto &ip = local_address->ip();
    const auto &rip = remote_address->ip();

    if (ip->version() == Network::Address::IpVersion::v4 &&
        rip->version() == Network::Address::IpVersion::v4) {
      struct proxy4_tbl_key key {};

      key.saddr = rip->ipv4()->address();
      key.dport = htons(proxy_port);
      key.sport = htons(rip->port());
      key.nexthdr = 6;

      ENVOY_CONN_LOG(
          trace,
          "cilium.bpf_metadata: Deleting key: {:x}, {:x}, {:x}, {:x}, {:x}", conn,
          ntohl(key.saddr), ntohs(key.dport), ntohs(key.sport), key.nexthdr,
          key.pad);

      if (proxy4map_.remove(&key)) {
        return true;
      }
      ENVOY_CONN_LOG(info, "cilium.bpf_metadata: IPv4 bpf proxymap remove failed: {}", conn,
                strerror(errno));
    } else if (ip->version() == Network::Address::IpVersion::v6 &&
               rip->version() == Network::Address::IpVersion::v6) {
      struct proxy6_tbl_key key {};

      absl::uint128 saddr = rip->ipv6()->address();
      memcpy(&key.saddr, &saddr, 16);
      key.dport = htons(proxy_port);
      key.sport = htons(rip->port());
      key.nexthdr = 6;

      if (proxy6map_.remove(&key)) {
        return true;
      }
      ENVOY_CONN_LOG(info, "cilium.bpf_metadata: IPv6 bpf proxymap remove failed: {}", conn,
                strerror(errno));
    } else {
      ENVOY_CONN_LOG(
          info,
          "cilium.bpf_metadata: IP address type mismatch: Source: {}, Dest: {}", conn,
          rip->addressAsString(), ip->addressAsString());
    }
  } else {
    ENVOY_CONN_LOG(
	info,
        "cilium.bpf_metadata: Address type mismatch: Source: {}, Dest: {}", conn,
        remote_address->asString(), local_address->asString());
  }
  return false;
}

} // namespace Cilium
} // namespace Envoy
07070100000032000081A4000003E800000064000000015E17A247000003AB000000000000000000000000000000000000002800000000cilium-proxy-20200109/cilium/proxymap.h   #pragma once

#include "common/common/logger.h"
#include "envoy/network/listen_socket.h"
#include "envoy/network/connection.h"
#include "envoy/singleton/instance.h"

#include "bpf.h"

namespace Envoy {
namespace Cilium {

class ProxyMap : public Singleton::Instance, Logger::Loggable<Logger::Id::filter> {
public:
  ProxyMap(const std::string &bpf_root);

  bool Open();

  const std::string& bpfRoot() { return bpf_root_; }

  bool getBpfMetadata(Network::ConnectionSocket& socket, uint32_t* identity, uint16_t* orig_dport, uint16_t* proxy_port);
  bool removeBpfMetadata(Network::Connection& conn, uint16_t proxy_port);

private:
  class Proxy4Map : public Bpf {
  public:
    Proxy4Map();
  };

  class Proxy6Map : public Bpf {
  public:
    Proxy6Map();
  };

  std::string bpf_root_;
  Proxy4Map proxy4map_;
  Proxy6Map proxy6map_;
};

typedef std::shared_ptr<ProxyMap> ProxyMapSharedPtr;
 
} // namespace Cilium
} // namespace Envoy
 07070100000033000081A4000003E800000064000000015E17A24700001320000000000000000000000000000000000000002D00000000cilium-proxy-20200109/cilium/socket_option.h  #pragma once

#include "envoy/api/v2/core/base.pb.h"
#include "envoy/network/listen_socket.h"
#include "common/common/logger.h"

#include "conntrack.h"
#include "proxymap.h"

namespace Envoy {
namespace Cilium {

class SocketMarkOption : public Network::Socket::Option, public Logger::Loggable<Logger::Id::filter> {
public:
  SocketMarkOption(uint32_t identity, bool ingress, Network::Address::InstanceConstSharedPtr src_address)
    : identity_(identity), ingress_(ingress), src_address_(std::move(src_address)) {}

  absl::optional<Network::Socket::Option::Details>
  getOptionDetails(const Network::Socket&, envoy::api::v2::core::SocketOption::SocketState) const override {
  	return absl::nullopt;
  }

  bool setOption(Network::Socket& socket, envoy::api::v2::core::SocketOption::SocketState state) const override {
    // Only set the option once per socket
    if (state != envoy::api::v2::core::SocketOption::STATE_PREBIND) {
      ENVOY_LOG(trace, "Skipping setting socket ({}) option SO_MARK, state != STATE_PREBIND", socket.ioHandle().fd());
      return true;
    }
    uint32_t cluster_id = (identity_ >> 16) & 0xFF;
    uint32_t identity_id = (identity_ & 0xFFFF) << 16;
    uint32_t mark = ((ingress_) ? 0xA00 : 0xB00) | cluster_id | identity_id;
    int rc = setsockopt(socket.ioHandle().fd(), SOL_SOCKET, SO_MARK, &mark, sizeof(mark));
    if (rc < 0) {
      if (errno == EPERM) {
	// Do not assert out in this case so that we can run tests without CAP_NET_ADMIN.
	ENVOY_LOG(critical,
		  "Failed to set socket option SO_MARK to {}, capability CAP_NET_ADMIN needed: {}",
		  mark, strerror(errno));
      } else {
	ENVOY_LOG(critical, "Socket option failure. Failed to set SO_MARK to {}: {}", mark,
		  strerror(errno));
	return false;
      }
    }

    if (src_address_) {
      socket.setLocalAddress(src_address_);
    }

    ENVOY_LOG(trace, "Set socket ({}) option SO_MARK to {:x} (magic mark: {:x}, id: {}, cluster: {}), src: {}",
	      socket.ioHandle().fd(), mark, mark & 0xff00, mark >> 16, mark & 0xff, src_address_ ? src_address_->asString() : "");
    return true;
  }

  template <typename T> void addressIntoVector(std::vector<uint8_t>& vec, const T& address) const {
    const uint8_t* byte_array = reinterpret_cast<const uint8_t*>(&address);
    vec.insert(vec.end(), byte_array, byte_array + sizeof(T));
  }

  void hashKey(std::vector<uint8_t>& key) const override {
    // Source address is more specific than policy ID. If using an original source address,
    // we do not need to also add the source security ID to the hash key. Note that since
    // the identity is 3 bytes it will not collide with neither an IPv4 nor IPv6 address.
    if (src_address_) {
      if (src_address_->ip()->version() == Network::Address::IpVersion::v4) {
	uint32_t raw_address = src_address_->ip()->ipv4()->address();
	addressIntoVector(key, raw_address);
      } else if (src_address_->ip()->version() == Network::Address::IpVersion::v6) {
	absl::uint128 raw_address = src_address_->ip()->ipv6()->address();
	addressIntoVector(key, raw_address);
      }
    } else {
      // Add the source identity to the hash key. This will separate upstream connection pools
      // per security ID.
      key.emplace_back(uint8_t(identity_ >> 16));
      key.emplace_back(uint8_t(identity_ >> 8));
      key.emplace_back(uint8_t(identity_));
    }
  }

  uint32_t identity_;
  bool ingress_;
  Network::Address::InstanceConstSharedPtr src_address_;
};

class PolicyInstance;

class SocketOption : public SocketMarkOption {
public:
 SocketOption(std::shared_ptr<const PolicyInstance> policy, const ProxyMapSharedPtr& maps, uint32_t source_identity, uint32_t destination_identity, bool ingress, uint16_t port, uint16_t proxy_port, std::string&& pod_ip, Network::Address::InstanceConstSharedPtr src_address)
   : SocketMarkOption(source_identity, ingress, src_address), policy_(policy), maps_(maps), destination_identity_(destination_identity), port_(port), proxy_port_(proxy_port), pod_ip_(std::move(pod_ip)) {
    ENVOY_LOG(debug, "Cilium SocketOption(): source_identity: {}, destination_identity: {}, ingress: {}, port: {}, pod_ip: {}, src_address: {}", identity_, destination_identity_, ingress_, port_, pod_ip_, src_address_ ? src_address_->asString() : "");
  }

  ProxyMapSharedPtr GetProxyMap() const { return maps_; }

  const std::shared_ptr<const PolicyInstance> policy_;
private:
  ProxyMapSharedPtr maps_;
public:
  uint32_t destination_identity_;
  uint16_t port_;
  uint16_t proxy_port_;
  std::string pod_ip_;
};

static inline
const Cilium::SocketOption* GetSocketOption(const Network::Socket::OptionsSharedPtr& options) {
  if (options) {
    for (const auto& option: *options) {
      auto opt = dynamic_cast<const Cilium::SocketOption*>(option.get());
      if (opt) {
	return opt;
      }
    }
  }
  return nullptr;
}
 
} // namespace Cilium
} // namespace Envoy
07070100000034000081A4000003E800000064000000015E17A247000014F1000000000000000000000000000000000000002C00000000cilium-proxy-20200109/cilium/tls_wrapper.cc   #include "cilium/tls_wrapper.h"

#include "envoy/api/v2/auth/cert.pb.h"
#include "envoy/api/v2/auth/cert.pb.validate.h"

#include "common/protobuf/utility.h"
#include "server/transport_socket_config_impl.h"

#include "extensions/transport_sockets/tls/context_config_impl.h"
#include "extensions/transport_sockets/tls/ssl_socket.h"

#include "cilium/socket_option.h"
#include "cilium/network_policy.h"

namespace Envoy {
namespace Cilium {

namespace {

using SslSocketPtr = std::unique_ptr<Extensions::TransportSockets::Tls::SslSocket>;
  
constexpr absl::string_view NotReadyReason{"TLS error: Secret is not supplied by SDS"};

// This SslSocketWrapper wraps a real SslSocket and hooks it up with
// TLS configuration derived from Cilium Network Policy.
class SslSocketWrapper : public Network::TransportSocket {
public:
  SslSocketWrapper(Extensions::TransportSockets::Tls::InitialState state,
		   const Network::TransportSocketOptionsSharedPtr& transport_socket_options)
    : state_(state), transport_socket_options_(transport_socket_options) {}

  // Network::TransportSocket
  void setTransportSocketCallbacks(Network::TransportSocketCallbacks& callbacks) override {
    // Get the Cilium socket option from the callbacks in order to get the TLS configuration
    const auto option = Cilium::GetSocketOption(callbacks.connection().socketOptions());
    if (option && option->policy_) {
      auto port_policy = option->policy_->findPortPolicy(option->ingress_, option->port_,
							 option->ingress_ ? option->identity_ : option->destination_identity_);
      if (port_policy != nullptr) {
	Envoy::Ssl::ContextSharedPtr ctx =
	  state_ == Extensions::TransportSockets::Tls::InitialState::Client
	  ? port_policy->getClientTlsContext() : port_policy->getServerTlsContext();

	if (ctx) {
	  // create the underlying SslSocket
	  ssl_socket_ = std::make_unique<Extensions::TransportSockets::Tls::SslSocket>(ctx, state_, transport_socket_options_);

	  // Set the callbacks
	  ssl_socket_->setTransportSocketCallbacks(callbacks);
	}
      }
    } else if (!option) {
      ENVOY_LOG_MISC(debug, "cilium.tls_wrapper: Cilium socket option not found!");
    }
  }
  std::string protocol() const override {
    return ssl_socket_ ? ssl_socket_->protocol() : EMPTY_STRING;
  }
  absl::string_view failureReason() const override {
    return ssl_socket_ ? ssl_socket_->failureReason() : NotReadyReason;
  }
  bool canFlushClose() override {
    return ssl_socket_ ? ssl_socket_->canFlushClose() : true;
  }
  void closeSocket(Network::ConnectionEvent type) override {
    if (ssl_socket_) {
      ssl_socket_->closeSocket(type);
    }
  }
  Network::IoResult doRead(Buffer::Instance& buffer) override {
    if (ssl_socket_) {
      return ssl_socket_->doRead(buffer);
    }
    return {Network::PostIoAction::Close, 0, false};
  }
  Network::IoResult doWrite(Buffer::Instance& buffer , bool end_stream) override {
    if (ssl_socket_) {
      return ssl_socket_->doWrite(buffer, end_stream);
    }    
    return {Network::PostIoAction::Close, 0, false};
  }
  void onConnected() override {
    if (ssl_socket_) {
      ssl_socket_->onConnected();
    }
  }
  Ssl::ConnectionInfoConstSharedPtr ssl() const override {
    return ssl_socket_ ? ssl_socket_->ssl() : nullptr;
  }

private:
  Extensions::TransportSockets::Tls::InitialState state_;
  const Network::TransportSocketOptionsSharedPtr transport_socket_options_;
  SslSocketPtr ssl_socket_;
};

class ClientSslSocketFactory : public Network::TransportSocketFactory {
public:
  Network::TransportSocketPtr
  createTransportSocket(Network::TransportSocketOptionsSharedPtr options) const override {
    return std::make_unique<SslSocketWrapper>(Extensions::TransportSockets::Tls::InitialState::Client, options);
  }

  bool implementsSecureTransport() const override { return true; }
};

class ServerSslSocketFactory : public Network::TransportSocketFactory {
public:
  Network::TransportSocketPtr
  createTransportSocket(Network::TransportSocketOptionsSharedPtr options) const override {
    return std::make_unique<SslSocketWrapper>(Extensions::TransportSockets::Tls::InitialState::Server, options);
  }

  bool implementsSecureTransport() const override { return true; }
};

} // namespace

Network::TransportSocketFactoryPtr UpstreamTlsWrapperFactory::createTransportSocketFactory(
    const Protobuf::Message&, Server::Configuration::TransportSocketFactoryContext&) {
  return std::make_unique<ClientSslSocketFactory>();
}

ProtobufTypes::MessagePtr UpstreamTlsWrapperFactory::createEmptyConfigProto() {
  return std::make_unique<envoy::api::v2::auth::UpstreamTlsContext>();
}

REGISTER_FACTORY(UpstreamTlsWrapperFactory,
                 Server::Configuration::UpstreamTransportSocketConfigFactory);

Network::TransportSocketFactoryPtr DownstreamTlsWrapperFactory::createTransportSocketFactory(
    const Protobuf::Message&, Server::Configuration::TransportSocketFactoryContext&,
    const std::vector<std::string>&) {
  return std::make_unique<ServerSslSocketFactory>();
}

ProtobufTypes::MessagePtr DownstreamTlsWrapperFactory::createEmptyConfigProto() {
  return std::make_unique<envoy::api::v2::auth::DownstreamTlsContext>();
}

REGISTER_FACTORY(DownstreamTlsWrapperFactory,
                 Server::Configuration::DownstreamTransportSocketConfigFactory);
} // namespace Cilium
} // namespace Envoy
   07070100000035000081A4000003E800000064000000015E17A24700000872000000000000000000000000000000000000002B00000000cilium-proxy-20200109/cilium/tls_wrapper.h    #pragma once

#include "envoy/registry/registry.h"
#include "envoy/server/transport_socket_config.h"
#include "envoy/stats/scope.h"
#include "envoy/stats/stats_macros.h"

namespace Envoy {
namespace Cilium {

// clang-format off
#define ALL_SSL_SOCKET_FACTORY_STATS(COUNTER)                                 \
  COUNTER(ssl_context_update_by_sds)                                          \
  COUNTER(upstream_context_secrets_not_ready)                                 \
  COUNTER(downstream_context_secrets_not_ready)
// clang-format on

/**
 * Wrapper struct for SSL socket factory stats. @see stats_macros.h
 */
struct SslSocketFactoryStats {
  ALL_SSL_SOCKET_FACTORY_STATS(GENERATE_COUNTER_STRUCT)
};

/**
 * Config registration for the Cilium TLS wrapper transport socket factory.
 * @see TransportSocketConfigFactory.
 */
class TlsWrapperConfigFactory : public virtual Server::Configuration::TransportSocketConfigFactory {
public:
  ~TlsWrapperConfigFactory() override = default;
  std::string name() const override { return name_; }

  const std::string name_ = "cilium.tls_wrapper";
};

class UpstreamTlsWrapperFactory : public Server::Configuration::UpstreamTransportSocketConfigFactory,
                                  public TlsWrapperConfigFactory {
public:
  Network::TransportSocketFactoryPtr createTransportSocketFactory(
      const Protobuf::Message& config,
      Server::Configuration::TransportSocketFactoryContext& context) override;
  ProtobufTypes::MessagePtr createEmptyConfigProto() override;
};

DECLARE_FACTORY(UpstreamTlsWrapperFactory);

class DownstreamTlsWrapperFactory
    : public Server::Configuration::DownstreamTransportSocketConfigFactory,
      public TlsWrapperConfigFactory {
public:
  Network::TransportSocketFactoryPtr
  createTransportSocketFactory(const Protobuf::Message& config,
                               Server::Configuration::TransportSocketFactoryContext& context,
                               const std::vector<std::string>& server_names) override;
  ProtobufTypes::MessagePtr createEmptyConfigProto() override;
};

DECLARE_FACTORY(DownstreamTlsWrapperFactory);
} // namespace Cilium
} // namespace Envoy
  07070100000036000081A4000003E800000064000000015E17A2470001A962000000000000000000000000000000000000003100000000cilium-proxy-20200109/cilium_integration_test.cc  #include <errno.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <string>

#include "envoy/network/listen_socket.h"
#include "envoy/registry/registry.h"
#include "envoy/server/filter_config.h"
#include "envoy/singleton/manager.h"

#include "common/common/assert.h"
#include "common/network/address_impl.h"
#include "common/network/utility.h"

#include "common/common/thread.h"
#include "common/config/filesystem_subscription_impl.h"
#include "common/config/utility.h"
#include "common/filesystem/filesystem_impl.h"
#include "common/protobuf/protobuf.h"
#include "common/thread_local/thread_local_impl.h"
#include "extensions/filters/network/http_connection_manager/config.h"
#include "extensions/transport_sockets/tls/context_config_impl.h"
#include "extensions/transport_sockets/tls/ssl_socket.h"

#include "test/integration/http_integration.h"
#include "test/integration/ssl_utility.h"
#include "test/test_common/environment.h"
#include "test/test_common/network_utility.h"

#include "cilium/accesslog.h"
#include "cilium/bpf_metadata.h"
#include "cilium/l7policy.h"
#include "cilium/network_policy.h"
#include "cilium/socket_option.h"
#include "cilium/api/bpf_metadata.pb.validate.h"
#include "cilium/api/l7policy.pb.validate.h"

namespace Envoy {

class AccessLogServer : Logger::Loggable<Logger::Id::router> {
public:
  AccessLogServer(const std::string path) : path_(path), fd2_(-1) {
    ENVOY_LOG(critical, "Creating access log server: {}", path_);
    ::unlink(path_.c_str());
    fd_ = ::socket(AF_UNIX, SOCK_SEQPACKET, 0);
    if (fd_ == -1) {
      ENVOY_LOG(error, "Can't create socket: {}", strerror(errno));
      return;
    }

    ENVOY_LOG(critical, "Binding to {}", path_);
    struct sockaddr_un addr = {.sun_family = AF_UNIX, .sun_path = {}};
    strncpy(addr.sun_path, path_.c_str(), sizeof(addr.sun_path) - 1);
    if (::bind(fd_, reinterpret_cast<struct sockaddr *>(&addr),
	       sizeof(addr)) == -1) {
      ENVOY_LOG(warn, "Bind to {} failed: {}", path_, strerror(errno));
      Close();
      return;
    }

    ENVOY_LOG(critical, "Listening on {}", path_);
    if (::listen(fd_, 5) == -1) {
      ENVOY_LOG(warn, "Listen on {} failed: {}", path_, strerror(errno));
      Close();
      return;
    }

    ENVOY_LOG(critical, "Starting access log server thread fd: {}", fd_);

    thread_ = Thread::threadFactoryForTest().createThread([this]() { threadRoutine(); });
  }

  ~AccessLogServer() {
    if (fd_ >= 0) {
      Close();
      ENVOY_LOG(warn, "Waiting on access log to close: {}", strerror(errno));
      thread_->join();
      thread_.reset();
    }
  }
private:
  void Close() {
    ::shutdown(fd_, SHUT_RD);
    ::shutdown(fd2_, SHUT_RD);
    errno = 0;
    ::close(fd_);
    fd_ = -1;
    ::unlink(path_.c_str());
  }

  void threadRoutine() {
    while (fd_ >= 0) {
      ENVOY_LOG(critical, "Access Log thread started on fd: {}", fd_);
      // Accept a new connection
      struct sockaddr_un addr;
      socklen_t addr_len;
      ENVOY_LOG(warn, "Access log blocking accept on fd: {}", fd_);
      fd2_ = ::accept(fd_, reinterpret_cast<sockaddr*>(&addr), &addr_len);
      if (fd2_ < 0) {
	ENVOY_LOG(critical, "Access log accept failed: {}", strerror(errno));
      } else {
	char buf[8192];
	while (true) {
	  ENVOY_LOG(warn, "Access log blocking recv on fd: {}", fd2_);
	  ssize_t received = ::recv(fd2_, buf, sizeof(buf), 0);
	  if (received < 0) {
	    ENVOY_LOG(warn, "Access log recv failed: {}", strerror(errno));
	    break;
	  } else if (received == 0) {
	    ENVOY_LOG(warn, "Access log recv got no data!");
	    break;
	  } else {
	    std::string data(buf, received);
	    ::cilium::LogEntry entry;
	    if (!entry.ParseFromString(data)) {
	      ENVOY_LOG(warn, "Access log parse failed!");
	    } else {
	      if (entry.method().length() > 0) {
		ENVOY_LOG(warn, "Access log deprecated format detected");
		// Deprecated format detected, map to the new one
		auto http = entry.mutable_http();
		http->set_http_protocol(entry.http_protocol());
		entry.clear_http_protocol();
		http->set_scheme(entry.scheme());
		entry.clear_scheme();
		http->set_host(entry.host());
		entry.clear_host();
		http->set_path(entry.path());
		entry.clear_path();
		http->set_method(entry.method());
		entry.clear_method();
		for (const auto& dep_hdr: entry.headers()) {
		  auto hdr = http->add_headers();
		  hdr->set_key(dep_hdr.key());
		  hdr->set_value(dep_hdr.value());
		}
		entry.clear_headers();
		http->set_status(entry.status());
		entry.clear_status();
	      }
	      ENVOY_LOG(info, "Access log entry: {}", entry.DebugString());
	    }
	  }
	}
	::close(fd2_);
	fd2_ = -1;
      }
    };
  }

  const std::string path_;
  std::atomic<int> fd_;
  std::atomic<int> fd2_;
  Thread::ThreadPtr thread_;
};

std::string host_map_config;
std::shared_ptr<const Cilium::PolicyHostMap> hostmap{nullptr};

Network::Address::InstanceConstSharedPtr original_dst_address;
std::shared_ptr<const Cilium::NetworkPolicyMap> npmap{nullptr};

std::string policy_config;

const std::string BASIC_POLICY = R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicy
  name: '{{ ntop_ip_loopback_address }}'
  policy: 3
  ingress_per_port_policies:
  - port: 80
    rules:
    - remote_policies: [ 1 ]
      http_rules:
        http_rules:
        - headers: [ { name: ':path', exact_match: '/allowed' } ]
        - headers: [ { name: ':path', regex_match: '.*public$' } ]
        - headers: [ { name: ':authority', exact_match: 'allowedHOST' } ]
        - headers: [ { name: ':authority', regex_match: '.*REGEX.*' } ]
        - headers: [ { name: ':method', exact_match: 'PUT' }, { name: ':path', exact_match: '/public/opinions' } ]
    - remote_policies: [ 2 ]
      http_rules:
        http_rules:
        - headers: [ { name: ':path', exact_match: '/only-2-allowed' } ]
  egress_per_port_policies:
  - port: 80
    rules:
    - remote_policies: [ 1 ]
      http_rules:
        http_rules:
        - headers: [ { name: ':path', exact_match: '/allowed' } ]
        - headers: [ { name: ':path', regex_match: '.*public$' } ]
        - headers: [ { name: ':authority', exact_match: 'allowedHOST' } ]
        - headers: [ { name: ':authority', regex_match: '.*REGEX.*' } ]
        - headers: [ { name: ':method', exact_match: 'PUT' }, { name: ':path', exact_match: '/public/opinions' } ]
    - remote_policies: [ 2 ]
      http_rules:
        http_rules:
        - headers: [ { name: ':path', exact_match: '/only-2-allowed' } ]
)EOF";

const std::string HEADER_ACTION_POLICY = R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicy
  name: '{{ ntop_ip_loopback_address }}'
  policy: 3
  ingress_per_port_policies:
  - port: 80
    rules:
    - remote_policies: [ 1 ]
      http_rules:
        http_rules:
        - headers: [ { name: ':path', exact_match: '/allowed' } ]
          header_matches:
          - name: 'header42'
            match_action: FAIL_ON_MATCH
            mismatch_action: CONTINUE_ON_MISMATCH
          - name: 'header1'
            value: 'value1'
            mismatch_action: REPLACE_ON_MISMATCH
        - headers: [ { name: ':path', regex_match: '.*public$' } ]
          header_matches:
          - name: 'user-agent'
            value: 'CuRL'
            mismatch_action: DELETE_ON_MISMATCH
        - headers: [ { name: ':authority', exact_match: 'allowedHOST' } ]
          header_matches:
          - name: 'header2'
            value: 'value2'
            mismatch_action: ADD_ON_MISMATCH
          - name: 'header42'
            match_action: DELETE_ON_MATCH
            mismatch_action: CONTINUE_ON_MISMATCH
        - headers: [ { name: ':authority', regex_match: '.*REGEX.*' } ]
          header_matches:
          - name: 'header42'
            value: '42'
            mismatch_action: DELETE_ON_MISMATCH
        - headers: [ { name: ':method', exact_match: 'PUT' }, { name: ':path', exact_match: '/public/opinions' } ]
    - remote_policies: [ 2 ]
      http_rules:
        http_rules:
        - headers: [ { name: ':path', exact_match: '/only-2-allowed' } ]
  egress_per_port_policies:
  - port: 80
    rules:
    - remote_policies: [ 1 ]
      http_rules:
        http_rules:
        - headers: [ { name: ':path', exact_match: '/allowed' } ]
        - headers: [ { name: ':path', regex_match: '.*public$' } ]
        - headers: [ { name: ':authority', exact_match: 'allowedHOST' } ]
        - headers: [ { name: ':authority', regex_match: '.*REGEX.*' } ]
        - headers: [ { name: ':method', exact_match: 'PUT' }, { name: ':path', exact_match: '/public/opinions' } ]
    - remote_policies: [ 2 ]
      http_rules:
        http_rules:
        - headers: [ { name: ':path', exact_match: '/only-2-allowed' } ]
)EOF";

const std::string TCP_POLICY = R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicy
  name: '{{ ntop_ip_loopback_address }}'
  policy: 3
  ingress_per_port_policies:
  - port: 80
    rules:
    - remote_policies: [ 1 ]
      l7_proto: "test.passer"
  egress_per_port_policies:
  - port: 80
    rules:
    - remote_policies: [ 1 ]
      l7_proto: "test.passer"
)EOF";

namespace Filter {
namespace BpfMetadata {

class TestConfig : public Config {
public:
  TestConfig(const ::cilium::BpfMetadata& config, Server::Configuration::ListenerFactoryContext& context)
    : Config(config, context) {}
  ~TestConfig() {
    hostmap.reset();
    npmap.reset();
  }

  bool getMetadata(Network::ConnectionSocket &socket) override {
    // fake setting the local address. It remains the same as required by the test infra, but it will be marked as restored
    // as required by the original_dst cluster.
    socket.restoreLocalAddress(original_dst_address);

    // TLS filter chain matches this, make namespace part of this (e.g., "default")?
    socket.setDetectedTransportProtocol("cilium:default");

    // This must be the full domain name
    socket.setRequestedServerName("localhost");

    if (is_ingress_) {
      std::string pod_ip = original_dst_address->ip()->addressAsString();
      ENVOY_LOG_MISC(debug, "INGRESS POD_IP: {}", pod_ip);
      auto policy = npmap_->GetPolicyInstance(pod_ip);
      socket.addOption(std::make_shared<Cilium::SocketOption>(policy, maps_, 1, 173, true, 80, 10000, std::move(pod_ip), nullptr));
    } else {
      std::string pod_ip = socket.localAddress()->ip()->addressAsString();
      ENVOY_LOG_MISC(debug, "EGRESS POD_IP: {}", pod_ip);
      auto policy = npmap_->GetPolicyInstance(pod_ip);
      socket.addOption(std::make_shared<Cilium::SocketOption>(policy, maps_, 173, hosts_->resolve(socket.localAddress()->ip()), false, 80, 10001, std::move(pod_ip), nullptr));
    }

    return true;
  }
};

class TestInstance : public Instance {
public:
  TestInstance(const ConfigSharedPtr& config) : Instance(config) {}
};

} // namespace BpfMetadata
} // namespace Filter

namespace Server {
namespace Configuration {

namespace {

std::shared_ptr<const Cilium::PolicyHostMap>
createHostMap(const std::string& config, Server::Configuration::ListenerFactoryContext& context) {
  return context.singletonManager().getTyped<const Cilium::PolicyHostMap>(
      "cilium_host_map_singleton", [&config, &context] {
	std::string path = TestEnvironment::writeStringToFileForTest("host_map.yaml", config);
	ENVOY_LOG_MISC(debug, "Loading Cilium Host Map from file \'{}\' instead of using gRPC",
		       path);

        Envoy::Config::Utility::checkFilesystemSubscriptionBackingPath(path, context.api());
        Envoy::Config::SubscriptionStats stats =
	  Envoy::Config::Utility::generateStats(context.scope());
        auto map = std::make_shared<Cilium::PolicyHostMap>(context.threadLocal());
	auto subscription = std::make_unique<Envoy::Config::FilesystemSubscriptionImpl>(
            context.dispatcher(), path, *map, stats, ProtobufMessage::getNullValidationVisitor(), context.api());
        map->startSubscription(std::move(subscription));
        return map;
    });
}

std::shared_ptr<const Cilium::NetworkPolicyMap>
createPolicyMap(const std::string& config, Server::Configuration::FactoryContext& context) {
  return context.singletonManager().getTyped<const Cilium::NetworkPolicyMap>(
      "cilium_network_policy_singleton", [&config, &context] {
        // File subscription.
	std::string path = TestEnvironment::writeStringToFileForTest("network_policy.yaml", config);
	ENVOY_LOG_MISC(debug, "Loading Cilium Network Policy from file \'{}\' instead of using gRPC", path);
        Envoy::Config::Utility::checkFilesystemSubscriptionBackingPath(path, context.api());
        Envoy::Config::SubscriptionStats stats = Envoy::Config::Utility::generateStats(context.scope());
        auto map = std::make_shared<Cilium::NetworkPolicyMap>(context);
        auto subscription = std::make_unique<Envoy::Config::FilesystemSubscriptionImpl>(
            context.dispatcher(), path, *map, stats, ProtobufMessage::getNullValidationVisitor(), context.api());
	map->startSubscription(std::move(subscription));
	return map;
      });
}

} // namespace

/**
 * Config registration for the bpf metadata filter. @see
 * NamedNetworkFilterConfigFactory.
 */
class TestBpfMetadataConfigFactory : public NamedListenerFilterConfigFactory {
public:
  // NamedListenerFilterConfigFactory
  Network::ListenerFilterFactoryCb
  createFilterFactoryFromProto(const Protobuf::Message& proto_config,
			       ListenerFactoryContext &context) override {
    // Create the file-based policy map before the filter is created, so that the singleton
    // is set before the gRPC subscription is attempted.
    hostmap = createHostMap(host_map_config, context);
    // Create the file-based policy map before the filter is created, so that the singleton
    // is set before the gRPC subscription is attempted.
    npmap = createPolicyMap(policy_config, context);

    auto config = std::make_shared<Filter::BpfMetadata::TestConfig>(
        MessageUtil::downcastAndValidate<const ::cilium::BpfMetadata&>(proto_config, context.messageValidationVisitor()), context);

    return [config](
               Network::ListenerFilterManager &filter_manager) mutable -> void {
      filter_manager.addAcceptFilter(
          std::make_unique<Filter::BpfMetadata::TestInstance>(config));
    };
  }

  ProtobufTypes::MessagePtr createEmptyConfigProto() override {
    return std::make_unique<::cilium::BpfMetadata>();
  }

  std::string name() override { return "test_bpf_metadata"; }
};

/**
 * Static registration for the bpf metadata filter. @see RegisterFactory.
 */
static Registry::RegisterFactory<TestBpfMetadataConfigFactory,
                                 NamedListenerFilterConfigFactory>
    registered_;

} // namespace Configuration
} // namespace Server

namespace Cilium {

class TestConfigFactory
    : public Server::Configuration::NamedHttpFilterConfigFactory {
public:
  Http::FilterFactoryCb
  createFilterFactory(const Json::Object&, const std::string &,
                      Server::Configuration::FactoryContext&) override {
    // json config not supported
    return [](Http::FilterChainFactoryCallbacks &) mutable -> void {};
  }

  Http::FilterFactoryCb
  createFilterFactoryFromProto(const Protobuf::Message& proto_config, const std::string&,
                               Server::Configuration::FactoryContext& context) override {
    auto config = std::make_shared<Cilium::Config>(
        MessageUtil::downcastAndValidate<const ::cilium::L7Policy&>(proto_config, context.messageValidationVisitor()), context);
    return [config](
               Http::FilterChainFactoryCallbacks &callbacks) mutable -> void {
      callbacks.addStreamFilter(std::make_shared<Cilium::AccessFilter>(config));
    };
  }

  ProtobufTypes::MessagePtr createEmptyConfigProto() override {
    return std::make_unique<::cilium::L7Policy>();
  }

  std::string name() override { return "test_l7policy"; }
};

/**
 * Static registration for this filter. @see RegisterFactory.
 */
static Registry::RegisterFactory<
    TestConfigFactory, Server::Configuration::NamedHttpFilterConfigFactory>
    register_;

} // namespace Cilium

// params: is_ingress ("true", "false")
const std::string cilium_proxy_config_fmt = R"EOF(
admin:
  access_log_path: /dev/null
  address:
    socket_address:
      address: 127.0.0.1
      port_value: 0
static_resources:
  clusters:
  - name: cluster1
    type: ORIGINAL_DST
    lb_policy: CLUSTER_PROVIDED
    connect_timeout:
      seconds: 1
  - name: xds-grpc-cilium
    connect_timeout:
      seconds: 5
    type: STATIC
    lb_policy: ROUND_ROBIN
    http2_protocol_options:
    hosts:
    - pipe:
        path: /var/run/cilium/xds.sock
  listeners:
    name: http
    address:
      socket_address:
        address: 127.0.0.1
        port_value: 0
    listener_filters:
      name: test_bpf_metadata
      config:
        is_ingress: {0}
    filter_chains:
      filters:
      - name: cilium.network
        config:
          proxylib: "proxylib/libcilium.so"
      - name: envoy.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
          stat_prefix: config_test
          codec_type: auto
          http_filters:
          - name: test_l7policy
            config:
              access_log_path: "{{ test_udsdir }}/access_log.sock"
          - name: envoy.router
          route_config:
            name: policy_enabled
            virtual_hosts:
              name: integration
              domains: "*"
              routes:
              - route:
                  cluster: cluster1
                  max_grpc_timeout:
                    seconds: 0
                    nanos: 0
                match:
                  prefix: "/"
)EOF";

class CiliumHttpIntegrationTest
  : public HttpIntegrationTest,
    public testing::TestWithParam<Network::Address::IpVersion> {

public:
  CiliumHttpIntegrationTest(const std::string& config)
    : HttpIntegrationTest(Http::CodecClient::Type::HTTP1, GetParam(), realTime(), config),
      accessLogServer_(TestEnvironment::unixDomainSocketPath("access_log.sock")) {
    // Undo legacy compat rename done by HttpIntegrationTest constructor.
    // config_helper_.renameListener("cilium");
    for (Logger::Logger& logger : Logger::Registry::loggers()) {
      logger.setLevel(spdlog::level::trace);
    }
  }
  ~CiliumHttpIntegrationTest() {
  }  
  /**
   * Initializer for an individual integration test.
   */
  void initialize() override {
    HttpIntegrationTest::initialize();
    // Pass the fake upstream address to the cilium bpf filter that will set it as an "original destination address".
    if (GetParam() == Network::Address::IpVersion::v4) {
      original_dst_address = std::make_shared<Network::Address::Ipv4Instance>(Network::Test::getLoopbackAddressString(GetParam()), fake_upstreams_.back()->localAddress()->ip()->port());
    } else {
      original_dst_address = std::make_shared<Network::Address::Ipv6Instance>(Network::Test::getLoopbackAddressString(GetParam()), fake_upstreams_.back()->localAddress()->ip()->port());
    }
  }

  void Denied(Http::TestHeaderMapImpl&& headers) {
    policy_config = TestEnvironment::substitute(HEADER_ACTION_POLICY, GetParam());
    initialize();
    codec_client_ = makeHttpConnection(lookupPort("http"));
    auto response = codec_client_->makeHeaderOnlyRequest(headers);
    response->waitForEndStream();

    uint64_t status;
    ASSERT_TRUE(absl::SimpleAtoi(response->headers().Status()->value().getStringView(), &status));
    EXPECT_EQ(403, status);
  }

  void Accepted(Http::TestHeaderMapImpl&& headers) {
    policy_config = TestEnvironment::substitute(HEADER_ACTION_POLICY, GetParam());
    initialize();
    codec_client_ = makeHttpConnection(lookupPort("http"));
    auto response = sendRequestAndWaitForResponse(headers, 0, default_response_headers_, 0);

    uint64_t status;
    ASSERT_TRUE(absl::SimpleAtoi(response->headers().Status()->value().getStringView(), &status));
    EXPECT_EQ(200, status);
  }

  void InvalidHostMap(const std::string& config, const char* exmsg) {
    std::string path = TestEnvironment::writeStringToFileForTest("host_map_fail.yaml", config);
    envoy::api::v2::DiscoveryResponse message;
    ThreadLocal::InstanceImpl tls;

    MessageUtil::loadFromFile(path, message, ProtobufMessage::getNullValidationVisitor(), *api_.get());
    Envoy::Cilium::PolicyHostMap hmap(tls);

    EXPECT_THROW_WITH_MESSAGE(hmap.onConfigUpdate(message.resources(), "1"), EnvoyException, exmsg);
    tls.shutdownGlobalThreading();
  }

  AccessLogServer accessLogServer_;
};

class CiliumIntegrationTest : public CiliumHttpIntegrationTest {
public:
  CiliumIntegrationTest()
    : CiliumHttpIntegrationTest(fmt::format(TestEnvironment::substitute(cilium_proxy_config_fmt, GetParam()), "true")) {}
};

INSTANTIATE_TEST_CASE_P(
    IpVersions, CiliumIntegrationTest,
    testing::ValuesIn(TestEnvironment::getIpVersionsForTest()));

TEST_P(CiliumIntegrationTest, HostMapValid) {
  std::string config = R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 173
  host_addresses: [ "192.168.0.1", "f00d::1" ]
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 1
  host_addresses: [ "127.0.0.1/32", "::1/128" ]
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "127.0.0.0/8", "beef::/63" ]
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 12
  host_addresses: [ "0.0.0.0/0", "::/0" ]
)EOF";

  std::string path = TestEnvironment::writeStringToFileForTest("host_map_success.yaml", config);
  envoy::api::v2::DiscoveryResponse message;
  ThreadLocal::InstanceImpl tls;

  MessageUtil::loadFromFile(path, message, ProtobufMessage::getNullValidationVisitor(), *api_.get());
  auto hmap = std::make_shared<Envoy::Cilium::PolicyHostMap>(tls);

  VERBOSE_EXPECT_NO_THROW(hmap->onConfigUpdate(message.resources(), "2"));

  EXPECT_EQ(hmap->resolve(Network::Address::Ipv4Instance("192.168.0.1").ip()), 173);
  EXPECT_EQ(hmap->resolve(Network::Address::Ipv4Instance("192.168.0.0").ip()), 12);
  EXPECT_EQ(hmap->resolve(Network::Address::Ipv4Instance("192.168.0.2").ip()), 12);
  EXPECT_EQ(hmap->resolve(Network::Address::Ipv4Instance("127.0.0.1").ip()), 1);
  EXPECT_EQ(hmap->resolve(Network::Address::Ipv4Instance("127.0.0.2").ip()), 11);
  EXPECT_EQ(hmap->resolve(Network::Address::Ipv4Instance("126.0.0.2").ip()), 12);
  EXPECT_EQ(hmap->resolve(Network::Address::Ipv4Instance("128.0.0.0").ip()), 12);
  EXPECT_EQ(hmap->resolve(Network::Address::Ipv6Instance("::1").ip()), 1);
  EXPECT_EQ(hmap->resolve(Network::Address::Ipv6Instance("::").ip()), 12);
  EXPECT_EQ(hmap->resolve(Network::Address::Ipv6Instance("f00d::1").ip()), 173);
  EXPECT_EQ(hmap->resolve(Network::Address::Ipv6Instance("f00d::").ip()), 12);
  EXPECT_EQ(hmap->resolve(Network::Address::Ipv6Instance("beef::1.2.3.4").ip()), 11);
  EXPECT_EQ(hmap->resolve(Network::Address::Ipv6Instance("beef:0:0:1::").ip()), 11);
  EXPECT_EQ(hmap->resolve(Network::Address::Ipv6Instance("beef:0:0:1::42").ip()), 11);
  EXPECT_EQ(hmap->resolve(Network::Address::Ipv6Instance("beef:0:0:2::").ip()), 12);

  tls.shutdownGlobalThreading();
}

TEST_P(CiliumIntegrationTest, HostMapInvalidNonCIDRBits) {
  if (GetParam() == Network::Address::IpVersion::v4) {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "127.0.0.1/32", "127.0.0.1/31" ]
)EOF",
		   "NetworkPolicyHosts: Non-prefix bits set in '127.0.0.1/31'");
  } else {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "::1/128", "::1/63" ]
)EOF",
		   "NetworkPolicyHosts: Non-prefix bits set in '::1/63'");
  }
}

TEST_P(CiliumIntegrationTest, HostMapInvalidPrefixLengths) {
  if (GetParam() == Network::Address::IpVersion::v4) {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "127.0.0.1", "127.0.0.0/8", "127.0.0.1/33" ]
)EOF",
		   "NetworkPolicyHosts: Invalid prefix length in '127.0.0.1/33'");
  } else {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "::1/128", "f00f::/65", "::3/129" ]
)EOF",
		   "NetworkPolicyHosts: Invalid prefix length in '::3/129'");
  }
}

TEST_P(CiliumIntegrationTest, HostMapInvalidPrefixLengths2) {
  if (GetParam() == Network::Address::IpVersion::v4) {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "127.0.0.1", "127.0.0.0/8", "127.0.0.1/32a" ]
)EOF",
		   "NetworkPolicyHosts: Invalid prefix length in '127.0.0.1/32a'");
  } else {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "::1/128", "f00f::/65", "::3/" ]
)EOF",
		   "NetworkPolicyHosts: Invalid prefix length in '::3/'");
  }
}

TEST_P(CiliumIntegrationTest, HostMapInvalidPrefixLengths3) {
  if (GetParam() == Network::Address::IpVersion::v4) {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "127.0.0.1", "127.0.0.0/8", "127.0.0.1/ 32" ]
)EOF",
		   "NetworkPolicyHosts: Invalid prefix length in '127.0.0.1/ 32'");
  } else {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "::1/128", "f00f::/65", "::3/128 " ]
)EOF",
		   "NetworkPolicyHosts: Invalid prefix length in '::3/128 '");
  }
}

TEST_P(CiliumIntegrationTest, HostMapDuplicateEntry) {
  if (GetParam() == Network::Address::IpVersion::v4) {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "127.0.0.0/16", "127.0.0.1/32", "127.0.0.1" ]
)EOF",
		   "NetworkPolicyHosts: Duplicate host entry '127.0.0.1' for policy 11, already mapped to 11");
  } else {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "::1/128", "f00f::/65", "::1" ]
)EOF",
		   "NetworkPolicyHosts: Duplicate host entry '::1' for policy 11, already mapped to 11");
  }
}

TEST_P(CiliumIntegrationTest, HostMapDuplicateEntry2) {
  if (GetParam() == Network::Address::IpVersion::v4) {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "127.0.0.0/16", "127.0.0.1/32" ]
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 12
  host_addresses: [ "127.0.0.0/8", "127.0.0.1" ]
)EOF",
		   "NetworkPolicyHosts: Duplicate host entry '127.0.0.1' for policy 12, already mapped to 11");
  } else {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "::1/128", "f00f::/65" ]
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 12
  host_addresses: [ "f00f::/16", "::1" ]
)EOF",
		   "NetworkPolicyHosts: Duplicate host entry '::1' for policy 12, already mapped to 11");
  }
}

TEST_P(CiliumIntegrationTest, HostMapInvalidAddress) {
  if (GetParam() == Network::Address::IpVersion::v4) {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "127.0.0.0/16", "127.0.0.1/32", "255.256.0.0" ]
)EOF",
		   "NetworkPolicyHosts: Invalid host entry '255.256.0.0' for policy 11");
  } else {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "::1/128", "f00f::/65", "fOOd::1" ]
)EOF",
		   "NetworkPolicyHosts: Invalid host entry 'fOOd::1' for policy 11");
  }
}

TEST_P(CiliumIntegrationTest, HostMapInvalidAddress2) {
  if (GetParam() == Network::Address::IpVersion::v4) {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "127.0.0.0/16", "127.0.0.1/32", "255.255.0.0 " ]
)EOF",
		   "NetworkPolicyHosts: Invalid host entry '255.255.0.0 ' for policy 11");
  } else {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "::1/128", "f00f::/65", "f00d:: 1" ]
)EOF",
		   "NetworkPolicyHosts: Invalid host entry 'f00d:: 1' for policy 11");
  }
}

TEST_P(CiliumIntegrationTest, HostMapInvalidDefaults) {
  if (GetParam() == Network::Address::IpVersion::v4) {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "0.0.0.0/0", "128.0.0.0/0" ]
)EOF",
		   "NetworkPolicyHosts: Non-prefix bits set in '128.0.0.0/0'");
  } else {
    InvalidHostMap(R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 11
  host_addresses: [ "::/0", "8000::/0" ]
)EOF",
		   "NetworkPolicyHosts: Non-prefix bits set in '8000::/0'");
  }
}

TEST_P(CiliumIntegrationTest, DeniedPathPrefix) {
  Denied({{":method", "GET"}, {":path", "/prefix"}, {":authority", "host"}});
}

TEST_P(CiliumIntegrationTest, AllowedPathPrefix) {
  Accepted({{":method", "GET"}, {":path", "/allowed"}, {":authority", "host"}, {"header1", "value1"}});
}

TEST_P(CiliumIntegrationTest, AllowedPathPrefixStrippedHeader) {
  Accepted({{":method", "GET"}, {":path", "/allowed"}, {":authority", "host"}, {"header1", "value2"},
            {"x-envoy-original-dst-host", "1.1.1.1:9999"}});
}

TEST_P(CiliumIntegrationTest, AllowedPathRegex) {
  Accepted({{":method", "GET"}, {":path", "/maybe/public"}, {":authority", "host"}});
}

TEST_P(CiliumIntegrationTest, AllowedPathRegexDeleteHeader) {
  Accepted({{":method", "GET"}, {":path", "/maybe/public"}, {":authority", "host"}, {"User-Agent", "test"}});
}

TEST_P(CiliumIntegrationTest, AllowedHostRegexDeleteHeader) {
  Accepted({{":method", "GET"}, {":path", "/maybe/private"}, {":authority", "hostREGEXname"}, {"header42", "test"}});
}

TEST_P(CiliumIntegrationTest, DeniedPath) {
  Denied({{":method", "GET"}, {":path", "/maybe/private"}, {":authority", "host"}});
}

TEST_P(CiliumIntegrationTest, AllowedHostString) {
  Accepted({{":method", "GET"}, {":path", "/maybe/private"}, {":authority", "allowedHOST"}});
}

TEST_P(CiliumIntegrationTest, AllowedReplaced) {
  Accepted({{":method", "GET"}, {":path", "/allowed"}, {":authority", "allowedHOST"}});
}

TEST_P(CiliumIntegrationTest, Denied42) {
  Denied({{":method", "GET"}, {":path", "/allowed"}, {":authority", "host"}, {"header42", "anything"}});
}

TEST_P(CiliumIntegrationTest, AllowedReplacedAndDeleted) {
  Accepted({{":method", "GET"}, {":path", "/allowed"}, {":authority", "allowedHOST"}, {"header42", "anything"}});
}

TEST_P(CiliumIntegrationTest, AllowedHostRegex) {
  Accepted({{":method", "GET"}, {":path", "/maybe/private"}, {":authority", "hostREGEXname"}});
}

TEST_P(CiliumIntegrationTest, DeniedMethod) {
  Denied({{":method", "POST"}, {":path", "/maybe/private"}, {":authority", "host"}});
}

TEST_P(CiliumIntegrationTest, AcceptedMethod) {
  Accepted({{":method", "PUT"}, {":path", "/public/opinions"}, {":authority", "host"}});
}

TEST_P(CiliumIntegrationTest, L3DeniedPath) {
  Denied({{":method", "GET"}, {":path", "/only-2-allowed"}, {":authority", "host"}});
}

TEST_P(CiliumIntegrationTest, DuplicatePort) {
  // This policy has a duplicate port number, and will be rejected.
  policy_config = TestEnvironment::substitute(BASIC_POLICY, GetParam()) + R"EOF(  - port: 80
    rules:
    - remote_policies: [ 2 ]
      http_rules:
        http_rules:
        - headers: [ { name: ':path', regex_match: '/only-2-allowed'} ]
)EOF";

  // This would normally be allowed, but since the policy fails, everything will be rejected.
  Http::TestHeaderMapImpl headers =
    {{":method", "GET"}, {":path", "/allowed"}, {":authority", "host"}};
  initialize();
  codec_client_ = makeHttpConnection(lookupPort("http"));
  auto response = codec_client_->makeHeaderOnlyRequest(headers);
  response->waitForEndStream();

  uint64_t status;
  ASSERT_TRUE(absl::SimpleAtoi(response->headers().Status()->value().getStringView(), &status));
  EXPECT_EQ(403, status);
}

class CiliumIntegrationEgressTest : public CiliumHttpIntegrationTest {
public:
  CiliumIntegrationEgressTest()
    : CiliumHttpIntegrationTest(fmt::format(TestEnvironment::substitute(cilium_proxy_config_fmt, GetParam()), "false")) {
    host_map_config = R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 173
  host_addresses: [ "192.168.0.1", "f00d::1" ]
- "@type": type.googleapis.com/cilium.NetworkPolicyHosts
  policy: 1
  host_addresses: [ "127.0.0.0/8", "::/104" ]
)EOF";

  }
};

INSTANTIATE_TEST_CASE_P(
    IpVersions, CiliumIntegrationEgressTest,
    testing::ValuesIn(TestEnvironment::getIpVersionsForTest()));

TEST_P(CiliumIntegrationEgressTest, DeniedPathPrefix) {
  Denied({{":method", "GET"}, {":path", "/prefix"}, {":authority", "host"}});
}

TEST_P(CiliumIntegrationEgressTest, AllowedPathPrefix) {
  Accepted({{":method", "GET"}, {":path", "/allowed"}, {":authority", "host"}});
}

TEST_P(CiliumIntegrationEgressTest, AllowedPathRegex) {
  Accepted({{":method", "GET"}, {":path", "/maybe/public"}, {":authority", "host"}});
}

TEST_P(CiliumIntegrationEgressTest, DeniedPath) {
  Denied({{":method", "GET"}, {":path", "/maybe/private"}, {":authority", "host"}});
}

TEST_P(CiliumIntegrationEgressTest, AllowedHostString) {
  Accepted({{":method", "GET"}, {":path", "/maybe/private"}, {":authority", "allowedHOST"}});
}

TEST_P(CiliumIntegrationEgressTest, AllowedHostRegex) {
  Accepted({{":method", "GET"}, {":path", "/maybe/private"}, {":authority", "hostREGEXname"}});
}

TEST_P(CiliumIntegrationEgressTest, DeniedMethod) {
  Denied({{":method", "POST"}, {":path", "/maybe/private"}, {":authority", "host"}});
}

TEST_P(CiliumIntegrationEgressTest, AcceptedMethod) {
  Accepted({{":method", "PUT"}, {":path", "/public/opinions"}, {":authority", "host"}});
}

TEST_P(CiliumIntegrationEgressTest, L3DeniedPath) {
  Denied({{":method", "GET"}, {":path", "/only-2-allowed"}, {":authority", "host"}});
}

//
// Cilium filters with TCP proxy
//

// params: is_ingress ("true", "false")
const std::string cilium_tcp_proxy_config_fmt = R"EOF(
admin:
  access_log_path: /dev/null
  address:
    socket_address:
      address: 127.0.0.1
      port_value: 0
static_resources:
  clusters:
  - name: cluster1
    type: ORIGINAL_DST
    lb_policy: CLUSTER_PROVIDED
    connect_timeout:
      seconds: 1
  - name: xds-grpc-cilium
    connect_timeout:
      seconds: 5
    type: STATIC
    lb_policy: ROUND_ROBIN
    http2_protocol_options:
    hosts:
    - pipe:
        path: /var/run/cilium/xds.sock
  listeners:
    name: listener_0
    address:
      socket_address:
        address: 127.0.0.1
        port_value: 0
    listener_filters:
      name: test_bpf_metadata
      config:
        is_ingress: {0}
    filter_chains:
      filters:
      - name: cilium.network
        config:
          proxylib: "proxylib/libcilium.so"
      - name: envoy.tcp_proxy
        typed_config:
          "@type": type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy
          stat_prefix: tcp_stats
          cluster: cluster1
)EOF";

class CiliumTcpIntegrationTest : public BaseIntegrationTest,
                                 public testing::TestWithParam<Network::Address::IpVersion> {
public:
  CiliumTcpIntegrationTest(const std::string& config)
    : BaseIntegrationTest(GetParam(), config),
      accessLogServer_(TestEnvironment::unixDomainSocketPath("access_log.sock")) {
    enable_half_close_ = true;
  }

  ~CiliumTcpIntegrationTest() override {
    TearDown();
  }

  virtual std::string testPolicy() {
    return TestEnvironment::substitute(TCP_POLICY, GetParam());
  }

  void initialize() override {
    policy_config = testPolicy();
    config_helper_.renameListener("tcp_proxy");
    BaseIntegrationTest::initialize();
    // Pass the fake upstream address to the cilium bpf filter that will set it as an "original destination address".
    if (GetParam() == Network::Address::IpVersion::v4) {
      original_dst_address = std::make_shared<Network::Address::Ipv4Instance>(Network::Test::getLoopbackAddressString(GetParam()), fake_upstreams_.back()->localAddress()->ip()->port());
    } else {
      original_dst_address = std::make_shared<Network::Address::Ipv6Instance>(Network::Test::getLoopbackAddressString(GetParam()), fake_upstreams_.back()->localAddress()->ip()->port());
    }
  }

  void TearDown() override {
    test_server_.reset();
    fake_upstreams_.clear();
    npmap.reset();
  }

  AccessLogServer accessLogServer_;
};

class CiliumTcpProxyIntegrationTest : public CiliumTcpIntegrationTest {
public:
  CiliumTcpProxyIntegrationTest() : CiliumTcpIntegrationTest(fmt::format(TestEnvironment::substitute(cilium_tcp_proxy_config_fmt, GetParam()), "true")) {}
};

INSTANTIATE_TEST_CASE_P(IpVersions, CiliumTcpProxyIntegrationTest,
                        testing::ValuesIn(TestEnvironment::getIpVersionsForTest()),
                        TestUtility::ipTestParamsToString);

// Test upstream writing before downstream downstream does.
TEST_P(CiliumTcpProxyIntegrationTest, CiliumTcpProxyUpstreamWritesFirst) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->write("hello"));
  tcp_client->waitForData("hello");

  tcp_client->write("hello");
  ASSERT_TRUE(fake_upstream_connection->waitForData(5));

  ASSERT_TRUE(fake_upstream_connection->write("", true));
  tcp_client->waitForHalfClose();
  tcp_client->write("", true);
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
}

// Test proxying data in both directions, and that all data is flushed properly
// when there is an upstream disconnect.
TEST_P(CiliumTcpProxyIntegrationTest, CiliumTcpProxyUpstreamDisconnect) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  tcp_client->write("hello");
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->waitForData(5));
  ASSERT_TRUE(fake_upstream_connection->write("world"));
  ASSERT_TRUE(fake_upstream_connection->close());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
  tcp_client->waitForHalfClose();
  tcp_client->close();

  EXPECT_EQ("world", tcp_client->data());
}

// Test proxying data in both directions, and that all data is flushed properly
// when the client disconnects.
TEST_P(CiliumTcpProxyIntegrationTest, CiliumTcpProxyDownstreamDisconnect) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  tcp_client->write("hello");
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->waitForData(5));
  ASSERT_TRUE(fake_upstream_connection->write("world"));
  tcp_client->waitForData("world");
  tcp_client->write("hello", true);
  ASSERT_TRUE(fake_upstream_connection->waitForData(10));
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->write("", true));
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect(true));
  tcp_client->waitForDisconnect();
}

TEST_P(CiliumTcpProxyIntegrationTest, CiliumTcpProxyLargeWrite) {
  config_helper_.setBufferLimits(1024, 1024);
  initialize();

  std::string data(1024 * 16, 'a');
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  tcp_client->write(data);
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->waitForData(data.size()));
  ASSERT_TRUE(fake_upstream_connection->write(data));
  tcp_client->waitForData(data);
  tcp_client->close();
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->close());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());

  uint32_t upstream_pauses =
      test_server_->counter("cluster.cluster1.upstream_flow_control_paused_reading_total")
          ->value();
  uint32_t upstream_resumes =
      test_server_->counter("cluster.cluster1.upstream_flow_control_resumed_reading_total")
          ->value();
  EXPECT_EQ(upstream_pauses, upstream_resumes);

  uint32_t downstream_pauses =
      test_server_->counter("tcp.tcp_stats.downstream_flow_control_paused_reading_total")->value();
  uint32_t downstream_resumes =
      test_server_->counter("tcp.tcp_stats.downstream_flow_control_resumed_reading_total")->value();
  EXPECT_EQ(downstream_pauses, downstream_resumes);
}

// Test that a downstream flush works correctly (all data is flushed)
TEST_P(CiliumTcpProxyIntegrationTest, CiliumTcpProxyDownstreamFlush) {
  // Use a very large size to make sure it is larger than the kernel socket read buffer.
  const uint32_t size = 50 * 1024 * 1024;
  config_helper_.setBufferLimits(size / 4, size / 4);
  initialize();

  std::string data(size, 'a');
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  tcp_client->readDisable(true);
  tcp_client->write("", true);

  // This ensures that readDisable(true) has been run on it's thread
  // before tcp_client starts writing.
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());

  ASSERT_TRUE(fake_upstream_connection->write(data, true));

  test_server_->waitForCounterGe("cluster.cluster1.upstream_flow_control_paused_reading_total", 1);
  EXPECT_EQ(test_server_->counter("cluster.cluster1.upstream_flow_control_resumed_reading_total")
                ->value(),
            0);
  tcp_client->readDisable(false);
  tcp_client->waitForData(data);
  tcp_client->waitForHalfClose();
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());

  uint32_t upstream_pauses =
      test_server_->counter("cluster.cluster1.upstream_flow_control_paused_reading_total")
          ->value();
  uint32_t upstream_resumes =
      test_server_->counter("cluster.cluster1.upstream_flow_control_resumed_reading_total")
          ->value();
  EXPECT_GE(upstream_pauses, upstream_resumes);
  EXPECT_GT(upstream_resumes, 0);
}

// Test that an upstream flush works correctly (all data is flushed)
TEST_P(CiliumTcpProxyIntegrationTest, CiliumTcpProxyUpstreamFlush) {
  // Use a very large size to make sure it is larger than the kernel socket read buffer.
  const uint32_t size = 50 * 1024 * 1024;
  config_helper_.setBufferLimits(size, size);
  initialize();

  std::string data(size, 'a');
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->readDisable(true));
  ASSERT_TRUE(fake_upstream_connection->write("", true));

  // This ensures that fake_upstream_connection->readDisable has been run on it's thread
  // before tcp_client starts writing.
  tcp_client->waitForHalfClose();

  tcp_client->write(data, true);

  test_server_->waitForGaugeEq("tcp.tcp_stats.upstream_flush_active", 1);
  ASSERT_TRUE(fake_upstream_connection->readDisable(false));
  ASSERT_TRUE(fake_upstream_connection->waitForData(data.size()));
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
  tcp_client->waitForHalfClose();

  EXPECT_EQ(test_server_->counter("tcp.tcp_stats.upstream_flush_total")->value(), 1);
  EXPECT_EQ(test_server_->gauge("tcp.tcp_stats.upstream_flush_active")->value(), 0);
}

// Test that Envoy doesn't crash or assert when shutting down with an upstream flush active
TEST_P(CiliumTcpProxyIntegrationTest, CiliumTcpProxyUpstreamFlushEnvoyExit) {
  // Use a very large size to make sure it is larger than the kernel socket read buffer.
  const uint32_t size = 50 * 1024 * 1024;
  config_helper_.setBufferLimits(size, size);
  initialize();

  std::string data(size, 'a');
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->readDisable(true));
  ASSERT_TRUE(fake_upstream_connection->write("", true));

  // This ensures that fake_upstream_connection->readDisable has been run on it's thread
  // before tcp_client starts writing.
  tcp_client->waitForHalfClose();

  tcp_client->write(data, true);

  test_server_->waitForGaugeEq("tcp.tcp_stats.upstream_flush_active", 1);
  test_server_.reset();
  ASSERT_TRUE(fake_upstream_connection->close());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());

  // Success criteria is that no ASSERTs fire and there are no leaks.
}

//
// Cilium Go test parser "linetester" with TCP proxy
//

// params: is_ingress ("true", "false")
const std::string cilium_linetester_config_fmt = R"EOF(
admin:
  access_log_path: /dev/null
  address:
    socket_address:
      address: 127.0.0.1
      port_value: 0
static_resources:
  clusters:
  - name: cluster1
    type: ORIGINAL_DST
    lb_policy: CLUSTER_PROVIDED
    connect_timeout:
      seconds: 1
  - name: xds-grpc-cilium
    connect_timeout:
      seconds: 5
    type: STATIC
    lb_policy: ROUND_ROBIN
    http2_protocol_options:
    hosts:
    - pipe:
        path: /var/run/cilium/xds.sock
  listeners:
    name: listener_0
    address:
      socket_address:
        address: 127.0.0.1
        port_value: 0
    listener_filters:
      name: test_bpf_metadata
      config:
        is_ingress: {0}
    filter_chains:
      filters:
      - name: cilium.network
        config:
          proxylib: "proxylib/libcilium.so"
      - name: envoy.tcp_proxy
        typed_config:
          "@type": type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy
          stat_prefix: tcp_stats
          cluster: cluster1
)EOF";

const std::string TCP_POLICY_LINEPARSER = R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicy
  name: '{{ ntop_ip_loopback_address }}'
  policy: 3
  ingress_per_port_policies:
  - port: 80
    rules:
    - remote_policies: [ 1 ]
      l7_proto: "test.lineparser"
  egress_per_port_policies:
  - port: 80
    rules:
    - remote_policies: [ 1 ]
      l7_proto: "test.lineparser"
)EOF";

class CiliumGoLinetesterIntegrationTest : public CiliumTcpIntegrationTest {
public:
  CiliumGoLinetesterIntegrationTest() : CiliumTcpIntegrationTest(fmt::format(TestEnvironment::substitute(cilium_linetester_config_fmt, GetParam()), "true")) {}

  std::string testPolicy() override {
    return TestEnvironment::substitute(TCP_POLICY_LINEPARSER, GetParam());
  }
};

INSTANTIATE_TEST_CASE_P(IpVersions, CiliumGoLinetesterIntegrationTest,
                        testing::ValuesIn(TestEnvironment::getIpVersionsForTest()),
                        TestUtility::ipTestParamsToString);

static FakeRawConnection::ValidatorFunction noMatch(const char* data_to_not_match) {
  return [data_to_not_match](const std::string& data) -> bool {
    auto found = data.find(data_to_not_match);
    return found == std::string::npos;
  };
}

TEST_P(CiliumGoLinetesterIntegrationTest, CiliumGoLineParserUpstreamWritesFirst) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->write("DROP reply direction\n"));
  ASSERT_TRUE(fake_upstream_connection->write("PASS reply direction\n"));
  tcp_client->waitForData("PASS reply direction\n");

  tcp_client->write("PASS original direction\n");
  ASSERT_TRUE(fake_upstream_connection->waitForData(FakeRawConnection::waitForInexactMatch("PASS")));

  ASSERT_TRUE(fake_upstream_connection->write("", true));
  tcp_client->waitForHalfClose();
  tcp_client->write("", true);
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
}

TEST_P(CiliumGoLinetesterIntegrationTest, CiliumGoLineParserPartialLines) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->write("DROP reply "));
  std::this_thread::sleep_for(std::chrono::milliseconds(10));
  ASSERT_TRUE(fake_upstream_connection->write("direction\nPASS"));
  std::this_thread::sleep_for(std::chrono::milliseconds(10));
  ASSERT_TRUE(fake_upstream_connection->write(" reply direction\n"));
  tcp_client->waitForData("PASS reply direction\n");

  tcp_client->write("PASS original direction\n");
  ASSERT_TRUE(fake_upstream_connection->waitForData(FakeRawConnection::waitForInexactMatch("PASS original direction\n")));

  ASSERT_TRUE(fake_upstream_connection->write("", true));
  tcp_client->waitForHalfClose();
  tcp_client->write("", true);
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
}

TEST_P(CiliumGoLinetesterIntegrationTest, CiliumGoLineParserInject) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  tcp_client->write("INJECT reply direction\n");
  tcp_client->write("PASS original direction\n");
  ASSERT_TRUE(fake_upstream_connection->write("PASS reply direction\n"));

  // These can in principle arrive in either order
  tcp_client->waitForData("PASS reply direction\n", false);
  tcp_client->waitForData("INJECT reply direction\n", false);

  ASSERT_TRUE(fake_upstream_connection->waitForData(FakeRawConnection::waitForInexactMatch("PASS original direction\n")));

  ASSERT_TRUE(fake_upstream_connection->write("", true));
  tcp_client->waitForHalfClose();
  tcp_client->write("", true);
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
}

TEST_P(CiliumGoLinetesterIntegrationTest, CiliumGoLineParserInjectPartial) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->write("PASS reply"));
  tcp_client->write("INJECT reply direction\n");
  tcp_client->write("PASS original direction\n");

  ASSERT_TRUE(fake_upstream_connection->write(" direction\n"));

  // These can in principle arrive in either order
  tcp_client->waitForData("PASS reply direction\n", false);
  tcp_client->waitForData("INJECT reply direction\n", false);

  ASSERT_TRUE(fake_upstream_connection->waitForData(FakeRawConnection::waitForInexactMatch("PASS original direction\n")));

  ASSERT_TRUE(fake_upstream_connection->write("", true));
  tcp_client->waitForHalfClose();
  tcp_client->write("", true);
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
}

TEST_P(CiliumGoLinetesterIntegrationTest, CiliumGoLineParserInjectPartialMultiple) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->write("PASS reply"));
  tcp_client->write("INJECT reply direction\n");
  tcp_client->write("DROP original direction\n");
  tcp_client->write("INSERT original direction\n");

  ASSERT_TRUE(fake_upstream_connection->write(" direction\n"));

  // These can in principle arrive in either order
  std::this_thread::sleep_for(std::chrono::milliseconds(10));
  tcp_client->waitForData("PASS reply direction\n", false);
  std::this_thread::sleep_for(std::chrono::milliseconds(10));
  tcp_client->waitForData("INJECT reply direction\n", false);

  ASSERT_TRUE(fake_upstream_connection->waitForData(FakeRawConnection::waitForInexactMatch("INSERT original direction\n")));
  ASSERT_TRUE(fake_upstream_connection->waitForData(noMatch("DROP")));

  ASSERT_TRUE(fake_upstream_connection->write("DROP reply direction\n"));
  ASSERT_TRUE(fake_upstream_connection->write("PASS2 reply direction\n"));
  tcp_client->waitForData("PASS2 reply direction\n", false);
  
  ASSERT_TRUE(fake_upstream_connection->write("", true));
  tcp_client->waitForHalfClose();
  tcp_client->write("", true);
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
}

//
// Cilium Go test parser "blocktester" with TCP proxy
//

// params: is_ingress ("true", "false")
const std::string cilium_blocktester_config_fmt = R"EOF(
admin:
  access_log_path: /dev/null
  address:
    socket_address:
      address: 127.0.0.1
      port_value: 0
static_resources:
  clusters:
  - name: cluster1
    type: ORIGINAL_DST
    lb_policy: CLUSTER_PROVIDED
    connect_timeout:
      seconds: 1
  - name: xds-grpc-cilium
    connect_timeout:
      seconds: 5
    type: STATIC
    lb_policy: ROUND_ROBIN
    http2_protocol_options:
    hosts:
    - pipe:
        path: /var/run/cilium/xds.sock
  listeners:
    name: listener_0
    address:
      socket_address:
        address: 127.0.0.1
        port_value: 0
    listener_filters:
      name: test_bpf_metadata
      config:
        is_ingress: {0}
    filter_chains:
      filters:
      - name: cilium.network
        config:
          proxylib: "proxylib/libcilium.so"
          proxylib_params:
            access-log-path: "{{ test_udsdir }}/access_log.sock"
      - name: envoy.tcp_proxy
        typed_config:
          "@type": type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy
          stat_prefix: tcp_stats
          cluster: cluster1
)EOF";

const std::string TCP_POLICY_BLOCKPARSER = R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicy
  name: '{{ ntop_ip_loopback_address }}'
  policy: 3
  ingress_per_port_policies:
  - port: 80
    rules:
    - remote_policies: [ 1 ]
      l7_proto: "test.blockparser"
  egress_per_port_policies:
  - port: 80
    rules:
    - remote_policies: [ 1 ]
      l7_proto: "test.blockparser"
)EOF";

class CiliumGoBlocktesterIntegrationTest : public CiliumTcpIntegrationTest {
public:
  CiliumGoBlocktesterIntegrationTest() : CiliumTcpIntegrationTest(fmt::format(TestEnvironment::substitute(cilium_blocktester_config_fmt, GetParam()), "true")) {}

  std::string testPolicy() override {
    return TestEnvironment::substitute(TCP_POLICY_BLOCKPARSER, GetParam());
  }
};

INSTANTIATE_TEST_CASE_P(IpVersions, CiliumGoBlocktesterIntegrationTest,
                        testing::ValuesIn(TestEnvironment::getIpVersionsForTest()),
                        TestUtility::ipTestParamsToString);

TEST_P(CiliumGoBlocktesterIntegrationTest, CiliumGoBlockParserUpstreamWritesFirst) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->write("24:DROP reply direction\n"));
  ASSERT_TRUE(fake_upstream_connection->write("24:PASS reply direction\n"));
  tcp_client->waitForData("24:PASS reply direction\n");

  tcp_client->write("27:PASS original direction\n");
  ASSERT_TRUE(fake_upstream_connection->waitForData(FakeRawConnection::waitForInexactMatch("PASS")));

  ASSERT_TRUE(fake_upstream_connection->write("", true));
  tcp_client->waitForHalfClose();
  tcp_client->write("", true);
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
}

TEST_P(CiliumGoBlocktesterIntegrationTest, CiliumGoBlockParserPartialBlocks) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->write("24:DROP reply "));
  ASSERT_TRUE(fake_upstream_connection->write("direction\n24:PASS"));
  ASSERT_TRUE(fake_upstream_connection->write(" reply direction\n"));
  tcp_client->waitForData("24:PASS reply direction\n");

  tcp_client->write("27:PASS original direction\n");
  ASSERT_TRUE(fake_upstream_connection->waitForData(FakeRawConnection::waitForInexactMatch("27:PASS original direction\n")));

  ASSERT_TRUE(fake_upstream_connection->write("", true));
  tcp_client->waitForHalfClose();
  tcp_client->write("", true);
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
}

TEST_P(CiliumGoBlocktesterIntegrationTest, CiliumGoBlockParserInject) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  tcp_client->write("26:INJECT reply direction\n");
  tcp_client->write("27:PASS original direction\n");
  ASSERT_TRUE(fake_upstream_connection->write("24:PASS reply direction\n"));

  // These can in principle arrive in either order
  std::this_thread::sleep_for(std::chrono::milliseconds(10));
  tcp_client->waitForData("24:PASS reply direction\n", false);
  std::this_thread::sleep_for(std::chrono::milliseconds(10));
  tcp_client->waitForData("26:INJECT reply direction\n", false);

  ASSERT_TRUE(fake_upstream_connection->waitForData(FakeRawConnection::waitForInexactMatch("27:PASS original direction\n")));

  ASSERT_TRUE(fake_upstream_connection->write("", true));
  tcp_client->waitForHalfClose();
  tcp_client->write("", true);
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
}

TEST_P(CiliumGoBlocktesterIntegrationTest, CiliumGoBlockParserInjectPartial) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->write("24:PASS reply"));
  tcp_client->write("26:INJECT reply direction\n");
  tcp_client->write("27:PASS original direction\n");

  ASSERT_TRUE(fake_upstream_connection->write(" direction\n"));

  // These can in principle arrive in either order
  tcp_client->waitForData("24:PASS reply direction\n", false);
  tcp_client->waitForData("26:INJECT reply direction\n", false);

  ASSERT_TRUE(fake_upstream_connection->waitForData(FakeRawConnection::waitForInexactMatch("27:PASS original direction\n")));

  ASSERT_TRUE(fake_upstream_connection->write("", true));
  tcp_client->waitForHalfClose();
  tcp_client->write("", true);
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
}

TEST_P(CiliumGoBlocktesterIntegrationTest, CiliumGoBlockParserInjectPartialMultiple) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->write("24:PASS reply"));
  tcp_client->write("26:INJECT reply direction\n");
  tcp_client->write("27:DROP original direction\n");
  tcp_client->write("29:INSERT original direction\n");

  std::this_thread::sleep_for(std::chrono::milliseconds(1000));
  ASSERT_TRUE(fake_upstream_connection->write(" dire"));

  std::this_thread::sleep_for(std::chrono::milliseconds(1000));
  ASSERT_TRUE(fake_upstream_connection->write("ction\n"));

  // These can in principle arrive in either order
  tcp_client->waitForData("24:PASS reply direction\n", false);
  tcp_client->waitForData("26:INJECT reply direction\n", false);

  ASSERT_TRUE(fake_upstream_connection->waitForData(FakeRawConnection::waitForInexactMatch("29:INSERT original direction\n")));
  ASSERT_TRUE(fake_upstream_connection->waitForData(noMatch("DROP")));

  ASSERT_TRUE(fake_upstream_connection->write("24:DROP reply direction\n"));
  ASSERT_TRUE(fake_upstream_connection->write("25:PASS2 reply direction\n"));
  tcp_client->waitForData("25:PASS2 reply direction\n", false);

  ASSERT_TRUE(fake_upstream_connection->write("", true));
  tcp_client->waitForHalfClose();
  tcp_client->write("", true);
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
}

TEST_P(CiliumGoBlocktesterIntegrationTest, CiliumGoBlockParserInjectBufferOverflow) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  tcp_client->write("26:INJECT reply direction\n");
  tcp_client->write("27:DROP original direction\n");

  char buf[5000];
  memset(buf, 'A', sizeof buf);
  strncpy(buf, "5000:INSERT original direction", 30);
  buf[sizeof buf - 1] = '\n';
  
  tcp_client->write(buf);
  tcp_client->waitForData("26:INJECT reply direction\n", false);

  ASSERT_TRUE(fake_upstream_connection->waitForData(FakeRawConnection::waitForInexactMatch(buf)));
  ASSERT_TRUE(fake_upstream_connection->waitForData(noMatch("DROP")));

  ASSERT_TRUE(fake_upstream_connection->write("24:DROP reply direction\n"));
  ASSERT_TRUE(fake_upstream_connection->write("25:PASS2 reply direction\n"));
  tcp_client->waitForData("25:PASS2 reply direction\n", false);

  ASSERT_TRUE(fake_upstream_connection->write("", true));
  tcp_client->waitForHalfClose();
  tcp_client->write("", true);
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
}

namespace Cilium {

extern const absl::string_view pathSV;
extern const absl::string_view methodSV;
extern const absl::string_view authoritySV;
extern const absl::string_view xForwardedProtoSV;

class CiliumTest : public testing::Test {
protected:
  Event::SimulatedTimeSystem time_system_;
  Network::Address::InstanceConstSharedPtr local_address_;
  Network::Address::InstanceConstSharedPtr remote_address_;  
};

TEST_F(CiliumTest, AccessLog) {
  Http::TestHeaderMapImpl headers{
    {":method", "GET"},
      {":path", "/"},
	{":authority", "host"},
	  {"x-forwarded-proto", "http"},
	    {"x-request-id", "ba41267c-cfc2-4a92-ad3e-cd084ab099b4"}};
  NiceMock<StreamInfo::MockStreamInfo> stream_info;
  stream_info.protocol_ = Http::Protocol::Http11;
  stream_info.start_time_ = time_system_.systemTime();
  Network::MockConnection connection;
  Network::Socket::OptionsSharedPtr options = std::make_shared<Network::Socket::Options>();
  options->push_back(std::make_shared<Cilium::SocketOption>(nullptr, nullptr, 1, 173, true, 80, 10000, "1.2.3.4", nullptr));
  local_address_ = std::make_shared<Network::Address::Ipv4Instance>("1.2.3.4", 80);
  remote_address_ = std::make_shared<Network::Address::Ipv4Instance>("5.6.7.8", 45678);

  ENVOY_LOG_MISC(error, "source_address: {}", remote_address_->asString());
  ENVOY_LOG_MISC(error, "destination_address: {}", local_address_->asString());

  EXPECT_CALL(connection, socketOptions()).WillOnce(testing::ReturnRef(options));
  EXPECT_CALL(connection, localAddress()).WillRepeatedly(testing::ReturnRef(local_address_));
  EXPECT_CALL(connection, remoteAddress()).WillRepeatedly(testing::ReturnRef(remote_address_));

  AccessLog::Entry log;

  log.InitFromRequest("1.2.3.4", true, &connection, headers, stream_info);

  EXPECT_EQ(log.entry.is_ingress(), true);
  EXPECT_EQ(log.entry.entry_type(), ::cilium::EntryType::Request);
  EXPECT_NE(log.entry.timestamp(), 0);
  EXPECT_STREQ(log.entry.policy_name().c_str(), "1.2.3.4");
  EXPECT_STREQ("1.2.3.4:80", log.entry.destination_address().c_str());
  EXPECT_STREQ("5.6.7.8:45678", log.entry.source_address().c_str());
  EXPECT_EQ(1, log.entry.source_security_id());
  EXPECT_EQ(173, log.entry.destination_security_id());

  EXPECT_EQ(log.entry.has_http(), true);
  EXPECT_EQ(::cilium::HttpProtocol::HTTP11, log.entry.http().http_protocol());
  EXPECT_STREQ("/", log.entry.http().path().c_str());
  EXPECT_STREQ("GET", log.entry.http().method().c_str());
  EXPECT_STREQ("host", log.entry.http().host().c_str());
  EXPECT_STREQ("http", log.entry.http().scheme().c_str());

  EXPECT_EQ(log.entry.http().headers_size(), 1);
  EXPECT_STREQ(log.entry.http().headers(0).key().c_str(), "x-request-id");
  EXPECT_STREQ(log.entry.http().headers(0).value().c_str(), "ba41267c-cfc2-4a92-ad3e-cd084ab099b4");
}

//
// Cilium filters with TCP proxy & Upstream TLS
//

// params: is_ingress ("true", "false")
const std::string cilium_tls_tcp_proxy_config_fmt = R"EOF(
admin:
  access_log_path: /dev/null
  address:
    socket_address:
      address: 127.0.0.1
      port_value: 0
static_resources:
  clusters:
  - name: tls-cluster
    type: ORIGINAL_DST
    lb_policy: CLUSTER_PROVIDED
    connect_timeout:
      seconds: 1
    transport_socket:
      name: "cilium.tls_wrapper"
  - name: xds-grpc-cilium
    connect_timeout:
      seconds: 5
    type: STATIC
    lb_policy: ROUND_ROBIN
    http2_protocol_options:
    hosts:
    - pipe:
        path: /var/run/cilium/xds.sock
  listeners:
    name: listener_0
    address:
      socket_address:
        address: 127.0.0.1
        port_value: 0
    listener_filters:
    - name: test_bpf_metadata
      config:
        is_ingress: {0}
    filter_chains:
    - filters:
      - name: cilium.network
        config:
          proxylib: "proxylib/libcilium.so"
      - name: envoy.tcp_proxy
        typed_config:
          "@type": type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy
          stat_prefix: tcp_stats
          cluster: tls-cluster
)EOF";

const std::string cilium_listener_tls_context_fmt = R"EOF(
      transport_socket:
        name: "cilium.tls_wrapper"
)EOF";

Network::TransportSocketFactoryPtr
createClientSslTransportSocketFactory(Ssl::ContextManager& context_manager, Api::Api& api) {
  std::string yaml_plain = R"EOF(
  common_tls_context:
    validation_context:
      trusted_ca:
        filename: "{{ test_rundir }}/test/config/integration/certs/cacert.pem"
)EOF";

  envoy::api::v2::auth::UpstreamTlsContext tls_context;
  TestUtility::loadFromYaml(TestEnvironment::substitute(yaml_plain), tls_context);

  NiceMock<Server::Configuration::MockTransportSocketFactoryContext> mock_factory_ctx;
  ON_CALL(mock_factory_ctx, api()).WillByDefault(testing::ReturnRef(api));
  auto cfg = std::make_unique<Extensions::TransportSockets::Tls::ClientContextConfigImpl>(
      tls_context, "", mock_factory_ctx);
  static auto* client_stats_store = new Stats::TestIsolatedStoreImpl();
  return Network::TransportSocketFactoryPtr{
      new Extensions::TransportSockets::Tls::ClientSslSocketFactory(std::move(cfg), context_manager,
                                                                    *client_stats_store)};
}

class CiliumTLSIntegrationTest : public CiliumTcpIntegrationTest {
public:
  CiliumTLSIntegrationTest(const std::string& config)
    : CiliumTcpIntegrationTest(config) {
    for (Logger::Logger& logger : Logger::Registry::loggers()) {
      logger.setLevel(spdlog::level::trace);
    }
  }

  void initialize() override {
    CiliumTcpIntegrationTest::initialize();

    payload_reader_.reset(new WaitForPayloadReader(*dispatcher_));
  }

  void createUpstreams() override {
    if (upstream_tls_) {
      fake_upstreams_.emplace_back(new FakeUpstream(
          createUpstreamSslContext(), 0, FakeHttpConnection::Type::HTTP1, version_, timeSystem(),
          true));
    } else {
      CiliumTcpIntegrationTest::createUpstreams(); // maybe BaseIntegrationTest::createUpstreams()
    }
  }

  void TearDown() override {
    CiliumTcpIntegrationTest::TearDown();
  }

  // TODO(mattklein123): This logic is duplicated in various places. Cleanup in a follow up.
  Network::TransportSocketFactoryPtr createUpstreamSslContext() {
    envoy::api::v2::auth::DownstreamTlsContext tls_context;
    auto* common_tls_context = tls_context.mutable_common_tls_context();
    auto* tls_cert = common_tls_context->add_tls_certificates();
    tls_cert->mutable_certificate_chain()->set_filename(TestEnvironment::runfilesPath(
        fmt::format("test/config/integration/certs/{}cert.pem", upstream_cert_name_)));
    tls_cert->mutable_private_key()->set_filename(TestEnvironment::runfilesPath(
        fmt::format("test/config/integration/certs/{}key.pem", upstream_cert_name_)));

    auto cfg = std::make_unique<Extensions::TransportSockets::Tls::ServerContextConfigImpl>(
        tls_context, factory_context_);

    static Stats::Scope* upstream_stats_store = new Stats::IsolatedStoreImpl();
    return std::make_unique<Extensions::TransportSockets::Tls::ServerSslSocketFactory>(
        std::move(cfg), context_manager_, *upstream_stats_store, std::vector<std::string>{});
  }

  void setupConnections() {
    initialize();
    fake_upstreams_[0]->setReadDisableOnNewConnection(false);

    // Set up the mock buffer factory so the newly created SSL client will have a mock write
    // buffer. This allows us to track the bytes actually written to the socket.

    EXPECT_CALL(*mock_buffer_factory_, create_(_, _))
        .Times(1)
        .WillOnce(Invoke([&](std::function<void()> below_low,
                             std::function<void()> above_high) -> Buffer::Instance* {
          client_write_buffer_ = new NiceMock<MockWatermarkBuffer>(below_low, above_high);
          ON_CALL(*client_write_buffer_, move(_))
              .WillByDefault(Invoke(client_write_buffer_, &MockWatermarkBuffer::baseMove));
          ON_CALL(*client_write_buffer_, drain(_))
              .WillByDefault(Invoke(client_write_buffer_, &MockWatermarkBuffer::trackDrains));
          return client_write_buffer_;
        }));
    // Set up the SSL client.
    Network::Address::InstanceConstSharedPtr address =
        Ssl::getSslAddress(version_, lookupPort("tcp_proxy"));
    context_ = createClientSslTransportSocketFactory(context_manager_, *api_);
    ssl_client_ =
        dispatcher_->createClientConnection(address, Network::Address::InstanceConstSharedPtr(),
                                            context_->createTransportSocket(nullptr), nullptr);

    // Perform the SSL handshake. Loopback is whitelisted in tcp_proxy.json for the ssl_auth
    // filter so there will be no pause waiting on auth data.
    ssl_client_->addConnectionCallbacks(connect_callbacks_);
    ssl_client_->enableHalfClose(true);
    ssl_client_->addReadFilter(payload_reader_);
    ssl_client_->connect();
    while (!connect_callbacks_.connected()) {
      dispatcher_->run(Event::Dispatcher::RunType::NonBlock);
    }
  }

  // Test proxying data in both directions with envoy doing TCP and TLS
  // termination.
  void sendAndReceiveTlsData(const std::string& data_to_send_upstream,
                             const std::string& data_to_send_downstream) {
    FakeRawConnectionPtr fake_upstream_connection;
    AssertionResult result = fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection);
    RELEASE_ASSERT(result, result.message());

    // Ship some data upstream.
    Buffer::OwnedImpl buffer(data_to_send_upstream);
    ssl_client_->write(buffer, false);
    while (client_write_buffer_->bytes_drained() != data_to_send_upstream.size()) {
      dispatcher_->run(Event::Dispatcher::RunType::NonBlock);
    }

    // Make sure the data makes it upstream.
    ASSERT_TRUE(fake_upstream_connection->waitForData(data_to_send_upstream.size()));

    // Now send data downstream and make sure it arrives.
    ASSERT_TRUE(fake_upstream_connection->write(data_to_send_downstream));
    payload_reader_->set_data_to_wait_for(data_to_send_downstream);
    ssl_client_->dispatcher().run(Event::Dispatcher::RunType::Block);

    // Clean up.
    Buffer::OwnedImpl empty_buffer;
    ssl_client_->write(empty_buffer, true);
    dispatcher_->run(Event::Dispatcher::RunType::NonBlock);
    ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
    ASSERT_TRUE(fake_upstream_connection->write("", true));
    ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
    ssl_client_->dispatcher().run(Event::Dispatcher::RunType::Block);
    EXPECT_TRUE(payload_reader_->readLastByte());
    EXPECT_TRUE(connect_callbacks_.closed());
  }

  // Upstream
  bool upstream_tls_{true};
  std::string upstream_cert_name_{"upstreamlocalhost"};

  // Downstream
  std::shared_ptr<WaitForPayloadReader> payload_reader_;
  MockWatermarkBuffer* client_write_buffer_;
  Network::TransportSocketFactoryPtr context_;
  Network::ClientConnectionPtr ssl_client_;
  ConnectionStatusCallbacks connect_callbacks_;
};

const std::string TCP_POLICY_UPSTREAM_TLS = R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicy
  name: '{{ ntop_ip_loopback_address }}'
  policy: 3
  ingress_per_port_policies:
  - port: 80
    rules:
    - remote_policies: [ 1 ]
      upstream_tls_context:
        trusted_ca: "-----BEGIN CERTIFICATE-----\nMIID7zCCAtegAwIBAgIUQygBeIE4nv9JGaDKixnhwkK5viEwDQYJKoZIhvcNAQEL\nBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM\nDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBEx5ZnQxGTAXBgNVBAsMEEx5ZnQgRW5n\naW5lZXJpbmcxGTAXBgNVBAMMEFRlc3QgVXBzdHJlYW0gQ0EwHhcNMTkwNzA4MjE0\nNTU2WhcNMjEwNzA3MjE0NTU2WjB/MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2Fs\naWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwETHlmdDEZ\nMBcGA1UECwwQTHlmdCBFbmdpbmVlcmluZzEZMBcGA1UEAwwQVGVzdCBVcHN0cmVh\nbSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMJ7AetbhOCUxB/A\nyYt+4rxyMVUFX9izqbOU9nuUxsB/avGhYpVjj5cNaLPdGX+c7g65Vz0yGDSskDGD\nukcSFqRSZ2E4/S4gKSIMEslBr2OX+Dqh0XmoAwl4IrtZefCE3inivJdzm0JwI7Yr\nk2qQqsTpJnsWkMSxXUQJYTJ56UFXTkKqF3jSReIQtFMV65T/2x2NLRJ8KuMS7Mbo\nBTBATRsUfbJJWCnzcp2LrKV5sZ/HsJLK/F74jdcvfJQMW49Lq1TZaB5NYSVyFEf6\ntiT43JOcvVkRPBgHDtaiDhWF2WTmPSEB6cHaRwGgBFwjQ1SvZR6f6xexocn44GZE\noSqWJN8CAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw\nHQYDVR0OBBYEFOLTMLryzNAcuxe3cKEhClkL7IduMB8GA1UdIwQYMBaAFOLTMLry\nzNAcuxe3cKEhClkL7IduMA0GCSqGSIb3DQEBCwUAA4IBAQBT88sT8RsoAk6PnnVs\nKWBoC75BnIZr8o1nxBK0zog6Ez4J32aVzEXPicgBg6hf6v77eqbbQ+O7Ayf+YQWj\nl9w9IiXRW1x94tKBrX44O85qTr/xtkfpmQWGKq5fBpdJnZp7lSfGfaG9gasPUNpG\ngfvF/vlYrrJoyvUOG6HQjZ7n7m6f8GEUymCtC68oJcLVL0xkvx/jcvGeJfI5U6yr\nz9nc1W7FcOhrFEetOIH2BwlIN5To3vPbN4zEzt9VPUHZ3m2899hUiMZJaanEexp7\nTZJJ12rHSIJ4MKwQQ5fEmioeluM0uY7EIR72VEsudA8bkXSkbDGs6Q49K9OX+nRB\n4P3c\n-----END CERTIFICATE-----\n"
      downstream_tls_context:
        certificate_chain: "-----BEGIN CERTIFICATE-----\nMIIEYTCCA0mgAwIBAgIJAILStmLgUUcVMA0GCSqGSIb3DQEBCwUAMHYxCzAJBgNV\nBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1TYW4gRnJhbmNp\nc2NvMQ0wCwYDVQQKDARMeWZ0MRkwFwYDVQQLDBBMeWZ0IEVuZ2luZWVyaW5nMRAw\nDgYDVQQDDAdUZXN0IENBMB4XDTE4MTIxNzIwMTgwMFoXDTIwMTIxNjIwMTgwMFow\ngaYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1T\nYW4gRnJhbmNpc2NvMQ0wCwYDVQQKDARMeWZ0MRkwFwYDVQQLDBBMeWZ0IEVuZ2lu\nZWVyaW5nMRowGAYDVQQDDBFUZXN0IEJhY2tlbmQgVGVhbTEkMCIGCSqGSIb3DQEJ\nARYVYmFja2VuZC10ZWFtQGx5ZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A\nMIIBCgKCAQEAuvPdQdmwZongPAgQho/Vipd3PZWrQ6BKxIb4l/RvqtVP321IUTLs\n4vVwpXoYJ+12L+XOO3jCInszs53tHjFpTI1GE8/sasmgR6LRr2krwSoVRHPqUoc9\ntzkDG1SzKP2TRTi1MTI3FO+TnLFahntO9Zstxhv1Epz5GZ/xQLE0/LLoRYzcynL/\niflk18iL1KM8i0Hy4cKjclOaUdnh2nh753iJfxCSb5wJfx4FH1qverYHHT6FopYR\nV40Cg0yYXcYo8yNwrg+EBY8QAT2JOMDokXNKbZpmVKiBlh0QYMX6BBiW249v3sYl\n3Ve+fZvCkle3W0xP0xJw8PdX0NRbvGOrBQIDAQABo4HAMIG9MAwGA1UdEwEB/wQC\nMAAwCwYDVR0PBAQDAgXgMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATBB\nBgNVHREEOjA4hh5zcGlmZmU6Ly9seWZ0LmNvbS9iYWNrZW5kLXRlYW2CCGx5ZnQu\nY29tggx3d3cubHlmdC5jb20wHQYDVR0OBBYEFLHmMm0DV9jCHJSWVRwyPYpBw62r\nMB8GA1UdIwQYMBaAFBQz1vaSbPuePL++7GTMqLAMtk3kMA0GCSqGSIb3DQEBCwUA\nA4IBAQAwx3/M2o00W8GlQ3OT4y/hQGb5K2aytxx8QeSmJaaZTJbvaHhe0x3/fLgq\nuWrW3WEWFtwasilySjOrFOtB9UNmJmNOHSJD3Bslbv5htRaWnoFPCXdwZtVMdoTq\nIHIQqLoos/xj3kVD5sJSYySrveMeKaeUILTkb5ZubSivye1X2yiJLR7AtuwuiMio\nCdIOqhn6xJqYhT7z0IhdKpLNPk4w1tBZSKOXqzrXS4uoJgTC67hWslWWZ2VC6IvZ\nFmKuuGZamCCj6F1QF2IjMVM8evl84hEnN0ajdkA/QWnil9kcWvBm15Ho+oTvvJ7s\nM8MD3RDSq/90FSiME4vbyNEyTmj0\n-----END CERTIFICATE-----\n"
        private_key: "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAuvPdQdmwZongPAgQho/Vipd3PZWrQ6BKxIb4l/RvqtVP321I\nUTLs4vVwpXoYJ+12L+XOO3jCInszs53tHjFpTI1GE8/sasmgR6LRr2krwSoVRHPq\nUoc9tzkDG1SzKP2TRTi1MTI3FO+TnLFahntO9Zstxhv1Epz5GZ/xQLE0/LLoRYzc\nynL/iflk18iL1KM8i0Hy4cKjclOaUdnh2nh753iJfxCSb5wJfx4FH1qverYHHT6F\nopYRV40Cg0yYXcYo8yNwrg+EBY8QAT2JOMDokXNKbZpmVKiBlh0QYMX6BBiW249v\n3sYl3Ve+fZvCkle3W0xP0xJw8PdX0NRbvGOrBQIDAQABAoIBAQCkPLR1sy47BokN\nc/BApn9sn5/LZH7ujBTjDce6hqzLIVZn6/OKEfj1cbWiSd6KxRv8/B/vMykpbZ5/\n/w9eZP4imEGmChWhwruh8zHOrdAYhEXmuwZxtgnLurQ2AHTcX9hPCYB0Va76H3ZI\nQ65JUm6NaeQOlGT6ExjrIA2rTYJFM84I1xH3XbDulS9S2FXNP9RIjV70HzvZw2LR\n1qSNfrnGAEbUCdrZT4BAYTGam5L061ofencYLAorr8K0eVWhUjGV9Jjpq8aG8zy5\nOy1070I0d7Iexfu7T1sQDIqpNkOtQxI8feQEKeKlRKYx6YEQ9vaVwBGa0SBVxQem\nE3YdXBnBAoGBAORlz8wlYqCx25htO/eLgr9hN+eKNhNTo4l905aZrG8SPinaHl15\nn+dQdzlJMVm/rh5+VE0NR0U/vzd3SrdnzczksuGFn0Us/Yg+zOl1+8+GFAtqw3js\nudFLKksChz4Rk/fZo2djtSiFS5aGBtw0Z9T7eorubkTSSfJ7IT99HIu5AoGBANGL\n0ff5U2LV/Y/opKP7xOlxSCVI617N5i0sYMJ9EUaWzvquidzM46T4fwlAeIvAtks7\nACO1cRPuWredZ/gEZ3RguZMxs6llwxwVCaQk/2vbOfATWmyqpGC9UBS/TpYVXbL5\nWUMsdBs4DdAFz8aCrrFBcDeCg4V4w+gHYkFV+LetAoGAB3Ny1fwaPZfPzCc0H51D\nhK7NPhZ6MSM3YJLkRjN5Np5nvMHK383J86fiW9IRdBYWvhPs+B6Ixq+Ps2WG4HjY\nc+i6FTVgvsb69mjmEm+w6VI8cSroeZdvcG59ULkiZFn6c8l71TGhhVLj5mM08hYb\nlQ0nMEUa/8/Ebc6qhQG13rECgYEAm8AZaP9hA22a8oQxG9HfIsSYo1331JemJp19\nrhHX7WfaoGlq/zsrWUt64R2SfA3ZcUGBcQlD61SXCTNuO+LKIq5iQQ4IRDjnNNBO\nQjtdvoVMIy2/YFXVqDIOe91WRCfNZWIA/vTjt/eKDLzFGv+3aPkCt7/CkkqZErWq\nSnXkUGECgYAvkemYu01V1WcJotvLKkVG68jwjMq7jURpbn8oQVlFR8zEh+2UipLB\nOmrNZjmdrhQe+4rzs9XCLE/EZsn7SsygwMyVhgCYzWc/SswADq7Wdbigpmrs+grW\nfg7yxbPGinTyraMd0x3Ty924LLscoJMWUBl7qGeQ2iUdnELmZgLN2Q==\n-----END RSA PRIVATE KEY-----\n"
  egress_per_port_policies:
  - port: 80
    rules:
    - remote_policies: [ 1 ]
)EOF";

class CiliumTLSProxyIntegrationTest : public CiliumTLSIntegrationTest {
public:
  CiliumTLSProxyIntegrationTest() : CiliumTLSIntegrationTest(fmt::format(TestEnvironment::substitute(cilium_tls_tcp_proxy_config_fmt, GetParam()), "true")) {}

  std::string testPolicy() override {
    return TestEnvironment::substitute(TCP_POLICY_UPSTREAM_TLS, GetParam());
  }
};

INSTANTIATE_TEST_CASE_P(IpVersions, CiliumTLSProxyIntegrationTest,
                        testing::ValuesIn(TestEnvironment::getIpVersionsForTest()),
                        TestUtility::ipTestParamsToString);

// Test upstream writing before downstream does.
TEST_P(CiliumTLSProxyIntegrationTest, CiliumTLSProxyUpstreamWritesFirst) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));

  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->write("hello"));
  tcp_client->waitForData("hello");

  tcp_client->write("hello");
  ASSERT_TRUE(fake_upstream_connection->waitForData(5));

  ASSERT_TRUE(fake_upstream_connection->write("", true));
  tcp_client->waitForHalfClose();
  tcp_client->write("", true);
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
}

// Test proxying data in both directions, and that all data is flushed properly
// when there is an upstream disconnect.
TEST_P(CiliumTLSProxyIntegrationTest, CiliumTLSProxyUpstreamDisconnect) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  tcp_client->write("hello");

  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->waitForData(5));
  ASSERT_TRUE(fake_upstream_connection->write("world"));
  ASSERT_TRUE(fake_upstream_connection->close());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
  tcp_client->waitForHalfClose();
  tcp_client->close();

  EXPECT_EQ("world", tcp_client->data());
}

// Test proxying data in both directions, and that all data is flushed properly
// when the client disconnects.
TEST_P(CiliumTLSProxyIntegrationTest, CiliumTcpProxyDownstreamDisconnect) {
  initialize();
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  tcp_client->write("hello");

  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->waitForData(5));
  ASSERT_TRUE(fake_upstream_connection->write("world"));
  tcp_client->waitForData("world");
  tcp_client->write("hello", true);
  ASSERT_TRUE(fake_upstream_connection->waitForData(10));
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->write("", true));
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect(true));
  tcp_client->waitForDisconnect();
}

TEST_P(CiliumTLSProxyIntegrationTest, CiliumTLSProxyLargeWrite) {
  config_helper_.setBufferLimits(1024, 1024);
  initialize();

  std::string data(1024 * 16, 'a');
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));
  tcp_client->write(data);

  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  ASSERT_TRUE(fake_upstream_connection->waitForData(data.size()));
  ASSERT_TRUE(fake_upstream_connection->write(data));
  tcp_client->waitForData(data);
  tcp_client->close();
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->close());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());

  uint32_t upstream_pauses =
      test_server_->counter("cluster.tls-cluster.upstream_flow_control_paused_reading_total")
          ->value();
  uint32_t upstream_resumes =
      test_server_->counter("cluster.tls-cluster.upstream_flow_control_resumed_reading_total")
          ->value();
  EXPECT_EQ(upstream_pauses, upstream_resumes);

  uint32_t downstream_pauses =
      test_server_->counter("tcp.tcp_stats.downstream_flow_control_paused_reading_total")->value();
  uint32_t downstream_resumes =
      test_server_->counter("tcp.tcp_stats.downstream_flow_control_resumed_reading_total")->value();
  EXPECT_EQ(downstream_pauses, downstream_resumes);
}

// Test that a downstream flush works correctly (all data is flushed)
TEST_P(CiliumTLSProxyIntegrationTest, CiliumTLSProxyDownstreamFlush) {
  // Use a very large size to make sure it is larger than the kernel socket read buffer.
  const uint32_t size = 50 * 1024 * 1024;
  config_helper_.setBufferLimits(size / 4, size / 4);
  initialize();

  std::string data(size, 'a');
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));

  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  tcp_client->readDisable(true);
  tcp_client->write("", true);

  // This ensures that readDisable(true) has been run on it's thread
  // before tcp_client starts writing.
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());

  ASSERT_TRUE(fake_upstream_connection->write(data, true));

  test_server_->waitForCounterGe("cluster.tls-cluster.upstream_flow_control_paused_reading_total", 1);
  EXPECT_EQ(test_server_->counter("cluster.tls-cluster.upstream_flow_control_resumed_reading_total")
                ->value(),
            0);
  tcp_client->readDisable(false);
  tcp_client->waitForData(data);
  tcp_client->waitForHalfClose();
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());

  uint32_t upstream_pauses =
      test_server_->counter("cluster.tls-cluster.upstream_flow_control_paused_reading_total")
          ->value();
  uint32_t upstream_resumes =
      test_server_->counter("cluster.tls-cluster.upstream_flow_control_resumed_reading_total")
          ->value();
  EXPECT_GE(upstream_pauses, upstream_resumes);
  EXPECT_GT(upstream_resumes, 0);
}

// Test that an upstream flush works correctly (all data is flushed)
TEST_P(CiliumTLSProxyIntegrationTest, CiliumTLSProxyUpstreamFlush) {
  // Use a very large size to make sure it is larger than the kernel socket read buffer.
  const uint32_t size = 50 * 1024 * 1024;
  config_helper_.setBufferLimits(size, size);
  initialize();

  std::string data(size, 'a');
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));

  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  // Disabling read does not let the TLS handshake to finish. We should be able to wait for
  // ConnectionEvent::Connected, which is raised after the TLS handshake has completed,
  // but just wait for a while instead for now.
  usleep(10000);

  ASSERT_TRUE(fake_upstream_connection->readDisable(true));
  ASSERT_TRUE(fake_upstream_connection->write("", true));

  // This ensures that fake_upstream_connection->readDisable has been run on it's thread
  // before tcp_client starts writing.
  tcp_client->waitForHalfClose();

  tcp_client->write(data, true);

  test_server_->waitForGaugeEq("tcp.tcp_stats.upstream_flush_active", 1);
  ASSERT_TRUE(fake_upstream_connection->readDisable(false));
  ASSERT_TRUE(fake_upstream_connection->waitForData(data.size()));
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());

  tcp_client->waitForHalfClose();

  EXPECT_EQ(test_server_->counter("tcp.tcp_stats.upstream_flush_total")->value(), 1);
  EXPECT_EQ(test_server_->gauge("tcp.tcp_stats.upstream_flush_active")->value(), 0);
}

// Test that Envoy doesn't crash or assert when shutting down with an upstream flush active
TEST_P(CiliumTLSProxyIntegrationTest, CiliumTLSProxyUpstreamFlushEnvoyExit) {
  // Use a very large size to make sure it is larger than the kernel socket read buffer.
  const uint32_t size = 50 * 1024 * 1024;
  config_helper_.setBufferLimits(size, size);
  initialize();

  std::string data(size, 'a');
  IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));

  FakeRawConnectionPtr fake_upstream_connection;
  ASSERT_TRUE(fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection));

  // Disabling read does not let the TLS handshake to finish. We should be able to wait for
  // ConnectionEvent::Connected, which is raised after the TLS handshake has completed,
  // but just wait for a while instead for now.
  usleep(10000);

  ASSERT_TRUE(fake_upstream_connection->readDisable(true));
  ASSERT_TRUE(fake_upstream_connection->write("", true));

  // This ensures that fake_upstream_connection->readDisable has been run on it's thread
  // before tcp_client starts writing.
  tcp_client->waitForHalfClose();

  tcp_client->write(data, true);

  test_server_->waitForGaugeEq("tcp.tcp_stats.upstream_flush_active", 1);
  test_server_.reset();
  ASSERT_TRUE(fake_upstream_connection->close());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());

  // Success criteria is that no ASSERTs fire and there are no leaks.
}

//
// Cilium filters with TCP proxy & Upstream TLS
//

// params: is_ingress ("true", "false")
const std::string cilium_tls_downstream_tcp_proxy_config_fmt = R"EOF(
admin:
  access_log_path: /dev/null
  address:
    socket_address:
      address: 127.0.0.1
      port_value: 0
static_resources:
  clusters:
  - name: tls-cluster
    type: ORIGINAL_DST
    lb_policy: CLUSTER_PROVIDED
    connect_timeout:
      seconds: 1
    transport_socket:
      name: "cilium.tls_wrapper"
  - name: xds-grpc-cilium
    connect_timeout:
      seconds: 5
    type: STATIC
    lb_policy: ROUND_ROBIN
    http2_protocol_options:
    hosts:
    - pipe:
        path: /var/run/cilium/xds.sock
  listeners:
    name: listener_0
    address:
      socket_address:
        address: 127.0.0.1
        port_value: 0
    listener_filters:
    - name: test_bpf_metadata
      config:
        is_ingress: {0}
    - name: "envoy.listener.tls_inspector"
    filter_chains:
    - filters:
      - name: cilium.network
        config:
          proxylib: "proxylib/libcilium.so"
      - name: envoy.tcp_proxy
        typed_config:
          "@type": type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy
          stat_prefix: tcp_stats
          cluster: tls-cluster
    - filter_chain_match:
        transport_protocol: "tls"
      transport_socket:
        name: "cilium.tls_wrapper"
      filters:
      - name: cilium.network
        config:
          proxylib: "proxylib/libcilium.so"
      - name: envoy.tcp_proxy
        typed_config:
          "@type": type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy
          stat_prefix: tcp_stats
          cluster: tls-cluster
)EOF";

class CiliumDownstreamTLSIntegrationTest : public CiliumTLSIntegrationTest {
public:
  CiliumDownstreamTLSIntegrationTest() : CiliumTLSIntegrationTest(fmt::format(TestEnvironment::substitute(cilium_tls_downstream_tcp_proxy_config_fmt, GetParam()), "true")) {}

  std::string testPolicy() override {
    return TestEnvironment::substitute(TCP_POLICY_UPSTREAM_TLS, GetParam());
  }
};

INSTANTIATE_TEST_CASE_P(IpVersions, CiliumDownstreamTLSIntegrationTest,
                        testing::ValuesIn(TestEnvironment::getIpVersionsForTest()),
                        TestUtility::ipTestParamsToString);

TEST_P(CiliumDownstreamTLSIntegrationTest, SendTlsToTlsListener) {
  setupConnections();
  sendAndReceiveTlsData("hello", "world");
}

TEST_P(CiliumDownstreamTLSIntegrationTest, LargeBidirectionalTlsWrites) {
  setupConnections();
  std::string large_data(1024 * 8, 'a');
  sendAndReceiveTlsData(large_data, large_data);
}

// Test that a half-close on the downstream side is proxied correctly.
TEST_P(CiliumDownstreamTLSIntegrationTest, DownstreamHalfClose) {
  setupConnections();

  FakeRawConnectionPtr fake_upstream_connection;
  AssertionResult result = fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection);
  RELEASE_ASSERT(result, result.message());

  Buffer::OwnedImpl empty_buffer;
  ssl_client_->write(empty_buffer, true);
  dispatcher_->run(Event::Dispatcher::RunType::NonBlock);
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());

  const std::string data("data");
  ASSERT_TRUE(fake_upstream_connection->write(data, false));
  payload_reader_->set_data_to_wait_for(data);
  ssl_client_->dispatcher().run(Event::Dispatcher::RunType::Block);
  EXPECT_FALSE(payload_reader_->readLastByte());

  ASSERT_TRUE(fake_upstream_connection->write("", true));
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
  ssl_client_->dispatcher().run(Event::Dispatcher::RunType::Block);
  EXPECT_TRUE(payload_reader_->readLastByte());
  EXPECT_TRUE(connect_callbacks_.closed());
}

// Test that a half-close on the upstream side is proxied correctly.
TEST_P(CiliumDownstreamTLSIntegrationTest, UpstreamHalfClose) {
  setupConnections();

  FakeRawConnectionPtr fake_upstream_connection;
  AssertionResult result = fake_upstreams_[0]->waitForRawConnection(fake_upstream_connection);
  RELEASE_ASSERT(result, result.message());

  ASSERT_TRUE(fake_upstream_connection->write("", true));
  ssl_client_->dispatcher().run(Event::Dispatcher::RunType::Block);
  EXPECT_TRUE(payload_reader_->readLastByte());
  EXPECT_FALSE(connect_callbacks_.closed());

  const std::string& val("data");
  Buffer::OwnedImpl buffer(val);
  ssl_client_->write(buffer, false);
  while (client_write_buffer_->bytes_drained() != val.size()) {
    dispatcher_->run(Event::Dispatcher::RunType::NonBlock);
  }
  ASSERT_TRUE(fake_upstream_connection->waitForData(val.size()));

  Buffer::OwnedImpl empty_buffer;
  ssl_client_->write(empty_buffer, true);
  while (!connect_callbacks_.closed()) {
    dispatcher_->run(Event::Dispatcher::RunType::NonBlock);
  }
  ASSERT_TRUE(fake_upstream_connection->waitForHalfClose());
  ASSERT_TRUE(fake_upstream_connection->waitForDisconnect());
}

//
// Cilium filters with HTTP proxy & Downstream/Upstream TLS
//

// params: is_ingress ("true", "false")
const std::string cilium_tls_http_proxy_config_fmt = R"EOF(
admin:
  access_log_path: /dev/null
  address:
    socket_address:
      address: 127.0.0.1
      port_value: 0
static_resources:
  clusters:
  - name: cluster1
    type: ORIGINAL_DST
    lb_policy: CLUSTER_PROVIDED
    connect_timeout:
      seconds: 1
  - name: tls-cluster
    type: ORIGINAL_DST
    lb_policy: CLUSTER_PROVIDED
    connect_timeout:
      seconds: 1
    transport_socket:
      name: "cilium.tls_wrapper"
  - name: xds-grpc-cilium
    connect_timeout:
      seconds: 5
    type: STATIC
    lb_policy: ROUND_ROBIN
    http2_protocol_options:
    hosts:
    - pipe:
        path: /var/run/cilium/xds.sock
  listeners:
    name: http
    address:
      socket_address:
        address: 127.0.0.1
        port_value: 0
    listener_filters:
    - name: test_bpf_metadata
      config:
        is_ingress: {0}
    filter_chains:
    - filters:
      - name: cilium.network
      - name: envoy.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
          stat_prefix: config_test
          codec_type: auto
          http_filters:
          - name: test_l7policy
            config:
              access_log_path: "{{ test_udsdir }}/access_log.sock"
          - name: envoy.router
          route_config:
            name: policy_enabled
            virtual_hosts:
              name: integration
              domains: "*"
              routes:
              - route:
                  cluster: cluster1
                  max_grpc_timeout:
                    seconds: 0
                    nanos: 0
                match:
                  prefix: "/"
    - filter_chain_match:
        transport_protocol: "cilium:default"
        server_names: [ "localhost" ]
      filters:
      - name: cilium.network
      - name: envoy.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
          stat_prefix: config_test
          codec_type: auto
          http_filters:
          - name: test_l7policy
            config:
              access_log_path: "{{ test_udsdir }}/access_log.sock"
          - name: envoy.router
          route_config:
            name: policy_enabled
            virtual_hosts:
              name: integration
              require_tls: ALL
              domains: "*"
              routes:
              - route:
                  cluster: tls-cluster
                  max_grpc_timeout:
                    seconds: 0
                    nanos: 0
                match:
                  prefix: "/"
)EOF";

const std::string BASIC_TLS_POLICY = R"EOF(version_info: "0"
resources:
- "@type": type.googleapis.com/cilium.NetworkPolicy
  name: '{{ ntop_ip_loopback_address }}'
  policy: 3
  ingress_per_port_policies:
  - port: 80
    rules:
    - remote_policies: [ 1 ]
      http_rules:
        http_rules:
        - headers: [ { name: ':path', exact_match: '/allowed' } ]
        - headers: [ { name: ':path', regex_match: '.*public$' } ]
        - headers: [ { name: ':authority', exact_match: 'allowedHOST' } ]
        - headers: [ { name: ':authority', regex_match: '.*REGEX.*' } ]
        - headers: [ { name: ':method', exact_match: 'PUT' }, { name: ':path', exact_match: '/public/opinions' } ]
      upstream_tls_context:
        trusted_ca: "-----BEGIN CERTIFICATE-----\nMIID7zCCAtegAwIBAgIUQygBeIE4nv9JGaDKixnhwkK5viEwDQYJKoZIhvcNAQEL\nBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM\nDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBEx5ZnQxGTAXBgNVBAsMEEx5ZnQgRW5n\naW5lZXJpbmcxGTAXBgNVBAMMEFRlc3QgVXBzdHJlYW0gQ0EwHhcNMTkwNzA4MjE0\nNTU2WhcNMjEwNzA3MjE0NTU2WjB/MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2Fs\naWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwETHlmdDEZ\nMBcGA1UECwwQTHlmdCBFbmdpbmVlcmluZzEZMBcGA1UEAwwQVGVzdCBVcHN0cmVh\nbSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMJ7AetbhOCUxB/A\nyYt+4rxyMVUFX9izqbOU9nuUxsB/avGhYpVjj5cNaLPdGX+c7g65Vz0yGDSskDGD\nukcSFqRSZ2E4/S4gKSIMEslBr2OX+Dqh0XmoAwl4IrtZefCE3inivJdzm0JwI7Yr\nk2qQqsTpJnsWkMSxXUQJYTJ56UFXTkKqF3jSReIQtFMV65T/2x2NLRJ8KuMS7Mbo\nBTBATRsUfbJJWCnzcp2LrKV5sZ/HsJLK/F74jdcvfJQMW49Lq1TZaB5NYSVyFEf6\ntiT43JOcvVkRPBgHDtaiDhWF2WTmPSEB6cHaRwGgBFwjQ1SvZR6f6xexocn44GZE\noSqWJN8CAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw\nHQYDVR0OBBYEFOLTMLryzNAcuxe3cKEhClkL7IduMB8GA1UdIwQYMBaAFOLTMLry\nzNAcuxe3cKEhClkL7IduMA0GCSqGSIb3DQEBCwUAA4IBAQBT88sT8RsoAk6PnnVs\nKWBoC75BnIZr8o1nxBK0zog6Ez4J32aVzEXPicgBg6hf6v77eqbbQ+O7Ayf+YQWj\nl9w9IiXRW1x94tKBrX44O85qTr/xtkfpmQWGKq5fBpdJnZp7lSfGfaG9gasPUNpG\ngfvF/vlYrrJoyvUOG6HQjZ7n7m6f8GEUymCtC68oJcLVL0xkvx/jcvGeJfI5U6yr\nz9nc1W7FcOhrFEetOIH2BwlIN5To3vPbN4zEzt9VPUHZ3m2899hUiMZJaanEexp7\nTZJJ12rHSIJ4MKwQQ5fEmioeluM0uY7EIR72VEsudA8bkXSkbDGs6Q49K9OX+nRB\n4P3c\n-----END CERTIFICATE-----\n"
      downstream_tls_context:
        certificate_chain: "-----BEGIN CERTIFICATE-----\nMIIEYTCCA0mgAwIBAgIJAILStmLgUUcVMA0GCSqGSIb3DQEBCwUAMHYxCzAJBgNV\nBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1TYW4gRnJhbmNp\nc2NvMQ0wCwYDVQQKDARMeWZ0MRkwFwYDVQQLDBBMeWZ0IEVuZ2luZWVyaW5nMRAw\nDgYDVQQDDAdUZXN0IENBMB4XDTE4MTIxNzIwMTgwMFoXDTIwMTIxNjIwMTgwMFow\ngaYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1T\nYW4gRnJhbmNpc2NvMQ0wCwYDVQQKDARMeWZ0MRkwFwYDVQQLDBBMeWZ0IEVuZ2lu\nZWVyaW5nMRowGAYDVQQDDBFUZXN0IEJhY2tlbmQgVGVhbTEkMCIGCSqGSIb3DQEJ\nARYVYmFja2VuZC10ZWFtQGx5ZnQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A\nMIIBCgKCAQEAuvPdQdmwZongPAgQho/Vipd3PZWrQ6BKxIb4l/RvqtVP321IUTLs\n4vVwpXoYJ+12L+XOO3jCInszs53tHjFpTI1GE8/sasmgR6LRr2krwSoVRHPqUoc9\ntzkDG1SzKP2TRTi1MTI3FO+TnLFahntO9Zstxhv1Epz5GZ/xQLE0/LLoRYzcynL/\niflk18iL1KM8i0Hy4cKjclOaUdnh2nh753iJfxCSb5wJfx4FH1qverYHHT6FopYR\nV40Cg0yYXcYo8yNwrg+EBY8QAT2JOMDokXNKbZpmVKiBlh0QYMX6BBiW249v3sYl\n3Ve+fZvCkle3W0xP0xJw8PdX0NRbvGOrBQIDAQABo4HAMIG9MAwGA1UdEwEB/wQC\nMAAwCwYDVR0PBAQDAgXgMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATBB\nBgNVHREEOjA4hh5zcGlmZmU6Ly9seWZ0LmNvbS9iYWNrZW5kLXRlYW2CCGx5ZnQu\nY29tggx3d3cubHlmdC5jb20wHQYDVR0OBBYEFLHmMm0DV9jCHJSWVRwyPYpBw62r\nMB8GA1UdIwQYMBaAFBQz1vaSbPuePL++7GTMqLAMtk3kMA0GCSqGSIb3DQEBCwUA\nA4IBAQAwx3/M2o00W8GlQ3OT4y/hQGb5K2aytxx8QeSmJaaZTJbvaHhe0x3/fLgq\nuWrW3WEWFtwasilySjOrFOtB9UNmJmNOHSJD3Bslbv5htRaWnoFPCXdwZtVMdoTq\nIHIQqLoos/xj3kVD5sJSYySrveMeKaeUILTkb5ZubSivye1X2yiJLR7AtuwuiMio\nCdIOqhn6xJqYhT7z0IhdKpLNPk4w1tBZSKOXqzrXS4uoJgTC67hWslWWZ2VC6IvZ\nFmKuuGZamCCj6F1QF2IjMVM8evl84hEnN0ajdkA/QWnil9kcWvBm15Ho+oTvvJ7s\nM8MD3RDSq/90FSiME4vbyNEyTmj0\n-----END CERTIFICATE-----\n"
        private_key: "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAuvPdQdmwZongPAgQho/Vipd3PZWrQ6BKxIb4l/RvqtVP321I\nUTLs4vVwpXoYJ+12L+XOO3jCInszs53tHjFpTI1GE8/sasmgR6LRr2krwSoVRHPq\nUoc9tzkDG1SzKP2TRTi1MTI3FO+TnLFahntO9Zstxhv1Epz5GZ/xQLE0/LLoRYzc\nynL/iflk18iL1KM8i0Hy4cKjclOaUdnh2nh753iJfxCSb5wJfx4FH1qverYHHT6F\nopYRV40Cg0yYXcYo8yNwrg+EBY8QAT2JOMDokXNKbZpmVKiBlh0QYMX6BBiW249v\n3sYl3Ve+fZvCkle3W0xP0xJw8PdX0NRbvGOrBQIDAQABAoIBAQCkPLR1sy47BokN\nc/BApn9sn5/LZH7ujBTjDce6hqzLIVZn6/OKEfj1cbWiSd6KxRv8/B/vMykpbZ5/\n/w9eZP4imEGmChWhwruh8zHOrdAYhEXmuwZxtgnLurQ2AHTcX9hPCYB0Va76H3ZI\nQ65JUm6NaeQOlGT6ExjrIA2rTYJFM84I1xH3XbDulS9S2FXNP9RIjV70HzvZw2LR\n1qSNfrnGAEbUCdrZT4BAYTGam5L061ofencYLAorr8K0eVWhUjGV9Jjpq8aG8zy5\nOy1070I0d7Iexfu7T1sQDIqpNkOtQxI8feQEKeKlRKYx6YEQ9vaVwBGa0SBVxQem\nE3YdXBnBAoGBAORlz8wlYqCx25htO/eLgr9hN+eKNhNTo4l905aZrG8SPinaHl15\nn+dQdzlJMVm/rh5+VE0NR0U/vzd3SrdnzczksuGFn0Us/Yg+zOl1+8+GFAtqw3js\nudFLKksChz4Rk/fZo2djtSiFS5aGBtw0Z9T7eorubkTSSfJ7IT99HIu5AoGBANGL\n0ff5U2LV/Y/opKP7xOlxSCVI617N5i0sYMJ9EUaWzvquidzM46T4fwlAeIvAtks7\nACO1cRPuWredZ/gEZ3RguZMxs6llwxwVCaQk/2vbOfATWmyqpGC9UBS/TpYVXbL5\nWUMsdBs4DdAFz8aCrrFBcDeCg4V4w+gHYkFV+LetAoGAB3Ny1fwaPZfPzCc0H51D\nhK7NPhZ6MSM3YJLkRjN5Np5nvMHK383J86fiW9IRdBYWvhPs+B6Ixq+Ps2WG4HjY\nc+i6FTVgvsb69mjmEm+w6VI8cSroeZdvcG59ULkiZFn6c8l71TGhhVLj5mM08hYb\nlQ0nMEUa/8/Ebc6qhQG13rECgYEAm8AZaP9hA22a8oQxG9HfIsSYo1331JemJp19\nrhHX7WfaoGlq/zsrWUt64R2SfA3ZcUGBcQlD61SXCTNuO+LKIq5iQQ4IRDjnNNBO\nQjtdvoVMIy2/YFXVqDIOe91WRCfNZWIA/vTjt/eKDLzFGv+3aPkCt7/CkkqZErWq\nSnXkUGECgYAvkemYu01V1WcJotvLKkVG68jwjMq7jURpbn8oQVlFR8zEh+2UipLB\nOmrNZjmdrhQe+4rzs9XCLE/EZsn7SsygwMyVhgCYzWc/SswADq7Wdbigpmrs+grW\nfg7yxbPGinTyraMd0x3Ty924LLscoJMWUBl7qGeQ2iUdnELmZgLN2Q==\n-----END RSA PRIVATE KEY-----\n"
    - remote_policies: [ 2 ]
      http_rules:
        http_rules:
        - headers: [ { name: ':path', exact_match: '/only-2-allowed' } ]
  egress_per_port_policies:
  - port: 80
    rules:
    - remote_policies: [ 1 ]
      http_rules:
        http_rules:
        - headers: [ { name: ':path', exact_match: '/allowed' } ]
        - headers: [ { name: ':path', regex_match: '.*public$' } ]
        - headers: [ { name: ':authority', exact_match: 'allowedHOST' } ]
        - headers: [ { name: ':authority', regex_match: '.*REGEX.*' } ]
        - headers: [ { name: ':method', exact_match: 'PUT' }, { name: ':path', exact_match: '/public/opinions' } ]
    - remote_policies: [ 2 ]
      http_rules:
        http_rules:
        - headers: [ { name: ':path', exact_match: '/only-2-allowed' } ]
)EOF";

  /*
   * Use filter_chain_match on a requestedServerName that is set by the cilium bpf metadata filter based on the applicable network policy?
   * "example.domain.name.namespace"
   */
class CiliumHttpTLSIntegrationTest : public CiliumHttpIntegrationTest {
public:
  CiliumHttpTLSIntegrationTest(const std::string& config) : CiliumHttpIntegrationTest(config) {}
  ~CiliumHttpTLSIntegrationTest() {}

  void initialize() override {
    CiliumHttpIntegrationTest::initialize();
    fake_upstreams_[0]->setReadDisableOnNewConnection(false);
    fake_upstreams_[0]->set_allow_unexpected_disconnects(allow_unexpected_disconnects_);

    // Set up the SSL client.
    Network::Address::InstanceConstSharedPtr address =
        Ssl::getSslAddress(version_, lookupPort("http"));
    context_ = createClientSslTransportSocketFactory(context_manager_, *api_);
    Network::ClientConnectionPtr ssl_client_ =
        dispatcher_->createClientConnection(address, Network::Address::InstanceConstSharedPtr(),
                                            context_->createTransportSocket(nullptr), nullptr);

    ssl_client_->enableHalfClose(true);
    codec_client_ = makeHttpConnection(std::move(ssl_client_));
  }

  void createUpstreams() override {
    if (upstream_tls_) {
      fake_upstreams_.emplace_back(new FakeUpstream(
          createUpstreamSslContext(), 0, FakeHttpConnection::Type::HTTP1, version_, timeSystem(),
          true));
    } else {
      CiliumHttpIntegrationTest::createUpstreams();
    }
  }

  // TODO(mattklein123): This logic is duplicated in various places. Cleanup in a follow up.
  Network::TransportSocketFactoryPtr createUpstreamSslContext() {
    envoy::api::v2::auth::DownstreamTlsContext tls_context;
    auto* common_tls_context = tls_context.mutable_common_tls_context();
    auto* tls_cert = common_tls_context->add_tls_certificates();
    tls_cert->mutable_certificate_chain()->set_filename(TestEnvironment::runfilesPath(
        fmt::format("test/config/integration/certs/{}cert.pem", upstream_cert_name_)));
    tls_cert->mutable_private_key()->set_filename(TestEnvironment::runfilesPath(
        fmt::format("test/config/integration/certs/{}key.pem", upstream_cert_name_)));
    ENVOY_LOG_MISC(debug, "Fake Upstream Downstream TLS context: {}", tls_context.DebugString());
    auto cfg = std::make_unique<Extensions::TransportSockets::Tls::ServerContextConfigImpl>(
        tls_context, factory_context_);

    static Stats::Scope* upstream_stats_store = new Stats::IsolatedStoreImpl();
    return std::make_unique<Extensions::TransportSockets::Tls::ServerSslSocketFactory>(
        std::move(cfg), context_manager_, *upstream_stats_store, std::vector<std::string>{});
  }

  void Denied(Http::TestHeaderMapImpl&& headers) {
    policy_config = TestEnvironment::substitute(BASIC_TLS_POLICY, GetParam());
    initialize();
    auto response = codec_client_->makeHeaderOnlyRequest(headers);
    response->waitForEndStream();

    uint64_t status;
    EXPECT_EQ(true, absl::SimpleAtoi(response->headers().Status()->value().getStringView(), &status));
    EXPECT_EQ(403, status);
  }

  void Failed(Http::TestHeaderMapImpl&& headers) {
    policy_config = TestEnvironment::substitute(BASIC_TLS_POLICY, GetParam());
    allow_unexpected_disconnects_ = true;
    initialize();
    auto response = codec_client_->makeHeaderOnlyRequest(headers);
    response->waitForEndStream();

    uint64_t status;
    EXPECT_EQ(true, absl::SimpleAtoi(response->headers().Status()->value().getStringView(), &status));
    EXPECT_EQ(503, status);
  }

  void Accepted(Http::TestHeaderMapImpl&& headers) {
    policy_config = TestEnvironment::substitute(BASIC_TLS_POLICY, GetParam());
    initialize();
    auto response = sendRequestAndWaitForResponse(headers, 0, default_response_headers_, 0);

    uint64_t status;
    EXPECT_EQ(true, absl::SimpleAtoi(response->headers().Status()->value().getStringView(), &status));
    EXPECT_EQ(200, status);
  }

  // Upstream
  bool upstream_tls_{true};
  std::string upstream_cert_name_{"upstreamlocalhost"};
  bool allow_unexpected_disconnects_{false};

  // Downstream
  Network::TransportSocketFactoryPtr context_;
};

class CiliumTLSHttpIntegrationTest : public CiliumHttpTLSIntegrationTest {
public:
  CiliumTLSHttpIntegrationTest()
    : CiliumHttpTLSIntegrationTest(fmt::format(TestEnvironment::substitute(cilium_tls_http_proxy_config_fmt + cilium_listener_tls_context_fmt, GetParam()), "true")) {}
};

INSTANTIATE_TEST_CASE_P(
    IpVersions, CiliumTLSHttpIntegrationTest,
    testing::ValuesIn(TestEnvironment::getIpVersionsForTest()));

TEST_P(CiliumTLSHttpIntegrationTest, DeniedPathPrefix) {
  Denied({{":method", "GET"}, {":path", "/prefix"}, {":authority", "localhost"}});
}

TEST_P(CiliumTLSHttpIntegrationTest, AllowedPathPrefix) {
  Accepted({{":method", "GET"}, {":path", "/allowed"}, {":authority", "localhost"}});
}

TEST_P(CiliumTLSHttpIntegrationTest, InvalidHostNameSNI) {
  // SNI is now coming from the cilium listener filter, so it is accepted
  Accepted({{":method", "GET"}, {":path", "/allowed"}, {":authority", "nonlocalhost"}});
}

TEST_P(CiliumTLSHttpIntegrationTest, AllowedPathPrefixStrippedHeader) {
  Accepted({{":method", "GET"}, {":path", "/allowed"}, {":authority", "localhost"},
            {"x-envoy-original-dst-host", "1.1.1.1:9999"}});
}

TEST_P(CiliumTLSHttpIntegrationTest, AllowedPathRegex) {
  Accepted({{":method", "GET"}, {":path", "/maybe/public"}, {":authority", "localhost"}});
}

TEST_P(CiliumTLSHttpIntegrationTest, DeniedPath) {
  Denied({{":method", "GET"}, {":path", "/maybe/private"}, {":authority", "localhost"}});
}

TEST_P(CiliumTLSHttpIntegrationTest, DeniedMethod) {
  Denied({{":method", "POST"}, {":path", "/maybe/private"}, {":authority", "localhost"}});
}

TEST_P(CiliumTLSHttpIntegrationTest, AcceptedMethod) {
  Accepted({{":method", "PUT"}, {":path", "/public/opinions"}, {":authority", "localhost"}});
}

TEST_P(CiliumTLSHttpIntegrationTest, L3DeniedPath) {
  Denied({{":method", "GET"}, {":path", "/only-2-allowed"}, {":authority", "localhost"}});
}

} // namespace Cilium

} // namespace Envoy
  07070100000037000081A4000003E800000064000000015E17A24700000817000000000000000000000000000000000000002D00000000cilium-proxy-20200109/cilium_proxy_test.json  {
  "listeners": [
  {
    "address": "tcp://{{ ip_loopback_address }}:0",
    "listener_filters": [
      { "name": "test_bpf_metadata", "config": {
          "original_dst_address": "{{ ip_loopback_address }}:{{ upstream_0 }}",
	  "socket_mark": 42
      }}
    ],
    "filters": [{
      "name": "http_connection_manager",
      "config": {
        "codec_type": "auto",
        "stat_prefix": "ingress_http",
        "route_config": {
          "virtual_hosts": [{
            "name": "policy_enabled",
            "domains": ["*"],
            "routes": [{
              "prefix": "/allowed",
              "cluster": "cluster1"
            }, {
              "prefix": "/",
              "headers": [{ "name": ":path", "value": ".*public$", "regex": true}],
              "cluster": "cluster1"
            }, {
              "prefix": "/",
              "headers": [{ "name": ":authority", "value": "allowedHOST", "regex": false}],
              "cluster": "cluster1"
            }, {
              "prefix": "/",
              "headers": [{ "name": ":authority", "value": ".*REGEX.*", "regex": true}],
              "cluster": "cluster1"
            }, {
              "prefix": "/",
		"headers": [{ "name": ":method", "value": "PUT", "regex": false},
                            { "name": ":path", "value": "/public/opinions", "regex": false}],
              "cluster": "cluster1"
            }]
          }]
        },
        "access_log": [
          {
            "path": "/dev/stdout"
          }
        ],
        "filters": [
          {
            "name": "cilium.l7policy",
            "config": {
		"access_log_path": "",
		"listener_id": "foo42"
	    }
          },
          {
            "name": "router",
            "config": {}
          }
	]
      }
    }]
  }],
  "admin": { "access_log_path": "/dev/null",
	     "address": "tcp://{{ ip_loopback_address }}:0" },
  "cluster_manager": {
    "clusters": [{
      "name": "cluster1",
      "connect_timeout_ms": 1000,
      "type": "original_dst",
      "lb_type": "original_dst_lb"
    }]
  }
}
 07070100000038000081ED000003E800000064000000015E17A247000000B1000000000000000000000000000000000000002B00000000cilium-proxy-20200109/envoy_binary_test.sh    #!/bin/bash
#

set -e

# Just test that the binary was produced and can be executed.
# envoy --help will give a success return code if working.
cilium-envoy --help

echo "PASS"
   07070100000039000081A4000003E800000064000000015E17A247000025CA000000000000000000000000000000000000003000000000cilium-proxy-20200109/envoy_bootstrap_tmpl.json   {
  "node": {
    "id": "{{ .nodeID }}",
    "cluster": "{{ .cluster }}",
    "locality": {
      {{ if .region }}
      "region": "{{ .region }}",
      {{ end }}
      {{ if .zone }}
      "zone": "{{ .zone }}",
      {{ end }}
      {{ if .sub_zone }}
      "sub_zone": "{{ .sub_zone }}",
      {{ end }}
    },
    "metadata": {{ .meta_json_str }}
  },
  "stats_config": {
    "use_all_default_tags": false,
    "stats_tags": [
      {
        "tag_name": "cluster_name",
        "regex": "^cluster\\.((.+?(\\..+?\\.svc\\.cluster\\.local)?)\\.)"
      },
      {
        "tag_name": "tcp_prefix",
        "regex": "^tcp\\.((.*?)\\.)\\w+?$"
      },
      {
        "tag_name": "response_code",
        "regex": "_rq(_(\\d{3}))$"
      },
      {
        "tag_name": "response_code_class",
        "regex": "_rq(_(\\dxx))$"
      },
      {
        "tag_name": "http_conn_manager_listener_prefix",
        "regex": "^listener(?=\\.).*?\\.http\\.(((?:[_.[:digit:]]*|[_\\[\\]aAbBcCdDeEfF[:digit:]]*))\\.)"
      },
      {
        "tag_name": "http_conn_manager_prefix",
        "regex": "^http\\.(((?:[_.[:digit:]]*|[_\\[\\]aAbBcCdDeEfF[:digit:]]*))\\.)"
      },
      {
        "tag_name": "listener_address",
        "regex": "^listener\\.(((?:[_.[:digit:]]*|[_\\[\\]aAbBcCdDeEfF[:digit:]]*))\\.)"
      },
      {
        "tag_name": "mongo_prefix",
        "regex": "^mongo\\.(.+?)\\.(collection|cmd|cx_|op_|delays_|decoding_)(.*?)$"
      }
    ],
    "stats_matcher": {
      "inclusion_list": {
        "patterns": [
          {{- range $a, $s := .inclusionPrefix }}
          {
          "prefix": "{{$s}}"
          },
          {{- end }}
          {{- range $a, $s := .inclusionSuffix }}
          {
          "suffix": "{{$s}}"
          },
          {{- end }}
          {{- range $a, $s := .inclusionRegexps }}
          {
          "regex": "{{js $s}}"
          },
          {{- end }}
        ]
      }
    }
  },
  "admin": {
    "access_log_path": "/dev/null",
    "address": {
      "socket_address": {
        "address": "{{ .localhost }}",
        "port_value": {{ .config.ProxyAdminPort }}
      }
    }
  },
  "dynamic_resources": {
    "lds_config": {
      "ads": {}
    },
    "cds_config": {
      "ads": {}
    },
    "ads_config": {
      "api_type": "GRPC",
      "grpc_services": [
        {
          "envoy_grpc": {
            "cluster_name": "xds-grpc"
          }
        }
      ]
    }
  },
  "static_resources": {
    "clusters": [
      {
        "name": "prometheus_stats",
        "type": "STATIC",
        "connect_timeout": "0.250s",
        "lb_policy": "ROUND_ROBIN",
        "hosts": [
          {
            "socket_address": {
              "protocol": "TCP",
              "address": "{{ .localhost }}",
              "port_value": {{ .config.ProxyAdminPort }}
            }
          }
        ]
      },
      {
        "name": "xds-grpc-cilium",
        "type": "STATIC",
        "connect_timeout": "{{ .connect_timeout }}",
        "lb_policy": "ROUND_ROBIN",
        "hosts": [
          {
            "pipe": {
              "path": "/var/run/cilium/xds.sock"
            }
          }
        ],
        "http2_protocol_options": { }
      },
      {
        "name": "xds-grpc",
        "type": "STRICT_DNS",
        "dns_refresh_rate": "{{ .dns_refresh_rate }}",
        "dns_lookup_family": "{{ .dns_lookup_family }}",
        "connect_timeout": "{{ .connect_timeout }}",
        "lb_policy": "ROUND_ROBIN",
        {{ if eq .config.ControlPlaneAuthPolicy 1 }}
        "tls_context": {
          "common_tls_context": {
            "alpn_protocols": [
              "h2"
            ],
            "tls_certificates": [
              {
                "certificate_chain": {
                  "filename": "/etc/certs/cert-chain.pem"
                },
                "private_key": {
                  "filename": "/etc/certs/key.pem"
                }
              }
            ],
            "validation_context": {
              "trusted_ca": {
                "filename": "/etc/certs/root-cert.pem"
              },
              "verify_subject_alt_name": [
                {{- range $a, $s := .pilot_SAN }}
                "{{$s}}"
                {{- end}}
              ]
            }
          }
        },
        {{ end }}
        "hosts": [
          {
            "socket_address": {{ .pilot_grpc_address }}
          }
        ],
        "circuit_breakers": {
          "thresholds": [
            {
              "priority": "DEFAULT",
              "max_connections": 100000,
              "max_pending_requests": 100000,
              "max_requests": 100000
            },
            {
              "priority": "HIGH",
              "max_connections": 100000,
              "max_pending_requests": 100000,
              "max_requests": 100000
            }
          ]
        },
        "upstream_connection_options": {
          "tcp_keepalive": {
            "keepalive_time": 300
          }
        },
        "http2_protocol_options": { }
      }
      {{ if .zipkin }}
      ,
      {
        "name": "zipkin",
        "type": "STRICT_DNS",
        "dns_refresh_rate": "{{ .dns_refresh_rate }}",
        "dns_lookup_family": "{{ .dns_lookup_family }}",
        "connect_timeout": "1s",
        "lb_policy": "ROUND_ROBIN",
        "hosts": [
          {
            "socket_address": {{ .zipkin }}
          }
        ]
      }
      {{ else if .lightstep }}
      ,
      {
        "name": "lightstep",
        "http2_protocol_options": {},
        {{ if .lightstepSecure }}
        "tls_context": {
          "common_tls_context": {
            "alpn_protocols": [
              "h2"
            ],
            "validation_context": {
              "trusted_ca": {
                "filename": "{{ .lightstepCacertPath }}"
              }
            }
          }
        },
        {{ end }}
        "type": "STRICT_DNS",
        "dns_refresh_rate": "{{ .dns_refresh_rate }}",
        "dns_lookup_family": "{{ .dns_lookup_family }}",
        "connect_timeout": "1s",
        "lb_policy": "ROUND_ROBIN",
        "hosts": [
          {
            "socket_address": {{ .lightstep }}
          }
        ]
      }
      {{ else if .datadog }}
      ,
      {
        "name": "datadog_agent",
        "connect_timeout": "1s",
        "type": "STRICT_DNS",
        "dns_refresh_rate": "{{ .dns_refresh_rate }}",
        "dns_lookup_family": "{{ .dns_lookup_family }}",
        "lb_policy": "ROUND_ROBIN",
        "hosts": [
          {
            "socket_address": {{ .datadog }}
          }
        ]
      }
      {{ end }}
      {{ if .envoy_metrics_service }}
      ,
      {
        "name": "envoy_metrics_service",
        "type": "STRICT_DNS",
        "dns_refresh_rate": "{{ .dns_refresh_rate }}",
        "dns_lookup_family": "{{ .dns_lookup_family }}",
        "connect_timeout": "1s",
        "lb_policy": "ROUND_ROBIN",
        "http2_protocol_options": {},
        "hosts": [
          {
            "socket_address": {{ .envoy_metrics_service }}
          }
        ]
      }
      {{ end }}
    ],
    "listeners":[
      {
        "address": {
          "socket_address": {
            "protocol": "TCP",
            "address": "{{ .wildcard }}",
            "port_value": 15090
          }
        },
        "filter_chains": [
          {
            "filters": [
              {
                "name": "envoy.http_connection_manager",
                "config": {
                  "codec_type": "AUTO",
                  "stat_prefix": "stats",
                  "route_config": {
                    "virtual_hosts": [
                      {
                        "name": "backend",
                        "domains": [
                          "*"
                        ],
                        "routes": [
                          {
                            "match": {
                              "prefix": "/stats/prometheus"
                            },
                            "route": {
                              "cluster": "prometheus_stats"
                            }
                          }
                        ]
                      }
                    ]
                  },
                  "http_filters": {
                    "name": "envoy.router"
                  }
                }
              }
            ]
          }
        ]
      }
    ]
  }
  {{ if .zipkin }}
  ,
  "tracing": {
    "http": {
      "name": "envoy.zipkin",
      "config": {
        "collector_cluster": "zipkin",
        "collector_endpoint": "/api/v1/spans",
        "trace_id_128bit": "true",
        "shared_span_context": "false"
      }
    }
  }
  {{ else if .lightstep }}
  ,
  "tracing": {
    "http": {
      "name": "envoy.lightstep",
      "config": {
        "collector_cluster": "lightstep",
        "access_token_file": "{{ .lightstepToken}}"
      }
    }
  }
  {{ else if .datadog }}
  ,
  "tracing": {
    "http": {
      "name": "envoy.tracers.datadog",
      "config": {
        "collector_cluster": "datadog_agent",
        "service_name": "{{ .cluster }}"
      }
    }
  }
  {{ end }}
  {{ if or .envoy_metrics_service .statsd }}
  ,
  "stats_sinks": [
    {{ if .envoy_metrics_service }}
    {
      "name": "envoy.metrics_service",
      "config": {
        "grpc_service": {
          "envoy_grpc": {
            "cluster_name": "envoy_metrics_service"
          }
        }
      }
    },
    {{ end }}
    {{ if .statsd }}
    {
      "name": "envoy.statsd",
      "config": {
        "address": {
          "socket_address": {{ .statsd }}
        }
      }
    },
    {{ end }}
  ]
  {{ end }}
}
  0707010000003A000081A4000003E800000064000000015E17A247000002BB000000000000000000000000000000000000002F00000000cilium-proxy-20200109/envoy_bootstrap_v2.patch    *** envoy_bootstrap_v2.json	2018-11-06 23:34:03.000000000 -0800
--- envoy_bootstrap_tmpl.json	2018-11-06 23:39:25.000000000 -0800
***************
*** 87,92 ****
--- 87,106 ----
          ]
        },
        {
+         "name": "xds-grpc-cilium",
+         "type": "STATIC",
+         "connect_timeout": "{{ .connect_timeout }}",
+         "lb_policy": "ROUND_ROBIN",
+         "hosts": [
+           {
+             "pipe": {
+               "path": "/var/run/cilium/xds.sock"
+             }
+           }
+         ],
+         "http2_protocol_options": { }
+       },
+       {
          "name": "xds-grpc",
          "type": "STRICT_DNS",
          "connect_timeout": "{{ .connect_timeout }}",
 0707010000003B000041ED000003E800000064000000045E17A24700000000000000000000000000000000000000000000001900000000cilium-proxy-20200109/go  0707010000003C000081A4000003E800000064000000015E17A2470000005B000000000000000000000000000000000000002300000000cilium-proxy-20200109/go/README.md    # protoc-generated Go sources

Go files herein are autogenerated with protoc, do not edit.
 0707010000003D000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000002000000000cilium-proxy-20200109/go/cilium   0707010000003E000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000002400000000cilium-proxy-20200109/go/cilium/api   0707010000003F000081A4000003E800000064000000015E17A24700004BC2000000000000000000000000000000000000003400000000cilium-proxy-20200109/go/cilium/api/accesslog.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: cilium/api/accesslog.proto

package cilium

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type HttpProtocol int32

const (
	HttpProtocol_HTTP10 HttpProtocol = 0
	HttpProtocol_HTTP11 HttpProtocol = 1
	HttpProtocol_HTTP2  HttpProtocol = 2
)

var HttpProtocol_name = map[int32]string{
	0: "HTTP10",
	1: "HTTP11",
	2: "HTTP2",
}

var HttpProtocol_value = map[string]int32{
	"HTTP10": 0,
	"HTTP11": 1,
	"HTTP2":  2,
}

func (x HttpProtocol) String() string {
	return proto.EnumName(HttpProtocol_name, int32(x))
}

func (HttpProtocol) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_02c2856a892fe6b6, []int{0}
}

type EntryType int32

const (
	EntryType_Request  EntryType = 0
	EntryType_Response EntryType = 1
	EntryType_Denied   EntryType = 2
)

var EntryType_name = map[int32]string{
	0: "Request",
	1: "Response",
	2: "Denied",
}

var EntryType_value = map[string]int32{
	"Request":  0,
	"Response": 1,
	"Denied":   2,
}

func (x EntryType) String() string {
	return proto.EnumName(EntryType_name, int32(x))
}

func (EntryType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_02c2856a892fe6b6, []int{1}
}

type KeyValue struct {
	Key                  string   `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
	Value                string   `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *KeyValue) Reset()         { *m = KeyValue{} }
func (m *KeyValue) String() string { return proto.CompactTextString(m) }
func (*KeyValue) ProtoMessage()    {}
func (*KeyValue) Descriptor() ([]byte, []int) {
	return fileDescriptor_02c2856a892fe6b6, []int{0}
}

func (m *KeyValue) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_KeyValue.Unmarshal(m, b)
}
func (m *KeyValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_KeyValue.Marshal(b, m, deterministic)
}
func (m *KeyValue) XXX_Merge(src proto.Message) {
	xxx_messageInfo_KeyValue.Merge(m, src)
}
func (m *KeyValue) XXX_Size() int {
	return xxx_messageInfo_KeyValue.Size(m)
}
func (m *KeyValue) XXX_DiscardUnknown() {
	xxx_messageInfo_KeyValue.DiscardUnknown(m)
}

var xxx_messageInfo_KeyValue proto.InternalMessageInfo

func (m *KeyValue) GetKey() string {
	if m != nil {
		return m.Key
	}
	return ""
}

func (m *KeyValue) GetValue() string {
	if m != nil {
		return m.Value
	}
	return ""
}

type HttpLogEntry struct {
	HttpProtocol HttpProtocol `protobuf:"varint,1,opt,name=http_protocol,json=httpProtocol,proto3,enum=cilium.HttpProtocol" json:"http_protocol,omitempty"`
	// Request info that is also retained for the response
	Scheme string `protobuf:"bytes,2,opt,name=scheme,proto3" json:"scheme,omitempty"`
	Host   string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"`
	Path   string `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"`
	Method string `protobuf:"bytes,5,opt,name=method,proto3" json:"method,omitempty"`
	// Request headers not included above
	Headers []*KeyValue `protobuf:"bytes,6,rep,name=headers,proto3" json:"headers,omitempty"`
	// Response info
	Status uint32 `protobuf:"varint,7,opt,name=status,proto3" json:"status,omitempty"`
	// missing_headers includes both headers that were added to the
	// request, and headers that were merely logged as missing
	MissingHeaders []*KeyValue `protobuf:"bytes,8,rep,name=missing_headers,json=missingHeaders,proto3" json:"missing_headers,omitempty"`
	// rejected_headers includes headers that were flagged as unallowed,
	// which may have been removed, or merely logged and the request still
	// allowed, or the request may have been dropped due to them.
	RejectedHeaders      []*KeyValue `protobuf:"bytes,9,rep,name=rejected_headers,json=rejectedHeaders,proto3" json:"rejected_headers,omitempty"`
	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
	XXX_unrecognized     []byte      `json:"-"`
	XXX_sizecache        int32       `json:"-"`
}

func (m *HttpLogEntry) Reset()         { *m = HttpLogEntry{} }
func (m *HttpLogEntry) String() string { return proto.CompactTextString(m) }
func (*HttpLogEntry) ProtoMessage()    {}
func (*HttpLogEntry) Descriptor() ([]byte, []int) {
	return fileDescriptor_02c2856a892fe6b6, []int{1}
}

func (m *HttpLogEntry) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpLogEntry.Unmarshal(m, b)
}
func (m *HttpLogEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpLogEntry.Marshal(b, m, deterministic)
}
func (m *HttpLogEntry) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpLogEntry.Merge(m, src)
}
func (m *HttpLogEntry) XXX_Size() int {
	return xxx_messageInfo_HttpLogEntry.Size(m)
}
func (m *HttpLogEntry) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpLogEntry.DiscardUnknown(m)
}

var xxx_messageInfo_HttpLogEntry proto.InternalMessageInfo

func (m *HttpLogEntry) GetHttpProtocol() HttpProtocol {
	if m != nil {
		return m.HttpProtocol
	}
	return HttpProtocol_HTTP10
}

func (m *HttpLogEntry) GetScheme() string {
	if m != nil {
		return m.Scheme
	}
	return ""
}

func (m *HttpLogEntry) GetHost() string {
	if m != nil {
		return m.Host
	}
	return ""
}

func (m *HttpLogEntry) GetPath() string {
	if m != nil {
		return m.Path
	}
	return ""
}

func (m *HttpLogEntry) GetMethod() string {
	if m != nil {
		return m.Method
	}
	return ""
}

func (m *HttpLogEntry) GetHeaders() []*KeyValue {
	if m != nil {
		return m.Headers
	}
	return nil
}

func (m *HttpLogEntry) GetStatus() uint32 {
	if m != nil {
		return m.Status
	}
	return 0
}

func (m *HttpLogEntry) GetMissingHeaders() []*KeyValue {
	if m != nil {
		return m.MissingHeaders
	}
	return nil
}

func (m *HttpLogEntry) GetRejectedHeaders() []*KeyValue {
	if m != nil {
		return m.RejectedHeaders
	}
	return nil
}

type L7LogEntry struct {
	Proto                string            `protobuf:"bytes,1,opt,name=proto,proto3" json:"proto,omitempty"`
	Fields               map[string]string `protobuf:"bytes,2,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *L7LogEntry) Reset()         { *m = L7LogEntry{} }
func (m *L7LogEntry) String() string { return proto.CompactTextString(m) }
func (*L7LogEntry) ProtoMessage()    {}
func (*L7LogEntry) Descriptor() ([]byte, []int) {
	return fileDescriptor_02c2856a892fe6b6, []int{2}
}

func (m *L7LogEntry) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_L7LogEntry.Unmarshal(m, b)
}
func (m *L7LogEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_L7LogEntry.Marshal(b, m, deterministic)
}
func (m *L7LogEntry) XXX_Merge(src proto.Message) {
	xxx_messageInfo_L7LogEntry.Merge(m, src)
}
func (m *L7LogEntry) XXX_Size() int {
	return xxx_messageInfo_L7LogEntry.Size(m)
}
func (m *L7LogEntry) XXX_DiscardUnknown() {
	xxx_messageInfo_L7LogEntry.DiscardUnknown(m)
}

var xxx_messageInfo_L7LogEntry proto.InternalMessageInfo

func (m *L7LogEntry) GetProto() string {
	if m != nil {
		return m.Proto
	}
	return ""
}

func (m *L7LogEntry) GetFields() map[string]string {
	if m != nil {
		return m.Fields
	}
	return nil
}

type LogEntry struct {
	// The time that Cilium filter captured this log entry,
	// in, nanoseconds since 1/1/1970.
	Timestamp uint64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
	// 'true' if the request was received by an ingress listener,
	// 'false' if received by an egress listener
	IsIngress bool      `protobuf:"varint,15,opt,name=is_ingress,json=isIngress,proto3" json:"is_ingress,omitempty"`
	EntryType EntryType `protobuf:"varint,3,opt,name=entry_type,json=entryType,proto3,enum=cilium.EntryType" json:"entry_type,omitempty"`
	// Cilium network policy resource name
	PolicyName string `protobuf:"bytes,4,opt,name=policy_name,json=policyName,proto3" json:"policy_name,omitempty"`
	// Cilium rule reference
	CiliumRuleRef string `protobuf:"bytes,5,opt,name=cilium_rule_ref,json=ciliumRuleRef,proto3" json:"cilium_rule_ref,omitempty"`
	// Cilium security ID of the source and destination
	SourceSecurityId      uint32 `protobuf:"varint,6,opt,name=source_security_id,json=sourceSecurityId,proto3" json:"source_security_id,omitempty"`
	DestinationSecurityId uint32 `protobuf:"varint,16,opt,name=destination_security_id,json=destinationSecurityId,proto3" json:"destination_security_id,omitempty"`
	// These fields record the original source and destination addresses,
	// stored in ipv4:port or [ipv6]:port format.
	SourceAddress      string `protobuf:"bytes,7,opt,name=source_address,json=sourceAddress,proto3" json:"source_address,omitempty"`
	DestinationAddress string `protobuf:"bytes,8,opt,name=destination_address,json=destinationAddress,proto3" json:"destination_address,omitempty"`
	// Types that are valid to be assigned to L7:
	//	*LogEntry_Http
	//	*LogEntry_GenericL7
	L7 isLogEntry_L7 `protobuf_oneof:"l7"`
	//
	// Deprecated HTTP fields. Use the http field above instead.
	//
	HttpProtocol HttpProtocol `protobuf:"varint,2,opt,name=http_protocol,json=httpProtocol,proto3,enum=cilium.HttpProtocol" json:"http_protocol,omitempty"` // Deprecated: Do not use.
	// Request info that is also retained for the response
	Scheme string `protobuf:"bytes,9,opt,name=scheme,proto3" json:"scheme,omitempty"`   // Deprecated: Do not use.
	Host   string `protobuf:"bytes,10,opt,name=host,proto3" json:"host,omitempty"`      // Deprecated: Do not use.
	Path   string `protobuf:"bytes,11,opt,name=path,proto3" json:"path,omitempty"`      // Deprecated: Do not use.
	Method string `protobuf:"bytes,12,opt,name=method,proto3" json:"method,omitempty"`  // Deprecated: Do not use.
	Status uint32 `protobuf:"varint,13,opt,name=status,proto3" json:"status,omitempty"` // Deprecated: Do not use.
	// Request headers not included above
	Headers              []*KeyValue `protobuf:"bytes,14,rep,name=headers,proto3" json:"headers,omitempty"` // Deprecated: Do not use.
	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
	XXX_unrecognized     []byte      `json:"-"`
	XXX_sizecache        int32       `json:"-"`
}

func (m *LogEntry) Reset()         { *m = LogEntry{} }
func (m *LogEntry) String() string { return proto.CompactTextString(m) }
func (*LogEntry) ProtoMessage()    {}
func (*LogEntry) Descriptor() ([]byte, []int) {
	return fileDescriptor_02c2856a892fe6b6, []int{3}
}

func (m *LogEntry) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_LogEntry.Unmarshal(m, b)
}
func (m *LogEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_LogEntry.Marshal(b, m, deterministic)
}
func (m *LogEntry) XXX_Merge(src proto.Message) {
	xxx_messageInfo_LogEntry.Merge(m, src)
}
func (m *LogEntry) XXX_Size() int {
	return xxx_messageInfo_LogEntry.Size(m)
}
func (m *LogEntry) XXX_DiscardUnknown() {
	xxx_messageInfo_LogEntry.DiscardUnknown(m)
}

var xxx_messageInfo_LogEntry proto.InternalMessageInfo

func (m *LogEntry) GetTimestamp() uint64 {
	if m != nil {
		return m.Timestamp
	}
	return 0
}

func (m *LogEntry) GetIsIngress() bool {
	if m != nil {
		return m.IsIngress
	}
	return false
}

func (m *LogEntry) GetEntryType() EntryType {
	if m != nil {
		return m.EntryType
	}
	return EntryType_Request
}

func (m *LogEntry) GetPolicyName() string {
	if m != nil {
		return m.PolicyName
	}
	return ""
}

func (m *LogEntry) GetCiliumRuleRef() string {
	if m != nil {
		return m.CiliumRuleRef
	}
	return ""
}

func (m *LogEntry) GetSourceSecurityId() uint32 {
	if m != nil {
		return m.SourceSecurityId
	}
	return 0
}

func (m *LogEntry) GetDestinationSecurityId() uint32 {
	if m != nil {
		return m.DestinationSecurityId
	}
	return 0
}

func (m *LogEntry) GetSourceAddress() string {
	if m != nil {
		return m.SourceAddress
	}
	return ""
}

func (m *LogEntry) GetDestinationAddress() string {
	if m != nil {
		return m.DestinationAddress
	}
	return ""
}

type isLogEntry_L7 interface {
	isLogEntry_L7()
}

type LogEntry_Http struct {
	Http *HttpLogEntry `protobuf:"bytes,100,opt,name=http,proto3,oneof"`
}

type LogEntry_GenericL7 struct {
	GenericL7 *L7LogEntry `protobuf:"bytes,102,opt,name=generic_l7,json=genericL7,proto3,oneof"`
}

func (*LogEntry_Http) isLogEntry_L7() {}

func (*LogEntry_GenericL7) isLogEntry_L7() {}

func (m *LogEntry) GetL7() isLogEntry_L7 {
	if m != nil {
		return m.L7
	}
	return nil
}

func (m *LogEntry) GetHttp() *HttpLogEntry {
	if x, ok := m.GetL7().(*LogEntry_Http); ok {
		return x.Http
	}
	return nil
}

func (m *LogEntry) GetGenericL7() *L7LogEntry {
	if x, ok := m.GetL7().(*LogEntry_GenericL7); ok {
		return x.GenericL7
	}
	return nil
}

// Deprecated: Do not use.
func (m *LogEntry) GetHttpProtocol() HttpProtocol {
	if m != nil {
		return m.HttpProtocol
	}
	return HttpProtocol_HTTP10
}

// Deprecated: Do not use.
func (m *LogEntry) GetScheme() string {
	if m != nil {
		return m.Scheme
	}
	return ""
}

// Deprecated: Do not use.
func (m *LogEntry) GetHost() string {
	if m != nil {
		return m.Host
	}
	return ""
}

// Deprecated: Do not use.
func (m *LogEntry) GetPath() string {
	if m != nil {
		return m.Path
	}
	return ""
}

// Deprecated: Do not use.
func (m *LogEntry) GetMethod() string {
	if m != nil {
		return m.Method
	}
	return ""
}

// Deprecated: Do not use.
func (m *LogEntry) GetStatus() uint32 {
	if m != nil {
		return m.Status
	}
	return 0
}

// Deprecated: Do not use.
func (m *LogEntry) GetHeaders() []*KeyValue {
	if m != nil {
		return m.Headers
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*LogEntry) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*LogEntry_Http)(nil),
		(*LogEntry_GenericL7)(nil),
	}
}

func init() {
	proto.RegisterEnum("cilium.HttpProtocol", HttpProtocol_name, HttpProtocol_value)
	proto.RegisterEnum("cilium.EntryType", EntryType_name, EntryType_value)
	proto.RegisterType((*KeyValue)(nil), "cilium.KeyValue")
	proto.RegisterType((*HttpLogEntry)(nil), "cilium.HttpLogEntry")
	proto.RegisterType((*L7LogEntry)(nil), "cilium.L7LogEntry")
	proto.RegisterMapType((map[string]string)(nil), "cilium.L7LogEntry.FieldsEntry")
	proto.RegisterType((*LogEntry)(nil), "cilium.LogEntry")
}

func init() { proto.RegisterFile("cilium/api/accesslog.proto", fileDescriptor_02c2856a892fe6b6) }

var fileDescriptor_02c2856a892fe6b6 = []byte{
	// 711 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdb, 0x6e, 0xdb, 0x38,
	0x10, 0xb5, 0x14, 0xdf, 0x34, 0xbe, 0x69, 0xb9, 0xd9, 0xac, 0x60, 0xec, 0xc5, 0x30, 0xb0, 0x0b,
	0xc3, 0x58, 0x38, 0x89, 0x03, 0xc4, 0x9b, 0x5d, 0xf4, 0xa1, 0x41, 0x5b, 0x38, 0x6d, 0x50, 0x04,
	0x6c, 0xd0, 0x57, 0x41, 0x95, 0xc6, 0x36, 0x1b, 0xdd, 0x2a, 0x52, 0x05, 0xfc, 0x21, 0xfd, 0xbc,
	0x3e, 0xf7, 0x37, 0x0a, 0x91, 0x94, 0xec, 0xa4, 0x0d, 0xd0, 0xb7, 0xe1, 0x99, 0x73, 0x8e, 0x48,
	0x0e, 0x8f, 0x60, 0xe8, 0xb3, 0x90, 0xe5, 0xd1, 0xb1, 0x97, 0xb2, 0x63, 0xcf, 0xf7, 0x91, 0xf3,
	0x30, 0x59, 0xcf, 0xd2, 0x2c, 0x11, 0x09, 0x69, 0xaa, 0xde, 0x78, 0x0e, 0xed, 0x57, 0xb8, 0x7d,
	0xeb, 0x85, 0x39, 0x12, 0x1b, 0x0e, 0xee, 0x70, 0xeb, 0x18, 0x23, 0x63, 0x62, 0xd1, 0xa2, 0x24,
	0x87, 0xd0, 0xf8, 0x58, 0xb4, 0x1c, 0x53, 0x62, 0x6a, 0x31, 0xfe, 0x6c, 0x42, 0x77, 0x29, 0x44,
	0x7a, 0x9d, 0xac, 0x9f, 0xc7, 0x22, 0xdb, 0x92, 0x0b, 0xe8, 0x6d, 0x84, 0x48, 0x5d, 0x69, 0xed,
	0x27, 0xa1, 0xb4, 0xe8, 0xcf, 0x0f, 0x67, 0xea, 0x23, 0xb3, 0x82, 0x7c, 0xa3, 0x7b, 0xb4, 0xbb,
	0xd9, 0x5b, 0x91, 0x23, 0x68, 0x72, 0x7f, 0x83, 0x51, 0xf9, 0x09, 0xbd, 0x22, 0x04, 0xea, 0x9b,
	0x84, 0x0b, 0xe7, 0x40, 0xa2, 0xb2, 0x2e, 0xb0, 0xd4, 0x13, 0x1b, 0xa7, 0xae, 0xb0, 0xa2, 0x2e,
	0xf4, 0x11, 0x8a, 0x4d, 0x12, 0x38, 0x0d, 0xa5, 0x57, 0x2b, 0x32, 0x85, 0xd6, 0x06, 0xbd, 0x00,
	0x33, 0xee, 0x34, 0x47, 0x07, 0x93, 0xce, 0xdc, 0x2e, 0x37, 0x53, 0x1e, 0x97, 0x96, 0x04, 0xb9,
	0x07, 0xe1, 0x89, 0x9c, 0x3b, 0xad, 0x91, 0x31, 0xe9, 0x51, 0xbd, 0x22, 0x17, 0x30, 0x88, 0x18,
	0xe7, 0x2c, 0x5e, 0xbb, 0xa5, 0x57, 0xfb, 0x11, 0xaf, 0xbe, 0x26, 0x2e, 0xb5, 0xe5, 0xff, 0x60,
	0x67, 0xf8, 0x1e, 0x7d, 0x81, 0x41, 0xa5, 0xb5, 0x1e, 0xd1, 0x0e, 0x4a, 0xa6, 0x16, 0x8f, 0x3f,
	0x19, 0x00, 0xd7, 0x8b, 0xea, 0x76, 0x0f, 0xa1, 0x21, 0x2f, 0x56, 0x0f, 0x46, 0x2d, 0xc8, 0x39,
	0x34, 0x57, 0x0c, 0xc3, 0x80, 0x3b, 0xa6, 0xf4, 0xfd, 0xa3, 0xf4, 0xdd, 0x29, 0x67, 0x2f, 0x24,
	0x41, 0xd6, 0x54, 0xb3, 0x87, 0x17, 0xd0, 0xd9, 0x83, 0x7f, 0x74, 0xe6, 0xff, 0x99, 0xff, 0x1a,
	0xe3, 0x2f, 0x0d, 0x68, 0x57, 0xbb, 0xfa, 0x0d, 0x2c, 0xc1, 0x22, 0xe4, 0xc2, 0x8b, 0x52, 0x29,
	0xaf, 0xd3, 0x1d, 0x40, 0x7e, 0x07, 0x60, 0xdc, 0x65, 0xf1, 0x3a, 0x43, 0xce, 0x9d, 0xc1, 0xc8,
	0x98, 0xb4, 0xa9, 0xc5, 0xf8, 0x95, 0x02, 0xc8, 0x09, 0x00, 0x16, 0x2e, 0xae, 0xd8, 0xa6, 0x28,
	0x67, 0xdc, 0x9f, 0xff, 0x54, 0x1e, 0x40, 0xfa, 0xdf, 0x6e, 0x53, 0xa4, 0x16, 0x96, 0x25, 0xf9,
	0x13, 0x3a, 0x69, 0x12, 0x32, 0x7f, 0xeb, 0xc6, 0x5e, 0x84, 0xfa, 0x09, 0x80, 0x82, 0x5e, 0x7b,
	0x11, 0x92, 0xbf, 0x61, 0xa0, 0xf4, 0x6e, 0x96, 0x87, 0xe8, 0x66, 0xb8, 0xd2, 0x2f, 0xa2, 0xa7,
	0x60, 0x9a, 0x87, 0x48, 0x71, 0x45, 0xfe, 0x01, 0xc2, 0x93, 0x3c, 0xf3, 0xd1, 0xe5, 0xe8, 0xe7,
	0x19, 0x13, 0x5b, 0x97, 0x05, 0x4e, 0x53, 0x0e, 0xde, 0x56, 0x9d, 0x37, 0xba, 0x71, 0x15, 0x90,
	0x73, 0xf8, 0x35, 0x40, 0x2e, 0x58, 0xec, 0x09, 0x96, 0xc4, 0xf7, 0x24, 0xb6, 0x94, 0xfc, 0xb2,
	0xd7, 0xde, 0xd3, 0xfd, 0x05, 0x7d, 0xfd, 0x15, 0x2f, 0x08, 0xe4, 0x1d, 0xb4, 0xd4, 0x66, 0x14,
	0xfa, 0x54, 0x81, 0xe4, 0x18, 0x7e, 0xde, 0xb7, 0x2f, 0xb9, 0x6d, 0xc9, 0x25, 0x7b, 0xad, 0x52,
	0x30, 0x85, 0x7a, 0x11, 0x1f, 0x27, 0x18, 0x19, 0x93, 0xce, 0xfd, 0x80, 0x95, 0x93, 0x59, 0xd6,
	0xa8, 0xe4, 0x90, 0x33, 0x80, 0x35, 0xc6, 0x98, 0x31, 0xdf, 0x0d, 0x17, 0xce, 0x4a, 0x2a, 0xc8,
	0xb7, 0xaf, 0x64, 0x59, 0xa3, 0x96, 0xe6, 0x5d, 0x2f, 0xc8, 0x93, 0x87, 0x51, 0x36, 0x1f, 0x8f,
	0xf2, 0xa5, 0xe9, 0x18, 0x0f, 0xe2, 0x3c, 0xac, 0xe2, 0x6c, 0x15, 0x67, 0x90, 0x8c, 0x32, 0xd2,
	0x47, 0x3a, 0xd2, 0x50, 0x75, 0x54, 0xac, 0x8f, 0x74, 0xac, 0x3b, 0x3b, 0x5c, 0x46, 0x7b, 0x58,
	0x45, 0xbb, 0xbb, 0xf3, 0xd2, 0xf1, 0x1e, 0x56, 0x91, 0xed, 0x15, 0x63, 0xd0, 0xdf, 0x51, 0xb1,
	0x9d, 0xed, 0xa2, 0xdf, 0xff, 0x7e, 0xe4, 0x24, 0xbd, 0x24, 0x5d, 0xd6, 0xc1, 0x0c, 0x17, 0x2f,
	0xeb, 0x6d, 0xb4, 0x57, 0xb4, 0x71, 0xe7, 0xad, 0xee, 0xbc, 0xe9, 0xa9, 0xfa, 0xc1, 0x55, 0xc7,
	0x02, 0x68, 0x2e, 0x6f, 0x6f, 0x6f, 0x4e, 0x4f, 0xec, 0x5a, 0x55, 0x9f, 0xda, 0x06, 0xb1, 0xa0,
	0x51, 0xd4, 0x73, 0xdb, 0x9c, 0xce, 0xc1, 0xaa, 0x1e, 0x2e, 0xe9, 0x40, 0x8b, 0xe2, 0x87, 0x1c,
	0xb9, 0xb0, 0x6b, 0xa4, 0x0b, 0x6d, 0x8a, 0x3c, 0x4d, 0x62, 0x8e, 0xb6, 0x51, 0xc8, 0x9f, 0x61,
	0xcc, 0x30, 0xb0, 0xcd, 0x77, 0x4d, 0x79, 0xcb, 0x67, 0x5f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xfc,
	0x8d, 0x97, 0xed, 0xa9, 0x05, 0x00, 0x00,
}
  07070100000040000081A4000003E800000064000000015E17A24700002678000000000000000000000000000000000000003D00000000cilium-proxy-20200109/go/cilium/api/accesslog.pb.validate.go  // Code generated by protoc-gen-validate. DO NOT EDIT.
// source: cilium/api/accesslog.proto

package cilium

import (
	"bytes"
	"errors"
	"fmt"
	"net"
	"net/mail"
	"net/url"
	"regexp"
	"strings"
	"time"
	"unicode/utf8"

	"github.com/golang/protobuf/ptypes"
)

// ensure the imports are used
var (
	_ = bytes.MinRead
	_ = errors.New("")
	_ = fmt.Print
	_ = utf8.UTFMax
	_ = (*regexp.Regexp)(nil)
	_ = (*strings.Reader)(nil)
	_ = net.IPv4len
	_ = time.Duration(0)
	_ = (*url.URL)(nil)
	_ = (*mail.Address)(nil)
	_ = ptypes.DynamicAny{}
)

// define the regex for a UUID once up-front
var _accesslog_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")

// Validate checks the field values on KeyValue with the rules defined in the
// proto definition for this message. If any rules are violated, an error is returned.
func (m *KeyValue) Validate() error {
	if m == nil {
		return nil
	}

	// no validation rules for Key

	// no validation rules for Value

	return nil
}

// KeyValueValidationError is the validation error returned by
// KeyValue.Validate if the designated constraints aren't met.
type KeyValueValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e KeyValueValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e KeyValueValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e KeyValueValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e KeyValueValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e KeyValueValidationError) ErrorName() string { return "KeyValueValidationError" }

// Error satisfies the builtin error interface
func (e KeyValueValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sKeyValue.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = KeyValueValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = KeyValueValidationError{}

// Validate checks the field values on HttpLogEntry with the rules defined in
// the proto definition for this message. If any rules are violated, an error
// is returned.
func (m *HttpLogEntry) Validate() error {
	if m == nil {
		return nil
	}

	// no validation rules for HttpProtocol

	// no validation rules for Scheme

	// no validation rules for Host

	// no validation rules for Path

	// no validation rules for Method

	for idx, item := range m.GetHeaders() {
		_, _ = idx, item

		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return HttpLogEntryValidationError{
					field:  fmt.Sprintf("Headers[%v]", idx),
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	}

	// no validation rules for Status

	for idx, item := range m.GetMissingHeaders() {
		_, _ = idx, item

		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return HttpLogEntryValidationError{
					field:  fmt.Sprintf("MissingHeaders[%v]", idx),
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	}

	for idx, item := range m.GetRejectedHeaders() {
		_, _ = idx, item

		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return HttpLogEntryValidationError{
					field:  fmt.Sprintf("RejectedHeaders[%v]", idx),
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	}

	return nil
}

// HttpLogEntryValidationError is the validation error returned by
// HttpLogEntry.Validate if the designated constraints aren't met.
type HttpLogEntryValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e HttpLogEntryValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e HttpLogEntryValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e HttpLogEntryValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e HttpLogEntryValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e HttpLogEntryValidationError) ErrorName() string { return "HttpLogEntryValidationError" }

// Error satisfies the builtin error interface
func (e HttpLogEntryValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sHttpLogEntry.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = HttpLogEntryValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = HttpLogEntryValidationError{}

// Validate checks the field values on L7LogEntry with the rules defined in the
// proto definition for this message. If any rules are violated, an error is returned.
func (m *L7LogEntry) Validate() error {
	if m == nil {
		return nil
	}

	// no validation rules for Proto

	// no validation rules for Fields

	return nil
}

// L7LogEntryValidationError is the validation error returned by
// L7LogEntry.Validate if the designated constraints aren't met.
type L7LogEntryValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e L7LogEntryValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e L7LogEntryValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e L7LogEntryValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e L7LogEntryValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e L7LogEntryValidationError) ErrorName() string { return "L7LogEntryValidationError" }

// Error satisfies the builtin error interface
func (e L7LogEntryValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sL7LogEntry.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = L7LogEntryValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = L7LogEntryValidationError{}

// Validate checks the field values on LogEntry with the rules defined in the
// proto definition for this message. If any rules are violated, an error is returned.
func (m *LogEntry) Validate() error {
	if m == nil {
		return nil
	}

	// no validation rules for Timestamp

	// no validation rules for IsIngress

	// no validation rules for EntryType

	// no validation rules for PolicyName

	// no validation rules for CiliumRuleRef

	// no validation rules for SourceSecurityId

	// no validation rules for DestinationSecurityId

	// no validation rules for SourceAddress

	// no validation rules for DestinationAddress

	// no validation rules for HttpProtocol

	// no validation rules for Scheme

	// no validation rules for Host

	// no validation rules for Path

	// no validation rules for Method

	// no validation rules for Status

	for idx, item := range m.GetHeaders() {
		_, _ = idx, item

		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return LogEntryValidationError{
					field:  fmt.Sprintf("Headers[%v]", idx),
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	}

	switch m.L7.(type) {

	case *LogEntry_Http:

		if v, ok := interface{}(m.GetHttp()).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return LogEntryValidationError{
					field:  "Http",
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	case *LogEntry_GenericL7:

		if v, ok := interface{}(m.GetGenericL7()).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return LogEntryValidationError{
					field:  "GenericL7",
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	}

	return nil
}

// LogEntryValidationError is the validation error returned by
// LogEntry.Validate if the designated constraints aren't met.
type LogEntryValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e LogEntryValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e LogEntryValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e LogEntryValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e LogEntryValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e LogEntryValidationError) ErrorName() string { return "LogEntryValidationError" }

// Error satisfies the builtin error interface
func (e LogEntryValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sLogEntry.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = LogEntryValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = LogEntryValidationError{}
07070100000041000081A4000003E800000064000000015E17A24700001069000000000000000000000000000000000000003700000000cilium-proxy-20200109/go/cilium/api/bpf_metadata.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: cilium/api/bpf_metadata.proto

package cilium

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type BpfMetadata struct {
	// File system root for bpf. Defaults to "/sys/fs/bpf" if left empty.
	BpfRoot string `protobuf:"bytes,1,opt,name=bpf_root,json=bpfRoot,proto3" json:"bpf_root,omitempty"`
	// 'true' if the filter is on ingress listener, 'false' for egress listener.
	IsIngress bool `protobuf:"varint,2,opt,name=is_ingress,json=isIngress,proto3" json:"is_ingress,omitempty"`
	// Use of the original source address requires kernel datapath support which may or may not be available.
	// 'true' if original source address functionality is availeble. Original source address use may still be
	// skipped in scenarios where it is knows to not work.
	MayUseOriginalSourceAddress bool     `protobuf:"varint,3,opt,name=may_use_original_source_address,json=mayUseOriginalSourceAddress,proto3" json:"may_use_original_source_address,omitempty"`
	XXX_NoUnkeyedLiteral        struct{} `json:"-"`
	XXX_unrecognized            []byte   `json:"-"`
	XXX_sizecache               int32    `json:"-"`
}

func (m *BpfMetadata) Reset()         { *m = BpfMetadata{} }
func (m *BpfMetadata) String() string { return proto.CompactTextString(m) }
func (*BpfMetadata) ProtoMessage()    {}
func (*BpfMetadata) Descriptor() ([]byte, []int) {
	return fileDescriptor_256f93d6d89d2f91, []int{0}
}

func (m *BpfMetadata) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_BpfMetadata.Unmarshal(m, b)
}
func (m *BpfMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_BpfMetadata.Marshal(b, m, deterministic)
}
func (m *BpfMetadata) XXX_Merge(src proto.Message) {
	xxx_messageInfo_BpfMetadata.Merge(m, src)
}
func (m *BpfMetadata) XXX_Size() int {
	return xxx_messageInfo_BpfMetadata.Size(m)
}
func (m *BpfMetadata) XXX_DiscardUnknown() {
	xxx_messageInfo_BpfMetadata.DiscardUnknown(m)
}

var xxx_messageInfo_BpfMetadata proto.InternalMessageInfo

func (m *BpfMetadata) GetBpfRoot() string {
	if m != nil {
		return m.BpfRoot
	}
	return ""
}

func (m *BpfMetadata) GetIsIngress() bool {
	if m != nil {
		return m.IsIngress
	}
	return false
}

func (m *BpfMetadata) GetMayUseOriginalSourceAddress() bool {
	if m != nil {
		return m.MayUseOriginalSourceAddress
	}
	return false
}

func init() {
	proto.RegisterType((*BpfMetadata)(nil), "cilium.BpfMetadata")
}

func init() { proto.RegisterFile("cilium/api/bpf_metadata.proto", fileDescriptor_256f93d6d89d2f91) }

var fileDescriptor_256f93d6d89d2f91 = []byte{
	// 179 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4d, 0xce, 0xcc, 0xc9,
	0x2c, 0xcd, 0xd5, 0x4f, 0x2c, 0xc8, 0xd4, 0x4f, 0x2a, 0x48, 0x8b, 0xcf, 0x4d, 0x2d, 0x49, 0x4c,
	0x49, 0x2c, 0x49, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x83, 0x48, 0x2b, 0xf5, 0x32,
	0x72, 0x71, 0x3b, 0x15, 0xa4, 0xf9, 0x42, 0x65, 0x85, 0x24, 0xb9, 0x38, 0x40, 0xaa, 0x8b, 0xf2,
	0xf3, 0x4b, 0x24, 0x18, 0x15, 0x18, 0x35, 0x38, 0x83, 0xd8, 0x93, 0x0a, 0xd2, 0x82, 0xf2, 0xf3,
	0x4b, 0x84, 0x64, 0xb9, 0xb8, 0x32, 0x8b, 0xe3, 0x33, 0xf3, 0xd2, 0x8b, 0x52, 0x8b, 0x8b, 0x25,
	0x98, 0x14, 0x18, 0x35, 0x38, 0x82, 0x38, 0x33, 0x8b, 0x3d, 0x21, 0x02, 0x42, 0x2e, 0x5c, 0xf2,
	0xb9, 0x89, 0x95, 0xf1, 0xa5, 0xc5, 0xa9, 0xf1, 0xf9, 0x45, 0x99, 0xe9, 0x99, 0x79, 0x89, 0x39,
	0xf1, 0xc5, 0xf9, 0xa5, 0x45, 0xc9, 0xa9, 0xf1, 0x89, 0x29, 0x29, 0x60, 0x3d, 0xcc, 0x60, 0x3d,
	0xd2, 0xb9, 0x89, 0x95, 0xa1, 0xc5, 0xa9, 0xfe, 0x50, 0x45, 0xc1, 0x60, 0x35, 0x8e, 0x10, 0x25,
	0x49, 0x6c, 0x60, 0xe7, 0x19, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xcd, 0x6d, 0xf8, 0x34, 0xbf,
	0x00, 0x00, 0x00,
}
   07070100000042000081A4000003E800000064000000015E17A2470000096F000000000000000000000000000000000000004000000000cilium-proxy-20200109/go/cilium/api/bpf_metadata.pb.validate.go   // Code generated by protoc-gen-validate. DO NOT EDIT.
// source: cilium/api/bpf_metadata.proto

package cilium

import (
	"bytes"
	"errors"
	"fmt"
	"net"
	"net/mail"
	"net/url"
	"regexp"
	"strings"
	"time"
	"unicode/utf8"

	"github.com/golang/protobuf/ptypes"
)

// ensure the imports are used
var (
	_ = bytes.MinRead
	_ = errors.New("")
	_ = fmt.Print
	_ = utf8.UTFMax
	_ = (*regexp.Regexp)(nil)
	_ = (*strings.Reader)(nil)
	_ = net.IPv4len
	_ = time.Duration(0)
	_ = (*url.URL)(nil)
	_ = (*mail.Address)(nil)
	_ = ptypes.DynamicAny{}
)

// define the regex for a UUID once up-front
var _bpf_metadata_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")

// Validate checks the field values on BpfMetadata with the rules defined in
// the proto definition for this message. If any rules are violated, an error
// is returned.
func (m *BpfMetadata) Validate() error {
	if m == nil {
		return nil
	}

	// no validation rules for BpfRoot

	// no validation rules for IsIngress

	// no validation rules for MayUseOriginalSourceAddress

	return nil
}

// BpfMetadataValidationError is the validation error returned by
// BpfMetadata.Validate if the designated constraints aren't met.
type BpfMetadataValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e BpfMetadataValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e BpfMetadataValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e BpfMetadataValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e BpfMetadataValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e BpfMetadataValidationError) ErrorName() string { return "BpfMetadataValidationError" }

// Error satisfies the builtin error interface
func (e BpfMetadataValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sBpfMetadata.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = BpfMetadataValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = BpfMetadataValidationError{}
 07070100000043000081A4000003E800000064000000015E17A247000011EC000000000000000000000000000000000000003300000000cilium-proxy-20200109/go/cilium/api/l7policy.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: cilium/api/l7policy.proto

package cilium

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type L7Policy struct {
	// Path to the unix domain socket for the cilium access log.
	AccessLogPath string `protobuf:"bytes,1,opt,name=access_log_path,json=accessLogPath,proto3" json:"access_log_path,omitempty"`
	// Cilium endpoint security policy to enforce.
	PolicyName string `protobuf:"bytes,2,opt,name=policy_name,json=policyName,proto3" json:"policy_name,omitempty"`
	// HTTP response body message for 403 status code.
	// If empty, "Access denied" will be used.
	Denied_403Body string `protobuf:"bytes,3,opt,name=denied_403_body,json=denied403Body,proto3" json:"denied_403_body,omitempty"`
	// 'true' if the filter is on ingress listener, 'false' for egress listener.
	// Value from the listener filter will be used if not specified here.
	IsIngress            *wrappers.BoolValue `protobuf:"bytes,4,opt,name=is_ingress,json=isIngress,proto3" json:"is_ingress,omitempty"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *L7Policy) Reset()         { *m = L7Policy{} }
func (m *L7Policy) String() string { return proto.CompactTextString(m) }
func (*L7Policy) ProtoMessage()    {}
func (*L7Policy) Descriptor() ([]byte, []int) {
	return fileDescriptor_b0b0655f707d1794, []int{0}
}

func (m *L7Policy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_L7Policy.Unmarshal(m, b)
}
func (m *L7Policy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_L7Policy.Marshal(b, m, deterministic)
}
func (m *L7Policy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_L7Policy.Merge(m, src)
}
func (m *L7Policy) XXX_Size() int {
	return xxx_messageInfo_L7Policy.Size(m)
}
func (m *L7Policy) XXX_DiscardUnknown() {
	xxx_messageInfo_L7Policy.DiscardUnknown(m)
}

var xxx_messageInfo_L7Policy proto.InternalMessageInfo

func (m *L7Policy) GetAccessLogPath() string {
	if m != nil {
		return m.AccessLogPath
	}
	return ""
}

func (m *L7Policy) GetPolicyName() string {
	if m != nil {
		return m.PolicyName
	}
	return ""
}

func (m *L7Policy) GetDenied_403Body() string {
	if m != nil {
		return m.Denied_403Body
	}
	return ""
}

func (m *L7Policy) GetIsIngress() *wrappers.BoolValue {
	if m != nil {
		return m.IsIngress
	}
	return nil
}

func init() {
	proto.RegisterType((*L7Policy)(nil), "cilium.L7Policy")
}

func init() { proto.RegisterFile("cilium/api/l7policy.proto", fileDescriptor_b0b0655f707d1794) }

var fileDescriptor_b0b0655f707d1794 = []byte{
	// 222 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x34, 0x8e, 0x41, 0x4b, 0xc3, 0x40,
	0x10, 0x85, 0x89, 0x4a, 0xb1, 0x5b, 0x44, 0xc8, 0x29, 0xf6, 0xa0, 0xc5, 0x83, 0xf4, 0x94, 0x14,
	0x53, 0x28, 0x5e, 0x7b, 0x13, 0x8a, 0x94, 0x1e, 0xbc, 0x2e, 0x93, 0xec, 0xb8, 0x19, 0xd8, 0x64,
	0x96, 0xdd, 0x04, 0xc9, 0x1f, 0xf3, 0xf7, 0x89, 0x3b, 0x78, 0xfd, 0xde, 0x37, 0x6f, 0x9e, 0x7a,
	0x68, 0xc9, 0xd1, 0xd4, 0x57, 0xe0, 0xa9, 0x72, 0x07, 0xcf, 0x8e, 0xda, 0xb9, 0xf4, 0x81, 0x47,
	0xce, 0x17, 0x12, 0xad, 0x1f, 0x2d, 0xb3, 0x75, 0x58, 0x25, 0xda, 0x4c, 0x5f, 0xd5, 0x77, 0x00,
	0xef, 0x31, 0x44, 0xf1, 0x9e, 0x7f, 0x32, 0x75, 0x7b, 0x3a, 0x9c, 0xd3, 0x69, 0xfe, 0xa2, 0xee,
	0xa1, 0x6d, 0x31, 0x46, 0xed, 0xd8, 0x6a, 0x0f, 0x63, 0x57, 0x64, 0x9b, 0x6c, 0xbb, 0xbc, 0xdc,
	0x09, 0x3e, 0xb1, 0x3d, 0xc3, 0xd8, 0xe5, 0x4f, 0x6a, 0x25, 0xcf, 0xf4, 0x00, 0x3d, 0x16, 0x57,
	0xc9, 0x51, 0x82, 0x3e, 0xa0, 0xc7, 0xbf, 0x22, 0x83, 0x03, 0xa1, 0xd1, 0xfb, 0x5d, 0xad, 0x1b,
	0x36, 0x73, 0x71, 0x2d, 0x45, 0x82, 0xf7, 0xbb, 0xfa, 0xc8, 0x66, 0xce, 0xdf, 0x94, 0xa2, 0xa8,
	0x69, 0xb0, 0x01, 0x63, 0x2c, 0x6e, 0x36, 0xd9, 0x76, 0xf5, 0xba, 0x2e, 0x65, 0x72, 0xf9, 0x3f,
	0xb9, 0x3c, 0x32, 0xbb, 0x4f, 0x70, 0x13, 0x5e, 0x96, 0x14, 0xdf, 0x45, 0x6e, 0x16, 0x29, 0xae,
	0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x30, 0x6d, 0x95, 0xf7, 0x04, 0x01, 0x00, 0x00,
}
07070100000044000081A4000003E800000064000000015E17A24700000A37000000000000000000000000000000000000003C00000000cilium-proxy-20200109/go/cilium/api/l7policy.pb.validate.go   // Code generated by protoc-gen-validate. DO NOT EDIT.
// source: cilium/api/l7policy.proto

package cilium

import (
	"bytes"
	"errors"
	"fmt"
	"net"
	"net/mail"
	"net/url"
	"regexp"
	"strings"
	"time"
	"unicode/utf8"

	"github.com/golang/protobuf/ptypes"
)

// ensure the imports are used
var (
	_ = bytes.MinRead
	_ = errors.New("")
	_ = fmt.Print
	_ = utf8.UTFMax
	_ = (*regexp.Regexp)(nil)
	_ = (*strings.Reader)(nil)
	_ = net.IPv4len
	_ = time.Duration(0)
	_ = (*url.URL)(nil)
	_ = (*mail.Address)(nil)
	_ = ptypes.DynamicAny{}
)

// define the regex for a UUID once up-front
var _l_7_policy_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")

// Validate checks the field values on L7Policy with the rules defined in the
// proto definition for this message. If any rules are violated, an error is returned.
func (m *L7Policy) Validate() error {
	if m == nil {
		return nil
	}

	// no validation rules for AccessLogPath

	// no validation rules for PolicyName

	// no validation rules for Denied_403Body

	if v, ok := interface{}(m.GetIsIngress()).(interface{ Validate() error }); ok {
		if err := v.Validate(); err != nil {
			return L7PolicyValidationError{
				field:  "IsIngress",
				reason: "embedded message failed validation",
				cause:  err,
			}
		}
	}

	return nil
}

// L7PolicyValidationError is the validation error returned by
// L7Policy.Validate if the designated constraints aren't met.
type L7PolicyValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e L7PolicyValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e L7PolicyValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e L7PolicyValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e L7PolicyValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e L7PolicyValidationError) ErrorName() string { return "L7PolicyValidationError" }

// Error satisfies the builtin error interface
func (e L7PolicyValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sL7Policy.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = L7PolicyValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = L7PolicyValidationError{}
 07070100000045000081A4000003E800000064000000015E17A247000011D5000000000000000000000000000000000000003900000000cilium-proxy-20200109/go/cilium/api/network_filter.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: cilium/api/network_filter.proto

package cilium

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type NetworkFilter struct {
	// Path to the proxylib to be opened
	Proxylib string `protobuf:"bytes,1,opt,name=proxylib,proto3" json:"proxylib,omitempty"`
	// Transparent set of parameters provided for proxylib initialization
	ProxylibParams map[string]string `protobuf:"bytes,2,rep,name=proxylib_params,json=proxylibParams,proto3" json:"proxylib_params,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// L7 protocol identifier
	L7Proto string `protobuf:"bytes,3,opt,name=l7_proto,json=l7Proto,proto3" json:"l7_proto,omitempty"`
	// Name of the policy to be enforced
	PolicyName           string   `protobuf:"bytes,4,opt,name=policy_name,json=policyName,proto3" json:"policy_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *NetworkFilter) Reset()         { *m = NetworkFilter{} }
func (m *NetworkFilter) String() string { return proto.CompactTextString(m) }
func (*NetworkFilter) ProtoMessage()    {}
func (*NetworkFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_0bd4806b6c243641, []int{0}
}

func (m *NetworkFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_NetworkFilter.Unmarshal(m, b)
}
func (m *NetworkFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_NetworkFilter.Marshal(b, m, deterministic)
}
func (m *NetworkFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_NetworkFilter.Merge(m, src)
}
func (m *NetworkFilter) XXX_Size() int {
	return xxx_messageInfo_NetworkFilter.Size(m)
}
func (m *NetworkFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_NetworkFilter.DiscardUnknown(m)
}

var xxx_messageInfo_NetworkFilter proto.InternalMessageInfo

func (m *NetworkFilter) GetProxylib() string {
	if m != nil {
		return m.Proxylib
	}
	return ""
}

func (m *NetworkFilter) GetProxylibParams() map[string]string {
	if m != nil {
		return m.ProxylibParams
	}
	return nil
}

func (m *NetworkFilter) GetL7Proto() string {
	if m != nil {
		return m.L7Proto
	}
	return ""
}

func (m *NetworkFilter) GetPolicyName() string {
	if m != nil {
		return m.PolicyName
	}
	return ""
}

func init() {
	proto.RegisterType((*NetworkFilter)(nil), "cilium.NetworkFilter")
	proto.RegisterMapType((map[string]string)(nil), "cilium.NetworkFilter.ProxylibParamsEntry")
}

func init() { proto.RegisterFile("cilium/api/network_filter.proto", fileDescriptor_0bd4806b6c243641) }

var fileDescriptor_0bd4806b6c243641 = []byte{
	// 222 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xce, 0xcc, 0xc9,
	0x2c, 0xcd, 0xd5, 0x4f, 0x2c, 0xc8, 0xd4, 0xcf, 0x4b, 0x2d, 0x29, 0xcf, 0x2f, 0xca, 0x8e, 0x4f,
	0xcb, 0xcc, 0x29, 0x49, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x83, 0x28, 0x50,
	0xfa, 0xc7, 0xc8, 0xc5, 0xeb, 0x07, 0x51, 0xe0, 0x06, 0x96, 0x17, 0x92, 0xe2, 0xe2, 0x28, 0x28,
	0xca, 0xaf, 0xa8, 0xcc, 0xc9, 0x4c, 0x92, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x0c, 0x82, 0xf3, 0x85,
	0x82, 0xb8, 0xf8, 0x61, 0xec, 0xf8, 0x82, 0xc4, 0xa2, 0xc4, 0xdc, 0x62, 0x09, 0x26, 0x05, 0x66,
	0x0d, 0x6e, 0x23, 0x4d, 0x3d, 0x88, 0x79, 0x7a, 0x28, 0x66, 0xe9, 0x05, 0x40, 0x15, 0x07, 0x80,
	0xd5, 0xba, 0xe6, 0x95, 0x14, 0x55, 0x06, 0xf1, 0x15, 0xa0, 0x08, 0x0a, 0x49, 0x72, 0x71, 0xe4,
	0x98, 0xc7, 0x83, 0x5d, 0x25, 0xc1, 0x0c, 0xb6, 0x8f, 0x3d, 0xc7, 0x3c, 0x00, 0xec, 0x48, 0x79,
	0x2e, 0xee, 0x82, 0xfc, 0x9c, 0xcc, 0xe4, 0xca, 0xf8, 0xbc, 0xc4, 0xdc, 0x54, 0x09, 0x16, 0xb0,
	0x2c, 0x17, 0x44, 0xc8, 0x2f, 0x31, 0x37, 0x55, 0xca, 0x91, 0x4b, 0x18, 0x8b, 0x15, 0x42, 0x02,
	0x5c, 0xcc, 0xd9, 0xa9, 0x95, 0x50, 0xd7, 0x83, 0x98, 0x42, 0x22, 0x5c, 0xac, 0x65, 0x89, 0x39,
	0xa5, 0xa9, 0x12, 0x4c, 0x60, 0x31, 0x08, 0xc7, 0x8a, 0xc9, 0x82, 0x31, 0x89, 0x0d, 0x6c, 0xb3,
	0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x3c, 0x11, 0x06, 0xaa, 0x32, 0x01, 0x00, 0x00,
}
   07070100000046000081A4000003E800000064000000015E17A247000009AB000000000000000000000000000000000000004200000000cilium-proxy-20200109/go/cilium/api/network_filter.pb.validate.go // Code generated by protoc-gen-validate. DO NOT EDIT.
// source: cilium/api/network_filter.proto

package cilium

import (
	"bytes"
	"errors"
	"fmt"
	"net"
	"net/mail"
	"net/url"
	"regexp"
	"strings"
	"time"
	"unicode/utf8"

	"github.com/golang/protobuf/ptypes"
)

// ensure the imports are used
var (
	_ = bytes.MinRead
	_ = errors.New("")
	_ = fmt.Print
	_ = utf8.UTFMax
	_ = (*regexp.Regexp)(nil)
	_ = (*strings.Reader)(nil)
	_ = net.IPv4len
	_ = time.Duration(0)
	_ = (*url.URL)(nil)
	_ = (*mail.Address)(nil)
	_ = ptypes.DynamicAny{}
)

// define the regex for a UUID once up-front
var _network_filter_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")

// Validate checks the field values on NetworkFilter with the rules defined in
// the proto definition for this message. If any rules are violated, an error
// is returned.
func (m *NetworkFilter) Validate() error {
	if m == nil {
		return nil
	}

	// no validation rules for Proxylib

	// no validation rules for ProxylibParams

	// no validation rules for L7Proto

	// no validation rules for PolicyName

	return nil
}

// NetworkFilterValidationError is the validation error returned by
// NetworkFilter.Validate if the designated constraints aren't met.
type NetworkFilterValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e NetworkFilterValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e NetworkFilterValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e NetworkFilterValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e NetworkFilterValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e NetworkFilterValidationError) ErrorName() string { return "NetworkFilterValidationError" }

// Error satisfies the builtin error interface
func (e NetworkFilterValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sNetworkFilter.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = NetworkFilterValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = NetworkFilterValidationError{}
 07070100000047000081A4000003E800000064000000015E17A2470000B0EE000000000000000000000000000000000000002F00000000cilium-proxy-20200109/go/cilium/api/npds.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: cilium/api/npds.proto

package cilium

import (
	context "context"
	fmt "fmt"
	v2 "github.com/cilium/proxy/go/envoy/api/v2"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	route "github.com/cilium/proxy/go/envoy/api/v2/route"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Action specifies what to do when the header matches.
type HeaderMatch_MatchAction int32

const (
	HeaderMatch_CONTINUE_ON_MATCH HeaderMatch_MatchAction = 0
	HeaderMatch_FAIL_ON_MATCH     HeaderMatch_MatchAction = 1
	HeaderMatch_DELETE_ON_MATCH   HeaderMatch_MatchAction = 2
)

var HeaderMatch_MatchAction_name = map[int32]string{
	0: "CONTINUE_ON_MATCH",
	1: "FAIL_ON_MATCH",
	2: "DELETE_ON_MATCH",
}

var HeaderMatch_MatchAction_value = map[string]int32{
	"CONTINUE_ON_MATCH": 0,
	"FAIL_ON_MATCH":     1,
	"DELETE_ON_MATCH":   2,
}

func (x HeaderMatch_MatchAction) String() string {
	return proto.EnumName(HeaderMatch_MatchAction_name, int32(x))
}

func (HeaderMatch_MatchAction) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_c04d25916f7381d1, []int{5, 0}
}

type HeaderMatch_MismatchAction int32

const (
	HeaderMatch_FAIL_ON_MISMATCH     HeaderMatch_MismatchAction = 0
	HeaderMatch_CONTINUE_ON_MISMATCH HeaderMatch_MismatchAction = 1
	HeaderMatch_ADD_ON_MISMATCH      HeaderMatch_MismatchAction = 2
	HeaderMatch_DELETE_ON_MISMATCH   HeaderMatch_MismatchAction = 3
	HeaderMatch_REPLACE_ON_MISMATCH  HeaderMatch_MismatchAction = 4
)

var HeaderMatch_MismatchAction_name = map[int32]string{
	0: "FAIL_ON_MISMATCH",
	1: "CONTINUE_ON_MISMATCH",
	2: "ADD_ON_MISMATCH",
	3: "DELETE_ON_MISMATCH",
	4: "REPLACE_ON_MISMATCH",
}

var HeaderMatch_MismatchAction_value = map[string]int32{
	"FAIL_ON_MISMATCH":     0,
	"CONTINUE_ON_MISMATCH": 1,
	"ADD_ON_MISMATCH":      2,
	"DELETE_ON_MISMATCH":   3,
	"REPLACE_ON_MISMATCH":  4,
}

func (x HeaderMatch_MismatchAction) String() string {
	return proto.EnumName(HeaderMatch_MismatchAction_name, int32(x))
}

func (HeaderMatch_MismatchAction) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_c04d25916f7381d1, []int{5, 1}
}

// A network policy that is enforced by a filter on the network flows to/from
// associated hosts.
type NetworkPolicy struct {
	// The unique identifier of the network policy.
	// Required.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The policy identifier associated with the network policy. Corresponds to
	// remote_policies entries in PortNetworkPolicyRule.
	// Required.
	Policy uint64 `protobuf:"varint,2,opt,name=policy,proto3" json:"policy,omitempty"`
	// The part of the policy to be enforced at ingress by the filter, as a set
	// of per-port network policies, one per destination L4 port.
	// Every PortNetworkPolicy element in this set has a unique port / protocol
	// combination.
	// Optional. If empty, all flows in this direction are denied.
	IngressPerPortPolicies []*PortNetworkPolicy `protobuf:"bytes,3,rep,name=ingress_per_port_policies,json=ingressPerPortPolicies,proto3" json:"ingress_per_port_policies,omitempty"`
	// The part of the policy to be enforced at egress by the filter, as a set
	// of per-port network policies, one per destination L4 port.
	// Every PortNetworkPolicy element in this set has a unique port / protocol
	// combination.
	// Optional. If empty, all flows in this direction are denied.
	EgressPerPortPolicies []*PortNetworkPolicy `protobuf:"bytes,4,rep,name=egress_per_port_policies,json=egressPerPortPolicies,proto3" json:"egress_per_port_policies,omitempty"`
	// Name of the conntrack map to use with this policy.
	// The paths to various Cilium conntrack maps are derived using this name.
	// Optional. If empty, proxymap lookup is used instead of conntrack map.
	ConntrackMapName     string   `protobuf:"bytes,5,opt,name=conntrack_map_name,json=conntrackMapName,proto3" json:"conntrack_map_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *NetworkPolicy) Reset()         { *m = NetworkPolicy{} }
func (m *NetworkPolicy) String() string { return proto.CompactTextString(m) }
func (*NetworkPolicy) ProtoMessage()    {}
func (*NetworkPolicy) Descriptor() ([]byte, []int) {
	return fileDescriptor_c04d25916f7381d1, []int{0}
}

func (m *NetworkPolicy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_NetworkPolicy.Unmarshal(m, b)
}
func (m *NetworkPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_NetworkPolicy.Marshal(b, m, deterministic)
}
func (m *NetworkPolicy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_NetworkPolicy.Merge(m, src)
}
func (m *NetworkPolicy) XXX_Size() int {
	return xxx_messageInfo_NetworkPolicy.Size(m)
}
func (m *NetworkPolicy) XXX_DiscardUnknown() {
	xxx_messageInfo_NetworkPolicy.DiscardUnknown(m)
}

var xxx_messageInfo_NetworkPolicy proto.InternalMessageInfo

func (m *NetworkPolicy) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *NetworkPolicy) GetPolicy() uint64 {
	if m != nil {
		return m.Policy
	}
	return 0
}

func (m *NetworkPolicy) GetIngressPerPortPolicies() []*PortNetworkPolicy {
	if m != nil {
		return m.IngressPerPortPolicies
	}
	return nil
}

func (m *NetworkPolicy) GetEgressPerPortPolicies() []*PortNetworkPolicy {
	if m != nil {
		return m.EgressPerPortPolicies
	}
	return nil
}

func (m *NetworkPolicy) GetConntrackMapName() string {
	if m != nil {
		return m.ConntrackMapName
	}
	return ""
}

// A network policy to whitelist flows to a specific destination L4 port,
// as a conjunction of predicates on L3/L4/L7 flows.
// If all the predicates of a policy match a flow, the flow is whitelisted.
type PortNetworkPolicy struct {
	// The flows' destination L4 port number, as an unsigned 16-bit integer.
	// If 0, all destination L4 port numbers are matched by this predicate.
	Port uint32 `protobuf:"varint,1,opt,name=port,proto3" json:"port,omitempty"`
	// The flows' L4 transport protocol.
	// Required.
	Protocol core.SocketAddress_Protocol `protobuf:"varint,2,opt,name=protocol,proto3,enum=envoy.api.v2.core.SocketAddress_Protocol" json:"protocol,omitempty"`
	// The network policy rules to be enforced on the flows to the port.
	// Optional. A flow is matched by this predicate if either the set of
	// rules is empty or any of the rules matches it.
	Rules                []*PortNetworkPolicyRule `protobuf:"bytes,3,rep,name=rules,proto3" json:"rules,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
	XXX_unrecognized     []byte                   `json:"-"`
	XXX_sizecache        int32                    `json:"-"`
}

func (m *PortNetworkPolicy) Reset()         { *m = PortNetworkPolicy{} }
func (m *PortNetworkPolicy) String() string { return proto.CompactTextString(m) }
func (*PortNetworkPolicy) ProtoMessage()    {}
func (*PortNetworkPolicy) Descriptor() ([]byte, []int) {
	return fileDescriptor_c04d25916f7381d1, []int{1}
}

func (m *PortNetworkPolicy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_PortNetworkPolicy.Unmarshal(m, b)
}
func (m *PortNetworkPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_PortNetworkPolicy.Marshal(b, m, deterministic)
}
func (m *PortNetworkPolicy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_PortNetworkPolicy.Merge(m, src)
}
func (m *PortNetworkPolicy) XXX_Size() int {
	return xxx_messageInfo_PortNetworkPolicy.Size(m)
}
func (m *PortNetworkPolicy) XXX_DiscardUnknown() {
	xxx_messageInfo_PortNetworkPolicy.DiscardUnknown(m)
}

var xxx_messageInfo_PortNetworkPolicy proto.InternalMessageInfo

func (m *PortNetworkPolicy) GetPort() uint32 {
	if m != nil {
		return m.Port
	}
	return 0
}

func (m *PortNetworkPolicy) GetProtocol() core.SocketAddress_Protocol {
	if m != nil {
		return m.Protocol
	}
	return core.SocketAddress_TCP
}

func (m *PortNetworkPolicy) GetRules() []*PortNetworkPolicyRule {
	if m != nil {
		return m.Rules
	}
	return nil
}

type TLSContext struct {
	// CA certificates. If present, the counterparty must provide a valid certificate.
	TrustedCa string `protobuf:"bytes,1,opt,name=trusted_ca,json=trustedCa,proto3" json:"trusted_ca,omitempty"`
	// Certificate chain
	CertificateChain string `protobuf:"bytes,2,opt,name=certificate_chain,json=certificateChain,proto3" json:"certificate_chain,omitempty"`
	// Private key
	PrivateKey string `protobuf:"bytes,3,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"`
	// Server Name Indicator. For downstream this helps choose the certificate to present to the client.
	// For upstream this will be used as the SNI on the client connection.
	ServerNames          []string `protobuf:"bytes,4,rep,name=server_names,json=serverNames,proto3" json:"server_names,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *TLSContext) Reset()         { *m = TLSContext{} }
func (m *TLSContext) String() string { return proto.CompactTextString(m) }
func (*TLSContext) ProtoMessage()    {}
func (*TLSContext) Descriptor() ([]byte, []int) {
	return fileDescriptor_c04d25916f7381d1, []int{2}
}

func (m *TLSContext) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TLSContext.Unmarshal(m, b)
}
func (m *TLSContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TLSContext.Marshal(b, m, deterministic)
}
func (m *TLSContext) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TLSContext.Merge(m, src)
}
func (m *TLSContext) XXX_Size() int {
	return xxx_messageInfo_TLSContext.Size(m)
}
func (m *TLSContext) XXX_DiscardUnknown() {
	xxx_messageInfo_TLSContext.DiscardUnknown(m)
}

var xxx_messageInfo_TLSContext proto.InternalMessageInfo

func (m *TLSContext) GetTrustedCa() string {
	if m != nil {
		return m.TrustedCa
	}
	return ""
}

func (m *TLSContext) GetCertificateChain() string {
	if m != nil {
		return m.CertificateChain
	}
	return ""
}

func (m *TLSContext) GetPrivateKey() string {
	if m != nil {
		return m.PrivateKey
	}
	return ""
}

func (m *TLSContext) GetServerNames() []string {
	if m != nil {
		return m.ServerNames
	}
	return nil
}

// A network policy rule, as a conjunction of predicates on L3/L7 flows.
// If all the predicates of a rule match a flow, the flow is matched by the
// rule.
type PortNetworkPolicyRule struct {
	// The set of identifiers of policies of remote hosts.
	// A flow is matched by this predicate if the identifier of the policy
	// applied on the flow's remote host is contained in this set.
	// Optional. If not specified, any remote host is matched by this predicate.
	RemotePolicies []uint64 `protobuf:"varint,1,rep,packed,name=remote_policies,json=remotePolicies,proto3" json:"remote_policies,omitempty"`
	// Optional downstream TLS context. If present, the incoming connection must be a TLS connection.
	DownstreamTlsContext *TLSContext `protobuf:"bytes,3,opt,name=downstream_tls_context,json=downstreamTlsContext,proto3" json:"downstream_tls_context,omitempty"`
	// Optional upstream TLS context. If present, the outgoing connection will use TLS.
	UpstreamTlsContext *TLSContext `protobuf:"bytes,4,opt,name=upstream_tls_context,json=upstreamTlsContext,proto3" json:"upstream_tls_context,omitempty"`
	// Optional L7 protocol parser name. This is only used if the parser is not
	// one of the well knows ones. If specified, the l7 parser having this name
	// needs to be built in to libcilium.so.
	L7Proto string `protobuf:"bytes,2,opt,name=l7_proto,json=l7Proto,proto3" json:"l7_proto,omitempty"`
	// Optional. If not specified, any L7 request is matched by this predicate.
	// All rules on any given port must have the same type of L7 rules!
	//
	// Types that are valid to be assigned to L7:
	//	*PortNetworkPolicyRule_HttpRules
	//	*PortNetworkPolicyRule_KafkaRules
	//	*PortNetworkPolicyRule_L7Rules
	L7                   isPortNetworkPolicyRule_L7 `protobuf_oneof:"l7"`
	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
	XXX_unrecognized     []byte                     `json:"-"`
	XXX_sizecache        int32                      `json:"-"`
}

func (m *PortNetworkPolicyRule) Reset()         { *m = PortNetworkPolicyRule{} }
func (m *PortNetworkPolicyRule) String() string { return proto.CompactTextString(m) }
func (*PortNetworkPolicyRule) ProtoMessage()    {}
func (*PortNetworkPolicyRule) Descriptor() ([]byte, []int) {
	return fileDescriptor_c04d25916f7381d1, []int{3}
}

func (m *PortNetworkPolicyRule) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_PortNetworkPolicyRule.Unmarshal(m, b)
}
func (m *PortNetworkPolicyRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_PortNetworkPolicyRule.Marshal(b, m, deterministic)
}
func (m *PortNetworkPolicyRule) XXX_Merge(src proto.Message) {
	xxx_messageInfo_PortNetworkPolicyRule.Merge(m, src)
}
func (m *PortNetworkPolicyRule) XXX_Size() int {
	return xxx_messageInfo_PortNetworkPolicyRule.Size(m)
}
func (m *PortNetworkPolicyRule) XXX_DiscardUnknown() {
	xxx_messageInfo_PortNetworkPolicyRule.DiscardUnknown(m)
}

var xxx_messageInfo_PortNetworkPolicyRule proto.InternalMessageInfo

func (m *PortNetworkPolicyRule) GetRemotePolicies() []uint64 {
	if m != nil {
		return m.RemotePolicies
	}
	return nil
}

func (m *PortNetworkPolicyRule) GetDownstreamTlsContext() *TLSContext {
	if m != nil {
		return m.DownstreamTlsContext
	}
	return nil
}

func (m *PortNetworkPolicyRule) GetUpstreamTlsContext() *TLSContext {
	if m != nil {
		return m.UpstreamTlsContext
	}
	return nil
}

func (m *PortNetworkPolicyRule) GetL7Proto() string {
	if m != nil {
		return m.L7Proto
	}
	return ""
}

type isPortNetworkPolicyRule_L7 interface {
	isPortNetworkPolicyRule_L7()
}

type PortNetworkPolicyRule_HttpRules struct {
	HttpRules *HttpNetworkPolicyRules `protobuf:"bytes,100,opt,name=http_rules,json=httpRules,proto3,oneof"`
}

type PortNetworkPolicyRule_KafkaRules struct {
	KafkaRules *KafkaNetworkPolicyRules `protobuf:"bytes,101,opt,name=kafka_rules,json=kafkaRules,proto3,oneof"`
}

type PortNetworkPolicyRule_L7Rules struct {
	L7Rules *L7NetworkPolicyRules `protobuf:"bytes,102,opt,name=l7_rules,json=l7Rules,proto3,oneof"`
}

func (*PortNetworkPolicyRule_HttpRules) isPortNetworkPolicyRule_L7() {}

func (*PortNetworkPolicyRule_KafkaRules) isPortNetworkPolicyRule_L7() {}

func (*PortNetworkPolicyRule_L7Rules) isPortNetworkPolicyRule_L7() {}

func (m *PortNetworkPolicyRule) GetL7() isPortNetworkPolicyRule_L7 {
	if m != nil {
		return m.L7
	}
	return nil
}

func (m *PortNetworkPolicyRule) GetHttpRules() *HttpNetworkPolicyRules {
	if x, ok := m.GetL7().(*PortNetworkPolicyRule_HttpRules); ok {
		return x.HttpRules
	}
	return nil
}

func (m *PortNetworkPolicyRule) GetKafkaRules() *KafkaNetworkPolicyRules {
	if x, ok := m.GetL7().(*PortNetworkPolicyRule_KafkaRules); ok {
		return x.KafkaRules
	}
	return nil
}

func (m *PortNetworkPolicyRule) GetL7Rules() *L7NetworkPolicyRules {
	if x, ok := m.GetL7().(*PortNetworkPolicyRule_L7Rules); ok {
		return x.L7Rules
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*PortNetworkPolicyRule) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*PortNetworkPolicyRule_HttpRules)(nil),
		(*PortNetworkPolicyRule_KafkaRules)(nil),
		(*PortNetworkPolicyRule_L7Rules)(nil),
	}
}

// A set of network policy rules that match HTTP requests.
type HttpNetworkPolicyRules struct {
	// The set of HTTP network policy rules.
	// An HTTP request is matched if any of its rules matches the request.
	// Required and may not be empty.
	HttpRules            []*HttpNetworkPolicyRule `protobuf:"bytes,1,rep,name=http_rules,json=httpRules,proto3" json:"http_rules,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
	XXX_unrecognized     []byte                   `json:"-"`
	XXX_sizecache        int32                    `json:"-"`
}

func (m *HttpNetworkPolicyRules) Reset()         { *m = HttpNetworkPolicyRules{} }
func (m *HttpNetworkPolicyRules) String() string { return proto.CompactTextString(m) }
func (*HttpNetworkPolicyRules) ProtoMessage()    {}
func (*HttpNetworkPolicyRules) Descriptor() ([]byte, []int) {
	return fileDescriptor_c04d25916f7381d1, []int{4}
}

func (m *HttpNetworkPolicyRules) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpNetworkPolicyRules.Unmarshal(m, b)
}
func (m *HttpNetworkPolicyRules) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpNetworkPolicyRules.Marshal(b, m, deterministic)
}
func (m *HttpNetworkPolicyRules) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpNetworkPolicyRules.Merge(m, src)
}
func (m *HttpNetworkPolicyRules) XXX_Size() int {
	return xxx_messageInfo_HttpNetworkPolicyRules.Size(m)
}
func (m *HttpNetworkPolicyRules) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpNetworkPolicyRules.DiscardUnknown(m)
}

var xxx_messageInfo_HttpNetworkPolicyRules proto.InternalMessageInfo

func (m *HttpNetworkPolicyRules) GetHttpRules() []*HttpNetworkPolicyRule {
	if m != nil {
		return m.HttpRules
	}
	return nil
}

type HeaderMatch struct {
	Name                 string                     `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Value                string                     `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
	MatchAction          HeaderMatch_MatchAction    `protobuf:"varint,3,opt,name=match_action,json=matchAction,proto3,enum=cilium.HeaderMatch_MatchAction" json:"match_action,omitempty"`
	MismatchAction       HeaderMatch_MismatchAction `protobuf:"varint,4,opt,name=mismatch_action,json=mismatchAction,proto3,enum=cilium.HeaderMatch_MismatchAction" json:"mismatch_action,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
	XXX_unrecognized     []byte                     `json:"-"`
	XXX_sizecache        int32                      `json:"-"`
}

func (m *HeaderMatch) Reset()         { *m = HeaderMatch{} }
func (m *HeaderMatch) String() string { return proto.CompactTextString(m) }
func (*HeaderMatch) ProtoMessage()    {}
func (*HeaderMatch) Descriptor() ([]byte, []int) {
	return fileDescriptor_c04d25916f7381d1, []int{5}
}

func (m *HeaderMatch) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HeaderMatch.Unmarshal(m, b)
}
func (m *HeaderMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HeaderMatch.Marshal(b, m, deterministic)
}
func (m *HeaderMatch) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HeaderMatch.Merge(m, src)
}
func (m *HeaderMatch) XXX_Size() int {
	return xxx_messageInfo_HeaderMatch.Size(m)
}
func (m *HeaderMatch) XXX_DiscardUnknown() {
	xxx_messageInfo_HeaderMatch.DiscardUnknown(m)
}

var xxx_messageInfo_HeaderMatch proto.InternalMessageInfo

func (m *HeaderMatch) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *HeaderMatch) GetValue() string {
	if m != nil {
		return m.Value
	}
	return ""
}

func (m *HeaderMatch) GetMatchAction() HeaderMatch_MatchAction {
	if m != nil {
		return m.MatchAction
	}
	return HeaderMatch_CONTINUE_ON_MATCH
}

func (m *HeaderMatch) GetMismatchAction() HeaderMatch_MismatchAction {
	if m != nil {
		return m.MismatchAction
	}
	return HeaderMatch_FAIL_ON_MISMATCH
}

// An HTTP network policy rule, as a conjunction of predicates on HTTP requests.
// If all the predicates of a rule match an HTTP request, the request is allowed. Otherwise, it is
// denied.
type HttpNetworkPolicyRule struct {
	// A set of matchers on the HTTP request's headers' names and values.
	// If all the matchers in this set match an HTTP request, the request is allowed by this rule.
	// Otherwise, it is denied.
	//
	// Some special header names are:
	//
	// * *:uri*: The HTTP request's URI.
	// * *:method*: The HTTP request's method.
	// * *:authority*: Also maps to the HTTP 1.1 *Host* header.
	//
	// Optional. If empty, matches any HTTP request.
	Headers []*route.HeaderMatcher `protobuf:"bytes,1,rep,name=headers,proto3" json:"headers,omitempty"`
	// header_matches is a set of HTTP header name and value pairs that
	// will be matched against the request headers, if all the other match requirements
	// in 'headers' are met. Each HeaderAction determines what to do when there is a match
	// or mismatch.
	//
	// Optional.
	HeaderMatches        []*HeaderMatch `protobuf:"bytes,2,rep,name=header_matches,json=headerMatches,proto3" json:"header_matches,omitempty"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

func (m *HttpNetworkPolicyRule) Reset()         { *m = HttpNetworkPolicyRule{} }
func (m *HttpNetworkPolicyRule) String() string { return proto.CompactTextString(m) }
func (*HttpNetworkPolicyRule) ProtoMessage()    {}
func (*HttpNetworkPolicyRule) Descriptor() ([]byte, []int) {
	return fileDescriptor_c04d25916f7381d1, []int{6}
}

func (m *HttpNetworkPolicyRule) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpNetworkPolicyRule.Unmarshal(m, b)
}
func (m *HttpNetworkPolicyRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpNetworkPolicyRule.Marshal(b, m, deterministic)
}
func (m *HttpNetworkPolicyRule) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpNetworkPolicyRule.Merge(m, src)
}
func (m *HttpNetworkPolicyRule) XXX_Size() int {
	return xxx_messageInfo_HttpNetworkPolicyRule.Size(m)
}
func (m *HttpNetworkPolicyRule) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpNetworkPolicyRule.DiscardUnknown(m)
}

var xxx_messageInfo_HttpNetworkPolicyRule proto.InternalMessageInfo

func (m *HttpNetworkPolicyRule) GetHeaders() []*route.HeaderMatcher {
	if m != nil {
		return m.Headers
	}
	return nil
}

func (m *HttpNetworkPolicyRule) GetHeaderMatches() []*HeaderMatch {
	if m != nil {
		return m.HeaderMatches
	}
	return nil
}

// A set of network policy rules that match Kafka requests.
type KafkaNetworkPolicyRules struct {
	// The set of Kafka network policy rules.
	// A Kafka request is matched if any of its rules matches the request.
	// Required and may not be empty.
	KafkaRules           []*KafkaNetworkPolicyRule `protobuf:"bytes,1,rep,name=kafka_rules,json=kafkaRules,proto3" json:"kafka_rules,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
	XXX_unrecognized     []byte                    `json:"-"`
	XXX_sizecache        int32                     `json:"-"`
}

func (m *KafkaNetworkPolicyRules) Reset()         { *m = KafkaNetworkPolicyRules{} }
func (m *KafkaNetworkPolicyRules) String() string { return proto.CompactTextString(m) }
func (*KafkaNetworkPolicyRules) ProtoMessage()    {}
func (*KafkaNetworkPolicyRules) Descriptor() ([]byte, []int) {
	return fileDescriptor_c04d25916f7381d1, []int{7}
}

func (m *KafkaNetworkPolicyRules) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_KafkaNetworkPolicyRules.Unmarshal(m, b)
}
func (m *KafkaNetworkPolicyRules) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_KafkaNetworkPolicyRules.Marshal(b, m, deterministic)
}
func (m *KafkaNetworkPolicyRules) XXX_Merge(src proto.Message) {
	xxx_messageInfo_KafkaNetworkPolicyRules.Merge(m, src)
}
func (m *KafkaNetworkPolicyRules) XXX_Size() int {
	return xxx_messageInfo_KafkaNetworkPolicyRules.Size(m)
}
func (m *KafkaNetworkPolicyRules) XXX_DiscardUnknown() {
	xxx_messageInfo_KafkaNetworkPolicyRules.DiscardUnknown(m)
}

var xxx_messageInfo_KafkaNetworkPolicyRules proto.InternalMessageInfo

func (m *KafkaNetworkPolicyRules) GetKafkaRules() []*KafkaNetworkPolicyRule {
	if m != nil {
		return m.KafkaRules
	}
	return nil
}

// A Kafka network policy rule, as a conjunction of predicates on Kafka requests.
// If all the predicates of a rule match a Kafka request, the request is allowed. Otherwise, it is
// denied.
type KafkaNetworkPolicyRule struct {
	// The Kafka request's API key.
	// If <0, all Kafka requests are matched by this predicate.
	ApiKey int32 `protobuf:"varint,1,opt,name=api_key,json=apiKey,proto3" json:"api_key,omitempty"`
	// The Kafka request's API version.
	// If <0, all Kafka requests are matched by this predicate.
	ApiVersion int32 `protobuf:"varint,2,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"`
	// The Kafka request's topic.
	// Optional. If not specified, all Kafka requests are matched by this predicate.
	// If specified, this predicates only matches requests that contain this topic, and never
	// matches requests that don't contain any topic.
	Topic string `protobuf:"bytes,3,opt,name=topic,proto3" json:"topic,omitempty"`
	// The Kafka request's client ID.
	// Optional. If not specified, all Kafka requests are matched by this predicate.
	// If specified, this predicates only matches requests that contain this client ID, and never
	// matches requests that don't contain any client ID.
	ClientId             string   `protobuf:"bytes,4,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *KafkaNetworkPolicyRule) Reset()         { *m = KafkaNetworkPolicyRule{} }
func (m *KafkaNetworkPolicyRule) String() string { return proto.CompactTextString(m) }
func (*KafkaNetworkPolicyRule) ProtoMessage()    {}
func (*KafkaNetworkPolicyRule) Descriptor() ([]byte, []int) {
	return fileDescriptor_c04d25916f7381d1, []int{8}
}

func (m *KafkaNetworkPolicyRule) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_KafkaNetworkPolicyRule.Unmarshal(m, b)
}
func (m *KafkaNetworkPolicyRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_KafkaNetworkPolicyRule.Marshal(b, m, deterministic)
}
func (m *KafkaNetworkPolicyRule) XXX_Merge(src proto.Message) {
	xxx_messageInfo_KafkaNetworkPolicyRule.Merge(m, src)
}
func (m *KafkaNetworkPolicyRule) XXX_Size() int {
	return xxx_messageInfo_KafkaNetworkPolicyRule.Size(m)
}
func (m *KafkaNetworkPolicyRule) XXX_DiscardUnknown() {
	xxx_messageInfo_KafkaNetworkPolicyRule.DiscardUnknown(m)
}

var xxx_messageInfo_KafkaNetworkPolicyRule proto.InternalMessageInfo

func (m *KafkaNetworkPolicyRule) GetApiKey() int32 {
	if m != nil {
		return m.ApiKey
	}
	return 0
}

func (m *KafkaNetworkPolicyRule) GetApiVersion() int32 {
	if m != nil {
		return m.ApiVersion
	}
	return 0
}

func (m *KafkaNetworkPolicyRule) GetTopic() string {
	if m != nil {
		return m.Topic
	}
	return ""
}

func (m *KafkaNetworkPolicyRule) GetClientId() string {
	if m != nil {
		return m.ClientId
	}
	return ""
}

// A set of network policy rules that match generic L7 requests.
type L7NetworkPolicyRules struct {
	// The set of generic key-value pair policy rules.
	// A request is matched if any of these rules matches the request.
	// Required and may not be empty.
	L7Rules              []*L7NetworkPolicyRule `protobuf:"bytes,1,rep,name=l7_rules,json=l7Rules,proto3" json:"l7_rules,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *L7NetworkPolicyRules) Reset()         { *m = L7NetworkPolicyRules{} }
func (m *L7NetworkPolicyRules) String() string { return proto.CompactTextString(m) }
func (*L7NetworkPolicyRules) ProtoMessage()    {}
func (*L7NetworkPolicyRules) Descriptor() ([]byte, []int) {
	return fileDescriptor_c04d25916f7381d1, []int{9}
}

func (m *L7NetworkPolicyRules) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_L7NetworkPolicyRules.Unmarshal(m, b)
}
func (m *L7NetworkPolicyRules) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_L7NetworkPolicyRules.Marshal(b, m, deterministic)
}
func (m *L7NetworkPolicyRules) XXX_Merge(src proto.Message) {
	xxx_messageInfo_L7NetworkPolicyRules.Merge(m, src)
}
func (m *L7NetworkPolicyRules) XXX_Size() int {
	return xxx_messageInfo_L7NetworkPolicyRules.Size(m)
}
func (m *L7NetworkPolicyRules) XXX_DiscardUnknown() {
	xxx_messageInfo_L7NetworkPolicyRules.DiscardUnknown(m)
}

var xxx_messageInfo_L7NetworkPolicyRules proto.InternalMessageInfo

func (m *L7NetworkPolicyRules) GetL7Rules() []*L7NetworkPolicyRule {
	if m != nil {
		return m.L7Rules
	}
	return nil
}

// A generic L7 policy rule, as a conjunction of predicates on l7 requests.
// If all the predicates of a rule match a request, the request is allowed. Otherwise, it is
// denied.
type L7NetworkPolicyRule struct {
	// Optional. If empty, matches any request.
	Rule                 map[string]string `protobuf:"bytes,1,rep,name=rule,proto3" json:"rule,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *L7NetworkPolicyRule) Reset()         { *m = L7NetworkPolicyRule{} }
func (m *L7NetworkPolicyRule) String() string { return proto.CompactTextString(m) }
func (*L7NetworkPolicyRule) ProtoMessage()    {}
func (*L7NetworkPolicyRule) Descriptor() ([]byte, []int) {
	return fileDescriptor_c04d25916f7381d1, []int{10}
}

func (m *L7NetworkPolicyRule) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_L7NetworkPolicyRule.Unmarshal(m, b)
}
func (m *L7NetworkPolicyRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_L7NetworkPolicyRule.Marshal(b, m, deterministic)
}
func (m *L7NetworkPolicyRule) XXX_Merge(src proto.Message) {
	xxx_messageInfo_L7NetworkPolicyRule.Merge(m, src)
}
func (m *L7NetworkPolicyRule) XXX_Size() int {
	return xxx_messageInfo_L7NetworkPolicyRule.Size(m)
}
func (m *L7NetworkPolicyRule) XXX_DiscardUnknown() {
	xxx_messageInfo_L7NetworkPolicyRule.DiscardUnknown(m)
}

var xxx_messageInfo_L7NetworkPolicyRule proto.InternalMessageInfo

func (m *L7NetworkPolicyRule) GetRule() map[string]string {
	if m != nil {
		return m.Rule
	}
	return nil
}

func init() {
	proto.RegisterEnum("cilium.HeaderMatch_MatchAction", HeaderMatch_MatchAction_name, HeaderMatch_MatchAction_value)
	proto.RegisterEnum("cilium.HeaderMatch_MismatchAction", HeaderMatch_MismatchAction_name, HeaderMatch_MismatchAction_value)
	proto.RegisterType((*NetworkPolicy)(nil), "cilium.NetworkPolicy")
	proto.RegisterType((*PortNetworkPolicy)(nil), "cilium.PortNetworkPolicy")
	proto.RegisterType((*TLSContext)(nil), "cilium.TLSContext")
	proto.RegisterType((*PortNetworkPolicyRule)(nil), "cilium.PortNetworkPolicyRule")
	proto.RegisterType((*HttpNetworkPolicyRules)(nil), "cilium.HttpNetworkPolicyRules")
	proto.RegisterType((*HeaderMatch)(nil), "cilium.HeaderMatch")
	proto.RegisterType((*HttpNetworkPolicyRule)(nil), "cilium.HttpNetworkPolicyRule")
	proto.RegisterType((*KafkaNetworkPolicyRules)(nil), "cilium.KafkaNetworkPolicyRules")
	proto.RegisterType((*KafkaNetworkPolicyRule)(nil), "cilium.KafkaNetworkPolicyRule")
	proto.RegisterType((*L7NetworkPolicyRules)(nil), "cilium.L7NetworkPolicyRules")
	proto.RegisterType((*L7NetworkPolicyRule)(nil), "cilium.L7NetworkPolicyRule")
	proto.RegisterMapType((map[string]string)(nil), "cilium.L7NetworkPolicyRule.RuleEntry")
}

func init() { proto.RegisterFile("cilium/api/npds.proto", fileDescriptor_c04d25916f7381d1) }

var fileDescriptor_c04d25916f7381d1 = []byte{
	// 1180 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdd, 0x6e, 0xe3, 0x44,
	0x14, 0x5e, 0x3b, 0x4e, 0xdb, 0x9c, 0x6c, 0xb3, 0xed, 0x34, 0x49, 0xbd, 0xdd, 0xed, 0xcf, 0x1a,
	0x90, 0xba, 0x0b, 0x4d, 0x77, 0xb3, 0x42, 0xa1, 0xe5, 0x02, 0xe2, 0x34, 0x55, 0xab, 0xa6, 0xdd,
	0xc8, 0x0d, 0x08, 0x81, 0x58, 0x33, 0xd8, 0xd3, 0xc6, 0x8a, 0x63, 0x9b, 0xf1, 0x24, 0x4b, 0xb8,
	0x5c, 0x21, 0x24, 0xee, 0x10, 0x7b, 0xcb, 0x03, 0x70, 0xc5, 0x0b, 0xc0, 0x5b, 0xf0, 0x0a, 0x3c,
	0x45, 0x6f, 0x8a, 0x3c, 0xb6, 0x13, 0x5b, 0xeb, 0x96, 0x1b, 0x6e, 0xac, 0x99, 0x73, 0xce, 0xf7,
	0xcd, 0x9c, 0xef, 0xcc, 0x9c, 0x31, 0x54, 0x0c, 0xcb, 0xb6, 0x46, 0xc3, 0x5d, 0xec, 0x59, 0xbb,
	0x8e, 0x67, 0xfa, 0x35, 0x8f, 0xba, 0xcc, 0x45, 0x73, 0xa1, 0x79, 0x6d, 0x93, 0x38, 0x63, 0x77,
	0xc2, 0xbd, 0xe3, 0xfa, 0xae, 0xe1, 0x52, 0xb2, 0x8b, 0x4d, 0x93, 0x12, 0x3f, 0x0a, 0x5c, 0x7b,
	0x98, 0x0a, 0x30, 0x2d, 0xdf, 0x70, 0xc7, 0x84, 0x4e, 0x22, 0xef, 0x46, 0xca, 0x4b, 0xdd, 0x11,
	0x23, 0xe1, 0x37, 0x46, 0x5f, 0xba, 0xee, 0xa5, 0x4d, 0x78, 0x00, 0x76, 0x1c, 0x97, 0x61, 0x66,
	0xb9, 0x4e, 0xcc, 0xbd, 0x3a, 0xc6, 0xb6, 0x65, 0x62, 0x46, 0x76, 0xe3, 0x41, 0xe8, 0x50, 0xde,
	0x88, 0xb0, 0x78, 0x46, 0xd8, 0x2b, 0x97, 0x0e, 0xba, 0xae, 0x6d, 0x19, 0x13, 0x84, 0x40, 0x72,
	0xf0, 0x90, 0xc8, 0xc2, 0x96, 0xb0, 0x5d, 0xd0, 0xf8, 0x18, 0x55, 0x61, 0xce, 0xe3, 0x5e, 0x59,
	0xdc, 0x12, 0xb6, 0x25, 0x2d, 0x9a, 0xa1, 0x1e, 0xdc, 0xb7, 0x9c, 0xcb, 0x20, 0x07, 0xdd, 0x23,
	0x54, 0xf7, 0x5c, 0xca, 0x74, 0xee, 0xb2, 0x88, 0x2f, 0xe7, 0xb6, 0x72, 0xdb, 0xc5, 0xfa, 0xfd,
	0x5a, 0x98, 0x7f, 0xad, 0xeb, 0x52, 0x96, 0x5a, 0x49, 0xab, 0x46, 0xd8, 0x2e, 0xa1, 0x81, 0xb3,
	0x1b, 0x01, 0x91, 0x06, 0x32, 0xb9, 0x89, 0x54, 0xfa, 0x2f, 0xd2, 0x0a, 0xc9, 0xe4, 0xfc, 0x00,
	0x90, 0xe1, 0x3a, 0x0e, 0xa3, 0xd8, 0x18, 0xe8, 0x43, 0xec, 0xe9, 0x3c, 0xc7, 0x3c, 0xcf, 0x71,
	0x69, 0xea, 0x39, 0xc5, 0xde, 0x19, 0x1e, 0x12, 0xe5, 0x0f, 0x01, 0x96, 0xdf, 0xa2, 0x46, 0xeb,
	0x20, 0x05, 0x9b, 0xe1, 0xca, 0x2c, 0xaa, 0x85, 0x2b, 0x75, 0xee, 0x89, 0x24, 0x5f, 0x5f, 0xe7,
	0x34, 0x6e, 0x46, 0x6d, 0x58, 0xe0, 0x9a, 0x1a, 0xae, 0xcd, 0x65, 0x2a, 0xd5, 0x1f, 0xd7, 0x78,
	0xd1, 0x6a, 0xd8, 0xb3, 0x6a, 0xe3, 0x7a, 0x2d, 0xa8, 0x79, 0xed, 0xdc, 0x35, 0x06, 0x84, 0x35,
	0xa3, 0xca, 0x77, 0x23, 0x80, 0x36, 0x85, 0xa2, 0xe7, 0x90, 0xa7, 0x23, 0x7b, 0xaa, 0xdf, 0xfa,
	0xcd, 0xa9, 0x8e, 0x6c, 0xa2, 0x85, 0xb1, 0xca, 0x6f, 0x02, 0x40, 0xaf, 0x73, 0xde, 0x72, 0x1d,
	0x46, 0xbe, 0x67, 0x68, 0x1d, 0x80, 0xd1, 0x91, 0xcf, 0x88, 0xa9, 0x1b, 0x38, 0xaa, 0x64, 0x21,
	0xb2, 0xb4, 0x30, 0x7a, 0x1f, 0x96, 0x0d, 0x42, 0x99, 0x75, 0x61, 0x19, 0x98, 0x11, 0xdd, 0xe8,
	0x63, 0xcb, 0xe1, 0x5b, 0x0e, 0xb4, 0x98, 0x39, 0x5a, 0x81, 0x1d, 0x6d, 0x42, 0xd1, 0xa3, 0xd6,
	0x38, 0x08, 0x1c, 0x90, 0x89, 0x9c, 0xe3, 0x61, 0x10, 0x99, 0x4e, 0xc8, 0x04, 0x3d, 0x82, 0xbb,
	0x3e, 0xa1, 0x63, 0x42, 0xb9, 0xa6, 0x61, 0x89, 0x0a, 0x5a, 0x31, 0xb4, 0x05, 0x72, 0xfa, 0xca,
	0x9f, 0x39, 0xa8, 0x64, 0xee, 0x1f, 0x3d, 0x83, 0x7b, 0x94, 0x0c, 0x5d, 0x46, 0x66, 0x25, 0x16,
	0xb6, 0x72, 0xdb, 0x92, 0xba, 0x70, 0xa5, 0xe6, 0x7f, 0x15, 0x44, 0x59, 0xd0, 0x4a, 0x61, 0xc0,
	0xb4, 0x94, 0x47, 0x50, 0x35, 0xdd, 0x57, 0x8e, 0xcf, 0x28, 0xc1, 0x43, 0x9d, 0xd9, 0xbe, 0x6e,
	0x84, 0x69, 0xf3, 0xbd, 0x15, 0xeb, 0x28, 0x56, 0x6c, 0x26, 0x88, 0x56, 0x9e, 0x21, 0x7a, 0xb6,
	0x1f, 0xcb, 0x74, 0x00, 0xe5, 0x91, 0x97, 0xc1, 0x23, 0xdd, 0xc8, 0x83, 0xe2, 0xf8, 0x04, 0xcb,
	0x7d, 0x58, 0xb0, 0x1b, 0x3a, 0xaf, 0x5f, 0x24, 0xe2, 0xbc, 0xdd, 0xe0, 0x85, 0x45, 0x9f, 0x00,
	0xf4, 0x19, 0xf3, 0xf4, 0xb0, 0xa0, 0x26, 0xa7, 0xdd, 0x88, 0x69, 0x8f, 0x18, 0xf3, 0xde, 0x12,
	0xc4, 0x3f, 0xba, 0xa3, 0x15, 0x02, 0x0c, 0x9f, 0x20, 0x15, 0x8a, 0x03, 0x7c, 0x31, 0xc0, 0x11,
	0x03, 0xe1, 0x0c, 0x9b, 0x31, 0xc3, 0x49, 0xe0, 0xca, 0xa4, 0x00, 0x8e, 0x0a, 0x39, 0xf6, 0xf8,
	0xfe, 0x42, 0x82, 0x0b, 0x4e, 0xf0, 0x30, 0x26, 0xe8, 0x34, 0x32, 0xd1, 0xf3, 0x76, 0x83, 0x0f,
	0x55, 0x09, 0x44, 0xbb, 0xa1, 0x7c, 0x03, 0xd5, 0xec, 0xbd, 0xa2, 0xc3, 0x54, 0x7e, 0x42, 0xfa,
	0xc0, 0x66, 0x62, 0xe2, 0xba, 0x2e, 0x08, 0x89, 0x34, 0x95, 0xdf, 0x73, 0x50, 0x3c, 0x22, 0xd8,
	0x24, 0xf4, 0x14, 0x33, 0xa3, 0x8f, 0x1e, 0x24, 0x7b, 0x90, 0x3a, 0x7f, 0xa5, 0x4a, 0x54, 0xdc,
	0x12, 0xa2, 0x66, 0x54, 0x86, 0xfc, 0x18, 0xdb, 0x23, 0x12, 0x89, 0x1d, 0x4e, 0x90, 0x0a, 0x77,
	0x87, 0x01, 0x56, 0xc7, 0x46, 0xd0, 0xf8, 0xf8, 0x59, 0x28, 0xcd, 0xa4, 0x4a, 0xb0, 0xd7, 0xf8,
	0xb7, 0xc9, 0xc3, 0xb4, 0xe2, 0x70, 0x36, 0x41, 0x27, 0x70, 0x6f, 0x68, 0xf9, 0x29, 0x1a, 0x89,
	0xd3, 0x28, 0x99, 0x34, 0x51, 0x68, 0xc4, 0x54, 0x1a, 0xa6, 0xe6, 0x4a, 0x07, 0x8a, 0x89, 0x85,
	0x50, 0x05, 0x96, 0x5b, 0x2f, 0xce, 0x7a, 0xc7, 0x67, 0x9f, 0xb5, 0xf5, 0x17, 0x67, 0xfa, 0x69,
	0xb3, 0xd7, 0x3a, 0x5a, 0xba, 0x83, 0x96, 0x61, 0xf1, 0xb0, 0x79, 0xdc, 0x99, 0x99, 0x04, 0xb4,
	0x02, 0xf7, 0x0e, 0xda, 0x9d, 0x76, 0x2f, 0x11, 0x27, 0x2a, 0x3f, 0x09, 0x50, 0x4a, 0x2f, 0x88,
	0xca, 0xb0, 0x34, 0x85, 0x1e, 0x9f, 0xc7, 0x84, 0x32, 0x94, 0x53, 0xeb, 0xc4, 0x1e, 0xce, 0xdb,
	0x3c, 0x38, 0x48, 0x19, 0x45, 0x54, 0x05, 0x94, 0x58, 0x2c, 0xb6, 0xe7, 0xd0, 0x2a, 0xac, 0x68,
	0xed, 0x6e, 0xa7, 0xd9, 0x4a, 0x3b, 0x24, 0xe5, 0x17, 0x01, 0x2a, 0x99, 0x95, 0x45, 0x1f, 0xc3,
	0x7c, 0x9f, 0xcb, 0x13, 0x9f, 0x84, 0x47, 0xe9, 0xf6, 0x17, 0xbe, 0x56, 0x09, 0x05, 0x09, 0xd5,
	0x62, 0x04, 0xda, 0x87, 0x52, 0x38, 0xd4, 0x79, 0x8a, 0xc4, 0x97, 0x45, 0xce, 0xb1, 0x92, 0xa1,
	0xbc, 0xb6, 0xd8, 0x4f, 0x90, 0xf8, 0x8a, 0x09, 0xab, 0x37, 0xdc, 0x04, 0x74, 0x9c, 0xbe, 0x3f,
	0xe1, 0xbe, 0x36, 0x6e, 0xbf, 0x3f, 0x89, 0x23, 0x9a, 0xb8, 0x46, 0xca, 0x5f, 0x02, 0x54, 0xb3,
	0x01, 0x68, 0x15, 0xe6, 0xb1, 0x67, 0xf1, 0xf6, 0x18, 0x9c, 0xd8, 0xbc, 0x36, 0x87, 0x3d, 0x2b,
	0x68, 0x8d, 0x9b, 0x50, 0x0c, 0x1c, 0x63, 0x42, 0xfd, 0xe0, 0x30, 0x89, 0xdc, 0x09, 0xd8, 0xb3,
	0x3e, 0x0f, 0x2d, 0xe8, 0x19, 0xe4, 0x99, 0xeb, 0x59, 0x46, 0xd8, 0x56, 0xd5, 0x07, 0x57, 0xaa,
	0x4c, 0xab, 0xf2, 0xb5, 0x50, 0x5f, 0x7e, 0xf9, 0x15, 0xde, 0xf9, 0xa1, 0xb9, 0xf3, 0xe5, 0xd3,
	0x9d, 0xbd, 0x9a, 0xbe, 0xf3, 0xf5, 0x93, 0x77, 0xb5, 0x30, 0x12, 0x7d, 0x08, 0x05, 0xc3, 0xb6,
	0x88, 0xc3, 0x74, 0xcb, 0xe4, 0xc7, 0xb3, 0xa0, 0xca, 0x57, 0x6a, 0x85, 0xae, 0x64, 0x61, 0x16,
	0xc2, 0xd0, 0x63, 0x53, 0xf9, 0x02, 0xca, 0x59, 0xb7, 0x1d, 0x7d, 0x9a, 0xe8, 0x0e, 0xa1, 0x3c,
	0x0f, 0x6e, 0xe9, 0x0e, 0x09, 0x6d, 0xe2, 0x26, 0xa1, 0xfc, 0x2c, 0xc0, 0x4a, 0x46, 0x28, 0xda,
	0x03, 0x29, 0xa0, 0x8d, 0x58, 0xdf, 0xbb, 0x85, 0xb5, 0x16, 0x7c, 0xda, 0x0e, 0xa3, 0x13, 0x8d,
	0x43, 0xd6, 0x1a, 0x50, 0x98, 0x9a, 0xd0, 0x12, 0xe4, 0x62, 0x65, 0x0b, 0x5a, 0x30, 0xcc, 0xee,
	0x00, 0xfb, 0xe2, 0x47, 0x42, 0xfd, 0x47, 0x11, 0xd6, 0x53, 0xf4, 0x07, 0xf1, 0x6f, 0xd4, 0x39,
	0xa1, 0x63, 0xcb, 0x20, 0xe8, 0x25, 0x54, 0xce, 0x79, 0x07, 0x4f, 0x86, 0x05, 0xcf, 0xca, 0x46,
	0xfa, 0xb4, 0x4e, 0x81, 0x1a, 0xf9, 0x6e, 0x44, 0x7c, 0xb6, 0xb6, 0x79, 0xa3, 0xdf, 0xf7, 0x5c,
	0xc7, 0x27, 0xca, 0x9d, 0x6d, 0xe1, 0xa9, 0x80, 0x5e, 0x0b, 0x50, 0x3e, 0x24, 0xcc, 0xe8, 0xff,
	0xef, 0xfc, 0x8f, 0x5f, 0xff, 0xfd, 0xcf, 0x1b, 0xf1, 0x1d, 0x65, 0x23, 0xf5, 0x7b, 0xb8, 0xef,
	0x84, 0xeb, 0x4c, 0xdf, 0xcf, 0x7d, 0xe1, 0xc9, 0xb7, 0x73, 0xfc, 0x35, 0x7a, 0xfe, 0x6f, 0x00,
	0x00, 0x00, 0xff, 0xff, 0x77, 0x4a, 0x7f, 0x53, 0x93, 0x0a, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// NetworkPolicyDiscoveryServiceClient is the client API for NetworkPolicyDiscoveryService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type NetworkPolicyDiscoveryServiceClient interface {
	StreamNetworkPolicies(ctx context.Context, opts ...grpc.CallOption) (NetworkPolicyDiscoveryService_StreamNetworkPoliciesClient, error)
	FetchNetworkPolicies(ctx context.Context, in *v2.DiscoveryRequest, opts ...grpc.CallOption) (*v2.DiscoveryResponse, error)
}

type networkPolicyDiscoveryServiceClient struct {
	cc *grpc.ClientConn
}

func NewNetworkPolicyDiscoveryServiceClient(cc *grpc.ClientConn) NetworkPolicyDiscoveryServiceClient {
	return &networkPolicyDiscoveryServiceClient{cc}
}

func (c *networkPolicyDiscoveryServiceClient) StreamNetworkPolicies(ctx context.Context, opts ...grpc.CallOption) (NetworkPolicyDiscoveryService_StreamNetworkPoliciesClient, error) {
	stream, err := c.cc.NewStream(ctx, &_NetworkPolicyDiscoveryService_serviceDesc.Streams[0], "/cilium.NetworkPolicyDiscoveryService/StreamNetworkPolicies", opts...)
	if err != nil {
		return nil, err
	}
	x := &networkPolicyDiscoveryServiceStreamNetworkPoliciesClient{stream}
	return x, nil
}

type NetworkPolicyDiscoveryService_StreamNetworkPoliciesClient interface {
	Send(*v2.DiscoveryRequest) error
	Recv() (*v2.DiscoveryResponse, error)
	grpc.ClientStream
}

type networkPolicyDiscoveryServiceStreamNetworkPoliciesClient struct {
	grpc.ClientStream
}

func (x *networkPolicyDiscoveryServiceStreamNetworkPoliciesClient) Send(m *v2.DiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *networkPolicyDiscoveryServiceStreamNetworkPoliciesClient) Recv() (*v2.DiscoveryResponse, error) {
	m := new(v2.DiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *networkPolicyDiscoveryServiceClient) FetchNetworkPolicies(ctx context.Context, in *v2.DiscoveryRequest, opts ...grpc.CallOption) (*v2.DiscoveryResponse, error) {
	out := new(v2.DiscoveryResponse)
	err := c.cc.Invoke(ctx, "/cilium.NetworkPolicyDiscoveryService/FetchNetworkPolicies", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// NetworkPolicyDiscoveryServiceServer is the server API for NetworkPolicyDiscoveryService service.
type NetworkPolicyDiscoveryServiceServer interface {
	StreamNetworkPolicies(NetworkPolicyDiscoveryService_StreamNetworkPoliciesServer) error
	FetchNetworkPolicies(context.Context, *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error)
}

// UnimplementedNetworkPolicyDiscoveryServiceServer can be embedded to have forward compatible implementations.
type UnimplementedNetworkPolicyDiscoveryServiceServer struct {
}

func (*UnimplementedNetworkPolicyDiscoveryServiceServer) StreamNetworkPolicies(srv NetworkPolicyDiscoveryService_StreamNetworkPoliciesServer) error {
	return status.Errorf(codes.Unimplemented, "method StreamNetworkPolicies not implemented")
}
func (*UnimplementedNetworkPolicyDiscoveryServiceServer) FetchNetworkPolicies(ctx context.Context, req *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method FetchNetworkPolicies not implemented")
}

func RegisterNetworkPolicyDiscoveryServiceServer(s *grpc.Server, srv NetworkPolicyDiscoveryServiceServer) {
	s.RegisterService(&_NetworkPolicyDiscoveryService_serviceDesc, srv)
}

func _NetworkPolicyDiscoveryService_StreamNetworkPolicies_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(NetworkPolicyDiscoveryServiceServer).StreamNetworkPolicies(&networkPolicyDiscoveryServiceStreamNetworkPoliciesServer{stream})
}

type NetworkPolicyDiscoveryService_StreamNetworkPoliciesServer interface {
	Send(*v2.DiscoveryResponse) error
	Recv() (*v2.DiscoveryRequest, error)
	grpc.ServerStream
}

type networkPolicyDiscoveryServiceStreamNetworkPoliciesServer struct {
	grpc.ServerStream
}

func (x *networkPolicyDiscoveryServiceStreamNetworkPoliciesServer) Send(m *v2.DiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *networkPolicyDiscoveryServiceStreamNetworkPoliciesServer) Recv() (*v2.DiscoveryRequest, error) {
	m := new(v2.DiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _NetworkPolicyDiscoveryService_FetchNetworkPolicies_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(v2.DiscoveryRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(NetworkPolicyDiscoveryServiceServer).FetchNetworkPolicies(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/cilium.NetworkPolicyDiscoveryService/FetchNetworkPolicies",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(NetworkPolicyDiscoveryServiceServer).FetchNetworkPolicies(ctx, req.(*v2.DiscoveryRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _NetworkPolicyDiscoveryService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "cilium.NetworkPolicyDiscoveryService",
	HandlerType: (*NetworkPolicyDiscoveryServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "FetchNetworkPolicies",
			Handler:    _NetworkPolicyDiscoveryService_FetchNetworkPolicies_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "StreamNetworkPolicies",
			Handler:       _NetworkPolicyDiscoveryService_StreamNetworkPolicies_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
	},
	Metadata: "cilium/api/npds.proto",
}
  07070100000048000081A4000003E800000064000000015E17A247000066D3000000000000000000000000000000000000003800000000cilium-proxy-20200109/go/cilium/api/npds.pb.validate.go   // Code generated by protoc-gen-validate. DO NOT EDIT.
// source: cilium/api/npds.proto

package cilium

import (
	"bytes"
	"errors"
	"fmt"
	"net"
	"net/mail"
	"net/url"
	"regexp"
	"strings"
	"time"
	"unicode/utf8"

	"github.com/golang/protobuf/ptypes"

	core "github.com/cilium/proxy/go/envoy/api/v2/core"
)

// ensure the imports are used
var (
	_ = bytes.MinRead
	_ = errors.New("")
	_ = fmt.Print
	_ = utf8.UTFMax
	_ = (*regexp.Regexp)(nil)
	_ = (*strings.Reader)(nil)
	_ = net.IPv4len
	_ = time.Duration(0)
	_ = (*url.URL)(nil)
	_ = (*mail.Address)(nil)
	_ = ptypes.DynamicAny{}

	_ = core.SocketAddress_Protocol(0)
)

// define the regex for a UUID once up-front
var _npds_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")

// Validate checks the field values on NetworkPolicy with the rules defined in
// the proto definition for this message. If any rules are violated, an error
// is returned.
func (m *NetworkPolicy) Validate() error {
	if m == nil {
		return nil
	}

	// no validation rules for Name

	// no validation rules for Policy

	for idx, item := range m.GetIngressPerPortPolicies() {
		_, _ = idx, item

		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return NetworkPolicyValidationError{
					field:  fmt.Sprintf("IngressPerPortPolicies[%v]", idx),
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	}

	for idx, item := range m.GetEgressPerPortPolicies() {
		_, _ = idx, item

		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return NetworkPolicyValidationError{
					field:  fmt.Sprintf("EgressPerPortPolicies[%v]", idx),
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	}

	// no validation rules for ConntrackMapName

	return nil
}

// NetworkPolicyValidationError is the validation error returned by
// NetworkPolicy.Validate if the designated constraints aren't met.
type NetworkPolicyValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e NetworkPolicyValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e NetworkPolicyValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e NetworkPolicyValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e NetworkPolicyValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e NetworkPolicyValidationError) ErrorName() string { return "NetworkPolicyValidationError" }

// Error satisfies the builtin error interface
func (e NetworkPolicyValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sNetworkPolicy.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = NetworkPolicyValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = NetworkPolicyValidationError{}

// Validate checks the field values on PortNetworkPolicy with the rules defined
// in the proto definition for this message. If any rules are violated, an
// error is returned.
func (m *PortNetworkPolicy) Validate() error {
	if m == nil {
		return nil
	}

	if m.GetPort() > 65535 {
		return PortNetworkPolicyValidationError{
			field:  "Port",
			reason: "value must be less than or equal to 65535",
		}
	}

	// no validation rules for Protocol

	for idx, item := range m.GetRules() {
		_, _ = idx, item

		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return PortNetworkPolicyValidationError{
					field:  fmt.Sprintf("Rules[%v]", idx),
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	}

	return nil
}

// PortNetworkPolicyValidationError is the validation error returned by
// PortNetworkPolicy.Validate if the designated constraints aren't met.
type PortNetworkPolicyValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e PortNetworkPolicyValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e PortNetworkPolicyValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e PortNetworkPolicyValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e PortNetworkPolicyValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e PortNetworkPolicyValidationError) ErrorName() string {
	return "PortNetworkPolicyValidationError"
}

// Error satisfies the builtin error interface
func (e PortNetworkPolicyValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sPortNetworkPolicy.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = PortNetworkPolicyValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = PortNetworkPolicyValidationError{}

// Validate checks the field values on TLSContext with the rules defined in the
// proto definition for this message. If any rules are violated, an error is returned.
func (m *TLSContext) Validate() error {
	if m == nil {
		return nil
	}

	// no validation rules for TrustedCa

	// no validation rules for CertificateChain

	// no validation rules for PrivateKey

	return nil
}

// TLSContextValidationError is the validation error returned by
// TLSContext.Validate if the designated constraints aren't met.
type TLSContextValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e TLSContextValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e TLSContextValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e TLSContextValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e TLSContextValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e TLSContextValidationError) ErrorName() string { return "TLSContextValidationError" }

// Error satisfies the builtin error interface
func (e TLSContextValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sTLSContext.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = TLSContextValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = TLSContextValidationError{}

// Validate checks the field values on PortNetworkPolicyRule with the rules
// defined in the proto definition for this message. If any rules are
// violated, an error is returned.
func (m *PortNetworkPolicyRule) Validate() error {
	if m == nil {
		return nil
	}

	_PortNetworkPolicyRule_RemotePolicies_Unique := make(map[uint64]struct{}, len(m.GetRemotePolicies()))

	for idx, item := range m.GetRemotePolicies() {
		_, _ = idx, item

		if _, exists := _PortNetworkPolicyRule_RemotePolicies_Unique[item]; exists {
			return PortNetworkPolicyRuleValidationError{
				field:  fmt.Sprintf("RemotePolicies[%v]", idx),
				reason: "repeated value must contain unique items",
			}
		} else {
			_PortNetworkPolicyRule_RemotePolicies_Unique[item] = struct{}{}
		}

		// no validation rules for RemotePolicies[idx]
	}

	if v, ok := interface{}(m.GetDownstreamTlsContext()).(interface{ Validate() error }); ok {
		if err := v.Validate(); err != nil {
			return PortNetworkPolicyRuleValidationError{
				field:  "DownstreamTlsContext",
				reason: "embedded message failed validation",
				cause:  err,
			}
		}
	}

	if v, ok := interface{}(m.GetUpstreamTlsContext()).(interface{ Validate() error }); ok {
		if err := v.Validate(); err != nil {
			return PortNetworkPolicyRuleValidationError{
				field:  "UpstreamTlsContext",
				reason: "embedded message failed validation",
				cause:  err,
			}
		}
	}

	// no validation rules for L7Proto

	switch m.L7.(type) {

	case *PortNetworkPolicyRule_HttpRules:

		if v, ok := interface{}(m.GetHttpRules()).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return PortNetworkPolicyRuleValidationError{
					field:  "HttpRules",
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	case *PortNetworkPolicyRule_KafkaRules:

		if v, ok := interface{}(m.GetKafkaRules()).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return PortNetworkPolicyRuleValidationError{
					field:  "KafkaRules",
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	case *PortNetworkPolicyRule_L7Rules:

		if v, ok := interface{}(m.GetL7Rules()).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return PortNetworkPolicyRuleValidationError{
					field:  "L7Rules",
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	}

	return nil
}

// PortNetworkPolicyRuleValidationError is the validation error returned by
// PortNetworkPolicyRule.Validate if the designated constraints aren't met.
type PortNetworkPolicyRuleValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e PortNetworkPolicyRuleValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e PortNetworkPolicyRuleValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e PortNetworkPolicyRuleValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e PortNetworkPolicyRuleValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e PortNetworkPolicyRuleValidationError) ErrorName() string {
	return "PortNetworkPolicyRuleValidationError"
}

// Error satisfies the builtin error interface
func (e PortNetworkPolicyRuleValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sPortNetworkPolicyRule.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = PortNetworkPolicyRuleValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = PortNetworkPolicyRuleValidationError{}

// Validate checks the field values on HttpNetworkPolicyRules with the rules
// defined in the proto definition for this message. If any rules are
// violated, an error is returned.
func (m *HttpNetworkPolicyRules) Validate() error {
	if m == nil {
		return nil
	}

	if len(m.GetHttpRules()) < 1 {
		return HttpNetworkPolicyRulesValidationError{
			field:  "HttpRules",
			reason: "value must contain at least 1 item(s)",
		}
	}

	for idx, item := range m.GetHttpRules() {
		_, _ = idx, item

		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return HttpNetworkPolicyRulesValidationError{
					field:  fmt.Sprintf("HttpRules[%v]", idx),
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	}

	return nil
}

// HttpNetworkPolicyRulesValidationError is the validation error returned by
// HttpNetworkPolicyRules.Validate if the designated constraints aren't met.
type HttpNetworkPolicyRulesValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e HttpNetworkPolicyRulesValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e HttpNetworkPolicyRulesValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e HttpNetworkPolicyRulesValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e HttpNetworkPolicyRulesValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e HttpNetworkPolicyRulesValidationError) ErrorName() string {
	return "HttpNetworkPolicyRulesValidationError"
}

// Error satisfies the builtin error interface
func (e HttpNetworkPolicyRulesValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sHttpNetworkPolicyRules.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = HttpNetworkPolicyRulesValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = HttpNetworkPolicyRulesValidationError{}

// Validate checks the field values on HeaderMatch with the rules defined in
// the proto definition for this message. If any rules are violated, an error
// is returned.
func (m *HeaderMatch) Validate() error {
	if m == nil {
		return nil
	}

	if len(m.GetName()) < 1 {
		return HeaderMatchValidationError{
			field:  "Name",
			reason: "value length must be at least 1 bytes",
		}
	}

	// no validation rules for Value

	// no validation rules for MatchAction

	// no validation rules for MismatchAction

	return nil
}

// HeaderMatchValidationError is the validation error returned by
// HeaderMatch.Validate if the designated constraints aren't met.
type HeaderMatchValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e HeaderMatchValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e HeaderMatchValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e HeaderMatchValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e HeaderMatchValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e HeaderMatchValidationError) ErrorName() string { return "HeaderMatchValidationError" }

// Error satisfies the builtin error interface
func (e HeaderMatchValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sHeaderMatch.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = HeaderMatchValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = HeaderMatchValidationError{}

// Validate checks the field values on HttpNetworkPolicyRule with the rules
// defined in the proto definition for this message. If any rules are
// violated, an error is returned.
func (m *HttpNetworkPolicyRule) Validate() error {
	if m == nil {
		return nil
	}

	for idx, item := range m.GetHeaders() {
		_, _ = idx, item

		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return HttpNetworkPolicyRuleValidationError{
					field:  fmt.Sprintf("Headers[%v]", idx),
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	}

	for idx, item := range m.GetHeaderMatches() {
		_, _ = idx, item

		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return HttpNetworkPolicyRuleValidationError{
					field:  fmt.Sprintf("HeaderMatches[%v]", idx),
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	}

	return nil
}

// HttpNetworkPolicyRuleValidationError is the validation error returned by
// HttpNetworkPolicyRule.Validate if the designated constraints aren't met.
type HttpNetworkPolicyRuleValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e HttpNetworkPolicyRuleValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e HttpNetworkPolicyRuleValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e HttpNetworkPolicyRuleValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e HttpNetworkPolicyRuleValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e HttpNetworkPolicyRuleValidationError) ErrorName() string {
	return "HttpNetworkPolicyRuleValidationError"
}

// Error satisfies the builtin error interface
func (e HttpNetworkPolicyRuleValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sHttpNetworkPolicyRule.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = HttpNetworkPolicyRuleValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = HttpNetworkPolicyRuleValidationError{}

// Validate checks the field values on KafkaNetworkPolicyRules with the rules
// defined in the proto definition for this message. If any rules are
// violated, an error is returned.
func (m *KafkaNetworkPolicyRules) Validate() error {
	if m == nil {
		return nil
	}

	if len(m.GetKafkaRules()) < 1 {
		return KafkaNetworkPolicyRulesValidationError{
			field:  "KafkaRules",
			reason: "value must contain at least 1 item(s)",
		}
	}

	for idx, item := range m.GetKafkaRules() {
		_, _ = idx, item

		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return KafkaNetworkPolicyRulesValidationError{
					field:  fmt.Sprintf("KafkaRules[%v]", idx),
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	}

	return nil
}

// KafkaNetworkPolicyRulesValidationError is the validation error returned by
// KafkaNetworkPolicyRules.Validate if the designated constraints aren't met.
type KafkaNetworkPolicyRulesValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e KafkaNetworkPolicyRulesValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e KafkaNetworkPolicyRulesValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e KafkaNetworkPolicyRulesValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e KafkaNetworkPolicyRulesValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e KafkaNetworkPolicyRulesValidationError) ErrorName() string {
	return "KafkaNetworkPolicyRulesValidationError"
}

// Error satisfies the builtin error interface
func (e KafkaNetworkPolicyRulesValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sKafkaNetworkPolicyRules.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = KafkaNetworkPolicyRulesValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = KafkaNetworkPolicyRulesValidationError{}

// Validate checks the field values on KafkaNetworkPolicyRule with the rules
// defined in the proto definition for this message. If any rules are
// violated, an error is returned.
func (m *KafkaNetworkPolicyRule) Validate() error {
	if m == nil {
		return nil
	}

	// no validation rules for ApiKey

	// no validation rules for ApiVersion

	if utf8.RuneCountInString(m.GetTopic()) > 255 {
		return KafkaNetworkPolicyRuleValidationError{
			field:  "Topic",
			reason: "value length must be at most 255 runes",
		}
	}

	if !_KafkaNetworkPolicyRule_Topic_Pattern.MatchString(m.GetTopic()) {
		return KafkaNetworkPolicyRuleValidationError{
			field:  "Topic",
			reason: "value does not match regex pattern \"^[a-zA-Z0-9._-]*$\"",
		}
	}

	if !_KafkaNetworkPolicyRule_ClientId_Pattern.MatchString(m.GetClientId()) {
		return KafkaNetworkPolicyRuleValidationError{
			field:  "ClientId",
			reason: "value does not match regex pattern \"^[a-zA-Z0-9._-]*$\"",
		}
	}

	return nil
}

// KafkaNetworkPolicyRuleValidationError is the validation error returned by
// KafkaNetworkPolicyRule.Validate if the designated constraints aren't met.
type KafkaNetworkPolicyRuleValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e KafkaNetworkPolicyRuleValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e KafkaNetworkPolicyRuleValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e KafkaNetworkPolicyRuleValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e KafkaNetworkPolicyRuleValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e KafkaNetworkPolicyRuleValidationError) ErrorName() string {
	return "KafkaNetworkPolicyRuleValidationError"
}

// Error satisfies the builtin error interface
func (e KafkaNetworkPolicyRuleValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sKafkaNetworkPolicyRule.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = KafkaNetworkPolicyRuleValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = KafkaNetworkPolicyRuleValidationError{}

var _KafkaNetworkPolicyRule_Topic_Pattern = regexp.MustCompile("^[a-zA-Z0-9._-]*$")

var _KafkaNetworkPolicyRule_ClientId_Pattern = regexp.MustCompile("^[a-zA-Z0-9._-]*$")

// Validate checks the field values on L7NetworkPolicyRules with the rules
// defined in the proto definition for this message. If any rules are
// violated, an error is returned.
func (m *L7NetworkPolicyRules) Validate() error {
	if m == nil {
		return nil
	}

	if len(m.GetL7Rules()) < 1 {
		return L7NetworkPolicyRulesValidationError{
			field:  "L7Rules",
			reason: "value must contain at least 1 item(s)",
		}
	}

	for idx, item := range m.GetL7Rules() {
		_, _ = idx, item

		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
			if err := v.Validate(); err != nil {
				return L7NetworkPolicyRulesValidationError{
					field:  fmt.Sprintf("L7Rules[%v]", idx),
					reason: "embedded message failed validation",
					cause:  err,
				}
			}
		}

	}

	return nil
}

// L7NetworkPolicyRulesValidationError is the validation error returned by
// L7NetworkPolicyRules.Validate if the designated constraints aren't met.
type L7NetworkPolicyRulesValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e L7NetworkPolicyRulesValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e L7NetworkPolicyRulesValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e L7NetworkPolicyRulesValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e L7NetworkPolicyRulesValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e L7NetworkPolicyRulesValidationError) ErrorName() string {
	return "L7NetworkPolicyRulesValidationError"
}

// Error satisfies the builtin error interface
func (e L7NetworkPolicyRulesValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sL7NetworkPolicyRules.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = L7NetworkPolicyRulesValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = L7NetworkPolicyRulesValidationError{}

// Validate checks the field values on L7NetworkPolicyRule with the rules
// defined in the proto definition for this message. If any rules are
// violated, an error is returned.
func (m *L7NetworkPolicyRule) Validate() error {
	if m == nil {
		return nil
	}

	// no validation rules for Rule

	return nil
}

// L7NetworkPolicyRuleValidationError is the validation error returned by
// L7NetworkPolicyRule.Validate if the designated constraints aren't met.
type L7NetworkPolicyRuleValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e L7NetworkPolicyRuleValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e L7NetworkPolicyRuleValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e L7NetworkPolicyRuleValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e L7NetworkPolicyRuleValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e L7NetworkPolicyRuleValidationError) ErrorName() string {
	return "L7NetworkPolicyRuleValidationError"
}

// Error satisfies the builtin error interface
func (e L7NetworkPolicyRuleValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sL7NetworkPolicyRule.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = L7NetworkPolicyRuleValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = L7NetworkPolicyRuleValidationError{}
 07070100000049000081A4000003E800000064000000015E17A24700002C6C000000000000000000000000000000000000003000000000cilium-proxy-20200109/go/cilium/api/nphds.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: cilium/api/nphds.proto

package cilium

import (
	context "context"
	fmt "fmt"
	v2 "github.com/cilium/proxy/go/envoy/api/v2"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// The mapping of a network policy identifier to the IP addresses of all the
// hosts on which the network policy is enforced.
// A host may be associated only with one network policy.
type NetworkPolicyHosts struct {
	// The unique identifier of the network policy enforced on the hosts.
	Policy uint64 `protobuf:"varint,1,opt,name=policy,proto3" json:"policy,omitempty"`
	// The set of IP addresses of the hosts on which the network policy is enforced.
	// Optional. May be empty.
	HostAddresses        []string `protobuf:"bytes,2,rep,name=host_addresses,json=hostAddresses,proto3" json:"host_addresses,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *NetworkPolicyHosts) Reset()         { *m = NetworkPolicyHosts{} }
func (m *NetworkPolicyHosts) String() string { return proto.CompactTextString(m) }
func (*NetworkPolicyHosts) ProtoMessage()    {}
func (*NetworkPolicyHosts) Descriptor() ([]byte, []int) {
	return fileDescriptor_b09d37d0b8c67603, []int{0}
}

func (m *NetworkPolicyHosts) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_NetworkPolicyHosts.Unmarshal(m, b)
}
func (m *NetworkPolicyHosts) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_NetworkPolicyHosts.Marshal(b, m, deterministic)
}
func (m *NetworkPolicyHosts) XXX_Merge(src proto.Message) {
	xxx_messageInfo_NetworkPolicyHosts.Merge(m, src)
}
func (m *NetworkPolicyHosts) XXX_Size() int {
	return xxx_messageInfo_NetworkPolicyHosts.Size(m)
}
func (m *NetworkPolicyHosts) XXX_DiscardUnknown() {
	xxx_messageInfo_NetworkPolicyHosts.DiscardUnknown(m)
}

var xxx_messageInfo_NetworkPolicyHosts proto.InternalMessageInfo

func (m *NetworkPolicyHosts) GetPolicy() uint64 {
	if m != nil {
		return m.Policy
	}
	return 0
}

func (m *NetworkPolicyHosts) GetHostAddresses() []string {
	if m != nil {
		return m.HostAddresses
	}
	return nil
}

func init() {
	proto.RegisterType((*NetworkPolicyHosts)(nil), "cilium.NetworkPolicyHosts")
}

func init() { proto.RegisterFile("cilium/api/nphds.proto", fileDescriptor_b09d37d0b8c67603) }

var fileDescriptor_b09d37d0b8c67603 = []byte{
	// 310 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x91, 0xc1, 0x4a, 0x33, 0x31,
	0x14, 0x85, 0xff, 0xcc, 0x5f, 0x07, 0x1a, 0xd0, 0xc5, 0x20, 0xed, 0x30, 0x14, 0x2d, 0xb3, 0xb1,
	0x08, 0xce, 0x48, 0xdd, 0xd5, 0x95, 0x45, 0xc4, 0x95, 0x48, 0xfb, 0x00, 0x25, 0xce, 0x5c, 0xda,
	0xe0, 0x34, 0x37, 0xe6, 0xa6, 0x91, 0x6e, 0xdd, 0xb9, 0x6d, 0x1f, 0xcd, 0x57, 0xf0, 0x29, 0xba,
	0x92, 0xce, 0x74, 0x04, 0x51, 0x97, 0xee, 0x72, 0xf3, 0x9d, 0xe4, 0x24, 0xe7, 0xf0, 0x56, 0x26,
	0x0b, 0xb9, 0x98, 0xa7, 0x42, 0xcb, 0x54, 0xe9, 0x59, 0x4e, 0x89, 0x36, 0x68, 0x31, 0xf0, 0xab,
	0xfd, 0xa8, 0x03, 0xca, 0xe1, 0xb2, 0xc4, 0xae, 0x9f, 0xe6, 0x92, 0x32, 0x74, 0x60, 0x96, 0x95,
	0x2a, 0xea, 0x4c, 0x11, 0xa7, 0x05, 0x94, 0x58, 0x28, 0x85, 0x56, 0x58, 0x89, 0x6a, 0x77, 0x47,
	0xd4, 0x76, 0xa2, 0x90, 0xb9, 0xb0, 0x90, 0xd6, 0x8b, 0x0a, 0xc4, 0x92, 0x07, 0x77, 0x60, 0x9f,
	0xd1, 0x3c, 0xde, 0x63, 0x21, 0xb3, 0xe5, 0x2d, 0x92, 0xa5, 0xa0, 0xc5, 0x7d, 0x5d, 0x8e, 0x21,
	0xeb, 0xb2, 0x5e, 0x63, 0xb4, 0x9b, 0x82, 0x4b, 0x7e, 0x30, 0x43, 0xb2, 0x13, 0x91, 0xe7, 0x06,
	0x88, 0x80, 0x42, 0xaf, 0xfb, 0xbf, 0xd7, 0x1c, 0x1e, 0x6e, 0x86, 0x7b, 0x2b, 0xe6, 0x85, 0x6c,
	0x33, 0x6c, 0xae, 0x98, 0x1f, 0x37, 0x8c, 0xd7, 0x65, 0xa3, 0xfd, 0xad, 0xf6, 0xaa, 0x96, 0xf6,
	0xd7, 0x1e, 0x8f, 0xbf, 0x7b, 0x5d, 0xd7, 0xff, 0x18, 0x83, 0x71, 0x32, 0x83, 0x40, 0xf0, 0x70,
	0x6c, 0x0d, 0x88, 0xf9, 0x0f, 0xef, 0x3a, 0x4a, 0xca, 0x0c, 0x12, 0xa1, 0x65, 0xe2, 0xfa, 0xc9,
	0xe7, 0xd9, 0x11, 0x3c, 0x2d, 0x80, 0x6c, 0x74, 0xfc, 0x2b, 0x27, 0x8d, 0x8a, 0x20, 0xfe, 0xd7,
	0x63, 0xe7, 0x2c, 0x78, 0x65, 0xbc, 0x7d, 0x03, 0x36, 0x9b, 0xfd, 0x85, 0xc5, 0xd9, 0xcb, 0xdb,
	0xfb, 0xda, 0x3b, 0x89, 0xe3, 0x2f, 0x2d, 0x0d, 0x54, 0x65, 0x35, 0xa9, 0x92, 0x9c, 0x6c, 0xa3,
	0xa1, 0x01, 0x3b, 0x7d, 0xf0, 0xcb, 0x1e, 0x2e, 0x3e, 0x02, 0x00, 0x00, 0xff, 0xff, 0x02, 0x2e,
	0xc1, 0xfc, 0xfe, 0x01, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// NetworkPolicyHostsDiscoveryServiceClient is the client API for NetworkPolicyHostsDiscoveryService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type NetworkPolicyHostsDiscoveryServiceClient interface {
	StreamNetworkPolicyHosts(ctx context.Context, opts ...grpc.CallOption) (NetworkPolicyHostsDiscoveryService_StreamNetworkPolicyHostsClient, error)
	FetchNetworkPolicyHosts(ctx context.Context, in *v2.DiscoveryRequest, opts ...grpc.CallOption) (*v2.DiscoveryResponse, error)
}

type networkPolicyHostsDiscoveryServiceClient struct {
	cc *grpc.ClientConn
}

func NewNetworkPolicyHostsDiscoveryServiceClient(cc *grpc.ClientConn) NetworkPolicyHostsDiscoveryServiceClient {
	return &networkPolicyHostsDiscoveryServiceClient{cc}
}

func (c *networkPolicyHostsDiscoveryServiceClient) StreamNetworkPolicyHosts(ctx context.Context, opts ...grpc.CallOption) (NetworkPolicyHostsDiscoveryService_StreamNetworkPolicyHostsClient, error) {
	stream, err := c.cc.NewStream(ctx, &_NetworkPolicyHostsDiscoveryService_serviceDesc.Streams[0], "/cilium.NetworkPolicyHostsDiscoveryService/StreamNetworkPolicyHosts", opts...)
	if err != nil {
		return nil, err
	}
	x := &networkPolicyHostsDiscoveryServiceStreamNetworkPolicyHostsClient{stream}
	return x, nil
}

type NetworkPolicyHostsDiscoveryService_StreamNetworkPolicyHostsClient interface {
	Send(*v2.DiscoveryRequest) error
	Recv() (*v2.DiscoveryResponse, error)
	grpc.ClientStream
}

type networkPolicyHostsDiscoveryServiceStreamNetworkPolicyHostsClient struct {
	grpc.ClientStream
}

func (x *networkPolicyHostsDiscoveryServiceStreamNetworkPolicyHostsClient) Send(m *v2.DiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *networkPolicyHostsDiscoveryServiceStreamNetworkPolicyHostsClient) Recv() (*v2.DiscoveryResponse, error) {
	m := new(v2.DiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *networkPolicyHostsDiscoveryServiceClient) FetchNetworkPolicyHosts(ctx context.Context, in *v2.DiscoveryRequest, opts ...grpc.CallOption) (*v2.DiscoveryResponse, error) {
	out := new(v2.DiscoveryResponse)
	err := c.cc.Invoke(ctx, "/cilium.NetworkPolicyHostsDiscoveryService/FetchNetworkPolicyHosts", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// NetworkPolicyHostsDiscoveryServiceServer is the server API for NetworkPolicyHostsDiscoveryService service.
type NetworkPolicyHostsDiscoveryServiceServer interface {
	StreamNetworkPolicyHosts(NetworkPolicyHostsDiscoveryService_StreamNetworkPolicyHostsServer) error
	FetchNetworkPolicyHosts(context.Context, *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error)
}

// UnimplementedNetworkPolicyHostsDiscoveryServiceServer can be embedded to have forward compatible implementations.
type UnimplementedNetworkPolicyHostsDiscoveryServiceServer struct {
}

func (*UnimplementedNetworkPolicyHostsDiscoveryServiceServer) StreamNetworkPolicyHosts(srv NetworkPolicyHostsDiscoveryService_StreamNetworkPolicyHostsServer) error {
	return status.Errorf(codes.Unimplemented, "method StreamNetworkPolicyHosts not implemented")
}
func (*UnimplementedNetworkPolicyHostsDiscoveryServiceServer) FetchNetworkPolicyHosts(ctx context.Context, req *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method FetchNetworkPolicyHosts not implemented")
}

func RegisterNetworkPolicyHostsDiscoveryServiceServer(s *grpc.Server, srv NetworkPolicyHostsDiscoveryServiceServer) {
	s.RegisterService(&_NetworkPolicyHostsDiscoveryService_serviceDesc, srv)
}

func _NetworkPolicyHostsDiscoveryService_StreamNetworkPolicyHosts_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(NetworkPolicyHostsDiscoveryServiceServer).StreamNetworkPolicyHosts(&networkPolicyHostsDiscoveryServiceStreamNetworkPolicyHostsServer{stream})
}

type NetworkPolicyHostsDiscoveryService_StreamNetworkPolicyHostsServer interface {
	Send(*v2.DiscoveryResponse) error
	Recv() (*v2.DiscoveryRequest, error)
	grpc.ServerStream
}

type networkPolicyHostsDiscoveryServiceStreamNetworkPolicyHostsServer struct {
	grpc.ServerStream
}

func (x *networkPolicyHostsDiscoveryServiceStreamNetworkPolicyHostsServer) Send(m *v2.DiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *networkPolicyHostsDiscoveryServiceStreamNetworkPolicyHostsServer) Recv() (*v2.DiscoveryRequest, error) {
	m := new(v2.DiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _NetworkPolicyHostsDiscoveryService_FetchNetworkPolicyHosts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(v2.DiscoveryRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(NetworkPolicyHostsDiscoveryServiceServer).FetchNetworkPolicyHosts(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/cilium.NetworkPolicyHostsDiscoveryService/FetchNetworkPolicyHosts",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(NetworkPolicyHostsDiscoveryServiceServer).FetchNetworkPolicyHosts(ctx, req.(*v2.DiscoveryRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _NetworkPolicyHostsDiscoveryService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "cilium.NetworkPolicyHostsDiscoveryService",
	HandlerType: (*NetworkPolicyHostsDiscoveryServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "FetchNetworkPolicyHosts",
			Handler:    _NetworkPolicyHostsDiscoveryService_FetchNetworkPolicyHosts_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "StreamNetworkPolicyHosts",
			Handler:       _NetworkPolicyHostsDiscoveryService_StreamNetworkPolicyHosts_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
	},
	Metadata: "cilium/api/nphds.proto",
}
0707010000004A000081A4000003E800000064000000015E17A24700000A65000000000000000000000000000000000000003900000000cilium-proxy-20200109/go/cilium/api/nphds.pb.validate.go  // Code generated by protoc-gen-validate. DO NOT EDIT.
// source: cilium/api/nphds.proto

package cilium

import (
	"bytes"
	"errors"
	"fmt"
	"net"
	"net/mail"
	"net/url"
	"regexp"
	"strings"
	"time"
	"unicode/utf8"

	"github.com/golang/protobuf/ptypes"
)

// ensure the imports are used
var (
	_ = bytes.MinRead
	_ = errors.New("")
	_ = fmt.Print
	_ = utf8.UTFMax
	_ = (*regexp.Regexp)(nil)
	_ = (*strings.Reader)(nil)
	_ = net.IPv4len
	_ = time.Duration(0)
	_ = (*url.URL)(nil)
	_ = (*mail.Address)(nil)
	_ = ptypes.DynamicAny{}
)

// define the regex for a UUID once up-front
var _nphds_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")

// Validate checks the field values on NetworkPolicyHosts with the rules
// defined in the proto definition for this message. If any rules are
// violated, an error is returned.
func (m *NetworkPolicyHosts) Validate() error {
	if m == nil {
		return nil
	}

	// no validation rules for Policy

	for idx, item := range m.GetHostAddresses() {
		_, _ = idx, item

		if len(item) < 1 {
			return NetworkPolicyHostsValidationError{
				field:  fmt.Sprintf("HostAddresses[%v]", idx),
				reason: "value length must be at least 1 bytes",
			}
		}

	}

	return nil
}

// NetworkPolicyHostsValidationError is the validation error returned by
// NetworkPolicyHosts.Validate if the designated constraints aren't met.
type NetworkPolicyHostsValidationError struct {
	field  string
	reason string
	cause  error
	key    bool
}

// Field function returns field value.
func (e NetworkPolicyHostsValidationError) Field() string { return e.field }

// Reason function returns reason value.
func (e NetworkPolicyHostsValidationError) Reason() string { return e.reason }

// Cause function returns cause value.
func (e NetworkPolicyHostsValidationError) Cause() error { return e.cause }

// Key function returns key value.
func (e NetworkPolicyHostsValidationError) Key() bool { return e.key }

// ErrorName returns error name.
func (e NetworkPolicyHostsValidationError) ErrorName() string {
	return "NetworkPolicyHostsValidationError"
}

// Error satisfies the builtin error interface
func (e NetworkPolicyHostsValidationError) Error() string {
	cause := ""
	if e.cause != nil {
		cause = fmt.Sprintf(" | caused by: %v", e.cause)
	}

	key := ""
	if e.key {
		key = "key for "
	}

	return fmt.Sprintf(
		"invalid %sNetworkPolicyHosts.%s: %s%s",
		key,
		e.field,
		e.reason,
		cause)
}

var _ error = NetworkPolicyHostsValidationError{}

var _ interface {
	Field() string
	Reason() string
	Key() bool
	Cause() error
	ErrorName() string
} = NetworkPolicyHostsValidationError{}
   0707010000004B000041ED000003E800000064000000085E17A24700000000000000000000000000000000000000000000001F00000000cilium-proxy-20200109/go/envoy    0707010000004C000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000002500000000cilium-proxy-20200109/go/envoy/admin  0707010000004D000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000002D00000000cilium-proxy-20200109/go/envoy/admin/v2alpha  0707010000004E000081A4000003E800000064000000015E17A247000030CA000000000000000000000000000000000000003900000000cilium-proxy-20200109/go/envoy/admin/v2alpha/certs.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/admin/v2alpha/certs.proto

package envoy_admin_v2alpha

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Proto representation of certificate details. Admin endpoint uses this wrapper for `/certs` to
// display certificate information. See :ref:`/certs <operations_admin_interface_certs>` for more
// information.
type Certificates struct {
	// List of certificates known to an Envoy.
	Certificates         []*Certificate `protobuf:"bytes,1,rep,name=certificates,proto3" json:"certificates,omitempty"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

func (m *Certificates) Reset()         { *m = Certificates{} }
func (m *Certificates) String() string { return proto.CompactTextString(m) }
func (*Certificates) ProtoMessage()    {}
func (*Certificates) Descriptor() ([]byte, []int) {
	return fileDescriptor_c7cd1796e05ff7fa, []int{0}
}

func (m *Certificates) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Certificates.Unmarshal(m, b)
}
func (m *Certificates) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Certificates.Marshal(b, m, deterministic)
}
func (m *Certificates) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Certificates.Merge(m, src)
}
func (m *Certificates) XXX_Size() int {
	return xxx_messageInfo_Certificates.Size(m)
}
func (m *Certificates) XXX_DiscardUnknown() {
	xxx_messageInfo_Certificates.DiscardUnknown(m)
}

var xxx_messageInfo_Certificates proto.InternalMessageInfo

func (m *Certificates) GetCertificates() []*Certificate {
	if m != nil {
		return m.Certificates
	}
	return nil
}

type Certificate struct {
	// Details of CA certificate.
	CaCert []*CertificateDetails `protobuf:"bytes,1,rep,name=ca_cert,json=caCert,proto3" json:"ca_cert,omitempty"`
	// Details of Certificate Chain
	CertChain            []*CertificateDetails `protobuf:"bytes,2,rep,name=cert_chain,json=certChain,proto3" json:"cert_chain,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *Certificate) Reset()         { *m = Certificate{} }
func (m *Certificate) String() string { return proto.CompactTextString(m) }
func (*Certificate) ProtoMessage()    {}
func (*Certificate) Descriptor() ([]byte, []int) {
	return fileDescriptor_c7cd1796e05ff7fa, []int{1}
}

func (m *Certificate) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Certificate.Unmarshal(m, b)
}
func (m *Certificate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Certificate.Marshal(b, m, deterministic)
}
func (m *Certificate) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Certificate.Merge(m, src)
}
func (m *Certificate) XXX_Size() int {
	return xxx_messageInfo_Certificate.Size(m)
}
func (m *Certificate) XXX_DiscardUnknown() {
	xxx_messageInfo_Certificate.DiscardUnknown(m)
}

var xxx_messageInfo_Certificate proto.InternalMessageInfo

func (m *Certificate) GetCaCert() []*CertificateDetails {
	if m != nil {
		return m.CaCert
	}
	return nil
}

func (m *Certificate) GetCertChain() []*CertificateDetails {
	if m != nil {
		return m.CertChain
	}
	return nil
}

// [#next-free-field: 7]
type CertificateDetails struct {
	// Path of the certificate.
	Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
	// Certificate Serial Number.
	SerialNumber string `protobuf:"bytes,2,opt,name=serial_number,json=serialNumber,proto3" json:"serial_number,omitempty"`
	// List of Subject Alternate names.
	SubjectAltNames []*SubjectAlternateName `protobuf:"bytes,3,rep,name=subject_alt_names,json=subjectAltNames,proto3" json:"subject_alt_names,omitempty"`
	// Minimum of days until expiration of certificate and it's chain.
	DaysUntilExpiration uint64 `protobuf:"varint,4,opt,name=days_until_expiration,json=daysUntilExpiration,proto3" json:"days_until_expiration,omitempty"`
	// Indicates the time from which the certificate is valid.
	ValidFrom *timestamp.Timestamp `protobuf:"bytes,5,opt,name=valid_from,json=validFrom,proto3" json:"valid_from,omitempty"`
	// Indicates the time at which the certificate expires.
	ExpirationTime       *timestamp.Timestamp `protobuf:"bytes,6,opt,name=expiration_time,json=expirationTime,proto3" json:"expiration_time,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *CertificateDetails) Reset()         { *m = CertificateDetails{} }
func (m *CertificateDetails) String() string { return proto.CompactTextString(m) }
func (*CertificateDetails) ProtoMessage()    {}
func (*CertificateDetails) Descriptor() ([]byte, []int) {
	return fileDescriptor_c7cd1796e05ff7fa, []int{2}
}

func (m *CertificateDetails) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_CertificateDetails.Unmarshal(m, b)
}
func (m *CertificateDetails) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_CertificateDetails.Marshal(b, m, deterministic)
}
func (m *CertificateDetails) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CertificateDetails.Merge(m, src)
}
func (m *CertificateDetails) XXX_Size() int {
	return xxx_messageInfo_CertificateDetails.Size(m)
}
func (m *CertificateDetails) XXX_DiscardUnknown() {
	xxx_messageInfo_CertificateDetails.DiscardUnknown(m)
}

var xxx_messageInfo_CertificateDetails proto.InternalMessageInfo

func (m *CertificateDetails) GetPath() string {
	if m != nil {
		return m.Path
	}
	return ""
}

func (m *CertificateDetails) GetSerialNumber() string {
	if m != nil {
		return m.SerialNumber
	}
	return ""
}

func (m *CertificateDetails) GetSubjectAltNames() []*SubjectAlternateName {
	if m != nil {
		return m.SubjectAltNames
	}
	return nil
}

func (m *CertificateDetails) GetDaysUntilExpiration() uint64 {
	if m != nil {
		return m.DaysUntilExpiration
	}
	return 0
}

func (m *CertificateDetails) GetValidFrom() *timestamp.Timestamp {
	if m != nil {
		return m.ValidFrom
	}
	return nil
}

func (m *CertificateDetails) GetExpirationTime() *timestamp.Timestamp {
	if m != nil {
		return m.ExpirationTime
	}
	return nil
}

type SubjectAlternateName struct {
	// Subject Alternate Name.
	//
	// Types that are valid to be assigned to Name:
	//	*SubjectAlternateName_Dns
	//	*SubjectAlternateName_Uri
	Name                 isSubjectAlternateName_Name `protobuf_oneof:"name"`
	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
	XXX_unrecognized     []byte                      `json:"-"`
	XXX_sizecache        int32                       `json:"-"`
}

func (m *SubjectAlternateName) Reset()         { *m = SubjectAlternateName{} }
func (m *SubjectAlternateName) String() string { return proto.CompactTextString(m) }
func (*SubjectAlternateName) ProtoMessage()    {}
func (*SubjectAlternateName) Descriptor() ([]byte, []int) {
	return fileDescriptor_c7cd1796e05ff7fa, []int{3}
}

func (m *SubjectAlternateName) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SubjectAlternateName.Unmarshal(m, b)
}
func (m *SubjectAlternateName) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SubjectAlternateName.Marshal(b, m, deterministic)
}
func (m *SubjectAlternateName) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SubjectAlternateName.Merge(m, src)
}
func (m *SubjectAlternateName) XXX_Size() int {
	return xxx_messageInfo_SubjectAlternateName.Size(m)
}
func (m *SubjectAlternateName) XXX_DiscardUnknown() {
	xxx_messageInfo_SubjectAlternateName.DiscardUnknown(m)
}

var xxx_messageInfo_SubjectAlternateName proto.InternalMessageInfo

type isSubjectAlternateName_Name interface {
	isSubjectAlternateName_Name()
}

type SubjectAlternateName_Dns struct {
	Dns string `protobuf:"bytes,1,opt,name=dns,proto3,oneof"`
}

type SubjectAlternateName_Uri struct {
	Uri string `protobuf:"bytes,2,opt,name=uri,proto3,oneof"`
}

func (*SubjectAlternateName_Dns) isSubjectAlternateName_Name() {}

func (*SubjectAlternateName_Uri) isSubjectAlternateName_Name() {}

func (m *SubjectAlternateName) GetName() isSubjectAlternateName_Name {
	if m != nil {
		return m.Name
	}
	return nil
}

func (m *SubjectAlternateName) GetDns() string {
	if x, ok := m.GetName().(*SubjectAlternateName_Dns); ok {
		return x.Dns
	}
	return ""
}

func (m *SubjectAlternateName) GetUri() string {
	if x, ok := m.GetName().(*SubjectAlternateName_Uri); ok {
		return x.Uri
	}
	return ""
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*SubjectAlternateName) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*SubjectAlternateName_Dns)(nil),
		(*SubjectAlternateName_Uri)(nil),
	}
}

func init() {
	proto.RegisterType((*Certificates)(nil), "envoy.admin.v2alpha.Certificates")
	proto.RegisterType((*Certificate)(nil), "envoy.admin.v2alpha.Certificate")
	proto.RegisterType((*CertificateDetails)(nil), "envoy.admin.v2alpha.CertificateDetails")
	proto.RegisterType((*SubjectAlternateName)(nil), "envoy.admin.v2alpha.SubjectAlternateName")
}

func init() { proto.RegisterFile("envoy/admin/v2alpha/certs.proto", fileDescriptor_c7cd1796e05ff7fa) }

var fileDescriptor_c7cd1796e05ff7fa = []byte{
	// 425 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x52, 0xcd, 0x6e, 0xd3, 0x40,
	0x10, 0xc6, 0x49, 0x08, 0xca, 0x24, 0x50, 0xb1, 0x05, 0xc9, 0xea, 0xa5, 0x26, 0x1c, 0x08, 0x17,
	0x5b, 0x84, 0x13, 0x37, 0x48, 0x4a, 0xc4, 0xa9, 0xaa, 0x4c, 0x7b, 0x5e, 0x4d, 0x9c, 0x4d, 0xb3,
	0x68, 0x7f, 0xac, 0xdd, 0x75, 0xd4, 0x3c, 0x09, 0xaf, 0xc6, 0xe3, 0xa0, 0x59, 0xf7, 0x27, 0x88,
	0x48, 0x55, 0x6f, 0x9e, 0xef, 0x67, 0x3c, 0xfe, 0xfc, 0xc1, 0xa9, 0x30, 0x5b, 0xbb, 0x2b, 0x70,
	0xa5, 0xa5, 0x29, 0xb6, 0x53, 0x54, 0xf5, 0x06, 0x8b, 0x4a, 0xb8, 0xe0, 0xf3, 0xda, 0xd9, 0x60,
	0xd9, 0x71, 0x14, 0xe4, 0x51, 0x90, 0xdf, 0x0a, 0x4e, 0x4e, 0xaf, 0xad, 0xbd, 0x56, 0xa2, 0x88,
	0x92, 0x65, 0xb3, 0x2e, 0x82, 0xd4, 0xc2, 0x07, 0xd4, 0x75, 0xeb, 0x1a, 0x5f, 0xc2, 0x68, 0x2e,
	0x5c, 0x90, 0x6b, 0x59, 0x61, 0x10, 0x9e, 0x9d, 0xc1, 0xa8, 0xda, 0x9b, 0xd3, 0x24, 0xeb, 0x4e,
	0x86, 0xd3, 0x2c, 0x3f, 0xb0, 0x3c, 0xdf, 0x33, 0x96, 0xff, 0xb8, 0xc6, 0xbf, 0x13, 0x18, 0xee,
	0xb1, 0xec, 0x2b, 0xbc, 0xa8, 0x90, 0x93, 0xe4, 0x76, 0xe1, 0x87, 0xc7, 0x16, 0x9e, 0x89, 0x80,
	0x52, 0xf9, 0xb2, 0x5f, 0x21, 0xa1, 0x6c, 0x01, 0x40, 0x76, 0x5e, 0x6d, 0x50, 0x9a, 0xb4, 0xf3,
	0xb4, 0x25, 0x03, 0xb2, 0xce, 0xc9, 0x39, 0xfe, 0xd3, 0x01, 0xf6, 0xbf, 0x82, 0x31, 0xe8, 0xd5,
	0x18, 0x36, 0x69, 0x92, 0x25, 0x93, 0x41, 0x19, 0x9f, 0xd9, 0x7b, 0x78, 0xe9, 0x85, 0x93, 0xa8,
	0xb8, 0x69, 0xf4, 0x52, 0xb8, 0xb4, 0x13, 0xc9, 0x51, 0x0b, 0x9e, 0x47, 0x8c, 0x5d, 0xc1, 0x6b,
	0xdf, 0x2c, 0x7f, 0x89, 0x2a, 0x70, 0x54, 0x81, 0x1b, 0xd4, 0xc2, 0xa7, 0xdd, 0x78, 0xde, 0xc7,
	0x83, 0xe7, 0xfd, 0x6c, 0xd5, 0xdf, 0x54, 0x10, 0xce, 0x60, 0x10, 0xe7, 0xa8, 0x45, 0x79, 0xe4,
	0xef, 0x51, 0x9a, 0x3d, 0x9b, 0xc2, 0xdb, 0x15, 0xee, 0x3c, 0x6f, 0x4c, 0x90, 0x8a, 0x8b, 0x9b,
	0x5a, 0x3a, 0x0c, 0xd2, 0x9a, 0xb4, 0x97, 0x25, 0x93, 0x5e, 0x79, 0x4c, 0xe4, 0x15, 0x71, 0xdf,
	0xef, 0x29, 0xf6, 0x05, 0x60, 0x8b, 0x4a, 0xae, 0xf8, 0xda, 0x59, 0x9d, 0x3e, 0xcf, 0x92, 0xc9,
	0x70, 0x7a, 0x92, 0xb7, 0x05, 0xc8, 0xef, 0x0a, 0x90, 0x5f, 0xde, 0x15, 0xa0, 0x1c, 0x44, 0xf5,
	0xc2, 0x59, 0xcd, 0xe6, 0x70, 0xf4, 0xf0, 0x0e, 0x4e, 0x1d, 0x49, 0xfb, 0x8f, 0xfa, 0x5f, 0x3d,
	0x58, 0x08, 0x1c, 0x2f, 0xe0, 0xcd, 0xa1, 0x8f, 0x63, 0x0c, 0xba, 0x2b, 0xe3, 0xdb, 0x68, 0x7f,
	0x3c, 0x2b, 0x69, 0x20, 0xac, 0x71, 0xb2, 0x4d, 0x94, 0xb0, 0xc6, 0xc9, 0x59, 0x1f, 0x7a, 0x14,
	0xdf, 0xec, 0x13, 0xbc, 0x93, 0xb6, 0xcd, 0xae, 0x76, 0xf6, 0x66, 0x77, 0x28, 0xc6, 0x19, 0xd0,
	0x4f, 0xf4, 0x17, 0x74, 0xd5, 0x45, 0xb2, 0xec, 0xc7, 0xf3, 0x3e, 0xff, 0x0d, 0x00, 0x00, 0xff,
	0xff, 0xca, 0x32, 0x06, 0xd0, 0x25, 0x03, 0x00, 0x00,
}
  0707010000004F000081A4000003E800000064000000015E17A24700004D9A000000000000000000000000000000000000003C00000000cilium-proxy-20200109/go/envoy/admin/v2alpha/clusters.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/admin/v2alpha/clusters.proto

package envoy_admin_v2alpha

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_type "github.com/cilium/proxy/go/envoy/type"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Admin endpoint uses this wrapper for `/clusters` to display cluster status information.
// See :ref:`/clusters <operations_admin_interface_clusters>` for more information.
type Clusters struct {
	// Mapping from cluster name to each cluster's status.
	ClusterStatuses      []*ClusterStatus `protobuf:"bytes,1,rep,name=cluster_statuses,json=clusterStatuses,proto3" json:"cluster_statuses,omitempty"`
	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
	XXX_unrecognized     []byte           `json:"-"`
	XXX_sizecache        int32            `json:"-"`
}

func (m *Clusters) Reset()         { *m = Clusters{} }
func (m *Clusters) String() string { return proto.CompactTextString(m) }
func (*Clusters) ProtoMessage()    {}
func (*Clusters) Descriptor() ([]byte, []int) {
	return fileDescriptor_c6251a3a957f478b, []int{0}
}

func (m *Clusters) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Clusters.Unmarshal(m, b)
}
func (m *Clusters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Clusters.Marshal(b, m, deterministic)
}
func (m *Clusters) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Clusters.Merge(m, src)
}
func (m *Clusters) XXX_Size() int {
	return xxx_messageInfo_Clusters.Size(m)
}
func (m *Clusters) XXX_DiscardUnknown() {
	xxx_messageInfo_Clusters.DiscardUnknown(m)
}

var xxx_messageInfo_Clusters proto.InternalMessageInfo

func (m *Clusters) GetClusterStatuses() []*ClusterStatus {
	if m != nil {
		return m.ClusterStatuses
	}
	return nil
}

// Details an individual cluster's current status.
// [#next-free-field: 6]
type ClusterStatus struct {
	// Name of the cluster.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Denotes whether this cluster was added via API or configured statically.
	AddedViaApi bool `protobuf:"varint,2,opt,name=added_via_api,json=addedViaApi,proto3" json:"added_via_api,omitempty"`
	// The success rate threshold used in the last interval.
	// If
	// :ref:`outlier_detection.split_external_local_origin_errors<envoy_api_field_cluster.OutlierDetection.split_external_local_origin_errors>`
	// is *false*, all errors: externally and locally generated were used to calculate the threshold.
	// If
	// :ref:`outlier_detection.split_external_local_origin_errors<envoy_api_field_cluster.OutlierDetection.split_external_local_origin_errors>`
	// is *true*, only externally generated errors were used to calculate the threshold.
	// The threshold is used to eject hosts based on their success rate. See
	// :ref:`Cluster outlier detection <arch_overview_outlier_detection>` documentation for details.
	//
	// Note: this field may be omitted in any of the three following cases:
	//
	// 1. There were not enough hosts with enough request volume to proceed with success rate based
	//    outlier ejection.
	// 2. The threshold is computed to be < 0 because a negative value implies that there was no
	//    threshold for that interval.
	// 3. Outlier detection is not enabled for this cluster.
	SuccessRateEjectionThreshold *_type.Percent `protobuf:"bytes,3,opt,name=success_rate_ejection_threshold,json=successRateEjectionThreshold,proto3" json:"success_rate_ejection_threshold,omitempty"`
	// Mapping from host address to the host's current status.
	HostStatuses []*HostStatus `protobuf:"bytes,4,rep,name=host_statuses,json=hostStatuses,proto3" json:"host_statuses,omitempty"`
	// The success rate threshold used in the last interval when only locally originated failures were
	// taken into account and externally originated errors were treated as success.
	// This field should be interpreted only when
	// :ref:`outlier_detection.split_external_local_origin_errors<envoy_api_field_cluster.OutlierDetection.split_external_local_origin_errors>`
	// is *true*. The threshold is used to eject hosts based on their success rate.
	// See :ref:`Cluster outlier detection <arch_overview_outlier_detection>` documentation for
	// details.
	//
	// Note: this field may be omitted in any of the three following cases:
	//
	// 1. There were not enough hosts with enough request volume to proceed with success rate based
	//    outlier ejection.
	// 2. The threshold is computed to be < 0 because a negative value implies that there was no
	//    threshold for that interval.
	// 3. Outlier detection is not enabled for this cluster.
	LocalOriginSuccessRateEjectionThreshold *_type.Percent `protobuf:"bytes,5,opt,name=local_origin_success_rate_ejection_threshold,json=localOriginSuccessRateEjectionThreshold,proto3" json:"local_origin_success_rate_ejection_threshold,omitempty"`
	XXX_NoUnkeyedLiteral                    struct{}       `json:"-"`
	XXX_unrecognized                        []byte         `json:"-"`
	XXX_sizecache                           int32          `json:"-"`
}

func (m *ClusterStatus) Reset()         { *m = ClusterStatus{} }
func (m *ClusterStatus) String() string { return proto.CompactTextString(m) }
func (*ClusterStatus) ProtoMessage()    {}
func (*ClusterStatus) Descriptor() ([]byte, []int) {
	return fileDescriptor_c6251a3a957f478b, []int{1}
}

func (m *ClusterStatus) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClusterStatus.Unmarshal(m, b)
}
func (m *ClusterStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClusterStatus.Marshal(b, m, deterministic)
}
func (m *ClusterStatus) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClusterStatus.Merge(m, src)
}
func (m *ClusterStatus) XXX_Size() int {
	return xxx_messageInfo_ClusterStatus.Size(m)
}
func (m *ClusterStatus) XXX_DiscardUnknown() {
	xxx_messageInfo_ClusterStatus.DiscardUnknown(m)
}

var xxx_messageInfo_ClusterStatus proto.InternalMessageInfo

func (m *ClusterStatus) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *ClusterStatus) GetAddedViaApi() bool {
	if m != nil {
		return m.AddedViaApi
	}
	return false
}

func (m *ClusterStatus) GetSuccessRateEjectionThreshold() *_type.Percent {
	if m != nil {
		return m.SuccessRateEjectionThreshold
	}
	return nil
}

func (m *ClusterStatus) GetHostStatuses() []*HostStatus {
	if m != nil {
		return m.HostStatuses
	}
	return nil
}

func (m *ClusterStatus) GetLocalOriginSuccessRateEjectionThreshold() *_type.Percent {
	if m != nil {
		return m.LocalOriginSuccessRateEjectionThreshold
	}
	return nil
}

// Current state of a particular host.
// [#next-free-field: 9]
type HostStatus struct {
	// Address of this host.
	Address *core.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
	// List of stats specific to this host.
	Stats []*SimpleMetric `protobuf:"bytes,2,rep,name=stats,proto3" json:"stats,omitempty"`
	// The host's current health status.
	HealthStatus *HostHealthStatus `protobuf:"bytes,3,opt,name=health_status,json=healthStatus,proto3" json:"health_status,omitempty"`
	// Request success rate for this host over the last calculated interval.
	// If
	// :ref:`outlier_detection.split_external_local_origin_errors<envoy_api_field_cluster.OutlierDetection.split_external_local_origin_errors>`
	// is *false*, all errors: externally and locally generated were used in success rate
	// calculation. If
	// :ref:`outlier_detection.split_external_local_origin_errors<envoy_api_field_cluster.OutlierDetection.split_external_local_origin_errors>`
	// is *true*, only externally generated errors were used in success rate calculation.
	// See :ref:`Cluster outlier detection <arch_overview_outlier_detection>` documentation for
	// details.
	//
	// Note: the message will not be present if host did not have enough request volume to calculate
	// success rate or the cluster did not have enough hosts to run through success rate outlier
	// ejection.
	SuccessRate *_type.Percent `protobuf:"bytes,4,opt,name=success_rate,json=successRate,proto3" json:"success_rate,omitempty"`
	// The host's weight. If not configured, the value defaults to 1.
	Weight uint32 `protobuf:"varint,5,opt,name=weight,proto3" json:"weight,omitempty"`
	// The hostname of the host, if applicable.
	Hostname string `protobuf:"bytes,6,opt,name=hostname,proto3" json:"hostname,omitempty"`
	// The host's priority. If not configured, the value defaults to 0 (highest priority).
	Priority uint32 `protobuf:"varint,7,opt,name=priority,proto3" json:"priority,omitempty"`
	// Request success rate for this host over the last calculated
	// interval when only locally originated errors are taken into account and externally originated
	// errors were treated as success.
	// This field should be interpreted only when
	// :ref:`outlier_detection.split_external_local_origin_errors<envoy_api_field_cluster.OutlierDetection.split_external_local_origin_errors>`
	// is *true*.
	// See :ref:`Cluster outlier detection <arch_overview_outlier_detection>` documentation for
	// details.
	//
	// Note: the message will not be present if host did not have enough request volume to calculate
	// success rate or the cluster did not have enough hosts to run through success rate outlier
	// ejection.
	LocalOriginSuccessRate *_type.Percent `protobuf:"bytes,8,opt,name=local_origin_success_rate,json=localOriginSuccessRate,proto3" json:"local_origin_success_rate,omitempty"`
	XXX_NoUnkeyedLiteral   struct{}       `json:"-"`
	XXX_unrecognized       []byte         `json:"-"`
	XXX_sizecache          int32          `json:"-"`
}

func (m *HostStatus) Reset()         { *m = HostStatus{} }
func (m *HostStatus) String() string { return proto.CompactTextString(m) }
func (*HostStatus) ProtoMessage()    {}
func (*HostStatus) Descriptor() ([]byte, []int) {
	return fileDescriptor_c6251a3a957f478b, []int{2}
}

func (m *HostStatus) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HostStatus.Unmarshal(m, b)
}
func (m *HostStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HostStatus.Marshal(b, m, deterministic)
}
func (m *HostStatus) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HostStatus.Merge(m, src)
}
func (m *HostStatus) XXX_Size() int {
	return xxx_messageInfo_HostStatus.Size(m)
}
func (m *HostStatus) XXX_DiscardUnknown() {
	xxx_messageInfo_HostStatus.DiscardUnknown(m)
}

var xxx_messageInfo_HostStatus proto.InternalMessageInfo

func (m *HostStatus) GetAddress() *core.Address {
	if m != nil {
		return m.Address
	}
	return nil
}

func (m *HostStatus) GetStats() []*SimpleMetric {
	if m != nil {
		return m.Stats
	}
	return nil
}

func (m *HostStatus) GetHealthStatus() *HostHealthStatus {
	if m != nil {
		return m.HealthStatus
	}
	return nil
}

func (m *HostStatus) GetSuccessRate() *_type.Percent {
	if m != nil {
		return m.SuccessRate
	}
	return nil
}

func (m *HostStatus) GetWeight() uint32 {
	if m != nil {
		return m.Weight
	}
	return 0
}

func (m *HostStatus) GetHostname() string {
	if m != nil {
		return m.Hostname
	}
	return ""
}

func (m *HostStatus) GetPriority() uint32 {
	if m != nil {
		return m.Priority
	}
	return 0
}

func (m *HostStatus) GetLocalOriginSuccessRate() *_type.Percent {
	if m != nil {
		return m.LocalOriginSuccessRate
	}
	return nil
}

// Health status for a host.
// [#next-free-field: 7]
type HostHealthStatus struct {
	// The host is currently failing active health checks.
	FailedActiveHealthCheck bool `protobuf:"varint,1,opt,name=failed_active_health_check,json=failedActiveHealthCheck,proto3" json:"failed_active_health_check,omitempty"`
	// The host is currently considered an outlier and has been ejected.
	FailedOutlierCheck bool `protobuf:"varint,2,opt,name=failed_outlier_check,json=failedOutlierCheck,proto3" json:"failed_outlier_check,omitempty"`
	// The host is currently being marked as degraded through active health checking.
	FailedActiveDegradedCheck bool `protobuf:"varint,4,opt,name=failed_active_degraded_check,json=failedActiveDegradedCheck,proto3" json:"failed_active_degraded_check,omitempty"`
	// The host has been removed from service discovery, but is being stabilized due to active
	// health checking.
	PendingDynamicRemoval bool `protobuf:"varint,5,opt,name=pending_dynamic_removal,json=pendingDynamicRemoval,proto3" json:"pending_dynamic_removal,omitempty"`
	// The host has not yet been health checked.
	PendingActiveHc bool `protobuf:"varint,6,opt,name=pending_active_hc,json=pendingActiveHc,proto3" json:"pending_active_hc,omitempty"`
	// Health status as reported by EDS. Note: only HEALTHY and UNHEALTHY are currently supported
	// here.
	// TODO(mrice32): pipe through remaining EDS health status possibilities.
	EdsHealthStatus      core.HealthStatus `protobuf:"varint,3,opt,name=eds_health_status,json=edsHealthStatus,proto3,enum=envoy.api.v2.core.HealthStatus" json:"eds_health_status,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *HostHealthStatus) Reset()         { *m = HostHealthStatus{} }
func (m *HostHealthStatus) String() string { return proto.CompactTextString(m) }
func (*HostHealthStatus) ProtoMessage()    {}
func (*HostHealthStatus) Descriptor() ([]byte, []int) {
	return fileDescriptor_c6251a3a957f478b, []int{3}
}

func (m *HostHealthStatus) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HostHealthStatus.Unmarshal(m, b)
}
func (m *HostHealthStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HostHealthStatus.Marshal(b, m, deterministic)
}
func (m *HostHealthStatus) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HostHealthStatus.Merge(m, src)
}
func (m *HostHealthStatus) XXX_Size() int {
	return xxx_messageInfo_HostHealthStatus.Size(m)
}
func (m *HostHealthStatus) XXX_DiscardUnknown() {
	xxx_messageInfo_HostHealthStatus.DiscardUnknown(m)
}

var xxx_messageInfo_HostHealthStatus proto.InternalMessageInfo

func (m *HostHealthStatus) GetFailedActiveHealthCheck() bool {
	if m != nil {
		return m.FailedActiveHealthCheck
	}
	return false
}

func (m *HostHealthStatus) GetFailedOutlierCheck() bool {
	if m != nil {
		return m.FailedOutlierCheck
	}
	return false
}

func (m *HostHealthStatus) GetFailedActiveDegradedCheck() bool {
	if m != nil {
		return m.FailedActiveDegradedCheck
	}
	return false
}

func (m *HostHealthStatus) GetPendingDynamicRemoval() bool {
	if m != nil {
		return m.PendingDynamicRemoval
	}
	return false
}

func (m *HostHealthStatus) GetPendingActiveHc() bool {
	if m != nil {
		return m.PendingActiveHc
	}
	return false
}

func (m *HostHealthStatus) GetEdsHealthStatus() core.HealthStatus {
	if m != nil {
		return m.EdsHealthStatus
	}
	return core.HealthStatus_UNKNOWN
}

func init() {
	proto.RegisterType((*Clusters)(nil), "envoy.admin.v2alpha.Clusters")
	proto.RegisterType((*ClusterStatus)(nil), "envoy.admin.v2alpha.ClusterStatus")
	proto.RegisterType((*HostStatus)(nil), "envoy.admin.v2alpha.HostStatus")
	proto.RegisterType((*HostHealthStatus)(nil), "envoy.admin.v2alpha.HostHealthStatus")
}

func init() { proto.RegisterFile("envoy/admin/v2alpha/clusters.proto", fileDescriptor_c6251a3a957f478b) }

var fileDescriptor_c6251a3a957f478b = []byte{
	// 666 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0xef, 0x6e, 0xd3, 0x3e,
	0x14, 0x55, 0xbb, 0x6e, 0xeb, 0xcf, 0x5d, 0x7f, 0xdb, 0x3c, 0xd8, 0xb2, 0x6a, 0xd2, 0xba, 0x08,
	0x44, 0x85, 0x50, 0x82, 0xca, 0x34, 0x3e, 0xf0, 0x01, 0xed, 0x0f, 0xd2, 0x04, 0x1a, 0x9b, 0x32,
	0x84, 0x04, 0x5f, 0x2c, 0xe3, 0x5c, 0x1a, 0x43, 0x1a, 0x47, 0xb6, 0x1b, 0xe8, 0xd3, 0xf0, 0x64,
	0x3c, 0x05, 0x2f, 0x80, 0x62, 0x3b, 0x5d, 0xc6, 0x5a, 0xf8, 0x96, 0x9b, 0x7b, 0x4e, 0x72, 0xce,
	0xbd, 0xc7, 0x46, 0x3e, 0x64, 0x85, 0x98, 0x86, 0x34, 0x1e, 0xf3, 0x2c, 0x2c, 0x86, 0x34, 0xcd,
	0x13, 0x1a, 0xb2, 0x74, 0xa2, 0x34, 0x48, 0x15, 0xe4, 0x52, 0x68, 0x81, 0xb7, 0x0c, 0x26, 0x30,
	0x98, 0xc0, 0x61, 0x7a, 0x07, 0xf3, 0x88, 0x63, 0xd0, 0x92, 0x33, 0xc7, 0xeb, 0xed, 0x3b, 0x48,
	0xce, 0xc3, 0x62, 0x18, 0x32, 0x21, 0x21, 0xa4, 0x71, 0x2c, 0x41, 0x55, 0x80, 0x07, 0x77, 0x01,
	0x09, 0xd0, 0x54, 0x27, 0x84, 0x25, 0xc0, 0xbe, 0x3a, 0x94, 0x67, 0x51, 0x7a, 0x9a, 0x43, 0x98,
	0x83, 0x64, 0x90, 0x69, 0xdb, 0xf1, 0x3f, 0xa0, 0xf6, 0xa9, 0x93, 0x8a, 0x2f, 0xd0, 0x86, 0x93,
	0x4d, 0x94, 0xa6, 0x7a, 0xa2, 0x40, 0x79, 0x8d, 0xfe, 0xd2, 0xa0, 0x33, 0xf4, 0x83, 0x39, 0xfa,
	0x03, 0x47, 0xbc, 0x36, 0xd8, 0x68, 0x9d, 0xd5, 0x4b, 0x50, 0xfe, 0xcf, 0x26, 0xea, 0xde, 0x82,
	0x60, 0x8c, 0x5a, 0x19, 0x1d, 0x83, 0xd7, 0xe8, 0x37, 0x06, 0xff, 0x45, 0xe6, 0x19, 0xfb, 0xa8,
	0x4b, 0xe3, 0x18, 0x62, 0x52, 0x70, 0x4a, 0x68, 0xce, 0xbd, 0x66, 0xbf, 0x31, 0x68, 0x47, 0x1d,
	0xf3, 0xf2, 0x3d, 0xa7, 0xc7, 0x39, 0xc7, 0x1f, 0xd1, 0xbe, 0x9a, 0x30, 0x06, 0x4a, 0x11, 0x49,
	0x35, 0x10, 0xf8, 0x02, 0x4c, 0x73, 0x91, 0x11, 0x9d, 0x48, 0x50, 0x89, 0x48, 0x63, 0x6f, 0xa9,
	0xdf, 0x18, 0x74, 0x86, 0x5b, 0x4e, 0x67, 0x69, 0x34, 0xb8, 0xb2, 0x46, 0xa3, 0x3d, 0xc7, 0x8d,
	0xa8, 0x86, 0x57, 0x8e, 0xf9, 0xae, 0x22, 0xe2, 0x33, 0xd4, 0x4d, 0x84, 0xd2, 0x37, 0x8e, 0x5b,
	0xc6, 0xf1, 0xfe, 0x5c, 0xc7, 0xe7, 0x42, 0x69, 0x67, 0x77, 0x2d, 0x99, 0x3d, 0x83, 0xc2, 0x12,
	0x3d, 0x49, 0x05, 0xa3, 0x29, 0x11, 0x92, 0x8f, 0x78, 0x46, 0xfe, 0x25, 0x77, 0x79, 0xb1, 0xdc,
	0x47, 0xe6, 0x43, 0x97, 0xe6, 0x3b, 0xd7, 0x7f, 0x51, 0xee, 0xff, 0x58, 0x42, 0xe8, 0x46, 0x10,
	0x3e, 0x44, 0xab, 0x2e, 0x1a, 0x66, 0xbe, 0x9d, 0x61, 0xaf, 0xb2, 0x90, 0xf3, 0xa0, 0x18, 0x06,
	0x65, 0x36, 0x82, 0x63, 0x8b, 0x88, 0x2a, 0x28, 0x7e, 0x8e, 0x96, 0x4b, 0xe7, 0xca, 0x6b, 0x1a,
	0xdb, 0x07, 0x73, 0x6d, 0x5f, 0xf3, 0x71, 0x9e, 0xc2, 0x85, 0x49, 0x66, 0x64, 0xf1, 0xf8, 0x35,
	0xea, 0xba, 0xa0, 0xd9, 0xc9, 0xb9, 0x0d, 0x3c, 0x5c, 0x38, 0xb7, 0x73, 0x83, 0x9e, 0x4d, 0xaf,
	0x56, 0xe1, 0x23, 0xb4, 0x56, 0x1f, 0x98, 0xd7, 0x5a, 0x3c, 0x9d, 0x4e, 0x6d, 0x99, 0x78, 0x1b,
	0xad, 0x7c, 0x03, 0x3e, 0x4a, 0xb4, 0x99, 0x67, 0x37, 0x72, 0x15, 0xee, 0xa1, 0x76, 0xb9, 0x1d,
	0x93, 0xb5, 0x15, 0x93, 0xb5, 0x59, 0x5d, 0xf6, 0x72, 0xc9, 0x85, 0xe4, 0x7a, 0xea, 0xad, 0x1a,
	0xd6, 0xac, 0xc6, 0x6f, 0xd1, 0xee, 0xc2, 0x2d, 0x7a, 0xed, 0xc5, 0xa2, 0xb6, 0xe7, 0xaf, 0xcc,
	0xff, 0xd5, 0x44, 0x1b, 0x7f, 0x5a, 0xc7, 0x2f, 0x50, 0xef, 0x33, 0xe5, 0x29, 0xc4, 0x84, 0x32,
	0xcd, 0x0b, 0x20, 0xf5, 0xf3, 0x6a, 0x56, 0xd7, 0x8e, 0x76, 0x2c, 0xe2, 0xd8, 0x00, 0x2c, 0xfb,
	0xb4, 0x6c, 0xe3, 0xa7, 0xe8, 0x9e, 0x23, 0x8b, 0x89, 0x4e, 0x39, 0x48, 0x47, 0xb3, 0x87, 0x06,
	0xdb, 0xde, 0xa5, 0x6d, 0x59, 0xc6, 0x4b, 0xb4, 0x77, 0xfb, 0x77, 0x31, 0x8c, 0x24, 0x2d, 0x0f,
	0x9c, 0x65, 0xb6, 0x0c, 0x73, 0xb7, 0xfe, 0xc3, 0x33, 0x87, 0xb0, 0x1f, 0x38, 0x42, 0x3b, 0x39,
	0x64, 0x31, 0xcf, 0x46, 0x24, 0x9e, 0x66, 0x74, 0xcc, 0x19, 0x91, 0x30, 0x16, 0x05, 0x4d, 0xcd,
	0xd4, 0xdb, 0xd1, 0x7d, 0xd7, 0x3e, 0xb3, 0xdd, 0xc8, 0x36, 0xf1, 0x63, 0xb4, 0x59, 0xf1, 0x2a,
	0xa3, 0xcc, 0x6c, 0xa3, 0x1d, 0xad, 0xbb, 0x86, 0xf3, 0xc7, 0xf0, 0x1b, 0xb4, 0x09, 0xb1, 0x22,
	0x77, 0x03, 0xf5, 0xff, 0xcd, 0x41, 0xac, 0xa5, 0xf8, 0x56, 0x94, 0xd6, 0x21, 0x56, 0xf5, 0x17,
	0x27, 0x87, 0xe8, 0x80, 0x0b, 0xcb, 0xca, 0xa5, 0xf8, 0x3e, 0x9d, 0x97, 0xc8, 0x93, 0xea, 0x66,
	0x52, 0x57, 0xe5, 0x35, 0x78, 0xd5, 0xf8, 0xb4, 0x62, 0xee, 0xc3, 0x67, 0xbf, 0x03, 0x00, 0x00,
	0xff, 0xff, 0x95, 0x47, 0x7a, 0xc5, 0xce, 0x05, 0x00, 0x00,
}
  07070100000050000081A4000003E800000064000000015E17A2470000CFE9000000000000000000000000000000000000003F00000000cilium-proxy-20200109/go/envoy/admin/v2alpha/config_dump.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/admin/v2alpha/config_dump.proto

package envoy_admin_v2alpha

import (
	fmt "fmt"
	v21 "github.com/cilium/proxy/go/envoy/api/v2"
	auth "github.com/cilium/proxy/go/envoy/api/v2/auth"
	v2 "github.com/cilium/proxy/go/envoy/config/bootstrap/v2"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// The :ref:`/config_dump <operations_admin_interface_config_dump>` admin endpoint uses this wrapper
// message to maintain and serve arbitrary configuration information from any component in Envoy.
type ConfigDump struct {
	// This list is serialized and dumped in its entirety at the
	// :ref:`/config_dump <operations_admin_interface_config_dump>` endpoint.
	//
	// The following configurations are currently supported and will be dumped in the order given
	// below:
	//
	// * *bootstrap*: :ref:`BootstrapConfigDump <envoy_api_msg_admin.v2alpha.BootstrapConfigDump>`
	// * *clusters*: :ref:`ClustersConfigDump <envoy_api_msg_admin.v2alpha.ClustersConfigDump>`
	// * *listeners*: :ref:`ListenersConfigDump <envoy_api_msg_admin.v2alpha.ListenersConfigDump>`
	// * *routes*:  :ref:`RoutesConfigDump <envoy_api_msg_admin.v2alpha.RoutesConfigDump>`
	Configs              []*any.Any `protobuf:"bytes,1,rep,name=configs,proto3" json:"configs,omitempty"`
	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
	XXX_unrecognized     []byte     `json:"-"`
	XXX_sizecache        int32      `json:"-"`
}

func (m *ConfigDump) Reset()         { *m = ConfigDump{} }
func (m *ConfigDump) String() string { return proto.CompactTextString(m) }
func (*ConfigDump) ProtoMessage()    {}
func (*ConfigDump) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{0}
}

func (m *ConfigDump) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ConfigDump.Unmarshal(m, b)
}
func (m *ConfigDump) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ConfigDump.Marshal(b, m, deterministic)
}
func (m *ConfigDump) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ConfigDump.Merge(m, src)
}
func (m *ConfigDump) XXX_Size() int {
	return xxx_messageInfo_ConfigDump.Size(m)
}
func (m *ConfigDump) XXX_DiscardUnknown() {
	xxx_messageInfo_ConfigDump.DiscardUnknown(m)
}

var xxx_messageInfo_ConfigDump proto.InternalMessageInfo

func (m *ConfigDump) GetConfigs() []*any.Any {
	if m != nil {
		return m.Configs
	}
	return nil
}

// This message describes the bootstrap configuration that Envoy was started with. This includes
// any CLI overrides that were merged. Bootstrap configuration information can be used to recreate
// the static portions of an Envoy configuration by reusing the output as the bootstrap
// configuration for another Envoy.
type BootstrapConfigDump struct {
	Bootstrap *v2.Bootstrap `protobuf:"bytes,1,opt,name=bootstrap,proto3" json:"bootstrap,omitempty"`
	// The timestamp when the BootstrapConfig was last updated.
	LastUpdated          *timestamp.Timestamp `protobuf:"bytes,2,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *BootstrapConfigDump) Reset()         { *m = BootstrapConfigDump{} }
func (m *BootstrapConfigDump) String() string { return proto.CompactTextString(m) }
func (*BootstrapConfigDump) ProtoMessage()    {}
func (*BootstrapConfigDump) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{1}
}

func (m *BootstrapConfigDump) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_BootstrapConfigDump.Unmarshal(m, b)
}
func (m *BootstrapConfigDump) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_BootstrapConfigDump.Marshal(b, m, deterministic)
}
func (m *BootstrapConfigDump) XXX_Merge(src proto.Message) {
	xxx_messageInfo_BootstrapConfigDump.Merge(m, src)
}
func (m *BootstrapConfigDump) XXX_Size() int {
	return xxx_messageInfo_BootstrapConfigDump.Size(m)
}
func (m *BootstrapConfigDump) XXX_DiscardUnknown() {
	xxx_messageInfo_BootstrapConfigDump.DiscardUnknown(m)
}

var xxx_messageInfo_BootstrapConfigDump proto.InternalMessageInfo

func (m *BootstrapConfigDump) GetBootstrap() *v2.Bootstrap {
	if m != nil {
		return m.Bootstrap
	}
	return nil
}

func (m *BootstrapConfigDump) GetLastUpdated() *timestamp.Timestamp {
	if m != nil {
		return m.LastUpdated
	}
	return nil
}

// Envoy's listener manager fills this message with all currently known listeners. Listener
// configuration information can be used to recreate an Envoy configuration by populating all
// listeners as static listeners or by returning them in a LDS response.
// [#next-free-field: 6]
type ListenersConfigDump struct {
	// This is the :ref:`version_info <envoy_api_field_DiscoveryResponse.version_info>` in the
	// last processed LDS discovery response. If there are only static bootstrap listeners, this field
	// will be "".
	VersionInfo string `protobuf:"bytes,1,opt,name=version_info,json=versionInfo,proto3" json:"version_info,omitempty"`
	// The statically loaded listener configs.
	StaticListeners []*ListenersConfigDump_StaticListener `protobuf:"bytes,2,rep,name=static_listeners,json=staticListeners,proto3" json:"static_listeners,omitempty"`
	// The dynamically loaded active listeners. These are listeners that are available to service
	// data plane traffic.
	DynamicActiveListeners []*ListenersConfigDump_DynamicListener `protobuf:"bytes,3,rep,name=dynamic_active_listeners,json=dynamicActiveListeners,proto3" json:"dynamic_active_listeners,omitempty"`
	// The dynamically loaded warming listeners. These are listeners that are currently undergoing
	// warming in preparation to service data plane traffic. Note that if attempting to recreate an
	// Envoy configuration from a configuration dump, the warming listeners should generally be
	// discarded.
	DynamicWarmingListeners []*ListenersConfigDump_DynamicListener `protobuf:"bytes,4,rep,name=dynamic_warming_listeners,json=dynamicWarmingListeners,proto3" json:"dynamic_warming_listeners,omitempty"`
	// The dynamically loaded draining listeners. These are listeners that are currently undergoing
	// draining in preparation to stop servicing data plane traffic. Note that if attempting to
	// recreate an Envoy configuration from a configuration dump, the draining listeners should
	// generally be discarded.
	DynamicDrainingListeners []*ListenersConfigDump_DynamicListener `protobuf:"bytes,5,rep,name=dynamic_draining_listeners,json=dynamicDrainingListeners,proto3" json:"dynamic_draining_listeners,omitempty"`
	XXX_NoUnkeyedLiteral     struct{}                               `json:"-"`
	XXX_unrecognized         []byte                                 `json:"-"`
	XXX_sizecache            int32                                  `json:"-"`
}

func (m *ListenersConfigDump) Reset()         { *m = ListenersConfigDump{} }
func (m *ListenersConfigDump) String() string { return proto.CompactTextString(m) }
func (*ListenersConfigDump) ProtoMessage()    {}
func (*ListenersConfigDump) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{2}
}

func (m *ListenersConfigDump) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ListenersConfigDump.Unmarshal(m, b)
}
func (m *ListenersConfigDump) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ListenersConfigDump.Marshal(b, m, deterministic)
}
func (m *ListenersConfigDump) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ListenersConfigDump.Merge(m, src)
}
func (m *ListenersConfigDump) XXX_Size() int {
	return xxx_messageInfo_ListenersConfigDump.Size(m)
}
func (m *ListenersConfigDump) XXX_DiscardUnknown() {
	xxx_messageInfo_ListenersConfigDump.DiscardUnknown(m)
}

var xxx_messageInfo_ListenersConfigDump proto.InternalMessageInfo

func (m *ListenersConfigDump) GetVersionInfo() string {
	if m != nil {
		return m.VersionInfo
	}
	return ""
}

func (m *ListenersConfigDump) GetStaticListeners() []*ListenersConfigDump_StaticListener {
	if m != nil {
		return m.StaticListeners
	}
	return nil
}

func (m *ListenersConfigDump) GetDynamicActiveListeners() []*ListenersConfigDump_DynamicListener {
	if m != nil {
		return m.DynamicActiveListeners
	}
	return nil
}

func (m *ListenersConfigDump) GetDynamicWarmingListeners() []*ListenersConfigDump_DynamicListener {
	if m != nil {
		return m.DynamicWarmingListeners
	}
	return nil
}

func (m *ListenersConfigDump) GetDynamicDrainingListeners() []*ListenersConfigDump_DynamicListener {
	if m != nil {
		return m.DynamicDrainingListeners
	}
	return nil
}

// Describes a statically loaded listener.
type ListenersConfigDump_StaticListener struct {
	// The listener config.
	Listener *v21.Listener `protobuf:"bytes,1,opt,name=listener,proto3" json:"listener,omitempty"`
	// The timestamp when the Listener was last updated.
	LastUpdated          *timestamp.Timestamp `protobuf:"bytes,2,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *ListenersConfigDump_StaticListener) Reset()         { *m = ListenersConfigDump_StaticListener{} }
func (m *ListenersConfigDump_StaticListener) String() string { return proto.CompactTextString(m) }
func (*ListenersConfigDump_StaticListener) ProtoMessage()    {}
func (*ListenersConfigDump_StaticListener) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{2, 0}
}

func (m *ListenersConfigDump_StaticListener) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ListenersConfigDump_StaticListener.Unmarshal(m, b)
}
func (m *ListenersConfigDump_StaticListener) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ListenersConfigDump_StaticListener.Marshal(b, m, deterministic)
}
func (m *ListenersConfigDump_StaticListener) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ListenersConfigDump_StaticListener.Merge(m, src)
}
func (m *ListenersConfigDump_StaticListener) XXX_Size() int {
	return xxx_messageInfo_ListenersConfigDump_StaticListener.Size(m)
}
func (m *ListenersConfigDump_StaticListener) XXX_DiscardUnknown() {
	xxx_messageInfo_ListenersConfigDump_StaticListener.DiscardUnknown(m)
}

var xxx_messageInfo_ListenersConfigDump_StaticListener proto.InternalMessageInfo

func (m *ListenersConfigDump_StaticListener) GetListener() *v21.Listener {
	if m != nil {
		return m.Listener
	}
	return nil
}

func (m *ListenersConfigDump_StaticListener) GetLastUpdated() *timestamp.Timestamp {
	if m != nil {
		return m.LastUpdated
	}
	return nil
}

// Describes a dynamically loaded cluster via the LDS API.
type ListenersConfigDump_DynamicListener struct {
	// This is the per-resource version information. This version is currently taken from the
	// :ref:`version_info <envoy_api_field_DiscoveryResponse.version_info>` field at the time
	// that the listener was loaded. In the future, discrete per-listener versions may be supported
	// by the API.
	VersionInfo string `protobuf:"bytes,1,opt,name=version_info,json=versionInfo,proto3" json:"version_info,omitempty"`
	// The listener config.
	Listener *v21.Listener `protobuf:"bytes,2,opt,name=listener,proto3" json:"listener,omitempty"`
	// The timestamp when the Listener was last updated.
	LastUpdated          *timestamp.Timestamp `protobuf:"bytes,3,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *ListenersConfigDump_DynamicListener) Reset()         { *m = ListenersConfigDump_DynamicListener{} }
func (m *ListenersConfigDump_DynamicListener) String() string { return proto.CompactTextString(m) }
func (*ListenersConfigDump_DynamicListener) ProtoMessage()    {}
func (*ListenersConfigDump_DynamicListener) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{2, 1}
}

func (m *ListenersConfigDump_DynamicListener) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ListenersConfigDump_DynamicListener.Unmarshal(m, b)
}
func (m *ListenersConfigDump_DynamicListener) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ListenersConfigDump_DynamicListener.Marshal(b, m, deterministic)
}
func (m *ListenersConfigDump_DynamicListener) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ListenersConfigDump_DynamicListener.Merge(m, src)
}
func (m *ListenersConfigDump_DynamicListener) XXX_Size() int {
	return xxx_messageInfo_ListenersConfigDump_DynamicListener.Size(m)
}
func (m *ListenersConfigDump_DynamicListener) XXX_DiscardUnknown() {
	xxx_messageInfo_ListenersConfigDump_DynamicListener.DiscardUnknown(m)
}

var xxx_messageInfo_ListenersConfigDump_DynamicListener proto.InternalMessageInfo

func (m *ListenersConfigDump_DynamicListener) GetVersionInfo() string {
	if m != nil {
		return m.VersionInfo
	}
	return ""
}

func (m *ListenersConfigDump_DynamicListener) GetListener() *v21.Listener {
	if m != nil {
		return m.Listener
	}
	return nil
}

func (m *ListenersConfigDump_DynamicListener) GetLastUpdated() *timestamp.Timestamp {
	if m != nil {
		return m.LastUpdated
	}
	return nil
}

// Envoy's cluster manager fills this message with all currently known clusters. Cluster
// configuration information can be used to recreate an Envoy configuration by populating all
// clusters as static clusters or by returning them in a CDS response.
type ClustersConfigDump struct {
	// This is the :ref:`version_info <envoy_api_field_DiscoveryResponse.version_info>` in the
	// last processed CDS discovery response. If there are only static bootstrap clusters, this field
	// will be "".
	VersionInfo string `protobuf:"bytes,1,opt,name=version_info,json=versionInfo,proto3" json:"version_info,omitempty"`
	// The statically loaded cluster configs.
	StaticClusters []*ClustersConfigDump_StaticCluster `protobuf:"bytes,2,rep,name=static_clusters,json=staticClusters,proto3" json:"static_clusters,omitempty"`
	// The dynamically loaded active clusters. These are clusters that are available to service
	// data plane traffic.
	DynamicActiveClusters []*ClustersConfigDump_DynamicCluster `protobuf:"bytes,3,rep,name=dynamic_active_clusters,json=dynamicActiveClusters,proto3" json:"dynamic_active_clusters,omitempty"`
	// The dynamically loaded warming clusters. These are clusters that are currently undergoing
	// warming in preparation to service data plane traffic. Note that if attempting to recreate an
	// Envoy configuration from a configuration dump, the warming clusters should generally be
	// discarded.
	DynamicWarmingClusters []*ClustersConfigDump_DynamicCluster `protobuf:"bytes,4,rep,name=dynamic_warming_clusters,json=dynamicWarmingClusters,proto3" json:"dynamic_warming_clusters,omitempty"`
	XXX_NoUnkeyedLiteral   struct{}                             `json:"-"`
	XXX_unrecognized       []byte                               `json:"-"`
	XXX_sizecache          int32                                `json:"-"`
}

func (m *ClustersConfigDump) Reset()         { *m = ClustersConfigDump{} }
func (m *ClustersConfigDump) String() string { return proto.CompactTextString(m) }
func (*ClustersConfigDump) ProtoMessage()    {}
func (*ClustersConfigDump) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{3}
}

func (m *ClustersConfigDump) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClustersConfigDump.Unmarshal(m, b)
}
func (m *ClustersConfigDump) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClustersConfigDump.Marshal(b, m, deterministic)
}
func (m *ClustersConfigDump) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClustersConfigDump.Merge(m, src)
}
func (m *ClustersConfigDump) XXX_Size() int {
	return xxx_messageInfo_ClustersConfigDump.Size(m)
}
func (m *ClustersConfigDump) XXX_DiscardUnknown() {
	xxx_messageInfo_ClustersConfigDump.DiscardUnknown(m)
}

var xxx_messageInfo_ClustersConfigDump proto.InternalMessageInfo

func (m *ClustersConfigDump) GetVersionInfo() string {
	if m != nil {
		return m.VersionInfo
	}
	return ""
}

func (m *ClustersConfigDump) GetStaticClusters() []*ClustersConfigDump_StaticCluster {
	if m != nil {
		return m.StaticClusters
	}
	return nil
}

func (m *ClustersConfigDump) GetDynamicActiveClusters() []*ClustersConfigDump_DynamicCluster {
	if m != nil {
		return m.DynamicActiveClusters
	}
	return nil
}

func (m *ClustersConfigDump) GetDynamicWarmingClusters() []*ClustersConfigDump_DynamicCluster {
	if m != nil {
		return m.DynamicWarmingClusters
	}
	return nil
}

// Describes a statically loaded cluster.
type ClustersConfigDump_StaticCluster struct {
	// The cluster config.
	Cluster *v21.Cluster `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"`
	// The timestamp when the Cluster was last updated.
	LastUpdated          *timestamp.Timestamp `protobuf:"bytes,2,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *ClustersConfigDump_StaticCluster) Reset()         { *m = ClustersConfigDump_StaticCluster{} }
func (m *ClustersConfigDump_StaticCluster) String() string { return proto.CompactTextString(m) }
func (*ClustersConfigDump_StaticCluster) ProtoMessage()    {}
func (*ClustersConfigDump_StaticCluster) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{3, 0}
}

func (m *ClustersConfigDump_StaticCluster) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClustersConfigDump_StaticCluster.Unmarshal(m, b)
}
func (m *ClustersConfigDump_StaticCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClustersConfigDump_StaticCluster.Marshal(b, m, deterministic)
}
func (m *ClustersConfigDump_StaticCluster) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClustersConfigDump_StaticCluster.Merge(m, src)
}
func (m *ClustersConfigDump_StaticCluster) XXX_Size() int {
	return xxx_messageInfo_ClustersConfigDump_StaticCluster.Size(m)
}
func (m *ClustersConfigDump_StaticCluster) XXX_DiscardUnknown() {
	xxx_messageInfo_ClustersConfigDump_StaticCluster.DiscardUnknown(m)
}

var xxx_messageInfo_ClustersConfigDump_StaticCluster proto.InternalMessageInfo

func (m *ClustersConfigDump_StaticCluster) GetCluster() *v21.Cluster {
	if m != nil {
		return m.Cluster
	}
	return nil
}

func (m *ClustersConfigDump_StaticCluster) GetLastUpdated() *timestamp.Timestamp {
	if m != nil {
		return m.LastUpdated
	}
	return nil
}

// Describes a dynamically loaded cluster via the CDS API.
type ClustersConfigDump_DynamicCluster struct {
	// This is the per-resource version information. This version is currently taken from the
	// :ref:`version_info <envoy_api_field_DiscoveryResponse.version_info>` field at the time
	// that the cluster was loaded. In the future, discrete per-cluster versions may be supported by
	// the API.
	VersionInfo string `protobuf:"bytes,1,opt,name=version_info,json=versionInfo,proto3" json:"version_info,omitempty"`
	// The cluster config.
	Cluster *v21.Cluster `protobuf:"bytes,2,opt,name=cluster,proto3" json:"cluster,omitempty"`
	// The timestamp when the Cluster was last updated.
	LastUpdated          *timestamp.Timestamp `protobuf:"bytes,3,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *ClustersConfigDump_DynamicCluster) Reset()         { *m = ClustersConfigDump_DynamicCluster{} }
func (m *ClustersConfigDump_DynamicCluster) String() string { return proto.CompactTextString(m) }
func (*ClustersConfigDump_DynamicCluster) ProtoMessage()    {}
func (*ClustersConfigDump_DynamicCluster) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{3, 1}
}

func (m *ClustersConfigDump_DynamicCluster) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClustersConfigDump_DynamicCluster.Unmarshal(m, b)
}
func (m *ClustersConfigDump_DynamicCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClustersConfigDump_DynamicCluster.Marshal(b, m, deterministic)
}
func (m *ClustersConfigDump_DynamicCluster) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClustersConfigDump_DynamicCluster.Merge(m, src)
}
func (m *ClustersConfigDump_DynamicCluster) XXX_Size() int {
	return xxx_messageInfo_ClustersConfigDump_DynamicCluster.Size(m)
}
func (m *ClustersConfigDump_DynamicCluster) XXX_DiscardUnknown() {
	xxx_messageInfo_ClustersConfigDump_DynamicCluster.DiscardUnknown(m)
}

var xxx_messageInfo_ClustersConfigDump_DynamicCluster proto.InternalMessageInfo

func (m *ClustersConfigDump_DynamicCluster) GetVersionInfo() string {
	if m != nil {
		return m.VersionInfo
	}
	return ""
}

func (m *ClustersConfigDump_DynamicCluster) GetCluster() *v21.Cluster {
	if m != nil {
		return m.Cluster
	}
	return nil
}

func (m *ClustersConfigDump_DynamicCluster) GetLastUpdated() *timestamp.Timestamp {
	if m != nil {
		return m.LastUpdated
	}
	return nil
}

// Envoy's RDS implementation fills this message with all currently loaded routes, as described by
// their RouteConfiguration objects. Static routes configured in the bootstrap configuration are
// separated from those configured dynamically via RDS. Route configuration information can be used
// to recreate an Envoy configuration by populating all routes as static routes or by returning them
// in RDS responses.
type RoutesConfigDump struct {
	// The statically loaded route configs.
	StaticRouteConfigs []*RoutesConfigDump_StaticRouteConfig `protobuf:"bytes,2,rep,name=static_route_configs,json=staticRouteConfigs,proto3" json:"static_route_configs,omitempty"`
	// The dynamically loaded route configs.
	DynamicRouteConfigs  []*RoutesConfigDump_DynamicRouteConfig `protobuf:"bytes,3,rep,name=dynamic_route_configs,json=dynamicRouteConfigs,proto3" json:"dynamic_route_configs,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
	XXX_unrecognized     []byte                                 `json:"-"`
	XXX_sizecache        int32                                  `json:"-"`
}

func (m *RoutesConfigDump) Reset()         { *m = RoutesConfigDump{} }
func (m *RoutesConfigDump) String() string { return proto.CompactTextString(m) }
func (*RoutesConfigDump) ProtoMessage()    {}
func (*RoutesConfigDump) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{4}
}

func (m *RoutesConfigDump) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RoutesConfigDump.Unmarshal(m, b)
}
func (m *RoutesConfigDump) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RoutesConfigDump.Marshal(b, m, deterministic)
}
func (m *RoutesConfigDump) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RoutesConfigDump.Merge(m, src)
}
func (m *RoutesConfigDump) XXX_Size() int {
	return xxx_messageInfo_RoutesConfigDump.Size(m)
}
func (m *RoutesConfigDump) XXX_DiscardUnknown() {
	xxx_messageInfo_RoutesConfigDump.DiscardUnknown(m)
}

var xxx_messageInfo_RoutesConfigDump proto.InternalMessageInfo

func (m *RoutesConfigDump) GetStaticRouteConfigs() []*RoutesConfigDump_StaticRouteConfig {
	if m != nil {
		return m.StaticRouteConfigs
	}
	return nil
}

func (m *RoutesConfigDump) GetDynamicRouteConfigs() []*RoutesConfigDump_DynamicRouteConfig {
	if m != nil {
		return m.DynamicRouteConfigs
	}
	return nil
}

type RoutesConfigDump_StaticRouteConfig struct {
	// The route config.
	RouteConfig *v21.RouteConfiguration `protobuf:"bytes,1,opt,name=route_config,json=routeConfig,proto3" json:"route_config,omitempty"`
	// The timestamp when the Route was last updated.
	LastUpdated          *timestamp.Timestamp `protobuf:"bytes,2,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *RoutesConfigDump_StaticRouteConfig) Reset()         { *m = RoutesConfigDump_StaticRouteConfig{} }
func (m *RoutesConfigDump_StaticRouteConfig) String() string { return proto.CompactTextString(m) }
func (*RoutesConfigDump_StaticRouteConfig) ProtoMessage()    {}
func (*RoutesConfigDump_StaticRouteConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{4, 0}
}

func (m *RoutesConfigDump_StaticRouteConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RoutesConfigDump_StaticRouteConfig.Unmarshal(m, b)
}
func (m *RoutesConfigDump_StaticRouteConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RoutesConfigDump_StaticRouteConfig.Marshal(b, m, deterministic)
}
func (m *RoutesConfigDump_StaticRouteConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RoutesConfigDump_StaticRouteConfig.Merge(m, src)
}
func (m *RoutesConfigDump_StaticRouteConfig) XXX_Size() int {
	return xxx_messageInfo_RoutesConfigDump_StaticRouteConfig.Size(m)
}
func (m *RoutesConfigDump_StaticRouteConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_RoutesConfigDump_StaticRouteConfig.DiscardUnknown(m)
}

var xxx_messageInfo_RoutesConfigDump_StaticRouteConfig proto.InternalMessageInfo

func (m *RoutesConfigDump_StaticRouteConfig) GetRouteConfig() *v21.RouteConfiguration {
	if m != nil {
		return m.RouteConfig
	}
	return nil
}

func (m *RoutesConfigDump_StaticRouteConfig) GetLastUpdated() *timestamp.Timestamp {
	if m != nil {
		return m.LastUpdated
	}
	return nil
}

type RoutesConfigDump_DynamicRouteConfig struct {
	// This is the per-resource version information. This version is currently taken from the
	// :ref:`version_info <envoy_api_field_DiscoveryResponse.version_info>` field at the time that
	// the route configuration was loaded.
	VersionInfo string `protobuf:"bytes,1,opt,name=version_info,json=versionInfo,proto3" json:"version_info,omitempty"`
	// The route config.
	RouteConfig *v21.RouteConfiguration `protobuf:"bytes,2,opt,name=route_config,json=routeConfig,proto3" json:"route_config,omitempty"`
	// The timestamp when the Route was last updated.
	LastUpdated          *timestamp.Timestamp `protobuf:"bytes,3,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *RoutesConfigDump_DynamicRouteConfig) Reset()         { *m = RoutesConfigDump_DynamicRouteConfig{} }
func (m *RoutesConfigDump_DynamicRouteConfig) String() string { return proto.CompactTextString(m) }
func (*RoutesConfigDump_DynamicRouteConfig) ProtoMessage()    {}
func (*RoutesConfigDump_DynamicRouteConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{4, 1}
}

func (m *RoutesConfigDump_DynamicRouteConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RoutesConfigDump_DynamicRouteConfig.Unmarshal(m, b)
}
func (m *RoutesConfigDump_DynamicRouteConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RoutesConfigDump_DynamicRouteConfig.Marshal(b, m, deterministic)
}
func (m *RoutesConfigDump_DynamicRouteConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RoutesConfigDump_DynamicRouteConfig.Merge(m, src)
}
func (m *RoutesConfigDump_DynamicRouteConfig) XXX_Size() int {
	return xxx_messageInfo_RoutesConfigDump_DynamicRouteConfig.Size(m)
}
func (m *RoutesConfigDump_DynamicRouteConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_RoutesConfigDump_DynamicRouteConfig.DiscardUnknown(m)
}

var xxx_messageInfo_RoutesConfigDump_DynamicRouteConfig proto.InternalMessageInfo

func (m *RoutesConfigDump_DynamicRouteConfig) GetVersionInfo() string {
	if m != nil {
		return m.VersionInfo
	}
	return ""
}

func (m *RoutesConfigDump_DynamicRouteConfig) GetRouteConfig() *v21.RouteConfiguration {
	if m != nil {
		return m.RouteConfig
	}
	return nil
}

func (m *RoutesConfigDump_DynamicRouteConfig) GetLastUpdated() *timestamp.Timestamp {
	if m != nil {
		return m.LastUpdated
	}
	return nil
}

// Envoy's scoped RDS implementation fills this message with all currently loaded route
// configuration scopes (defined via ScopedRouteConfigurationsSet protos). This message lists both
// the scopes defined inline with the higher order object (i.e., the HttpConnectionManager) and the
// dynamically obtained scopes via the SRDS API.
type ScopedRoutesConfigDump struct {
	// The statically loaded scoped route configs.
	InlineScopedRouteConfigs []*ScopedRoutesConfigDump_InlineScopedRouteConfigs `protobuf:"bytes,1,rep,name=inline_scoped_route_configs,json=inlineScopedRouteConfigs,proto3" json:"inline_scoped_route_configs,omitempty"`
	// The dynamically loaded scoped route configs.
	DynamicScopedRouteConfigs []*ScopedRoutesConfigDump_DynamicScopedRouteConfigs `protobuf:"bytes,2,rep,name=dynamic_scoped_route_configs,json=dynamicScopedRouteConfigs,proto3" json:"dynamic_scoped_route_configs,omitempty"`
	XXX_NoUnkeyedLiteral      struct{}                                            `json:"-"`
	XXX_unrecognized          []byte                                              `json:"-"`
	XXX_sizecache             int32                                               `json:"-"`
}

func (m *ScopedRoutesConfigDump) Reset()         { *m = ScopedRoutesConfigDump{} }
func (m *ScopedRoutesConfigDump) String() string { return proto.CompactTextString(m) }
func (*ScopedRoutesConfigDump) ProtoMessage()    {}
func (*ScopedRoutesConfigDump) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{5}
}

func (m *ScopedRoutesConfigDump) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ScopedRoutesConfigDump.Unmarshal(m, b)
}
func (m *ScopedRoutesConfigDump) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ScopedRoutesConfigDump.Marshal(b, m, deterministic)
}
func (m *ScopedRoutesConfigDump) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ScopedRoutesConfigDump.Merge(m, src)
}
func (m *ScopedRoutesConfigDump) XXX_Size() int {
	return xxx_messageInfo_ScopedRoutesConfigDump.Size(m)
}
func (m *ScopedRoutesConfigDump) XXX_DiscardUnknown() {
	xxx_messageInfo_ScopedRoutesConfigDump.DiscardUnknown(m)
}

var xxx_messageInfo_ScopedRoutesConfigDump proto.InternalMessageInfo

func (m *ScopedRoutesConfigDump) GetInlineScopedRouteConfigs() []*ScopedRoutesConfigDump_InlineScopedRouteConfigs {
	if m != nil {
		return m.InlineScopedRouteConfigs
	}
	return nil
}

func (m *ScopedRoutesConfigDump) GetDynamicScopedRouteConfigs() []*ScopedRoutesConfigDump_DynamicScopedRouteConfigs {
	if m != nil {
		return m.DynamicScopedRouteConfigs
	}
	return nil
}

type ScopedRoutesConfigDump_InlineScopedRouteConfigs struct {
	// The name assigned to the scoped route configurations.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The scoped route configurations.
	ScopedRouteConfigs []*v21.ScopedRouteConfiguration `protobuf:"bytes,2,rep,name=scoped_route_configs,json=scopedRouteConfigs,proto3" json:"scoped_route_configs,omitempty"`
	// The timestamp when the scoped route config set was last updated.
	LastUpdated          *timestamp.Timestamp `protobuf:"bytes,3,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *ScopedRoutesConfigDump_InlineScopedRouteConfigs) Reset() {
	*m = ScopedRoutesConfigDump_InlineScopedRouteConfigs{}
}
func (m *ScopedRoutesConfigDump_InlineScopedRouteConfigs) String() string {
	return proto.CompactTextString(m)
}
func (*ScopedRoutesConfigDump_InlineScopedRouteConfigs) ProtoMessage() {}
func (*ScopedRoutesConfigDump_InlineScopedRouteConfigs) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{5, 0}
}

func (m *ScopedRoutesConfigDump_InlineScopedRouteConfigs) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ScopedRoutesConfigDump_InlineScopedRouteConfigs.Unmarshal(m, b)
}
func (m *ScopedRoutesConfigDump_InlineScopedRouteConfigs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ScopedRoutesConfigDump_InlineScopedRouteConfigs.Marshal(b, m, deterministic)
}
func (m *ScopedRoutesConfigDump_InlineScopedRouteConfigs) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ScopedRoutesConfigDump_InlineScopedRouteConfigs.Merge(m, src)
}
func (m *ScopedRoutesConfigDump_InlineScopedRouteConfigs) XXX_Size() int {
	return xxx_messageInfo_ScopedRoutesConfigDump_InlineScopedRouteConfigs.Size(m)
}
func (m *ScopedRoutesConfigDump_InlineScopedRouteConfigs) XXX_DiscardUnknown() {
	xxx_messageInfo_ScopedRoutesConfigDump_InlineScopedRouteConfigs.DiscardUnknown(m)
}

var xxx_messageInfo_ScopedRoutesConfigDump_InlineScopedRouteConfigs proto.InternalMessageInfo

func (m *ScopedRoutesConfigDump_InlineScopedRouteConfigs) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *ScopedRoutesConfigDump_InlineScopedRouteConfigs) GetScopedRouteConfigs() []*v21.ScopedRouteConfiguration {
	if m != nil {
		return m.ScopedRouteConfigs
	}
	return nil
}

func (m *ScopedRoutesConfigDump_InlineScopedRouteConfigs) GetLastUpdated() *timestamp.Timestamp {
	if m != nil {
		return m.LastUpdated
	}
	return nil
}

type ScopedRoutesConfigDump_DynamicScopedRouteConfigs struct {
	// The name assigned to the scoped route configurations.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// This is the per-resource version information. This version is currently taken from the
	// :ref:`version_info <envoy_api_field_DiscoveryResponse.version_info>` field at the time that
	// the scoped routes configuration was loaded.
	VersionInfo string `protobuf:"bytes,2,opt,name=version_info,json=versionInfo,proto3" json:"version_info,omitempty"`
	// The scoped route configurations.
	ScopedRouteConfigs []*v21.ScopedRouteConfiguration `protobuf:"bytes,3,rep,name=scoped_route_configs,json=scopedRouteConfigs,proto3" json:"scoped_route_configs,omitempty"`
	// The timestamp when the scoped route config set was last updated.
	LastUpdated          *timestamp.Timestamp `protobuf:"bytes,4,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *ScopedRoutesConfigDump_DynamicScopedRouteConfigs) Reset() {
	*m = ScopedRoutesConfigDump_DynamicScopedRouteConfigs{}
}
func (m *ScopedRoutesConfigDump_DynamicScopedRouteConfigs) String() string {
	return proto.CompactTextString(m)
}
func (*ScopedRoutesConfigDump_DynamicScopedRouteConfigs) ProtoMessage() {}
func (*ScopedRoutesConfigDump_DynamicScopedRouteConfigs) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{5, 1}
}

func (m *ScopedRoutesConfigDump_DynamicScopedRouteConfigs) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ScopedRoutesConfigDump_DynamicScopedRouteConfigs.Unmarshal(m, b)
}
func (m *ScopedRoutesConfigDump_DynamicScopedRouteConfigs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ScopedRoutesConfigDump_DynamicScopedRouteConfigs.Marshal(b, m, deterministic)
}
func (m *ScopedRoutesConfigDump_DynamicScopedRouteConfigs) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ScopedRoutesConfigDump_DynamicScopedRouteConfigs.Merge(m, src)
}
func (m *ScopedRoutesConfigDump_DynamicScopedRouteConfigs) XXX_Size() int {
	return xxx_messageInfo_ScopedRoutesConfigDump_DynamicScopedRouteConfigs.Size(m)
}
func (m *ScopedRoutesConfigDump_DynamicScopedRouteConfigs) XXX_DiscardUnknown() {
	xxx_messageInfo_ScopedRoutesConfigDump_DynamicScopedRouteConfigs.DiscardUnknown(m)
}

var xxx_messageInfo_ScopedRoutesConfigDump_DynamicScopedRouteConfigs proto.InternalMessageInfo

func (m *ScopedRoutesConfigDump_DynamicScopedRouteConfigs) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *ScopedRoutesConfigDump_DynamicScopedRouteConfigs) GetVersionInfo() string {
	if m != nil {
		return m.VersionInfo
	}
	return ""
}

func (m *ScopedRoutesConfigDump_DynamicScopedRouteConfigs) GetScopedRouteConfigs() []*v21.ScopedRouteConfiguration {
	if m != nil {
		return m.ScopedRouteConfigs
	}
	return nil
}

func (m *ScopedRoutesConfigDump_DynamicScopedRouteConfigs) GetLastUpdated() *timestamp.Timestamp {
	if m != nil {
		return m.LastUpdated
	}
	return nil
}

// Envoys SDS implementation fills this message with all secrets fetched dynamically via SDS.
type SecretsConfigDump struct {
	// The statically loaded secrets.
	StaticSecrets []*SecretsConfigDump_StaticSecret `protobuf:"bytes,1,rep,name=static_secrets,json=staticSecrets,proto3" json:"static_secrets,omitempty"`
	// The dynamically loaded active secrets. These are secrets that are available to service
	// clusters or listeners.
	DynamicActiveSecrets []*SecretsConfigDump_DynamicSecret `protobuf:"bytes,2,rep,name=dynamic_active_secrets,json=dynamicActiveSecrets,proto3" json:"dynamic_active_secrets,omitempty"`
	// The dynamically loaded warming secrets. These are secrets that are currently undergoing
	// warming in preparation to service clusters or listeners.
	DynamicWarmingSecrets []*SecretsConfigDump_DynamicSecret `protobuf:"bytes,3,rep,name=dynamic_warming_secrets,json=dynamicWarmingSecrets,proto3" json:"dynamic_warming_secrets,omitempty"`
	XXX_NoUnkeyedLiteral  struct{}                           `json:"-"`
	XXX_unrecognized      []byte                             `json:"-"`
	XXX_sizecache         int32                              `json:"-"`
}

func (m *SecretsConfigDump) Reset()         { *m = SecretsConfigDump{} }
func (m *SecretsConfigDump) String() string { return proto.CompactTextString(m) }
func (*SecretsConfigDump) ProtoMessage()    {}
func (*SecretsConfigDump) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{6}
}

func (m *SecretsConfigDump) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SecretsConfigDump.Unmarshal(m, b)
}
func (m *SecretsConfigDump) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SecretsConfigDump.Marshal(b, m, deterministic)
}
func (m *SecretsConfigDump) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SecretsConfigDump.Merge(m, src)
}
func (m *SecretsConfigDump) XXX_Size() int {
	return xxx_messageInfo_SecretsConfigDump.Size(m)
}
func (m *SecretsConfigDump) XXX_DiscardUnknown() {
	xxx_messageInfo_SecretsConfigDump.DiscardUnknown(m)
}

var xxx_messageInfo_SecretsConfigDump proto.InternalMessageInfo

func (m *SecretsConfigDump) GetStaticSecrets() []*SecretsConfigDump_StaticSecret {
	if m != nil {
		return m.StaticSecrets
	}
	return nil
}

func (m *SecretsConfigDump) GetDynamicActiveSecrets() []*SecretsConfigDump_DynamicSecret {
	if m != nil {
		return m.DynamicActiveSecrets
	}
	return nil
}

func (m *SecretsConfigDump) GetDynamicWarmingSecrets() []*SecretsConfigDump_DynamicSecret {
	if m != nil {
		return m.DynamicWarmingSecrets
	}
	return nil
}

// DynamicSecret contains secret information fetched via SDS.
type SecretsConfigDump_DynamicSecret struct {
	// The name assigned to the secret.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// This is the per-resource version information.
	VersionInfo string `protobuf:"bytes,2,opt,name=version_info,json=versionInfo,proto3" json:"version_info,omitempty"`
	// The timestamp when the secret was last updated.
	LastUpdated *timestamp.Timestamp `protobuf:"bytes,3,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"`
	// The actual secret information.
	// Security sensitive information is redacted (replaced with "[redacted]") for
	// private keys and passwords in TLS certificates.
	Secret               *auth.Secret `protobuf:"bytes,4,opt,name=secret,proto3" json:"secret,omitempty"`
	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
	XXX_unrecognized     []byte       `json:"-"`
	XXX_sizecache        int32        `json:"-"`
}

func (m *SecretsConfigDump_DynamicSecret) Reset()         { *m = SecretsConfigDump_DynamicSecret{} }
func (m *SecretsConfigDump_DynamicSecret) String() string { return proto.CompactTextString(m) }
func (*SecretsConfigDump_DynamicSecret) ProtoMessage()    {}
func (*SecretsConfigDump_DynamicSecret) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{6, 0}
}

func (m *SecretsConfigDump_DynamicSecret) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SecretsConfigDump_DynamicSecret.Unmarshal(m, b)
}
func (m *SecretsConfigDump_DynamicSecret) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SecretsConfigDump_DynamicSecret.Marshal(b, m, deterministic)
}
func (m *SecretsConfigDump_DynamicSecret) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SecretsConfigDump_DynamicSecret.Merge(m, src)
}
func (m *SecretsConfigDump_DynamicSecret) XXX_Size() int {
	return xxx_messageInfo_SecretsConfigDump_DynamicSecret.Size(m)
}
func (m *SecretsConfigDump_DynamicSecret) XXX_DiscardUnknown() {
	xxx_messageInfo_SecretsConfigDump_DynamicSecret.DiscardUnknown(m)
}

var xxx_messageInfo_SecretsConfigDump_DynamicSecret proto.InternalMessageInfo

func (m *SecretsConfigDump_DynamicSecret) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *SecretsConfigDump_DynamicSecret) GetVersionInfo() string {
	if m != nil {
		return m.VersionInfo
	}
	return ""
}

func (m *SecretsConfigDump_DynamicSecret) GetLastUpdated() *timestamp.Timestamp {
	if m != nil {
		return m.LastUpdated
	}
	return nil
}

func (m *SecretsConfigDump_DynamicSecret) GetSecret() *auth.Secret {
	if m != nil {
		return m.Secret
	}
	return nil
}

// StaticSecret specifies statically loaded secret in bootstrap.
type SecretsConfigDump_StaticSecret struct {
	// The name assigned to the secret.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The timestamp when the secret was last updated.
	LastUpdated *timestamp.Timestamp `protobuf:"bytes,2,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"`
	// The actual secret information.
	// Security sensitive information is redacted (replaced with "[redacted]") for
	// private keys and passwords in TLS certificates.
	Secret               *auth.Secret `protobuf:"bytes,3,opt,name=secret,proto3" json:"secret,omitempty"`
	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
	XXX_unrecognized     []byte       `json:"-"`
	XXX_sizecache        int32        `json:"-"`
}

func (m *SecretsConfigDump_StaticSecret) Reset()         { *m = SecretsConfigDump_StaticSecret{} }
func (m *SecretsConfigDump_StaticSecret) String() string { return proto.CompactTextString(m) }
func (*SecretsConfigDump_StaticSecret) ProtoMessage()    {}
func (*SecretsConfigDump_StaticSecret) Descriptor() ([]byte, []int) {
	return fileDescriptor_bd4e190b1a64d2aa, []int{6, 1}
}

func (m *SecretsConfigDump_StaticSecret) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SecretsConfigDump_StaticSecret.Unmarshal(m, b)
}
func (m *SecretsConfigDump_StaticSecret) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SecretsConfigDump_StaticSecret.Marshal(b, m, deterministic)
}
func (m *SecretsConfigDump_StaticSecret) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SecretsConfigDump_StaticSecret.Merge(m, src)
}
func (m *SecretsConfigDump_StaticSecret) XXX_Size() int {
	return xxx_messageInfo_SecretsConfigDump_StaticSecret.Size(m)
}
func (m *SecretsConfigDump_StaticSecret) XXX_DiscardUnknown() {
	xxx_messageInfo_SecretsConfigDump_StaticSecret.DiscardUnknown(m)
}

var xxx_messageInfo_SecretsConfigDump_StaticSecret proto.InternalMessageInfo

func (m *SecretsConfigDump_StaticSecret) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *SecretsConfigDump_StaticSecret) GetLastUpdated() *timestamp.Timestamp {
	if m != nil {
		return m.LastUpdated
	}
	return nil
}

func (m *SecretsConfigDump_StaticSecret) GetSecret() *auth.Secret {
	if m != nil {
		return m.Secret
	}
	return nil
}

func init() {
	proto.RegisterType((*ConfigDump)(nil), "envoy.admin.v2alpha.ConfigDump")
	proto.RegisterType((*BootstrapConfigDump)(nil), "envoy.admin.v2alpha.BootstrapConfigDump")
	proto.RegisterType((*ListenersConfigDump)(nil), "envoy.admin.v2alpha.ListenersConfigDump")
	proto.RegisterType((*ListenersConfigDump_StaticListener)(nil), "envoy.admin.v2alpha.ListenersConfigDump.StaticListener")
	proto.RegisterType((*ListenersConfigDump_DynamicListener)(nil), "envoy.admin.v2alpha.ListenersConfigDump.DynamicListener")
	proto.RegisterType((*ClustersConfigDump)(nil), "envoy.admin.v2alpha.ClustersConfigDump")
	proto.RegisterType((*ClustersConfigDump_StaticCluster)(nil), "envoy.admin.v2alpha.ClustersConfigDump.StaticCluster")
	proto.RegisterType((*ClustersConfigDump_DynamicCluster)(nil), "envoy.admin.v2alpha.ClustersConfigDump.DynamicCluster")
	proto.RegisterType((*RoutesConfigDump)(nil), "envoy.admin.v2alpha.RoutesConfigDump")
	proto.RegisterType((*RoutesConfigDump_StaticRouteConfig)(nil), "envoy.admin.v2alpha.RoutesConfigDump.StaticRouteConfig")
	proto.RegisterType((*RoutesConfigDump_DynamicRouteConfig)(nil), "envoy.admin.v2alpha.RoutesConfigDump.DynamicRouteConfig")
	proto.RegisterType((*ScopedRoutesConfigDump)(nil), "envoy.admin.v2alpha.ScopedRoutesConfigDump")
	proto.RegisterType((*ScopedRoutesConfigDump_InlineScopedRouteConfigs)(nil), "envoy.admin.v2alpha.ScopedRoutesConfigDump.InlineScopedRouteConfigs")
	proto.RegisterType((*ScopedRoutesConfigDump_DynamicScopedRouteConfigs)(nil), "envoy.admin.v2alpha.ScopedRoutesConfigDump.DynamicScopedRouteConfigs")
	proto.RegisterType((*SecretsConfigDump)(nil), "envoy.admin.v2alpha.SecretsConfigDump")
	proto.RegisterType((*SecretsConfigDump_DynamicSecret)(nil), "envoy.admin.v2alpha.SecretsConfigDump.DynamicSecret")
	proto.RegisterType((*SecretsConfigDump_StaticSecret)(nil), "envoy.admin.v2alpha.SecretsConfigDump.StaticSecret")
}

func init() {
	proto.RegisterFile("envoy/admin/v2alpha/config_dump.proto", fileDescriptor_bd4e190b1a64d2aa)
}

var fileDescriptor_bd4e190b1a64d2aa = []byte{
	// 981 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x4f, 0x6f, 0xe3, 0x44,
	0x14, 0x97, 0x93, 0xb4, 0xcb, 0xbe, 0xf4, 0xcf, 0xee, 0xb4, 0x4d, 0x53, 0xb3, 0x12, 0xdd, 0x0a,
	0xd0, 0x72, 0xb1, 0x45, 0x16, 0x16, 0x0e, 0x70, 0xd8, 0xb6, 0x1c, 0x56, 0xe2, 0xb0, 0x72, 0x41,
	0x20, 0x0e, 0x58, 0x53, 0xdb, 0xed, 0x0e, 0x72, 0x66, 0x2c, 0xcf, 0x24, 0x90, 0x13, 0x87, 0x95,
	0xf8, 0x04, 0x48, 0x20, 0x71, 0x41, 0xe2, 0xc0, 0x8d, 0x33, 0x12, 0x47, 0x0e, 0x7c, 0x0c, 0x3e,
	0x00, 0x5f, 0x02, 0xc5, 0x33, 0xe3, 0xcc, 0xd8, 0x4e, 0x95, 0xd4, 0x7b, 0xeb, 0xbc, 0xf7, 0xe6,
	0xf7, 0xfb, 0xcd, 0xbc, 0xdf, 0xcb, 0xb8, 0xf0, 0x56, 0x42, 0xa7, 0x6c, 0xe6, 0xe3, 0x78, 0x4c,
	0xa8, 0x3f, 0x1d, 0xe1, 0x34, 0x7b, 0x81, 0xfd, 0x88, 0xd1, 0x2b, 0x72, 0x1d, 0xc6, 0x93, 0x71,
	0xe6, 0x65, 0x39, 0x13, 0x0c, 0xed, 0x15, 0x65, 0x5e, 0x51, 0xe6, 0xa9, 0x32, 0xf7, 0x81, 0xda,
	0x9b, 0x11, 0x7f, 0x3a, 0xf2, 0xf1, 0x44, 0xbc, 0xf0, 0xa3, 0x24, 0x17, 0x72, 0x8b, 0x3b, 0xb0,
	0xb2, 0x51, 0xcc, 0x1b, 0xe3, 0xe9, 0x92, 0x78, 0x5e, 0xc6, 0x0f, 0xad, 0x38, 0x5f, 0x24, 0xde,
	0x91, 0x09, 0x29, 0xd6, 0xbf, 0x64, 0x4c, 0x70, 0x91, 0xe3, 0x6c, 0x5e, 0x55, 0x2e, 0x54, 0xe9,
	0xd1, 0x35, 0x63, 0xd7, 0x69, 0xe2, 0x17, 0xab, 0xcb, 0xc9, 0x95, 0x8f, 0xe9, 0x4c, 0xa5, 0xde,
	0xa8, 0xa6, 0x04, 0x19, 0x27, 0x5c, 0x60, 0x7d, 0xf4, 0x93, 0x8f, 0x00, 0xce, 0x0a, 0x8a, 0xf3,
	0xc9, 0x38, 0x43, 0x1e, 0xdc, 0x91, 0x84, 0x7c, 0xe8, 0x1c, 0x77, 0x1f, 0xf5, 0x47, 0xfb, 0x9e,
	0x04, 0xf0, 0x34, 0x80, 0xf7, 0x94, 0xce, 0x02, 0x5d, 0x74, 0xf2, 0xb3, 0x03, 0x7b, 0xa7, 0x5a,
	0x8d, 0x81, 0x73, 0x0a, 0x77, 0x4b, 0x91, 0x43, 0xe7, 0xd8, 0x79, 0xd4, 0x1f, 0xbd, 0xe9, 0xc9,
	0x4b, 0x96, 0x5b, 0xbd, 0xc5, 0x19, 0xa6, 0x23, 0xaf, 0x84, 0x08, 0x16, 0xdb, 0xd0, 0xc7, 0xb0,
	0x95, 0x62, 0x2e, 0xc2, 0x49, 0x16, 0x63, 0x91, 0xc4, 0xc3, 0x4e, 0x01, 0xe3, 0xd6, 0x04, 0x7d,
	0xa6, 0x4f, 0x14, 0xf4, 0xe7, 0xf5, 0x9f, 0xcb, 0xf2, 0x93, 0x3f, 0x36, 0x61, 0xef, 0x53, 0xc2,
	0x45, 0x42, 0x93, 0x9c, 0x1b, 0xd2, 0x1e, 0xc2, 0xd6, 0x34, 0xc9, 0x39, 0x61, 0x34, 0x24, 0xf4,
	0x8a, 0x15, 0xea, 0xee, 0x06, 0x7d, 0x15, 0x7b, 0x46, 0xaf, 0x18, 0xba, 0x84, 0x7b, 0x5c, 0x60,
	0x41, 0xa2, 0x30, 0xd5, 0x00, 0xc3, 0x4e, 0x71, 0x1d, 0x1f, 0x78, 0x0d, 0x4e, 0xf1, 0x1a, 0x68,
	0xbc, 0x8b, 0x02, 0x40, 0x67, 0x82, 0x5d, 0x6e, 0xad, 0x39, 0xca, 0x61, 0x18, 0xcf, 0x28, 0x1e,
	0x93, 0x28, 0xc4, 0x91, 0x20, 0xd3, 0xc4, 0xe0, 0xea, 0x16, 0x5c, 0x1f, 0xae, 0xcc, 0x75, 0x2e,
	0x81, 0x4a, 0xb2, 0x81, 0x42, 0x7e, 0x5a, 0x00, 0x2f, 0x38, 0x05, 0x1c, 0x69, 0xce, 0x6f, 0x71,
	0x3e, 0x26, 0xf4, 0xda, 0x20, 0xed, 0xb5, 0x24, 0x3d, 0x54, 0xd0, 0x5f, 0x48, 0xe4, 0x05, 0xeb,
	0x14, 0x5c, 0xcd, 0x1a, 0xe7, 0x98, 0x50, 0x9b, 0x76, 0xa3, 0x25, 0xad, 0xbe, 0xc5, 0x73, 0x05,
	0x5d, 0xee, 0x71, 0x5f, 0x3a, 0xb0, 0x63, 0x77, 0x01, 0x8d, 0xe0, 0x35, 0xcd, 0xac, 0x5c, 0x39,
	0xd0, 0xc4, 0x19, 0x99, 0x1b, 0xb1, 0x84, 0x2d, 0xeb, 0x5a, 0xda, 0xd0, 0xfd, 0xdd, 0x81, 0xdd,
	0x8a, 0xe6, 0x55, 0x2c, 0x68, 0x2a, 0xed, 0xdc, 0x52, 0x69, 0x77, 0xbd, 0x81, 0xf9, 0x75, 0x03,
	0xd0, 0x59, 0x3a, 0xe1, 0x62, 0xed, 0x79, 0xf9, 0x1a, 0x94, 0xbd, 0xc3, 0x48, 0xed, 0x57, 0xe3,
	0xf2, 0x7e, 0x63, 0x5b, 0xeb, 0x24, 0x6a, 0x5a, 0x54, 0x22, 0xd8, 0xe1, 0xe6, 0x92, 0x23, 0x0a,
	0x87, 0x95, 0x59, 0x29, 0x79, 0xe4, 0xa8, 0x3c, 0x59, 0x95, 0x47, 0x75, 0x42, 0x13, 0x1d, 0x58,
	0x83, 0x52, 0xf2, 0x65, 0x8b, 0xd9, 0xd4, 0x73, 0x52, 0x12, 0xf6, 0x5a, 0x11, 0x0e, 0xec, 0x21,
	0xd1, 0x1b, 0xdc, 0xef, 0x61, 0xdb, 0xba, 0x02, 0xe4, 0xc3, 0x1d, 0x45, 0xa9, 0x8c, 0x7a, 0x60,
	0xb7, 0x5f, 0x03, 0xea, 0xaa, 0xb6, 0x36, 0xfd, 0xcd, 0x81, 0x1d, 0x5b, 0xeb, 0x2a, 0x8d, 0x37,
	0x54, 0x76, 0x6e, 0xa5, 0x72, 0x4d, 0x8b, 0xfe, 0xdd, 0x83, 0x7b, 0x01, 0x9b, 0x88, 0xc4, 0x34,
	0x28, 0x81, 0x7d, 0xe5, 0xbe, 0x7c, 0x9e, 0x0a, 0xf5, 0x03, 0x76, 0xd3, 0x2f, 0x76, 0x15, 0x44,
	0x19, 0xb0, 0x08, 0xcb, 0x68, 0x80, 0x78, 0x35, 0xc4, 0x51, 0x0a, 0xda, 0x31, 0x15, 0xae, 0x9b,
	0x7e, 0xb1, 0x6b, 0x5c, 0xea, 0x9e, 0x4d, 0xb2, 0xbd, 0xb8, 0x16, 0xe3, 0xee, 0x4f, 0x0e, 0xdc,
	0xaf, 0xe9, 0x42, 0x67, 0xb0, 0x65, 0x72, 0x2b, 0x7b, 0x1c, 0xdb, 0x17, 0x6f, 0x6c, 0x98, 0xe4,
	0x58, 0x10, 0x46, 0x83, 0x7e, 0x6e, 0x80, 0xb4, 0x74, 0xcb, 0x5f, 0x0e, 0xa0, 0xfa, 0x29, 0x56,
	0x71, 0x4c, 0x55, 0x7d, 0xe7, 0x55, 0xa8, 0x5f, 0xd3, 0x45, 0xff, 0x6e, 0xc0, 0xe0, 0x22, 0x62,
	0x59, 0x12, 0xd7, 0xbc, 0xf4, 0xd2, 0x81, 0xd7, 0x09, 0x4d, 0x09, 0x4d, 0x42, 0x5e, 0x54, 0x54,
	0xfa, 0x2c, 0x3f, 0x8a, 0xce, 0x1b, 0xfb, 0xdc, 0x0c, 0xe9, 0x3d, 0x2b, 0xe0, 0x8c, 0xa4, 0x6a,
	0x6f, 0x30, 0x24, 0x4b, 0x32, 0xe8, 0x07, 0x07, 0x1e, 0x68, 0x9f, 0x35, 0xca, 0x90, 0xd6, 0xfe,
	0x64, 0x1d, 0x19, 0xaa, 0x5d, 0x0d, 0x3a, 0xf4, 0x37, 0x41, 0x3d, 0xe5, 0xfe, 0xe3, 0xc0, 0x70,
	0x99, 0x7e, 0x84, 0xa0, 0x47, 0xf1, 0x38, 0x51, 0x5d, 0x2e, 0xfe, 0x46, 0x5f, 0xc2, 0xfe, 0x0d,
	0x82, 0xdf, 0xb6, 0xdb, 0x5c, 0xc3, 0xd4, 0xcd, 0x46, 0xbc, 0xce, 0xd6, 0xae, 0xe7, 0xee, 0x7f,
	0x0e, 0x1c, 0x2d, 0xbd, 0x82, 0xc6, 0xa3, 0x54, 0xcd, 0xdc, 0xa9, 0x9b, 0x79, 0xd9, 0x69, 0xbb,
	0xaf, 0xfc, 0xb4, 0xbd, 0xf5, 0x1c, 0xfe, 0xcb, 0x06, 0xdc, 0xbf, 0x48, 0xa2, 0x3c, 0x11, 0xa6,
	0xb9, 0xbf, 0x02, 0xf5, 0xb0, 0x86, 0x5c, 0xe6, 0x94, 0x9d, 0x1f, 0x37, 0xfb, 0xa8, 0xba, 0x5f,
	0xfd, 0x46, 0xca, 0x78, 0xb0, 0xcd, 0x8d, 0x15, 0x47, 0xdf, 0xc0, 0xa0, 0xf2, 0x44, 0x6b, 0x0e,
	0xd9, 0xfa, 0xf7, 0x56, 0xe4, 0xd0, 0x3d, 0x92, 0x24, 0xfb, 0xd6, 0xfb, 0xac, 0xb9, 0xd2, 0xc5,
	0xe7, 0x80, 0x7e, 0x9e, 0x35, 0x59, 0xb7, 0x05, 0xd9, 0x81, 0xfd, 0x36, 0xab, 0x72, 0xf7, 0x4f,
	0x07, 0xb6, 0xad, 0xc2, 0xdb, 0xba, 0xa5, 0x9d, 0x83, 0xd1, 0xbb, 0xb0, 0x29, 0x4f, 0xa9, 0xcc,
	0x70, 0x64, 0xdb, 0x6b, 0xfe, 0xff, 0xa9, 0x3a, 0x62, 0xa0, 0x0a, 0xdd, 0x1f, 0x1d, 0xd8, 0x32,
	0x9b, 0xd6, 0xa8, 0xbc, 0xdd, 0x53, 0x60, 0xc8, 0xea, 0xae, 0x28, 0xeb, 0xf4, 0x09, 0x3c, 0x24,
	0x4c, 0x96, 0x65, 0x39, 0xfb, 0x6e, 0xd6, 0xd4, 0xad, 0xd3, 0xdd, 0x45, 0x9f, 0x9e, 0xcf, 0x25,
	0x3c, 0x77, 0x2e, 0x37, 0x0b, 0x2d, 0x8f, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x55, 0xfb, 0xc5,
	0x0d, 0xd5, 0x0f, 0x00, 0x00,
}
   07070100000051000081A4000003E800000064000000015E17A2470000167C000000000000000000000000000000000000003D00000000cilium-proxy-20200109/go/envoy/admin/v2alpha/listeners.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/admin/v2alpha/listeners.proto

package envoy_admin_v2alpha

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Admin endpoint uses this wrapper for `/listeners` to display listener status information.
// See :ref:`/listeners <operations_admin_interface_listeners>` for more information.
type Listeners struct {
	// List of listener statuses.
	ListenerStatuses     []*ListenerStatus `protobuf:"bytes,1,rep,name=listener_statuses,json=listenerStatuses,proto3" json:"listener_statuses,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *Listeners) Reset()         { *m = Listeners{} }
func (m *Listeners) String() string { return proto.CompactTextString(m) }
func (*Listeners) ProtoMessage()    {}
func (*Listeners) Descriptor() ([]byte, []int) {
	return fileDescriptor_cd3cc5a2daffd3f5, []int{0}
}

func (m *Listeners) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Listeners.Unmarshal(m, b)
}
func (m *Listeners) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Listeners.Marshal(b, m, deterministic)
}
func (m *Listeners) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Listeners.Merge(m, src)
}
func (m *Listeners) XXX_Size() int {
	return xxx_messageInfo_Listeners.Size(m)
}
func (m *Listeners) XXX_DiscardUnknown() {
	xxx_messageInfo_Listeners.DiscardUnknown(m)
}

var xxx_messageInfo_Listeners proto.InternalMessageInfo

func (m *Listeners) GetListenerStatuses() []*ListenerStatus {
	if m != nil {
		return m.ListenerStatuses
	}
	return nil
}

// Details an individual listener's current status.
type ListenerStatus struct {
	// Name of the listener
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The actual local address that the listener is listening on. If a listener was configured
	// to listen on port 0, then this address has the port that was allocated by the OS.
	LocalAddress         *core.Address `protobuf:"bytes,2,opt,name=local_address,json=localAddress,proto3" json:"local_address,omitempty"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

func (m *ListenerStatus) Reset()         { *m = ListenerStatus{} }
func (m *ListenerStatus) String() string { return proto.CompactTextString(m) }
func (*ListenerStatus) ProtoMessage()    {}
func (*ListenerStatus) Descriptor() ([]byte, []int) {
	return fileDescriptor_cd3cc5a2daffd3f5, []int{1}
}

func (m *ListenerStatus) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ListenerStatus.Unmarshal(m, b)
}
func (m *ListenerStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ListenerStatus.Marshal(b, m, deterministic)
}
func (m *ListenerStatus) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ListenerStatus.Merge(m, src)
}
func (m *ListenerStatus) XXX_Size() int {
	return xxx_messageInfo_ListenerStatus.Size(m)
}
func (m *ListenerStatus) XXX_DiscardUnknown() {
	xxx_messageInfo_ListenerStatus.DiscardUnknown(m)
}

var xxx_messageInfo_ListenerStatus proto.InternalMessageInfo

func (m *ListenerStatus) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *ListenerStatus) GetLocalAddress() *core.Address {
	if m != nil {
		return m.LocalAddress
	}
	return nil
}

func init() {
	proto.RegisterType((*Listeners)(nil), "envoy.admin.v2alpha.Listeners")
	proto.RegisterType((*ListenerStatus)(nil), "envoy.admin.v2alpha.ListenerStatus")
}

func init() {
	proto.RegisterFile("envoy/admin/v2alpha/listeners.proto", fileDescriptor_cd3cc5a2daffd3f5)
}

var fileDescriptor_cd3cc5a2daffd3f5 = []byte{
	// 229 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0xb1, 0x4b, 0x03, 0x31,
	0x14, 0xc6, 0x89, 0x8a, 0xd0, 0x54, 0x45, 0xe3, 0x72, 0x74, 0xf1, 0x6c, 0x97, 0x9b, 0x5e, 0x20,
	0xe2, 0x2c, 0x76, 0x76, 0x38, 0xce, 0x59, 0x4a, 0xec, 0x3d, 0x30, 0x90, 0x5e, 0x42, 0xde, 0x19,
	0xec, 0x7f, 0x2f, 0x4d, 0x93, 0x42, 0xe1, 0xb6, 0x7c, 0xf0, 0xfb, 0xbe, 0xfc, 0x12, 0xbe, 0xc2,
	0x21, 0xba, 0xbd, 0xd4, 0xfd, 0xce, 0x0c, 0x32, 0x2a, 0x6d, 0xfd, 0x8f, 0x96, 0xd6, 0xd0, 0x88,
	0x03, 0x06, 0x02, 0x1f, 0xdc, 0xe8, 0xc4, 0x63, 0x82, 0x20, 0x41, 0x90, 0xa1, 0xc5, 0x53, 0x6e,
	0x7a, 0x23, 0xa3, 0x92, 0x5b, 0x17, 0x50, 0xea, 0xbe, 0x0f, 0x48, 0xb9, 0xb5, 0xfc, 0xe2, 0xb3,
	0x8f, 0x32, 0x24, 0x5a, 0xfe, 0x50, 0x56, 0x37, 0x34, 0xea, 0xf1, 0x97, 0x90, 0x2a, 0x56, 0x5f,
	0x36, 0x73, 0xb5, 0x82, 0x89, 0x79, 0x28, 0xd5, 0xcf, 0x04, 0x77, 0xf7, 0xf6, 0x2c, 0x23, 0x2d,
	0x91, 0xdf, 0x9d, 0x33, 0x42, 0xf0, 0xab, 0x41, 0xef, 0xb0, 0x62, 0x35, 0x6b, 0x66, 0x5d, 0x3a,
	0x8b, 0x37, 0x7e, 0x6b, 0xdd, 0x56, 0xdb, 0x4d, 0x76, 0xab, 0x2e, 0x6a, 0xd6, 0xcc, 0xd5, 0xa2,
	0xdc, 0xe9, 0x0d, 0x44, 0x05, 0x07, 0x7b, 0x78, 0x3f, 0x12, 0xdd, 0x4d, 0x2a, 0xe4, 0xb4, 0x7e,
	0xe5, 0xcf, 0xc6, 0x1d, 0x69, 0x1f, 0xdc, 0xdf, 0x7e, 0x4a, 0x76, 0x7d, 0x32, 0xa1, 0xf6, 0xf0,
	0xf4, 0x96, 0x7d, 0x5f, 0xa7, 0x3f, 0x78, 0xf9, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x6f, 0x79, 0x29,
	0x97, 0x60, 0x01, 0x00, 0x00,
}
07070100000052000081A4000003E800000064000000015E17A24700001612000000000000000000000000000000000000003A00000000cilium-proxy-20200109/go/envoy/admin/v2alpha/memory.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/admin/v2alpha/memory.proto

package envoy_admin_v2alpha

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Proto representation of the internal memory consumption of an Envoy instance. These represent
// values extracted from an internal TCMalloc instance. For more information, see the section of the
// docs entitled ["Generic Tcmalloc Status"](https://gperftools.github.io/gperftools/tcmalloc.html).
// [#next-free-field: 6]
type Memory struct {
	// The number of bytes allocated by the heap for Envoy. This is an alias for
	// `generic.current_allocated_bytes`.
	Allocated uint64 `protobuf:"varint,1,opt,name=allocated,proto3" json:"allocated,omitempty"`
	// The number of bytes reserved by the heap but not necessarily allocated. This is an alias for
	// `generic.heap_size`.
	HeapSize uint64 `protobuf:"varint,2,opt,name=heap_size,json=heapSize,proto3" json:"heap_size,omitempty"`
	// The number of bytes in free, unmapped pages in the page heap. These bytes always count towards
	// virtual memory usage, and depending on the OS, typically do not count towards physical memory
	// usage. This is an alias for `tcmalloc.pageheap_unmapped_bytes`.
	PageheapUnmapped uint64 `protobuf:"varint,3,opt,name=pageheap_unmapped,json=pageheapUnmapped,proto3" json:"pageheap_unmapped,omitempty"`
	// The number of bytes in free, mapped pages in the page heap. These bytes always count towards
	// virtual memory usage, and unless the underlying memory is swapped out by the OS, they also
	// count towards physical memory usage. This is an alias for `tcmalloc.pageheap_free_bytes`.
	PageheapFree uint64 `protobuf:"varint,4,opt,name=pageheap_free,json=pageheapFree,proto3" json:"pageheap_free,omitempty"`
	// The amount of memory used by the TCMalloc thread caches (for small objects). This is an alias
	// for `tcmalloc.current_total_thread_cache_bytes`.
	TotalThreadCache     uint64   `protobuf:"varint,5,opt,name=total_thread_cache,json=totalThreadCache,proto3" json:"total_thread_cache,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Memory) Reset()         { *m = Memory{} }
func (m *Memory) String() string { return proto.CompactTextString(m) }
func (*Memory) ProtoMessage()    {}
func (*Memory) Descriptor() ([]byte, []int) {
	return fileDescriptor_51b7ba9ad7a02b7f, []int{0}
}

func (m *Memory) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Memory.Unmarshal(m, b)
}
func (m *Memory) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Memory.Marshal(b, m, deterministic)
}
func (m *Memory) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Memory.Merge(m, src)
}
func (m *Memory) XXX_Size() int {
	return xxx_messageInfo_Memory.Size(m)
}
func (m *Memory) XXX_DiscardUnknown() {
	xxx_messageInfo_Memory.DiscardUnknown(m)
}

var xxx_messageInfo_Memory proto.InternalMessageInfo

func (m *Memory) GetAllocated() uint64 {
	if m != nil {
		return m.Allocated
	}
	return 0
}

func (m *Memory) GetHeapSize() uint64 {
	if m != nil {
		return m.HeapSize
	}
	return 0
}

func (m *Memory) GetPageheapUnmapped() uint64 {
	if m != nil {
		return m.PageheapUnmapped
	}
	return 0
}

func (m *Memory) GetPageheapFree() uint64 {
	if m != nil {
		return m.PageheapFree
	}
	return 0
}

func (m *Memory) GetTotalThreadCache() uint64 {
	if m != nil {
		return m.TotalThreadCache
	}
	return 0
}

func init() {
	proto.RegisterType((*Memory)(nil), "envoy.admin.v2alpha.Memory")
}

func init() { proto.RegisterFile("envoy/admin/v2alpha/memory.proto", fileDescriptor_51b7ba9ad7a02b7f) }

var fileDescriptor_51b7ba9ad7a02b7f = []byte{
	// 231 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0xcf, 0x4a, 0x03, 0x31,
	0x10, 0x87, 0x59, 0xad, 0xc5, 0x8e, 0x0a, 0x1a, 0x2f, 0x01, 0x3d, 0x54, 0xbd, 0x08, 0x4a, 0x16,
	0xea, 0x1b, 0x54, 0xf0, 0x26, 0x14, 0xff, 0x9c, 0x97, 0x71, 0x77, 0x34, 0x81, 0x64, 0x27, 0xc4,
	0x58, 0xdc, 0xbe, 0x9e, 0x2f, 0x26, 0x3b, 0xed, 0xea, 0xa5, 0xd7, 0xef, 0xfb, 0x18, 0xf8, 0x0d,
	0x4c, 0xa9, 0x5d, 0x72, 0x57, 0x62, 0x13, 0x5c, 0x5b, 0x2e, 0x67, 0xe8, 0xa3, 0xc5, 0x32, 0x50,
	0xe0, 0xd4, 0x99, 0x98, 0x38, 0xb3, 0x3a, 0x95, 0xc2, 0x48, 0x61, 0x36, 0xc5, 0xe5, 0x4f, 0x01,
	0xe3, 0x47, 0xa9, 0xd4, 0x39, 0x4c, 0xd0, 0x7b, 0xae, 0x31, 0x53, 0xa3, 0x8b, 0x69, 0x71, 0x3d,
	0x7a, 0xfa, 0x07, 0xea, 0x0c, 0x26, 0x96, 0x30, 0x56, 0x9f, 0x6e, 0x45, 0x7a, 0x47, 0xec, 0x7e,
	0x0f, 0x9e, 0xdd, 0x8a, 0xd4, 0x0d, 0x9c, 0x44, 0xfc, 0x20, 0x09, 0xbe, 0xda, 0x80, 0x31, 0x52,
	0xa3, 0x77, 0x25, 0x3a, 0x1e, 0xc4, 0xeb, 0x86, 0xab, 0x2b, 0x38, 0xfa, 0x8b, 0xdf, 0x13, 0x91,
	0x1e, 0x49, 0x78, 0x38, 0xc0, 0x87, 0x44, 0xa4, 0x6e, 0x41, 0x65, 0xce, 0xe8, 0xab, 0x6c, 0x13,
	0x61, 0x53, 0xd5, 0x58, 0x5b, 0xd2, 0x7b, 0xeb, 0x93, 0x62, 0x5e, 0x44, 0xdc, 0xf7, 0x7c, 0x3e,
	0x83, 0x0b, 0xc7, 0x46, 0xf6, 0xc5, 0xc4, 0xdf, 0x9d, 0xd9, 0x32, 0x75, 0x7e, 0xb0, 0xde, 0xb9,
	0xe8, 0x9f, 0xb1, 0x28, 0xde, 0xc6, 0xf2, 0x95, 0xbb, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc6,
	0x96, 0xeb, 0xdc, 0x39, 0x01, 0x00, 0x00,
}
  07070100000053000081A4000003E800000064000000015E17A2470000121F000000000000000000000000000000000000003B00000000cilium-proxy-20200109/go/envoy/admin/v2alpha/metrics.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/admin/v2alpha/metrics.proto

package envoy_admin_v2alpha

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type SimpleMetric_Type int32

const (
	SimpleMetric_COUNTER SimpleMetric_Type = 0
	SimpleMetric_GAUGE   SimpleMetric_Type = 1
)

var SimpleMetric_Type_name = map[int32]string{
	0: "COUNTER",
	1: "GAUGE",
}

var SimpleMetric_Type_value = map[string]int32{
	"COUNTER": 0,
	"GAUGE":   1,
}

func (x SimpleMetric_Type) String() string {
	return proto.EnumName(SimpleMetric_Type_name, int32(x))
}

func (SimpleMetric_Type) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_680a736ec6584458, []int{0, 0}
}

// Proto representation of an Envoy Counter or Gauge value.
type SimpleMetric struct {
	// Type of the metric represented.
	Type SimpleMetric_Type `protobuf:"varint,1,opt,name=type,proto3,enum=envoy.admin.v2alpha.SimpleMetric_Type" json:"type,omitempty"`
	// Current metric value.
	Value uint64 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"`
	// Name of the metric.
	Name                 string   `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *SimpleMetric) Reset()         { *m = SimpleMetric{} }
func (m *SimpleMetric) String() string { return proto.CompactTextString(m) }
func (*SimpleMetric) ProtoMessage()    {}
func (*SimpleMetric) Descriptor() ([]byte, []int) {
	return fileDescriptor_680a736ec6584458, []int{0}
}

func (m *SimpleMetric) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SimpleMetric.Unmarshal(m, b)
}
func (m *SimpleMetric) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SimpleMetric.Marshal(b, m, deterministic)
}
func (m *SimpleMetric) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SimpleMetric.Merge(m, src)
}
func (m *SimpleMetric) XXX_Size() int {
	return xxx_messageInfo_SimpleMetric.Size(m)
}
func (m *SimpleMetric) XXX_DiscardUnknown() {
	xxx_messageInfo_SimpleMetric.DiscardUnknown(m)
}

var xxx_messageInfo_SimpleMetric proto.InternalMessageInfo

func (m *SimpleMetric) GetType() SimpleMetric_Type {
	if m != nil {
		return m.Type
	}
	return SimpleMetric_COUNTER
}

func (m *SimpleMetric) GetValue() uint64 {
	if m != nil {
		return m.Value
	}
	return 0
}

func (m *SimpleMetric) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func init() {
	proto.RegisterEnum("envoy.admin.v2alpha.SimpleMetric_Type", SimpleMetric_Type_name, SimpleMetric_Type_value)
	proto.RegisterType((*SimpleMetric)(nil), "envoy.admin.v2alpha.SimpleMetric")
}

func init() { proto.RegisterFile("envoy/admin/v2alpha/metrics.proto", fileDescriptor_680a736ec6584458) }

var fileDescriptor_680a736ec6584458 = []byte{
	// 209 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4c, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0x4c, 0xc9, 0xcd, 0xcc, 0xd3, 0x2f, 0x33, 0x4a, 0xcc, 0x29, 0xc8, 0x48, 0xd4,
	0xcf, 0x4d, 0x2d, 0x29, 0xca, 0x4c, 0x2e, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x06,
	0x2b, 0xd1, 0x03, 0x2b, 0xd1, 0x83, 0x2a, 0x51, 0x9a, 0xc2, 0xc8, 0xc5, 0x13, 0x9c, 0x99, 0x5b,
	0x90, 0x93, 0xea, 0x0b, 0x56, 0x2c, 0x64, 0xc5, 0xc5, 0x52, 0x52, 0x59, 0x90, 0x2a, 0xc1, 0xa8,
	0xc0, 0xa8, 0xc1, 0x67, 0xa4, 0xa6, 0x87, 0x45, 0x93, 0x1e, 0xb2, 0x06, 0xbd, 0x90, 0xca, 0x82,
	0xd4, 0x20, 0xb0, 0x1e, 0x21, 0x11, 0x2e, 0xd6, 0xb2, 0xc4, 0x9c, 0xd2, 0x54, 0x09, 0x26, 0x05,
	0x46, 0x0d, 0x96, 0x20, 0x08, 0x47, 0x48, 0x88, 0x8b, 0x25, 0x2f, 0x31, 0x37, 0x55, 0x82, 0x59,
	0x81, 0x51, 0x83, 0x33, 0x08, 0xcc, 0x56, 0x92, 0xe3, 0x62, 0x01, 0xe9, 0x13, 0xe2, 0xe6, 0x62,
	0x77, 0xf6, 0x0f, 0xf5, 0x0b, 0x71, 0x0d, 0x12, 0x60, 0x10, 0xe2, 0xe4, 0x62, 0x75, 0x77, 0x0c,
	0x75, 0x77, 0x15, 0x60, 0x74, 0x32, 0xe6, 0x52, 0xcc, 0xcc, 0x87, 0xd8, 0x5d, 0x50, 0x94, 0x5f,
	0x51, 0x89, 0xcd, 0x19, 0x4e, 0x3c, 0x10, 0x17, 0x14, 0x07, 0x80, 0xbc, 0x17, 0xc0, 0x98, 0xc4,
	0x06, 0xf6, 0xa7, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x1b, 0x3c, 0x49, 0xb9, 0x0c, 0x01, 0x00,
	0x00,
}
 07070100000054000081A4000003E800000064000000015E17A2470000125C000000000000000000000000000000000000003F00000000cilium-proxy-20200109/go/envoy/admin/v2alpha/mutex_stats.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/admin/v2alpha/mutex_stats.proto

package envoy_admin_v2alpha

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Proto representation of the statistics collected upon absl::Mutex contention, if Envoy is run
// under :option:`--enable-mutex-tracing`. For more information, see the `absl::Mutex`
// [docs](https://abseil.io/about/design/mutex#extra-features).
//
// *NB*: The wait cycles below are measured by `absl::base_internal::CycleClock`, and may not
// correspond to core clock frequency. For more information, see the `CycleClock`
// [docs](https://github.com/abseil/abseil-cpp/blob/master/absl/base/internal/cycleclock.h).
type MutexStats struct {
	// The number of individual mutex contentions which have occurred since startup.
	NumContentions uint64 `protobuf:"varint,1,opt,name=num_contentions,json=numContentions,proto3" json:"num_contentions,omitempty"`
	// The length of the current contention wait cycle.
	CurrentWaitCycles uint64 `protobuf:"varint,2,opt,name=current_wait_cycles,json=currentWaitCycles,proto3" json:"current_wait_cycles,omitempty"`
	// The lifetime total of all contention wait cycles.
	LifetimeWaitCycles   uint64   `protobuf:"varint,3,opt,name=lifetime_wait_cycles,json=lifetimeWaitCycles,proto3" json:"lifetime_wait_cycles,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *MutexStats) Reset()         { *m = MutexStats{} }
func (m *MutexStats) String() string { return proto.CompactTextString(m) }
func (*MutexStats) ProtoMessage()    {}
func (*MutexStats) Descriptor() ([]byte, []int) {
	return fileDescriptor_2c1145f4b9ed4752, []int{0}
}

func (m *MutexStats) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MutexStats.Unmarshal(m, b)
}
func (m *MutexStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MutexStats.Marshal(b, m, deterministic)
}
func (m *MutexStats) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MutexStats.Merge(m, src)
}
func (m *MutexStats) XXX_Size() int {
	return xxx_messageInfo_MutexStats.Size(m)
}
func (m *MutexStats) XXX_DiscardUnknown() {
	xxx_messageInfo_MutexStats.DiscardUnknown(m)
}

var xxx_messageInfo_MutexStats proto.InternalMessageInfo

func (m *MutexStats) GetNumContentions() uint64 {
	if m != nil {
		return m.NumContentions
	}
	return 0
}

func (m *MutexStats) GetCurrentWaitCycles() uint64 {
	if m != nil {
		return m.CurrentWaitCycles
	}
	return 0
}

func (m *MutexStats) GetLifetimeWaitCycles() uint64 {
	if m != nil {
		return m.LifetimeWaitCycles
	}
	return 0
}

func init() {
	proto.RegisterType((*MutexStats)(nil), "envoy.admin.v2alpha.MutexStats")
}

func init() {
	proto.RegisterFile("envoy/admin/v2alpha/mutex_stats.proto", fileDescriptor_2c1145f4b9ed4752)
}

var fileDescriptor_2c1145f4b9ed4752 = []byte{
	// 208 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4d, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0x4c, 0xc9, 0xcd, 0xcc, 0xd3, 0x2f, 0x33, 0x4a, 0xcc, 0x29, 0xc8, 0x48, 0xd4,
	0xcf, 0x2d, 0x2d, 0x49, 0xad, 0x88, 0x2f, 0x2e, 0x49, 0x2c, 0x29, 0xd6, 0x2b, 0x28, 0xca, 0x2f,
	0xc9, 0x17, 0x12, 0x06, 0x2b, 0xd3, 0x03, 0x2b, 0xd3, 0x83, 0x2a, 0x53, 0x9a, 0xce, 0xc8, 0xc5,
	0xe5, 0x0b, 0x52, 0x1a, 0x0c, 0x52, 0x29, 0xa4, 0xce, 0xc5, 0x9f, 0x57, 0x9a, 0x1b, 0x9f, 0x9c,
	0x9f, 0x57, 0x92, 0x9a, 0x57, 0x92, 0x99, 0x9f, 0x57, 0x2c, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x12,
	0xc4, 0x97, 0x57, 0x9a, 0xeb, 0x8c, 0x10, 0x15, 0xd2, 0xe3, 0x12, 0x4e, 0x2e, 0x2d, 0x2a, 0x4a,
	0xcd, 0x2b, 0x89, 0x2f, 0x4f, 0xcc, 0x2c, 0x89, 0x4f, 0xae, 0x4c, 0xce, 0x49, 0x2d, 0x96, 0x60,
	0x02, 0x2b, 0x16, 0x84, 0x4a, 0x85, 0x27, 0x66, 0x96, 0x38, 0x83, 0x25, 0x84, 0x0c, 0xb8, 0x44,
	0x72, 0x32, 0xd3, 0x52, 0x4b, 0x32, 0x73, 0x53, 0x51, 0x34, 0x30, 0x83, 0x35, 0x08, 0xc1, 0xe4,
	0x10, 0x3a, 0x9c, 0xcc, 0xb8, 0x14, 0x33, 0xf3, 0xf5, 0xc0, 0x6e, 0x2e, 0x28, 0xca, 0xaf, 0xa8,
	0xd4, 0xc3, 0xe2, 0x7c, 0x27, 0x7e, 0x84, 0xdb, 0x03, 0x40, 0x9e, 0x0c, 0x60, 0x4c, 0x62, 0x03,
	0xfb, 0xd6, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x14, 0x47, 0xc2, 0x80, 0x16, 0x01, 0x00, 0x00,
}
07070100000055000081A4000003E800000064000000015E17A247000053CF000000000000000000000000000000000000003F00000000cilium-proxy-20200109/go/envoy/admin/v2alpha/server_info.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/admin/v2alpha/server_info.proto

package envoy_admin_v2alpha

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type ServerInfo_State int32

const (
	// Server is live and serving traffic.
	ServerInfo_LIVE ServerInfo_State = 0
	// Server is draining listeners in response to external health checks failing.
	ServerInfo_DRAINING ServerInfo_State = 1
	// Server has not yet completed cluster manager initialization.
	ServerInfo_PRE_INITIALIZING ServerInfo_State = 2
	// Server is running the cluster manager initialization callbacks (e.g., RDS).
	ServerInfo_INITIALIZING ServerInfo_State = 3
)

var ServerInfo_State_name = map[int32]string{
	0: "LIVE",
	1: "DRAINING",
	2: "PRE_INITIALIZING",
	3: "INITIALIZING",
}

var ServerInfo_State_value = map[string]int32{
	"LIVE":             0,
	"DRAINING":         1,
	"PRE_INITIALIZING": 2,
	"INITIALIZING":     3,
}

func (x ServerInfo_State) String() string {
	return proto.EnumName(ServerInfo_State_name, int32(x))
}

func (ServerInfo_State) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_ed0f406f9d75bf97, []int{0, 0}
}

type CommandLineOptions_IpVersion int32

const (
	CommandLineOptions_v4 CommandLineOptions_IpVersion = 0
	CommandLineOptions_v6 CommandLineOptions_IpVersion = 1
)

var CommandLineOptions_IpVersion_name = map[int32]string{
	0: "v4",
	1: "v6",
}

var CommandLineOptions_IpVersion_value = map[string]int32{
	"v4": 0,
	"v6": 1,
}

func (x CommandLineOptions_IpVersion) String() string {
	return proto.EnumName(CommandLineOptions_IpVersion_name, int32(x))
}

func (CommandLineOptions_IpVersion) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_ed0f406f9d75bf97, []int{1, 0}
}

type CommandLineOptions_Mode int32

const (
	// Validate configs and then serve traffic normally.
	CommandLineOptions_Serve CommandLineOptions_Mode = 0
	// Validate configs and exit.
	CommandLineOptions_Validate CommandLineOptions_Mode = 1
	// Completely load and initialize the config, and then exit without running the listener loop.
	CommandLineOptions_InitOnly CommandLineOptions_Mode = 2
)

var CommandLineOptions_Mode_name = map[int32]string{
	0: "Serve",
	1: "Validate",
	2: "InitOnly",
}

var CommandLineOptions_Mode_value = map[string]int32{
	"Serve":    0,
	"Validate": 1,
	"InitOnly": 2,
}

func (x CommandLineOptions_Mode) String() string {
	return proto.EnumName(CommandLineOptions_Mode_name, int32(x))
}

func (CommandLineOptions_Mode) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_ed0f406f9d75bf97, []int{1, 1}
}

// Proto representation of the value returned by /server_info, containing
// server version/server status information.
// [#next-free-field: 7]
type ServerInfo struct {
	// Server version.
	Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
	// State of the server.
	State ServerInfo_State `protobuf:"varint,2,opt,name=state,proto3,enum=envoy.admin.v2alpha.ServerInfo_State" json:"state,omitempty"`
	// Uptime since current epoch was started.
	UptimeCurrentEpoch *duration.Duration `protobuf:"bytes,3,opt,name=uptime_current_epoch,json=uptimeCurrentEpoch,proto3" json:"uptime_current_epoch,omitempty"`
	// Uptime since the start of the first epoch.
	UptimeAllEpochs *duration.Duration `protobuf:"bytes,4,opt,name=uptime_all_epochs,json=uptimeAllEpochs,proto3" json:"uptime_all_epochs,omitempty"`
	// Hot restart version.
	HotRestartVersion string `protobuf:"bytes,5,opt,name=hot_restart_version,json=hotRestartVersion,proto3" json:"hot_restart_version,omitempty"`
	// Command line options the server is currently running with.
	CommandLineOptions   *CommandLineOptions `protobuf:"bytes,6,opt,name=command_line_options,json=commandLineOptions,proto3" json:"command_line_options,omitempty"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *ServerInfo) Reset()         { *m = ServerInfo{} }
func (m *ServerInfo) String() string { return proto.CompactTextString(m) }
func (*ServerInfo) ProtoMessage()    {}
func (*ServerInfo) Descriptor() ([]byte, []int) {
	return fileDescriptor_ed0f406f9d75bf97, []int{0}
}

func (m *ServerInfo) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ServerInfo.Unmarshal(m, b)
}
func (m *ServerInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ServerInfo.Marshal(b, m, deterministic)
}
func (m *ServerInfo) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ServerInfo.Merge(m, src)
}
func (m *ServerInfo) XXX_Size() int {
	return xxx_messageInfo_ServerInfo.Size(m)
}
func (m *ServerInfo) XXX_DiscardUnknown() {
	xxx_messageInfo_ServerInfo.DiscardUnknown(m)
}

var xxx_messageInfo_ServerInfo proto.InternalMessageInfo

func (m *ServerInfo) GetVersion() string {
	if m != nil {
		return m.Version
	}
	return ""
}

func (m *ServerInfo) GetState() ServerInfo_State {
	if m != nil {
		return m.State
	}
	return ServerInfo_LIVE
}

func (m *ServerInfo) GetUptimeCurrentEpoch() *duration.Duration {
	if m != nil {
		return m.UptimeCurrentEpoch
	}
	return nil
}

func (m *ServerInfo) GetUptimeAllEpochs() *duration.Duration {
	if m != nil {
		return m.UptimeAllEpochs
	}
	return nil
}

func (m *ServerInfo) GetHotRestartVersion() string {
	if m != nil {
		return m.HotRestartVersion
	}
	return ""
}

func (m *ServerInfo) GetCommandLineOptions() *CommandLineOptions {
	if m != nil {
		return m.CommandLineOptions
	}
	return nil
}

// [#next-free-field: 27]
type CommandLineOptions struct {
	// See :option:`--base-id` for details.
	BaseId uint64 `protobuf:"varint,1,opt,name=base_id,json=baseId,proto3" json:"base_id,omitempty"`
	// See :option:`--concurrency` for details.
	Concurrency uint32 `protobuf:"varint,2,opt,name=concurrency,proto3" json:"concurrency,omitempty"`
	// See :option:`--config-path` for details.
	ConfigPath string `protobuf:"bytes,3,opt,name=config_path,json=configPath,proto3" json:"config_path,omitempty"`
	// See :option:`--config-yaml` for details.
	ConfigYaml string `protobuf:"bytes,4,opt,name=config_yaml,json=configYaml,proto3" json:"config_yaml,omitempty"`
	// See :option:`--allow-unknown-static-fields` for details.
	AllowUnknownStaticFields bool `protobuf:"varint,5,opt,name=allow_unknown_static_fields,json=allowUnknownStaticFields,proto3" json:"allow_unknown_static_fields,omitempty"`
	// See :option:`--reject-unknown-dynamic-fields` for details.
	RejectUnknownDynamicFields bool `protobuf:"varint,26,opt,name=reject_unknown_dynamic_fields,json=rejectUnknownDynamicFields,proto3" json:"reject_unknown_dynamic_fields,omitempty"`
	// See :option:`--admin-address-path` for details.
	AdminAddressPath string `protobuf:"bytes,6,opt,name=admin_address_path,json=adminAddressPath,proto3" json:"admin_address_path,omitempty"`
	// See :option:`--local-address-ip-version` for details.
	LocalAddressIpVersion CommandLineOptions_IpVersion `protobuf:"varint,7,opt,name=local_address_ip_version,json=localAddressIpVersion,proto3,enum=envoy.admin.v2alpha.CommandLineOptions_IpVersion" json:"local_address_ip_version,omitempty"`
	// See :option:`--log-level` for details.
	LogLevel string `protobuf:"bytes,8,opt,name=log_level,json=logLevel,proto3" json:"log_level,omitempty"`
	// See :option:`--component-log-level` for details.
	ComponentLogLevel string `protobuf:"bytes,9,opt,name=component_log_level,json=componentLogLevel,proto3" json:"component_log_level,omitempty"`
	// See :option:`--log-format` for details.
	LogFormat string `protobuf:"bytes,10,opt,name=log_format,json=logFormat,proto3" json:"log_format,omitempty"`
	// See :option:`--log-path` for details.
	LogPath string `protobuf:"bytes,11,opt,name=log_path,json=logPath,proto3" json:"log_path,omitempty"`
	// See :option:`--service-cluster` for details.
	ServiceCluster string `protobuf:"bytes,13,opt,name=service_cluster,json=serviceCluster,proto3" json:"service_cluster,omitempty"`
	// See :option:`--service-node` for details.
	ServiceNode string `protobuf:"bytes,14,opt,name=service_node,json=serviceNode,proto3" json:"service_node,omitempty"`
	// See :option:`--service-zone` for details.
	ServiceZone string `protobuf:"bytes,15,opt,name=service_zone,json=serviceZone,proto3" json:"service_zone,omitempty"`
	// See :option:`--file-flush-interval-msec` for details.
	FileFlushInterval *duration.Duration `protobuf:"bytes,16,opt,name=file_flush_interval,json=fileFlushInterval,proto3" json:"file_flush_interval,omitempty"`
	// See :option:`--drain-time-s` for details.
	DrainTime *duration.Duration `protobuf:"bytes,17,opt,name=drain_time,json=drainTime,proto3" json:"drain_time,omitempty"`
	// See :option:`--parent-shutdown-time-s` for details.
	ParentShutdownTime *duration.Duration `protobuf:"bytes,18,opt,name=parent_shutdown_time,json=parentShutdownTime,proto3" json:"parent_shutdown_time,omitempty"`
	// See :option:`--mode` for details.
	Mode CommandLineOptions_Mode `protobuf:"varint,19,opt,name=mode,proto3,enum=envoy.admin.v2alpha.CommandLineOptions_Mode" json:"mode,omitempty"`
	// max_stats and max_obj_name_len are now unused and have no effect.
	MaxStats      uint64 `protobuf:"varint,20,opt,name=max_stats,json=maxStats,proto3" json:"max_stats,omitempty"`                    // Deprecated: Do not use.
	MaxObjNameLen uint64 `protobuf:"varint,21,opt,name=max_obj_name_len,json=maxObjNameLen,proto3" json:"max_obj_name_len,omitempty"` // Deprecated: Do not use.
	// See :option:`--disable-hot-restart` for details.
	DisableHotRestart bool `protobuf:"varint,22,opt,name=disable_hot_restart,json=disableHotRestart,proto3" json:"disable_hot_restart,omitempty"`
	// See :option:`--enable-mutex-tracing` for details.
	EnableMutexTracing bool `protobuf:"varint,23,opt,name=enable_mutex_tracing,json=enableMutexTracing,proto3" json:"enable_mutex_tracing,omitempty"`
	// See :option:`--restart-epoch` for details.
	RestartEpoch uint32 `protobuf:"varint,24,opt,name=restart_epoch,json=restartEpoch,proto3" json:"restart_epoch,omitempty"`
	// See :option:`--cpuset-threads` for details.
	CpusetThreads        bool     `protobuf:"varint,25,opt,name=cpuset_threads,json=cpusetThreads,proto3" json:"cpuset_threads,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *CommandLineOptions) Reset()         { *m = CommandLineOptions{} }
func (m *CommandLineOptions) String() string { return proto.CompactTextString(m) }
func (*CommandLineOptions) ProtoMessage()    {}
func (*CommandLineOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_ed0f406f9d75bf97, []int{1}
}

func (m *CommandLineOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_CommandLineOptions.Unmarshal(m, b)
}
func (m *CommandLineOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_CommandLineOptions.Marshal(b, m, deterministic)
}
func (m *CommandLineOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CommandLineOptions.Merge(m, src)
}
func (m *CommandLineOptions) XXX_Size() int {
	return xxx_messageInfo_CommandLineOptions.Size(m)
}
func (m *CommandLineOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_CommandLineOptions.DiscardUnknown(m)
}

var xxx_messageInfo_CommandLineOptions proto.InternalMessageInfo

func (m *CommandLineOptions) GetBaseId() uint64 {
	if m != nil {
		return m.BaseId
	}
	return 0
}

func (m *CommandLineOptions) GetConcurrency() uint32 {
	if m != nil {
		return m.Concurrency
	}
	return 0
}

func (m *CommandLineOptions) GetConfigPath() string {
	if m != nil {
		return m.ConfigPath
	}
	return ""
}

func (m *CommandLineOptions) GetConfigYaml() string {
	if m != nil {
		return m.ConfigYaml
	}
	return ""
}

func (m *CommandLineOptions) GetAllowUnknownStaticFields() bool {
	if m != nil {
		return m.AllowUnknownStaticFields
	}
	return false
}

func (m *CommandLineOptions) GetRejectUnknownDynamicFields() bool {
	if m != nil {
		return m.RejectUnknownDynamicFields
	}
	return false
}

func (m *CommandLineOptions) GetAdminAddressPath() string {
	if m != nil {
		return m.AdminAddressPath
	}
	return ""
}

func (m *CommandLineOptions) GetLocalAddressIpVersion() CommandLineOptions_IpVersion {
	if m != nil {
		return m.LocalAddressIpVersion
	}
	return CommandLineOptions_v4
}

func (m *CommandLineOptions) GetLogLevel() string {
	if m != nil {
		return m.LogLevel
	}
	return ""
}

func (m *CommandLineOptions) GetComponentLogLevel() string {
	if m != nil {
		return m.ComponentLogLevel
	}
	return ""
}

func (m *CommandLineOptions) GetLogFormat() string {
	if m != nil {
		return m.LogFormat
	}
	return ""
}

func (m *CommandLineOptions) GetLogPath() string {
	if m != nil {
		return m.LogPath
	}
	return ""
}

func (m *CommandLineOptions) GetServiceCluster() string {
	if m != nil {
		return m.ServiceCluster
	}
	return ""
}

func (m *CommandLineOptions) GetServiceNode() string {
	if m != nil {
		return m.ServiceNode
	}
	return ""
}

func (m *CommandLineOptions) GetServiceZone() string {
	if m != nil {
		return m.ServiceZone
	}
	return ""
}

func (m *CommandLineOptions) GetFileFlushInterval() *duration.Duration {
	if m != nil {
		return m.FileFlushInterval
	}
	return nil
}

func (m *CommandLineOptions) GetDrainTime() *duration.Duration {
	if m != nil {
		return m.DrainTime
	}
	return nil
}

func (m *CommandLineOptions) GetParentShutdownTime() *duration.Duration {
	if m != nil {
		return m.ParentShutdownTime
	}
	return nil
}

func (m *CommandLineOptions) GetMode() CommandLineOptions_Mode {
	if m != nil {
		return m.Mode
	}
	return CommandLineOptions_Serve
}

// Deprecated: Do not use.
func (m *CommandLineOptions) GetMaxStats() uint64 {
	if m != nil {
		return m.MaxStats
	}
	return 0
}

// Deprecated: Do not use.
func (m *CommandLineOptions) GetMaxObjNameLen() uint64 {
	if m != nil {
		return m.MaxObjNameLen
	}
	return 0
}

func (m *CommandLineOptions) GetDisableHotRestart() bool {
	if m != nil {
		return m.DisableHotRestart
	}
	return false
}

func (m *CommandLineOptions) GetEnableMutexTracing() bool {
	if m != nil {
		return m.EnableMutexTracing
	}
	return false
}

func (m *CommandLineOptions) GetRestartEpoch() uint32 {
	if m != nil {
		return m.RestartEpoch
	}
	return 0
}

func (m *CommandLineOptions) GetCpusetThreads() bool {
	if m != nil {
		return m.CpusetThreads
	}
	return false
}

func init() {
	proto.RegisterEnum("envoy.admin.v2alpha.ServerInfo_State", ServerInfo_State_name, ServerInfo_State_value)
	proto.RegisterEnum("envoy.admin.v2alpha.CommandLineOptions_IpVersion", CommandLineOptions_IpVersion_name, CommandLineOptions_IpVersion_value)
	proto.RegisterEnum("envoy.admin.v2alpha.CommandLineOptions_Mode", CommandLineOptions_Mode_name, CommandLineOptions_Mode_value)
	proto.RegisterType((*ServerInfo)(nil), "envoy.admin.v2alpha.ServerInfo")
	proto.RegisterType((*CommandLineOptions)(nil), "envoy.admin.v2alpha.CommandLineOptions")
}

func init() {
	proto.RegisterFile("envoy/admin/v2alpha/server_info.proto", fileDescriptor_ed0f406f9d75bf97)
}

var fileDescriptor_ed0f406f9d75bf97 = []byte{
	// 957 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0x6d, 0x4f, 0x1b, 0x47,
	0x10, 0xc7, 0x63, 0x30, 0x60, 0x0f, 0x18, 0x8e, 0x85, 0x34, 0x0b, 0x28, 0x0d, 0xa1, 0x42, 0x41,
	0x6a, 0x7a, 0xb4, 0xb4, 0x8a, 0x2a, 0x55, 0x95, 0xca, 0x63, 0x7a, 0xad, 0x03, 0xe8, 0xa0, 0x48,
	0xc9, 0x9b, 0xd5, 0xfa, 0x6e, 0x6d, 0x2f, 0xdd, 0xdb, 0x3d, 0xdd, 0xad, 0x1d, 0xdc, 0xf7, 0xfd,
	0x74, 0xfd, 0x52, 0xd5, 0xce, 0x9e, 0x6d, 0xa2, 0x20, 0x91, 0x57, 0xa7, 0x9d, 0xf9, 0xcd, 0x7f,
	0x1f, 0xe6, 0xe1, 0x60, 0x57, 0xe8, 0xa1, 0x19, 0xed, 0xf3, 0x34, 0x93, 0x7a, 0x7f, 0x78, 0xc0,
	0x55, 0xde, 0xe7, 0xfb, 0xa5, 0x28, 0x86, 0xa2, 0x60, 0x52, 0x77, 0x4d, 0x98, 0x17, 0xc6, 0x1a,
	0xb2, 0x86, 0x58, 0x88, 0x58, 0x58, 0x61, 0x9b, 0x5f, 0xf7, 0x8c, 0xe9, 0x29, 0xb1, 0x8f, 0x48,
	0x67, 0xd0, 0xdd, 0x4f, 0x07, 0x05, 0xb7, 0xd2, 0x68, 0x1f, 0xb4, 0xf3, 0xdf, 0x2c, 0xc0, 0x15,
	0x4a, 0x45, 0xba, 0x6b, 0x08, 0x85, 0x85, 0xa1, 0x28, 0x4a, 0x69, 0x34, 0xad, 0x6d, 0xd7, 0xf6,
	0x9a, 0xf1, 0x78, 0x49, 0x7e, 0x81, 0xb9, 0xd2, 0x72, 0x2b, 0xe8, 0xcc, 0x76, 0x6d, 0x6f, 0xf9,
	0x60, 0x37, 0x7c, 0x60, 0xb7, 0x70, 0xaa, 0x14, 0x5e, 0x39, 0x38, 0xf6, 0x31, 0xe4, 0x4f, 0x58,
	0x1f, 0xe4, 0x56, 0x66, 0x82, 0x25, 0x83, 0xa2, 0x10, 0xda, 0x32, 0x91, 0x9b, 0xa4, 0x4f, 0x67,
	0xb7, 0x6b, 0x7b, 0x8b, 0x07, 0x1b, 0xa1, 0x3f, 0x64, 0x38, 0x3e, 0x64, 0x78, 0x52, 0x1d, 0x32,
	0x26, 0x3e, 0xec, 0xd8, 0x47, 0x9d, 0xba, 0x20, 0x72, 0x0a, 0xab, 0x95, 0x18, 0x57, 0xca, 0x0b,
	0x95, 0xb4, 0xfe, 0x98, 0xd2, 0x8a, 0x8f, 0x39, 0x54, 0x0a, 0x55, 0x4a, 0x12, 0xc2, 0x5a, 0xdf,
	0x58, 0x56, 0x88, 0xd2, 0xf2, 0xc2, 0xb2, 0xf1, 0xb5, 0xe7, 0xf0, 0xda, 0xab, 0x7d, 0x63, 0x63,
	0xef, 0xb9, 0xa9, 0x1e, 0xe0, 0x3d, 0xac, 0x27, 0x26, 0xcb, 0xb8, 0x4e, 0x99, 0x92, 0x5a, 0x30,
	0x93, 0x3b, 0xdd, 0x92, 0xce, 0xe3, 0xce, 0xaf, 0x1e, 0x7c, 0x8f, 0x63, 0x1f, 0xd0, 0x96, 0x5a,
	0x5c, 0x78, 0x3c, 0x26, 0xc9, 0x67, 0xb6, 0x9d, 0xb7, 0x30, 0x87, 0xcf, 0x45, 0x1a, 0x50, 0x6f,
	0x47, 0x37, 0xa7, 0xc1, 0x13, 0xb2, 0x04, 0x8d, 0x93, 0xf8, 0x30, 0x3a, 0x8f, 0xce, 0xdf, 0x06,
	0x35, 0xb2, 0x0e, 0xc1, 0x65, 0x7c, 0xca, 0xa2, 0xf3, 0xe8, 0x3a, 0x3a, 0x6c, 0x47, 0x1f, 0x9c,
	0x75, 0x86, 0x04, 0xb0, 0xf4, 0x89, 0x65, 0x76, 0xe7, 0x5f, 0x00, 0xf2, 0xf9, 0x9e, 0xe4, 0x19,
	0x2c, 0x74, 0x78, 0x29, 0x98, 0x4c, 0x31, 0xab, 0xf5, 0x78, 0xde, 0x2d, 0xa3, 0x94, 0x6c, 0xc3,
	0x62, 0x62, 0xb4, 0xcf, 0x49, 0x32, 0xc2, 0xd4, 0xb6, 0xe2, 0xfb, 0x26, 0xf2, 0x02, 0x89, 0xae,
	0xec, 0xb1, 0x9c, 0x5b, 0x9f, 0xb0, 0x66, 0x0c, 0xde, 0x74, 0xc9, 0x6d, 0xff, 0x1e, 0x30, 0xe2,
	0x99, 0xc2, 0x3c, 0x4c, 0x80, 0xf7, 0x3c, 0x53, 0xe4, 0x57, 0xd8, 0xe2, 0x4a, 0x99, 0x8f, 0x6c,
	0xa0, 0xff, 0xd6, 0xe6, 0xa3, 0x66, 0xae, 0x24, 0x64, 0xc2, 0xba, 0x52, 0xa8, 0xb4, 0xc4, 0xf7,
	0x6e, 0xc4, 0x14, 0x91, 0xbf, 0x3c, 0x71, 0x85, 0xc0, 0x19, 0xfa, 0xc9, 0x21, 0x3c, 0x2f, 0xc4,
	0xad, 0x48, 0xec, 0x24, 0x3e, 0x1d, 0x69, 0x9e, 0x4d, 0x05, 0x36, 0x51, 0x60, 0xd3, 0x43, 0x95,
	0xc2, 0x89, 0x47, 0x2a, 0x89, 0xd7, 0x40, 0x30, 0x2d, 0x8c, 0xa7, 0x69, 0x21, 0xca, 0xd2, 0x5f,
	0x65, 0x1e, 0x4f, 0x1a, 0xa0, 0xe7, 0xd0, 0x3b, 0xf0, 0x42, 0xb7, 0x40, 0x95, 0x49, 0xb8, 0x9a,
	0xd0, 0x32, 0x9f, 0x14, 0xc7, 0x02, 0xd6, 0xfe, 0x0f, 0x5f, 0x98, 0xeb, 0x30, 0xca, 0xab, 0xe2,
	0x89, 0x9f, 0xa2, 0x64, 0xb5, 0xcd, 0xc4, 0x4c, 0xb6, 0xa0, 0xa9, 0x4c, 0x8f, 0x29, 0x31, 0x14,
	0x8a, 0x36, 0xf0, 0x40, 0x0d, 0x65, 0x7a, 0x6d, 0xb7, 0x76, 0x05, 0x9a, 0x98, 0x2c, 0x37, 0xda,
	0xf5, 0xcb, 0x14, 0x6b, 0xfa, 0x02, 0x9d, 0xb8, 0xda, 0x63, 0xfe, 0x39, 0x80, 0xa3, 0xba, 0xa6,
	0xc8, 0xb8, 0xa5, 0x80, 0x98, 0x93, 0x3f, 0x43, 0x03, 0xd9, 0x00, 0x27, 0xed, 0xef, 0xbe, 0xe8,
	0x7b, 0x5b, 0x19, 0x9f, 0xc3, 0x57, 0xb0, 0xe2, 0xc6, 0x89, 0x4c, 0x04, 0x4b, 0xd4, 0xa0, 0xb4,
	0xa2, 0xa0, 0x2d, 0x24, 0x96, 0x2b, 0xf3, 0xb1, 0xb7, 0x92, 0x97, 0xb0, 0x34, 0x06, 0xb5, 0x49,
	0x05, 0x5d, 0x46, 0x6a, 0xb1, 0xb2, 0x9d, 0x9b, 0x54, 0xdc, 0x47, 0xfe, 0x31, 0x5a, 0xd0, 0x95,
	0x4f, 0x90, 0x0f, 0x46, 0x0b, 0x12, 0xc1, 0x5a, 0x57, 0x2a, 0xc1, 0xba, 0x6a, 0x50, 0xf6, 0x99,
	0xd4, 0x56, 0x14, 0x43, 0xae, 0x68, 0xf0, 0x58, 0x0b, 0xaf, 0xba, 0xa8, 0x33, 0x17, 0x14, 0x55,
	0x31, 0xe4, 0x67, 0x80, 0xb4, 0xe0, 0x52, 0x33, 0xd7, 0xdb, 0x74, 0xf5, 0x31, 0x85, 0x26, 0xc2,
	0xd7, 0x32, 0xc3, 0x91, 0x94, 0x73, 0x1c, 0x45, 0x65, 0x7f, 0x60, 0x53, 0x57, 0x58, 0xa8, 0x41,
	0x1e, 0x1d, 0x49, 0x3e, 0xec, 0xaa, 0x8a, 0x42, 0xb1, 0xdf, 0xa0, 0x9e, 0xb9, 0xf7, 0x58, 0xc3,
	0xfa, 0x78, 0xfd, 0xa5, 0xf5, 0xf1, 0xce, 0xa4, 0x22, 0xc6, 0x48, 0xf2, 0x02, 0x9a, 0x19, 0xbf,
	0xc3, 0xde, 0x28, 0xe9, 0xba, 0x6b, 0xd2, 0xa3, 0x19, 0x5a, 0x8b, 0x1b, 0x19, 0xbf, 0x73, 0xed,
	0x50, 0x92, 0x6f, 0x21, 0x70, 0x80, 0xe9, 0xdc, 0x32, 0xcd, 0x33, 0xc1, 0x94, 0xd0, 0xf4, 0xe9,
	0x84, 0x6b, 0x65, 0xfc, 0xee, 0xa2, 0x73, 0x7b, 0xce, 0x33, 0xd1, 0x16, 0xda, 0x95, 0x4e, 0x2a,
	0x4b, 0xde, 0x51, 0x82, 0xdd, 0x9b, 0x71, 0xf4, 0x2b, 0x6c, 0x95, 0xd5, 0xca, 0xf5, 0xfb, 0x64,
	0xc4, 0x91, 0xef, 0x61, 0x5d, 0x68, 0xc4, 0xb3, 0x81, 0x15, 0x77, 0xcc, 0x16, 0x3c, 0x91, 0xba,
	0x47, 0x9f, 0x61, 0x00, 0xf1, 0xbe, 0x77, 0xce, 0x75, 0xed, 0x3d, 0xe4, 0x1b, 0x68, 0x8d, 0x27,
	0xa7, 0x1f, 0xe5, 0x14, 0x67, 0xc7, 0x52, 0x65, 0xf4, 0x93, 0x7a, 0x17, 0x96, 0x93, 0x7c, 0x50,
	0x0a, 0xcb, 0x6c, 0xbf, 0x10, 0x3c, 0x2d, 0xe9, 0x06, 0x0a, 0xb6, 0xbc, 0xf5, 0xda, 0x1b, 0x77,
	0xb6, 0xa0, 0x39, 0x6d, 0x89, 0x79, 0x98, 0x19, 0xfe, 0x14, 0x3c, 0xc1, 0xef, 0x9b, 0xa0, 0xb6,
	0xf3, 0x1d, 0xd4, 0xdd, 0x33, 0x91, 0x26, 0xcc, 0xe1, 0xdf, 0xc5, 0xcf, 0xc6, 0x1b, 0xae, 0x64,
	0xca, 0xad, 0x08, 0x6a, 0x6e, 0x15, 0x69, 0x69, 0x2f, 0xb4, 0x1a, 0x05, 0x33, 0x7f, 0xd4, 0x1b,
	0x4b, 0x41, 0xeb, 0xe8, 0x0d, 0xbc, 0x94, 0xc6, 0x67, 0x21, 0x2f, 0xcc, 0xdd, 0xe8, 0xa1, 0x84,
	0x1c, 0xad, 0x4c, 0xff, 0x56, 0x97, 0x2e, 0xcb, 0x97, 0xb5, 0xce, 0x3c, 0xa6, 0xfb, 0xc7, 0xff,
	0x03, 0x00, 0x00, 0xff, 0xff, 0x3c, 0xe7, 0xb6, 0x90, 0x72, 0x07, 0x00, 0x00,
}
 07070100000056000081A4000003E800000064000000015E17A2470000107F000000000000000000000000000000000000003700000000cilium-proxy-20200109/go/envoy/admin/v2alpha/tap.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/admin/v2alpha/tap.proto

package envoy_admin_v2alpha

import (
	fmt "fmt"
	v2alpha "github.com/cilium/proxy/go/envoy/service/tap/v2alpha"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// The /tap admin request body that is used to configure an active tap session.
type TapRequest struct {
	// The opaque configuration ID used to match the configuration to a loaded extension.
	// A tap extension configures a similar opaque ID that is used to match.
	ConfigId string `protobuf:"bytes,1,opt,name=config_id,json=configId,proto3" json:"config_id,omitempty"`
	// The tap configuration to load.
	TapConfig            *v2alpha.TapConfig `protobuf:"bytes,2,opt,name=tap_config,json=tapConfig,proto3" json:"tap_config,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *TapRequest) Reset()         { *m = TapRequest{} }
func (m *TapRequest) String() string { return proto.CompactTextString(m) }
func (*TapRequest) ProtoMessage()    {}
func (*TapRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_69ef50f493e7b8aa, []int{0}
}

func (m *TapRequest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TapRequest.Unmarshal(m, b)
}
func (m *TapRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TapRequest.Marshal(b, m, deterministic)
}
func (m *TapRequest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TapRequest.Merge(m, src)
}
func (m *TapRequest) XXX_Size() int {
	return xxx_messageInfo_TapRequest.Size(m)
}
func (m *TapRequest) XXX_DiscardUnknown() {
	xxx_messageInfo_TapRequest.DiscardUnknown(m)
}

var xxx_messageInfo_TapRequest proto.InternalMessageInfo

func (m *TapRequest) GetConfigId() string {
	if m != nil {
		return m.ConfigId
	}
	return ""
}

func (m *TapRequest) GetTapConfig() *v2alpha.TapConfig {
	if m != nil {
		return m.TapConfig
	}
	return nil
}

func init() {
	proto.RegisterType((*TapRequest)(nil), "envoy.admin.v2alpha.TapRequest")
}

func init() { proto.RegisterFile("envoy/admin/v2alpha/tap.proto", fileDescriptor_69ef50f493e7b8aa) }

var fileDescriptor_69ef50f493e7b8aa = []byte{
	// 231 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x8f, 0x4f, 0x4b, 0xc3, 0x30,
	0x18, 0x87, 0x79, 0x8b, 0x7f, 0xda, 0x78, 0x91, 0x7a, 0x70, 0x0c, 0x84, 0x2a, 0x43, 0x76, 0x4a,
	0x60, 0x7e, 0x83, 0x78, 0xf2, 0x20, 0x8c, 0xd2, 0xfb, 0x78, 0x6d, 0xa3, 0x06, 0xd6, 0xbe, 0xaf,
	0x59, 0x0c, 0xee, 0xe8, 0xd5, 0x8f, 0xbc, 0x93, 0x34, 0xa9, 0x3b, 0x79, 0x4b, 0xf2, 0xfc, 0x1e,
	0x78, 0x22, 0x6e, 0xcc, 0x10, 0x68, 0xaf, 0xb0, 0xeb, 0xed, 0xa0, 0xc2, 0x0a, 0xb7, 0xfc, 0x8e,
	0xca, 0x23, 0x4b, 0x76, 0xe4, 0xa9, 0xbc, 0x8a, 0x58, 0x46, 0x2c, 0x27, 0x3c, 0xbf, 0x4f, 0xce,
	0xce, 0xb8, 0x60, 0x5b, 0x33, 0xae, 0x8f, 0x66, 0x4b, 0x7d, 0x4f, 0x43, 0x92, 0xe7, 0xd7, 0x01,
	0xb7, 0xb6, 0x43, 0x6f, 0xd4, 0xdf, 0x21, 0x81, 0xbb, 0x6f, 0x10, 0xa2, 0x41, 0xae, 0xcd, 0xc7,
	0xa7, 0xd9, 0xf9, 0x72, 0x21, 0x8a, 0x96, 0x86, 0x57, 0xfb, 0xb6, 0xb1, 0xdd, 0x0c, 0x2a, 0x58,
	0x16, 0xfa, 0xfc, 0xa0, 0x4f, 0x5c, 0x56, 0x41, 0x9d, 0x27, 0xf2, 0xd4, 0x95, 0xcf, 0x42, 0x78,
	0xe4, 0x4d, 0xba, 0xcf, 0xb2, 0x0a, 0x96, 0x17, 0xab, 0x85, 0x4c, 0x7d, 0x53, 0x8a, 0x1c, 0xc3,
	0xa7, 0x14, 0xd9, 0x20, 0x3f, 0xc6, 0xad, 0xce, 0x0f, 0xfa, 0xf4, 0x07, 0xb2, 0x4b, 0xa8, 0x0b,
	0x7f, 0x7c, 0x54, 0xe2, 0xd6, 0x52, 0xd2, 0xd9, 0xd1, 0xd7, 0x5e, 0xfe, 0xf3, 0x53, 0x9d, 0x37,
	0xc8, 0xeb, 0x31, 0x79, 0x0d, 0x2f, 0x67, 0xb1, 0xfd, 0xe1, 0x37, 0x00, 0x00, 0xff, 0xff, 0x9a,
	0x67, 0x33, 0x15, 0x32, 0x01, 0x00, 0x00,
}
 07070100000057000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000002300000000cilium-proxy-20200109/go/envoy/api    07070100000058000041ED000003E800000064000000095E17A24700000000000000000000000000000000000000000000002600000000cilium-proxy-20200109/go/envoy/api/v2 07070100000059000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000002B00000000cilium-proxy-20200109/go/envoy/api/v2/auth    0707010000005A000081A4000003E800000064000000015E17A2470000D692000000000000000000000000000000000000003600000000cilium-proxy-20200109/go/envoy/api/v2/auth/cert.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/auth/cert.proto

package envoy_api_v2_auth

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	_struct "github.com/golang/protobuf/ptypes/struct"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type TlsParameters_TlsProtocol int32

const (
	// Envoy will choose the optimal TLS version.
	TlsParameters_TLS_AUTO TlsParameters_TlsProtocol = 0
	// TLS 1.0
	TlsParameters_TLSv1_0 TlsParameters_TlsProtocol = 1
	// TLS 1.1
	TlsParameters_TLSv1_1 TlsParameters_TlsProtocol = 2
	// TLS 1.2
	TlsParameters_TLSv1_2 TlsParameters_TlsProtocol = 3
	// TLS 1.3
	TlsParameters_TLSv1_3 TlsParameters_TlsProtocol = 4
)

var TlsParameters_TlsProtocol_name = map[int32]string{
	0: "TLS_AUTO",
	1: "TLSv1_0",
	2: "TLSv1_1",
	3: "TLSv1_2",
	4: "TLSv1_3",
}

var TlsParameters_TlsProtocol_value = map[string]int32{
	"TLS_AUTO": 0,
	"TLSv1_0":  1,
	"TLSv1_1":  2,
	"TLSv1_2":  3,
	"TLSv1_3":  4,
}

func (x TlsParameters_TlsProtocol) String() string {
	return proto.EnumName(TlsParameters_TlsProtocol_name, int32(x))
}

func (TlsParameters_TlsProtocol) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_0c3851c0865b2745, []int{0, 0}
}

type TlsParameters struct {
	// Minimum TLS protocol version. By default, it's ``TLSv1_0``.
	TlsMinimumProtocolVersion TlsParameters_TlsProtocol `protobuf:"varint,1,opt,name=tls_minimum_protocol_version,json=tlsMinimumProtocolVersion,proto3,enum=envoy.api.v2.auth.TlsParameters_TlsProtocol" json:"tls_minimum_protocol_version,omitempty"`
	// Maximum TLS protocol version. By default, it's ``TLSv1_3`` for servers in non-FIPS builds, and
	// ``TLSv1_2`` for clients and for servers using :ref:`BoringSSL FIPS <arch_overview_ssl_fips>`.
	TlsMaximumProtocolVersion TlsParameters_TlsProtocol `protobuf:"varint,2,opt,name=tls_maximum_protocol_version,json=tlsMaximumProtocolVersion,proto3,enum=envoy.api.v2.auth.TlsParameters_TlsProtocol" json:"tls_maximum_protocol_version,omitempty"`
	// If specified, the TLS listener will only support the specified `cipher list
	// <https://commondatastorage.googleapis.com/chromium-boringssl-docs/ssl.h.html#Cipher-suite-configuration>`_
	// when negotiating TLS 1.0-1.2 (this setting has no effect when negotiating TLS 1.3). If not
	// specified, the default list will be used.
	//
	// In non-FIPS builds, the default cipher list is:
	//
	// .. code-block:: none
	//
	//   [ECDHE-ECDSA-AES128-GCM-SHA256|ECDHE-ECDSA-CHACHA20-POLY1305]
	//   [ECDHE-RSA-AES128-GCM-SHA256|ECDHE-RSA-CHACHA20-POLY1305]
	//   ECDHE-ECDSA-AES128-SHA
	//   ECDHE-RSA-AES128-SHA
	//   AES128-GCM-SHA256
	//   AES128-SHA
	//   ECDHE-ECDSA-AES256-GCM-SHA384
	//   ECDHE-RSA-AES256-GCM-SHA384
	//   ECDHE-ECDSA-AES256-SHA
	//   ECDHE-RSA-AES256-SHA
	//   AES256-GCM-SHA384
	//   AES256-SHA
	//
	// In builds using :ref:`BoringSSL FIPS <arch_overview_ssl_fips>`, the default cipher list is:
	//
	// .. code-block:: none
	//
	//   ECDHE-ECDSA-AES128-GCM-SHA256
	//   ECDHE-RSA-AES128-GCM-SHA256
	//   ECDHE-ECDSA-AES128-SHA
	//   ECDHE-RSA-AES128-SHA
	//   AES128-GCM-SHA256
	//   AES128-SHA
	//   ECDHE-ECDSA-AES256-GCM-SHA384
	//   ECDHE-RSA-AES256-GCM-SHA384
	//   ECDHE-ECDSA-AES256-SHA
	//   ECDHE-RSA-AES256-SHA
	//   AES256-GCM-SHA384
	//   AES256-SHA
	CipherSuites []string `protobuf:"bytes,3,rep,name=cipher_suites,json=cipherSuites,proto3" json:"cipher_suites,omitempty"`
	// If specified, the TLS connection will only support the specified ECDH
	// curves. If not specified, the default curves will be used.
	//
	// In non-FIPS builds, the default curves are:
	//
	// .. code-block:: none
	//
	//   X25519
	//   P-256
	//
	// In builds using :ref:`BoringSSL FIPS <arch_overview_ssl_fips>`, the default curve is:
	//
	// .. code-block:: none
	//
	//   P-256
	EcdhCurves           []string `protobuf:"bytes,4,rep,name=ecdh_curves,json=ecdhCurves,proto3" json:"ecdh_curves,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *TlsParameters) Reset()         { *m = TlsParameters{} }
func (m *TlsParameters) String() string { return proto.CompactTextString(m) }
func (*TlsParameters) ProtoMessage()    {}
func (*TlsParameters) Descriptor() ([]byte, []int) {
	return fileDescriptor_0c3851c0865b2745, []int{0}
}

func (m *TlsParameters) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TlsParameters.Unmarshal(m, b)
}
func (m *TlsParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TlsParameters.Marshal(b, m, deterministic)
}
func (m *TlsParameters) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TlsParameters.Merge(m, src)
}
func (m *TlsParameters) XXX_Size() int {
	return xxx_messageInfo_TlsParameters.Size(m)
}
func (m *TlsParameters) XXX_DiscardUnknown() {
	xxx_messageInfo_TlsParameters.DiscardUnknown(m)
}

var xxx_messageInfo_TlsParameters proto.InternalMessageInfo

func (m *TlsParameters) GetTlsMinimumProtocolVersion() TlsParameters_TlsProtocol {
	if m != nil {
		return m.TlsMinimumProtocolVersion
	}
	return TlsParameters_TLS_AUTO
}

func (m *TlsParameters) GetTlsMaximumProtocolVersion() TlsParameters_TlsProtocol {
	if m != nil {
		return m.TlsMaximumProtocolVersion
	}
	return TlsParameters_TLS_AUTO
}

func (m *TlsParameters) GetCipherSuites() []string {
	if m != nil {
		return m.CipherSuites
	}
	return nil
}

func (m *TlsParameters) GetEcdhCurves() []string {
	if m != nil {
		return m.EcdhCurves
	}
	return nil
}

// BoringSSL private key method configuration. The private key methods are used for external
// (potentially asynchronous) signing and decryption operations. Some use cases for private key
// methods would be TPM support and TLS acceleration.
type PrivateKeyProvider struct {
	// Private key method provider name. The name must match a
	// supported private key method provider type.
	ProviderName string `protobuf:"bytes,1,opt,name=provider_name,json=providerName,proto3" json:"provider_name,omitempty"`
	// Private key method provider specific configuration.
	//
	// Types that are valid to be assigned to ConfigType:
	//	*PrivateKeyProvider_Config
	//	*PrivateKeyProvider_TypedConfig
	ConfigType           isPrivateKeyProvider_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
	XXX_unrecognized     []byte                          `json:"-"`
	XXX_sizecache        int32                           `json:"-"`
}

func (m *PrivateKeyProvider) Reset()         { *m = PrivateKeyProvider{} }
func (m *PrivateKeyProvider) String() string { return proto.CompactTextString(m) }
func (*PrivateKeyProvider) ProtoMessage()    {}
func (*PrivateKeyProvider) Descriptor() ([]byte, []int) {
	return fileDescriptor_0c3851c0865b2745, []int{1}
}

func (m *PrivateKeyProvider) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_PrivateKeyProvider.Unmarshal(m, b)
}
func (m *PrivateKeyProvider) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_PrivateKeyProvider.Marshal(b, m, deterministic)
}
func (m *PrivateKeyProvider) XXX_Merge(src proto.Message) {
	xxx_messageInfo_PrivateKeyProvider.Merge(m, src)
}
func (m *PrivateKeyProvider) XXX_Size() int {
	return xxx_messageInfo_PrivateKeyProvider.Size(m)
}
func (m *PrivateKeyProvider) XXX_DiscardUnknown() {
	xxx_messageInfo_PrivateKeyProvider.DiscardUnknown(m)
}

var xxx_messageInfo_PrivateKeyProvider proto.InternalMessageInfo

func (m *PrivateKeyProvider) GetProviderName() string {
	if m != nil {
		return m.ProviderName
	}
	return ""
}

type isPrivateKeyProvider_ConfigType interface {
	isPrivateKeyProvider_ConfigType()
}

type PrivateKeyProvider_Config struct {
	Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"`
}

type PrivateKeyProvider_TypedConfig struct {
	TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*PrivateKeyProvider_Config) isPrivateKeyProvider_ConfigType() {}

func (*PrivateKeyProvider_TypedConfig) isPrivateKeyProvider_ConfigType() {}

func (m *PrivateKeyProvider) GetConfigType() isPrivateKeyProvider_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

func (m *PrivateKeyProvider) GetConfig() *_struct.Struct {
	if x, ok := m.GetConfigType().(*PrivateKeyProvider_Config); ok {
		return x.Config
	}
	return nil
}

func (m *PrivateKeyProvider) GetTypedConfig() *any.Any {
	if x, ok := m.GetConfigType().(*PrivateKeyProvider_TypedConfig); ok {
		return x.TypedConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*PrivateKeyProvider) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*PrivateKeyProvider_Config)(nil),
		(*PrivateKeyProvider_TypedConfig)(nil),
	}
}

// [#next-free-field: 7]
type TlsCertificate struct {
	// The TLS certificate chain.
	CertificateChain *core.DataSource `protobuf:"bytes,1,opt,name=certificate_chain,json=certificateChain,proto3" json:"certificate_chain,omitempty"`
	// The TLS private key.
	PrivateKey *core.DataSource `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"`
	// BoringSSL private key method provider. This is an alternative to :ref:`private_key
	// <envoy_api_field_auth.TlsCertificate.private_key>` field. This can't be
	// marked as ``oneof`` due to API compatibility reasons. Setting both :ref:`private_key
	// <envoy_api_field_auth.TlsCertificate.private_key>` and
	// :ref:`private_key_provider
	// <envoy_api_field_auth.TlsCertificate.private_key_provider>` fields will result in an
	// error.
	PrivateKeyProvider *PrivateKeyProvider `protobuf:"bytes,6,opt,name=private_key_provider,json=privateKeyProvider,proto3" json:"private_key_provider,omitempty"`
	// The password to decrypt the TLS private key. If this field is not set, it is assumed that the
	// TLS private key is not password encrypted.
	Password *core.DataSource `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"`
	// [#not-implemented-hide:]
	OcspStaple *core.DataSource `protobuf:"bytes,4,opt,name=ocsp_staple,json=ocspStaple,proto3" json:"ocsp_staple,omitempty"`
	// [#not-implemented-hide:]
	SignedCertificateTimestamp []*core.DataSource `protobuf:"bytes,5,rep,name=signed_certificate_timestamp,json=signedCertificateTimestamp,proto3" json:"signed_certificate_timestamp,omitempty"`
	XXX_NoUnkeyedLiteral       struct{}           `json:"-"`
	XXX_unrecognized           []byte             `json:"-"`
	XXX_sizecache              int32              `json:"-"`
}

func (m *TlsCertificate) Reset()         { *m = TlsCertificate{} }
func (m *TlsCertificate) String() string { return proto.CompactTextString(m) }
func (*TlsCertificate) ProtoMessage()    {}
func (*TlsCertificate) Descriptor() ([]byte, []int) {
	return fileDescriptor_0c3851c0865b2745, []int{2}
}

func (m *TlsCertificate) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TlsCertificate.Unmarshal(m, b)
}
func (m *TlsCertificate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TlsCertificate.Marshal(b, m, deterministic)
}
func (m *TlsCertificate) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TlsCertificate.Merge(m, src)
}
func (m *TlsCertificate) XXX_Size() int {
	return xxx_messageInfo_TlsCertificate.Size(m)
}
func (m *TlsCertificate) XXX_DiscardUnknown() {
	xxx_messageInfo_TlsCertificate.DiscardUnknown(m)
}

var xxx_messageInfo_TlsCertificate proto.InternalMessageInfo

func (m *TlsCertificate) GetCertificateChain() *core.DataSource {
	if m != nil {
		return m.CertificateChain
	}
	return nil
}

func (m *TlsCertificate) GetPrivateKey() *core.DataSource {
	if m != nil {
		return m.PrivateKey
	}
	return nil
}

func (m *TlsCertificate) GetPrivateKeyProvider() *PrivateKeyProvider {
	if m != nil {
		return m.PrivateKeyProvider
	}
	return nil
}

func (m *TlsCertificate) GetPassword() *core.DataSource {
	if m != nil {
		return m.Password
	}
	return nil
}

func (m *TlsCertificate) GetOcspStaple() *core.DataSource {
	if m != nil {
		return m.OcspStaple
	}
	return nil
}

func (m *TlsCertificate) GetSignedCertificateTimestamp() []*core.DataSource {
	if m != nil {
		return m.SignedCertificateTimestamp
	}
	return nil
}

type TlsSessionTicketKeys struct {
	// Keys for encrypting and decrypting TLS session tickets. The
	// first key in the array contains the key to encrypt all new sessions created by this context.
	// All keys are candidates for decrypting received tickets. This allows for easy rotation of keys
	// by, for example, putting the new key first, and the previous key second.
	//
	// If :ref:`session_ticket_keys <envoy_api_field_auth.DownstreamTlsContext.session_ticket_keys>`
	// is not specified, the TLS library will still support resuming sessions via tickets, but it will
	// use an internally-generated and managed key, so sessions cannot be resumed across hot restarts
	// or on different hosts.
	//
	// Each key must contain exactly 80 bytes of cryptographically-secure random data. For
	// example, the output of ``openssl rand 80``.
	//
	// .. attention::
	//
	//   Using this feature has serious security considerations and risks. Improper handling of keys
	//   may result in loss of secrecy in connections, even if ciphers supporting perfect forward
	//   secrecy are used. See https://www.imperialviolet.org/2013/06/27/botchingpfs.html for some
	//   discussion. To minimize the risk, you must:
	//
	//   * Keep the session ticket keys at least as secure as your TLS certificate private keys
	//   * Rotate session ticket keys at least daily, and preferably hourly
	//   * Always generate keys using a cryptographically-secure random data source
	Keys                 []*core.DataSource `protobuf:"bytes,1,rep,name=keys,proto3" json:"keys,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *TlsSessionTicketKeys) Reset()         { *m = TlsSessionTicketKeys{} }
func (m *TlsSessionTicketKeys) String() string { return proto.CompactTextString(m) }
func (*TlsSessionTicketKeys) ProtoMessage()    {}
func (*TlsSessionTicketKeys) Descriptor() ([]byte, []int) {
	return fileDescriptor_0c3851c0865b2745, []int{3}
}

func (m *TlsSessionTicketKeys) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TlsSessionTicketKeys.Unmarshal(m, b)
}
func (m *TlsSessionTicketKeys) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TlsSessionTicketKeys.Marshal(b, m, deterministic)
}
func (m *TlsSessionTicketKeys) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TlsSessionTicketKeys.Merge(m, src)
}
func (m *TlsSessionTicketKeys) XXX_Size() int {
	return xxx_messageInfo_TlsSessionTicketKeys.Size(m)
}
func (m *TlsSessionTicketKeys) XXX_DiscardUnknown() {
	xxx_messageInfo_TlsSessionTicketKeys.DiscardUnknown(m)
}

var xxx_messageInfo_TlsSessionTicketKeys proto.InternalMessageInfo

func (m *TlsSessionTicketKeys) GetKeys() []*core.DataSource {
	if m != nil {
		return m.Keys
	}
	return nil
}

// [#next-free-field: 9]
type CertificateValidationContext struct {
	// TLS certificate data containing certificate authority certificates to use in verifying
	// a presented peer certificate (e.g. server certificate for clusters or client certificate
	// for listeners). If not specified and a peer certificate is presented it will not be
	// verified. By default, a client certificate is optional, unless one of the additional
	// options (:ref:`require_client_certificate
	// <envoy_api_field_auth.DownstreamTlsContext.require_client_certificate>`,
	// :ref:`verify_certificate_spki
	// <envoy_api_field_auth.CertificateValidationContext.verify_certificate_spki>`,
	// :ref:`verify_certificate_hash
	// <envoy_api_field_auth.CertificateValidationContext.verify_certificate_hash>`, or
	// :ref:`verify_subject_alt_name
	// <envoy_api_field_auth.CertificateValidationContext.verify_subject_alt_name>`) is also
	// specified.
	//
	// It can optionally contain certificate revocation lists, in which case Envoy will verify
	// that the presented peer certificate has not been revoked by one of the included CRLs.
	//
	// See :ref:`the TLS overview <arch_overview_ssl_enabling_verification>` for a list of common
	// system CA locations.
	TrustedCa *core.DataSource `protobuf:"bytes,1,opt,name=trusted_ca,json=trustedCa,proto3" json:"trusted_ca,omitempty"`
	// An optional list of base64-encoded SHA-256 hashes. If specified, Envoy will verify that the
	// SHA-256 of the DER-encoded Subject Public Key Information (SPKI) of the presented certificate
	// matches one of the specified values.
	//
	// A base64-encoded SHA-256 of the Subject Public Key Information (SPKI) of the certificate
	// can be generated with the following command:
	//
	// .. code-block:: bash
	//
	//   $ openssl x509 -in path/to/client.crt -noout -pubkey
	//     | openssl pkey -pubin -outform DER
	//     | openssl dgst -sha256 -binary
	//     | openssl enc -base64
	//   NvqYIYSbgK2vCJpQhObf77vv+bQWtc5ek5RIOwPiC9A=
	//
	// This is the format used in HTTP Public Key Pinning.
	//
	// When both:
	// :ref:`verify_certificate_hash
	// <envoy_api_field_auth.CertificateValidationContext.verify_certificate_hash>` and
	// :ref:`verify_certificate_spki
	// <envoy_api_field_auth.CertificateValidationContext.verify_certificate_spki>` are specified,
	// a hash matching value from either of the lists will result in the certificate being accepted.
	//
	// .. attention::
	//
	//   This option is preferred over :ref:`verify_certificate_hash
	//   <envoy_api_field_auth.CertificateValidationContext.verify_certificate_hash>`,
	//   because SPKI is tied to a private key, so it doesn't change when the certificate
	//   is renewed using the same private key.
	VerifyCertificateSpki []string `protobuf:"bytes,3,rep,name=verify_certificate_spki,json=verifyCertificateSpki,proto3" json:"verify_certificate_spki,omitempty"`
	// An optional list of hex-encoded SHA-256 hashes. If specified, Envoy will verify that
	// the SHA-256 of the DER-encoded presented certificate matches one of the specified values.
	//
	// A hex-encoded SHA-256 of the certificate can be generated with the following command:
	//
	// .. code-block:: bash
	//
	//   $ openssl x509 -in path/to/client.crt -outform DER | openssl dgst -sha256 | cut -d" " -f2
	//   df6ff72fe9116521268f6f2dd4966f51df479883fe7037b39f75916ac3049d1a
	//
	// A long hex-encoded and colon-separated SHA-256 (a.k.a. "fingerprint") of the certificate
	// can be generated with the following command:
	//
	// .. code-block:: bash
	//
	//   $ openssl x509 -in path/to/client.crt -noout -fingerprint -sha256 | cut -d"=" -f2
	//   DF:6F:F7:2F:E9:11:65:21:26:8F:6F:2D:D4:96:6F:51:DF:47:98:83:FE:70:37:B3:9F:75:91:6A:C3:04:9D:1A
	//
	// Both of those formats are acceptable.
	//
	// When both:
	// :ref:`verify_certificate_hash
	// <envoy_api_field_auth.CertificateValidationContext.verify_certificate_hash>` and
	// :ref:`verify_certificate_spki
	// <envoy_api_field_auth.CertificateValidationContext.verify_certificate_spki>` are specified,
	// a hash matching value from either of the lists will result in the certificate being accepted.
	VerifyCertificateHash []string `protobuf:"bytes,2,rep,name=verify_certificate_hash,json=verifyCertificateHash,proto3" json:"verify_certificate_hash,omitempty"`
	// An optional list of Subject Alternative Names. If specified, Envoy will verify that the
	// Subject Alternative Name of the presented certificate matches one of the specified values.
	//
	// .. attention::
	//
	//   Subject Alternative Names are easily spoofable and verifying only them is insecure,
	//   therefore this option must be used together with :ref:`trusted_ca
	//   <envoy_api_field_auth.CertificateValidationContext.trusted_ca>`.
	VerifySubjectAltName []string `protobuf:"bytes,4,rep,name=verify_subject_alt_name,json=verifySubjectAltName,proto3" json:"verify_subject_alt_name,omitempty"`
	// [#not-implemented-hide:] Must present a signed time-stamped OCSP response.
	RequireOcspStaple *wrappers.BoolValue `protobuf:"bytes,5,opt,name=require_ocsp_staple,json=requireOcspStaple,proto3" json:"require_ocsp_staple,omitempty"`
	// [#not-implemented-hide:] Must present signed certificate time-stamp.
	RequireSignedCertificateTimestamp *wrappers.BoolValue `protobuf:"bytes,6,opt,name=require_signed_certificate_timestamp,json=requireSignedCertificateTimestamp,proto3" json:"require_signed_certificate_timestamp,omitempty"`
	// An optional `certificate revocation list
	// <https://en.wikipedia.org/wiki/Certificate_revocation_list>`_
	// (in PEM format). If specified, Envoy will verify that the presented peer
	// certificate has not been revoked by this CRL. If this DataSource contains
	// multiple CRLs, all of them will be used.
	Crl *core.DataSource `protobuf:"bytes,7,opt,name=crl,proto3" json:"crl,omitempty"`
	// If specified, Envoy will not reject expired certificates.
	AllowExpiredCertificate bool     `protobuf:"varint,8,opt,name=allow_expired_certificate,json=allowExpiredCertificate,proto3" json:"allow_expired_certificate,omitempty"`
	XXX_NoUnkeyedLiteral    struct{} `json:"-"`
	XXX_unrecognized        []byte   `json:"-"`
	XXX_sizecache           int32    `json:"-"`
}

func (m *CertificateValidationContext) Reset()         { *m = CertificateValidationContext{} }
func (m *CertificateValidationContext) String() string { return proto.CompactTextString(m) }
func (*CertificateValidationContext) ProtoMessage()    {}
func (*CertificateValidationContext) Descriptor() ([]byte, []int) {
	return fileDescriptor_0c3851c0865b2745, []int{4}
}

func (m *CertificateValidationContext) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_CertificateValidationContext.Unmarshal(m, b)
}
func (m *CertificateValidationContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_CertificateValidationContext.Marshal(b, m, deterministic)
}
func (m *CertificateValidationContext) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CertificateValidationContext.Merge(m, src)
}
func (m *CertificateValidationContext) XXX_Size() int {
	return xxx_messageInfo_CertificateValidationContext.Size(m)
}
func (m *CertificateValidationContext) XXX_DiscardUnknown() {
	xxx_messageInfo_CertificateValidationContext.DiscardUnknown(m)
}

var xxx_messageInfo_CertificateValidationContext proto.InternalMessageInfo

func (m *CertificateValidationContext) GetTrustedCa() *core.DataSource {
	if m != nil {
		return m.TrustedCa
	}
	return nil
}

func (m *CertificateValidationContext) GetVerifyCertificateSpki() []string {
	if m != nil {
		return m.VerifyCertificateSpki
	}
	return nil
}

func (m *CertificateValidationContext) GetVerifyCertificateHash() []string {
	if m != nil {
		return m.VerifyCertificateHash
	}
	return nil
}

func (m *CertificateValidationContext) GetVerifySubjectAltName() []string {
	if m != nil {
		return m.VerifySubjectAltName
	}
	return nil
}

func (m *CertificateValidationContext) GetRequireOcspStaple() *wrappers.BoolValue {
	if m != nil {
		return m.RequireOcspStaple
	}
	return nil
}

func (m *CertificateValidationContext) GetRequireSignedCertificateTimestamp() *wrappers.BoolValue {
	if m != nil {
		return m.RequireSignedCertificateTimestamp
	}
	return nil
}

func (m *CertificateValidationContext) GetCrl() *core.DataSource {
	if m != nil {
		return m.Crl
	}
	return nil
}

func (m *CertificateValidationContext) GetAllowExpiredCertificate() bool {
	if m != nil {
		return m.AllowExpiredCertificate
	}
	return false
}

// TLS context shared by both client and server TLS contexts.
// [#next-free-field: 9]
type CommonTlsContext struct {
	// TLS protocol versions, cipher suites etc.
	TlsParams *TlsParameters `protobuf:"bytes,1,opt,name=tls_params,json=tlsParams,proto3" json:"tls_params,omitempty"`
	// :ref:`Multiple TLS certificates <arch_overview_ssl_cert_select>` can be associated with the
	// same context to allow both RSA and ECDSA certificates.
	//
	// Only a single TLS certificate is supported in client contexts. In server contexts, the first
	// RSA certificate is used for clients that only support RSA and the first ECDSA certificate is
	// used for clients that support ECDSA.
	TlsCertificates []*TlsCertificate `protobuf:"bytes,2,rep,name=tls_certificates,json=tlsCertificates,proto3" json:"tls_certificates,omitempty"`
	// Configs for fetching TLS certificates via SDS API.
	TlsCertificateSdsSecretConfigs []*SdsSecretConfig `protobuf:"bytes,6,rep,name=tls_certificate_sds_secret_configs,json=tlsCertificateSdsSecretConfigs,proto3" json:"tls_certificate_sds_secret_configs,omitempty"`
	// Types that are valid to be assigned to ValidationContextType:
	//	*CommonTlsContext_ValidationContext
	//	*CommonTlsContext_ValidationContextSdsSecretConfig
	//	*CommonTlsContext_CombinedValidationContext
	ValidationContextType isCommonTlsContext_ValidationContextType `protobuf_oneof:"validation_context_type"`
	// Supplies the list of ALPN protocols that the listener should expose. In
	// practice this is likely to be set to one of two values (see the
	// :ref:`codec_type
	// <envoy_api_field_config.filter.network.http_connection_manager.v2.HttpConnectionManager.codec_type>`
	// parameter in the HTTP connection manager for more information):
	//
	// * "h2,http/1.1" If the listener is going to support both HTTP/2 and HTTP/1.1.
	// * "http/1.1" If the listener is only going to support HTTP/1.1.
	//
	// There is no default for this parameter. If empty, Envoy will not expose ALPN.
	AlpnProtocols        []string `protobuf:"bytes,4,rep,name=alpn_protocols,json=alpnProtocols,proto3" json:"alpn_protocols,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *CommonTlsContext) Reset()         { *m = CommonTlsContext{} }
func (m *CommonTlsContext) String() string { return proto.CompactTextString(m) }
func (*CommonTlsContext) ProtoMessage()    {}
func (*CommonTlsContext) Descriptor() ([]byte, []int) {
	return fileDescriptor_0c3851c0865b2745, []int{5}
}

func (m *CommonTlsContext) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_CommonTlsContext.Unmarshal(m, b)
}
func (m *CommonTlsContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_CommonTlsContext.Marshal(b, m, deterministic)
}
func (m *CommonTlsContext) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CommonTlsContext.Merge(m, src)
}
func (m *CommonTlsContext) XXX_Size() int {
	return xxx_messageInfo_CommonTlsContext.Size(m)
}
func (m *CommonTlsContext) XXX_DiscardUnknown() {
	xxx_messageInfo_CommonTlsContext.DiscardUnknown(m)
}

var xxx_messageInfo_CommonTlsContext proto.InternalMessageInfo

func (m *CommonTlsContext) GetTlsParams() *TlsParameters {
	if m != nil {
		return m.TlsParams
	}
	return nil
}

func (m *CommonTlsContext) GetTlsCertificates() []*TlsCertificate {
	if m != nil {
		return m.TlsCertificates
	}
	return nil
}

func (m *CommonTlsContext) GetTlsCertificateSdsSecretConfigs() []*SdsSecretConfig {
	if m != nil {
		return m.TlsCertificateSdsSecretConfigs
	}
	return nil
}

type isCommonTlsContext_ValidationContextType interface {
	isCommonTlsContext_ValidationContextType()
}

type CommonTlsContext_ValidationContext struct {
	ValidationContext *CertificateValidationContext `protobuf:"bytes,3,opt,name=validation_context,json=validationContext,proto3,oneof"`
}

type CommonTlsContext_ValidationContextSdsSecretConfig struct {
	ValidationContextSdsSecretConfig *SdsSecretConfig `protobuf:"bytes,7,opt,name=validation_context_sds_secret_config,json=validationContextSdsSecretConfig,proto3,oneof"`
}

type CommonTlsContext_CombinedValidationContext struct {
	CombinedValidationContext *CommonTlsContext_CombinedCertificateValidationContext `protobuf:"bytes,8,opt,name=combined_validation_context,json=combinedValidationContext,proto3,oneof"`
}

func (*CommonTlsContext_ValidationContext) isCommonTlsContext_ValidationContextType() {}

func (*CommonTlsContext_ValidationContextSdsSecretConfig) isCommonTlsContext_ValidationContextType() {}

func (*CommonTlsContext_CombinedValidationContext) isCommonTlsContext_ValidationContextType() {}

func (m *CommonTlsContext) GetValidationContextType() isCommonTlsContext_ValidationContextType {
	if m != nil {
		return m.ValidationContextType
	}
	return nil
}

func (m *CommonTlsContext) GetValidationContext() *CertificateValidationContext {
	if x, ok := m.GetValidationContextType().(*CommonTlsContext_ValidationContext); ok {
		return x.ValidationContext
	}
	return nil
}

func (m *CommonTlsContext) GetValidationContextSdsSecretConfig() *SdsSecretConfig {
	if x, ok := m.GetValidationContextType().(*CommonTlsContext_ValidationContextSdsSecretConfig); ok {
		return x.ValidationContextSdsSecretConfig
	}
	return nil
}

func (m *CommonTlsContext) GetCombinedValidationContext() *CommonTlsContext_CombinedCertificateValidationContext {
	if x, ok := m.GetValidationContextType().(*CommonTlsContext_CombinedValidationContext); ok {
		return x.CombinedValidationContext
	}
	return nil
}

func (m *CommonTlsContext) GetAlpnProtocols() []string {
	if m != nil {
		return m.AlpnProtocols
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*CommonTlsContext) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*CommonTlsContext_ValidationContext)(nil),
		(*CommonTlsContext_ValidationContextSdsSecretConfig)(nil),
		(*CommonTlsContext_CombinedValidationContext)(nil),
	}
}

type CommonTlsContext_CombinedCertificateValidationContext struct {
	// How to validate peer certificates.
	DefaultValidationContext *CertificateValidationContext `protobuf:"bytes,1,opt,name=default_validation_context,json=defaultValidationContext,proto3" json:"default_validation_context,omitempty"`
	// Config for fetching validation context via SDS API.
	ValidationContextSdsSecretConfig *SdsSecretConfig `protobuf:"bytes,2,opt,name=validation_context_sds_secret_config,json=validationContextSdsSecretConfig,proto3" json:"validation_context_sds_secret_config,omitempty"`
	XXX_NoUnkeyedLiteral             struct{}         `json:"-"`
	XXX_unrecognized                 []byte           `json:"-"`
	XXX_sizecache                    int32            `json:"-"`
}

func (m *CommonTlsContext_CombinedCertificateValidationContext) Reset() {
	*m = CommonTlsContext_CombinedCertificateValidationContext{}
}
func (m *CommonTlsContext_CombinedCertificateValidationContext) String() string {
	return proto.CompactTextString(m)
}
func (*CommonTlsContext_CombinedCertificateValidationContext) ProtoMessage() {}
func (*CommonTlsContext_CombinedCertificateValidationContext) Descriptor() ([]byte, []int) {
	return fileDescriptor_0c3851c0865b2745, []int{5, 0}
}

func (m *CommonTlsContext_CombinedCertificateValidationContext) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_CommonTlsContext_CombinedCertificateValidationContext.Unmarshal(m, b)
}
func (m *CommonTlsContext_CombinedCertificateValidationContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_CommonTlsContext_CombinedCertificateValidationContext.Marshal(b, m, deterministic)
}
func (m *CommonTlsContext_CombinedCertificateValidationContext) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CommonTlsContext_CombinedCertificateValidationContext.Merge(m, src)
}
func (m *CommonTlsContext_CombinedCertificateValidationContext) XXX_Size() int {
	return xxx_messageInfo_CommonTlsContext_CombinedCertificateValidationContext.Size(m)
}
func (m *CommonTlsContext_CombinedCertificateValidationContext) XXX_DiscardUnknown() {
	xxx_messageInfo_CommonTlsContext_CombinedCertificateValidationContext.DiscardUnknown(m)
}

var xxx_messageInfo_CommonTlsContext_CombinedCertificateValidationContext proto.InternalMessageInfo

func (m *CommonTlsContext_CombinedCertificateValidationContext) GetDefaultValidationContext() *CertificateValidationContext {
	if m != nil {
		return m.DefaultValidationContext
	}
	return nil
}

func (m *CommonTlsContext_CombinedCertificateValidationContext) GetValidationContextSdsSecretConfig() *SdsSecretConfig {
	if m != nil {
		return m.ValidationContextSdsSecretConfig
	}
	return nil
}

type UpstreamTlsContext struct {
	// Common TLS context settings.
	//
	// .. attention::
	//
	//   Server certificate verification is not enabled by default. Configure
	//   :ref:`trusted_ca<envoy_api_field_auth.CertificateValidationContext.trusted_ca>` to enable
	//   verification.
	CommonTlsContext *CommonTlsContext `protobuf:"bytes,1,opt,name=common_tls_context,json=commonTlsContext,proto3" json:"common_tls_context,omitempty"`
	// SNI string to use when creating TLS backend connections.
	Sni string `protobuf:"bytes,2,opt,name=sni,proto3" json:"sni,omitempty"`
	// If true, server-initiated TLS renegotiation will be allowed.
	//
	// .. attention::
	//
	//   TLS renegotiation is considered insecure and shouldn't be used unless absolutely necessary.
	AllowRenegotiation bool `protobuf:"varint,3,opt,name=allow_renegotiation,json=allowRenegotiation,proto3" json:"allow_renegotiation,omitempty"`
	// Maximum number of session keys (Pre-Shared Keys for TLSv1.3+, Session IDs and Session Tickets
	// for TLSv1.2 and older) to store for the purpose of session resumption.
	//
	// Defaults to 1, setting this to 0 disables session resumption.
	MaxSessionKeys       *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=max_session_keys,json=maxSessionKeys,proto3" json:"max_session_keys,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *UpstreamTlsContext) Reset()         { *m = UpstreamTlsContext{} }
func (m *UpstreamTlsContext) String() string { return proto.CompactTextString(m) }
func (*UpstreamTlsContext) ProtoMessage()    {}
func (*UpstreamTlsContext) Descriptor() ([]byte, []int) {
	return fileDescriptor_0c3851c0865b2745, []int{6}
}

func (m *UpstreamTlsContext) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_UpstreamTlsContext.Unmarshal(m, b)
}
func (m *UpstreamTlsContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_UpstreamTlsContext.Marshal(b, m, deterministic)
}
func (m *UpstreamTlsContext) XXX_Merge(src proto.Message) {
	xxx_messageInfo_UpstreamTlsContext.Merge(m, src)
}
func (m *UpstreamTlsContext) XXX_Size() int {
	return xxx_messageInfo_UpstreamTlsContext.Size(m)
}
func (m *UpstreamTlsContext) XXX_DiscardUnknown() {
	xxx_messageInfo_UpstreamTlsContext.DiscardUnknown(m)
}

var xxx_messageInfo_UpstreamTlsContext proto.InternalMessageInfo

func (m *UpstreamTlsContext) GetCommonTlsContext() *CommonTlsContext {
	if m != nil {
		return m.CommonTlsContext
	}
	return nil
}

func (m *UpstreamTlsContext) GetSni() string {
	if m != nil {
		return m.Sni
	}
	return ""
}

func (m *UpstreamTlsContext) GetAllowRenegotiation() bool {
	if m != nil {
		return m.AllowRenegotiation
	}
	return false
}

func (m *UpstreamTlsContext) GetMaxSessionKeys() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxSessionKeys
	}
	return nil
}

// [#next-free-field: 6]
type DownstreamTlsContext struct {
	// Common TLS context settings.
	CommonTlsContext *CommonTlsContext `protobuf:"bytes,1,opt,name=common_tls_context,json=commonTlsContext,proto3" json:"common_tls_context,omitempty"`
	// If specified, Envoy will reject connections without a valid client
	// certificate.
	RequireClientCertificate *wrappers.BoolValue `protobuf:"bytes,2,opt,name=require_client_certificate,json=requireClientCertificate,proto3" json:"require_client_certificate,omitempty"`
	// If specified, Envoy will reject connections without a valid and matching SNI.
	// [#not-implemented-hide:]
	RequireSni *wrappers.BoolValue `protobuf:"bytes,3,opt,name=require_sni,json=requireSni,proto3" json:"require_sni,omitempty"`
	// Types that are valid to be assigned to SessionTicketKeysType:
	//	*DownstreamTlsContext_SessionTicketKeys
	//	*DownstreamTlsContext_SessionTicketKeysSdsSecretConfig
	SessionTicketKeysType isDownstreamTlsContext_SessionTicketKeysType `protobuf_oneof:"session_ticket_keys_type"`
	XXX_NoUnkeyedLiteral  struct{}                                     `json:"-"`
	XXX_unrecognized      []byte                                       `json:"-"`
	XXX_sizecache         int32                                        `json:"-"`
}

func (m *DownstreamTlsContext) Reset()         { *m = DownstreamTlsContext{} }
func (m *DownstreamTlsContext) String() string { return proto.CompactTextString(m) }
func (*DownstreamTlsContext) ProtoMessage()    {}
func (*DownstreamTlsContext) Descriptor() ([]byte, []int) {
	return fileDescriptor_0c3851c0865b2745, []int{7}
}

func (m *DownstreamTlsContext) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DownstreamTlsContext.Unmarshal(m, b)
}
func (m *DownstreamTlsContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DownstreamTlsContext.Marshal(b, m, deterministic)
}
func (m *DownstreamTlsContext) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DownstreamTlsContext.Merge(m, src)
}
func (m *DownstreamTlsContext) XXX_Size() int {
	return xxx_messageInfo_DownstreamTlsContext.Size(m)
}
func (m *DownstreamTlsContext) XXX_DiscardUnknown() {
	xxx_messageInfo_DownstreamTlsContext.DiscardUnknown(m)
}

var xxx_messageInfo_DownstreamTlsContext proto.InternalMessageInfo

func (m *DownstreamTlsContext) GetCommonTlsContext() *CommonTlsContext {
	if m != nil {
		return m.CommonTlsContext
	}
	return nil
}

func (m *DownstreamTlsContext) GetRequireClientCertificate() *wrappers.BoolValue {
	if m != nil {
		return m.RequireClientCertificate
	}
	return nil
}

func (m *DownstreamTlsContext) GetRequireSni() *wrappers.BoolValue {
	if m != nil {
		return m.RequireSni
	}
	return nil
}

type isDownstreamTlsContext_SessionTicketKeysType interface {
	isDownstreamTlsContext_SessionTicketKeysType()
}

type DownstreamTlsContext_SessionTicketKeys struct {
	SessionTicketKeys *TlsSessionTicketKeys `protobuf:"bytes,4,opt,name=session_ticket_keys,json=sessionTicketKeys,proto3,oneof"`
}

type DownstreamTlsContext_SessionTicketKeysSdsSecretConfig struct {
	SessionTicketKeysSdsSecretConfig *SdsSecretConfig `protobuf:"bytes,5,opt,name=session_ticket_keys_sds_secret_config,json=sessionTicketKeysSdsSecretConfig,proto3,oneof"`
}

func (*DownstreamTlsContext_SessionTicketKeys) isDownstreamTlsContext_SessionTicketKeysType() {}

func (*DownstreamTlsContext_SessionTicketKeysSdsSecretConfig) isDownstreamTlsContext_SessionTicketKeysType() {
}

func (m *DownstreamTlsContext) GetSessionTicketKeysType() isDownstreamTlsContext_SessionTicketKeysType {
	if m != nil {
		return m.SessionTicketKeysType
	}
	return nil
}

func (m *DownstreamTlsContext) GetSessionTicketKeys() *TlsSessionTicketKeys {
	if x, ok := m.GetSessionTicketKeysType().(*DownstreamTlsContext_SessionTicketKeys); ok {
		return x.SessionTicketKeys
	}
	return nil
}

func (m *DownstreamTlsContext) GetSessionTicketKeysSdsSecretConfig() *SdsSecretConfig {
	if x, ok := m.GetSessionTicketKeysType().(*DownstreamTlsContext_SessionTicketKeysSdsSecretConfig); ok {
		return x.SessionTicketKeysSdsSecretConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*DownstreamTlsContext) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*DownstreamTlsContext_SessionTicketKeys)(nil),
		(*DownstreamTlsContext_SessionTicketKeysSdsSecretConfig)(nil),
	}
}

type SdsSecretConfig struct {
	// Name (FQDN, UUID, SPKI, SHA256, etc.) by which the secret can be uniquely referred to.
	// When both name and config are specified, then secret can be fetched and/or reloaded via SDS.
	// When only name is specified, then secret will be loaded from static
	// resources.
	Name                 string             `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	SdsConfig            *core.ConfigSource `protobuf:"bytes,2,opt,name=sds_config,json=sdsConfig,proto3" json:"sds_config,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *SdsSecretConfig) Reset()         { *m = SdsSecretConfig{} }
func (m *SdsSecretConfig) String() string { return proto.CompactTextString(m) }
func (*SdsSecretConfig) ProtoMessage()    {}
func (*SdsSecretConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_0c3851c0865b2745, []int{8}
}

func (m *SdsSecretConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SdsSecretConfig.Unmarshal(m, b)
}
func (m *SdsSecretConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SdsSecretConfig.Marshal(b, m, deterministic)
}
func (m *SdsSecretConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SdsSecretConfig.Merge(m, src)
}
func (m *SdsSecretConfig) XXX_Size() int {
	return xxx_messageInfo_SdsSecretConfig.Size(m)
}
func (m *SdsSecretConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_SdsSecretConfig.DiscardUnknown(m)
}

var xxx_messageInfo_SdsSecretConfig proto.InternalMessageInfo

func (m *SdsSecretConfig) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *SdsSecretConfig) GetSdsConfig() *core.ConfigSource {
	if m != nil {
		return m.SdsConfig
	}
	return nil
}

type Secret struct {
	// Name (FQDN, UUID, SPKI, SHA256, etc.) by which the secret can be uniquely referred to.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Types that are valid to be assigned to Type:
	//	*Secret_TlsCertificate
	//	*Secret_SessionTicketKeys
	//	*Secret_ValidationContext
	Type                 isSecret_Type `protobuf_oneof:"type"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

func (m *Secret) Reset()         { *m = Secret{} }
func (m *Secret) String() string { return proto.CompactTextString(m) }
func (*Secret) ProtoMessage()    {}
func (*Secret) Descriptor() ([]byte, []int) {
	return fileDescriptor_0c3851c0865b2745, []int{9}
}

func (m *Secret) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Secret.Unmarshal(m, b)
}
func (m *Secret) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Secret.Marshal(b, m, deterministic)
}
func (m *Secret) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Secret.Merge(m, src)
}
func (m *Secret) XXX_Size() int {
	return xxx_messageInfo_Secret.Size(m)
}
func (m *Secret) XXX_DiscardUnknown() {
	xxx_messageInfo_Secret.DiscardUnknown(m)
}

var xxx_messageInfo_Secret proto.InternalMessageInfo

func (m *Secret) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isSecret_Type interface {
	isSecret_Type()
}

type Secret_TlsCertificate struct {
	TlsCertificate *TlsCertificate `protobuf:"bytes,2,opt,name=tls_certificate,json=tlsCertificate,proto3,oneof"`
}

type Secret_SessionTicketKeys struct {
	SessionTicketKeys *TlsSessionTicketKeys `protobuf:"bytes,3,opt,name=session_ticket_keys,json=sessionTicketKeys,proto3,oneof"`
}

type Secret_ValidationContext struct {
	ValidationContext *CertificateValidationContext `protobuf:"bytes,4,opt,name=validation_context,json=validationContext,proto3,oneof"`
}

func (*Secret_TlsCertificate) isSecret_Type() {}

func (*Secret_SessionTicketKeys) isSecret_Type() {}

func (*Secret_ValidationContext) isSecret_Type() {}

func (m *Secret) GetType() isSecret_Type {
	if m != nil {
		return m.Type
	}
	return nil
}

func (m *Secret) GetTlsCertificate() *TlsCertificate {
	if x, ok := m.GetType().(*Secret_TlsCertificate); ok {
		return x.TlsCertificate
	}
	return nil
}

func (m *Secret) GetSessionTicketKeys() *TlsSessionTicketKeys {
	if x, ok := m.GetType().(*Secret_SessionTicketKeys); ok {
		return x.SessionTicketKeys
	}
	return nil
}

func (m *Secret) GetValidationContext() *CertificateValidationContext {
	if x, ok := m.GetType().(*Secret_ValidationContext); ok {
		return x.ValidationContext
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Secret) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Secret_TlsCertificate)(nil),
		(*Secret_SessionTicketKeys)(nil),
		(*Secret_ValidationContext)(nil),
	}
}

func init() {
	proto.RegisterEnum("envoy.api.v2.auth.TlsParameters_TlsProtocol", TlsParameters_TlsProtocol_name, TlsParameters_TlsProtocol_value)
	proto.RegisterType((*TlsParameters)(nil), "envoy.api.v2.auth.TlsParameters")
	proto.RegisterType((*PrivateKeyProvider)(nil), "envoy.api.v2.auth.PrivateKeyProvider")
	proto.RegisterType((*TlsCertificate)(nil), "envoy.api.v2.auth.TlsCertificate")
	proto.RegisterType((*TlsSessionTicketKeys)(nil), "envoy.api.v2.auth.TlsSessionTicketKeys")
	proto.RegisterType((*CertificateValidationContext)(nil), "envoy.api.v2.auth.CertificateValidationContext")
	proto.RegisterType((*CommonTlsContext)(nil), "envoy.api.v2.auth.CommonTlsContext")
	proto.RegisterType((*CommonTlsContext_CombinedCertificateValidationContext)(nil), "envoy.api.v2.auth.CommonTlsContext.CombinedCertificateValidationContext")
	proto.RegisterType((*UpstreamTlsContext)(nil), "envoy.api.v2.auth.UpstreamTlsContext")
	proto.RegisterType((*DownstreamTlsContext)(nil), "envoy.api.v2.auth.DownstreamTlsContext")
	proto.RegisterType((*SdsSecretConfig)(nil), "envoy.api.v2.auth.SdsSecretConfig")
	proto.RegisterType((*Secret)(nil), "envoy.api.v2.auth.Secret")
}

func init() { proto.RegisterFile("envoy/api/v2/auth/cert.proto", fileDescriptor_0c3851c0865b2745) }

var fileDescriptor_0c3851c0865b2745 = []byte{
	// 1415 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xcd, 0x72, 0x1b, 0x45,
	0x10, 0xf6, 0x4a, 0xb2, 0x2c, 0xb7, 0x6c, 0x47, 0x9e, 0x98, 0xf2, 0x5a, 0x98, 0x44, 0x51, 0xe2,
	0xc2, 0x07, 0x97, 0x44, 0x94, 0xe2, 0x10, 0x42, 0x05, 0x22, 0x85, 0x94, 0x48, 0x0c, 0x31, 0x2b,
	0x25, 0xc0, 0x69, 0x19, 0xaf, 0xc6, 0xd6, 0xe0, 0xfd, 0x63, 0x66, 0x24, 0x4b, 0x55, 0x9c, 0x38,
	0xe6, 0x98, 0x13, 0x17, 0x9e, 0x81, 0x47, 0xe0, 0xcc, 0x91, 0xb7, 0xe0, 0xc4, 0x03, 0xa4, 0xa8,
	0x82, 0xda, 0x99, 0x5d, 0x79, 0xa5, 0xdd, 0x58, 0x02, 0x52, 0xdc, 0xb4, 0xd3, 0xdd, 0x5f, 0x4f,
	0x77, 0x7f, 0xdd, 0x3d, 0x82, 0x5d, 0xe2, 0x0e, 0xbd, 0x71, 0x1d, 0xfb, 0xb4, 0x3e, 0x6c, 0xd4,
	0xf1, 0x40, 0xf4, 0xeb, 0x16, 0x61, 0xa2, 0xe6, 0x33, 0x4f, 0x78, 0x68, 0x53, 0x4a, 0x6b, 0xd8,
	0xa7, 0xb5, 0x61, 0xa3, 0x16, 0x48, 0xcb, 0xd3, 0x06, 0x96, 0xc7, 0x48, 0xfd, 0x18, 0x73, 0xa2,
	0x0c, 0xca, 0x7b, 0x49, 0xa9, 0xe5, 0xb9, 0x27, 0xf4, 0xd4, 0xe4, 0xde, 0x80, 0x59, 0x91, 0xda,
	0xce, 0xa9, 0xe7, 0x9d, 0xda, 0xa4, 0x2e, 0xbf, 0x8e, 0x07, 0x27, 0x75, 0xec, 0x8e, 0x43, 0xd1,
	0xee, 0xac, 0x88, 0x0b, 0x36, 0xb0, 0xc2, 0x0b, 0x95, 0xaf, 0xcd, 0x4a, 0xcf, 0x19, 0xf6, 0x7d,
	0xc2, 0x78, 0x28, 0xdf, 0x1e, 0x62, 0x9b, 0xf6, 0xb0, 0x20, 0xf5, 0xe8, 0x87, 0x12, 0x54, 0x7f,
	0xcc, 0xc2, 0x7a, 0xd7, 0xe6, 0x47, 0x98, 0x61, 0x87, 0x08, 0xc2, 0x38, 0x3a, 0x87, 0x5d, 0x61,
	0x73, 0xd3, 0xa1, 0x2e, 0x75, 0x06, 0x8e, 0x29, 0xd5, 0x2c, 0xcf, 0x36, 0x87, 0x84, 0x71, 0xea,
	0xb9, 0xba, 0x56, 0xd1, 0xf6, 0x37, 0x1a, 0x07, 0xb5, 0x44, 0x0a, 0x6a, 0x53, 0x38, 0xf2, 0x2b,
	0xb4, 0x6d, 0x16, 0x5e, 0x35, 0x97, 0x7f, 0xd0, 0x32, 0x25, 0xcd, 0xd8, 0x11, 0x36, 0xff, 0x4c,
	0x41, 0x47, 0xd2, 0xe7, 0x0a, 0x78, 0xe2, 0x18, 0x8f, 0xd2, 0x1d, 0x67, 0xfe, 0xbb, 0x63, 0x05,
	0x3d, 0xeb, 0xf8, 0x26, 0xac, 0x5b, 0xd4, 0xef, 0x13, 0x66, 0xf2, 0x01, 0x15, 0x84, 0xeb, 0xd9,
	0x4a, 0x76, 0x7f, 0xd5, 0x58, 0x53, 0x87, 0x1d, 0x79, 0x86, 0xae, 0x43, 0x91, 0x58, 0xbd, 0xbe,
	0x69, 0x0d, 0xd8, 0x90, 0x70, 0x3d, 0x27, 0x55, 0x20, 0x38, 0x6a, 0xc9, 0x93, 0xea, 0x53, 0x28,
	0xc6, 0x3c, 0xa3, 0x35, 0x28, 0x74, 0x0f, 0x3b, 0xe6, 0x83, 0x67, 0xdd, 0xa7, 0xa5, 0x25, 0x54,
	0x84, 0x95, 0xee, 0x61, 0x67, 0x78, 0xdb, 0x7c, 0xaf, 0xa4, 0x5d, 0x7c, 0xdc, 0x2e, 0x65, 0x2e,
	0x3e, 0x1a, 0xa5, 0xec, 0xc5, 0xc7, 0x9d, 0x52, 0xae, 0xfa, 0x8b, 0x06, 0xe8, 0x88, 0xd1, 0x21,
	0x16, 0xe4, 0x09, 0x19, 0x1f, 0x31, 0x6f, 0x48, 0x7b, 0x84, 0xa1, 0x03, 0x58, 0xf7, 0xc3, 0xdf,
	0xa6, 0x8b, 0x1d, 0x22, 0x0b, 0xb2, 0xda, 0x5c, 0x79, 0xd5, 0xcc, 0xb1, 0x4c, 0x45, 0x33, 0xd6,
	0x22, 0xe9, 0xe7, 0xd8, 0x21, 0xe8, 0x36, 0xe4, 0x15, 0xd1, 0x64, 0xfa, 0x8a, 0x8d, 0xed, 0x9a,
	0x62, 0x4a, 0x2d, 0x62, 0x4a, 0xad, 0x23, 0x79, 0xd4, 0x5e, 0x32, 0x42, 0x45, 0x74, 0x17, 0xd6,
	0xc4, 0xd8, 0x27, 0x3d, 0x33, 0x34, 0xcc, 0x4a, 0xc3, 0xad, 0x84, 0xe1, 0x03, 0x77, 0xdc, 0x5e,
	0x32, 0x8a, 0x52, 0xb7, 0x25, 0x55, 0x9b, 0xeb, 0x50, 0x0c, 0x69, 0x1d, 0x9c, 0x56, 0x7f, 0xcb,
	0xc2, 0x46, 0xd7, 0xe6, 0x2d, 0xc2, 0x04, 0x3d, 0xa1, 0x16, 0x16, 0x04, 0x3d, 0x86, 0x4d, 0xeb,
	0xe2, 0xd3, 0xb4, 0xfa, 0x98, 0x2a, 0x4a, 0x15, 0x1b, 0xef, 0x4c, 0x57, 0x36, 0x68, 0x92, 0xda,
	0x43, 0x2c, 0x70, 0x47, 0x76, 0x88, 0x51, 0x8a, 0xd9, 0xb5, 0x02, 0x33, 0x74, 0x1f, 0x8a, 0xbe,
	0xca, 0x8f, 0x79, 0x46, 0xc6, 0x61, 0x80, 0x73, 0x50, 0xc0, 0x9f, 0x64, 0x14, 0x7d, 0x09, 0x5b,
	0x31, 0x7b, 0x33, 0xca, 0x9b, 0x9e, 0x97, 0x40, 0x7b, 0x29, 0x44, 0x4b, 0x96, 0xc3, 0x40, 0x7e,
	0xb2, 0x44, 0x77, 0xa1, 0xe0, 0x63, 0xce, 0xcf, 0x3d, 0xd6, 0x0b, 0xb3, 0x37, 0xe7, 0x56, 0x13,
	0xf5, 0x20, 0x26, 0xcf, 0xe2, 0xbe, 0xc9, 0x05, 0xf6, 0x6d, 0xa2, 0xe7, 0x16, 0x8a, 0x29, 0xb0,
	0xe8, 0x48, 0x03, 0x64, 0xc2, 0x2e, 0xa7, 0xa7, 0x6e, 0x50, 0xbd, 0x58, 0x9a, 0x05, 0x75, 0x08,
	0x17, 0xd8, 0xf1, 0xf5, 0xe5, 0x4a, 0x76, 0x3e, 0x60, 0x59, 0x41, 0xc4, 0xea, 0xd6, 0x8d, 0x00,
	0xaa, 0x1d, 0xd8, 0xea, 0xda, 0xbc, 0x43, 0x78, 0xd0, 0x3a, 0x5d, 0x6a, 0x9d, 0x11, 0xf1, 0x84,
	0x8c, 0x39, 0xba, 0x07, 0xb9, 0x33, 0x32, 0xe6, 0xba, 0xb6, 0x80, 0x03, 0xd9, 0x96, 0x2f, 0xb5,
	0x4c, 0x41, 0x33, 0xa4, 0x51, 0xf5, 0xd7, 0x1c, 0xec, 0xc6, 0xbc, 0x3d, 0x57, 0x33, 0x8a, 0x7a,
	0x6e, 0xcb, 0x73, 0x05, 0x19, 0x09, 0xf4, 0x21, 0x80, 0x60, 0x03, 0x2e, 0x82, 0xb8, 0xf0, 0x62,
	0x7c, 0x59, 0x0d, 0x0d, 0x5a, 0x18, 0x3d, 0x82, 0xed, 0x21, 0x61, 0xf4, 0x64, 0x3c, 0x95, 0x14,
	0xee, 0x9f, 0x51, 0xd5, 0xea, 0xcd, 0x8d, 0x57, 0xcd, 0xe2, 0x4b, 0xad, 0x50, 0xcd, 0xb3, 0x5c,
	0xe5, 0x60, 0xff, 0xc0, 0x78, 0x4b, 0xa9, 0xc7, 0xae, 0xd4, 0xf1, 0xcf, 0xe8, 0x6b, 0x70, 0xfa,
	0x98, 0xf7, 0xf5, 0x4c, 0x02, 0xe7, 0xe3, 0x7d, 0x33, 0x05, 0xa7, 0x8d, 0x79, 0x1f, 0xbd, 0x3f,
	0xc1, 0xe1, 0x83, 0xe3, 0x6f, 0x89, 0x25, 0x4c, 0x6c, 0x0b, 0xd5, 0xcc, 0x6a, 0xae, 0x6c, 0x29,
	0x71, 0x47, 0x49, 0x1f, 0xd8, 0x42, 0xf6, 0xf2, 0x63, 0xb8, 0xca, 0xc8, 0x77, 0x03, 0xca, 0x88,
	0x19, 0xe7, 0xc8, 0xb2, 0xcc, 0x46, 0x39, 0xd1, 0x9f, 0x4d, 0xcf, 0xb3, 0x9f, 0x63, 0x7b, 0x40,
	0x8c, 0xcd, 0xd0, 0xec, 0xe9, 0x05, 0x4f, 0xce, 0xe0, 0x56, 0x84, 0x75, 0x29, 0x5f, 0xf2, 0x73,
	0xc1, 0x6f, 0x84, 0x38, 0x9d, 0xd7, 0x72, 0x06, 0xd5, 0x21, 0x6b, 0x31, 0x5b, 0x5f, 0x59, 0xa4,
	0x6c, 0x81, 0x26, 0xfa, 0x00, 0x76, 0xb0, 0x6d, 0x7b, 0xe7, 0x26, 0x19, 0xf9, 0x94, 0x4d, 0x5f,
	0x4e, 0x2f, 0x54, 0xb4, 0xfd, 0x82, 0xb1, 0x2d, 0x15, 0x3e, 0x51, 0xf2, 0x98, 0xd7, 0xea, 0xef,
	0x2b, 0x50, 0x6a, 0x79, 0x8e, 0xe3, 0xb9, 0xc1, 0xe8, 0x09, 0xf9, 0xf3, 0x11, 0x40, 0xb0, 0x5b,
	0xfc, 0x60, 0x4b, 0xf0, 0x90, 0x3f, 0x95, 0x79, 0x9b, 0xc4, 0x58, 0x15, 0xe1, 0x27, 0x47, 0x87,
	0x50, 0x0a, 0x00, 0x62, 0xf7, 0xe0, 0xb2, 0xe6, 0xc5, 0xc6, 0x8d, 0x74, 0x98, 0xd8, 0x95, 0x8c,
	0x2b, 0x62, 0xea, 0x9b, 0xa3, 0x11, 0x54, 0x67, 0xd0, 0x4c, 0xde, 0xe3, 0x26, 0x27, 0x16, 0x23,
	0x22, 0x9c, 0xbb, 0x5c, 0xcf, 0x4b, 0xfc, 0x6a, 0x0a, 0x7e, 0xa7, 0xc7, 0x3b, 0x52, 0x37, 0x9c,
	0xbb, 0x61, 0x3f, 0x95, 0x34, 0xe3, 0xda, 0xb4, 0xab, 0x19, 0x45, 0x8e, 0xbe, 0x01, 0x34, 0x9c,
	0x74, 0x57, 0xe0, 0x29, 0x48, 0x4f, 0x38, 0xa4, 0xea, 0x29, 0x9e, 0x2e, 0xeb, 0xca, 0xf6, 0x92,
	0xb1, 0x39, 0x4c, 0xb4, 0xaa, 0x80, 0x5b, 0x49, 0x0f, 0xc9, 0xf0, 0x42, 0x36, 0x2c, 0x10, 0x5d,
	0x7b, 0xc9, 0xa8, 0x24, 0xdc, 0xcc, 0xe8, 0xa0, 0x17, 0x1a, 0xbc, 0x6d, 0x79, 0xce, 0x31, 0x0d,
	0xa8, 0x9c, 0x12, 0x61, 0x41, 0x7a, 0x6b, 0xa7, 0x45, 0x38, 0xc3, 0x95, 0xe0, 0x40, 0xc2, 0xcc,
	0x09, 0x7d, 0x27, 0x72, 0x97, 0x9c, 0x56, 0x7b, 0xb0, 0x81, 0x6d, 0xdf, 0x9d, 0x3c, 0x61, 0xa2,
	0xe7, 0xc2, 0x7a, 0x70, 0x1a, 0xbd, 0x10, 0x78, 0xf9, 0xa7, 0x0c, 0xdc, 0x5a, 0xc4, 0x19, 0x3a,
	0x87, 0x72, 0x8f, 0x9c, 0xe0, 0x81, 0x2d, 0xd2, 0x42, 0xd3, 0xfe, 0x55, 0xf1, 0x24, 0x67, 0x5e,
	0x48, 0xce, 0xe8, 0x21, 0x78, 0xd2, 0xf1, 0xf7, 0x0b, 0xd6, 0x32, 0xb3, 0x68, 0x2d, 0x63, 0x5e,
	0xe7, 0xd6, 0xb4, 0xb9, 0x03, 0xdb, 0x29, 0xde, 0x83, 0x97, 0xc5, 0xe3, 0x5c, 0x61, 0xb9, 0x94,
	0xaf, 0xfe, 0xa9, 0x01, 0x7a, 0xe6, 0x73, 0xc1, 0x08, 0x76, 0x62, 0xcd, 0xfe, 0x05, 0x20, 0x4b,
	0x16, 0xd5, 0x94, 0x4d, 0x36, 0x95, 0xa6, 0x9b, 0x0b, 0x30, 0xc0, 0x28, 0x59, 0xb3, 0xf3, 0xa3,
	0x0c, 0x59, 0xee, 0x52, 0x19, 0xe7, 0xaa, 0x8c, 0x81, 0x65, 0xf7, 0xff, 0xd2, 0x8c, 0xe0, 0x10,
	0xd5, 0xe1, 0xaa, 0x1a, 0x56, 0x8c, 0xb8, 0xe4, 0xd4, 0x13, 0x54, 0xde, 0x57, 0xf6, 0x54, 0xc1,
	0x40, 0x52, 0x64, 0xc4, 0x25, 0xe8, 0x11, 0x94, 0x1c, 0x3c, 0x32, 0xb9, 0xda, 0xa1, 0xa6, 0x5c,
	0x9b, 0x6a, 0xd1, 0xef, 0x26, 0xe6, 0xec, 0xb3, 0x4f, 0x5d, 0x71, 0xa7, 0xa1, 0x26, 0xed, 0x86,
	0x83, 0x47, 0xe1, 0xe2, 0x0d, 0x56, 0x6e, 0xf5, 0x8f, 0x2c, 0x6c, 0x3d, 0xf4, 0xce, 0xdd, 0xff,
	0x23, 0x01, 0x5f, 0x41, 0x39, 0xda, 0x17, 0x96, 0x4d, 0x89, 0x2b, 0xa6, 0x46, 0x72, 0x66, 0xee,
	0x96, 0xd0, 0x43, 0xeb, 0x96, 0x34, 0x8e, 0xbf, 0x08, 0xef, 0x41, 0x71, 0xb2, 0x89, 0x5c, 0x1a,
	0x8e, 0xa2, 0xcb, 0xa0, 0x20, 0x5a, 0x38, 0x2e, 0x45, 0x5f, 0xc3, 0xd5, 0x28, 0x8d, 0x42, 0xbe,
	0x45, 0xe2, 0xd9, 0x7c, 0x37, 0x7d, 0x32, 0x27, 0xde, 0x2e, 0xc1, 0x1c, 0xe3, 0x89, 0x07, 0xcd,
	0x00, 0xf6, 0x52, 0xa0, 0x53, 0xc8, 0xbf, 0xfc, 0x4f, 0x06, 0x59, 0xc2, 0xcf, 0x2c, 0xe9, 0xcb,
	0xa0, 0xa7, 0xb9, 0x95, 0xef, 0x69, 0x02, 0x57, 0x66, 0xe7, 0x1e, 0x82, 0xdc, 0xc5, 0x9f, 0x00,
	0x43, 0xfe, 0x46, 0xf7, 0x01, 0x82, 0x5b, 0x4e, 0xf5, 0xe6, 0xf5, 0x94, 0xad, 0xab, 0x20, 0xa2,
	0xe7, 0x12, 0xef, 0x71, 0x75, 0x50, 0xfd, 0x39, 0x03, 0x79, 0xe5, 0x24, 0x15, 0xfe, 0x10, 0xae,
	0xcc, 0x2c, 0xaf, 0xd0, 0xc7, 0xfc, 0x4d, 0xd8, 0x5e, 0x32, 0x36, 0xa6, 0x17, 0xd4, 0xeb, 0x2a,
	0x98, 0x7d, 0x03, 0x15, 0x4c, 0xdf, 0x75, 0xb9, 0x37, 0xb7, 0xeb, 0x9a, 0x79, 0xc8, 0x05, 0x85,
	0x69, 0xd6, 0xe0, 0x3a, 0xf5, 0x14, 0xa2, 0xcf, 0xbc, 0xd1, 0x38, 0x09, 0xde, 0x5c, 0x0d, 0xd0,
	0xe5, 0xec, 0x3f, 0xd2, 0x8e, 0xf3, 0x92, 0xd6, 0x77, 0xfe, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xb1,
	0x53, 0xd7, 0x7e, 0x66, 0x10, 0x00, 0x00,
}
  0707010000005B000081A4000003E800000064000000015E17A2470001C767000000000000000000000000000000000000003000000000cilium-proxy-20200109/go/envoy/api/v2/cds.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/cds.proto

package envoy_api_v2

import (
	context "context"
	fmt "fmt"
	auth "github.com/cilium/proxy/go/envoy/api/v2/auth"
	cluster "github.com/cilium/proxy/go/envoy/api/v2/cluster"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_type "github.com/cilium/proxy/go/envoy/type"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	duration "github.com/golang/protobuf/ptypes/duration"
	_struct "github.com/golang/protobuf/ptypes/struct"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Refer to :ref:`service discovery type <arch_overview_service_discovery_types>`
// for an explanation on each type.
type Cluster_DiscoveryType int32

const (
	// Refer to the :ref:`static discovery type<arch_overview_service_discovery_types_static>`
	// for an explanation.
	Cluster_STATIC Cluster_DiscoveryType = 0
	// Refer to the :ref:`strict DNS discovery
	// type<arch_overview_service_discovery_types_strict_dns>`
	// for an explanation.
	Cluster_STRICT_DNS Cluster_DiscoveryType = 1
	// Refer to the :ref:`logical DNS discovery
	// type<arch_overview_service_discovery_types_logical_dns>`
	// for an explanation.
	Cluster_LOGICAL_DNS Cluster_DiscoveryType = 2
	// Refer to the :ref:`service discovery type<arch_overview_service_discovery_types_eds>`
	// for an explanation.
	Cluster_EDS Cluster_DiscoveryType = 3
	// Refer to the :ref:`original destination discovery
	// type<arch_overview_service_discovery_types_original_destination>`
	// for an explanation.
	Cluster_ORIGINAL_DST Cluster_DiscoveryType = 4
)

var Cluster_DiscoveryType_name = map[int32]string{
	0: "STATIC",
	1: "STRICT_DNS",
	2: "LOGICAL_DNS",
	3: "EDS",
	4: "ORIGINAL_DST",
}

var Cluster_DiscoveryType_value = map[string]int32{
	"STATIC":       0,
	"STRICT_DNS":   1,
	"LOGICAL_DNS":  2,
	"EDS":          3,
	"ORIGINAL_DST": 4,
}

func (x Cluster_DiscoveryType) String() string {
	return proto.EnumName(Cluster_DiscoveryType_name, int32(x))
}

func (Cluster_DiscoveryType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 0}
}

// Refer to :ref:`load balancer type <arch_overview_load_balancing_types>` architecture
// overview section for information on each type.
type Cluster_LbPolicy int32

const (
	// Refer to the :ref:`round robin load balancing
	// policy<arch_overview_load_balancing_types_round_robin>`
	// for an explanation.
	Cluster_ROUND_ROBIN Cluster_LbPolicy = 0
	// Refer to the :ref:`least request load balancing
	// policy<arch_overview_load_balancing_types_least_request>`
	// for an explanation.
	Cluster_LEAST_REQUEST Cluster_LbPolicy = 1
	// Refer to the :ref:`ring hash load balancing
	// policy<arch_overview_load_balancing_types_ring_hash>`
	// for an explanation.
	Cluster_RING_HASH Cluster_LbPolicy = 2
	// Refer to the :ref:`random load balancing
	// policy<arch_overview_load_balancing_types_random>`
	// for an explanation.
	Cluster_RANDOM Cluster_LbPolicy = 3
	// Refer to the :ref:`original destination load balancing
	// policy<arch_overview_load_balancing_types_original_destination>`
	// for an explanation.
	//
	// .. attention::
	//
	//   **This load balancing policy is deprecated**. Use CLUSTER_PROVIDED instead.
	//
	Cluster_ORIGINAL_DST_LB Cluster_LbPolicy = 4 // Deprecated: Do not use.
	// Refer to the :ref:`Maglev load balancing policy<arch_overview_load_balancing_types_maglev>`
	// for an explanation.
	Cluster_MAGLEV Cluster_LbPolicy = 5
	// This load balancer type must be specified if the configured cluster provides a cluster
	// specific load balancer. Consult the configured cluster's documentation for whether to set
	// this option or not.
	Cluster_CLUSTER_PROVIDED Cluster_LbPolicy = 6
	// [#not-implemented-hide:] Use the new :ref:`load_balancing_policy
	// <envoy_api_field_Cluster.load_balancing_policy>` field to determine the LB policy.
	// [#next-major-version: In the v3 API, we should consider deprecating the lb_policy field
	// and instead using the new load_balancing_policy field as the one and only mechanism for
	// configuring this.]
	Cluster_LOAD_BALANCING_POLICY_CONFIG Cluster_LbPolicy = 7
)

var Cluster_LbPolicy_name = map[int32]string{
	0: "ROUND_ROBIN",
	1: "LEAST_REQUEST",
	2: "RING_HASH",
	3: "RANDOM",
	4: "ORIGINAL_DST_LB",
	5: "MAGLEV",
	6: "CLUSTER_PROVIDED",
	7: "LOAD_BALANCING_POLICY_CONFIG",
}

var Cluster_LbPolicy_value = map[string]int32{
	"ROUND_ROBIN":                  0,
	"LEAST_REQUEST":                1,
	"RING_HASH":                    2,
	"RANDOM":                       3,
	"ORIGINAL_DST_LB":              4,
	"MAGLEV":                       5,
	"CLUSTER_PROVIDED":             6,
	"LOAD_BALANCING_POLICY_CONFIG": 7,
}

func (x Cluster_LbPolicy) String() string {
	return proto.EnumName(Cluster_LbPolicy_name, int32(x))
}

func (Cluster_LbPolicy) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 1}
}

// When V4_ONLY is selected, the DNS resolver will only perform a lookup for
// addresses in the IPv4 family. If V6_ONLY is selected, the DNS resolver will
// only perform a lookup for addresses in the IPv6 family. If AUTO is
// specified, the DNS resolver will first perform a lookup for addresses in
// the IPv6 family and fallback to a lookup for addresses in the IPv4 family.
// For cluster types other than
// :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>` and
// :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>`,
// this setting is
// ignored.
type Cluster_DnsLookupFamily int32

const (
	Cluster_AUTO    Cluster_DnsLookupFamily = 0
	Cluster_V4_ONLY Cluster_DnsLookupFamily = 1
	Cluster_V6_ONLY Cluster_DnsLookupFamily = 2
)

var Cluster_DnsLookupFamily_name = map[int32]string{
	0: "AUTO",
	1: "V4_ONLY",
	2: "V6_ONLY",
}

var Cluster_DnsLookupFamily_value = map[string]int32{
	"AUTO":    0,
	"V4_ONLY": 1,
	"V6_ONLY": 2,
}

func (x Cluster_DnsLookupFamily) String() string {
	return proto.EnumName(Cluster_DnsLookupFamily_name, int32(x))
}

func (Cluster_DnsLookupFamily) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 2}
}

type Cluster_ClusterProtocolSelection int32

const (
	// Cluster can only operate on one of the possible upstream protocols (HTTP1.1, HTTP2).
	// If :ref:`http2_protocol_options <envoy_api_field_Cluster.http2_protocol_options>` are
	// present, HTTP2 will be used, otherwise HTTP1.1 will be used.
	Cluster_USE_CONFIGURED_PROTOCOL Cluster_ClusterProtocolSelection = 0
	// Use HTTP1.1 or HTTP2, depending on which one is used on the downstream connection.
	Cluster_USE_DOWNSTREAM_PROTOCOL Cluster_ClusterProtocolSelection = 1
)

var Cluster_ClusterProtocolSelection_name = map[int32]string{
	0: "USE_CONFIGURED_PROTOCOL",
	1: "USE_DOWNSTREAM_PROTOCOL",
}

var Cluster_ClusterProtocolSelection_value = map[string]int32{
	"USE_CONFIGURED_PROTOCOL": 0,
	"USE_DOWNSTREAM_PROTOCOL": 1,
}

func (x Cluster_ClusterProtocolSelection) String() string {
	return proto.EnumName(Cluster_ClusterProtocolSelection_name, int32(x))
}

func (Cluster_ClusterProtocolSelection) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 3}
}

// If NO_FALLBACK is selected, a result
// equivalent to no healthy hosts is reported. If ANY_ENDPOINT is selected,
// any cluster endpoint may be returned (subject to policy, health checks,
// etc). If DEFAULT_SUBSET is selected, load balancing is performed over the
// endpoints matching the values from the default_subset field.
type Cluster_LbSubsetConfig_LbSubsetFallbackPolicy int32

const (
	Cluster_LbSubsetConfig_NO_FALLBACK    Cluster_LbSubsetConfig_LbSubsetFallbackPolicy = 0
	Cluster_LbSubsetConfig_ANY_ENDPOINT   Cluster_LbSubsetConfig_LbSubsetFallbackPolicy = 1
	Cluster_LbSubsetConfig_DEFAULT_SUBSET Cluster_LbSubsetConfig_LbSubsetFallbackPolicy = 2
)

var Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_name = map[int32]string{
	0: "NO_FALLBACK",
	1: "ANY_ENDPOINT",
	2: "DEFAULT_SUBSET",
}

var Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_value = map[string]int32{
	"NO_FALLBACK":    0,
	"ANY_ENDPOINT":   1,
	"DEFAULT_SUBSET": 2,
}

func (x Cluster_LbSubsetConfig_LbSubsetFallbackPolicy) String() string {
	return proto.EnumName(Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_name, int32(x))
}

func (Cluster_LbSubsetConfig_LbSubsetFallbackPolicy) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 3, 0}
}

// Allows to override top level fallback policy per selector.
type Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy int32

const (
	// If NOT_DEFINED top level config fallback policy is used instead.
	Cluster_LbSubsetConfig_LbSubsetSelector_NOT_DEFINED Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy = 0
	// If NO_FALLBACK is selected, a result equivalent to no healthy hosts is reported.
	Cluster_LbSubsetConfig_LbSubsetSelector_NO_FALLBACK Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy = 1
	// If ANY_ENDPOINT is selected, any cluster endpoint may be returned
	// (subject to policy, health checks, etc).
	Cluster_LbSubsetConfig_LbSubsetSelector_ANY_ENDPOINT Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy = 2
	// If DEFAULT_SUBSET is selected, load balancing is performed over the
	// endpoints matching the values from the default_subset field.
	Cluster_LbSubsetConfig_LbSubsetSelector_DEFAULT_SUBSET Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy = 3
)

var Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy_name = map[int32]string{
	0: "NOT_DEFINED",
	1: "NO_FALLBACK",
	2: "ANY_ENDPOINT",
	3: "DEFAULT_SUBSET",
}

var Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy_value = map[string]int32{
	"NOT_DEFINED":    0,
	"NO_FALLBACK":    1,
	"ANY_ENDPOINT":   2,
	"DEFAULT_SUBSET": 3,
}

func (x Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy) String() string {
	return proto.EnumName(Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy_name, int32(x))
}

func (Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 3, 0, 0}
}

// The hash function used to hash hosts onto the ketama ring.
type Cluster_RingHashLbConfig_HashFunction int32

const (
	// Use `xxHash <https://github.com/Cyan4973/xxHash>`_, this is the default hash function.
	Cluster_RingHashLbConfig_XX_HASH Cluster_RingHashLbConfig_HashFunction = 0
	// Use `MurmurHash2 <https://sites.google.com/site/murmurhash/>`_, this is compatible with
	// std:hash<string> in GNU libstdc++ 3.4.20 or above. This is typically the case when compiled
	// on Linux and not macOS.
	Cluster_RingHashLbConfig_MURMUR_HASH_2 Cluster_RingHashLbConfig_HashFunction = 1
)

var Cluster_RingHashLbConfig_HashFunction_name = map[int32]string{
	0: "XX_HASH",
	1: "MURMUR_HASH_2",
}

var Cluster_RingHashLbConfig_HashFunction_value = map[string]int32{
	"XX_HASH":       0,
	"MURMUR_HASH_2": 1,
}

func (x Cluster_RingHashLbConfig_HashFunction) String() string {
	return proto.EnumName(Cluster_RingHashLbConfig_HashFunction_name, int32(x))
}

func (Cluster_RingHashLbConfig_HashFunction) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 5, 0}
}

// Configuration for a single upstream cluster.
// [#next-free-field: 45]
type Cluster struct {
	// Configuration to use different transport sockets for different endpoints.
	// The entry of *envoy.transport_socket* in the
	// :ref:`LbEndpoint.Metadata <envoy_api_field_endpoint.LbEndpoint.metadata>`
	// is used to match against the transport sockets as they appear in the list. The first
	// :ref:`match <envoy_api_msg_Cluster.TransportSocketMatch>` is used.
	// For example, with the following match
	//
	// .. code-block:: yaml
	//
	//  transport_socket_matches:
	//  - name: "enableMTLS"
	//    match:
	//      acceptMTLS: true
	//    transport_socket:
	//      name: tls
	//      config: { ... } # tls socket configuration
	//  - name: "defaultToPlaintext"
	//    match: {}
	//    transport_socket:
	//      name: "rawbuffer"
	//
	// Connections to the endpoints whose metadata value under *envoy.transport_socket*
	// having "acceptMTLS"/"true" key/value pair use the "enableMTLS" socket configuration.
	//
	// If a :ref:`socket match <envoy_api_msg_Cluster.TransportSocketMatch>` with empty match
	// criteria is provided, that always match any endpoint. For example, the "defaultToPlaintext"
	// socket match in case above.
	//
	// If an endpoint metadata's value under *envoy.transport_socket* does not match any
	// *TransportSocketMatch*, socket configuration fallbacks to use the *tls_context* or
	// *transport_socket* specified in this cluster.
	//
	// This field allows gradual and flexible transport socket configuration changes.
	//
	// The metadata of endpoints in EDS can indicate transport socket capabilities. For example,
	// an endpoint's metadata can have two key value pairs as "acceptMTLS": "true",
	// "acceptPlaintext": "true". While some other endpoints, only accepting plaintext traffic
	// has "acceptPlaintext": "true" metadata information.
	//
	// Then the xDS server can configure the CDS to a client, Envoy A, to send mutual TLS
	// traffic for endpoints with "acceptMTLS": "true", by adding a corresponding
	// *TransportSocketMatch* in this field. Other client Envoys receive CDS without
	// *transport_socket_match* set, and still send plain text traffic to the same cluster.
	//
	// TODO(incfly): add a detailed architecture doc on intended usage.
	TransportSocketMatches []*Cluster_TransportSocketMatch `protobuf:"bytes,43,rep,name=transport_socket_matches,json=transportSocketMatches,proto3" json:"transport_socket_matches,omitempty"`
	// Supplies the name of the cluster which must be unique across all clusters.
	// The cluster name is used when emitting
	// :ref:`statistics <config_cluster_manager_cluster_stats>` if :ref:`alt_stat_name
	// <envoy_api_field_Cluster.alt_stat_name>` is not provided.
	// Any ``:`` in the cluster name will be converted to ``_`` when emitting statistics.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// An optional alternative to the cluster name to be used while emitting stats.
	// Any ``:`` in the name will be converted to ``_`` when emitting statistics. This should not be
	// confused with :ref:`Router Filter Header
	// <config_http_filters_router_x-envoy-upstream-alt-stat-name>`.
	AltStatName string `protobuf:"bytes,28,opt,name=alt_stat_name,json=altStatName,proto3" json:"alt_stat_name,omitempty"`
	// Types that are valid to be assigned to ClusterDiscoveryType:
	//	*Cluster_Type
	//	*Cluster_ClusterType
	ClusterDiscoveryType isCluster_ClusterDiscoveryType `protobuf_oneof:"cluster_discovery_type"`
	// Configuration to use for EDS updates for the Cluster.
	EdsClusterConfig *Cluster_EdsClusterConfig `protobuf:"bytes,3,opt,name=eds_cluster_config,json=edsClusterConfig,proto3" json:"eds_cluster_config,omitempty"`
	// The timeout for new network connections to hosts in the cluster.
	ConnectTimeout *duration.Duration `protobuf:"bytes,4,opt,name=connect_timeout,json=connectTimeout,proto3" json:"connect_timeout,omitempty"`
	// Soft limit on size of the cluster’s connections read and write buffers. If
	// unspecified, an implementation defined default is applied (1MiB).
	PerConnectionBufferLimitBytes *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=per_connection_buffer_limit_bytes,json=perConnectionBufferLimitBytes,proto3" json:"per_connection_buffer_limit_bytes,omitempty"`
	// The :ref:`load balancer type <arch_overview_load_balancing_types>` to use
	// when picking a host in the cluster.
	LbPolicy Cluster_LbPolicy `protobuf:"varint,6,opt,name=lb_policy,json=lbPolicy,proto3,enum=envoy.api.v2.Cluster_LbPolicy" json:"lb_policy,omitempty"`
	// If the service discovery type is
	// :ref:`STATIC<envoy_api_enum_value_Cluster.DiscoveryType.STATIC>`,
	// :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>`
	// or :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>`,
	// then hosts is required.
	//
	// .. attention::
	//
	//   **This field is deprecated**. Set the
	//   :ref:`load_assignment<envoy_api_field_Cluster.load_assignment>` field instead.
	//
	Hosts []*core.Address `protobuf:"bytes,7,rep,name=hosts,proto3" json:"hosts,omitempty"`
	// Setting this is required for specifying members of
	// :ref:`STATIC<envoy_api_enum_value_Cluster.DiscoveryType.STATIC>`,
	// :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>`
	// or :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>` clusters.
	// This field supersedes :ref:`hosts<envoy_api_field_Cluster.hosts>` field.
	// [#comment:TODO(dio): Deprecate the hosts field and add it to :ref:`deprecated log<deprecated>`
	// once load_assignment is implemented.]
	//
	// .. attention::
	//
	//   Setting this allows non-EDS cluster types to contain embedded EDS equivalent
	//   :ref:`endpoint assignments<envoy_api_msg_ClusterLoadAssignment>`.
	//   Setting this overrides :ref:`hosts<envoy_api_field_Cluster.hosts>` values.
	//
	LoadAssignment *ClusterLoadAssignment `protobuf:"bytes,33,opt,name=load_assignment,json=loadAssignment,proto3" json:"load_assignment,omitempty"`
	// Optional :ref:`active health checking <arch_overview_health_checking>`
	// configuration for the cluster. If no
	// configuration is specified no health checking will be done and all cluster
	// members will be considered healthy at all times.
	HealthChecks []*core.HealthCheck `protobuf:"bytes,8,rep,name=health_checks,json=healthChecks,proto3" json:"health_checks,omitempty"`
	// Optional maximum requests for a single upstream connection. This parameter
	// is respected by both the HTTP/1.1 and HTTP/2 connection pool
	// implementations. If not specified, there is no limit. Setting this
	// parameter to 1 will effectively disable keep alive.
	MaxRequestsPerConnection *wrappers.UInt32Value `protobuf:"bytes,9,opt,name=max_requests_per_connection,json=maxRequestsPerConnection,proto3" json:"max_requests_per_connection,omitempty"`
	// Optional :ref:`circuit breaking <arch_overview_circuit_break>` for the cluster.
	CircuitBreakers *cluster.CircuitBreakers `protobuf:"bytes,10,opt,name=circuit_breakers,json=circuitBreakers,proto3" json:"circuit_breakers,omitempty"`
	// The TLS configuration for connections to the upstream cluster.
	//
	// .. attention::
	//
	//   **This field is deprecated**. Use `transport_socket` with name `tls` instead. If both are
	//   set, `transport_socket` takes priority.
	TlsContext *auth.UpstreamTlsContext `protobuf:"bytes,11,opt,name=tls_context,json=tlsContext,proto3" json:"tls_context,omitempty"` // Deprecated: Do not use.
	// Additional options when handling HTTP requests upstream. These options will be applicable to
	// both HTTP1 and HTTP2 requests.
	CommonHttpProtocolOptions *core.HttpProtocolOptions `protobuf:"bytes,29,opt,name=common_http_protocol_options,json=commonHttpProtocolOptions,proto3" json:"common_http_protocol_options,omitempty"`
	// Additional options when handling HTTP1 requests.
	HttpProtocolOptions *core.Http1ProtocolOptions `protobuf:"bytes,13,opt,name=http_protocol_options,json=httpProtocolOptions,proto3" json:"http_protocol_options,omitempty"`
	// Even if default HTTP2 protocol options are desired, this field must be
	// set so that Envoy will assume that the upstream supports HTTP/2 when
	// making new HTTP connection pool connections. Currently, Envoy only
	// supports prior knowledge for upstream connections. Even if TLS is used
	// with ALPN, `http2_protocol_options` must be specified. As an aside this allows HTTP/2
	// connections to happen over plain text.
	Http2ProtocolOptions *core.Http2ProtocolOptions `protobuf:"bytes,14,opt,name=http2_protocol_options,json=http2ProtocolOptions,proto3" json:"http2_protocol_options,omitempty"`
	// The extension_protocol_options field is used to provide extension-specific protocol options
	// for upstream connections. The key should match the extension filter name, such as
	// "envoy.filters.network.thrift_proxy". See the extension's documentation for details on
	// specific options.
	ExtensionProtocolOptions map[string]*_struct.Struct `protobuf:"bytes,35,rep,name=extension_protocol_options,json=extensionProtocolOptions,proto3" json:"extension_protocol_options,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Deprecated: Do not use.
	// The extension_protocol_options field is used to provide extension-specific protocol options
	// for upstream connections. The key should match the extension filter name, such as
	// "envoy.filters.network.thrift_proxy". See the extension's documentation for details on
	// specific options.
	TypedExtensionProtocolOptions map[string]*any.Any `protobuf:"bytes,36,rep,name=typed_extension_protocol_options,json=typedExtensionProtocolOptions,proto3" json:"typed_extension_protocol_options,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// If the DNS refresh rate is specified and the cluster type is either
	// :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>`,
	// or :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>`,
	// this value is used as the cluster’s DNS refresh
	// rate. The value configured must be at least 1ms. If this setting is not specified, the
	// value defaults to 5000ms. For cluster types other than
	// :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>`
	// and :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>`
	// this setting is ignored.
	DnsRefreshRate *duration.Duration `protobuf:"bytes,16,opt,name=dns_refresh_rate,json=dnsRefreshRate,proto3" json:"dns_refresh_rate,omitempty"`
	// If the DNS failure refresh rate is specified and the cluster type is either
	// :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>`,
	// or :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>`,
	// this is used as the cluster’s DNS refresh rate when requests are failing. If this setting is
	// not specified, the failure refresh rate defaults to the DNS refresh rate. For cluster types
	// other than :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>` and
	// :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>` this setting is
	// ignored.
	//
	// Note: Currently, DNS failures and empty DNS responses are not treated differently and this
	// configuration is applied in both situations.
	DnsFailureRefreshRate *Cluster_RefreshRate `protobuf:"bytes,44,opt,name=dns_failure_refresh_rate,json=dnsFailureRefreshRate,proto3" json:"dns_failure_refresh_rate,omitempty"`
	// Optional configuration for setting cluster's DNS refresh rate. If the value is set to true,
	// cluster's DNS refresh rate will be set to resource record's TTL which comes from DNS
	// resolution.
	RespectDnsTtl bool `protobuf:"varint,39,opt,name=respect_dns_ttl,json=respectDnsTtl,proto3" json:"respect_dns_ttl,omitempty"`
	// The DNS IP address resolution policy. If this setting is not specified, the
	// value defaults to
	// :ref:`AUTO<envoy_api_enum_value_Cluster.DnsLookupFamily.AUTO>`.
	DnsLookupFamily Cluster_DnsLookupFamily `protobuf:"varint,17,opt,name=dns_lookup_family,json=dnsLookupFamily,proto3,enum=envoy.api.v2.Cluster_DnsLookupFamily" json:"dns_lookup_family,omitempty"`
	// If DNS resolvers are specified and the cluster type is either
	// :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>`,
	// or :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>`,
	// this value is used to specify the cluster’s dns resolvers.
	// If this setting is not specified, the value defaults to the default
	// resolver, which uses /etc/resolv.conf for configuration. For cluster types
	// other than
	// :ref:`STRICT_DNS<envoy_api_enum_value_Cluster.DiscoveryType.STRICT_DNS>`
	// and :ref:`LOGICAL_DNS<envoy_api_enum_value_Cluster.DiscoveryType.LOGICAL_DNS>`
	// this setting is ignored.
	DnsResolvers []*core.Address `protobuf:"bytes,18,rep,name=dns_resolvers,json=dnsResolvers,proto3" json:"dns_resolvers,omitempty"`
	// If specified, outlier detection will be enabled for this upstream cluster.
	// Each of the configuration values can be overridden via
	// :ref:`runtime values <config_cluster_manager_cluster_runtime_outlier_detection>`.
	OutlierDetection *cluster.OutlierDetection `protobuf:"bytes,19,opt,name=outlier_detection,json=outlierDetection,proto3" json:"outlier_detection,omitempty"`
	// The interval for removing stale hosts from a cluster type
	// :ref:`ORIGINAL_DST<envoy_api_enum_value_Cluster.DiscoveryType.ORIGINAL_DST>`.
	// Hosts are considered stale if they have not been used
	// as upstream destinations during this interval. New hosts are added
	// to original destination clusters on demand as new connections are
	// redirected to Envoy, causing the number of hosts in the cluster to
	// grow over time. Hosts that are not stale (they are actively used as
	// destinations) are kept in the cluster, which allows connections to
	// them remain open, saving the latency that would otherwise be spent
	// on opening new connections. If this setting is not specified, the
	// value defaults to 5000ms. For cluster types other than
	// :ref:`ORIGINAL_DST<envoy_api_enum_value_Cluster.DiscoveryType.ORIGINAL_DST>`
	// this setting is ignored.
	CleanupInterval *duration.Duration `protobuf:"bytes,20,opt,name=cleanup_interval,json=cleanupInterval,proto3" json:"cleanup_interval,omitempty"`
	// Optional configuration used to bind newly established upstream connections.
	// This overrides any bind_config specified in the bootstrap proto.
	// If the address and port are empty, no bind will be performed.
	UpstreamBindConfig *core.BindConfig `protobuf:"bytes,21,opt,name=upstream_bind_config,json=upstreamBindConfig,proto3" json:"upstream_bind_config,omitempty"`
	// Configuration for load balancing subsetting.
	LbSubsetConfig *Cluster_LbSubsetConfig `protobuf:"bytes,22,opt,name=lb_subset_config,json=lbSubsetConfig,proto3" json:"lb_subset_config,omitempty"`
	// Optional configuration for the load balancing algorithm selected by
	// LbPolicy. Currently only
	// :ref:`RING_HASH<envoy_api_enum_value_Cluster.LbPolicy.RING_HASH>` and
	// :ref:`LEAST_REQUEST<envoy_api_enum_value_Cluster.LbPolicy.LEAST_REQUEST>`
	// has additional configuration options.
	// Specifying ring_hash_lb_config or least_request_lb_config without setting the corresponding
	// LbPolicy will generate an error at runtime.
	//
	// Types that are valid to be assigned to LbConfig:
	//	*Cluster_RingHashLbConfig_
	//	*Cluster_OriginalDstLbConfig_
	//	*Cluster_LeastRequestLbConfig_
	LbConfig isCluster_LbConfig `protobuf_oneof:"lb_config"`
	// Common configuration for all load balancer implementations.
	CommonLbConfig *Cluster_CommonLbConfig `protobuf:"bytes,27,opt,name=common_lb_config,json=commonLbConfig,proto3" json:"common_lb_config,omitempty"`
	// Optional custom transport socket implementation to use for upstream connections.
	// To setup TLS, set a transport socket with name `tls` and
	// :ref:`UpstreamTlsContexts <envoy_api_msg_auth.UpstreamTlsContext>` in the `typed_config`.
	// If no transport socket configuration is specified, new connections
	// will be set up with plaintext.
	TransportSocket *core.TransportSocket `protobuf:"bytes,24,opt,name=transport_socket,json=transportSocket,proto3" json:"transport_socket,omitempty"`
	// The Metadata field can be used to provide additional information about the
	// cluster. It can be used for stats, logging, and varying filter behavior.
	// Fields should use reverse DNS notation to denote which entity within Envoy
	// will need the information. For instance, if the metadata is intended for
	// the Router filter, the filter name should be specified as *envoy.router*.
	Metadata *core.Metadata `protobuf:"bytes,25,opt,name=metadata,proto3" json:"metadata,omitempty"`
	// Determines how Envoy selects the protocol used to speak to upstream hosts.
	ProtocolSelection Cluster_ClusterProtocolSelection `protobuf:"varint,26,opt,name=protocol_selection,json=protocolSelection,proto3,enum=envoy.api.v2.Cluster_ClusterProtocolSelection" json:"protocol_selection,omitempty"`
	// Optional options for upstream connections.
	UpstreamConnectionOptions *UpstreamConnectionOptions `protobuf:"bytes,30,opt,name=upstream_connection_options,json=upstreamConnectionOptions,proto3" json:"upstream_connection_options,omitempty"`
	// If an upstream host becomes unhealthy (as determined by the configured health checks
	// or outlier detection), immediately close all connections to the failed host.
	//
	// .. note::
	//
	//   This is currently only supported for connections created by tcp_proxy.
	//
	// .. note::
	//
	//   The current implementation of this feature closes all connections immediately when
	//   the unhealthy status is detected. If there are a large number of connections open
	//   to an upstream host that becomes unhealthy, Envoy may spend a substantial amount of
	//   time exclusively closing these connections, and not processing any other traffic.
	CloseConnectionsOnHostHealthFailure bool `protobuf:"varint,31,opt,name=close_connections_on_host_health_failure,json=closeConnectionsOnHostHealthFailure,proto3" json:"close_connections_on_host_health_failure,omitempty"`
	// If this cluster uses EDS or STRICT_DNS to configure its hosts, immediately drain
	// connections from any hosts that are removed from service discovery.
	//
	// This only affects behavior for hosts that are being actively health checked.
	// If this flag is not set to true, Envoy will wait until the hosts fail active health
	// checking before removing it from the cluster.
	DrainConnectionsOnHostRemoval bool `protobuf:"varint,32,opt,name=drain_connections_on_host_removal,json=drainConnectionsOnHostRemoval,proto3" json:"drain_connections_on_host_removal,omitempty"`
	// An (optional) network filter chain, listed in the order the filters should be applied.
	// The chain will be applied to all outgoing connections that Envoy makes to the upstream
	// servers of this cluster.
	Filters []*cluster.Filter `protobuf:"bytes,40,rep,name=filters,proto3" json:"filters,omitempty"`
	// [#not-implemented-hide:] New mechanism for LB policy configuration. Used only if the
	// :ref:`lb_policy<envoy_api_field_Cluster.lb_policy>` field has the value
	// :ref:`LOAD_BALANCING_POLICY_CONFIG<envoy_api_enum_value_Cluster.LbPolicy.LOAD_BALANCING_POLICY_CONFIG>`.
	LoadBalancingPolicy *LoadBalancingPolicy `protobuf:"bytes,41,opt,name=load_balancing_policy,json=loadBalancingPolicy,proto3" json:"load_balancing_policy,omitempty"`
	// [#not-implemented-hide:]
	// If present, tells the client where to send load reports via LRS. If not present, the
	// client will fall back to a client-side default, which may be either (a) don't send any
	// load reports or (b) send load reports for all clusters to a single default server
	// (which may be configured in the bootstrap file).
	//
	// Note that if multiple clusters point to the same LRS server, the client may choose to
	// create a separate stream for each cluster or it may choose to coalesce the data for
	// multiple clusters onto a single stream. Either way, the client must make sure to send
	// the data for any given cluster on no more than one stream.
	//
	// [#next-major-version: In the v3 API, we should consider restructuring this somehow,
	// maybe by allowing LRS to go on the ADS stream, or maybe by moving some of the negotiation
	// from the LRS stream here.]
	LrsServer            *core.ConfigSource `protobuf:"bytes,42,opt,name=lrs_server,json=lrsServer,proto3" json:"lrs_server,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *Cluster) Reset()         { *m = Cluster{} }
func (m *Cluster) String() string { return proto.CompactTextString(m) }
func (*Cluster) ProtoMessage()    {}
func (*Cluster) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0}
}

func (m *Cluster) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Cluster.Unmarshal(m, b)
}
func (m *Cluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Cluster.Marshal(b, m, deterministic)
}
func (m *Cluster) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Cluster.Merge(m, src)
}
func (m *Cluster) XXX_Size() int {
	return xxx_messageInfo_Cluster.Size(m)
}
func (m *Cluster) XXX_DiscardUnknown() {
	xxx_messageInfo_Cluster.DiscardUnknown(m)
}

var xxx_messageInfo_Cluster proto.InternalMessageInfo

func (m *Cluster) GetTransportSocketMatches() []*Cluster_TransportSocketMatch {
	if m != nil {
		return m.TransportSocketMatches
	}
	return nil
}

func (m *Cluster) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Cluster) GetAltStatName() string {
	if m != nil {
		return m.AltStatName
	}
	return ""
}

type isCluster_ClusterDiscoveryType interface {
	isCluster_ClusterDiscoveryType()
}

type Cluster_Type struct {
	Type Cluster_DiscoveryType `protobuf:"varint,2,opt,name=type,proto3,enum=envoy.api.v2.Cluster_DiscoveryType,oneof"`
}

type Cluster_ClusterType struct {
	ClusterType *Cluster_CustomClusterType `protobuf:"bytes,38,opt,name=cluster_type,json=clusterType,proto3,oneof"`
}

func (*Cluster_Type) isCluster_ClusterDiscoveryType() {}

func (*Cluster_ClusterType) isCluster_ClusterDiscoveryType() {}

func (m *Cluster) GetClusterDiscoveryType() isCluster_ClusterDiscoveryType {
	if m != nil {
		return m.ClusterDiscoveryType
	}
	return nil
}

func (m *Cluster) GetType() Cluster_DiscoveryType {
	if x, ok := m.GetClusterDiscoveryType().(*Cluster_Type); ok {
		return x.Type
	}
	return Cluster_STATIC
}

func (m *Cluster) GetClusterType() *Cluster_CustomClusterType {
	if x, ok := m.GetClusterDiscoveryType().(*Cluster_ClusterType); ok {
		return x.ClusterType
	}
	return nil
}

func (m *Cluster) GetEdsClusterConfig() *Cluster_EdsClusterConfig {
	if m != nil {
		return m.EdsClusterConfig
	}
	return nil
}

func (m *Cluster) GetConnectTimeout() *duration.Duration {
	if m != nil {
		return m.ConnectTimeout
	}
	return nil
}

func (m *Cluster) GetPerConnectionBufferLimitBytes() *wrappers.UInt32Value {
	if m != nil {
		return m.PerConnectionBufferLimitBytes
	}
	return nil
}

func (m *Cluster) GetLbPolicy() Cluster_LbPolicy {
	if m != nil {
		return m.LbPolicy
	}
	return Cluster_ROUND_ROBIN
}

func (m *Cluster) GetHosts() []*core.Address {
	if m != nil {
		return m.Hosts
	}
	return nil
}

func (m *Cluster) GetLoadAssignment() *ClusterLoadAssignment {
	if m != nil {
		return m.LoadAssignment
	}
	return nil
}

func (m *Cluster) GetHealthChecks() []*core.HealthCheck {
	if m != nil {
		return m.HealthChecks
	}
	return nil
}

func (m *Cluster) GetMaxRequestsPerConnection() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxRequestsPerConnection
	}
	return nil
}

func (m *Cluster) GetCircuitBreakers() *cluster.CircuitBreakers {
	if m != nil {
		return m.CircuitBreakers
	}
	return nil
}

// Deprecated: Do not use.
func (m *Cluster) GetTlsContext() *auth.UpstreamTlsContext {
	if m != nil {
		return m.TlsContext
	}
	return nil
}

func (m *Cluster) GetCommonHttpProtocolOptions() *core.HttpProtocolOptions {
	if m != nil {
		return m.CommonHttpProtocolOptions
	}
	return nil
}

func (m *Cluster) GetHttpProtocolOptions() *core.Http1ProtocolOptions {
	if m != nil {
		return m.HttpProtocolOptions
	}
	return nil
}

func (m *Cluster) GetHttp2ProtocolOptions() *core.Http2ProtocolOptions {
	if m != nil {
		return m.Http2ProtocolOptions
	}
	return nil
}

// Deprecated: Do not use.
func (m *Cluster) GetExtensionProtocolOptions() map[string]*_struct.Struct {
	if m != nil {
		return m.ExtensionProtocolOptions
	}
	return nil
}

func (m *Cluster) GetTypedExtensionProtocolOptions() map[string]*any.Any {
	if m != nil {
		return m.TypedExtensionProtocolOptions
	}
	return nil
}

func (m *Cluster) GetDnsRefreshRate() *duration.Duration {
	if m != nil {
		return m.DnsRefreshRate
	}
	return nil
}

func (m *Cluster) GetDnsFailureRefreshRate() *Cluster_RefreshRate {
	if m != nil {
		return m.DnsFailureRefreshRate
	}
	return nil
}

func (m *Cluster) GetRespectDnsTtl() bool {
	if m != nil {
		return m.RespectDnsTtl
	}
	return false
}

func (m *Cluster) GetDnsLookupFamily() Cluster_DnsLookupFamily {
	if m != nil {
		return m.DnsLookupFamily
	}
	return Cluster_AUTO
}

func (m *Cluster) GetDnsResolvers() []*core.Address {
	if m != nil {
		return m.DnsResolvers
	}
	return nil
}

func (m *Cluster) GetOutlierDetection() *cluster.OutlierDetection {
	if m != nil {
		return m.OutlierDetection
	}
	return nil
}

func (m *Cluster) GetCleanupInterval() *duration.Duration {
	if m != nil {
		return m.CleanupInterval
	}
	return nil
}

func (m *Cluster) GetUpstreamBindConfig() *core.BindConfig {
	if m != nil {
		return m.UpstreamBindConfig
	}
	return nil
}

func (m *Cluster) GetLbSubsetConfig() *Cluster_LbSubsetConfig {
	if m != nil {
		return m.LbSubsetConfig
	}
	return nil
}

type isCluster_LbConfig interface {
	isCluster_LbConfig()
}

type Cluster_RingHashLbConfig_ struct {
	RingHashLbConfig *Cluster_RingHashLbConfig `protobuf:"bytes,23,opt,name=ring_hash_lb_config,json=ringHashLbConfig,proto3,oneof"`
}

type Cluster_OriginalDstLbConfig_ struct {
	OriginalDstLbConfig *Cluster_OriginalDstLbConfig `protobuf:"bytes,34,opt,name=original_dst_lb_config,json=originalDstLbConfig,proto3,oneof"`
}

type Cluster_LeastRequestLbConfig_ struct {
	LeastRequestLbConfig *Cluster_LeastRequestLbConfig `protobuf:"bytes,37,opt,name=least_request_lb_config,json=leastRequestLbConfig,proto3,oneof"`
}

func (*Cluster_RingHashLbConfig_) isCluster_LbConfig() {}

func (*Cluster_OriginalDstLbConfig_) isCluster_LbConfig() {}

func (*Cluster_LeastRequestLbConfig_) isCluster_LbConfig() {}

func (m *Cluster) GetLbConfig() isCluster_LbConfig {
	if m != nil {
		return m.LbConfig
	}
	return nil
}

func (m *Cluster) GetRingHashLbConfig() *Cluster_RingHashLbConfig {
	if x, ok := m.GetLbConfig().(*Cluster_RingHashLbConfig_); ok {
		return x.RingHashLbConfig
	}
	return nil
}

func (m *Cluster) GetOriginalDstLbConfig() *Cluster_OriginalDstLbConfig {
	if x, ok := m.GetLbConfig().(*Cluster_OriginalDstLbConfig_); ok {
		return x.OriginalDstLbConfig
	}
	return nil
}

func (m *Cluster) GetLeastRequestLbConfig() *Cluster_LeastRequestLbConfig {
	if x, ok := m.GetLbConfig().(*Cluster_LeastRequestLbConfig_); ok {
		return x.LeastRequestLbConfig
	}
	return nil
}

func (m *Cluster) GetCommonLbConfig() *Cluster_CommonLbConfig {
	if m != nil {
		return m.CommonLbConfig
	}
	return nil
}

func (m *Cluster) GetTransportSocket() *core.TransportSocket {
	if m != nil {
		return m.TransportSocket
	}
	return nil
}

func (m *Cluster) GetMetadata() *core.Metadata {
	if m != nil {
		return m.Metadata
	}
	return nil
}

func (m *Cluster) GetProtocolSelection() Cluster_ClusterProtocolSelection {
	if m != nil {
		return m.ProtocolSelection
	}
	return Cluster_USE_CONFIGURED_PROTOCOL
}

func (m *Cluster) GetUpstreamConnectionOptions() *UpstreamConnectionOptions {
	if m != nil {
		return m.UpstreamConnectionOptions
	}
	return nil
}

func (m *Cluster) GetCloseConnectionsOnHostHealthFailure() bool {
	if m != nil {
		return m.CloseConnectionsOnHostHealthFailure
	}
	return false
}

func (m *Cluster) GetDrainConnectionsOnHostRemoval() bool {
	if m != nil {
		return m.DrainConnectionsOnHostRemoval
	}
	return false
}

func (m *Cluster) GetFilters() []*cluster.Filter {
	if m != nil {
		return m.Filters
	}
	return nil
}

func (m *Cluster) GetLoadBalancingPolicy() *LoadBalancingPolicy {
	if m != nil {
		return m.LoadBalancingPolicy
	}
	return nil
}

func (m *Cluster) GetLrsServer() *core.ConfigSource {
	if m != nil {
		return m.LrsServer
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Cluster) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Cluster_Type)(nil),
		(*Cluster_ClusterType)(nil),
		(*Cluster_RingHashLbConfig_)(nil),
		(*Cluster_OriginalDstLbConfig_)(nil),
		(*Cluster_LeastRequestLbConfig_)(nil),
	}
}

// TransportSocketMatch specifies what transport socket config will be used
// when the match conditions are satisfied.
type Cluster_TransportSocketMatch struct {
	// The name of the match, used in stats generation.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Optional endpoint metadata match criteria.
	// The connection to the endpoint with metadata matching what is set in this field
	// will use the transport socket configuration specified here.
	// The endpoint's metadata entry in *envoy.transport_socket_match* is used to match
	// against the values specified in this field.
	Match *_struct.Struct `protobuf:"bytes,2,opt,name=match,proto3" json:"match,omitempty"`
	// The configuration of the transport socket.
	TransportSocket      *core.TransportSocket `protobuf:"bytes,3,opt,name=transport_socket,json=transportSocket,proto3" json:"transport_socket,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *Cluster_TransportSocketMatch) Reset()         { *m = Cluster_TransportSocketMatch{} }
func (m *Cluster_TransportSocketMatch) String() string { return proto.CompactTextString(m) }
func (*Cluster_TransportSocketMatch) ProtoMessage()    {}
func (*Cluster_TransportSocketMatch) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 0}
}

func (m *Cluster_TransportSocketMatch) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Cluster_TransportSocketMatch.Unmarshal(m, b)
}
func (m *Cluster_TransportSocketMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Cluster_TransportSocketMatch.Marshal(b, m, deterministic)
}
func (m *Cluster_TransportSocketMatch) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Cluster_TransportSocketMatch.Merge(m, src)
}
func (m *Cluster_TransportSocketMatch) XXX_Size() int {
	return xxx_messageInfo_Cluster_TransportSocketMatch.Size(m)
}
func (m *Cluster_TransportSocketMatch) XXX_DiscardUnknown() {
	xxx_messageInfo_Cluster_TransportSocketMatch.DiscardUnknown(m)
}

var xxx_messageInfo_Cluster_TransportSocketMatch proto.InternalMessageInfo

func (m *Cluster_TransportSocketMatch) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Cluster_TransportSocketMatch) GetMatch() *_struct.Struct {
	if m != nil {
		return m.Match
	}
	return nil
}

func (m *Cluster_TransportSocketMatch) GetTransportSocket() *core.TransportSocket {
	if m != nil {
		return m.TransportSocket
	}
	return nil
}

// Extended cluster type.
type Cluster_CustomClusterType struct {
	// The type of the cluster to instantiate. The name must match a supported cluster type.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Cluster specific configuration which depends on the cluster being instantiated.
	// See the supported cluster for further documentation.
	TypedConfig          *any.Any `protobuf:"bytes,2,opt,name=typed_config,json=typedConfig,proto3" json:"typed_config,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Cluster_CustomClusterType) Reset()         { *m = Cluster_CustomClusterType{} }
func (m *Cluster_CustomClusterType) String() string { return proto.CompactTextString(m) }
func (*Cluster_CustomClusterType) ProtoMessage()    {}
func (*Cluster_CustomClusterType) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 1}
}

func (m *Cluster_CustomClusterType) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Cluster_CustomClusterType.Unmarshal(m, b)
}
func (m *Cluster_CustomClusterType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Cluster_CustomClusterType.Marshal(b, m, deterministic)
}
func (m *Cluster_CustomClusterType) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Cluster_CustomClusterType.Merge(m, src)
}
func (m *Cluster_CustomClusterType) XXX_Size() int {
	return xxx_messageInfo_Cluster_CustomClusterType.Size(m)
}
func (m *Cluster_CustomClusterType) XXX_DiscardUnknown() {
	xxx_messageInfo_Cluster_CustomClusterType.DiscardUnknown(m)
}

var xxx_messageInfo_Cluster_CustomClusterType proto.InternalMessageInfo

func (m *Cluster_CustomClusterType) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Cluster_CustomClusterType) GetTypedConfig() *any.Any {
	if m != nil {
		return m.TypedConfig
	}
	return nil
}

// Only valid when discovery type is EDS.
type Cluster_EdsClusterConfig struct {
	// Configuration for the source of EDS updates for this Cluster.
	EdsConfig *core.ConfigSource `protobuf:"bytes,1,opt,name=eds_config,json=edsConfig,proto3" json:"eds_config,omitempty"`
	// Optional alternative to cluster name to present to EDS. This does not
	// have the same restrictions as cluster name, i.e. it may be arbitrary
	// length.
	ServiceName          string   `protobuf:"bytes,2,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Cluster_EdsClusterConfig) Reset()         { *m = Cluster_EdsClusterConfig{} }
func (m *Cluster_EdsClusterConfig) String() string { return proto.CompactTextString(m) }
func (*Cluster_EdsClusterConfig) ProtoMessage()    {}
func (*Cluster_EdsClusterConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 2}
}

func (m *Cluster_EdsClusterConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Cluster_EdsClusterConfig.Unmarshal(m, b)
}
func (m *Cluster_EdsClusterConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Cluster_EdsClusterConfig.Marshal(b, m, deterministic)
}
func (m *Cluster_EdsClusterConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Cluster_EdsClusterConfig.Merge(m, src)
}
func (m *Cluster_EdsClusterConfig) XXX_Size() int {
	return xxx_messageInfo_Cluster_EdsClusterConfig.Size(m)
}
func (m *Cluster_EdsClusterConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_Cluster_EdsClusterConfig.DiscardUnknown(m)
}

var xxx_messageInfo_Cluster_EdsClusterConfig proto.InternalMessageInfo

func (m *Cluster_EdsClusterConfig) GetEdsConfig() *core.ConfigSource {
	if m != nil {
		return m.EdsConfig
	}
	return nil
}

func (m *Cluster_EdsClusterConfig) GetServiceName() string {
	if m != nil {
		return m.ServiceName
	}
	return ""
}

// Optionally divide the endpoints in this cluster into subsets defined by
// endpoint metadata and selected by route and weighted cluster metadata.
// [#next-free-field: 8]
type Cluster_LbSubsetConfig struct {
	// The behavior used when no endpoint subset matches the selected route's
	// metadata. The value defaults to
	// :ref:`NO_FALLBACK<envoy_api_enum_value_Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.NO_FALLBACK>`.
	FallbackPolicy Cluster_LbSubsetConfig_LbSubsetFallbackPolicy `protobuf:"varint,1,opt,name=fallback_policy,json=fallbackPolicy,proto3,enum=envoy.api.v2.Cluster_LbSubsetConfig_LbSubsetFallbackPolicy" json:"fallback_policy,omitempty"`
	// Specifies the default subset of endpoints used during fallback if
	// fallback_policy is
	// :ref:`DEFAULT_SUBSET<envoy_api_enum_value_Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.DEFAULT_SUBSET>`.
	// Each field in default_subset is
	// compared to the matching LbEndpoint.Metadata under the *envoy.lb*
	// namespace. It is valid for no hosts to match, in which case the behavior
	// is the same as a fallback_policy of
	// :ref:`NO_FALLBACK<envoy_api_enum_value_Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.NO_FALLBACK>`.
	DefaultSubset *_struct.Struct `protobuf:"bytes,2,opt,name=default_subset,json=defaultSubset,proto3" json:"default_subset,omitempty"`
	// For each entry, LbEndpoint.Metadata's
	// *envoy.lb* namespace is traversed and a subset is created for each unique
	// combination of key and value. For example:
	//
	// .. code-block:: json
	//
	//   { "subset_selectors": [
	//       { "keys": [ "version" ] },
	//       { "keys": [ "stage", "hardware_type" ] }
	//   ]}
	//
	// A subset is matched when the metadata from the selected route and
	// weighted cluster contains the same keys and values as the subset's
	// metadata. The same host may appear in multiple subsets.
	SubsetSelectors []*Cluster_LbSubsetConfig_LbSubsetSelector `protobuf:"bytes,3,rep,name=subset_selectors,json=subsetSelectors,proto3" json:"subset_selectors,omitempty"`
	// If true, routing to subsets will take into account the localities and locality weights of the
	// endpoints when making the routing decision.
	//
	// There are some potential pitfalls associated with enabling this feature, as the resulting
	// traffic split after applying both a subset match and locality weights might be undesirable.
	//
	// Consider for example a situation in which you have 50/50 split across two localities X/Y
	// which have 100 hosts each without subsetting. If the subset LB results in X having only 1
	// host selected but Y having 100, then a lot more load is being dumped on the single host in X
	// than originally anticipated in the load balancing assignment delivered via EDS.
	LocalityWeightAware bool `protobuf:"varint,4,opt,name=locality_weight_aware,json=localityWeightAware,proto3" json:"locality_weight_aware,omitempty"`
	// When used with locality_weight_aware, scales the weight of each locality by the ratio
	// of hosts in the subset vs hosts in the original subset. This aims to even out the load
	// going to an individual locality if said locality is disproportionately affected by the
	// subset predicate.
	ScaleLocalityWeight bool `protobuf:"varint,5,opt,name=scale_locality_weight,json=scaleLocalityWeight,proto3" json:"scale_locality_weight,omitempty"`
	// If true, when a fallback policy is configured and its corresponding subset fails to find
	// a host this will cause any host to be selected instead.
	//
	// This is useful when using the default subset as the fallback policy, given the default
	// subset might become empty. With this option enabled, if that happens the LB will attempt
	// to select a host from the entire cluster.
	PanicModeAny bool `protobuf:"varint,6,opt,name=panic_mode_any,json=panicModeAny,proto3" json:"panic_mode_any,omitempty"`
	// If true, metadata specified for a metadata key will be matched against the corresponding
	// endpoint metadata if the endpoint metadata matches the value exactly OR it is a list value
	// and any of the elements in the list matches the criteria.
	ListAsAny            bool     `protobuf:"varint,7,opt,name=list_as_any,json=listAsAny,proto3" json:"list_as_any,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Cluster_LbSubsetConfig) Reset()         { *m = Cluster_LbSubsetConfig{} }
func (m *Cluster_LbSubsetConfig) String() string { return proto.CompactTextString(m) }
func (*Cluster_LbSubsetConfig) ProtoMessage()    {}
func (*Cluster_LbSubsetConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 3}
}

func (m *Cluster_LbSubsetConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Cluster_LbSubsetConfig.Unmarshal(m, b)
}
func (m *Cluster_LbSubsetConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Cluster_LbSubsetConfig.Marshal(b, m, deterministic)
}
func (m *Cluster_LbSubsetConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Cluster_LbSubsetConfig.Merge(m, src)
}
func (m *Cluster_LbSubsetConfig) XXX_Size() int {
	return xxx_messageInfo_Cluster_LbSubsetConfig.Size(m)
}
func (m *Cluster_LbSubsetConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_Cluster_LbSubsetConfig.DiscardUnknown(m)
}

var xxx_messageInfo_Cluster_LbSubsetConfig proto.InternalMessageInfo

func (m *Cluster_LbSubsetConfig) GetFallbackPolicy() Cluster_LbSubsetConfig_LbSubsetFallbackPolicy {
	if m != nil {
		return m.FallbackPolicy
	}
	return Cluster_LbSubsetConfig_NO_FALLBACK
}

func (m *Cluster_LbSubsetConfig) GetDefaultSubset() *_struct.Struct {
	if m != nil {
		return m.DefaultSubset
	}
	return nil
}

func (m *Cluster_LbSubsetConfig) GetSubsetSelectors() []*Cluster_LbSubsetConfig_LbSubsetSelector {
	if m != nil {
		return m.SubsetSelectors
	}
	return nil
}

func (m *Cluster_LbSubsetConfig) GetLocalityWeightAware() bool {
	if m != nil {
		return m.LocalityWeightAware
	}
	return false
}

func (m *Cluster_LbSubsetConfig) GetScaleLocalityWeight() bool {
	if m != nil {
		return m.ScaleLocalityWeight
	}
	return false
}

func (m *Cluster_LbSubsetConfig) GetPanicModeAny() bool {
	if m != nil {
		return m.PanicModeAny
	}
	return false
}

func (m *Cluster_LbSubsetConfig) GetListAsAny() bool {
	if m != nil {
		return m.ListAsAny
	}
	return false
}

// Specifications for subsets.
type Cluster_LbSubsetConfig_LbSubsetSelector struct {
	// List of keys to match with the weighted cluster metadata.
	Keys []string `protobuf:"bytes,1,rep,name=keys,proto3" json:"keys,omitempty"`
	// The behavior used when no endpoint subset matches the selected route's
	// metadata.
	FallbackPolicy       Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy `protobuf:"varint,2,opt,name=fallback_policy,json=fallbackPolicy,proto3,enum=envoy.api.v2.Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy" json:"fallback_policy,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                                                               `json:"-"`
	XXX_unrecognized     []byte                                                                 `json:"-"`
	XXX_sizecache        int32                                                                  `json:"-"`
}

func (m *Cluster_LbSubsetConfig_LbSubsetSelector) Reset() {
	*m = Cluster_LbSubsetConfig_LbSubsetSelector{}
}
func (m *Cluster_LbSubsetConfig_LbSubsetSelector) String() string { return proto.CompactTextString(m) }
func (*Cluster_LbSubsetConfig_LbSubsetSelector) ProtoMessage()    {}
func (*Cluster_LbSubsetConfig_LbSubsetSelector) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 3, 0}
}

func (m *Cluster_LbSubsetConfig_LbSubsetSelector) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Cluster_LbSubsetConfig_LbSubsetSelector.Unmarshal(m, b)
}
func (m *Cluster_LbSubsetConfig_LbSubsetSelector) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Cluster_LbSubsetConfig_LbSubsetSelector.Marshal(b, m, deterministic)
}
func (m *Cluster_LbSubsetConfig_LbSubsetSelector) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Cluster_LbSubsetConfig_LbSubsetSelector.Merge(m, src)
}
func (m *Cluster_LbSubsetConfig_LbSubsetSelector) XXX_Size() int {
	return xxx_messageInfo_Cluster_LbSubsetConfig_LbSubsetSelector.Size(m)
}
func (m *Cluster_LbSubsetConfig_LbSubsetSelector) XXX_DiscardUnknown() {
	xxx_messageInfo_Cluster_LbSubsetConfig_LbSubsetSelector.DiscardUnknown(m)
}

var xxx_messageInfo_Cluster_LbSubsetConfig_LbSubsetSelector proto.InternalMessageInfo

func (m *Cluster_LbSubsetConfig_LbSubsetSelector) GetKeys() []string {
	if m != nil {
		return m.Keys
	}
	return nil
}

func (m *Cluster_LbSubsetConfig_LbSubsetSelector) GetFallbackPolicy() Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy {
	if m != nil {
		return m.FallbackPolicy
	}
	return Cluster_LbSubsetConfig_LbSubsetSelector_NOT_DEFINED
}

// Specific configuration for the LeastRequest load balancing policy.
type Cluster_LeastRequestLbConfig struct {
	// The number of random healthy hosts from which the host with the fewest active requests will
	// be chosen. Defaults to 2 so that we perform two-choice selection if the field is not set.
	ChoiceCount          *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=choice_count,json=choiceCount,proto3" json:"choice_count,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *Cluster_LeastRequestLbConfig) Reset()         { *m = Cluster_LeastRequestLbConfig{} }
func (m *Cluster_LeastRequestLbConfig) String() string { return proto.CompactTextString(m) }
func (*Cluster_LeastRequestLbConfig) ProtoMessage()    {}
func (*Cluster_LeastRequestLbConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 4}
}

func (m *Cluster_LeastRequestLbConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Cluster_LeastRequestLbConfig.Unmarshal(m, b)
}
func (m *Cluster_LeastRequestLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Cluster_LeastRequestLbConfig.Marshal(b, m, deterministic)
}
func (m *Cluster_LeastRequestLbConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Cluster_LeastRequestLbConfig.Merge(m, src)
}
func (m *Cluster_LeastRequestLbConfig) XXX_Size() int {
	return xxx_messageInfo_Cluster_LeastRequestLbConfig.Size(m)
}
func (m *Cluster_LeastRequestLbConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_Cluster_LeastRequestLbConfig.DiscardUnknown(m)
}

var xxx_messageInfo_Cluster_LeastRequestLbConfig proto.InternalMessageInfo

func (m *Cluster_LeastRequestLbConfig) GetChoiceCount() *wrappers.UInt32Value {
	if m != nil {
		return m.ChoiceCount
	}
	return nil
}

// Specific configuration for the :ref:`RingHash<arch_overview_load_balancing_types_ring_hash>`
// load balancing policy.
type Cluster_RingHashLbConfig struct {
	// Minimum hash ring size. The larger the ring is (that is, the more hashes there are for each
	// provided host) the better the request distribution will reflect the desired weights. Defaults
	// to 1024 entries, and limited to 8M entries. See also
	// :ref:`maximum_ring_size<envoy_api_field_Cluster.RingHashLbConfig.maximum_ring_size>`.
	MinimumRingSize *wrappers.UInt64Value `protobuf:"bytes,1,opt,name=minimum_ring_size,json=minimumRingSize,proto3" json:"minimum_ring_size,omitempty"`
	// The hash function used to hash hosts onto the ketama ring. The value defaults to
	// :ref:`XX_HASH<envoy_api_enum_value_Cluster.RingHashLbConfig.HashFunction.XX_HASH>`.
	HashFunction Cluster_RingHashLbConfig_HashFunction `protobuf:"varint,3,opt,name=hash_function,json=hashFunction,proto3,enum=envoy.api.v2.Cluster_RingHashLbConfig_HashFunction" json:"hash_function,omitempty"`
	// Maximum hash ring size. Defaults to 8M entries, and limited to 8M entries, but can be lowered
	// to further constrain resource use. See also
	// :ref:`minimum_ring_size<envoy_api_field_Cluster.RingHashLbConfig.minimum_ring_size>`.
	MaximumRingSize      *wrappers.UInt64Value `protobuf:"bytes,4,opt,name=maximum_ring_size,json=maximumRingSize,proto3" json:"maximum_ring_size,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *Cluster_RingHashLbConfig) Reset()         { *m = Cluster_RingHashLbConfig{} }
func (m *Cluster_RingHashLbConfig) String() string { return proto.CompactTextString(m) }
func (*Cluster_RingHashLbConfig) ProtoMessage()    {}
func (*Cluster_RingHashLbConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 5}
}

func (m *Cluster_RingHashLbConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Cluster_RingHashLbConfig.Unmarshal(m, b)
}
func (m *Cluster_RingHashLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Cluster_RingHashLbConfig.Marshal(b, m, deterministic)
}
func (m *Cluster_RingHashLbConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Cluster_RingHashLbConfig.Merge(m, src)
}
func (m *Cluster_RingHashLbConfig) XXX_Size() int {
	return xxx_messageInfo_Cluster_RingHashLbConfig.Size(m)
}
func (m *Cluster_RingHashLbConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_Cluster_RingHashLbConfig.DiscardUnknown(m)
}

var xxx_messageInfo_Cluster_RingHashLbConfig proto.InternalMessageInfo

func (m *Cluster_RingHashLbConfig) GetMinimumRingSize() *wrappers.UInt64Value {
	if m != nil {
		return m.MinimumRingSize
	}
	return nil
}

func (m *Cluster_RingHashLbConfig) GetHashFunction() Cluster_RingHashLbConfig_HashFunction {
	if m != nil {
		return m.HashFunction
	}
	return Cluster_RingHashLbConfig_XX_HASH
}

func (m *Cluster_RingHashLbConfig) GetMaximumRingSize() *wrappers.UInt64Value {
	if m != nil {
		return m.MaximumRingSize
	}
	return nil
}

// Specific configuration for the
// :ref:`Original Destination <arch_overview_load_balancing_types_original_destination>`
// load balancing policy.
type Cluster_OriginalDstLbConfig struct {
	// When true, :ref:`x-envoy-original-dst-host
	// <config_http_conn_man_headers_x-envoy-original-dst-host>` can be used to override destination
	// address.
	//
	// .. attention::
	//
	//   This header isn't sanitized by default, so enabling this feature allows HTTP clients to
	//   route traffic to arbitrary hosts and/or ports, which may have serious security
	//   consequences.
	UseHttpHeader        bool     `protobuf:"varint,1,opt,name=use_http_header,json=useHttpHeader,proto3" json:"use_http_header,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Cluster_OriginalDstLbConfig) Reset()         { *m = Cluster_OriginalDstLbConfig{} }
func (m *Cluster_OriginalDstLbConfig) String() string { return proto.CompactTextString(m) }
func (*Cluster_OriginalDstLbConfig) ProtoMessage()    {}
func (*Cluster_OriginalDstLbConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 6}
}

func (m *Cluster_OriginalDstLbConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Cluster_OriginalDstLbConfig.Unmarshal(m, b)
}
func (m *Cluster_OriginalDstLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Cluster_OriginalDstLbConfig.Marshal(b, m, deterministic)
}
func (m *Cluster_OriginalDstLbConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Cluster_OriginalDstLbConfig.Merge(m, src)
}
func (m *Cluster_OriginalDstLbConfig) XXX_Size() int {
	return xxx_messageInfo_Cluster_OriginalDstLbConfig.Size(m)
}
func (m *Cluster_OriginalDstLbConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_Cluster_OriginalDstLbConfig.DiscardUnknown(m)
}

var xxx_messageInfo_Cluster_OriginalDstLbConfig proto.InternalMessageInfo

func (m *Cluster_OriginalDstLbConfig) GetUseHttpHeader() bool {
	if m != nil {
		return m.UseHttpHeader
	}
	return false
}

// Common configuration for all load balancer implementations.
// [#next-free-field: 7]
type Cluster_CommonLbConfig struct {
	// Configures the :ref:`healthy panic threshold <arch_overview_load_balancing_panic_threshold>`.
	// If not specified, the default is 50%.
	// To disable panic mode, set to 0%.
	//
	// .. note::
	//   The specified percent will be truncated to the nearest 1%.
	HealthyPanicThreshold *_type.Percent `protobuf:"bytes,1,opt,name=healthy_panic_threshold,json=healthyPanicThreshold,proto3" json:"healthy_panic_threshold,omitempty"`
	// Types that are valid to be assigned to LocalityConfigSpecifier:
	//	*Cluster_CommonLbConfig_ZoneAwareLbConfig_
	//	*Cluster_CommonLbConfig_LocalityWeightedLbConfig_
	LocalityConfigSpecifier isCluster_CommonLbConfig_LocalityConfigSpecifier `protobuf_oneof:"locality_config_specifier"`
	// If set, all health check/weight/metadata updates that happen within this duration will be
	// merged and delivered in one shot when the duration expires. The start of the duration is when
	// the first update happens. This is useful for big clusters, with potentially noisy deploys
	// that might trigger excessive CPU usage due to a constant stream of healthcheck state changes
	// or metadata updates. The first set of updates to be seen apply immediately (e.g.: a new
	// cluster). Please always keep in mind that the use of sandbox technologies may change this
	// behavior.
	//
	// If this is not set, we default to a merge window of 1000ms. To disable it, set the merge
	// window to 0.
	//
	// Note: merging does not apply to cluster membership changes (e.g.: adds/removes); this is
	// because merging those updates isn't currently safe. See
	// https://github.com/envoyproxy/envoy/pull/3941.
	UpdateMergeWindow *duration.Duration `protobuf:"bytes,4,opt,name=update_merge_window,json=updateMergeWindow,proto3" json:"update_merge_window,omitempty"`
	// If set to true, Envoy will not consider new hosts when computing load balancing weights until
	// they have been health checked for the first time. This will have no effect unless
	// active health checking is also configured.
	//
	// Ignoring a host means that for any load balancing calculations that adjust weights based
	// on the ratio of eligible hosts and total hosts (priority spillover, locality weighting and
	// panic mode) Envoy will exclude these hosts in the denominator.
	//
	// For example, with hosts in two priorities P0 and P1, where P0 looks like
	// {healthy, unhealthy (new), unhealthy (new)}
	// and where P1 looks like
	// {healthy, healthy}
	// all traffic will still hit P0, as 1 / (3 - 2) = 1.
	//
	// Enabling this will allow scaling up the number of hosts for a given cluster without entering
	// panic mode or triggering priority spillover, assuming the hosts pass the first health check.
	//
	// If panic mode is triggered, new hosts are still eligible for traffic; they simply do not
	// contribute to the calculation when deciding whether panic mode is enabled or not.
	IgnoreNewHostsUntilFirstHc bool `protobuf:"varint,5,opt,name=ignore_new_hosts_until_first_hc,json=ignoreNewHostsUntilFirstHc,proto3" json:"ignore_new_hosts_until_first_hc,omitempty"`
	// If set to `true`, the cluster manager will drain all existing
	// connections to upstream hosts whenever hosts are added or removed from the cluster.
	CloseConnectionsOnHostSetChange bool     `protobuf:"varint,6,opt,name=close_connections_on_host_set_change,json=closeConnectionsOnHostSetChange,proto3" json:"close_connections_on_host_set_change,omitempty"`
	XXX_NoUnkeyedLiteral            struct{} `json:"-"`
	XXX_unrecognized                []byte   `json:"-"`
	XXX_sizecache                   int32    `json:"-"`
}

func (m *Cluster_CommonLbConfig) Reset()         { *m = Cluster_CommonLbConfig{} }
func (m *Cluster_CommonLbConfig) String() string { return proto.CompactTextString(m) }
func (*Cluster_CommonLbConfig) ProtoMessage()    {}
func (*Cluster_CommonLbConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 7}
}

func (m *Cluster_CommonLbConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Cluster_CommonLbConfig.Unmarshal(m, b)
}
func (m *Cluster_CommonLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Cluster_CommonLbConfig.Marshal(b, m, deterministic)
}
func (m *Cluster_CommonLbConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Cluster_CommonLbConfig.Merge(m, src)
}
func (m *Cluster_CommonLbConfig) XXX_Size() int {
	return xxx_messageInfo_Cluster_CommonLbConfig.Size(m)
}
func (m *Cluster_CommonLbConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_Cluster_CommonLbConfig.DiscardUnknown(m)
}

var xxx_messageInfo_Cluster_CommonLbConfig proto.InternalMessageInfo

func (m *Cluster_CommonLbConfig) GetHealthyPanicThreshold() *_type.Percent {
	if m != nil {
		return m.HealthyPanicThreshold
	}
	return nil
}

type isCluster_CommonLbConfig_LocalityConfigSpecifier interface {
	isCluster_CommonLbConfig_LocalityConfigSpecifier()
}

type Cluster_CommonLbConfig_ZoneAwareLbConfig_ struct {
	ZoneAwareLbConfig *Cluster_CommonLbConfig_ZoneAwareLbConfig `protobuf:"bytes,2,opt,name=zone_aware_lb_config,json=zoneAwareLbConfig,proto3,oneof"`
}

type Cluster_CommonLbConfig_LocalityWeightedLbConfig_ struct {
	LocalityWeightedLbConfig *Cluster_CommonLbConfig_LocalityWeightedLbConfig `protobuf:"bytes,3,opt,name=locality_weighted_lb_config,json=localityWeightedLbConfig,proto3,oneof"`
}

func (*Cluster_CommonLbConfig_ZoneAwareLbConfig_) isCluster_CommonLbConfig_LocalityConfigSpecifier() {}

func (*Cluster_CommonLbConfig_LocalityWeightedLbConfig_) isCluster_CommonLbConfig_LocalityConfigSpecifier() {
}

func (m *Cluster_CommonLbConfig) GetLocalityConfigSpecifier() isCluster_CommonLbConfig_LocalityConfigSpecifier {
	if m != nil {
		return m.LocalityConfigSpecifier
	}
	return nil
}

func (m *Cluster_CommonLbConfig) GetZoneAwareLbConfig() *Cluster_CommonLbConfig_ZoneAwareLbConfig {
	if x, ok := m.GetLocalityConfigSpecifier().(*Cluster_CommonLbConfig_ZoneAwareLbConfig_); ok {
		return x.ZoneAwareLbConfig
	}
	return nil
}

func (m *Cluster_CommonLbConfig) GetLocalityWeightedLbConfig() *Cluster_CommonLbConfig_LocalityWeightedLbConfig {
	if x, ok := m.GetLocalityConfigSpecifier().(*Cluster_CommonLbConfig_LocalityWeightedLbConfig_); ok {
		return x.LocalityWeightedLbConfig
	}
	return nil
}

func (m *Cluster_CommonLbConfig) GetUpdateMergeWindow() *duration.Duration {
	if m != nil {
		return m.UpdateMergeWindow
	}
	return nil
}

func (m *Cluster_CommonLbConfig) GetIgnoreNewHostsUntilFirstHc() bool {
	if m != nil {
		return m.IgnoreNewHostsUntilFirstHc
	}
	return false
}

func (m *Cluster_CommonLbConfig) GetCloseConnectionsOnHostSetChange() bool {
	if m != nil {
		return m.CloseConnectionsOnHostSetChange
	}
	return false
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Cluster_CommonLbConfig) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Cluster_CommonLbConfig_ZoneAwareLbConfig_)(nil),
		(*Cluster_CommonLbConfig_LocalityWeightedLbConfig_)(nil),
	}
}

// Configuration for :ref:`zone aware routing
// <arch_overview_load_balancing_zone_aware_routing>`.
type Cluster_CommonLbConfig_ZoneAwareLbConfig struct {
	// Configures percentage of requests that will be considered for zone aware routing
	// if zone aware routing is configured. If not specified, the default is 100%.
	// * :ref:`runtime values <config_cluster_manager_cluster_runtime_zone_routing>`.
	// * :ref:`Zone aware routing support <arch_overview_load_balancing_zone_aware_routing>`.
	RoutingEnabled *_type.Percent `protobuf:"bytes,1,opt,name=routing_enabled,json=routingEnabled,proto3" json:"routing_enabled,omitempty"`
	// Configures minimum upstream cluster size required for zone aware routing
	// If upstream cluster size is less than specified, zone aware routing is not performed
	// even if zone aware routing is configured. If not specified, the default is 6.
	// * :ref:`runtime values <config_cluster_manager_cluster_runtime_zone_routing>`.
	// * :ref:`Zone aware routing support <arch_overview_load_balancing_zone_aware_routing>`.
	MinClusterSize *wrappers.UInt64Value `protobuf:"bytes,2,opt,name=min_cluster_size,json=minClusterSize,proto3" json:"min_cluster_size,omitempty"`
	// If set to true, Envoy will not consider any hosts when the cluster is in :ref:`panic
	// mode<arch_overview_load_balancing_panic_threshold>`. Instead, the cluster will fail all
	// requests as if all hosts are unhealthy. This can help avoid potentially overwhelming a
	// failing service.
	FailTrafficOnPanic   bool     `protobuf:"varint,3,opt,name=fail_traffic_on_panic,json=failTrafficOnPanic,proto3" json:"fail_traffic_on_panic,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) Reset() {
	*m = Cluster_CommonLbConfig_ZoneAwareLbConfig{}
}
func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) String() string { return proto.CompactTextString(m) }
func (*Cluster_CommonLbConfig_ZoneAwareLbConfig) ProtoMessage()    {}
func (*Cluster_CommonLbConfig_ZoneAwareLbConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 7, 0}
}

func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Cluster_CommonLbConfig_ZoneAwareLbConfig.Unmarshal(m, b)
}
func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Cluster_CommonLbConfig_ZoneAwareLbConfig.Marshal(b, m, deterministic)
}
func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Cluster_CommonLbConfig_ZoneAwareLbConfig.Merge(m, src)
}
func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) XXX_Size() int {
	return xxx_messageInfo_Cluster_CommonLbConfig_ZoneAwareLbConfig.Size(m)
}
func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_Cluster_CommonLbConfig_ZoneAwareLbConfig.DiscardUnknown(m)
}

var xxx_messageInfo_Cluster_CommonLbConfig_ZoneAwareLbConfig proto.InternalMessageInfo

func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) GetRoutingEnabled() *_type.Percent {
	if m != nil {
		return m.RoutingEnabled
	}
	return nil
}

func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) GetMinClusterSize() *wrappers.UInt64Value {
	if m != nil {
		return m.MinClusterSize
	}
	return nil
}

func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) GetFailTrafficOnPanic() bool {
	if m != nil {
		return m.FailTrafficOnPanic
	}
	return false
}

// Configuration for :ref:`locality weighted load balancing
// <arch_overview_load_balancing_locality_weighted_lb>`
type Cluster_CommonLbConfig_LocalityWeightedLbConfig struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) Reset() {
	*m = Cluster_CommonLbConfig_LocalityWeightedLbConfig{}
}
func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) String() string {
	return proto.CompactTextString(m)
}
func (*Cluster_CommonLbConfig_LocalityWeightedLbConfig) ProtoMessage() {}
func (*Cluster_CommonLbConfig_LocalityWeightedLbConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 7, 1}
}

func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Cluster_CommonLbConfig_LocalityWeightedLbConfig.Unmarshal(m, b)
}
func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Cluster_CommonLbConfig_LocalityWeightedLbConfig.Marshal(b, m, deterministic)
}
func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Cluster_CommonLbConfig_LocalityWeightedLbConfig.Merge(m, src)
}
func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) XXX_Size() int {
	return xxx_messageInfo_Cluster_CommonLbConfig_LocalityWeightedLbConfig.Size(m)
}
func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_Cluster_CommonLbConfig_LocalityWeightedLbConfig.DiscardUnknown(m)
}

var xxx_messageInfo_Cluster_CommonLbConfig_LocalityWeightedLbConfig proto.InternalMessageInfo

type Cluster_RefreshRate struct {
	// Specifies the base interval between refreshes. This parameter is required and must be greater
	// than zero and less than
	// :ref:`max_interval <envoy_api_field_Cluster.RefreshRate.max_interval>`.
	BaseInterval *duration.Duration `protobuf:"bytes,1,opt,name=base_interval,json=baseInterval,proto3" json:"base_interval,omitempty"`
	// Specifies the maximum interval between refreshes. This parameter is optional, but must be
	// greater than or equal to the
	// :ref:`base_interval <envoy_api_field_Cluster.RefreshRate.base_interval>`  if set. The default
	// is 10 times the :ref:`base_interval <envoy_api_field_Cluster.RefreshRate.base_interval>`.
	MaxInterval          *duration.Duration `protobuf:"bytes,2,opt,name=max_interval,json=maxInterval,proto3" json:"max_interval,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *Cluster_RefreshRate) Reset()         { *m = Cluster_RefreshRate{} }
func (m *Cluster_RefreshRate) String() string { return proto.CompactTextString(m) }
func (*Cluster_RefreshRate) ProtoMessage()    {}
func (*Cluster_RefreshRate) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{0, 8}
}

func (m *Cluster_RefreshRate) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Cluster_RefreshRate.Unmarshal(m, b)
}
func (m *Cluster_RefreshRate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Cluster_RefreshRate.Marshal(b, m, deterministic)
}
func (m *Cluster_RefreshRate) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Cluster_RefreshRate.Merge(m, src)
}
func (m *Cluster_RefreshRate) XXX_Size() int {
	return xxx_messageInfo_Cluster_RefreshRate.Size(m)
}
func (m *Cluster_RefreshRate) XXX_DiscardUnknown() {
	xxx_messageInfo_Cluster_RefreshRate.DiscardUnknown(m)
}

var xxx_messageInfo_Cluster_RefreshRate proto.InternalMessageInfo

func (m *Cluster_RefreshRate) GetBaseInterval() *duration.Duration {
	if m != nil {
		return m.BaseInterval
	}
	return nil
}

func (m *Cluster_RefreshRate) GetMaxInterval() *duration.Duration {
	if m != nil {
		return m.MaxInterval
	}
	return nil
}

// [#not-implemented-hide:] Extensible load balancing policy configuration.
//
// Every LB policy defined via this mechanism will be identified via a unique name using reverse
// DNS notation. If the policy needs configuration parameters, it must define a message for its
// own configuration, which will be stored in the config field. The name of the policy will tell
// clients which type of message they should expect to see in the config field.
//
// Note that there are cases where it is useful to be able to independently select LB policies
// for choosing a locality and for choosing an endpoint within that locality. For example, a
// given deployment may always use the same policy to choose the locality, but for choosing the
// endpoint within the locality, some clusters may use weighted-round-robin, while others may
// use some sort of session-based balancing.
//
// This can be accomplished via hierarchical LB policies, where the parent LB policy creates a
// child LB policy for each locality. For each request, the parent chooses the locality and then
// delegates to the child policy for that locality to choose the endpoint within the locality.
//
// To facilitate this, the config message for the top-level LB policy may include a field of
// type LoadBalancingPolicy that specifies the child policy.
type LoadBalancingPolicy struct {
	// Each client will iterate over the list in order and stop at the first policy that it
	// supports. This provides a mechanism for starting to use new LB policies that are not yet
	// supported by all clients.
	Policies             []*LoadBalancingPolicy_Policy `protobuf:"bytes,1,rep,name=policies,proto3" json:"policies,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
	XXX_unrecognized     []byte                        `json:"-"`
	XXX_sizecache        int32                         `json:"-"`
}

func (m *LoadBalancingPolicy) Reset()         { *m = LoadBalancingPolicy{} }
func (m *LoadBalancingPolicy) String() string { return proto.CompactTextString(m) }
func (*LoadBalancingPolicy) ProtoMessage()    {}
func (*LoadBalancingPolicy) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{1}
}

func (m *LoadBalancingPolicy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_LoadBalancingPolicy.Unmarshal(m, b)
}
func (m *LoadBalancingPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_LoadBalancingPolicy.Marshal(b, m, deterministic)
}
func (m *LoadBalancingPolicy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_LoadBalancingPolicy.Merge(m, src)
}
func (m *LoadBalancingPolicy) XXX_Size() int {
	return xxx_messageInfo_LoadBalancingPolicy.Size(m)
}
func (m *LoadBalancingPolicy) XXX_DiscardUnknown() {
	xxx_messageInfo_LoadBalancingPolicy.DiscardUnknown(m)
}

var xxx_messageInfo_LoadBalancingPolicy proto.InternalMessageInfo

func (m *LoadBalancingPolicy) GetPolicies() []*LoadBalancingPolicy_Policy {
	if m != nil {
		return m.Policies
	}
	return nil
}

type LoadBalancingPolicy_Policy struct {
	// Required. The name of the LB policy.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Optional config for the LB policy.
	// No more than one of these two fields may be populated.
	Config               *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` // Deprecated: Do not use.
	TypedConfig          *any.Any        `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3" json:"typed_config,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *LoadBalancingPolicy_Policy) Reset()         { *m = LoadBalancingPolicy_Policy{} }
func (m *LoadBalancingPolicy_Policy) String() string { return proto.CompactTextString(m) }
func (*LoadBalancingPolicy_Policy) ProtoMessage()    {}
func (*LoadBalancingPolicy_Policy) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{1, 0}
}

func (m *LoadBalancingPolicy_Policy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_LoadBalancingPolicy_Policy.Unmarshal(m, b)
}
func (m *LoadBalancingPolicy_Policy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_LoadBalancingPolicy_Policy.Marshal(b, m, deterministic)
}
func (m *LoadBalancingPolicy_Policy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_LoadBalancingPolicy_Policy.Merge(m, src)
}
func (m *LoadBalancingPolicy_Policy) XXX_Size() int {
	return xxx_messageInfo_LoadBalancingPolicy_Policy.Size(m)
}
func (m *LoadBalancingPolicy_Policy) XXX_DiscardUnknown() {
	xxx_messageInfo_LoadBalancingPolicy_Policy.DiscardUnknown(m)
}

var xxx_messageInfo_LoadBalancingPolicy_Policy proto.InternalMessageInfo

func (m *LoadBalancingPolicy_Policy) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

// Deprecated: Do not use.
func (m *LoadBalancingPolicy_Policy) GetConfig() *_struct.Struct {
	if m != nil {
		return m.Config
	}
	return nil
}

func (m *LoadBalancingPolicy_Policy) GetTypedConfig() *any.Any {
	if m != nil {
		return m.TypedConfig
	}
	return nil
}

// An extensible structure containing the address Envoy should bind to when
// establishing upstream connections.
type UpstreamBindConfig struct {
	// The address Envoy should bind to when establishing upstream connections.
	SourceAddress        *core.Address `protobuf:"bytes,1,opt,name=source_address,json=sourceAddress,proto3" json:"source_address,omitempty"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

func (m *UpstreamBindConfig) Reset()         { *m = UpstreamBindConfig{} }
func (m *UpstreamBindConfig) String() string { return proto.CompactTextString(m) }
func (*UpstreamBindConfig) ProtoMessage()    {}
func (*UpstreamBindConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{2}
}

func (m *UpstreamBindConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_UpstreamBindConfig.Unmarshal(m, b)
}
func (m *UpstreamBindConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_UpstreamBindConfig.Marshal(b, m, deterministic)
}
func (m *UpstreamBindConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_UpstreamBindConfig.Merge(m, src)
}
func (m *UpstreamBindConfig) XXX_Size() int {
	return xxx_messageInfo_UpstreamBindConfig.Size(m)
}
func (m *UpstreamBindConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_UpstreamBindConfig.DiscardUnknown(m)
}

var xxx_messageInfo_UpstreamBindConfig proto.InternalMessageInfo

func (m *UpstreamBindConfig) GetSourceAddress() *core.Address {
	if m != nil {
		return m.SourceAddress
	}
	return nil
}

type UpstreamConnectionOptions struct {
	// If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
	TcpKeepalive         *core.TcpKeepalive `protobuf:"bytes,1,opt,name=tcp_keepalive,json=tcpKeepalive,proto3" json:"tcp_keepalive,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *UpstreamConnectionOptions) Reset()         { *m = UpstreamConnectionOptions{} }
func (m *UpstreamConnectionOptions) String() string { return proto.CompactTextString(m) }
func (*UpstreamConnectionOptions) ProtoMessage()    {}
func (*UpstreamConnectionOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_e73f50fbb1daa302, []int{3}
}

func (m *UpstreamConnectionOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_UpstreamConnectionOptions.Unmarshal(m, b)
}
func (m *UpstreamConnectionOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_UpstreamConnectionOptions.Marshal(b, m, deterministic)
}
func (m *UpstreamConnectionOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_UpstreamConnectionOptions.Merge(m, src)
}
func (m *UpstreamConnectionOptions) XXX_Size() int {
	return xxx_messageInfo_UpstreamConnectionOptions.Size(m)
}
func (m *UpstreamConnectionOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_UpstreamConnectionOptions.DiscardUnknown(m)
}

var xxx_messageInfo_UpstreamConnectionOptions proto.InternalMessageInfo

func (m *UpstreamConnectionOptions) GetTcpKeepalive() *core.TcpKeepalive {
	if m != nil {
		return m.TcpKeepalive
	}
	return nil
}

func init() {
	proto.RegisterEnum("envoy.api.v2.Cluster_DiscoveryType", Cluster_DiscoveryType_name, Cluster_DiscoveryType_value)
	proto.RegisterEnum("envoy.api.v2.Cluster_LbPolicy", Cluster_LbPolicy_name, Cluster_LbPolicy_value)
	proto.RegisterEnum("envoy.api.v2.Cluster_DnsLookupFamily", Cluster_DnsLookupFamily_name, Cluster_DnsLookupFamily_value)
	proto.RegisterEnum("envoy.api.v2.Cluster_ClusterProtocolSelection", Cluster_ClusterProtocolSelection_name, Cluster_ClusterProtocolSelection_value)
	proto.RegisterEnum("envoy.api.v2.Cluster_LbSubsetConfig_LbSubsetFallbackPolicy", Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_name, Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_value)
	proto.RegisterEnum("envoy.api.v2.Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy", Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy_name, Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy_value)
	proto.RegisterEnum("envoy.api.v2.Cluster_RingHashLbConfig_HashFunction", Cluster_RingHashLbConfig_HashFunction_name, Cluster_RingHashLbConfig_HashFunction_value)
	proto.RegisterType((*Cluster)(nil), "envoy.api.v2.Cluster")
	proto.RegisterMapType((map[string]*_struct.Struct)(nil), "envoy.api.v2.Cluster.ExtensionProtocolOptionsEntry")
	proto.RegisterMapType((map[string]*any.Any)(nil), "envoy.api.v2.Cluster.TypedExtensionProtocolOptionsEntry")
	proto.RegisterType((*Cluster_TransportSocketMatch)(nil), "envoy.api.v2.Cluster.TransportSocketMatch")
	proto.RegisterType((*Cluster_CustomClusterType)(nil), "envoy.api.v2.Cluster.CustomClusterType")
	proto.RegisterType((*Cluster_EdsClusterConfig)(nil), "envoy.api.v2.Cluster.EdsClusterConfig")
	proto.RegisterType((*Cluster_LbSubsetConfig)(nil), "envoy.api.v2.Cluster.LbSubsetConfig")
	proto.RegisterType((*Cluster_LbSubsetConfig_LbSubsetSelector)(nil), "envoy.api.v2.Cluster.LbSubsetConfig.LbSubsetSelector")
	proto.RegisterType((*Cluster_LeastRequestLbConfig)(nil), "envoy.api.v2.Cluster.LeastRequestLbConfig")
	proto.RegisterType((*Cluster_RingHashLbConfig)(nil), "envoy.api.v2.Cluster.RingHashLbConfig")
	proto.RegisterType((*Cluster_OriginalDstLbConfig)(nil), "envoy.api.v2.Cluster.OriginalDstLbConfig")
	proto.RegisterType((*Cluster_CommonLbConfig)(nil), "envoy.api.v2.Cluster.CommonLbConfig")
	proto.RegisterType((*Cluster_CommonLbConfig_ZoneAwareLbConfig)(nil), "envoy.api.v2.Cluster.CommonLbConfig.ZoneAwareLbConfig")
	proto.RegisterType((*Cluster_CommonLbConfig_LocalityWeightedLbConfig)(nil), "envoy.api.v2.Cluster.CommonLbConfig.LocalityWeightedLbConfig")
	proto.RegisterType((*Cluster_RefreshRate)(nil), "envoy.api.v2.Cluster.RefreshRate")
	proto.RegisterType((*LoadBalancingPolicy)(nil), "envoy.api.v2.LoadBalancingPolicy")
	proto.RegisterType((*LoadBalancingPolicy_Policy)(nil), "envoy.api.v2.LoadBalancingPolicy.Policy")
	proto.RegisterType((*UpstreamBindConfig)(nil), "envoy.api.v2.UpstreamBindConfig")
	proto.RegisterType((*UpstreamConnectionOptions)(nil), "envoy.api.v2.UpstreamConnectionOptions")
}

func init() { proto.RegisterFile("envoy/api/v2/cds.proto", fileDescriptor_e73f50fbb1daa302) }

var fileDescriptor_e73f50fbb1daa302 = []byte{
	// 3064 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0xcd, 0x6f, 0x1b, 0x47,
	0x96, 0x57, 0x53, 0xb2, 0x44, 0x15, 0x3f, 0xd4, 0x2a, 0xc9, 0x52, 0x9b, 0x92, 0x6d, 0x99, 0xb1,
	0x13, 0x45, 0xc9, 0x52, 0x89, 0x9c, 0x38, 0x41, 0x76, 0x93, 0x05, 0xbf, 0x64, 0xc9, 0xa1, 0x48,
	0xa5, 0x49, 0xda, 0xf9, 0x40, 0x50, 0x2e, 0x76, 0x17, 0xc5, 0x86, 0x9a, 0xdd, 0xdc, 0xae, 0xa2,
	0x2c, 0xf9, 0xb0, 0xc8, 0x06, 0x0b, 0xec, 0x62, 0xaf, 0x7b, 0x9b, 0xe3, 0x1c, 0x06, 0x98, 0x5c,
	0x06, 0xf3, 0x0f, 0x0c, 0xe6, 0x3a, 0xc0, 0xdc, 0xe6, 0x32, 0x7f, 0xc0, 0x1c, 0xe6, 0x6f, 0xf0,
	0x69, 0x50, 0x1f, 0x4d, 0xf1, 0xa3, 0x29, 0x29, 0xc1, 0x9c, 0xa4, 0x7a, 0xef, 0xf7, 0x7e, 0xaf,
	0x58, 0x55, 0xef, 0xd5, 0x7b, 0xd5, 0x60, 0x8d, 0x78, 0x67, 0xfe, 0xc5, 0x2e, 0xee, 0x39, 0xbb,
	0x67, 0x7b, 0xbb, 0x96, 0x4d, 0x73, 0xbd, 0xc0, 0x67, 0x3e, 0x4c, 0x0a, 0x79, 0x0e, 0xf7, 0x9c,
	0xdc, 0xd9, 0x5e, 0x66, 0x73, 0x04, 0x85, 0xfb, 0xac, 0xb3, 0x6b, 0x91, 0x80, 0x49, 0x6c, 0x66,
	0x67, 0x94, 0xc3, 0xed, 0x53, 0x46, 0x82, 0x5d, 0xcb, 0x09, 0xac, 0xbe, 0xc3, 0x50, 0x2b, 0x20,
	0xf8, 0x94, 0x04, 0x0a, 0xfb, 0x20, 0x12, 0xdb, 0x76, 0x5c, 0x36, 0x80, 0xbc, 0x1f, 0x09, 0xf1,
	0xfb, 0xcc, 0x75, 0x48, 0x80, 0x6c, 0xc2, 0x88, 0xc5, 0x1c, 0xdf, 0x53, 0xe8, 0xfb, 0xa3, 0x68,
	0x3f, 0x20, 0xbb, 0xd8, 0xb6, 0x03, 0x42, 0xd5, 0x2f, 0x19, 0x9b, 0xbb, 0x00, 0xb4, 0x30, 0x25,
	0x4a, 0xfb, 0x68, 0x52, 0x6b, 0xf9, 0x5e, 0xdb, 0x39, 0x41, 0xd4, 0xef, 0x07, 0x56, 0x08, 0x7b,
	0x38, 0x09, 0xeb, 0x10, 0xec, 0xb2, 0x0e, 0xb2, 0x3a, 0xc4, 0x3a, 0x55, 0xa8, 0xad, 0x49, 0x94,
	0x50, 0x58, 0xbe, 0x1b, 0x39, 0x19, 0xdb, 0xa1, 0x96, 0x7f, 0x46, 0x82, 0x0b, 0xa5, 0x1d, 0xdd,
	0x0c, 0x12, 0x6e, 0x46, 0xc6, 0x90, 0x72, 0x76, 0xd1, 0x23, 0xbb, 0x3d, 0x12, 0x58, 0xc4, 0x0b,
	0x97, 0x7e, 0xf3, 0xc4, 0xf7, 0x4f, 0x5c, 0x22, 0x4c, 0xb0, 0xe7, 0xf9, 0x0c, 0xf3, 0xa5, 0x09,
	0xed, 0xee, 0x28, 0xad, 0x18, 0xb5, 0xfa, 0xed, 0x5d, 0xec, 0x85, 0xae, 0xee, 0x8d, 0xab, 0xec,
	0x7e, 0x80, 0x87, 0x96, 0x75, 0x73, 0x5c, 0x4f, 0x59, 0xd0, 0xb7, 0xd8, 0x34, 0xeb, 0x57, 0x01,
	0xee, 0xf5, 0x48, 0x10, 0x3a, 0x5e, 0x3f, 0xc3, 0xae, 0x63, 0x63, 0x46, 0x76, 0xc3, 0x7f, 0xa4,
	0x22, 0xfb, 0xeb, 0x8f, 0xc1, 0x42, 0x51, 0xee, 0x28, 0xb4, 0x81, 0xc1, 0x02, 0xec, 0xd1, 0x9e,
	0x1f, 0x30, 0x44, 0x7d, 0xeb, 0x94, 0x30, 0xd4, 0xc5, 0xcc, 0xea, 0x10, 0x6a, 0xbc, 0xb7, 0x35,
	0xbb, 0x9d, 0xd8, 0xdb, 0xc9, 0x0d, 0x9f, 0xc2, 0x9c, 0x32, 0xcc, 0x35, 0x42, 0xab, 0xba, 0x30,
	0x3a, 0xe2, 0x36, 0xe6, 0x1a, 0x8b, 0x90, 0x12, 0x0a, 0x37, 0xc0, 0x9c, 0x87, 0xbb, 0xc4, 0xd0,
	0xb6, 0xb4, 0xed, 0xc5, 0xc2, 0xc2, 0x9b, 0xc2, 0x5c, 0x10, 0xdb, 0xd2, 0x4c, 0x21, 0x84, 0x59,
	0x90, 0xc2, 0x2e, 0x43, 0x94, 0x61, 0x86, 0x04, 0x6a, 0x93, 0xa3, 0xcc, 0x04, 0x76, 0x59, 0x9d,
	0x61, 0x56, 0xe5, 0x98, 0x22, 0x98, 0xe3, 0x0b, 0x6f, 0xc4, 0xb6, 0xb4, 0xed, 0xf4, 0xde, 0x5b,
	0xd1, 0x53, 0x2a, 0x85, 0x3b, 0xd9, 0xb8, 0xe8, 0x91, 0x42, 0xfc, 0x4d, 0xe1, 0xd6, 0x8f, 0x5a,
	0x4c, 0xd7, 0x0e, 0x66, 0x4c, 0x61, 0x0c, 0x2b, 0x20, 0xa9, 0x0e, 0x32, 0x12, 0x64, 0x6f, 0x6f,
	0x69, 0xdb, 0x89, 0xbd, 0x77, 0xa2, 0xc9, 0x8a, 0x7d, 0xca, 0xfc, 0xae, 0x1a, 0x71, 0xc2, 0x83,
	0x19, 0x33, 0x61, 0x5d, 0x0e, 0x61, 0x03, 0x40, 0x62, 0x53, 0x14, 0x32, 0xca, 0x03, 0x6b, 0xcc,
	0x0a, 0xce, 0xb7, 0xa3, 0x39, 0xcb, 0x36, 0x55, 0xff, 0x16, 0x05, 0xda, 0xd4, 0xc9, 0x98, 0x04,
	0x56, 0xc0, 0x92, 0xe5, 0x7b, 0x1e, 0xb1, 0x18, 0x62, 0x4e, 0x97, 0xf8, 0x7d, 0x66, 0xcc, 0x09,
	0xca, 0x3b, 0x39, 0xb9, 0xdd, 0xb9, 0x70, 0xbb, 0x73, 0x25, 0x75, 0x58, 0xc4, 0x2f, 0xfd, 0x49,
	0x8b, 0xed, 0xcc, 0x98, 0x69, 0x65, 0xdb, 0x90, 0xa6, 0xb0, 0x0d, 0x1e, 0xf4, 0xe4, 0xdc, 0x3c,
	0x19, 0xaf, 0xa8, 0xd5, 0x6f, 0xb7, 0x49, 0x80, 0x5c, 0xa7, 0xcb, 0xb3, 0xc2, 0x05, 0x23, 0xd4,
	0xb8, 0x25, 0xf8, 0x37, 0x27, 0xf8, 0x9b, 0x87, 0x1e, 0x7b, 0xbc, 0xf7, 0x1c, 0xbb, 0x7d, 0x62,
	0xde, 0xed, 0x89, 0x19, 0x2a, 0x96, 0x82, 0x20, 0xa9, 0x70, 0x8e, 0x02, 0xa7, 0x80, 0x65, 0xb0,
	0xe8, 0xb6, 0x50, 0xcf, 0x77, 0x1d, 0xeb, 0xc2, 0x98, 0x17, 0x7b, 0x74, 0x2f, 0x7a, 0x09, 0x2a,
	0xad, 0x63, 0x81, 0xba, 0xdc, 0x1e, 0x33, 0xee, 0x2a, 0x19, 0xfc, 0x00, 0xdc, 0xea, 0xf8, 0x94,
	0x51, 0x63, 0x41, 0x9c, 0xbc, 0xcc, 0x28, 0x05, 0x0f, 0xe5, 0x5c, 0x5e, 0xa6, 0x15, 0x53, 0x02,
	0xf9, 0x72, 0xb9, 0x3e, 0xb6, 0x11, 0xa6, 0xd4, 0x39, 0xf1, 0xba, 0xc4, 0x63, 0xc6, 0x03, 0xf1,
	0x73, 0xa2, 0x8f, 0x48, 0xc5, 0xc7, 0x76, 0x7e, 0x00, 0x35, 0xd3, 0xee, 0xc8, 0x18, 0x16, 0x41,
	0x6a, 0x38, 0xa1, 0x50, 0x23, 0x2e, 0xe6, 0x71, 0x2f, 0x62, 0x1e, 0x07, 0x02, 0x57, 0xe4, 0x30,
	0x33, 0xd9, 0xb9, 0x1c, 0x50, 0xf8, 0x1d, 0xd8, 0xe8, 0xe2, 0x73, 0x14, 0x90, 0xff, 0xe8, 0x13,
	0xca, 0x28, 0x1a, 0xdd, 0x00, 0x63, 0xf1, 0x06, 0xab, 0x6d, 0x74, 0xf1, 0xb9, 0xa9, 0xec, 0x8f,
	0x87, 0x17, 0x1e, 0x1e, 0x03, 0x7d, 0x2c, 0xa5, 0x53, 0x03, 0x08, 0xc6, 0x47, 0x63, 0x93, 0x0c,
	0x8f, 0xb1, 0x44, 0x17, 0x14, 0xd8, 0x5c, 0xb2, 0x46, 0x05, 0xf0, 0x19, 0x48, 0x30, 0x97, 0xf2,
	0x19, 0x32, 0x72, 0xce, 0x8c, 0x44, 0x14, 0x19, 0xbf, 0x6b, 0x72, 0xcd, 0x1e, 0x65, 0x01, 0xc1,
	0xdd, 0x86, 0x4b, 0x8b, 0x12, 0x5c, 0x88, 0x19, 0x9a, 0x09, 0xd8, 0x60, 0x0c, 0x4f, 0xc0, 0xa6,
	0xe5, 0x77, 0xbb, 0xbe, 0x87, 0x3a, 0x8c, 0xf5, 0x50, 0x98, 0x76, 0x91, 0xdf, 0x13, 0x09, 0xd1,
	0xb8, 0x1b, 0x15, 0x1c, 0x72, 0x39, 0x19, 0xeb, 0x1d, 0x2b, 0x78, 0x4d, 0xa2, 0xcd, 0x3b, 0x92,
	0x2b, 0x42, 0x05, 0xbf, 0x03, 0xb7, 0xa3, 0x3d, 0xa4, 0xa2, 0x42, 0x7a, 0xe0, 0xe1, 0xc3, 0x71,
	0x17, 0x2b, 0x9d, 0x08, 0xf2, 0xef, 0xc1, 0x1a, 0x17, 0xef, 0x4d, 0xb2, 0xa7, 0xaf, 0x64, 0xdf,
	0x1b, 0x67, 0x5f, 0xed, 0x44, 0x48, 0x61, 0x1f, 0x64, 0xc8, 0x39, 0x23, 0x1e, 0xe5, 0xe1, 0x38,
	0xe1, 0xe2, 0x2d, 0x71, 0xe2, 0x1e, 0x4f, 0xc9, 0x1f, 0xa1, 0xdd, 0x18, 0x67, 0xd9, 0x63, 0xc1,
	0x85, 0xd8, 0x0d, 0x83, 0x4c, 0x81, 0xc0, 0xff, 0xd2, 0xc0, 0x16, 0xcf, 0x7a, 0x36, 0xba, 0xc2,
	0xfb, 0x43, 0xe1, 0xfd, 0xd3, 0x29, 0x19, 0x9f, 0x5b, 0x5f, 0x39, 0x05, 0xf3, 0x2e, 0xbb, 0x0a,
	0x03, 0xbf, 0x02, 0xba, 0xed, 0x51, 0x14, 0x90, 0x76, 0x40, 0x68, 0x07, 0x05, 0x98, 0x11, 0x43,
	0xbf, 0x2e, 0xbb, 0x25, 0xdf, 0x14, 0x16, 0x7f, 0xd2, 0xe6, 0x77, 0xe6, 0xf4, 0x3f, 0xfe, 0xf7,
	0xe7, 0x66, 0xda, 0xf6, 0xa8, 0x29, 0xed, 0x4d, 0xcc, 0x08, 0xfc, 0x16, 0x18, 0x9c, 0xb2, 0x8d,
	0x1d, 0xb7, 0x1f, 0x90, 0x51, 0xea, 0xf7, 0x05, 0xf5, 0x83, 0xe8, 0x5f, 0x33, 0x44, 0x62, 0xde,
	0xb6, 0x3d, 0xba, 0x2f, 0x19, 0x86, 0xb9, 0xdf, 0x06, 0x4b, 0x01, 0xa1, 0x3d, 0x9e, 0x8b, 0xb9,
	0x0f, 0xc6, 0x5c, 0xe3, 0x9d, 0x2d, 0x6d, 0x3b, 0x6e, 0xa6, 0x94, 0xb8, 0xe4, 0xd1, 0x06, 0x73,
	0xe1, 0x77, 0x60, 0x99, 0xeb, 0x5d, 0xdf, 0x3f, 0xed, 0xf7, 0x50, 0x1b, 0x77, 0x1d, 0xf7, 0xc2,
	0x58, 0x16, 0x59, 0xf0, 0xd1, 0x94, 0x9b, 0xca, 0xa3, 0x15, 0x81, 0xde, 0x17, 0xe0, 0xa1, 0x64,
	0xb8, 0x64, 0x8f, 0xaa, 0xe0, 0xbf, 0x83, 0x94, 0x5c, 0x33, 0xea, 0xbb, 0x67, 0x3c, 0xdc, 0xe1,
	0xb5, 0xb9, 0x31, 0x29, 0xd6, 0x48, 0xe1, 0x61, 0x1d, 0x2c, 0x4f, 0x94, 0x6d, 0xc6, 0x4a, 0x64,
	0x24, 0xaa, 0xd9, 0xd5, 0x24, 0xbc, 0x14, 0xa2, 0x4d, 0xdd, 0x1f, 0x93, 0xc0, 0x2a, 0xd0, 0x2d,
	0x97, 0x60, 0xaf, 0xdf, 0x43, 0x8e, 0xc7, 0x48, 0x70, 0x86, 0x5d, 0x63, 0xf5, 0xe6, 0xf7, 0xd4,
	0x92, 0x32, 0x3e, 0x54, 0xb6, 0xb0, 0x06, 0x56, 0xfb, 0x2a, 0xbf, 0xa0, 0x96, 0xe3, 0xd9, 0xe1,
	0x75, 0x7a, 0x5b, 0x70, 0xde, 0x8d, 0xf8, 0xb1, 0x05, 0xc7, 0xb3, 0xd5, 0x2d, 0x0a, 0x43, 0xd3,
	0x4b, 0x19, 0x9f, 0xa0, 0xdb, 0x42, 0xb4, 0xdf, 0xa2, 0x84, 0x85, 0x64, 0x6b, 0x82, 0xec, 0xe1,
	0xb4, 0x8b, 0xa9, 0x2e, 0xc0, 0x8a, 0x33, 0xed, 0x8e, 0x8c, 0xe1, 0x0b, 0xb0, 0x12, 0x38, 0xde,
	0x09, 0xea, 0x60, 0xda, 0x41, 0x6e, 0x2b, 0xa4, 0x5c, 0xbf, 0xea, 0xba, 0x37, 0x1d, 0xef, 0xe4,
	0x00, 0xd3, 0x4e, 0xa5, 0x25, 0x49, 0x0e, 0x34, 0x53, 0x0f, 0xc6, 0x64, 0xf0, 0x25, 0x58, 0xf3,
	0x03, 0xe7, 0xc4, 0xf1, 0xb0, 0x8b, 0x6c, 0xca, 0x86, 0xb8, 0xb3, 0x82, 0xfb, 0xdd, 0x68, 0xee,
	0x9a, 0xb2, 0x29, 0x51, 0x36, 0x44, 0xbf, 0xe2, 0x4f, 0x8a, 0xa1, 0x05, 0xd6, 0x5d, 0x82, 0x29,
	0x0b, 0xaf, 0xa4, 0x21, 0x17, 0x8f, 0x84, 0x8b, 0x29, 0x15, 0x5e, 0x85, 0x1b, 0xa9, 0x6b, 0x68,
	0xc8, 0xc7, 0xaa, 0x1b, 0x21, 0x17, 0x07, 0x42, 0xa6, 0xfe, 0x4b, 0xf6, 0x8d, 0xab, 0xd6, 0xbb,
	0x28, 0xd0, 0xa1, 0x3d, 0xaf, 0x5c, 0x86, 0xc7, 0xf0, 0x08, 0xe8, 0xe3, 0x75, 0xa9, 0x61, 0x08,
	0xbe, 0x6c, 0xc4, 0x61, 0x18, 0x2b, 0x46, 0xcd, 0xa5, 0xb1, 0x3a, 0x14, 0x7e, 0x02, 0xe2, 0x5d,
	0xc2, 0xb0, 0x8d, 0x19, 0x36, 0xee, 0x08, 0x9a, 0x8d, 0x08, 0x9a, 0x23, 0x05, 0x31, 0x07, 0x60,
	0xf8, 0x3d, 0x80, 0x83, 0x2c, 0x49, 0x89, 0xab, 0xc2, 0x27, 0x23, 0x82, 0x3b, 0x37, 0xe5, 0x97,
	0xc9, 0xbf, 0x61, 0xf2, 0xab, 0x87, 0x56, 0xe6, 0x72, 0x6f, 0x5c, 0x04, 0x4f, 0xc0, 0xc6, 0xe0,
	0xdc, 0x0f, 0x55, 0x69, 0x61, 0x3e, 0xbe, 0x17, 0x75, 0xe1, 0x84, 0x17, 0xf1, 0x65, 0x59, 0x30,
	0xb8, 0x31, 0xfb, 0xd3, 0x54, 0xb0, 0x09, 0xb6, 0x2d, 0xd7, 0xa7, 0x64, 0xc8, 0x0b, 0x45, 0xfc,
	0xa2, 0xf6, 0x29, 0x43, 0xaa, 0xe8, 0x51, 0x49, 0xd4, 0xb8, 0x2f, 0x92, 0xdc, 0x5b, 0x02, 0x7f,
	0xc9, 0x44, 0x6b, 0xde, 0x81, 0x4f, 0x99, 0x2c, 0x7c, 0x54, 0xb6, 0x84, 0x07, 0xe0, 0x81, 0x1d,
	0x60, 0xc7, 0x8b, 0xa4, 0x0d, 0x48, 0xd7, 0xe7, 0x89, 0x61, 0x4b, 0xf0, 0xdd, 0x15, 0xc0, 0x09,
	0x3e, 0x53, 0x82, 0xe0, 0x13, 0xb0, 0x20, 0x1b, 0x50, 0x6a, 0x6c, 0x8b, 0x0c, 0xb7, 0x19, 0x9d,
	0x9c, 0xf6, 0x05, 0xc8, 0x0c, 0xc1, 0xb0, 0x09, 0x6e, 0x8b, 0x0a, 0xb0, 0x85, 0x5d, 0xec, 0x59,
	0x3c, 0x44, 0x55, 0x19, 0xfa, 0x6e, 0x54, 0xf6, 0xe7, 0x05, 0x60, 0x21, 0x44, 0xca, 0xaa, 0xd3,
	0x5c, 0x71, 0x27, 0x85, 0xf0, 0x0b, 0x00, 0xdc, 0x80, 0x22, 0x4a, 0x82, 0x33, 0x12, 0x18, 0x3b,
	0x82, 0xeb, 0x7e, 0xc4, 0x91, 0x91, 0xc7, 0xb5, 0x2e, 0xda, 0x54, 0x73, 0xd1, 0x0d, 0x68, 0x5d,
	0x58, 0x64, 0x7e, 0xaf, 0x81, 0xd5, 0xa8, 0x16, 0x29, 0xb2, 0x15, 0xd2, 0xc3, 0x56, 0xe8, 0x5f,
	0xc0, 0x2d, 0xd1, 0x7c, 0x89, 0x3e, 0x27, 0xb1, 0xb7, 0x3e, 0x91, 0x4b, 0xeb, 0xa2, 0x01, 0x34,
	0x25, 0x2a, 0x32, 0x48, 0x66, 0x7f, 0x71, 0x90, 0x64, 0x1c, 0xb0, 0x3c, 0xd1, 0xf5, 0x5c, 0xdd,
	0xba, 0x7d, 0x02, 0x92, 0xb2, 0xa6, 0x50, 0x11, 0x2f, 0xa7, 0xbd, 0x3a, 0x31, 0xed, 0xbc, 0x77,
	0x61, 0x26, 0x04, 0x52, 0xae, 0x57, 0xa6, 0x0f, 0xf4, 0xf1, 0x66, 0x88, 0x2f, 0xb9, 0x68, 0xa8,
	0x24, 0x95, 0x76, 0xc3, 0x25, 0xe7, 0x1d, 0x94, 0xb4, 0x7f, 0x00, 0x92, 0x7c, 0xbb, 0x1c, 0x8b,
	0xc8, 0x36, 0x32, 0x26, 0xdb, 0x48, 0x25, 0xe3, 0x6d, 0x64, 0xe6, 0x0f, 0xf3, 0x20, 0x3d, 0x9a,
	0xe8, 0xa1, 0x07, 0x96, 0xda, 0xd8, 0x75, 0x5b, 0xd8, 0x3a, 0x0d, 0x4f, 0x8e, 0x26, 0xa2, 0xfb,
	0x5f, 0x6f, 0x72, 0x4f, 0x0c, 0x86, 0xfb, 0x8a, 0x63, 0xa2, 0xbb, 0x49, 0xb7, 0x47, 0x34, 0xf0,
	0x0b, 0x90, 0xb6, 0x49, 0x1b, 0xf7, 0x79, 0xc7, 0x2b, 0x2c, 0xaf, 0xdb, 0xeb, 0x94, 0x82, 0x4b,
	0x3f, 0xf0, 0x25, 0xd0, 0xd5, 0xad, 0x26, 0xd3, 0x91, 0x1f, 0x50, 0x63, 0x56, 0x04, 0xcc, 0xc7,
	0x3f, 0x6b, 0xc2, 0x75, 0x65, 0x6d, 0x2e, 0xd1, 0x91, 0x31, 0x85, 0x7b, 0x3c, 0xa2, 0x2c, 0xec,
	0x3a, 0xec, 0x02, 0xbd, 0x22, 0xce, 0x49, 0x87, 0x21, 0xfc, 0x0a, 0x07, 0x44, 0x34, 0xa2, 0x71,
	0x1e, 0x2e, 0x52, 0xf9, 0x42, 0xe8, 0xf2, 0x5c, 0xc5, 0x6d, 0xa8, 0x85, 0x5d, 0x82, 0xc6, 0x2c,
	0x45, 0x73, 0x19, 0x37, 0x57, 0x84, 0xb2, 0x32, 0x62, 0x08, 0x1f, 0x82, 0x74, 0x0f, 0x7b, 0x8e,
	0x85, 0xba, 0xbe, 0x4d, 0x10, 0xf6, 0x64, 0xe7, 0x18, 0x37, 0x93, 0x42, 0x7a, 0xe4, 0xdb, 0x24,
	0xef, 0x5d, 0xc0, 0x7b, 0x20, 0xe1, 0x3a, 0x94, 0x21, 0x4c, 0x05, 0x64, 0x41, 0x40, 0x16, 0xb9,
	0x28, 0x4f, 0xf3, 0xde, 0x45, 0xe6, 0x57, 0x31, 0xa0, 0x8f, 0xff, 0x26, 0x08, 0xc1, 0xdc, 0x29,
	0xb9, 0xa0, 0x86, 0xb6, 0x35, 0xbb, 0xbd, 0x68, 0x8a, 0xff, 0xe1, 0xff, 0x68, 0x93, 0x3b, 0x2d,
	0x9f, 0x13, 0x1a, 0xbf, 0x68, 0xe1, 0x26, 0x04, 0x37, 0x3d, 0x02, 0xd9, 0x0e, 0xb8, 0x77, 0xb5,
	0x2d, 0x5c, 0x02, 0x89, 0x6a, 0xad, 0x81, 0x4a, 0xe5, 0xfd, 0xc3, 0x6a, 0xb9, 0xa4, 0xcf, 0x48,
	0x01, 0xda, 0xcf, 0x57, 0x2a, 0x85, 0x7c, 0xf1, 0x4b, 0x5d, 0x83, 0x3a, 0x48, 0xe6, 0xab, 0xdf,
	0xa0, 0x72, 0xb5, 0x74, 0x5c, 0x3b, 0xac, 0x36, 0xf4, 0x18, 0x84, 0x20, 0x5d, 0x2a, 0xef, 0xe7,
	0x9b, 0x95, 0x06, 0xaa, 0x37, 0x0b, 0xf5, 0x72, 0x43, 0x9f, 0xcd, 0xd6, 0xc0, 0x5a, 0xf4, 0x01,
	0x1d, 0x27, 0x9c, 0x99, 0x20, 0xd4, 0x22, 0x08, 0x63, 0x99, 0x97, 0x60, 0x35, 0xaa, 0x2c, 0x80,
	0x07, 0x20, 0x69, 0x75, 0x7c, 0x1e, 0x7a, 0x96, 0xdf, 0xf7, 0x98, 0x8a, 0xde, 0x2b, 0xbb, 0x5c,
	0x91, 0x4b, 0x76, 0x62, 0xdb, 0x31, 0x33, 0x21, 0x4d, 0x8b, 0xdc, 0x32, 0xf3, 0xd7, 0x18, 0xd0,
	0xc7, 0x0b, 0x27, 0xd8, 0x00, 0xcb, 0x5d, 0xc7, 0x73, 0xba, 0xfd, 0x2e, 0x12, 0x55, 0x18, 0x75,
	0x5e, 0x93, 0x2b, 0x7d, 0x3c, 0xf9, 0x48, 0xfa, 0x00, 0x6f, 0x0a, 0x0b, 0x7b, 0xb7, 0x8c, 0x1f,
	0x7e, 0xf8, 0x61, 0xce, 0x5c, 0x52, 0x14, 0x9c, 0xbd, 0xee, 0xbc, 0x26, 0xb0, 0x05, 0x52, 0xa2,
	0x9c, 0x6b, 0xf7, 0x3d, 0x79, 0xad, 0xcf, 0x8a, 0xe3, 0xf0, 0xf8, 0x66, 0xd5, 0x5c, 0x8e, 0x0f,
	0xf6, 0x95, 0xe9, 0xd0, 0x6e, 0x27, 0x3b, 0x43, 0x72, 0x31, 0x73, 0x7c, 0x3e, 0x36, 0xf3, 0xb9,
	0x9f, 0x3d, 0x73, 0x49, 0x11, 0xce, 0x3c, 0x9b, 0x03, 0xc9, 0x61, 0xef, 0x30, 0x01, 0x16, 0xbe,
	0xfe, 0x1a, 0x1d, 0xe4, 0xeb, 0x07, 0xfa, 0x0c, 0x5c, 0x06, 0xa9, 0xa3, 0xa6, 0x79, 0xd4, 0x34,
	0x85, 0x00, 0xed, 0xe9, 0xda, 0xb3, 0xb9, 0x78, 0x4c, 0x9f, 0xcd, 0x7c, 0x0e, 0x56, 0x22, 0xca,
	0x46, 0xde, 0xe6, 0xf4, 0x29, 0x91, 0x2d, 0x7b, 0x87, 0x60, 0x9b, 0x04, 0x62, 0x69, 0xe3, 0x66,
	0xaa, 0x4f, 0x09, 0x6f, 0x6c, 0x0f, 0x84, 0x30, 0xf3, 0xbb, 0x79, 0x90, 0x1e, 0xad, 0xda, 0xe0,
	0x97, 0x60, 0x5d, 0xd6, 0x0e, 0x17, 0x48, 0x86, 0x32, 0xeb, 0xf0, 0xee, 0xc9, 0x77, 0x6d, 0xb5,
	0x3b, 0x2b, 0x6a, 0x2d, 0x79, 0xee, 0xcf, 0x1d, 0xcb, 0x57, 0x53, 0xf3, 0xb6, 0xb2, 0x39, 0xe6,
	0x26, 0x8d, 0xd0, 0x02, 0x3a, 0x60, 0xf5, 0xb5, 0xef, 0x11, 0x99, 0x6c, 0x86, 0xca, 0x48, 0x99,
	0x1f, 0x9f, 0xdc, 0xa4, 0x8c, 0xcc, 0x7d, 0xeb, 0x7b, 0x44, 0x64, 0xa4, 0x41, 0xc1, 0x3a, 0x63,
	0x2e, 0xbf, 0x1e, 0x17, 0xc2, 0xff, 0x04, 0x1b, 0x63, 0x89, 0x8a, 0xd8, 0x43, 0x1e, 0xe5, 0x1d,
	0xfa, 0xf9, 0x8d, 0x3c, 0x8e, 0x26, 0x35, 0x62, 0x0f, 0x39, 0x36, 0xdc, 0x29, 0x3a, 0x78, 0x08,
	0x56, 0xfa, 0x3d, 0x1b, 0x33, 0x82, 0xba, 0x24, 0x38, 0x21, 0xe8, 0x95, 0xe3, 0xd9, 0xfe, 0xab,
	0x6b, 0x5f, 0xfa, 0xcc, 0x65, 0x69, 0x75, 0xc4, 0x8d, 0x5e, 0x08, 0x1b, 0x58, 0x04, 0xf7, 0x9d,
	0x13, 0xcf, 0x0f, 0x08, 0xf2, 0xc8, 0x2b, 0x51, 0x77, 0x51, 0xd4, 0xf7, 0x98, 0xe3, 0xa2, 0xb6,
	0x13, 0xf0, 0xda, 0xce, 0x52, 0x39, 0x38, 0x23, 0x61, 0x55, 0xf2, 0x8a, 0x97, 0x5d, 0xb4, 0xc9,
	0x31, 0xfb, 0x1c, 0x72, 0x60, 0xc1, 0x23, 0xf0, 0x70, 0x7a, 0x75, 0x28, 0x3a, 0xa8, 0x0e, 0xf6,
	0x4e, 0x88, 0x4a, 0xd0, 0xf7, 0xa3, 0x2b, 0xc3, 0x3a, 0x61, 0x45, 0x01, 0xcb, 0xfc, 0x59, 0x03,
	0xcb, 0x13, 0x3b, 0x01, 0xff, 0x0d, 0x2c, 0x05, 0x7e, 0x9f, 0xf1, 0x28, 0x20, 0x1e, 0x6e, 0xb9,
	0xe4, 0xca, 0x43, 0x92, 0x56, 0xd8, 0xb2, 0x84, 0xc2, 0x7d, 0xa0, 0x77, 0x79, 0x9d, 0xa9, 0x9e,
	0x5b, 0x45, 0x1c, 0xc5, 0xae, 0x8f, 0x23, 0x33, 0xdd, 0x75, 0x3c, 0xb5, 0x75, 0x22, 0xe8, 0x3f,
	0x04, 0xb7, 0x79, 0x9d, 0x8b, 0x58, 0x80, 0xdb, 0x6d, 0xc7, 0xe2, 0xbf, 0x52, 0x1c, 0x5d, 0xb1,
	0xe9, 0x71, 0x13, 0x72, 0x65, 0x43, 0xea, 0x6a, 0x9e, 0x38, 0xa1, 0x99, 0x0c, 0x30, 0xa6, 0xed,
	0x72, 0x61, 0x03, 0xdc, 0x19, 0x9c, 0xa4, 0xf0, 0x9b, 0x45, 0x8f, 0x58, 0x4e, 0xdb, 0x21, 0x41,
	0xe6, 0xb7, 0x1a, 0x48, 0x0c, 0x3f, 0x28, 0x54, 0x41, 0xaa, 0x85, 0x29, 0xb9, 0x6c, 0x99, 0xb5,
	0xeb, 0x5a, 0xe6, 0xf4, 0x9b, 0x42, 0xe2, 0x27, 0x2d, 0x1e, 0xd7, 0xd4, 0xf3, 0x47, 0x92, 0xdb,
	0x0f, 0xba, 0xe6, 0x67, 0x20, 0xd9, 0xc5, 0xe7, 0x97, 0x74, 0xb1, 0x9f, 0xf7, 0x96, 0x92, 0xe8,
	0xe2, 0xf3, 0x90, 0x2b, 0x63, 0x83, 0xbb, 0x57, 0xbe, 0xed, 0x40, 0x1d, 0xcc, 0x9e, 0x12, 0x59,
	0x1c, 0x2d, 0x9a, 0xfc, 0x5f, 0x5e, 0xad, 0x9e, 0xf1, 0x35, 0xbe, 0xb6, 0x5a, 0x15, 0xa8, 0xcf,
	0x62, 0x9f, 0x6a, 0x99, 0x36, 0xc8, 0x5e, 0xff, 0x8c, 0x14, 0xe1, 0x6a, 0x67, 0xd4, 0x55, 0x74,
	0x85, 0x79, 0xe9, 0x27, 0xfb, 0x02, 0xa4, 0x46, 0xbe, 0x06, 0x40, 0x00, 0xe6, 0xeb, 0x8d, 0x7c,
	0xe3, 0xb0, 0xa8, 0xcf, 0xc0, 0x34, 0x00, 0xf5, 0x86, 0x79, 0x58, 0x6c, 0xa0, 0x52, 0xb5, 0xae,
	0x6b, 0xfc, 0x2e, 0xac, 0xd4, 0x9e, 0x1e, 0x16, 0xf3, 0x15, 0x21, 0x88, 0xc1, 0x05, 0x30, 0x5b,
	0x2e, 0xd5, 0xf5, 0x59, 0x7e, 0x29, 0xd6, 0xcc, 0xc3, 0xa7, 0x87, 0x55, 0xae, 0xaa, 0x37, 0xf4,
	0xb9, 0xec, 0x6f, 0x34, 0x10, 0x0f, 0xdf, 0xb0, 0xb9, 0xa1, 0x59, 0x6b, 0x56, 0x4b, 0xc8, 0xac,
	0x15, 0x0e, 0xab, 0x32, 0xf5, 0x56, 0xca, 0xf9, 0x7a, 0x03, 0x99, 0xe5, 0xaf, 0x9a, 0xe5, 0x3a,
	0xbf, 0x45, 0x53, 0x60, 0xd1, 0x3c, 0xac, 0x3e, 0x95, 0xc9, 0x39, 0xc6, 0xe7, 0x61, 0xe6, 0xab,
	0xa5, 0xda, 0x91, 0x3e, 0x0b, 0xd7, 0xc1, 0xd2, 0x30, 0x3b, 0xaa, 0x14, 0xf4, 0xb9, 0x4c, 0x2c,
	0xae, 0x71, 0xd0, 0x51, 0xfe, 0x69, 0xa5, 0xfc, 0x5c, 0xbf, 0x05, 0x57, 0x81, 0x5e, 0xac, 0x34,
	0xeb, 0x8d, 0xb2, 0x89, 0x8e, 0xcd, 0xda, 0xf3, 0xc3, 0x52, 0xb9, 0xa4, 0xcf, 0xc3, 0x2d, 0xb0,
	0x59, 0xa9, 0xe5, 0x4b, 0xa8, 0x90, 0xaf, 0xe4, 0xab, 0x45, 0xce, 0x7f, 0x5c, 0xab, 0x1c, 0x16,
	0xbf, 0x41, 0xc5, 0x5a, 0x75, 0xff, 0xf0, 0xa9, 0xbe, 0x90, 0xfd, 0x18, 0x2c, 0x8d, 0xbd, 0x32,
	0xc1, 0x38, 0x98, 0xcb, 0x37, 0x1b, 0x35, 0x7d, 0x86, 0xdf, 0x17, 0xcf, 0x3f, 0x42, 0xb5, 0x6a,
	0xe5, 0x1b, 0x5d, 0x13, 0x83, 0x27, 0x72, 0x10, 0xcb, 0x36, 0x80, 0x31, 0xad, 0x7f, 0x85, 0x1b,
	0x60, 0xbd, 0x59, 0x2f, 0x2b, 0x17, 0x4d, 0xb3, 0x5c, 0xe2, 0x33, 0x6a, 0xd4, 0x8a, 0xb5, 0x8a,
	0x3e, 0x13, 0x2a, 0x4b, 0xb5, 0x17, 0xd5, 0x7a, 0xc3, 0x2c, 0xe7, 0x8f, 0x2e, 0x95, 0x5a, 0xc1,
	0x00, 0x6b, 0x61, 0xe0, 0x0e, 0x3e, 0xb7, 0x89, 0x6f, 0x30, 0x85, 0x84, 0xf8, 0x72, 0x20, 0x23,
	0xe7, 0xd9, 0x5c, 0x3c, 0xa9, 0xa7, 0x9e, 0xcd, 0xc5, 0x97, 0x74, 0x3d, 0xfb, 0x77, 0x0d, 0xac,
	0x44, 0x74, 0x6b, 0xb0, 0x04, 0xe2, 0xa2, 0x78, 0x73, 0x88, 0x2c, 0xef, 0x12, 0x7b, 0xdb, 0xd7,
	0xb6, 0x78, 0x39, 0xd5, 0xe9, 0x0d, 0x2c, 0x33, 0xff, 0xa7, 0x81, 0x79, 0x45, 0x08, 0x87, 0x1b,
	0x1c, 0xd5, 0xd7, 0x3c, 0x06, 0xf3, 0x23, 0x97, 0xcf, 0xb4, 0xa3, 0x2d, 0xde, 0x5c, 0x15, 0x74,
	0xa2, 0x19, 0x9a, 0xbd, 0x61, 0x33, 0x94, 0x7d, 0x01, 0x60, 0x73, 0xf2, 0x05, 0x2b, 0x0f, 0xd2,
	0xf2, 0xeb, 0x27, 0x52, 0x9f, 0x52, 0x55, 0xb6, 0xb8, 0xea, 0xe5, 0x2f, 0x25, 0x2d, 0xd4, 0x30,
	0x8b, 0xc1, 0x9d, 0xa9, 0x8f, 0x05, 0xb0, 0x04, 0x52, 0xcc, 0xea, 0xa1, 0x53, 0x42, 0x7a, 0xd8,
	0x75, 0xce, 0xc8, 0x15, 0x1d, 0x57, 0xc3, 0xea, 0x7d, 0x19, 0xc2, 0xcc, 0x24, 0x1b, 0x1a, 0xed,
	0xfd, 0x29, 0x06, 0xd6, 0xd5, 0x81, 0x19, 0x04, 0x5c, 0x5d, 0x76, 0x5c, 0xf0, 0x05, 0x48, 0xd7,
	0xa5, 0x73, 0x09, 0xa0, 0x70, 0xec, 0x4b, 0xca, 0xc0, 0x42, 0x95, 0x93, 0x99, 0xfb, 0x53, 0xf5,
	0xb4, 0xe7, 0x7b, 0x94, 0x64, 0x67, 0xb6, 0xb5, 0x0f, 0x34, 0xf8, 0x12, 0xa4, 0x4a, 0xc4, 0x65,
	0x78, 0xc0, 0x3b, 0xf6, 0xb5, 0x47, 0x28, 0x27, 0xc8, 0x1f, 0x5e, 0x0d, 0x1a, 0xf1, 0x40, 0x41,
	0x6a, 0x9f, 0x30, 0xab, 0xf3, 0xcf, 0x9b, 0xf9, 0x83, 0x1f, 0xff, 0xf2, 0xb7, 0xff, 0x8f, 0x6d,
	0x64, 0xd7, 0x46, 0xbe, 0x39, 0x7f, 0xa6, 0xc2, 0x82, 0x7e, 0xa6, 0xed, 0x14, 0xde, 0x03, 0x19,
	0xc7, 0x97, 0x3c, 0xbd, 0xc0, 0x3f, 0xbf, 0x18, 0xa1, 0x2c, 0xc4, 0x8b, 0x36, 0x15, 0x31, 0x79,
	0xac, 0xfd, 0xaf, 0xa6, 0xb5, 0xe6, 0xc5, 0x79, 0x7a, 0xfc, 0x8f, 0x00, 0x00, 0x00, 0xff, 0xff,
	0xae, 0x30, 0x22, 0xd4, 0x3c, 0x20, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// ClusterDiscoveryServiceClient is the client API for ClusterDiscoveryService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type ClusterDiscoveryServiceClient interface {
	StreamClusters(ctx context.Context, opts ...grpc.CallOption) (ClusterDiscoveryService_StreamClustersClient, error)
	DeltaClusters(ctx context.Context, opts ...grpc.CallOption) (ClusterDiscoveryService_DeltaClustersClient, error)
	FetchClusters(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error)
}

type clusterDiscoveryServiceClient struct {
	cc *grpc.ClientConn
}

func NewClusterDiscoveryServiceClient(cc *grpc.ClientConn) ClusterDiscoveryServiceClient {
	return &clusterDiscoveryServiceClient{cc}
}

func (c *clusterDiscoveryServiceClient) StreamClusters(ctx context.Context, opts ...grpc.CallOption) (ClusterDiscoveryService_StreamClustersClient, error) {
	stream, err := c.cc.NewStream(ctx, &_ClusterDiscoveryService_serviceDesc.Streams[0], "/envoy.api.v2.ClusterDiscoveryService/StreamClusters", opts...)
	if err != nil {
		return nil, err
	}
	x := &clusterDiscoveryServiceStreamClustersClient{stream}
	return x, nil
}

type ClusterDiscoveryService_StreamClustersClient interface {
	Send(*DiscoveryRequest) error
	Recv() (*DiscoveryResponse, error)
	grpc.ClientStream
}

type clusterDiscoveryServiceStreamClustersClient struct {
	grpc.ClientStream
}

func (x *clusterDiscoveryServiceStreamClustersClient) Send(m *DiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *clusterDiscoveryServiceStreamClustersClient) Recv() (*DiscoveryResponse, error) {
	m := new(DiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *clusterDiscoveryServiceClient) DeltaClusters(ctx context.Context, opts ...grpc.CallOption) (ClusterDiscoveryService_DeltaClustersClient, error) {
	stream, err := c.cc.NewStream(ctx, &_ClusterDiscoveryService_serviceDesc.Streams[1], "/envoy.api.v2.ClusterDiscoveryService/DeltaClusters", opts...)
	if err != nil {
		return nil, err
	}
	x := &clusterDiscoveryServiceDeltaClustersClient{stream}
	return x, nil
}

type ClusterDiscoveryService_DeltaClustersClient interface {
	Send(*DeltaDiscoveryRequest) error
	Recv() (*DeltaDiscoveryResponse, error)
	grpc.ClientStream
}

type clusterDiscoveryServiceDeltaClustersClient struct {
	grpc.ClientStream
}

func (x *clusterDiscoveryServiceDeltaClustersClient) Send(m *DeltaDiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *clusterDiscoveryServiceDeltaClustersClient) Recv() (*DeltaDiscoveryResponse, error) {
	m := new(DeltaDiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *clusterDiscoveryServiceClient) FetchClusters(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error) {
	out := new(DiscoveryResponse)
	err := c.cc.Invoke(ctx, "/envoy.api.v2.ClusterDiscoveryService/FetchClusters", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// ClusterDiscoveryServiceServer is the server API for ClusterDiscoveryService service.
type ClusterDiscoveryServiceServer interface {
	StreamClusters(ClusterDiscoveryService_StreamClustersServer) error
	DeltaClusters(ClusterDiscoveryService_DeltaClustersServer) error
	FetchClusters(context.Context, *DiscoveryRequest) (*DiscoveryResponse, error)
}

// UnimplementedClusterDiscoveryServiceServer can be embedded to have forward compatible implementations.
type UnimplementedClusterDiscoveryServiceServer struct {
}

func (*UnimplementedClusterDiscoveryServiceServer) StreamClusters(srv ClusterDiscoveryService_StreamClustersServer) error {
	return status.Errorf(codes.Unimplemented, "method StreamClusters not implemented")
}
func (*UnimplementedClusterDiscoveryServiceServer) DeltaClusters(srv ClusterDiscoveryService_DeltaClustersServer) error {
	return status.Errorf(codes.Unimplemented, "method DeltaClusters not implemented")
}
func (*UnimplementedClusterDiscoveryServiceServer) FetchClusters(ctx context.Context, req *DiscoveryRequest) (*DiscoveryResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method FetchClusters not implemented")
}

func RegisterClusterDiscoveryServiceServer(s *grpc.Server, srv ClusterDiscoveryServiceServer) {
	s.RegisterService(&_ClusterDiscoveryService_serviceDesc, srv)
}

func _ClusterDiscoveryService_StreamClusters_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(ClusterDiscoveryServiceServer).StreamClusters(&clusterDiscoveryServiceStreamClustersServer{stream})
}

type ClusterDiscoveryService_StreamClustersServer interface {
	Send(*DiscoveryResponse) error
	Recv() (*DiscoveryRequest, error)
	grpc.ServerStream
}

type clusterDiscoveryServiceStreamClustersServer struct {
	grpc.ServerStream
}

func (x *clusterDiscoveryServiceStreamClustersServer) Send(m *DiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *clusterDiscoveryServiceStreamClustersServer) Recv() (*DiscoveryRequest, error) {
	m := new(DiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _ClusterDiscoveryService_DeltaClusters_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(ClusterDiscoveryServiceServer).DeltaClusters(&clusterDiscoveryServiceDeltaClustersServer{stream})
}

type ClusterDiscoveryService_DeltaClustersServer interface {
	Send(*DeltaDiscoveryResponse) error
	Recv() (*DeltaDiscoveryRequest, error)
	grpc.ServerStream
}

type clusterDiscoveryServiceDeltaClustersServer struct {
	grpc.ServerStream
}

func (x *clusterDiscoveryServiceDeltaClustersServer) Send(m *DeltaDiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *clusterDiscoveryServiceDeltaClustersServer) Recv() (*DeltaDiscoveryRequest, error) {
	m := new(DeltaDiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _ClusterDiscoveryService_FetchClusters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(DiscoveryRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(ClusterDiscoveryServiceServer).FetchClusters(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/envoy.api.v2.ClusterDiscoveryService/FetchClusters",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(ClusterDiscoveryServiceServer).FetchClusters(ctx, req.(*DiscoveryRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _ClusterDiscoveryService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.api.v2.ClusterDiscoveryService",
	HandlerType: (*ClusterDiscoveryServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "FetchClusters",
			Handler:    _ClusterDiscoveryService_FetchClusters_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "StreamClusters",
			Handler:       _ClusterDiscoveryService_StreamClusters_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
		{
			StreamName:    "DeltaClusters",
			Handler:       _ClusterDiscoveryService_DeltaClusters_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
	},
	Metadata: "envoy/api/v2/cds.proto",
}
 0707010000005C000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000002E00000000cilium-proxy-20200109/go/envoy/api/v2/cluster 0707010000005D000081A4000003E800000064000000015E17A247000028C3000000000000000000000000000000000000004400000000cilium-proxy-20200109/go/envoy/api/v2/cluster/circuit_breaker.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/cluster/circuit_breaker.proto

package envoy_api_v2_cluster

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// :ref:`Circuit breaking<arch_overview_circuit_break>` settings can be
// specified individually for each defined priority.
type CircuitBreakers struct {
	// If multiple :ref:`Thresholds<envoy_api_msg_cluster.CircuitBreakers.Thresholds>`
	// are defined with the same :ref:`RoutingPriority<envoy_api_enum_core.RoutingPriority>`,
	// the first one in the list is used. If no Thresholds is defined for a given
	// :ref:`RoutingPriority<envoy_api_enum_core.RoutingPriority>`, the default values
	// are used.
	Thresholds           []*CircuitBreakers_Thresholds `protobuf:"bytes,1,rep,name=thresholds,proto3" json:"thresholds,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
	XXX_unrecognized     []byte                        `json:"-"`
	XXX_sizecache        int32                         `json:"-"`
}

func (m *CircuitBreakers) Reset()         { *m = CircuitBreakers{} }
func (m *CircuitBreakers) String() string { return proto.CompactTextString(m) }
func (*CircuitBreakers) ProtoMessage()    {}
func (*CircuitBreakers) Descriptor() ([]byte, []int) {
	return fileDescriptor_89bc8d4e21efdd79, []int{0}
}

func (m *CircuitBreakers) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_CircuitBreakers.Unmarshal(m, b)
}
func (m *CircuitBreakers) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_CircuitBreakers.Marshal(b, m, deterministic)
}
func (m *CircuitBreakers) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CircuitBreakers.Merge(m, src)
}
func (m *CircuitBreakers) XXX_Size() int {
	return xxx_messageInfo_CircuitBreakers.Size(m)
}
func (m *CircuitBreakers) XXX_DiscardUnknown() {
	xxx_messageInfo_CircuitBreakers.DiscardUnknown(m)
}

var xxx_messageInfo_CircuitBreakers proto.InternalMessageInfo

func (m *CircuitBreakers) GetThresholds() []*CircuitBreakers_Thresholds {
	if m != nil {
		return m.Thresholds
	}
	return nil
}

// A Thresholds defines CircuitBreaker settings for a
// :ref:`RoutingPriority<envoy_api_enum_core.RoutingPriority>`.
// [#next-free-field: 8]
type CircuitBreakers_Thresholds struct {
	// The :ref:`RoutingPriority<envoy_api_enum_core.RoutingPriority>`
	// the specified CircuitBreaker settings apply to.
	Priority core.RoutingPriority `protobuf:"varint,1,opt,name=priority,proto3,enum=envoy.api.v2.core.RoutingPriority" json:"priority,omitempty"`
	// The maximum number of connections that Envoy will make to the upstream
	// cluster. If not specified, the default is 1024.
	MaxConnections *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=max_connections,json=maxConnections,proto3" json:"max_connections,omitempty"`
	// The maximum number of pending requests that Envoy will allow to the
	// upstream cluster. If not specified, the default is 1024.
	MaxPendingRequests *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=max_pending_requests,json=maxPendingRequests,proto3" json:"max_pending_requests,omitempty"`
	// The maximum number of parallel requests that Envoy will make to the
	// upstream cluster. If not specified, the default is 1024.
	MaxRequests *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=max_requests,json=maxRequests,proto3" json:"max_requests,omitempty"`
	// The maximum number of parallel retries that Envoy will allow to the
	// upstream cluster. If not specified, the default is 3.
	MaxRetries *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=max_retries,json=maxRetries,proto3" json:"max_retries,omitempty"`
	// If track_remaining is true, then stats will be published that expose
	// the number of resources remaining until the circuit breakers open. If
	// not specified, the default is false.
	TrackRemaining bool `protobuf:"varint,6,opt,name=track_remaining,json=trackRemaining,proto3" json:"track_remaining,omitempty"`
	// The maximum number of connection pools per cluster that Envoy will concurrently support at
	// once. If not specified, the default is unlimited. Set this for clusters which create a
	// large number of connection pools. See
	// :ref:`Circuit Breaking <arch_overview_circuit_break_cluster_maximum_connection_pools>` for
	// more details.
	MaxConnectionPools   *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=max_connection_pools,json=maxConnectionPools,proto3" json:"max_connection_pools,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *CircuitBreakers_Thresholds) Reset()         { *m = CircuitBreakers_Thresholds{} }
func (m *CircuitBreakers_Thresholds) String() string { return proto.CompactTextString(m) }
func (*CircuitBreakers_Thresholds) ProtoMessage()    {}
func (*CircuitBreakers_Thresholds) Descriptor() ([]byte, []int) {
	return fileDescriptor_89bc8d4e21efdd79, []int{0, 0}
}

func (m *CircuitBreakers_Thresholds) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_CircuitBreakers_Thresholds.Unmarshal(m, b)
}
func (m *CircuitBreakers_Thresholds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_CircuitBreakers_Thresholds.Marshal(b, m, deterministic)
}
func (m *CircuitBreakers_Thresholds) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CircuitBreakers_Thresholds.Merge(m, src)
}
func (m *CircuitBreakers_Thresholds) XXX_Size() int {
	return xxx_messageInfo_CircuitBreakers_Thresholds.Size(m)
}
func (m *CircuitBreakers_Thresholds) XXX_DiscardUnknown() {
	xxx_messageInfo_CircuitBreakers_Thresholds.DiscardUnknown(m)
}

var xxx_messageInfo_CircuitBreakers_Thresholds proto.InternalMessageInfo

func (m *CircuitBreakers_Thresholds) GetPriority() core.RoutingPriority {
	if m != nil {
		return m.Priority
	}
	return core.RoutingPriority_DEFAULT
}

func (m *CircuitBreakers_Thresholds) GetMaxConnections() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxConnections
	}
	return nil
}

func (m *CircuitBreakers_Thresholds) GetMaxPendingRequests() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxPendingRequests
	}
	return nil
}

func (m *CircuitBreakers_Thresholds) GetMaxRequests() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxRequests
	}
	return nil
}

func (m *CircuitBreakers_Thresholds) GetMaxRetries() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxRetries
	}
	return nil
}

func (m *CircuitBreakers_Thresholds) GetTrackRemaining() bool {
	if m != nil {
		return m.TrackRemaining
	}
	return false
}

func (m *CircuitBreakers_Thresholds) GetMaxConnectionPools() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxConnectionPools
	}
	return nil
}

func init() {
	proto.RegisterType((*CircuitBreakers)(nil), "envoy.api.v2.cluster.CircuitBreakers")
	proto.RegisterType((*CircuitBreakers_Thresholds)(nil), "envoy.api.v2.cluster.CircuitBreakers.Thresholds")
}

func init() {
	proto.RegisterFile("envoy/api/v2/cluster/circuit_breaker.proto", fileDescriptor_89bc8d4e21efdd79)
}

var fileDescriptor_89bc8d4e21efdd79 = []byte{
	// 440 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xcf, 0x6e, 0xd3, 0x40,
	0x10, 0x87, 0xe5, 0xa4, 0x2d, 0xd1, 0x06, 0x25, 0xc8, 0x54, 0x60, 0x45, 0x15, 0x8a, 0x72, 0x21,
	0xe2, 0xb0, 0x46, 0xee, 0x19, 0x21, 0x1c, 0x55, 0x82, 0x4b, 0x65, 0x19, 0xe8, 0xd5, 0xda, 0x38,
	0x83, 0xbb, 0xaa, 0xbd, 0xb3, 0xcc, 0xae, 0x83, 0x73, 0xe5, 0x71, 0x78, 0x16, 0x9e, 0x83, 0x03,
	0x8f, 0xc0, 0x09, 0xc5, 0x9b, 0x3f, 0xb4, 0x0a, 0x52, 0x6e, 0xf6, 0xce, 0xef, 0xfb, 0x34, 0x3b,
	0x3b, 0xec, 0x15, 0xa8, 0x25, 0xae, 0x42, 0xa1, 0x65, 0xb8, 0x8c, 0xc2, 0xbc, 0xac, 0x8d, 0x05,
	0x0a, 0x73, 0x49, 0x79, 0x2d, 0x6d, 0x36, 0x27, 0x10, 0x77, 0x40, 0x5c, 0x13, 0x5a, 0xf4, 0xcf,
	0xdb, 0x2c, 0x17, 0x5a, 0xf2, 0x65, 0xc4, 0x37, 0xd9, 0xd1, 0xc5, 0x7d, 0x03, 0x12, 0x84, 0x73,
	0x61, 0xc0, 0x31, 0xa3, 0x17, 0x05, 0x62, 0x51, 0x42, 0xd8, 0xfe, 0xcd, 0xeb, 0x2f, 0xe1, 0x37,
	0x12, 0x5a, 0x03, 0x99, 0x4d, 0xfd, 0xf9, 0x52, 0x94, 0x72, 0x21, 0x2c, 0x84, 0xdb, 0x0f, 0x57,
	0x98, 0xfc, 0x3c, 0x61, 0xc3, 0x99, 0x6b, 0x23, 0x76, 0x5d, 0x18, 0x3f, 0x61, 0xcc, 0xde, 0x12,
	0x98, 0x5b, 0x2c, 0x17, 0x26, 0xf0, 0xc6, 0xdd, 0x69, 0x3f, 0x7a, 0xcd, 0x0f, 0x75, 0xc5, 0x1f,
	0xa0, 0xfc, 0xd3, 0x8e, 0x4b, 0xff, 0x71, 0x8c, 0x7e, 0x75, 0x19, 0xdb, 0x97, 0xfc, 0xf7, 0xac,
	0xa7, 0x49, 0x22, 0x49, 0xbb, 0x0a, 0xbc, 0xb1, 0x37, 0x1d, 0x44, 0x93, 0x07, 0x7a, 0x24, 0xe0,
	0x29, 0xd6, 0x56, 0xaa, 0x22, 0xd9, 0x24, 0xe3, 0xde, 0x9f, 0xf8, 0xf4, 0xbb, 0xd7, 0x79, 0xe2,
	0xa5, 0x3b, 0xda, 0xbf, 0x62, 0xc3, 0x4a, 0x34, 0x59, 0x8e, 0x4a, 0x41, 0x6e, 0x25, 0x2a, 0x13,
	0x74, 0xc6, 0xde, 0xb4, 0x1f, 0x5d, 0x70, 0x37, 0x11, 0xbe, 0x9d, 0x08, 0xff, 0xfc, 0x41, 0xd9,
	0xcb, 0xe8, 0x46, 0x94, 0x35, 0xa4, 0x83, 0x4a, 0x34, 0xb3, 0x3d, 0xe3, 0x5f, 0xb3, 0xf3, 0xb5,
	0x46, 0x83, 0x5a, 0x48, 0x55, 0x64, 0x04, 0x5f, 0x6b, 0x30, 0xd6, 0x04, 0xdd, 0x23, 0x5c, 0x7e,
	0x25, 0x9a, 0xc4, 0x81, 0xe9, 0x86, 0xf3, 0xdf, 0xb2, 0xc7, 0x6b, 0xdf, 0xce, 0x73, 0x72, 0x84,
	0xa7, 0x5f, 0x89, 0x66, 0x27, 0x78, 0xc3, 0xfa, 0x4e, 0x60, 0x49, 0x82, 0x09, 0x4e, 0x8f, 0xe0,
	0x59, 0xcb, 0xb7, 0x79, 0xff, 0x25, 0x1b, 0x5a, 0x12, 0xf9, 0x5d, 0x46, 0x50, 0x09, 0xa9, 0xa4,
	0x2a, 0x82, 0xb3, 0xb1, 0x37, 0xed, 0xa5, 0x83, 0xf6, 0x38, 0xdd, 0x9e, 0x6e, 0x2f, 0xbe, 0x9f,
	0x5f, 0xa6, 0x11, 0x4b, 0x13, 0x3c, 0x3a, 0xf2, 0xe2, 0xfb, 0x21, 0x26, 0x6b, 0x2e, 0xae, 0xd8,
	0x44, 0xa2, 0x7b, 0x4b, 0x4d, 0xd8, 0xac, 0x0e, 0x6e, 0x4d, 0xfc, 0xf4, 0xfe, 0xda, 0x24, 0x6b,
	0x7b, 0xe2, 0xfd, 0xe8, 0x3c, 0xbb, 0x6a, 0xd3, 0xef, 0xb4, 0xe4, 0x37, 0x11, 0x9f, 0xb9, 0xf4,
	0xf5, 0xc7, 0xdf, 0xff, 0x2b, 0xcc, 0xcf, 0xda, 0xc6, 0x2e, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff,
	0xe8, 0x54, 0x9a, 0x06, 0x5f, 0x03, 0x00, 0x00,
}
 0707010000005E000081A4000003E800000064000000015E17A24700001052000000000000000000000000000000000000003B00000000cilium-proxy-20200109/go/envoy/api/v2/cluster/filter.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/cluster/filter.proto

package envoy_api_v2_cluster

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#protodoc-title: Upstream filters]
//
// Upstream filters apply to the connections to the upstream cluster hosts.
type Filter struct {
	// The name of the filter to instantiate. The name must match a
	// :ref:`supported filter <config_network_filters>`.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Filter specific configuration which depends on the filter being
	// instantiated. See the supported filters for further documentation.
	TypedConfig          *any.Any `protobuf:"bytes,2,opt,name=typed_config,json=typedConfig,proto3" json:"typed_config,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Filter) Reset()         { *m = Filter{} }
func (m *Filter) String() string { return proto.CompactTextString(m) }
func (*Filter) ProtoMessage()    {}
func (*Filter) Descriptor() ([]byte, []int) {
	return fileDescriptor_8ce34c55b74b9243, []int{0}
}

func (m *Filter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Filter.Unmarshal(m, b)
}
func (m *Filter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Filter.Marshal(b, m, deterministic)
}
func (m *Filter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Filter.Merge(m, src)
}
func (m *Filter) XXX_Size() int {
	return xxx_messageInfo_Filter.Size(m)
}
func (m *Filter) XXX_DiscardUnknown() {
	xxx_messageInfo_Filter.DiscardUnknown(m)
}

var xxx_messageInfo_Filter proto.InternalMessageInfo

func (m *Filter) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Filter) GetTypedConfig() *any.Any {
	if m != nil {
		return m.TypedConfig
	}
	return nil
}

func init() {
	proto.RegisterType((*Filter)(nil), "envoy.api.v2.cluster.Filter")
}

func init() { proto.RegisterFile("envoy/api/v2/cluster/filter.proto", fileDescriptor_8ce34c55b74b9243) }

var fileDescriptor_8ce34c55b74b9243 = []byte{
	// 235 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x8e, 0xc1, 0x4a, 0x03, 0x31,
	0x10, 0x86, 0xc9, 0x52, 0x2a, 0x66, 0x3d, 0x2d, 0x45, 0x6b, 0xbd, 0xac, 0x3d, 0xf5, 0x34, 0x81,
	0xf5, 0xe0, 0xb9, 0x5b, 0xf4, 0x28, 0xa5, 0x82, 0x47, 0x25, 0x6d, 0x67, 0x97, 0xc0, 0x9a, 0x09,
	0x31, 0x0d, 0xe6, 0x95, 0x7c, 0x34, 0x1f, 0xc1, 0x93, 0x38, 0xb1, 0x37, 0xbd, 0x85, 0xfc, 0xdf,
	0xfc, 0xff, 0x27, 0xaf, 0xd1, 0x46, 0x4a, 0x4a, 0x3b, 0xa3, 0x62, 0xa3, 0x76, 0xc3, 0xe1, 0x2d,
	0xa0, 0x57, 0x9d, 0x19, 0x02, 0x7a, 0x70, 0x9e, 0x02, 0x55, 0x13, 0x46, 0x40, 0x3b, 0x03, 0xb1,
	0x81, 0x5f, 0x64, 0x76, 0xd9, 0x13, 0xf5, 0x03, 0x2a, 0x66, 0xb6, 0x87, 0x4e, 0x69, 0x9b, 0xf2,
	0xc1, 0xec, 0x22, 0xea, 0xc1, 0xec, 0x75, 0x40, 0x75, 0x7c, 0xe4, 0x60, 0xfe, 0x2c, 0xc7, 0xf7,
	0xdc, 0x5c, 0x5d, 0xc9, 0x91, 0xd5, 0xaf, 0x38, 0x15, 0xb5, 0x58, 0x9c, 0xb6, 0x27, 0x5f, 0xed,
	0xc8, 0x17, 0xb5, 0xd8, 0xf0, 0x67, 0x75, 0x2b, 0xcf, 0x42, 0x72, 0xb8, 0x7f, 0xd9, 0x91, 0xed,
	0x4c, 0x3f, 0x2d, 0x6a, 0xb1, 0x28, 0x9b, 0x09, 0xe4, 0x45, 0x38, 0x2e, 0xc2, 0xd2, 0xa6, 0x4d,
	0xc9, 0xe4, 0x8a, 0xc1, 0x16, 0xe5, 0xdc, 0x10, 0xb0, 0xae, 0xf3, 0xf4, 0x9e, 0xe0, 0x2f, 0xf3,
	0xb6, 0xcc, 0x0e, 0xeb, 0x9f, 0x9a, 0xb5, 0xf8, 0x28, 0xce, 0xef, 0x98, 0x5a, 0x3a, 0x03, 0x4f,
	0x0d, 0xac, 0x32, 0xf5, 0xf0, 0xf8, 0xf9, 0x5f, 0xb0, 0x1d, 0xb3, 0xc1, 0xcd, 0x77, 0x00, 0x00,
	0x00, 0xff, 0xff, 0x09, 0xf5, 0x6d, 0xed, 0x3c, 0x01, 0x00, 0x00,
}
  0707010000005F000081A4000003E800000064000000015E17A24700004BB6000000000000000000000000000000000000004600000000cilium-proxy-20200109/go/envoy/api/v2/cluster/outlier_detection.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/cluster/outlier_detection.proto

package envoy_api_v2_cluster

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// See the :ref:`architecture overview <arch_overview_outlier_detection>` for
// more information on outlier detection.
// [#next-free-field: 21]
type OutlierDetection struct {
	// The number of consecutive 5xx responses or local origin errors that are mapped
	// to 5xx error codes before a consecutive 5xx ejection
	// occurs. Defaults to 5.
	Consecutive_5Xx *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=consecutive_5xx,json=consecutive5xx,proto3" json:"consecutive_5xx,omitempty"`
	// The time interval between ejection analysis sweeps. This can result in
	// both new ejections as well as hosts being returned to service. Defaults
	// to 10000ms or 10s.
	Interval *duration.Duration `protobuf:"bytes,2,opt,name=interval,proto3" json:"interval,omitempty"`
	// The base time that a host is ejected for. The real time is equal to the
	// base time multiplied by the number of times the host has been ejected.
	// Defaults to 30000ms or 30s.
	BaseEjectionTime *duration.Duration `protobuf:"bytes,3,opt,name=base_ejection_time,json=baseEjectionTime,proto3" json:"base_ejection_time,omitempty"`
	// The maximum % of an upstream cluster that can be ejected due to outlier
	// detection. Defaults to 10% but will eject at least one host regardless of the value.
	MaxEjectionPercent *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=max_ejection_percent,json=maxEjectionPercent,proto3" json:"max_ejection_percent,omitempty"`
	// The % chance that a host will be actually ejected when an outlier status
	// is detected through consecutive 5xx. This setting can be used to disable
	// ejection or to ramp it up slowly. Defaults to 100.
	EnforcingConsecutive_5Xx *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=enforcing_consecutive_5xx,json=enforcingConsecutive5xx,proto3" json:"enforcing_consecutive_5xx,omitempty"`
	// The % chance that a host will be actually ejected when an outlier status
	// is detected through success rate statistics. This setting can be used to
	// disable ejection or to ramp it up slowly. Defaults to 100.
	EnforcingSuccessRate *wrappers.UInt32Value `protobuf:"bytes,6,opt,name=enforcing_success_rate,json=enforcingSuccessRate,proto3" json:"enforcing_success_rate,omitempty"`
	// The number of hosts in a cluster that must have enough request volume to
	// detect success rate outliers. If the number of hosts is less than this
	// setting, outlier detection via success rate statistics is not performed
	// for any host in the cluster. Defaults to 5.
	SuccessRateMinimumHosts *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=success_rate_minimum_hosts,json=successRateMinimumHosts,proto3" json:"success_rate_minimum_hosts,omitempty"`
	// The minimum number of total requests that must be collected in one
	// interval (as defined by the interval duration above) to include this host
	// in success rate based outlier detection. If the volume is lower than this
	// setting, outlier detection via success rate statistics is not performed
	// for that host. Defaults to 100.
	SuccessRateRequestVolume *wrappers.UInt32Value `protobuf:"bytes,8,opt,name=success_rate_request_volume,json=successRateRequestVolume,proto3" json:"success_rate_request_volume,omitempty"`
	// This factor is used to determine the ejection threshold for success rate
	// outlier ejection. The ejection threshold is the difference between the
	// mean success rate, and the product of this factor and the standard
	// deviation of the mean success rate: mean - (stdev *
	// success_rate_stdev_factor). This factor is divided by a thousand to get a
	// double. That is, if the desired factor is 1.9, the runtime value should
	// be 1900. Defaults to 1900.
	SuccessRateStdevFactor *wrappers.UInt32Value `protobuf:"bytes,9,opt,name=success_rate_stdev_factor,json=successRateStdevFactor,proto3" json:"success_rate_stdev_factor,omitempty"`
	// The number of consecutive gateway failures (502, 503, 504 status codes)
	// before a consecutive gateway failure ejection occurs. Defaults to 5.
	ConsecutiveGatewayFailure *wrappers.UInt32Value `protobuf:"bytes,10,opt,name=consecutive_gateway_failure,json=consecutiveGatewayFailure,proto3" json:"consecutive_gateway_failure,omitempty"`
	// The % chance that a host will be actually ejected when an outlier status
	// is detected through consecutive gateway failures. This setting can be
	// used to disable ejection or to ramp it up slowly. Defaults to 0.
	EnforcingConsecutiveGatewayFailure *wrappers.UInt32Value `protobuf:"bytes,11,opt,name=enforcing_consecutive_gateway_failure,json=enforcingConsecutiveGatewayFailure,proto3" json:"enforcing_consecutive_gateway_failure,omitempty"`
	// Determines whether to distinguish local origin failures from external errors. If set to true
	// the following configuration parameters are taken into account:
	// :ref:`consecutive_local_origin_failure<envoy_api_field_cluster.OutlierDetection.consecutive_local_origin_failure>`,
	// :ref:`enforcing_consecutive_local_origin_failure<envoy_api_field_cluster.OutlierDetection.enforcing_consecutive_local_origin_failure>`
	// and
	// :ref:`enforcing_local_origin_success_rate<envoy_api_field_cluster.OutlierDetection.enforcing_local_origin_success_rate>`.
	// Defaults to false.
	SplitExternalLocalOriginErrors bool `protobuf:"varint,12,opt,name=split_external_local_origin_errors,json=splitExternalLocalOriginErrors,proto3" json:"split_external_local_origin_errors,omitempty"`
	// The number of consecutive locally originated failures before ejection
	// occurs. Defaults to 5. Parameter takes effect only when
	// :ref:`split_external_local_origin_errors<envoy_api_field_cluster.OutlierDetection.split_external_local_origin_errors>`
	// is set to true.
	ConsecutiveLocalOriginFailure *wrappers.UInt32Value `protobuf:"bytes,13,opt,name=consecutive_local_origin_failure,json=consecutiveLocalOriginFailure,proto3" json:"consecutive_local_origin_failure,omitempty"`
	// The % chance that a host will be actually ejected when an outlier status
	// is detected through consecutive locally originated failures. This setting can be
	// used to disable ejection or to ramp it up slowly. Defaults to 100.
	// Parameter takes effect only when
	// :ref:`split_external_local_origin_errors<envoy_api_field_cluster.OutlierDetection.split_external_local_origin_errors>`
	// is set to true.
	EnforcingConsecutiveLocalOriginFailure *wrappers.UInt32Value `protobuf:"bytes,14,opt,name=enforcing_consecutive_local_origin_failure,json=enforcingConsecutiveLocalOriginFailure,proto3" json:"enforcing_consecutive_local_origin_failure,omitempty"`
	// The % chance that a host will be actually ejected when an outlier status
	// is detected through success rate statistics for locally originated errors.
	// This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.
	// Parameter takes effect only when
	// :ref:`split_external_local_origin_errors<envoy_api_field_cluster.OutlierDetection.split_external_local_origin_errors>`
	// is set to true.
	EnforcingLocalOriginSuccessRate *wrappers.UInt32Value `protobuf:"bytes,15,opt,name=enforcing_local_origin_success_rate,json=enforcingLocalOriginSuccessRate,proto3" json:"enforcing_local_origin_success_rate,omitempty"`
	// The failure percentage to use when determining failure percentage-based outlier detection. If
	// the failure percentage of a given host is greater than or equal to this value, it will be
	// ejected. Defaults to 85.
	FailurePercentageThreshold *wrappers.UInt32Value `protobuf:"bytes,16,opt,name=failure_percentage_threshold,json=failurePercentageThreshold,proto3" json:"failure_percentage_threshold,omitempty"`
	// The % chance that a host will be actually ejected when an outlier status is detected through
	// failure percentage statistics. This setting can be used to disable ejection or to ramp it up
	// slowly. Defaults to 0.
	//
	// [#next-major-version: setting this without setting failure_percentage_threshold should be
	// invalid in v4.]
	EnforcingFailurePercentage *wrappers.UInt32Value `protobuf:"bytes,17,opt,name=enforcing_failure_percentage,json=enforcingFailurePercentage,proto3" json:"enforcing_failure_percentage,omitempty"`
	// The % chance that a host will be actually ejected when an outlier status is detected through
	// local-origin failure percentage statistics. This setting can be used to disable ejection or to
	// ramp it up slowly. Defaults to 0.
	EnforcingFailurePercentageLocalOrigin *wrappers.UInt32Value `protobuf:"bytes,18,opt,name=enforcing_failure_percentage_local_origin,json=enforcingFailurePercentageLocalOrigin,proto3" json:"enforcing_failure_percentage_local_origin,omitempty"`
	// The minimum number of hosts in a cluster in order to perform failure percentage-based ejection.
	// If the total number of hosts in the cluster is less than this value, failure percentage-based
	// ejection will not be performed. Defaults to 5.
	FailurePercentageMinimumHosts *wrappers.UInt32Value `protobuf:"bytes,19,opt,name=failure_percentage_minimum_hosts,json=failurePercentageMinimumHosts,proto3" json:"failure_percentage_minimum_hosts,omitempty"`
	// The minimum number of total requests that must be collected in one interval (as defined by the
	// interval duration above) to perform failure percentage-based ejection for this host. If the
	// volume is lower than this setting, failure percentage-based ejection will not be performed for
	// this host. Defaults to 50.
	FailurePercentageRequestVolume *wrappers.UInt32Value `protobuf:"bytes,20,opt,name=failure_percentage_request_volume,json=failurePercentageRequestVolume,proto3" json:"failure_percentage_request_volume,omitempty"`
	XXX_NoUnkeyedLiteral           struct{}              `json:"-"`
	XXX_unrecognized               []byte                `json:"-"`
	XXX_sizecache                  int32                 `json:"-"`
}

func (m *OutlierDetection) Reset()         { *m = OutlierDetection{} }
func (m *OutlierDetection) String() string { return proto.CompactTextString(m) }
func (*OutlierDetection) ProtoMessage()    {}
func (*OutlierDetection) Descriptor() ([]byte, []int) {
	return fileDescriptor_56cd87362a3f00c9, []int{0}
}

func (m *OutlierDetection) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OutlierDetection.Unmarshal(m, b)
}
func (m *OutlierDetection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OutlierDetection.Marshal(b, m, deterministic)
}
func (m *OutlierDetection) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OutlierDetection.Merge(m, src)
}
func (m *OutlierDetection) XXX_Size() int {
	return xxx_messageInfo_OutlierDetection.Size(m)
}
func (m *OutlierDetection) XXX_DiscardUnknown() {
	xxx_messageInfo_OutlierDetection.DiscardUnknown(m)
}

var xxx_messageInfo_OutlierDetection proto.InternalMessageInfo

func (m *OutlierDetection) GetConsecutive_5Xx() *wrappers.UInt32Value {
	if m != nil {
		return m.Consecutive_5Xx
	}
	return nil
}

func (m *OutlierDetection) GetInterval() *duration.Duration {
	if m != nil {
		return m.Interval
	}
	return nil
}

func (m *OutlierDetection) GetBaseEjectionTime() *duration.Duration {
	if m != nil {
		return m.BaseEjectionTime
	}
	return nil
}

func (m *OutlierDetection) GetMaxEjectionPercent() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxEjectionPercent
	}
	return nil
}

func (m *OutlierDetection) GetEnforcingConsecutive_5Xx() *wrappers.UInt32Value {
	if m != nil {
		return m.EnforcingConsecutive_5Xx
	}
	return nil
}

func (m *OutlierDetection) GetEnforcingSuccessRate() *wrappers.UInt32Value {
	if m != nil {
		return m.EnforcingSuccessRate
	}
	return nil
}

func (m *OutlierDetection) GetSuccessRateMinimumHosts() *wrappers.UInt32Value {
	if m != nil {
		return m.SuccessRateMinimumHosts
	}
	return nil
}

func (m *OutlierDetection) GetSuccessRateRequestVolume() *wrappers.UInt32Value {
	if m != nil {
		return m.SuccessRateRequestVolume
	}
	return nil
}

func (m *OutlierDetection) GetSuccessRateStdevFactor() *wrappers.UInt32Value {
	if m != nil {
		return m.SuccessRateStdevFactor
	}
	return nil
}

func (m *OutlierDetection) GetConsecutiveGatewayFailure() *wrappers.UInt32Value {
	if m != nil {
		return m.ConsecutiveGatewayFailure
	}
	return nil
}

func (m *OutlierDetection) GetEnforcingConsecutiveGatewayFailure() *wrappers.UInt32Value {
	if m != nil {
		return m.EnforcingConsecutiveGatewayFailure
	}
	return nil
}

func (m *OutlierDetection) GetSplitExternalLocalOriginErrors() bool {
	if m != nil {
		return m.SplitExternalLocalOriginErrors
	}
	return false
}

func (m *OutlierDetection) GetConsecutiveLocalOriginFailure() *wrappers.UInt32Value {
	if m != nil {
		return m.ConsecutiveLocalOriginFailure
	}
	return nil
}

func (m *OutlierDetection) GetEnforcingConsecutiveLocalOriginFailure() *wrappers.UInt32Value {
	if m != nil {
		return m.EnforcingConsecutiveLocalOriginFailure
	}
	return nil
}

func (m *OutlierDetection) GetEnforcingLocalOriginSuccessRate() *wrappers.UInt32Value {
	if m != nil {
		return m.EnforcingLocalOriginSuccessRate
	}
	return nil
}

func (m *OutlierDetection) GetFailurePercentageThreshold() *wrappers.UInt32Value {
	if m != nil {
		return m.FailurePercentageThreshold
	}
	return nil
}

func (m *OutlierDetection) GetEnforcingFailurePercentage() *wrappers.UInt32Value {
	if m != nil {
		return m.EnforcingFailurePercentage
	}
	return nil
}

func (m *OutlierDetection) GetEnforcingFailurePercentageLocalOrigin() *wrappers.UInt32Value {
	if m != nil {
		return m.EnforcingFailurePercentageLocalOrigin
	}
	return nil
}

func (m *OutlierDetection) GetFailurePercentageMinimumHosts() *wrappers.UInt32Value {
	if m != nil {
		return m.FailurePercentageMinimumHosts
	}
	return nil
}

func (m *OutlierDetection) GetFailurePercentageRequestVolume() *wrappers.UInt32Value {
	if m != nil {
		return m.FailurePercentageRequestVolume
	}
	return nil
}

func init() {
	proto.RegisterType((*OutlierDetection)(nil), "envoy.api.v2.cluster.OutlierDetection")
}

func init() {
	proto.RegisterFile("envoy/api/v2/cluster/outlier_detection.proto", fileDescriptor_56cd87362a3f00c9)
}

var fileDescriptor_56cd87362a3f00c9 = []byte{
	// 731 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x96, 0xdd, 0x4e, 0xdb, 0x48,
	0x14, 0xc7, 0x37, 0x59, 0x3e, 0xb2, 0xc3, 0x2e, 0xb0, 0xb3, 0x59, 0x70, 0x80, 0x65, 0x69, 0x2a,
	0x2a, 0x8a, 0x2a, 0x47, 0x0a, 0xe2, 0xba, 0x6a, 0x20, 0xf4, 0x43, 0x6d, 0x49, 0x03, 0x05, 0x55,
	0x54, 0x1a, 0x0d, 0xce, 0x89, 0x99, 0xca, 0xf6, 0xb8, 0x33, 0x63, 0x63, 0xae, 0xaa, 0xbe, 0x0e,
	0x0f, 0xd1, 0x07, 0xea, 0x23, 0x70, 0x55, 0xc5, 0x8e, 0x13, 0x3b, 0x31, 0xad, 0x7d, 0x17, 0x69,
	0xce, 0xff, 0xf7, 0x3b, 0x73, 0x3c, 0x9e, 0x18, 0x3d, 0x01, 0xc7, 0xe7, 0x37, 0x0d, 0xea, 0xb2,
	0x86, 0xdf, 0x6c, 0x18, 0x96, 0x27, 0x15, 0x88, 0x06, 0xf7, 0x94, 0xc5, 0x40, 0x90, 0x1e, 0x28,
	0x30, 0x14, 0xe3, 0x8e, 0xee, 0x0a, 0xae, 0x38, 0xae, 0x86, 0xd5, 0x3a, 0x75, 0x99, 0xee, 0x37,
	0xf5, 0x61, 0xf5, 0xda, 0xa6, 0xc9, 0xb9, 0x69, 0x41, 0x23, 0xac, 0xb9, 0xf4, 0xfa, 0x8d, 0x9e,
	0x27, 0xe8, 0x38, 0x35, 0xbd, 0x7e, 0x2d, 0xa8, 0xeb, 0x82, 0x90, 0xc3, 0xf5, 0x55, 0x9f, 0x5a,
	0xac, 0x47, 0x15, 0x34, 0xe2, 0x1f, 0xd1, 0x42, 0xfd, 0xdb, 0x12, 0x5a, 0x3e, 0x8e, 0x5a, 0x39,
	0x8c, 0x3b, 0xc1, 0x6d, 0xb4, 0x64, 0x70, 0x47, 0x82, 0xe1, 0x29, 0xe6, 0x03, 0xd9, 0x0f, 0x02,
	0xad, 0xb4, 0x55, 0xda, 0x59, 0x68, 0x6e, 0xe8, 0x91, 0x47, 0x8f, 0x3d, 0xfa, 0xfb, 0x97, 0x8e,
	0xda, 0x6b, 0x9e, 0x51, 0xcb, 0x83, 0xee, 0x62, 0x22, 0xb4, 0x1f, 0x04, 0xf8, 0x29, 0xaa, 0x30,
	0x47, 0x81, 0xf0, 0xa9, 0xa5, 0x95, 0xc3, 0x7c, 0x6d, 0x2a, 0x7f, 0x38, 0xdc, 0x47, 0xab, 0x72,
	0xd7, 0x9a, 0xbd, 0x2d, 0x95, 0x77, 0x7f, 0xeb, 0x8e, 0x42, 0xf8, 0x1d, 0xc2, 0x97, 0x54, 0x02,
	0x81, 0x4f, 0x51, 0x63, 0x44, 0x31, 0x1b, 0xb4, 0xdf, 0xf3, 0xa3, 0x96, 0x07, 0xf1, 0xf6, 0x30,
	0x7d, 0xca, 0x6c, 0xc0, 0xe7, 0xa8, 0x6a, 0xd3, 0x60, 0x4c, 0x74, 0x41, 0x18, 0xe0, 0x28, 0x6d,
	0xe6, 0xd7, 0xfb, 0x6b, 0xcd, 0xdf, 0xb5, 0x66, 0x76, 0xcb, 0x5a, 0xaf, 0x8b, 0x6d, 0x1a, 0xc4,
	0xd4, 0x4e, 0x04, 0xc0, 0x14, 0xd5, 0xc0, 0xe9, 0x73, 0x61, 0x30, 0xc7, 0x24, 0x93, 0xd3, 0x9b,
	0x2d, 0x42, 0x5f, 0x1d, 0x71, 0x0e, 0xd2, 0xf3, 0xbc, 0x40, 0x2b, 0x63, 0x85, 0xf4, 0x0c, 0x03,
	0xa4, 0x24, 0x82, 0x2a, 0xd0, 0xe6, 0x8a, 0xf0, 0xab, 0x23, 0xc8, 0x49, 0xc4, 0xe8, 0x52, 0x05,
	0xf8, 0x03, 0x5a, 0x4b, 0x22, 0x89, 0xcd, 0x1c, 0x66, 0x7b, 0x36, 0xb9, 0xe2, 0x52, 0x49, 0x6d,
	0x3e, 0xc7, 0xe3, 0x5f, 0x95, 0x63, 0xdc, 0x9b, 0x28, 0xfd, 0x62, 0x10, 0xc6, 0x17, 0x68, 0x3d,
	0x85, 0x16, 0xf0, 0xd9, 0x03, 0xa9, 0x88, 0xcf, 0x2d, 0xcf, 0x06, 0xad, 0x92, 0x83, 0xad, 0x25,
	0xd8, 0xdd, 0x28, 0x7e, 0x16, 0xa6, 0xf1, 0x39, 0xaa, 0xa5, 0xe0, 0x52, 0xf5, 0xc0, 0x27, 0x7d,
	0x6a, 0x28, 0x2e, 0xb4, 0x3f, 0x72, 0xa0, 0x57, 0x12, 0xe8, 0x93, 0x41, 0xf8, 0x28, 0xcc, 0xe2,
	0x8f, 0x68, 0x3d, 0xf9, 0x18, 0x4d, 0xaa, 0xe0, 0x9a, 0xde, 0x90, 0x3e, 0x65, 0x96, 0x27, 0x40,
	0x43, 0x39, 0xd0, 0xb5, 0x04, 0xe0, 0x79, 0x94, 0x3f, 0x8a, 0xe2, 0x38, 0x40, 0xdb, 0xd9, 0xc7,
	0x65, 0xd2, 0xb3, 0x50, 0xe4, 0xd1, 0xd6, 0xb3, 0x8e, 0xce, 0x84, 0xf9, 0x15, 0xaa, 0x4b, 0xd7,
	0x62, 0x8a, 0x40, 0xa0, 0x40, 0x38, 0xd4, 0x22, 0x16, 0x37, 0xa8, 0x45, 0xb8, 0x60, 0x26, 0x73,
	0x08, 0x08, 0xc1, 0x85, 0xd4, 0xfe, 0xdc, 0x2a, 0xed, 0x54, 0xba, 0x9b, 0x61, 0x65, 0x7b, 0x58,
	0xf8, 0x7a, 0x50, 0x77, 0x1c, 0x96, 0xb5, 0xc3, 0x2a, 0x0c, 0x68, 0x2b, 0xd9, 0x7b, 0x0a, 0x14,
	0x6f, 0xe0, 0xaf, 0x1c, 0x83, 0xfa, 0x2f, 0x41, 0x49, 0x58, 0xe2, 0x96, 0xbf, 0x96, 0xd0, 0x6e,
	0xf6, 0xb4, 0x32, 0x8d, 0x8b, 0x45, 0x46, 0xf6, 0x28, 0x6b, 0x64, 0x19, 0x3d, 0x48, 0xf4, 0x70,
	0xdc, 0x42, 0x4a, 0x9b, 0x7a, 0x13, 0x97, 0x8a, 0xb8, 0xff, 0x1f, 0x11, 0x13, 0xc2, 0xe4, 0x4b,
	0x69, 0xa2, 0x8d, 0xe1, 0xa6, 0xe2, 0x8b, 0x8a, 0x9a, 0x40, 0xd4, 0x95, 0x00, 0x79, 0xc5, 0xad,
	0x9e, 0xb6, 0x5c, 0xc4, 0xb6, 0x36, 0x44, 0x75, 0x46, 0xa4, 0xd3, 0x18, 0x34, 0x10, 0x8d, 0x77,
	0x37, 0xad, 0xd4, 0xfe, 0x2e, 0x24, 0x1a, 0xa1, 0x8e, 0x26, 0x8d, 0xf8, 0x0b, 0x7a, 0xfc, 0x33,
	0x51, 0x6a, 0xb2, 0x1a, 0x2e, 0x62, 0xdd, 0xbe, 0xdf, 0x9a, 0x98, 0xee, 0xe0, 0xc8, 0x66, 0x68,
	0xd3, 0xb7, 0xdd, 0x3f, 0x79, 0x8e, 0xec, 0xd4, 0x34, 0x53, 0x77, 0x9e, 0x89, 0x1e, 0x64, 0x68,
	0x26, 0x6e, 0xbe, 0x6a, 0x0e, 0xcf, 0xe6, 0x94, 0x27, 0x75, 0xff, 0xb5, 0x38, 0xaa, 0x33, 0xae,
	0x87, 0x1f, 0x0d, 0xae, 0xe0, 0xc1, 0x8d, 0x9e, 0xf5, 0xfd, 0xd0, 0xfa, 0x77, 0xf2, 0x3f, 0xbe,
	0x33, 0x70, 0x75, 0x4a, 0xb7, 0xe5, 0x95, 0x76, 0x58, 0xff, 0xcc, 0x65, 0xfa, 0x59, 0x53, 0x3f,
	0x88, 0xea, 0xdf, 0x9e, 0x7c, 0xbf, 0x6f, 0xe1, 0x72, 0x2e, 0x6c, 0x73, 0xef, 0x47, 0x00, 0x00,
	0x00, 0xff, 0xff, 0x15, 0x3e, 0x57, 0x67, 0xd7, 0x08, 0x00, 0x00,
}
  07070100000060000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000002B00000000cilium-proxy-20200109/go/envoy/api/v2/core    07070100000061000081A4000003E800000064000000015E17A247000052C4000000000000000000000000000000000000003900000000cilium-proxy-20200109/go/envoy/api/v2/core/address.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/core/address.proto

package envoy_api_v2_core

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type SocketAddress_Protocol int32

const (
	SocketAddress_TCP SocketAddress_Protocol = 0
	SocketAddress_UDP SocketAddress_Protocol = 1
)

var SocketAddress_Protocol_name = map[int32]string{
	0: "TCP",
	1: "UDP",
}

var SocketAddress_Protocol_value = map[string]int32{
	"TCP": 0,
	"UDP": 1,
}

func (x SocketAddress_Protocol) String() string {
	return proto.EnumName(SocketAddress_Protocol_name, int32(x))
}

func (SocketAddress_Protocol) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_6906417f87bcce55, []int{1, 0}
}

type Pipe struct {
	// Unix Domain Socket path. On Linux, paths starting with '@' will use the
	// abstract namespace. The starting '@' is replaced by a null byte by Envoy.
	// Paths starting with '@' will result in an error in environments other than
	// Linux.
	Path                 string   `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Pipe) Reset()         { *m = Pipe{} }
func (m *Pipe) String() string { return proto.CompactTextString(m) }
func (*Pipe) ProtoMessage()    {}
func (*Pipe) Descriptor() ([]byte, []int) {
	return fileDescriptor_6906417f87bcce55, []int{0}
}

func (m *Pipe) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Pipe.Unmarshal(m, b)
}
func (m *Pipe) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Pipe.Marshal(b, m, deterministic)
}
func (m *Pipe) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Pipe.Merge(m, src)
}
func (m *Pipe) XXX_Size() int {
	return xxx_messageInfo_Pipe.Size(m)
}
func (m *Pipe) XXX_DiscardUnknown() {
	xxx_messageInfo_Pipe.DiscardUnknown(m)
}

var xxx_messageInfo_Pipe proto.InternalMessageInfo

func (m *Pipe) GetPath() string {
	if m != nil {
		return m.Path
	}
	return ""
}

// [#next-free-field: 7]
type SocketAddress struct {
	Protocol SocketAddress_Protocol `protobuf:"varint,1,opt,name=protocol,proto3,enum=envoy.api.v2.core.SocketAddress_Protocol" json:"protocol,omitempty"`
	// The address for this socket. :ref:`Listeners <config_listeners>` will bind
	// to the address. An empty address is not allowed. Specify ``0.0.0.0`` or ``::``
	// to bind to any address. [#comment:TODO(zuercher) reinstate when implemented:
	// It is possible to distinguish a Listener address via the prefix/suffix matching
	// in :ref:`FilterChainMatch <envoy_api_msg_listener.FilterChainMatch>`.] When used
	// within an upstream :ref:`BindConfig <envoy_api_msg_core.BindConfig>`, the address
	// controls the source address of outbound connections. For :ref:`clusters
	// <envoy_api_msg_Cluster>`, the cluster type determines whether the
	// address must be an IP (*STATIC* or *EDS* clusters) or a hostname resolved by DNS
	// (*STRICT_DNS* or *LOGICAL_DNS* clusters). Address resolution can be customized
	// via :ref:`resolver_name <envoy_api_field_core.SocketAddress.resolver_name>`.
	Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
	// Types that are valid to be assigned to PortSpecifier:
	//	*SocketAddress_PortValue
	//	*SocketAddress_NamedPort
	PortSpecifier isSocketAddress_PortSpecifier `protobuf_oneof:"port_specifier"`
	// The name of the custom resolver. This must have been registered with Envoy. If
	// this is empty, a context dependent default applies. If the address is a concrete
	// IP address, no resolution will occur. If address is a hostname this
	// should be set for resolution other than DNS. Specifying a custom resolver with
	// *STRICT_DNS* or *LOGICAL_DNS* will generate an error at runtime.
	ResolverName string `protobuf:"bytes,5,opt,name=resolver_name,json=resolverName,proto3" json:"resolver_name,omitempty"`
	// When binding to an IPv6 address above, this enables `IPv4 compatibility
	// <https://tools.ietf.org/html/rfc3493#page-11>`_. Binding to ``::`` will
	// allow both IPv4 and IPv6 connections, with peer IPv4 addresses mapped into
	// IPv6 space as ``::FFFF:<IPv4-address>``.
	Ipv4Compat           bool     `protobuf:"varint,6,opt,name=ipv4_compat,json=ipv4Compat,proto3" json:"ipv4_compat,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *SocketAddress) Reset()         { *m = SocketAddress{} }
func (m *SocketAddress) String() string { return proto.CompactTextString(m) }
func (*SocketAddress) ProtoMessage()    {}
func (*SocketAddress) Descriptor() ([]byte, []int) {
	return fileDescriptor_6906417f87bcce55, []int{1}
}

func (m *SocketAddress) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SocketAddress.Unmarshal(m, b)
}
func (m *SocketAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SocketAddress.Marshal(b, m, deterministic)
}
func (m *SocketAddress) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SocketAddress.Merge(m, src)
}
func (m *SocketAddress) XXX_Size() int {
	return xxx_messageInfo_SocketAddress.Size(m)
}
func (m *SocketAddress) XXX_DiscardUnknown() {
	xxx_messageInfo_SocketAddress.DiscardUnknown(m)
}

var xxx_messageInfo_SocketAddress proto.InternalMessageInfo

func (m *SocketAddress) GetProtocol() SocketAddress_Protocol {
	if m != nil {
		return m.Protocol
	}
	return SocketAddress_TCP
}

func (m *SocketAddress) GetAddress() string {
	if m != nil {
		return m.Address
	}
	return ""
}

type isSocketAddress_PortSpecifier interface {
	isSocketAddress_PortSpecifier()
}

type SocketAddress_PortValue struct {
	PortValue uint32 `protobuf:"varint,3,opt,name=port_value,json=portValue,proto3,oneof"`
}

type SocketAddress_NamedPort struct {
	NamedPort string `protobuf:"bytes,4,opt,name=named_port,json=namedPort,proto3,oneof"`
}

func (*SocketAddress_PortValue) isSocketAddress_PortSpecifier() {}

func (*SocketAddress_NamedPort) isSocketAddress_PortSpecifier() {}

func (m *SocketAddress) GetPortSpecifier() isSocketAddress_PortSpecifier {
	if m != nil {
		return m.PortSpecifier
	}
	return nil
}

func (m *SocketAddress) GetPortValue() uint32 {
	if x, ok := m.GetPortSpecifier().(*SocketAddress_PortValue); ok {
		return x.PortValue
	}
	return 0
}

func (m *SocketAddress) GetNamedPort() string {
	if x, ok := m.GetPortSpecifier().(*SocketAddress_NamedPort); ok {
		return x.NamedPort
	}
	return ""
}

func (m *SocketAddress) GetResolverName() string {
	if m != nil {
		return m.ResolverName
	}
	return ""
}

func (m *SocketAddress) GetIpv4Compat() bool {
	if m != nil {
		return m.Ipv4Compat
	}
	return false
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*SocketAddress) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*SocketAddress_PortValue)(nil),
		(*SocketAddress_NamedPort)(nil),
	}
}

type TcpKeepalive struct {
	// Maximum number of keepalive probes to send without response before deciding
	// the connection is dead. Default is to use the OS level configuration (unless
	// overridden, Linux defaults to 9.)
	KeepaliveProbes *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=keepalive_probes,json=keepaliveProbes,proto3" json:"keepalive_probes,omitempty"`
	// The number of seconds a connection needs to be idle before keep-alive probes
	// start being sent. Default is to use the OS level configuration (unless
	// overridden, Linux defaults to 7200s (ie 2 hours.)
	KeepaliveTime *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=keepalive_time,json=keepaliveTime,proto3" json:"keepalive_time,omitempty"`
	// The number of seconds between keep-alive probes. Default is to use the OS
	// level configuration (unless overridden, Linux defaults to 75s.)
	KeepaliveInterval    *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=keepalive_interval,json=keepaliveInterval,proto3" json:"keepalive_interval,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *TcpKeepalive) Reset()         { *m = TcpKeepalive{} }
func (m *TcpKeepalive) String() string { return proto.CompactTextString(m) }
func (*TcpKeepalive) ProtoMessage()    {}
func (*TcpKeepalive) Descriptor() ([]byte, []int) {
	return fileDescriptor_6906417f87bcce55, []int{2}
}

func (m *TcpKeepalive) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TcpKeepalive.Unmarshal(m, b)
}
func (m *TcpKeepalive) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TcpKeepalive.Marshal(b, m, deterministic)
}
func (m *TcpKeepalive) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TcpKeepalive.Merge(m, src)
}
func (m *TcpKeepalive) XXX_Size() int {
	return xxx_messageInfo_TcpKeepalive.Size(m)
}
func (m *TcpKeepalive) XXX_DiscardUnknown() {
	xxx_messageInfo_TcpKeepalive.DiscardUnknown(m)
}

var xxx_messageInfo_TcpKeepalive proto.InternalMessageInfo

func (m *TcpKeepalive) GetKeepaliveProbes() *wrappers.UInt32Value {
	if m != nil {
		return m.KeepaliveProbes
	}
	return nil
}

func (m *TcpKeepalive) GetKeepaliveTime() *wrappers.UInt32Value {
	if m != nil {
		return m.KeepaliveTime
	}
	return nil
}

func (m *TcpKeepalive) GetKeepaliveInterval() *wrappers.UInt32Value {
	if m != nil {
		return m.KeepaliveInterval
	}
	return nil
}

type BindConfig struct {
	// The address to bind to when creating a socket.
	SourceAddress *SocketAddress `protobuf:"bytes,1,opt,name=source_address,json=sourceAddress,proto3" json:"source_address,omitempty"`
	// Whether to set the *IP_FREEBIND* option when creating the socket. When this
	// flag is set to true, allows the :ref:`source_address
	// <envoy_api_field_UpstreamBindConfig.source_address>` to be an IP address
	// that is not configured on the system running Envoy. When this flag is set
	// to false, the option *IP_FREEBIND* is disabled on the socket. When this
	// flag is not set (default), the socket is not modified, i.e. the option is
	// neither enabled nor disabled.
	Freebind *wrappers.BoolValue `protobuf:"bytes,2,opt,name=freebind,proto3" json:"freebind,omitempty"`
	// Additional socket options that may not be present in Envoy source code or
	// precompiled binaries.
	SocketOptions        []*SocketOption `protobuf:"bytes,3,rep,name=socket_options,json=socketOptions,proto3" json:"socket_options,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *BindConfig) Reset()         { *m = BindConfig{} }
func (m *BindConfig) String() string { return proto.CompactTextString(m) }
func (*BindConfig) ProtoMessage()    {}
func (*BindConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_6906417f87bcce55, []int{3}
}

func (m *BindConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_BindConfig.Unmarshal(m, b)
}
func (m *BindConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_BindConfig.Marshal(b, m, deterministic)
}
func (m *BindConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_BindConfig.Merge(m, src)
}
func (m *BindConfig) XXX_Size() int {
	return xxx_messageInfo_BindConfig.Size(m)
}
func (m *BindConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_BindConfig.DiscardUnknown(m)
}

var xxx_messageInfo_BindConfig proto.InternalMessageInfo

func (m *BindConfig) GetSourceAddress() *SocketAddress {
	if m != nil {
		return m.SourceAddress
	}
	return nil
}

func (m *BindConfig) GetFreebind() *wrappers.BoolValue {
	if m != nil {
		return m.Freebind
	}
	return nil
}

func (m *BindConfig) GetSocketOptions() []*SocketOption {
	if m != nil {
		return m.SocketOptions
	}
	return nil
}

// Addresses specify either a logical or physical address and port, which are
// used to tell Envoy where to bind/listen, connect to upstream and find
// management servers.
type Address struct {
	// Types that are valid to be assigned to Address:
	//	*Address_SocketAddress
	//	*Address_Pipe
	Address              isAddress_Address `protobuf_oneof:"address"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *Address) Reset()         { *m = Address{} }
func (m *Address) String() string { return proto.CompactTextString(m) }
func (*Address) ProtoMessage()    {}
func (*Address) Descriptor() ([]byte, []int) {
	return fileDescriptor_6906417f87bcce55, []int{4}
}

func (m *Address) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Address.Unmarshal(m, b)
}
func (m *Address) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Address.Marshal(b, m, deterministic)
}
func (m *Address) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Address.Merge(m, src)
}
func (m *Address) XXX_Size() int {
	return xxx_messageInfo_Address.Size(m)
}
func (m *Address) XXX_DiscardUnknown() {
	xxx_messageInfo_Address.DiscardUnknown(m)
}

var xxx_messageInfo_Address proto.InternalMessageInfo

type isAddress_Address interface {
	isAddress_Address()
}

type Address_SocketAddress struct {
	SocketAddress *SocketAddress `protobuf:"bytes,1,opt,name=socket_address,json=socketAddress,proto3,oneof"`
}

type Address_Pipe struct {
	Pipe *Pipe `protobuf:"bytes,2,opt,name=pipe,proto3,oneof"`
}

func (*Address_SocketAddress) isAddress_Address() {}

func (*Address_Pipe) isAddress_Address() {}

func (m *Address) GetAddress() isAddress_Address {
	if m != nil {
		return m.Address
	}
	return nil
}

func (m *Address) GetSocketAddress() *SocketAddress {
	if x, ok := m.GetAddress().(*Address_SocketAddress); ok {
		return x.SocketAddress
	}
	return nil
}

func (m *Address) GetPipe() *Pipe {
	if x, ok := m.GetAddress().(*Address_Pipe); ok {
		return x.Pipe
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Address) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Address_SocketAddress)(nil),
		(*Address_Pipe)(nil),
	}
}

// CidrRange specifies an IP Address and a prefix length to construct
// the subnet mask for a `CIDR <https://tools.ietf.org/html/rfc4632>`_ range.
type CidrRange struct {
	// IPv4 or IPv6 address, e.g. ``192.0.0.0`` or ``2001:db8::``.
	AddressPrefix string `protobuf:"bytes,1,opt,name=address_prefix,json=addressPrefix,proto3" json:"address_prefix,omitempty"`
	// Length of prefix, e.g. 0, 32.
	PrefixLen            *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=prefix_len,json=prefixLen,proto3" json:"prefix_len,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *CidrRange) Reset()         { *m = CidrRange{} }
func (m *CidrRange) String() string { return proto.CompactTextString(m) }
func (*CidrRange) ProtoMessage()    {}
func (*CidrRange) Descriptor() ([]byte, []int) {
	return fileDescriptor_6906417f87bcce55, []int{5}
}

func (m *CidrRange) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_CidrRange.Unmarshal(m, b)
}
func (m *CidrRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_CidrRange.Marshal(b, m, deterministic)
}
func (m *CidrRange) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CidrRange.Merge(m, src)
}
func (m *CidrRange) XXX_Size() int {
	return xxx_messageInfo_CidrRange.Size(m)
}
func (m *CidrRange) XXX_DiscardUnknown() {
	xxx_messageInfo_CidrRange.DiscardUnknown(m)
}

var xxx_messageInfo_CidrRange proto.InternalMessageInfo

func (m *CidrRange) GetAddressPrefix() string {
	if m != nil {
		return m.AddressPrefix
	}
	return ""
}

func (m *CidrRange) GetPrefixLen() *wrappers.UInt32Value {
	if m != nil {
		return m.PrefixLen
	}
	return nil
}

func init() {
	proto.RegisterEnum("envoy.api.v2.core.SocketAddress_Protocol", SocketAddress_Protocol_name, SocketAddress_Protocol_value)
	proto.RegisterType((*Pipe)(nil), "envoy.api.v2.core.Pipe")
	proto.RegisterType((*SocketAddress)(nil), "envoy.api.v2.core.SocketAddress")
	proto.RegisterType((*TcpKeepalive)(nil), "envoy.api.v2.core.TcpKeepalive")
	proto.RegisterType((*BindConfig)(nil), "envoy.api.v2.core.BindConfig")
	proto.RegisterType((*Address)(nil), "envoy.api.v2.core.Address")
	proto.RegisterType((*CidrRange)(nil), "envoy.api.v2.core.CidrRange")
}

func init() { proto.RegisterFile("envoy/api/v2/core/address.proto", fileDescriptor_6906417f87bcce55) }

var fileDescriptor_6906417f87bcce55 = []byte{
	// 655 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0x4d, 0x6f, 0xd3, 0x40,
	0x10, 0xcd, 0x26, 0x69, 0x93, 0x4c, 0x9b, 0x90, 0xae, 0x84, 0x6a, 0x85, 0x8a, 0x84, 0xf4, 0x12,
	0x2a, 0xe1, 0x88, 0x14, 0x71, 0xaf, 0xc3, 0x47, 0xab, 0x22, 0x6a, 0x4c, 0xcb, 0xd5, 0xda, 0x24,
	0x93, 0xb0, 0xaa, 0xe3, 0x5d, 0xad, 0x5d, 0xd3, 0xde, 0x50, 0x8f, 0x5c, 0xf9, 0x59, 0xfc, 0x08,
	0xce, 0xfc, 0x03, 0xd4, 0x4b, 0xd1, 0xae, 0x63, 0x57, 0x25, 0xa0, 0xc2, 0x6d, 0x77, 0xe6, 0xbd,
	0xb7, 0x6f, 0x3e, 0x16, 0xda, 0x18, 0x26, 0xe2, 0xa2, 0xcf, 0x24, 0xef, 0x27, 0x83, 0xfe, 0x58,
	0x28, 0xec, 0xb3, 0xc9, 0x44, 0x61, 0x14, 0xd9, 0x52, 0x89, 0x58, 0xd0, 0x0d, 0x03, 0xb0, 0x99,
	0xe4, 0x76, 0x32, 0xb0, 0x35, 0xa0, 0xb5, 0xb5, 0xcc, 0x19, 0xb1, 0x08, 0x53, 0x42, 0xeb, 0xe1,
	0x4c, 0x88, 0x59, 0x80, 0x7d, 0x73, 0x1b, 0x9d, 0x4d, 0xfb, 0x9f, 0x14, 0x93, 0x12, 0xd5, 0x42,
	0xb0, 0xb5, 0x99, 0xb0, 0x80, 0x4f, 0x58, 0x8c, 0xfd, 0xec, 0x90, 0x26, 0xba, 0xdb, 0x50, 0x76,
	0xb9, 0x44, 0xfa, 0x00, 0xca, 0x92, 0xc5, 0x1f, 0x2d, 0xd2, 0x21, 0xbd, 0x9a, 0x53, 0xb9, 0x72,
	0xca, 0xaa, 0xd8, 0x21, 0x9e, 0x09, 0x76, 0xbf, 0x15, 0xa1, 0xfe, 0x5e, 0x8c, 0x4f, 0x31, 0xde,
	0x4b, 0x6d, 0xd2, 0x23, 0xa8, 0x1a, 0xfe, 0x58, 0x04, 0x86, 0xd2, 0x18, 0x3c, 0xb6, 0x97, 0x3c,
	0xdb, 0xb7, 0x38, 0xb6, 0xbb, 0x20, 0x38, 0xd5, 0x2b, 0x67, 0xe5, 0x92, 0x14, 0x9b, 0xc4, 0xcb,
	0x45, 0xe8, 0x23, 0xa8, 0x2c, 0x5a, 0x60, 0x15, 0x6f, 0x5b, 0xc8, 0xe2, 0x74, 0x07, 0x40, 0x0a,
	0x15, 0xfb, 0x09, 0x0b, 0xce, 0xd0, 0x2a, 0x75, 0x48, 0xaf, 0xee, 0xd4, 0xae, 0x9c, 0xd5, 0x9d,
	0xb2, 0x75, 0x7d, 0x5d, 0xda, 0x2f, 0x78, 0x35, 0x9d, 0xfe, 0xa0, 0xb3, 0xb4, 0x0d, 0x10, 0xb2,
	0x39, 0x4e, 0x7c, 0x1d, 0xb2, 0xca, 0x5a, 0x51, 0x03, 0x4c, 0xcc, 0x15, 0x2a, 0xa6, 0xdb, 0x50,
	0x57, 0x18, 0x89, 0x20, 0x41, 0xe5, 0xeb, 0xa8, 0xb5, 0xa2, 0x31, 0xde, 0x7a, 0x16, 0x7c, 0xcb,
	0xe6, 0x5a, 0x65, 0x8d, 0xcb, 0xe4, 0x99, 0x3f, 0x16, 0x73, 0xc9, 0x62, 0x6b, 0xb5, 0x43, 0x7a,
	0x55, 0x0f, 0x74, 0x68, 0x68, 0x22, 0xdd, 0x2d, 0xa8, 0x66, 0x55, 0xd1, 0x0a, 0x94, 0x8e, 0x87,
	0x6e, 0xb3, 0xa0, 0x0f, 0x27, 0x2f, 0xdc, 0x26, 0x71, 0xee, 0x43, 0xc3, 0x18, 0x8e, 0x24, 0x8e,
	0xf9, 0x94, 0xa3, 0xa2, 0xa5, 0x9f, 0x0e, 0xe9, 0xfe, 0x20, 0xb0, 0x7e, 0x3c, 0x96, 0x87, 0x88,
	0x92, 0x05, 0x3c, 0x41, 0xfa, 0x1a, 0x9a, 0xa7, 0xd9, 0xc5, 0x97, 0x4a, 0x8c, 0x30, 0x32, 0x4d,
	0x5d, 0x1b, 0x6c, 0xd9, 0xe9, 0x5c, 0xed, 0x6c, 0xae, 0xf6, 0xc9, 0x41, 0x18, 0xef, 0x0e, 0x4c,
	0x91, 0xde, 0xbd, 0x9c, 0xe5, 0x1a, 0x12, 0x1d, 0x42, 0xe3, 0x46, 0x28, 0xe6, 0x73, 0x34, 0xbd,
	0xbc, 0x4b, 0xa6, 0x9e, 0x73, 0x8e, 0xf9, 0x1c, 0xe9, 0x21, 0xd0, 0x1b, 0x11, 0x1e, 0xc6, 0xa8,
	0x12, 0x16, 0x98, 0x76, 0xdf, 0x25, 0xb4, 0x91, 0xf3, 0x0e, 0x16, 0xb4, 0xee, 0x77, 0x02, 0xe0,
	0xf0, 0x70, 0x32, 0x14, 0xe1, 0x94, 0xcf, 0xe8, 0x3b, 0x68, 0x44, 0xe2, 0x4c, 0x8d, 0xd1, 0xcf,
	0x86, 0x9d, 0xd6, 0xd9, 0xb9, 0x6b, 0x79, 0xcc, 0xce, 0x7c, 0x31, 0x3b, 0x53, 0x4f, 0x15, 0xb2,
	0x4d, 0x7c, 0x0e, 0xd5, 0xa9, 0x42, 0x1c, 0xf1, 0x70, 0xb2, 0xa8, 0xb6, 0xb5, 0x64, 0xd2, 0x11,
	0x22, 0x48, 0x2d, 0xe6, 0x58, 0xfa, 0x4a, 0x5b, 0xd1, 0x2f, 0xf8, 0x42, 0xc6, 0x5c, 0x84, 0x91,
	0x55, 0xea, 0x94, 0x7a, 0x6b, 0x83, 0xf6, 0x5f, 0xad, 0x1c, 0x19, 0x9c, 0x7e, 0xff, 0xe6, 0x16,
	0x75, 0xbf, 0x12, 0xa8, 0x64, 0x5e, 0x0e, 0x72, 0xcd, 0xff, 0x2c, 0x6f, 0xbf, 0x90, 0xc9, 0x66,
	0x52, 0x4f, 0xa0, 0x2c, 0xb9, 0xcc, 0x06, 0xb8, 0xf9, 0x07, 0x01, 0xfd, 0x6d, 0xf7, 0x0b, 0x9e,
	0x81, 0x39, 0x8d, 0xfc, 0xfb, 0xa4, 0x3b, 0x76, 0x49, 0xa0, 0x36, 0xe4, 0x13, 0xe5, 0xb1, 0x70,
	0x86, 0xd4, 0x86, 0xc6, 0x22, 0xeb, 0x4b, 0x85, 0x53, 0x7e, 0xfe, 0xfb, 0x37, 0xaf, 0x2f, 0xd2,
	0xae, 0xc9, 0xd2, 0x97, 0x00, 0x29, 0xce, 0x0f, 0x30, 0xfc, 0x97, 0x1d, 0x32, 0xe3, 0xd9, 0x29,
	0x59, 0x9f, 0x89, 0x57, 0x4b, 0x99, 0x6f, 0x30, 0x74, 0x9e, 0x42, 0x9b, 0x8b, 0xd4, 0xb9, 0x54,
	0xe2, 0xfc, 0x62, 0xb9, 0x08, 0x67, 0x7d, 0x2f, 0x7b, 0x58, 0xc4, 0xc2, 0x25, 0xa3, 0x55, 0xa3,
	0xbe, 0xfb, 0x2b, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x8b, 0x95, 0x1d, 0x22, 0x05, 0x00, 0x00,
}
07070100000062000081A4000003E800000064000000015E17A2470000C17C000000000000000000000000000000000000003600000000cilium-proxy-20200109/go/envoy/api/v2/core/base.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/core/base.proto

package envoy_api_v2_core

import (
	fmt "fmt"
	_type "github.com/cilium/proxy/go/envoy/type"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	_struct "github.com/golang/protobuf/ptypes/struct"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Envoy supports :ref:`upstream priority routing
// <arch_overview_http_routing_priority>` both at the route and the virtual
// cluster level. The current priority implementation uses different connection
// pool and circuit breaking settings for each priority level. This means that
// even for HTTP/2 requests, two physical connections will be used to an
// upstream host. In the future Envoy will likely support true HTTP/2 priority
// over a single upstream connection.
type RoutingPriority int32

const (
	RoutingPriority_DEFAULT RoutingPriority = 0
	RoutingPriority_HIGH    RoutingPriority = 1
)

var RoutingPriority_name = map[int32]string{
	0: "DEFAULT",
	1: "HIGH",
}

var RoutingPriority_value = map[string]int32{
	"DEFAULT": 0,
	"HIGH":    1,
}

func (x RoutingPriority) String() string {
	return proto.EnumName(RoutingPriority_name, int32(x))
}

func (RoutingPriority) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{0}
}

// HTTP request method.
type RequestMethod int32

const (
	RequestMethod_METHOD_UNSPECIFIED RequestMethod = 0
	RequestMethod_GET                RequestMethod = 1
	RequestMethod_HEAD               RequestMethod = 2
	RequestMethod_POST               RequestMethod = 3
	RequestMethod_PUT                RequestMethod = 4
	RequestMethod_DELETE             RequestMethod = 5
	RequestMethod_CONNECT            RequestMethod = 6
	RequestMethod_OPTIONS            RequestMethod = 7
	RequestMethod_TRACE              RequestMethod = 8
	RequestMethod_PATCH              RequestMethod = 9
)

var RequestMethod_name = map[int32]string{
	0: "METHOD_UNSPECIFIED",
	1: "GET",
	2: "HEAD",
	3: "POST",
	4: "PUT",
	5: "DELETE",
	6: "CONNECT",
	7: "OPTIONS",
	8: "TRACE",
	9: "PATCH",
}

var RequestMethod_value = map[string]int32{
	"METHOD_UNSPECIFIED": 0,
	"GET":                1,
	"HEAD":               2,
	"POST":               3,
	"PUT":                4,
	"DELETE":             5,
	"CONNECT":            6,
	"OPTIONS":            7,
	"TRACE":              8,
	"PATCH":              9,
}

func (x RequestMethod) String() string {
	return proto.EnumName(RequestMethod_name, int32(x))
}

func (RequestMethod) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{1}
}

// Identifies the direction of the traffic relative to the local Envoy.
type TrafficDirection int32

const (
	// Default option is unspecified.
	TrafficDirection_UNSPECIFIED TrafficDirection = 0
	// The transport is used for incoming traffic.
	TrafficDirection_INBOUND TrafficDirection = 1
	// The transport is used for outgoing traffic.
	TrafficDirection_OUTBOUND TrafficDirection = 2
)

var TrafficDirection_name = map[int32]string{
	0: "UNSPECIFIED",
	1: "INBOUND",
	2: "OUTBOUND",
}

var TrafficDirection_value = map[string]int32{
	"UNSPECIFIED": 0,
	"INBOUND":     1,
	"OUTBOUND":    2,
}

func (x TrafficDirection) String() string {
	return proto.EnumName(TrafficDirection_name, int32(x))
}

func (TrafficDirection) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{2}
}

type SocketOption_SocketState int32

const (
	// Socket options are applied after socket creation but before binding the socket to a port
	SocketOption_STATE_PREBIND SocketOption_SocketState = 0
	// Socket options are applied after binding the socket to a port but before calling listen()
	SocketOption_STATE_BOUND SocketOption_SocketState = 1
	// Socket options are applied after calling listen()
	SocketOption_STATE_LISTENING SocketOption_SocketState = 2
)

var SocketOption_SocketState_name = map[int32]string{
	0: "STATE_PREBIND",
	1: "STATE_BOUND",
	2: "STATE_LISTENING",
}

var SocketOption_SocketState_value = map[string]int32{
	"STATE_PREBIND":   0,
	"STATE_BOUND":     1,
	"STATE_LISTENING": 2,
}

func (x SocketOption_SocketState) String() string {
	return proto.EnumName(SocketOption_SocketState_name, int32(x))
}

func (SocketOption_SocketState) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{12, 0}
}

// Identifies location of where either Envoy runs or where upstream hosts run.
type Locality struct {
	// Region this :ref:`zone <envoy_api_field_core.Locality.zone>` belongs to.
	Region string `protobuf:"bytes,1,opt,name=region,proto3" json:"region,omitempty"`
	// Defines the local service zone where Envoy is running. Though optional, it
	// should be set if discovery service routing is used and the discovery
	// service exposes :ref:`zone data <envoy_api_field_endpoint.LocalityLbEndpoints.locality>`,
	// either in this message or via :option:`--service-zone`. The meaning of zone
	// is context dependent, e.g. `Availability Zone (AZ)
	// <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html>`_
	// on AWS, `Zone <https://cloud.google.com/compute/docs/regions-zones/>`_ on
	// GCP, etc.
	Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"`
	// When used for locality of upstream hosts, this field further splits zone
	// into smaller chunks of sub-zones so they can be load balanced
	// independently.
	SubZone              string   `protobuf:"bytes,3,opt,name=sub_zone,json=subZone,proto3" json:"sub_zone,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Locality) Reset()         { *m = Locality{} }
func (m *Locality) String() string { return proto.CompactTextString(m) }
func (*Locality) ProtoMessage()    {}
func (*Locality) Descriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{0}
}

func (m *Locality) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Locality.Unmarshal(m, b)
}
func (m *Locality) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Locality.Marshal(b, m, deterministic)
}
func (m *Locality) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Locality.Merge(m, src)
}
func (m *Locality) XXX_Size() int {
	return xxx_messageInfo_Locality.Size(m)
}
func (m *Locality) XXX_DiscardUnknown() {
	xxx_messageInfo_Locality.DiscardUnknown(m)
}

var xxx_messageInfo_Locality proto.InternalMessageInfo

func (m *Locality) GetRegion() string {
	if m != nil {
		return m.Region
	}
	return ""
}

func (m *Locality) GetZone() string {
	if m != nil {
		return m.Zone
	}
	return ""
}

func (m *Locality) GetSubZone() string {
	if m != nil {
		return m.SubZone
	}
	return ""
}

// Identifies a specific Envoy instance. The node identifier is presented to the
// management server, which may use this identifier to distinguish per Envoy
// configuration for serving.
// [#next-free-field: 6]
type Node struct {
	// An opaque node identifier for the Envoy node. This also provides the local
	// service node name. It should be set if any of the following features are
	// used: :ref:`statsd <arch_overview_statistics>`, :ref:`CDS
	// <config_cluster_manager_cds>`, and :ref:`HTTP tracing
	// <arch_overview_tracing>`, either in this message or via
	// :option:`--service-node`.
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// Defines the local service cluster name where Envoy is running. Though
	// optional, it should be set if any of the following features are used:
	// :ref:`statsd <arch_overview_statistics>`, :ref:`health check cluster
	// verification <envoy_api_field_core.HealthCheck.HttpHealthCheck.service_name>`,
	// :ref:`runtime override directory <envoy_api_msg_config.bootstrap.v2.Runtime>`,
	// :ref:`user agent addition
	// <envoy_api_field_config.filter.network.http_connection_manager.v2.HttpConnectionManager.add_user_agent>`,
	// :ref:`HTTP global rate limiting <config_http_filters_rate_limit>`,
	// :ref:`CDS <config_cluster_manager_cds>`, and :ref:`HTTP tracing
	// <arch_overview_tracing>`, either in this message or via
	// :option:`--service-cluster`.
	Cluster string `protobuf:"bytes,2,opt,name=cluster,proto3" json:"cluster,omitempty"`
	// Opaque metadata extending the node identifier. Envoy will pass this
	// directly to the management server.
	Metadata *_struct.Struct `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"`
	// Locality specifying where the Envoy instance is running.
	Locality *Locality `protobuf:"bytes,4,opt,name=locality,proto3" json:"locality,omitempty"`
	// This is motivated by informing a management server during canary which
	// version of Envoy is being tested in a heterogeneous fleet. This will be set
	// by Envoy in management server RPCs.
	BuildVersion         string   `protobuf:"bytes,5,opt,name=build_version,json=buildVersion,proto3" json:"build_version,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Node) Reset()         { *m = Node{} }
func (m *Node) String() string { return proto.CompactTextString(m) }
func (*Node) ProtoMessage()    {}
func (*Node) Descriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{1}
}

func (m *Node) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Node.Unmarshal(m, b)
}
func (m *Node) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Node.Marshal(b, m, deterministic)
}
func (m *Node) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Node.Merge(m, src)
}
func (m *Node) XXX_Size() int {
	return xxx_messageInfo_Node.Size(m)
}
func (m *Node) XXX_DiscardUnknown() {
	xxx_messageInfo_Node.DiscardUnknown(m)
}

var xxx_messageInfo_Node proto.InternalMessageInfo

func (m *Node) GetId() string {
	if m != nil {
		return m.Id
	}
	return ""
}

func (m *Node) GetCluster() string {
	if m != nil {
		return m.Cluster
	}
	return ""
}

func (m *Node) GetMetadata() *_struct.Struct {
	if m != nil {
		return m.Metadata
	}
	return nil
}

func (m *Node) GetLocality() *Locality {
	if m != nil {
		return m.Locality
	}
	return nil
}

func (m *Node) GetBuildVersion() string {
	if m != nil {
		return m.BuildVersion
	}
	return ""
}

// Metadata provides additional inputs to filters based on matched listeners,
// filter chains, routes and endpoints. It is structured as a map, usually from
// filter name (in reverse DNS format) to metadata specific to the filter. Metadata
// key-values for a filter are merged as connection and request handling occurs,
// with later values for the same key overriding earlier values.
//
// An example use of metadata is providing additional values to
// http_connection_manager in the envoy.http_connection_manager.access_log
// namespace.
//
// Another example use of metadata is to per service config info in cluster metadata, which may get
// consumed by multiple filters.
//
// For load balancing, Metadata provides a means to subset cluster endpoints.
// Endpoints have a Metadata object associated and routes contain a Metadata
// object to match against. There are some well defined metadata used today for
// this purpose:
//
// * ``{"envoy.lb": {"canary": <bool> }}`` This indicates the canary status of an
//   endpoint and is also used during header processing
//   (x-envoy-upstream-canary) and for stats purposes.
type Metadata struct {
	// Key is the reverse DNS filter name, e.g. com.acme.widget. The envoy.*
	// namespace is reserved for Envoy's built-in filters.
	FilterMetadata       map[string]*_struct.Struct `protobuf:"bytes,1,rep,name=filter_metadata,json=filterMetadata,proto3" json:"filter_metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
	XXX_unrecognized     []byte                     `json:"-"`
	XXX_sizecache        int32                      `json:"-"`
}

func (m *Metadata) Reset()         { *m = Metadata{} }
func (m *Metadata) String() string { return proto.CompactTextString(m) }
func (*Metadata) ProtoMessage()    {}
func (*Metadata) Descriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{2}
}

func (m *Metadata) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Metadata.Unmarshal(m, b)
}
func (m *Metadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Metadata.Marshal(b, m, deterministic)
}
func (m *Metadata) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Metadata.Merge(m, src)
}
func (m *Metadata) XXX_Size() int {
	return xxx_messageInfo_Metadata.Size(m)
}
func (m *Metadata) XXX_DiscardUnknown() {
	xxx_messageInfo_Metadata.DiscardUnknown(m)
}

var xxx_messageInfo_Metadata proto.InternalMessageInfo

func (m *Metadata) GetFilterMetadata() map[string]*_struct.Struct {
	if m != nil {
		return m.FilterMetadata
	}
	return nil
}

// Runtime derived uint32 with a default when not specified.
type RuntimeUInt32 struct {
	// Default value if runtime value is not available.
	DefaultValue uint32 `protobuf:"varint,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"`
	// Runtime key to get value for comparison. This value is used if defined.
	RuntimeKey           string   `protobuf:"bytes,3,opt,name=runtime_key,json=runtimeKey,proto3" json:"runtime_key,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RuntimeUInt32) Reset()         { *m = RuntimeUInt32{} }
func (m *RuntimeUInt32) String() string { return proto.CompactTextString(m) }
func (*RuntimeUInt32) ProtoMessage()    {}
func (*RuntimeUInt32) Descriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{3}
}

func (m *RuntimeUInt32) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RuntimeUInt32.Unmarshal(m, b)
}
func (m *RuntimeUInt32) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RuntimeUInt32.Marshal(b, m, deterministic)
}
func (m *RuntimeUInt32) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RuntimeUInt32.Merge(m, src)
}
func (m *RuntimeUInt32) XXX_Size() int {
	return xxx_messageInfo_RuntimeUInt32.Size(m)
}
func (m *RuntimeUInt32) XXX_DiscardUnknown() {
	xxx_messageInfo_RuntimeUInt32.DiscardUnknown(m)
}

var xxx_messageInfo_RuntimeUInt32 proto.InternalMessageInfo

func (m *RuntimeUInt32) GetDefaultValue() uint32 {
	if m != nil {
		return m.DefaultValue
	}
	return 0
}

func (m *RuntimeUInt32) GetRuntimeKey() string {
	if m != nil {
		return m.RuntimeKey
	}
	return ""
}

// Runtime derived bool with a default when not specified.
type RuntimeFeatureFlag struct {
	// Default value if runtime value is not available.
	DefaultValue *wrappers.BoolValue `protobuf:"bytes,1,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"`
	// Runtime key to get value for comparison. This value is used if defined. The boolean value must
	// be represented via its
	// `canonical JSON encoding <https://developers.google.com/protocol-buffers/docs/proto3#json>`_.
	RuntimeKey           string   `protobuf:"bytes,2,opt,name=runtime_key,json=runtimeKey,proto3" json:"runtime_key,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RuntimeFeatureFlag) Reset()         { *m = RuntimeFeatureFlag{} }
func (m *RuntimeFeatureFlag) String() string { return proto.CompactTextString(m) }
func (*RuntimeFeatureFlag) ProtoMessage()    {}
func (*RuntimeFeatureFlag) Descriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{4}
}

func (m *RuntimeFeatureFlag) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RuntimeFeatureFlag.Unmarshal(m, b)
}
func (m *RuntimeFeatureFlag) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RuntimeFeatureFlag.Marshal(b, m, deterministic)
}
func (m *RuntimeFeatureFlag) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RuntimeFeatureFlag.Merge(m, src)
}
func (m *RuntimeFeatureFlag) XXX_Size() int {
	return xxx_messageInfo_RuntimeFeatureFlag.Size(m)
}
func (m *RuntimeFeatureFlag) XXX_DiscardUnknown() {
	xxx_messageInfo_RuntimeFeatureFlag.DiscardUnknown(m)
}

var xxx_messageInfo_RuntimeFeatureFlag proto.InternalMessageInfo

func (m *RuntimeFeatureFlag) GetDefaultValue() *wrappers.BoolValue {
	if m != nil {
		return m.DefaultValue
	}
	return nil
}

func (m *RuntimeFeatureFlag) GetRuntimeKey() string {
	if m != nil {
		return m.RuntimeKey
	}
	return ""
}

// Header name/value pair.
type HeaderValue struct {
	// Header name.
	Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
	// Header value.
	//
	// The same :ref:`format specifier <config_access_log_format>` as used for
	// :ref:`HTTP access logging <config_access_log>` applies here, however
	// unknown header values are replaced with the empty string instead of `-`.
	Value                string   `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *HeaderValue) Reset()         { *m = HeaderValue{} }
func (m *HeaderValue) String() string { return proto.CompactTextString(m) }
func (*HeaderValue) ProtoMessage()    {}
func (*HeaderValue) Descriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{5}
}

func (m *HeaderValue) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HeaderValue.Unmarshal(m, b)
}
func (m *HeaderValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HeaderValue.Marshal(b, m, deterministic)
}
func (m *HeaderValue) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HeaderValue.Merge(m, src)
}
func (m *HeaderValue) XXX_Size() int {
	return xxx_messageInfo_HeaderValue.Size(m)
}
func (m *HeaderValue) XXX_DiscardUnknown() {
	xxx_messageInfo_HeaderValue.DiscardUnknown(m)
}

var xxx_messageInfo_HeaderValue proto.InternalMessageInfo

func (m *HeaderValue) GetKey() string {
	if m != nil {
		return m.Key
	}
	return ""
}

func (m *HeaderValue) GetValue() string {
	if m != nil {
		return m.Value
	}
	return ""
}

// Header name/value pair plus option to control append behavior.
type HeaderValueOption struct {
	// Header name/value pair that this option applies to.
	Header *HeaderValue `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
	// Should the value be appended? If true (default), the value is appended to
	// existing values.
	Append               *wrappers.BoolValue `protobuf:"bytes,2,opt,name=append,proto3" json:"append,omitempty"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *HeaderValueOption) Reset()         { *m = HeaderValueOption{} }
func (m *HeaderValueOption) String() string { return proto.CompactTextString(m) }
func (*HeaderValueOption) ProtoMessage()    {}
func (*HeaderValueOption) Descriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{6}
}

func (m *HeaderValueOption) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HeaderValueOption.Unmarshal(m, b)
}
func (m *HeaderValueOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HeaderValueOption.Marshal(b, m, deterministic)
}
func (m *HeaderValueOption) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HeaderValueOption.Merge(m, src)
}
func (m *HeaderValueOption) XXX_Size() int {
	return xxx_messageInfo_HeaderValueOption.Size(m)
}
func (m *HeaderValueOption) XXX_DiscardUnknown() {
	xxx_messageInfo_HeaderValueOption.DiscardUnknown(m)
}

var xxx_messageInfo_HeaderValueOption proto.InternalMessageInfo

func (m *HeaderValueOption) GetHeader() *HeaderValue {
	if m != nil {
		return m.Header
	}
	return nil
}

func (m *HeaderValueOption) GetAppend() *wrappers.BoolValue {
	if m != nil {
		return m.Append
	}
	return nil
}

// Wrapper for a set of headers.
type HeaderMap struct {
	Headers              []*HeaderValue `protobuf:"bytes,1,rep,name=headers,proto3" json:"headers,omitempty"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

func (m *HeaderMap) Reset()         { *m = HeaderMap{} }
func (m *HeaderMap) String() string { return proto.CompactTextString(m) }
func (*HeaderMap) ProtoMessage()    {}
func (*HeaderMap) Descriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{7}
}

func (m *HeaderMap) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HeaderMap.Unmarshal(m, b)
}
func (m *HeaderMap) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HeaderMap.Marshal(b, m, deterministic)
}
func (m *HeaderMap) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HeaderMap.Merge(m, src)
}
func (m *HeaderMap) XXX_Size() int {
	return xxx_messageInfo_HeaderMap.Size(m)
}
func (m *HeaderMap) XXX_DiscardUnknown() {
	xxx_messageInfo_HeaderMap.DiscardUnknown(m)
}

var xxx_messageInfo_HeaderMap proto.InternalMessageInfo

func (m *HeaderMap) GetHeaders() []*HeaderValue {
	if m != nil {
		return m.Headers
	}
	return nil
}

// Data source consisting of either a file or an inline value.
type DataSource struct {
	// Types that are valid to be assigned to Specifier:
	//	*DataSource_Filename
	//	*DataSource_InlineBytes
	//	*DataSource_InlineString
	Specifier            isDataSource_Specifier `protobuf_oneof:"specifier"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *DataSource) Reset()         { *m = DataSource{} }
func (m *DataSource) String() string { return proto.CompactTextString(m) }
func (*DataSource) ProtoMessage()    {}
func (*DataSource) Descriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{8}
}

func (m *DataSource) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DataSource.Unmarshal(m, b)
}
func (m *DataSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DataSource.Marshal(b, m, deterministic)
}
func (m *DataSource) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DataSource.Merge(m, src)
}
func (m *DataSource) XXX_Size() int {
	return xxx_messageInfo_DataSource.Size(m)
}
func (m *DataSource) XXX_DiscardUnknown() {
	xxx_messageInfo_DataSource.DiscardUnknown(m)
}

var xxx_messageInfo_DataSource proto.InternalMessageInfo

type isDataSource_Specifier interface {
	isDataSource_Specifier()
}

type DataSource_Filename struct {
	Filename string `protobuf:"bytes,1,opt,name=filename,proto3,oneof"`
}

type DataSource_InlineBytes struct {
	InlineBytes []byte `protobuf:"bytes,2,opt,name=inline_bytes,json=inlineBytes,proto3,oneof"`
}

type DataSource_InlineString struct {
	InlineString string `protobuf:"bytes,3,opt,name=inline_string,json=inlineString,proto3,oneof"`
}

func (*DataSource_Filename) isDataSource_Specifier() {}

func (*DataSource_InlineBytes) isDataSource_Specifier() {}

func (*DataSource_InlineString) isDataSource_Specifier() {}

func (m *DataSource) GetSpecifier() isDataSource_Specifier {
	if m != nil {
		return m.Specifier
	}
	return nil
}

func (m *DataSource) GetFilename() string {
	if x, ok := m.GetSpecifier().(*DataSource_Filename); ok {
		return x.Filename
	}
	return ""
}

func (m *DataSource) GetInlineBytes() []byte {
	if x, ok := m.GetSpecifier().(*DataSource_InlineBytes); ok {
		return x.InlineBytes
	}
	return nil
}

func (m *DataSource) GetInlineString() string {
	if x, ok := m.GetSpecifier().(*DataSource_InlineString); ok {
		return x.InlineString
	}
	return ""
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*DataSource) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*DataSource_Filename)(nil),
		(*DataSource_InlineBytes)(nil),
		(*DataSource_InlineString)(nil),
	}
}

// The message specifies how to fetch data from remote and how to verify it.
type RemoteDataSource struct {
	// The HTTP URI to fetch the remote data.
	HttpUri *HttpUri `protobuf:"bytes,1,opt,name=http_uri,json=httpUri,proto3" json:"http_uri,omitempty"`
	// SHA256 string for verifying data.
	Sha256               string   `protobuf:"bytes,2,opt,name=sha256,proto3" json:"sha256,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RemoteDataSource) Reset()         { *m = RemoteDataSource{} }
func (m *RemoteDataSource) String() string { return proto.CompactTextString(m) }
func (*RemoteDataSource) ProtoMessage()    {}
func (*RemoteDataSource) Descriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{9}
}

func (m *RemoteDataSource) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RemoteDataSource.Unmarshal(m, b)
}
func (m *RemoteDataSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RemoteDataSource.Marshal(b, m, deterministic)
}
func (m *RemoteDataSource) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RemoteDataSource.Merge(m, src)
}
func (m *RemoteDataSource) XXX_Size() int {
	return xxx_messageInfo_RemoteDataSource.Size(m)
}
func (m *RemoteDataSource) XXX_DiscardUnknown() {
	xxx_messageInfo_RemoteDataSource.DiscardUnknown(m)
}

var xxx_messageInfo_RemoteDataSource proto.InternalMessageInfo

func (m *RemoteDataSource) GetHttpUri() *HttpUri {
	if m != nil {
		return m.HttpUri
	}
	return nil
}

func (m *RemoteDataSource) GetSha256() string {
	if m != nil {
		return m.Sha256
	}
	return ""
}

// Async data source which support async data fetch.
type AsyncDataSource struct {
	// Types that are valid to be assigned to Specifier:
	//	*AsyncDataSource_Local
	//	*AsyncDataSource_Remote
	Specifier            isAsyncDataSource_Specifier `protobuf_oneof:"specifier"`
	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
	XXX_unrecognized     []byte                      `json:"-"`
	XXX_sizecache        int32                       `json:"-"`
}

func (m *AsyncDataSource) Reset()         { *m = AsyncDataSource{} }
func (m *AsyncDataSource) String() string { return proto.CompactTextString(m) }
func (*AsyncDataSource) ProtoMessage()    {}
func (*AsyncDataSource) Descriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{10}
}

func (m *AsyncDataSource) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AsyncDataSource.Unmarshal(m, b)
}
func (m *AsyncDataSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AsyncDataSource.Marshal(b, m, deterministic)
}
func (m *AsyncDataSource) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AsyncDataSource.Merge(m, src)
}
func (m *AsyncDataSource) XXX_Size() int {
	return xxx_messageInfo_AsyncDataSource.Size(m)
}
func (m *AsyncDataSource) XXX_DiscardUnknown() {
	xxx_messageInfo_AsyncDataSource.DiscardUnknown(m)
}

var xxx_messageInfo_AsyncDataSource proto.InternalMessageInfo

type isAsyncDataSource_Specifier interface {
	isAsyncDataSource_Specifier()
}

type AsyncDataSource_Local struct {
	Local *DataSource `protobuf:"bytes,1,opt,name=local,proto3,oneof"`
}

type AsyncDataSource_Remote struct {
	Remote *RemoteDataSource `protobuf:"bytes,2,opt,name=remote,proto3,oneof"`
}

func (*AsyncDataSource_Local) isAsyncDataSource_Specifier() {}

func (*AsyncDataSource_Remote) isAsyncDataSource_Specifier() {}

func (m *AsyncDataSource) GetSpecifier() isAsyncDataSource_Specifier {
	if m != nil {
		return m.Specifier
	}
	return nil
}

func (m *AsyncDataSource) GetLocal() *DataSource {
	if x, ok := m.GetSpecifier().(*AsyncDataSource_Local); ok {
		return x.Local
	}
	return nil
}

func (m *AsyncDataSource) GetRemote() *RemoteDataSource {
	if x, ok := m.GetSpecifier().(*AsyncDataSource_Remote); ok {
		return x.Remote
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*AsyncDataSource) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*AsyncDataSource_Local)(nil),
		(*AsyncDataSource_Remote)(nil),
	}
}

// Configuration for transport socket in :ref:`listeners <config_listeners>` and
// :ref:`clusters <envoy_api_msg_Cluster>`. If the configuration is
// empty, a default transport socket implementation and configuration will be
// chosen based on the platform and existence of tls_context.
type TransportSocket struct {
	// The name of the transport socket to instantiate. The name must match a supported transport
	// socket implementation.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Implementation specific configuration which depends on the implementation being instantiated.
	// See the supported transport socket implementations for further documentation.
	//
	// Types that are valid to be assigned to ConfigType:
	//	*TransportSocket_Config
	//	*TransportSocket_TypedConfig
	ConfigType           isTransportSocket_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
	XXX_unrecognized     []byte                       `json:"-"`
	XXX_sizecache        int32                        `json:"-"`
}

func (m *TransportSocket) Reset()         { *m = TransportSocket{} }
func (m *TransportSocket) String() string { return proto.CompactTextString(m) }
func (*TransportSocket) ProtoMessage()    {}
func (*TransportSocket) Descriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{11}
}

func (m *TransportSocket) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TransportSocket.Unmarshal(m, b)
}
func (m *TransportSocket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TransportSocket.Marshal(b, m, deterministic)
}
func (m *TransportSocket) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TransportSocket.Merge(m, src)
}
func (m *TransportSocket) XXX_Size() int {
	return xxx_messageInfo_TransportSocket.Size(m)
}
func (m *TransportSocket) XXX_DiscardUnknown() {
	xxx_messageInfo_TransportSocket.DiscardUnknown(m)
}

var xxx_messageInfo_TransportSocket proto.InternalMessageInfo

func (m *TransportSocket) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isTransportSocket_ConfigType interface {
	isTransportSocket_ConfigType()
}

type TransportSocket_Config struct {
	Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"`
}

type TransportSocket_TypedConfig struct {
	TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*TransportSocket_Config) isTransportSocket_ConfigType() {}

func (*TransportSocket_TypedConfig) isTransportSocket_ConfigType() {}

func (m *TransportSocket) GetConfigType() isTransportSocket_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

// Deprecated: Do not use.
func (m *TransportSocket) GetConfig() *_struct.Struct {
	if x, ok := m.GetConfigType().(*TransportSocket_Config); ok {
		return x.Config
	}
	return nil
}

func (m *TransportSocket) GetTypedConfig() *any.Any {
	if x, ok := m.GetConfigType().(*TransportSocket_TypedConfig); ok {
		return x.TypedConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*TransportSocket) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*TransportSocket_Config)(nil),
		(*TransportSocket_TypedConfig)(nil),
	}
}

// Generic socket option message. This would be used to set socket options that
// might not exist in upstream kernels or precompiled Envoy binaries.
// [#next-free-field: 7]
type SocketOption struct {
	// An optional name to give this socket option for debugging, etc.
	// Uniqueness is not required and no special meaning is assumed.
	Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"`
	// Corresponding to the level value passed to setsockopt, such as IPPROTO_TCP
	Level int64 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"`
	// The numeric name as passed to setsockopt
	Name int64 `protobuf:"varint,3,opt,name=name,proto3" json:"name,omitempty"`
	// Types that are valid to be assigned to Value:
	//	*SocketOption_IntValue
	//	*SocketOption_BufValue
	Value isSocketOption_Value `protobuf_oneof:"value"`
	// The state in which the option will be applied. When used in BindConfig
	// STATE_PREBIND is currently the only valid value.
	State                SocketOption_SocketState `protobuf:"varint,6,opt,name=state,proto3,enum=envoy.api.v2.core.SocketOption_SocketState" json:"state,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
	XXX_unrecognized     []byte                   `json:"-"`
	XXX_sizecache        int32                    `json:"-"`
}

func (m *SocketOption) Reset()         { *m = SocketOption{} }
func (m *SocketOption) String() string { return proto.CompactTextString(m) }
func (*SocketOption) ProtoMessage()    {}
func (*SocketOption) Descriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{12}
}

func (m *SocketOption) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SocketOption.Unmarshal(m, b)
}
func (m *SocketOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SocketOption.Marshal(b, m, deterministic)
}
func (m *SocketOption) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SocketOption.Merge(m, src)
}
func (m *SocketOption) XXX_Size() int {
	return xxx_messageInfo_SocketOption.Size(m)
}
func (m *SocketOption) XXX_DiscardUnknown() {
	xxx_messageInfo_SocketOption.DiscardUnknown(m)
}

var xxx_messageInfo_SocketOption proto.InternalMessageInfo

func (m *SocketOption) GetDescription() string {
	if m != nil {
		return m.Description
	}
	return ""
}

func (m *SocketOption) GetLevel() int64 {
	if m != nil {
		return m.Level
	}
	return 0
}

func (m *SocketOption) GetName() int64 {
	if m != nil {
		return m.Name
	}
	return 0
}

type isSocketOption_Value interface {
	isSocketOption_Value()
}

type SocketOption_IntValue struct {
	IntValue int64 `protobuf:"varint,4,opt,name=int_value,json=intValue,proto3,oneof"`
}

type SocketOption_BufValue struct {
	BufValue []byte `protobuf:"bytes,5,opt,name=buf_value,json=bufValue,proto3,oneof"`
}

func (*SocketOption_IntValue) isSocketOption_Value() {}

func (*SocketOption_BufValue) isSocketOption_Value() {}

func (m *SocketOption) GetValue() isSocketOption_Value {
	if m != nil {
		return m.Value
	}
	return nil
}

func (m *SocketOption) GetIntValue() int64 {
	if x, ok := m.GetValue().(*SocketOption_IntValue); ok {
		return x.IntValue
	}
	return 0
}

func (m *SocketOption) GetBufValue() []byte {
	if x, ok := m.GetValue().(*SocketOption_BufValue); ok {
		return x.BufValue
	}
	return nil
}

func (m *SocketOption) GetState() SocketOption_SocketState {
	if m != nil {
		return m.State
	}
	return SocketOption_STATE_PREBIND
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*SocketOption) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*SocketOption_IntValue)(nil),
		(*SocketOption_BufValue)(nil),
	}
}

// Runtime derived FractionalPercent with defaults for when the numerator or denominator is not
// specified via a runtime key.
//
// .. note::
//
//   Parsing of the runtime key's data is implemented such that it may be represented as a
//   :ref:`FractionalPercent <envoy_api_msg_type.FractionalPercent>` proto represented as JSON/YAML
//   and may also be represented as an integer with the assumption that the value is an integral
//   percentage out of 100. For instance, a runtime key lookup returning the value "42" would parse
//   as a `FractionalPercent` whose numerator is 42 and denominator is HUNDRED.
type RuntimeFractionalPercent struct {
	// Default value if the runtime value's for the numerator/denominator keys are not available.
	DefaultValue *_type.FractionalPercent `protobuf:"bytes,1,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"`
	// Runtime key for a YAML representation of a FractionalPercent.
	RuntimeKey           string   `protobuf:"bytes,2,opt,name=runtime_key,json=runtimeKey,proto3" json:"runtime_key,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RuntimeFractionalPercent) Reset()         { *m = RuntimeFractionalPercent{} }
func (m *RuntimeFractionalPercent) String() string { return proto.CompactTextString(m) }
func (*RuntimeFractionalPercent) ProtoMessage()    {}
func (*RuntimeFractionalPercent) Descriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{13}
}

func (m *RuntimeFractionalPercent) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RuntimeFractionalPercent.Unmarshal(m, b)
}
func (m *RuntimeFractionalPercent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RuntimeFractionalPercent.Marshal(b, m, deterministic)
}
func (m *RuntimeFractionalPercent) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RuntimeFractionalPercent.Merge(m, src)
}
func (m *RuntimeFractionalPercent) XXX_Size() int {
	return xxx_messageInfo_RuntimeFractionalPercent.Size(m)
}
func (m *RuntimeFractionalPercent) XXX_DiscardUnknown() {
	xxx_messageInfo_RuntimeFractionalPercent.DiscardUnknown(m)
}

var xxx_messageInfo_RuntimeFractionalPercent proto.InternalMessageInfo

func (m *RuntimeFractionalPercent) GetDefaultValue() *_type.FractionalPercent {
	if m != nil {
		return m.DefaultValue
	}
	return nil
}

func (m *RuntimeFractionalPercent) GetRuntimeKey() string {
	if m != nil {
		return m.RuntimeKey
	}
	return ""
}

// Identifies a specific ControlPlane instance that Envoy is connected to.
type ControlPlane struct {
	// An opaque control plane identifier that uniquely identifies an instance
	// of control plane. This can be used to identify which control plane instance,
	// the Envoy is connected to.
	Identifier           string   `protobuf:"bytes,1,opt,name=identifier,proto3" json:"identifier,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ControlPlane) Reset()         { *m = ControlPlane{} }
func (m *ControlPlane) String() string { return proto.CompactTextString(m) }
func (*ControlPlane) ProtoMessage()    {}
func (*ControlPlane) Descriptor() ([]byte, []int) {
	return fileDescriptor_a7738c0f9e1bfff4, []int{14}
}

func (m *ControlPlane) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ControlPlane.Unmarshal(m, b)
}
func (m *ControlPlane) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ControlPlane.Marshal(b, m, deterministic)
}
func (m *ControlPlane) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ControlPlane.Merge(m, src)
}
func (m *ControlPlane) XXX_Size() int {
	return xxx_messageInfo_ControlPlane.Size(m)
}
func (m *ControlPlane) XXX_DiscardUnknown() {
	xxx_messageInfo_ControlPlane.DiscardUnknown(m)
}

var xxx_messageInfo_ControlPlane proto.InternalMessageInfo

func (m *ControlPlane) GetIdentifier() string {
	if m != nil {
		return m.Identifier
	}
	return ""
}

func init() {
	proto.RegisterEnum("envoy.api.v2.core.RoutingPriority", RoutingPriority_name, RoutingPriority_value)
	proto.RegisterEnum("envoy.api.v2.core.RequestMethod", RequestMethod_name, RequestMethod_value)
	proto.RegisterEnum("envoy.api.v2.core.TrafficDirection", TrafficDirection_name, TrafficDirection_value)
	proto.RegisterEnum("envoy.api.v2.core.SocketOption_SocketState", SocketOption_SocketState_name, SocketOption_SocketState_value)
	proto.RegisterType((*Locality)(nil), "envoy.api.v2.core.Locality")
	proto.RegisterType((*Node)(nil), "envoy.api.v2.core.Node")
	proto.RegisterType((*Metadata)(nil), "envoy.api.v2.core.Metadata")
	proto.RegisterMapType((map[string]*_struct.Struct)(nil), "envoy.api.v2.core.Metadata.FilterMetadataEntry")
	proto.RegisterType((*RuntimeUInt32)(nil), "envoy.api.v2.core.RuntimeUInt32")
	proto.RegisterType((*RuntimeFeatureFlag)(nil), "envoy.api.v2.core.RuntimeFeatureFlag")
	proto.RegisterType((*HeaderValue)(nil), "envoy.api.v2.core.HeaderValue")
	proto.RegisterType((*HeaderValueOption)(nil), "envoy.api.v2.core.HeaderValueOption")
	proto.RegisterType((*HeaderMap)(nil), "envoy.api.v2.core.HeaderMap")
	proto.RegisterType((*DataSource)(nil), "envoy.api.v2.core.DataSource")
	proto.RegisterType((*RemoteDataSource)(nil), "envoy.api.v2.core.RemoteDataSource")
	proto.RegisterType((*AsyncDataSource)(nil), "envoy.api.v2.core.AsyncDataSource")
	proto.RegisterType((*TransportSocket)(nil), "envoy.api.v2.core.TransportSocket")
	proto.RegisterType((*SocketOption)(nil), "envoy.api.v2.core.SocketOption")
	proto.RegisterType((*RuntimeFractionalPercent)(nil), "envoy.api.v2.core.RuntimeFractionalPercent")
	proto.RegisterType((*ControlPlane)(nil), "envoy.api.v2.core.ControlPlane")
}

func init() { proto.RegisterFile("envoy/api/v2/core/base.proto", fileDescriptor_a7738c0f9e1bfff4) }

var fileDescriptor_a7738c0f9e1bfff4 = []byte{
	// 1268 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x56, 0xcb, 0x6e, 0xdb, 0xc6,
	0x1a, 0x36, 0x75, 0xd7, 0x2f, 0x39, 0x66, 0x26, 0x41, 0xa2, 0x38, 0x17, 0x1b, 0x0a, 0x0e, 0x60,
	0xe4, 0x9c, 0x43, 0x01, 0x0a, 0xd2, 0xa6, 0x05, 0x7a, 0x31, 0x25, 0x3a, 0x12, 0x62, 0x4b, 0x2a,
	0x45, 0x05, 0x45, 0x16, 0x15, 0x46, 0xd2, 0x48, 0x1e, 0x84, 0x26, 0xd9, 0xe1, 0x50, 0xad, 0xb2,
	0x0a, 0xba, 0x4b, 0xdf, 0xa0, 0xeb, 0x3e, 0x40, 0x1f, 0xa0, 0x9b, 0x02, 0x7d, 0xa9, 0xc2, 0xab,
	0x62, 0x2e, 0x74, 0x14, 0x5b, 0x49, 0x76, 0x9c, 0xef, 0xfb, 0xbf, 0xf9, 0xaf, 0xf3, 0x4b, 0x70,
	0x8f, 0x04, 0xcb, 0x70, 0xd5, 0xc0, 0x11, 0x6d, 0x2c, 0x9b, 0x8d, 0x69, 0xc8, 0x48, 0x63, 0x82,
	0x63, 0x62, 0x45, 0x2c, 0xe4, 0x21, 0xba, 0x2e, 0x59, 0x0b, 0x47, 0xd4, 0x5a, 0x36, 0x2d, 0xc1,
	0xee, 0xee, 0x5f, 0x15, 0x9c, 0x72, 0x1e, 0x8d, 0x13, 0x46, 0x95, 0x68, 0xb7, 0xa6, 0x2c, 0xf8,
	0x2a, 0x22, 0x8d, 0x88, 0xb0, 0x29, 0x09, 0xb8, 0x66, 0xee, 0x2c, 0xc2, 0x70, 0xe1, 0x93, 0x86,
	0x3c, 0x4d, 0x92, 0x79, 0x03, 0x07, 0x2b, 0x4d, 0xdd, 0xbb, 0x4c, 0xc5, 0x9c, 0x25, 0xd3, 0x54,
	0xf8, 0xe0, 0x32, 0xfb, 0x13, 0xc3, 0x51, 0x44, 0x58, 0xac, 0xf9, 0xdb, 0x4b, 0xec, 0xd3, 0x19,
	0xe6, 0xa4, 0x91, 0x7e, 0x28, 0xa2, 0xfe, 0x1d, 0x94, 0x8e, 0xc3, 0x29, 0xf6, 0x29, 0x5f, 0xa1,
	0x5b, 0x50, 0x60, 0x64, 0x41, 0xc3, 0xa0, 0x66, 0xec, 0x1b, 0x07, 0x65, 0x57, 0x9f, 0x10, 0x82,
	0xdc, 0xeb, 0x30, 0x20, 0xb5, 0x8c, 0x44, 0xe5, 0x37, 0xba, 0x03, 0xa5, 0x38, 0x99, 0x8c, 0x25,
	0x9e, 0x95, 0x78, 0x31, 0x4e, 0x26, 0x2f, 0xc3, 0x80, 0xd4, 0xff, 0x36, 0x20, 0xd7, 0x0b, 0x67,
	0x04, 0x5d, 0x83, 0x0c, 0x9d, 0xe9, 0xbb, 0x32, 0x74, 0x86, 0x6a, 0x50, 0x9c, 0xfa, 0x49, 0xcc,
	0x09, 0xd3, 0x57, 0xa5, 0x47, 0xf4, 0x18, 0x4a, 0x67, 0x84, 0xe3, 0x19, 0xe6, 0x58, 0xde, 0x56,
	0x69, 0xde, 0xb6, 0x54, 0x46, 0x56, 0x9a, 0x91, 0x35, 0x94, 0xf9, 0xba, 0x17, 0x86, 0xe8, 0x73,
	0x28, 0xf9, 0x3a, 0xf4, 0x5a, 0x4e, 0x8a, 0xee, 0x5a, 0x57, 0xda, 0x61, 0xa5, 0xd9, 0xb9, 0x17,
	0xc6, 0xe8, 0x21, 0x6c, 0x4f, 0x12, 0xea, 0xcf, 0xc6, 0x4b, 0xc2, 0x62, 0x91, 0x6e, 0x5e, 0x46,
	0x53, 0x95, 0xe0, 0x0b, 0x85, 0xd5, 0xff, 0x32, 0xa0, 0x74, 0x92, 0xba, 0xfa, 0x1e, 0x76, 0xe6,
	0xd4, 0xe7, 0x84, 0x8d, 0x2f, 0xc2, 0x34, 0xf6, 0xb3, 0x07, 0x95, 0x66, 0x63, 0x83, 0xc7, 0x54,
	0x65, 0x1d, 0x49, 0x49, 0x7a, 0x74, 0x02, 0xce, 0x56, 0xee, 0xb5, 0xf9, 0x7b, 0xe0, 0xee, 0x4b,
	0xb8, 0xb1, 0xc1, 0x0c, 0x99, 0x90, 0x7d, 0x45, 0x56, 0xba, 0x76, 0xe2, 0x13, 0xfd, 0x1f, 0xf2,
	0x4b, 0xec, 0x27, 0xaa, 0x0b, 0x1f, 0xa9, 0x8f, 0xb2, 0xfa, 0x32, 0xf3, 0xd4, 0xa8, 0xff, 0x00,
	0xdb, 0x6e, 0x12, 0x70, 0x7a, 0x46, 0x46, 0xdd, 0x80, 0x3f, 0x6e, 0x8a, 0xc4, 0x67, 0x64, 0x8e,
	0x13, 0x9f, 0x8f, 0xdf, 0xdd, 0xb5, 0xed, 0x56, 0x35, 0xf8, 0x42, 0x60, 0xe8, 0x00, 0x2a, 0x4c,
	0xa9, 0xc6, 0x22, 0x04, 0xd9, 0x5c, 0xbb, 0x78, 0x6e, 0xe7, 0x58, 0x66, 0xdf, 0x70, 0x41, 0x73,
	0xcf, 0xc9, 0xaa, 0xfe, 0xd6, 0x00, 0xa4, 0x1d, 0x1c, 0x11, 0xcc, 0x13, 0x46, 0x8e, 0x7c, 0xbc,
	0x40, 0xdd, 0xcb, 0x5e, 0x0c, 0x19, 0xf1, 0xee, 0x95, 0x88, 0xed, 0x30, 0xf4, 0xa5, 0x4f, 0xbb,
	0x74, 0x6e, 0xe7, 0x7f, 0x35, 0x32, 0xa6, 0xf1, 0xf1, 0x58, 0x32, 0x1f, 0x8e, 0xe5, 0x04, 0x2a,
	0x1d, 0x82, 0x67, 0x84, 0x29, 0xe1, 0xfd, 0xb5, 0xfa, 0xd9, 0x95, 0x73, 0xbb, 0xc4, 0x0a, 0xfb,
	0xc6, 0xc1, 0x9b, 0x37, 0x86, 0x2a, 0xe6, 0xde, 0x7a, 0x31, 0xcb, 0x76, 0xf9, 0xdc, 0x2e, 0xb0,
	0x9c, 0xa4, 0x15, 0x2e, 0x52, 0xbb, 0xbe, 0x76, 0x5f, 0x3f, 0xe2, 0xe2, 0x21, 0x7c, 0x0b, 0x85,
	0x53, 0x09, 0xea, 0x94, 0x1e, 0x6c, 0xe8, 0xfe, 0x9a, 0x6a, 0x2d, 0x2d, 0xad, 0x43, 0x4d, 0x28,
	0x88, 0x77, 0x19, 0xcc, 0x74, 0x1b, 0x3f, 0x52, 0x14, 0x57, 0x5b, 0xd6, 0x1d, 0x28, 0xab, 0x4b,
	0x4f, 0x70, 0x84, 0x9e, 0x42, 0x51, 0x5d, 0x15, 0xeb, 0x09, 0xfc, 0x44, 0x0c, 0x6e, 0x6a, 0x5e,
	0xff, 0xdd, 0x00, 0x68, 0x63, 0x8e, 0x87, 0x61, 0xc2, 0xa6, 0x04, 0xfd, 0x07, 0x4a, 0x73, 0xea,
	0x93, 0x00, 0x9f, 0x11, 0x5d, 0xa6, 0xb4, 0xae, 0x9d, 0x2d, 0xf7, 0x82, 0x42, 0xff, 0x83, 0x2a,
	0x0d, 0x7c, 0x1a, 0x90, 0xf1, 0x64, 0xc5, 0x49, 0x2c, 0xc3, 0xae, 0x4a, 0xd3, 0xd7, 0x19, 0x53,
	0x98, 0x56, 0x14, 0x6d, 0x0b, 0x16, 0x59, 0xb0, 0xad, 0xad, 0x63, 0xce, 0x68, 0xb0, 0xb8, 0x34,
	0x3d, 0x9d, 0x2d, 0x57, 0xdf, 0x36, 0x94, 0xb4, 0x6d, 0x42, 0x39, 0x8e, 0xc8, 0x94, 0xce, 0x29,
	0x61, 0x28, 0xfb, 0x8f, 0x6d, 0xd4, 0x39, 0x98, 0x2e, 0x39, 0x0b, 0x39, 0x59, 0x0b, 0xf5, 0x1b,
	0x28, 0xa5, 0x1b, 0xf4, 0x62, 0x96, 0x36, 0x24, 0xcd, 0x79, 0x34, 0x62, 0x74, 0xad, 0xe8, 0xc5,
	0x53, 0x05, 0xa1, 0x3d, 0x28, 0xc4, 0xa7, 0xb8, 0xf9, 0xe4, 0xb3, 0xcb, 0x13, 0xa4, 0xe1, 0xfa,
	0x6f, 0x06, 0xec, 0x1c, 0xc6, 0xab, 0x60, 0xba, 0xe6, 0xf5, 0x09, 0xe4, 0xe5, 0xc6, 0xd0, 0x2e,
	0xef, 0x6f, 0x70, 0xf9, 0xce, 0xba, 0xb3, 0xe5, 0x2a, 0x6b, 0xf4, 0x95, 0x58, 0xa2, 0x22, 0x01,
	0xdd, 0xe1, 0x87, 0x1b, 0x74, 0x97, 0x33, 0xec, 0x6c, 0xb9, 0x5a, 0xb4, 0xa1, 0x22, 0x7f, 0x18,
	0xb0, 0xe3, 0x31, 0x1c, 0xc4, 0x51, 0xc8, 0xf8, 0x30, 0x9c, 0xbe, 0x22, 0x1c, 0xdd, 0x85, 0xdc,
	0x86, 0xc6, 0xb9, 0x12, 0x44, 0x4f, 0xa0, 0x30, 0x0d, 0x83, 0x39, 0x5d, 0x7c, 0x62, 0x55, 0xd8,
	0x99, 0x9a, 0xe8, 0x88, 0x36, 0x46, 0x5f, 0x40, 0x55, 0xfc, 0x22, 0xcd, 0xc6, 0x5a, 0xac, 0xf6,
	0xf0, 0xcd, 0x2b, 0xe2, 0xc3, 0x60, 0x25, 0xda, 0x2e, 0x6d, 0x5b, 0xd2, 0xd4, 0xde, 0x86, 0x8a,
	0x12, 0x8d, 0x05, 0x5a, 0xff, 0x33, 0x03, 0x55, 0x15, 0xa8, 0x7e, 0x37, 0xfb, 0x50, 0x99, 0x91,
	0x78, 0xca, 0xa8, 0x3c, 0xea, 0xad, 0xb6, 0x0e, 0xa1, 0x9b, 0x90, 0xf7, 0xc9, 0x92, 0xf8, 0x32,
	0xe4, 0xac, 0xab, 0x0e, 0xe2, 0x87, 0x47, 0xa6, 0x99, 0x95, 0xa0, 0xca, 0xee, 0x3e, 0x94, 0x69,
	0x90, 0x6e, 0x16, 0xb1, 0xf6, 0xb3, 0x62, 0x5e, 0x69, 0xc0, 0xd3, 0x87, 0x5f, 0x9e, 0x24, 0x73,
	0x4d, 0x8b, 0xbd, 0x5e, 0x15, 0xf4, 0x24, 0x99, 0x2b, 0xfa, 0x39, 0xe4, 0x63, 0x8e, 0x39, 0xa9,
	0x89, 0x75, 0x70, 0xad, 0xf9, 0xdf, 0x0d, 0xcd, 0x59, 0x8f, 0x5c, 0x1f, 0x86, 0x42, 0x22, 0x07,
	0xeb, 0x17, 0x39, 0x58, 0xea, 0x8e, 0xfa, 0x11, 0x54, 0xd6, 0x78, 0x74, 0x1d, 0xb6, 0x87, 0xde,
	0xa1, 0xe7, 0x8c, 0x07, 0xae, 0x63, 0x77, 0x7b, 0x6d, 0x73, 0x0b, 0xed, 0x40, 0x45, 0x41, 0x76,
	0x7f, 0xd4, 0x6b, 0x9b, 0x06, 0xba, 0x01, 0x3b, 0x0a, 0x38, 0xee, 0x0e, 0x3d, 0xa7, 0xd7, 0xed,
	0x3d, 0x33, 0x33, 0x76, 0x55, 0x6f, 0x23, 0xd5, 0xef, 0xb7, 0x06, 0xd4, 0xd2, 0xad, 0xca, 0xf0,
	0x54, 0x84, 0x81, 0xfd, 0x81, 0xfa, 0x9b, 0x80, 0x8e, 0x37, 0xef, 0xd6, 0x74, 0x38, 0x45, 0xf9,
	0xad, 0x2b, 0xaa, 0x0f, 0xae, 0xd7, 0xbd, 0x0d, 0xeb, 0xf5, 0xbd, 0xad, 0x6a, 0x41, 0xb5, 0x15,
	0x06, 0x9c, 0x85, 0xfe, 0xc0, 0xc7, 0x01, 0x41, 0x0f, 0x00, 0xe8, 0x8c, 0x04, 0x5c, 0x8e, 0xa7,
	0xee, 0xe3, 0x1a, 0xf2, 0xe8, 0x00, 0x76, 0xdc, 0x30, 0xe1, 0x34, 0x58, 0x0c, 0x18, 0x0d, 0x99,
	0xf8, 0xb1, 0xad, 0x40, 0xb1, 0xed, 0x1c, 0x1d, 0x8e, 0x8e, 0x3d, 0x73, 0x0b, 0x95, 0x20, 0xd7,
	0xe9, 0x3e, 0xeb, 0x98, 0xc6, 0xa3, 0xb7, 0x06, 0x6c, 0xbb, 0xe4, 0xc7, 0x84, 0xc4, 0xfc, 0x84,
	0xf0, 0xd3, 0x70, 0x86, 0x6e, 0x01, 0x3a, 0x71, 0xbc, 0x4e, 0xbf, 0x3d, 0x1e, 0xf5, 0x86, 0x03,
	0xa7, 0xd5, 0x3d, 0xea, 0x3a, 0xa2, 0x86, 0x45, 0xc8, 0x3e, 0x73, 0x3c, 0xd3, 0x90, 0x62, 0xe7,
	0xb0, 0x6d, 0x66, 0xc4, 0xd7, 0xa0, 0x3f, 0xf4, 0xcc, 0xac, 0x20, 0x07, 0x23, 0xcf, 0xcc, 0x21,
	0x80, 0x42, 0xdb, 0x39, 0x76, 0x3c, 0xc7, 0xcc, 0x0b, 0x97, 0xad, 0x7e, 0xaf, 0xe7, 0xb4, 0x3c,
	0xb3, 0x20, 0x0e, 0xfd, 0x81, 0xd7, 0xed, 0xf7, 0x86, 0x66, 0x11, 0x95, 0x21, 0xef, 0xb9, 0x87,
	0x2d, 0xc7, 0x2c, 0x89, 0xcf, 0xc1, 0xa1, 0xd7, 0xea, 0x98, 0xe5, 0x47, 0x5f, 0x83, 0xe9, 0x31,
	0x3c, 0x9f, 0xd3, 0x69, 0x9b, 0x32, 0x22, 0x6b, 0x27, 0x3a, 0xf7, 0x7e, 0x18, 0x15, 0x28, 0x76,
	0x7b, 0x69, 0x1b, 0xab, 0x50, 0xea, 0x8f, 0x3c, 0x75, 0xca, 0xd8, 0x16, 0xec, 0xd1, 0x50, 0x75,
	0x20, 0x62, 0xe1, 0xcf, 0xab, 0xab, 0x43, 0x65, 0x97, 0x6d, 0x1c, 0x93, 0x81, 0x78, 0x42, 0x03,
	0x63, 0x52, 0x90, 0x6f, 0xe9, 0xf1, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x74, 0x1e, 0x47, 0x93,
	0x5b, 0x0a, 0x00, 0x00,
}
07070100000063000081A4000003E800000064000000015E17A247000051C7000000000000000000000000000000000000003F00000000cilium-proxy-20200109/go/envoy/api/v2/core/config_source.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/core/config_source.proto

package envoy_api_v2_core

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// APIs may be fetched via either REST or gRPC.
type ApiConfigSource_ApiType int32

const (
	// Ideally this would be 'reserved 0' but one can't reserve the default
	// value. Instead we throw an exception if this is ever used.
	ApiConfigSource_UNSUPPORTED_REST_LEGACY ApiConfigSource_ApiType = 0 // Deprecated: Do not use.
	// REST-JSON v2 API. The `canonical JSON encoding
	// <https://developers.google.com/protocol-buffers/docs/proto3#json>`_ for
	// the v2 protos is used.
	ApiConfigSource_REST ApiConfigSource_ApiType = 1
	// gRPC v2 API.
	ApiConfigSource_GRPC ApiConfigSource_ApiType = 2
	// Using the delta xDS gRPC service, i.e. DeltaDiscovery{Request,Response}
	// rather than Discovery{Request,Response}. Rather than sending Envoy the entire state
	// with every update, the xDS server only sends what has changed since the last update.
	//
	// DELTA_GRPC is not yet entirely implemented! Initially, only CDS is available.
	// Do not use for other xDSes. TODO(fredlas) update/remove this warning when appropriate.
	ApiConfigSource_DELTA_GRPC ApiConfigSource_ApiType = 3
)

var ApiConfigSource_ApiType_name = map[int32]string{
	0: "UNSUPPORTED_REST_LEGACY",
	1: "REST",
	2: "GRPC",
	3: "DELTA_GRPC",
}

var ApiConfigSource_ApiType_value = map[string]int32{
	"UNSUPPORTED_REST_LEGACY": 0,
	"REST":                    1,
	"GRPC":                    2,
	"DELTA_GRPC":              3,
}

func (x ApiConfigSource_ApiType) String() string {
	return proto.EnumName(ApiConfigSource_ApiType_name, int32(x))
}

func (ApiConfigSource_ApiType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_1ffcc55cf4c30535, []int{0, 0}
}

// API configuration source. This identifies the API type and cluster that Envoy
// will use to fetch an xDS API.
// [#next-free-field: 8]
type ApiConfigSource struct {
	ApiType ApiConfigSource_ApiType `protobuf:"varint,1,opt,name=api_type,json=apiType,proto3,enum=envoy.api.v2.core.ApiConfigSource_ApiType" json:"api_type,omitempty"`
	// Cluster names should be used only with REST. If > 1
	// cluster is defined, clusters will be cycled through if any kind of failure
	// occurs.
	//
	// .. note::
	//
	//  The cluster with name ``cluster_name`` must be statically defined and its
	//  type must not be ``EDS``.
	ClusterNames []string `protobuf:"bytes,2,rep,name=cluster_names,json=clusterNames,proto3" json:"cluster_names,omitempty"`
	// Multiple gRPC services be provided for GRPC. If > 1 cluster is defined,
	// services will be cycled through if any kind of failure occurs.
	GrpcServices []*GrpcService `protobuf:"bytes,4,rep,name=grpc_services,json=grpcServices,proto3" json:"grpc_services,omitempty"`
	// For REST APIs, the delay between successive polls.
	RefreshDelay *duration.Duration `protobuf:"bytes,3,opt,name=refresh_delay,json=refreshDelay,proto3" json:"refresh_delay,omitempty"`
	// For REST APIs, the request timeout. If not set, a default value of 1s will be used.
	RequestTimeout *duration.Duration `protobuf:"bytes,5,opt,name=request_timeout,json=requestTimeout,proto3" json:"request_timeout,omitempty"`
	// For GRPC APIs, the rate limit settings. If present, discovery requests made by Envoy will be
	// rate limited.
	RateLimitSettings *RateLimitSettings `protobuf:"bytes,6,opt,name=rate_limit_settings,json=rateLimitSettings,proto3" json:"rate_limit_settings,omitempty"`
	// Skip the node identifier in subsequent discovery requests for streaming gRPC config types.
	SetNodeOnFirstMessageOnly bool     `protobuf:"varint,7,opt,name=set_node_on_first_message_only,json=setNodeOnFirstMessageOnly,proto3" json:"set_node_on_first_message_only,omitempty"`
	XXX_NoUnkeyedLiteral      struct{} `json:"-"`
	XXX_unrecognized          []byte   `json:"-"`
	XXX_sizecache             int32    `json:"-"`
}

func (m *ApiConfigSource) Reset()         { *m = ApiConfigSource{} }
func (m *ApiConfigSource) String() string { return proto.CompactTextString(m) }
func (*ApiConfigSource) ProtoMessage()    {}
func (*ApiConfigSource) Descriptor() ([]byte, []int) {
	return fileDescriptor_1ffcc55cf4c30535, []int{0}
}

func (m *ApiConfigSource) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ApiConfigSource.Unmarshal(m, b)
}
func (m *ApiConfigSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ApiConfigSource.Marshal(b, m, deterministic)
}
func (m *ApiConfigSource) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ApiConfigSource.Merge(m, src)
}
func (m *ApiConfigSource) XXX_Size() int {
	return xxx_messageInfo_ApiConfigSource.Size(m)
}
func (m *ApiConfigSource) XXX_DiscardUnknown() {
	xxx_messageInfo_ApiConfigSource.DiscardUnknown(m)
}

var xxx_messageInfo_ApiConfigSource proto.InternalMessageInfo

func (m *ApiConfigSource) GetApiType() ApiConfigSource_ApiType {
	if m != nil {
		return m.ApiType
	}
	return ApiConfigSource_UNSUPPORTED_REST_LEGACY
}

func (m *ApiConfigSource) GetClusterNames() []string {
	if m != nil {
		return m.ClusterNames
	}
	return nil
}

func (m *ApiConfigSource) GetGrpcServices() []*GrpcService {
	if m != nil {
		return m.GrpcServices
	}
	return nil
}

func (m *ApiConfigSource) GetRefreshDelay() *duration.Duration {
	if m != nil {
		return m.RefreshDelay
	}
	return nil
}

func (m *ApiConfigSource) GetRequestTimeout() *duration.Duration {
	if m != nil {
		return m.RequestTimeout
	}
	return nil
}

func (m *ApiConfigSource) GetRateLimitSettings() *RateLimitSettings {
	if m != nil {
		return m.RateLimitSettings
	}
	return nil
}

func (m *ApiConfigSource) GetSetNodeOnFirstMessageOnly() bool {
	if m != nil {
		return m.SetNodeOnFirstMessageOnly
	}
	return false
}

// Aggregated Discovery Service (ADS) options. This is currently empty, but when
// set in :ref:`ConfigSource <envoy_api_msg_core.ConfigSource>` can be used to
// specify that ADS is to be used.
type AggregatedConfigSource struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *AggregatedConfigSource) Reset()         { *m = AggregatedConfigSource{} }
func (m *AggregatedConfigSource) String() string { return proto.CompactTextString(m) }
func (*AggregatedConfigSource) ProtoMessage()    {}
func (*AggregatedConfigSource) Descriptor() ([]byte, []int) {
	return fileDescriptor_1ffcc55cf4c30535, []int{1}
}

func (m *AggregatedConfigSource) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AggregatedConfigSource.Unmarshal(m, b)
}
func (m *AggregatedConfigSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AggregatedConfigSource.Marshal(b, m, deterministic)
}
func (m *AggregatedConfigSource) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AggregatedConfigSource.Merge(m, src)
}
func (m *AggregatedConfigSource) XXX_Size() int {
	return xxx_messageInfo_AggregatedConfigSource.Size(m)
}
func (m *AggregatedConfigSource) XXX_DiscardUnknown() {
	xxx_messageInfo_AggregatedConfigSource.DiscardUnknown(m)
}

var xxx_messageInfo_AggregatedConfigSource proto.InternalMessageInfo

// [#not-implemented-hide:]
// Self-referencing config source options. This is currently empty, but when
// set in :ref:`ConfigSource <envoy_api_msg_core.ConfigSource>` can be used to
// specify that other data can be obtained from the same server.
type SelfConfigSource struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *SelfConfigSource) Reset()         { *m = SelfConfigSource{} }
func (m *SelfConfigSource) String() string { return proto.CompactTextString(m) }
func (*SelfConfigSource) ProtoMessage()    {}
func (*SelfConfigSource) Descriptor() ([]byte, []int) {
	return fileDescriptor_1ffcc55cf4c30535, []int{2}
}

func (m *SelfConfigSource) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SelfConfigSource.Unmarshal(m, b)
}
func (m *SelfConfigSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SelfConfigSource.Marshal(b, m, deterministic)
}
func (m *SelfConfigSource) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SelfConfigSource.Merge(m, src)
}
func (m *SelfConfigSource) XXX_Size() int {
	return xxx_messageInfo_SelfConfigSource.Size(m)
}
func (m *SelfConfigSource) XXX_DiscardUnknown() {
	xxx_messageInfo_SelfConfigSource.DiscardUnknown(m)
}

var xxx_messageInfo_SelfConfigSource proto.InternalMessageInfo

// Rate Limit settings to be applied for discovery requests made by Envoy.
type RateLimitSettings struct {
	// Maximum number of tokens to be used for rate limiting discovery request calls. If not set, a
	// default value of 100 will be used.
	MaxTokens *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=max_tokens,json=maxTokens,proto3" json:"max_tokens,omitempty"`
	// Rate at which tokens will be filled per second. If not set, a default fill rate of 10 tokens
	// per second will be used.
	FillRate             *wrappers.DoubleValue `protobuf:"bytes,2,opt,name=fill_rate,json=fillRate,proto3" json:"fill_rate,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *RateLimitSettings) Reset()         { *m = RateLimitSettings{} }
func (m *RateLimitSettings) String() string { return proto.CompactTextString(m) }
func (*RateLimitSettings) ProtoMessage()    {}
func (*RateLimitSettings) Descriptor() ([]byte, []int) {
	return fileDescriptor_1ffcc55cf4c30535, []int{3}
}

func (m *RateLimitSettings) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimitSettings.Unmarshal(m, b)
}
func (m *RateLimitSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimitSettings.Marshal(b, m, deterministic)
}
func (m *RateLimitSettings) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimitSettings.Merge(m, src)
}
func (m *RateLimitSettings) XXX_Size() int {
	return xxx_messageInfo_RateLimitSettings.Size(m)
}
func (m *RateLimitSettings) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimitSettings.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimitSettings proto.InternalMessageInfo

func (m *RateLimitSettings) GetMaxTokens() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxTokens
	}
	return nil
}

func (m *RateLimitSettings) GetFillRate() *wrappers.DoubleValue {
	if m != nil {
		return m.FillRate
	}
	return nil
}

// Configuration for :ref:`listeners <config_listeners>`, :ref:`clusters
// <config_cluster_manager>`, :ref:`routes
// <envoy_api_msg_RouteConfiguration>`, :ref:`endpoints
// <arch_overview_service_discovery>` etc. may either be sourced from the
// filesystem or from an xDS API source. Filesystem configs are watched with
// inotify for updates.
// [#next-free-field: 6]
type ConfigSource struct {
	// Types that are valid to be assigned to ConfigSourceSpecifier:
	//	*ConfigSource_Path
	//	*ConfigSource_ApiConfigSource
	//	*ConfigSource_Ads
	//	*ConfigSource_Self
	ConfigSourceSpecifier isConfigSource_ConfigSourceSpecifier `protobuf_oneof:"config_source_specifier"`
	// When this timeout is specified, Envoy will wait no longer than the specified time for first
	// config response on this xDS subscription during the :ref:`initialization process
	// <arch_overview_initialization>`. After reaching the timeout, Envoy will move to the next
	// initialization phase, even if the first config is not delivered yet. The timer is activated
	// when the xDS API subscription starts, and is disarmed on first config update or on error. 0
	// means no timeout - Envoy will wait indefinitely for the first xDS config (unless another
	// timeout applies). The default is 15s.
	InitialFetchTimeout  *duration.Duration `protobuf:"bytes,4,opt,name=initial_fetch_timeout,json=initialFetchTimeout,proto3" json:"initial_fetch_timeout,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *ConfigSource) Reset()         { *m = ConfigSource{} }
func (m *ConfigSource) String() string { return proto.CompactTextString(m) }
func (*ConfigSource) ProtoMessage()    {}
func (*ConfigSource) Descriptor() ([]byte, []int) {
	return fileDescriptor_1ffcc55cf4c30535, []int{4}
}

func (m *ConfigSource) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ConfigSource.Unmarshal(m, b)
}
func (m *ConfigSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ConfigSource.Marshal(b, m, deterministic)
}
func (m *ConfigSource) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ConfigSource.Merge(m, src)
}
func (m *ConfigSource) XXX_Size() int {
	return xxx_messageInfo_ConfigSource.Size(m)
}
func (m *ConfigSource) XXX_DiscardUnknown() {
	xxx_messageInfo_ConfigSource.DiscardUnknown(m)
}

var xxx_messageInfo_ConfigSource proto.InternalMessageInfo

type isConfigSource_ConfigSourceSpecifier interface {
	isConfigSource_ConfigSourceSpecifier()
}

type ConfigSource_Path struct {
	Path string `protobuf:"bytes,1,opt,name=path,proto3,oneof"`
}

type ConfigSource_ApiConfigSource struct {
	ApiConfigSource *ApiConfigSource `protobuf:"bytes,2,opt,name=api_config_source,json=apiConfigSource,proto3,oneof"`
}

type ConfigSource_Ads struct {
	Ads *AggregatedConfigSource `protobuf:"bytes,3,opt,name=ads,proto3,oneof"`
}

type ConfigSource_Self struct {
	Self *SelfConfigSource `protobuf:"bytes,5,opt,name=self,proto3,oneof"`
}

func (*ConfigSource_Path) isConfigSource_ConfigSourceSpecifier() {}

func (*ConfigSource_ApiConfigSource) isConfigSource_ConfigSourceSpecifier() {}

func (*ConfigSource_Ads) isConfigSource_ConfigSourceSpecifier() {}

func (*ConfigSource_Self) isConfigSource_ConfigSourceSpecifier() {}

func (m *ConfigSource) GetConfigSourceSpecifier() isConfigSource_ConfigSourceSpecifier {
	if m != nil {
		return m.ConfigSourceSpecifier
	}
	return nil
}

func (m *ConfigSource) GetPath() string {
	if x, ok := m.GetConfigSourceSpecifier().(*ConfigSource_Path); ok {
		return x.Path
	}
	return ""
}

func (m *ConfigSource) GetApiConfigSource() *ApiConfigSource {
	if x, ok := m.GetConfigSourceSpecifier().(*ConfigSource_ApiConfigSource); ok {
		return x.ApiConfigSource
	}
	return nil
}

func (m *ConfigSource) GetAds() *AggregatedConfigSource {
	if x, ok := m.GetConfigSourceSpecifier().(*ConfigSource_Ads); ok {
		return x.Ads
	}
	return nil
}

func (m *ConfigSource) GetSelf() *SelfConfigSource {
	if x, ok := m.GetConfigSourceSpecifier().(*ConfigSource_Self); ok {
		return x.Self
	}
	return nil
}

func (m *ConfigSource) GetInitialFetchTimeout() *duration.Duration {
	if m != nil {
		return m.InitialFetchTimeout
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ConfigSource) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*ConfigSource_Path)(nil),
		(*ConfigSource_ApiConfigSource)(nil),
		(*ConfigSource_Ads)(nil),
		(*ConfigSource_Self)(nil),
	}
}

func init() {
	proto.RegisterEnum("envoy.api.v2.core.ApiConfigSource_ApiType", ApiConfigSource_ApiType_name, ApiConfigSource_ApiType_value)
	proto.RegisterType((*ApiConfigSource)(nil), "envoy.api.v2.core.ApiConfigSource")
	proto.RegisterType((*AggregatedConfigSource)(nil), "envoy.api.v2.core.AggregatedConfigSource")
	proto.RegisterType((*SelfConfigSource)(nil), "envoy.api.v2.core.SelfConfigSource")
	proto.RegisterType((*RateLimitSettings)(nil), "envoy.api.v2.core.RateLimitSettings")
	proto.RegisterType((*ConfigSource)(nil), "envoy.api.v2.core.ConfigSource")
}

func init() {
	proto.RegisterFile("envoy/api/v2/core/config_source.proto", fileDescriptor_1ffcc55cf4c30535)
}

var fileDescriptor_1ffcc55cf4c30535 = []byte{
	// 727 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x53, 0xdd, 0x6e, 0xe2, 0x46,
	0x14, 0xc6, 0xc0, 0x6e, 0x60, 0x20, 0x04, 0x66, 0xdb, 0xc6, 0x1b, 0x55, 0x2c, 0x65, 0xb7, 0x12,
	0xdd, 0x0b, 0x23, 0xb1, 0x52, 0xa5, 0xaa, 0x6a, 0x25, 0x0c, 0x6c, 0xb2, 0x12, 0x0b, 0x68, 0x20,
	0x95, 0x7a, 0x35, 0x9a, 0x98, 0x63, 0x67, 0x54, 0xe3, 0x71, 0x67, 0xc6, 0x34, 0xdc, 0xf6, 0x35,
	0xfa, 0x06, 0x7d, 0x8d, 0x3e, 0x48, 0x5f, 0xa3, 0xda, 0xab, 0x6a, 0x8c, 0xd3, 0x86, 0x9f, 0x28,
	0xbe, 0xf2, 0x39, 0xf3, 0x7d, 0x73, 0xbe, 0xf3, 0xcd, 0x39, 0xe8, 0x6b, 0x88, 0xd6, 0x62, 0xd3,
	0x65, 0x31, 0xef, 0xae, 0x7b, 0x5d, 0x4f, 0x48, 0xe8, 0x7a, 0x22, 0xf2, 0x79, 0x40, 0x95, 0x48,
	0xa4, 0x07, 0x4e, 0x2c, 0x85, 0x16, 0xb8, 0x91, 0xc2, 0x1c, 0x16, 0x73, 0x67, 0xdd, 0x73, 0x0c,
	0xec, 0xe2, 0xcd, 0x21, 0x33, 0x90, 0xb1, 0x47, 0x15, 0xc8, 0x35, 0xbf, 0x27, 0x5e, 0x34, 0x03,
	0x21, 0x82, 0x10, 0xba, 0x69, 0x74, 0x93, 0xf8, 0xdd, 0x65, 0x22, 0x99, 0xe6, 0x22, 0x7a, 0xec,
	0xfc, 0x37, 0xc9, 0xe2, 0x18, 0xa4, 0xca, 0xce, 0xcf, 0xd7, 0x2c, 0xe4, 0x4b, 0xa6, 0xa1, 0x7b,
	0xff, 0xb3, 0x3d, 0x68, 0xff, 0x55, 0x44, 0x67, 0xfd, 0x98, 0x0f, 0x52, 0xb1, 0xf3, 0x54, 0x2b,
	0x9e, 0xa2, 0x12, 0x8b, 0x39, 0xd5, 0x9b, 0x18, 0x6c, 0xab, 0x65, 0x75, 0x6a, 0xbd, 0xb7, 0xce,
	0x81, 0x70, 0x67, 0x8f, 0x65, 0xe2, 0xc5, 0x26, 0x06, 0xb7, 0xf4, 0xc9, 0x7d, 0xf6, 0xbb, 0x95,
	0xaf, 0x5b, 0xe4, 0x84, 0x6d, 0x53, 0xf8, 0x35, 0x3a, 0xf5, 0xc2, 0x44, 0x69, 0x90, 0x34, 0x62,
	0x2b, 0x50, 0x76, 0xbe, 0x55, 0xe8, 0x94, 0x49, 0x35, 0x4b, 0x4e, 0x4c, 0x0e, 0x0f, 0xd0, 0xe9,
	0xc3, 0xc6, 0x95, 0x5d, 0x6c, 0x15, 0x3a, 0x95, 0x5e, 0xf3, 0x48, 0xe9, 0x4b, 0x19, 0x7b, 0xf3,
	0x2d, 0x8c, 0x54, 0x83, 0xff, 0x03, 0x85, 0x7f, 0x44, 0xa7, 0x12, 0x7c, 0x09, 0xea, 0x96, 0x2e,
	0x21, 0x64, 0x1b, 0xbb, 0xd0, 0xb2, 0x3a, 0x95, 0xde, 0x4b, 0x67, 0xeb, 0x8f, 0x73, 0xef, 0x8f,
	0x33, 0xcc, 0xfc, 0x23, 0xd5, 0x0c, 0x3f, 0x34, 0x70, 0x3c, 0x46, 0x67, 0x12, 0x7e, 0x4d, 0x40,
	0x69, 0xaa, 0xf9, 0x0a, 0x44, 0xa2, 0xed, 0x67, 0x4f, 0xdc, 0x90, 0x36, 0xfc, 0xa7, 0x95, 0x7f,
	0x9b, 0x23, 0xb5, 0x8c, 0xbb, 0xd8, 0x52, 0xf1, 0x02, 0xbd, 0x90, 0x4c, 0x03, 0x0d, 0xf9, 0x8a,
	0x6b, 0xaa, 0x40, 0x6b, 0x1e, 0x05, 0xca, 0x7e, 0x9e, 0xde, 0xf8, 0xe6, 0x48, 0x63, 0x84, 0x69,
	0x18, 0x1b, 0xf0, 0x3c, 0xc3, 0x92, 0x86, 0xdc, 0x4f, 0xe1, 0x3e, 0x6a, 0x2a, 0xd0, 0x34, 0x12,
	0x4b, 0xa0, 0x22, 0xa2, 0x3e, 0x97, 0x4a, 0xd3, 0x15, 0x28, 0xc5, 0x02, 0x93, 0x08, 0x37, 0xf6,
	0x49, 0xcb, 0xea, 0x94, 0xc8, 0x4b, 0x05, 0x7a, 0x22, 0x96, 0x30, 0x8d, 0xde, 0x1b, 0xc8, 0xc7,
	0x2d, 0x62, 0x1a, 0x85, 0x9b, 0xf6, 0x04, 0x9d, 0x64, 0xcf, 0x85, 0x5f, 0xa1, 0xf3, 0xeb, 0xc9,
	0xfc, 0x7a, 0x36, 0x9b, 0x92, 0xc5, 0x68, 0x48, 0xc9, 0x68, 0xbe, 0xa0, 0xe3, 0xd1, 0x65, 0x7f,
	0xf0, 0x73, 0x3d, 0x77, 0x91, 0x2f, 0x59, 0xb8, 0x84, 0x8a, 0x26, 0x59, 0x4f, 0xff, 0x2e, 0xc9,
	0x6c, 0x50, 0xcf, 0xe3, 0x1a, 0x42, 0xc3, 0xd1, 0x78, 0xd1, 0xa7, 0x69, 0x5c, 0x68, 0xdb, 0xe8,
	0x8b, 0x7e, 0x10, 0x48, 0x08, 0x98, 0x86, 0xe5, 0xc3, 0xa9, 0x68, 0x63, 0x54, 0x9f, 0x43, 0xe8,
	0xef, 0xe4, 0xfe, 0xb0, 0x50, 0xe3, 0xa0, 0x53, 0xfc, 0x3d, 0x42, 0x2b, 0x76, 0x47, 0xb5, 0xf8,
	0x05, 0x22, 0x95, 0xce, 0x5d, 0xa5, 0xf7, 0xe5, 0x81, 0xeb, 0xd7, 0x1f, 0x22, 0xfd, 0xae, 0xf7,
	0x13, 0x0b, 0x13, 0x20, 0xe5, 0x15, 0xbb, 0x5b, 0xa4, 0x70, 0xfc, 0x01, 0x95, 0x7d, 0x1e, 0x86,
	0xd4, 0xb8, 0x65, 0xe7, 0x1f, 0xe1, 0x0e, 0x45, 0x72, 0x13, 0x42, 0xca, 0x75, 0x6b, 0x9f, 0xdc,
	0x0a, 0x2e, 0x7f, 0x95, 0xcb, 0x3e, 0x52, 0x32, 0x74, 0x23, 0xaa, 0xfd, 0x77, 0x1e, 0x55, 0x77,
	0xd6, 0xe1, 0x33, 0x54, 0x8c, 0x99, 0xbe, 0x4d, 0x25, 0x95, 0xaf, 0x72, 0x24, 0x8d, 0xf0, 0x0c,
	0x35, 0xcc, 0x92, 0xec, 0x6c, 0x79, 0x56, 0xb9, 0xfd, 0xf4, 0xb6, 0x5c, 0xe5, 0xc8, 0x19, 0xdb,
	0x5b, 0xbb, 0x1f, 0x50, 0x81, 0x2d, 0x55, 0x36, 0xb1, 0xdf, 0x1c, 0xbb, 0xe3, 0xa8, 0xc5, 0x57,
	0x39, 0x62, 0x78, 0xf8, 0x3b, 0x54, 0x54, 0x10, 0xfa, 0xd9, 0xbc, 0xbe, 0x3e, 0xc2, 0xdf, 0x7f,
	0x08, 0xd3, 0x8b, 0xa1, 0xe0, 0x8f, 0xe8, 0x73, 0x1e, 0x71, 0xcd, 0x59, 0x48, 0x7d, 0xd0, 0xde,
	0xed, 0x7f, 0xb3, 0x5f, 0x7c, 0x6a, 0x7b, 0x5e, 0x64, 0xbc, 0xf7, 0x86, 0x96, 0x8d, 0xbd, 0xdb,
	0x44, 0xe7, 0x3b, 0xb6, 0x50, 0x15, 0x83, 0xc7, 0x7d, 0x0e, 0x12, 0x17, 0xfe, 0x71, 0x2d, 0xf7,
	0x5b, 0xf4, 0x8a, 0x8b, 0xad, 0xbe, 0x58, 0x8a, 0xbb, 0xcd, 0xa1, 0x54, 0xb7, 0xf1, 0x50, 0xe7,
	0xcc, 0x94, 0x9d, 0x59, 0x37, 0xcf, 0xd3, 0xfa, 0xef, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x04,
	0x3b, 0xef, 0x94, 0x6d, 0x05, 0x00, 0x00,
}
 07070100000064000081A4000003E800000064000000015E17A2470000AA0D000000000000000000000000000000000000003E00000000cilium-proxy-20200109/go/envoy/api/v2/core/grpc_service.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/core/grpc_service.proto

package envoy_api_v2_core

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	duration "github.com/golang/protobuf/ptypes/duration"
	empty "github.com/golang/protobuf/ptypes/empty"
	_struct "github.com/golang/protobuf/ptypes/struct"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// gRPC service configuration. This is used by :ref:`ApiConfigSource
// <envoy_api_msg_core.ApiConfigSource>` and filter configurations.
// [#next-free-field: 6]
type GrpcService struct {
	// Types that are valid to be assigned to TargetSpecifier:
	//	*GrpcService_EnvoyGrpc_
	//	*GrpcService_GoogleGrpc_
	TargetSpecifier isGrpcService_TargetSpecifier `protobuf_oneof:"target_specifier"`
	// The timeout for the gRPC request. This is the timeout for a specific
	// request.
	Timeout *duration.Duration `protobuf:"bytes,3,opt,name=timeout,proto3" json:"timeout,omitempty"`
	// Additional metadata to include in streams initiated to the GrpcService.
	// This can be used for scenarios in which additional ad hoc authorization
	// headers (e.g. `x-foo-bar: baz-key`) are to be injected.
	InitialMetadata      []*HeaderValue `protobuf:"bytes,5,rep,name=initial_metadata,json=initialMetadata,proto3" json:"initial_metadata,omitempty"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

func (m *GrpcService) Reset()         { *m = GrpcService{} }
func (m *GrpcService) String() string { return proto.CompactTextString(m) }
func (*GrpcService) ProtoMessage()    {}
func (*GrpcService) Descriptor() ([]byte, []int) {
	return fileDescriptor_936cbcb9830ffdc2, []int{0}
}

func (m *GrpcService) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GrpcService.Unmarshal(m, b)
}
func (m *GrpcService) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GrpcService.Marshal(b, m, deterministic)
}
func (m *GrpcService) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GrpcService.Merge(m, src)
}
func (m *GrpcService) XXX_Size() int {
	return xxx_messageInfo_GrpcService.Size(m)
}
func (m *GrpcService) XXX_DiscardUnknown() {
	xxx_messageInfo_GrpcService.DiscardUnknown(m)
}

var xxx_messageInfo_GrpcService proto.InternalMessageInfo

type isGrpcService_TargetSpecifier interface {
	isGrpcService_TargetSpecifier()
}

type GrpcService_EnvoyGrpc_ struct {
	EnvoyGrpc *GrpcService_EnvoyGrpc `protobuf:"bytes,1,opt,name=envoy_grpc,json=envoyGrpc,proto3,oneof"`
}

type GrpcService_GoogleGrpc_ struct {
	GoogleGrpc *GrpcService_GoogleGrpc `protobuf:"bytes,2,opt,name=google_grpc,json=googleGrpc,proto3,oneof"`
}

func (*GrpcService_EnvoyGrpc_) isGrpcService_TargetSpecifier() {}

func (*GrpcService_GoogleGrpc_) isGrpcService_TargetSpecifier() {}

func (m *GrpcService) GetTargetSpecifier() isGrpcService_TargetSpecifier {
	if m != nil {
		return m.TargetSpecifier
	}
	return nil
}

func (m *GrpcService) GetEnvoyGrpc() *GrpcService_EnvoyGrpc {
	if x, ok := m.GetTargetSpecifier().(*GrpcService_EnvoyGrpc_); ok {
		return x.EnvoyGrpc
	}
	return nil
}

func (m *GrpcService) GetGoogleGrpc() *GrpcService_GoogleGrpc {
	if x, ok := m.GetTargetSpecifier().(*GrpcService_GoogleGrpc_); ok {
		return x.GoogleGrpc
	}
	return nil
}

func (m *GrpcService) GetTimeout() *duration.Duration {
	if m != nil {
		return m.Timeout
	}
	return nil
}

func (m *GrpcService) GetInitialMetadata() []*HeaderValue {
	if m != nil {
		return m.InitialMetadata
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*GrpcService) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*GrpcService_EnvoyGrpc_)(nil),
		(*GrpcService_GoogleGrpc_)(nil),
	}
}

type GrpcService_EnvoyGrpc struct {
	// The name of the upstream gRPC cluster. SSL credentials will be supplied
	// in the :ref:`Cluster <envoy_api_msg_Cluster>` :ref:`transport_socket
	// <envoy_api_field_Cluster.transport_socket>`.
	ClusterName          string   `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GrpcService_EnvoyGrpc) Reset()         { *m = GrpcService_EnvoyGrpc{} }
func (m *GrpcService_EnvoyGrpc) String() string { return proto.CompactTextString(m) }
func (*GrpcService_EnvoyGrpc) ProtoMessage()    {}
func (*GrpcService_EnvoyGrpc) Descriptor() ([]byte, []int) {
	return fileDescriptor_936cbcb9830ffdc2, []int{0, 0}
}

func (m *GrpcService_EnvoyGrpc) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GrpcService_EnvoyGrpc.Unmarshal(m, b)
}
func (m *GrpcService_EnvoyGrpc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GrpcService_EnvoyGrpc.Marshal(b, m, deterministic)
}
func (m *GrpcService_EnvoyGrpc) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GrpcService_EnvoyGrpc.Merge(m, src)
}
func (m *GrpcService_EnvoyGrpc) XXX_Size() int {
	return xxx_messageInfo_GrpcService_EnvoyGrpc.Size(m)
}
func (m *GrpcService_EnvoyGrpc) XXX_DiscardUnknown() {
	xxx_messageInfo_GrpcService_EnvoyGrpc.DiscardUnknown(m)
}

var xxx_messageInfo_GrpcService_EnvoyGrpc proto.InternalMessageInfo

func (m *GrpcService_EnvoyGrpc) GetClusterName() string {
	if m != nil {
		return m.ClusterName
	}
	return ""
}

// [#next-free-field: 7]
type GrpcService_GoogleGrpc struct {
	// The target URI when using the `Google C++ gRPC client
	// <https://github.com/grpc/grpc>`_. SSL credentials will be supplied in
	// :ref:`channel_credentials <envoy_api_field_core.GrpcService.GoogleGrpc.channel_credentials>`.
	TargetUri          string                                     `protobuf:"bytes,1,opt,name=target_uri,json=targetUri,proto3" json:"target_uri,omitempty"`
	ChannelCredentials *GrpcService_GoogleGrpc_ChannelCredentials `protobuf:"bytes,2,opt,name=channel_credentials,json=channelCredentials,proto3" json:"channel_credentials,omitempty"`
	// A set of call credentials that can be composed with `channel credentials
	// <https://grpc.io/docs/guides/auth.html#credential-types>`_.
	CallCredentials []*GrpcService_GoogleGrpc_CallCredentials `protobuf:"bytes,3,rep,name=call_credentials,json=callCredentials,proto3" json:"call_credentials,omitempty"`
	// The human readable prefix to use when emitting statistics for the gRPC
	// service.
	//
	// .. csv-table::
	//    :header: Name, Type, Description
	//    :widths: 1, 1, 2
	//
	//    streams_total, Counter, Total number of streams opened
	//    streams_closed_<gRPC status code>, Counter, Total streams closed with <gRPC status code>
	StatPrefix string `protobuf:"bytes,4,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"`
	// The name of the Google gRPC credentials factory to use. This must have been registered with
	// Envoy. If this is empty, a default credentials factory will be used that sets up channel
	// credentials based on other configuration parameters.
	CredentialsFactoryName string `protobuf:"bytes,5,opt,name=credentials_factory_name,json=credentialsFactoryName,proto3" json:"credentials_factory_name,omitempty"`
	// Additional configuration for site-specific customizations of the Google
	// gRPC library.
	Config               *_struct.Struct `protobuf:"bytes,6,opt,name=config,proto3" json:"config,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *GrpcService_GoogleGrpc) Reset()         { *m = GrpcService_GoogleGrpc{} }
func (m *GrpcService_GoogleGrpc) String() string { return proto.CompactTextString(m) }
func (*GrpcService_GoogleGrpc) ProtoMessage()    {}
func (*GrpcService_GoogleGrpc) Descriptor() ([]byte, []int) {
	return fileDescriptor_936cbcb9830ffdc2, []int{0, 1}
}

func (m *GrpcService_GoogleGrpc) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GrpcService_GoogleGrpc.Unmarshal(m, b)
}
func (m *GrpcService_GoogleGrpc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GrpcService_GoogleGrpc.Marshal(b, m, deterministic)
}
func (m *GrpcService_GoogleGrpc) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GrpcService_GoogleGrpc.Merge(m, src)
}
func (m *GrpcService_GoogleGrpc) XXX_Size() int {
	return xxx_messageInfo_GrpcService_GoogleGrpc.Size(m)
}
func (m *GrpcService_GoogleGrpc) XXX_DiscardUnknown() {
	xxx_messageInfo_GrpcService_GoogleGrpc.DiscardUnknown(m)
}

var xxx_messageInfo_GrpcService_GoogleGrpc proto.InternalMessageInfo

func (m *GrpcService_GoogleGrpc) GetTargetUri() string {
	if m != nil {
		return m.TargetUri
	}
	return ""
}

func (m *GrpcService_GoogleGrpc) GetChannelCredentials() *GrpcService_GoogleGrpc_ChannelCredentials {
	if m != nil {
		return m.ChannelCredentials
	}
	return nil
}

func (m *GrpcService_GoogleGrpc) GetCallCredentials() []*GrpcService_GoogleGrpc_CallCredentials {
	if m != nil {
		return m.CallCredentials
	}
	return nil
}

func (m *GrpcService_GoogleGrpc) GetStatPrefix() string {
	if m != nil {
		return m.StatPrefix
	}
	return ""
}

func (m *GrpcService_GoogleGrpc) GetCredentialsFactoryName() string {
	if m != nil {
		return m.CredentialsFactoryName
	}
	return ""
}

func (m *GrpcService_GoogleGrpc) GetConfig() *_struct.Struct {
	if m != nil {
		return m.Config
	}
	return nil
}

// See https://grpc.io/grpc/cpp/structgrpc_1_1_ssl_credentials_options.html.
type GrpcService_GoogleGrpc_SslCredentials struct {
	// PEM encoded server root certificates.
	RootCerts *DataSource `protobuf:"bytes,1,opt,name=root_certs,json=rootCerts,proto3" json:"root_certs,omitempty"`
	// PEM encoded client private key.
	PrivateKey *DataSource `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"`
	// PEM encoded client certificate chain.
	CertChain            *DataSource `protobuf:"bytes,3,opt,name=cert_chain,json=certChain,proto3" json:"cert_chain,omitempty"`
	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
	XXX_unrecognized     []byte      `json:"-"`
	XXX_sizecache        int32       `json:"-"`
}

func (m *GrpcService_GoogleGrpc_SslCredentials) Reset()         { *m = GrpcService_GoogleGrpc_SslCredentials{} }
func (m *GrpcService_GoogleGrpc_SslCredentials) String() string { return proto.CompactTextString(m) }
func (*GrpcService_GoogleGrpc_SslCredentials) ProtoMessage()    {}
func (*GrpcService_GoogleGrpc_SslCredentials) Descriptor() ([]byte, []int) {
	return fileDescriptor_936cbcb9830ffdc2, []int{0, 1, 0}
}

func (m *GrpcService_GoogleGrpc_SslCredentials) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GrpcService_GoogleGrpc_SslCredentials.Unmarshal(m, b)
}
func (m *GrpcService_GoogleGrpc_SslCredentials) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GrpcService_GoogleGrpc_SslCredentials.Marshal(b, m, deterministic)
}
func (m *GrpcService_GoogleGrpc_SslCredentials) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GrpcService_GoogleGrpc_SslCredentials.Merge(m, src)
}
func (m *GrpcService_GoogleGrpc_SslCredentials) XXX_Size() int {
	return xxx_messageInfo_GrpcService_GoogleGrpc_SslCredentials.Size(m)
}
func (m *GrpcService_GoogleGrpc_SslCredentials) XXX_DiscardUnknown() {
	xxx_messageInfo_GrpcService_GoogleGrpc_SslCredentials.DiscardUnknown(m)
}

var xxx_messageInfo_GrpcService_GoogleGrpc_SslCredentials proto.InternalMessageInfo

func (m *GrpcService_GoogleGrpc_SslCredentials) GetRootCerts() *DataSource {
	if m != nil {
		return m.RootCerts
	}
	return nil
}

func (m *GrpcService_GoogleGrpc_SslCredentials) GetPrivateKey() *DataSource {
	if m != nil {
		return m.PrivateKey
	}
	return nil
}

func (m *GrpcService_GoogleGrpc_SslCredentials) GetCertChain() *DataSource {
	if m != nil {
		return m.CertChain
	}
	return nil
}

// Local channel credentials. Only UDS is supported for now.
// See https://github.com/grpc/grpc/pull/15909.
type GrpcService_GoogleGrpc_GoogleLocalCredentials struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) Reset() {
	*m = GrpcService_GoogleGrpc_GoogleLocalCredentials{}
}
func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) String() string {
	return proto.CompactTextString(m)
}
func (*GrpcService_GoogleGrpc_GoogleLocalCredentials) ProtoMessage() {}
func (*GrpcService_GoogleGrpc_GoogleLocalCredentials) Descriptor() ([]byte, []int) {
	return fileDescriptor_936cbcb9830ffdc2, []int{0, 1, 1}
}

func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GrpcService_GoogleGrpc_GoogleLocalCredentials.Unmarshal(m, b)
}
func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GrpcService_GoogleGrpc_GoogleLocalCredentials.Marshal(b, m, deterministic)
}
func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GrpcService_GoogleGrpc_GoogleLocalCredentials.Merge(m, src)
}
func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) XXX_Size() int {
	return xxx_messageInfo_GrpcService_GoogleGrpc_GoogleLocalCredentials.Size(m)
}
func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) XXX_DiscardUnknown() {
	xxx_messageInfo_GrpcService_GoogleGrpc_GoogleLocalCredentials.DiscardUnknown(m)
}

var xxx_messageInfo_GrpcService_GoogleGrpc_GoogleLocalCredentials proto.InternalMessageInfo

// See https://grpc.io/docs/guides/auth.html#credential-types to understand Channel and Call
// credential types.
type GrpcService_GoogleGrpc_ChannelCredentials struct {
	// Types that are valid to be assigned to CredentialSpecifier:
	//	*GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials
	//	*GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault
	//	*GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials
	CredentialSpecifier  isGrpcService_GoogleGrpc_ChannelCredentials_CredentialSpecifier `protobuf_oneof:"credential_specifier"`
	XXX_NoUnkeyedLiteral struct{}                                                        `json:"-"`
	XXX_unrecognized     []byte                                                          `json:"-"`
	XXX_sizecache        int32                                                           `json:"-"`
}

func (m *GrpcService_GoogleGrpc_ChannelCredentials) Reset() {
	*m = GrpcService_GoogleGrpc_ChannelCredentials{}
}
func (m *GrpcService_GoogleGrpc_ChannelCredentials) String() string { return proto.CompactTextString(m) }
func (*GrpcService_GoogleGrpc_ChannelCredentials) ProtoMessage()    {}
func (*GrpcService_GoogleGrpc_ChannelCredentials) Descriptor() ([]byte, []int) {
	return fileDescriptor_936cbcb9830ffdc2, []int{0, 1, 2}
}

func (m *GrpcService_GoogleGrpc_ChannelCredentials) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GrpcService_GoogleGrpc_ChannelCredentials.Unmarshal(m, b)
}
func (m *GrpcService_GoogleGrpc_ChannelCredentials) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GrpcService_GoogleGrpc_ChannelCredentials.Marshal(b, m, deterministic)
}
func (m *GrpcService_GoogleGrpc_ChannelCredentials) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GrpcService_GoogleGrpc_ChannelCredentials.Merge(m, src)
}
func (m *GrpcService_GoogleGrpc_ChannelCredentials) XXX_Size() int {
	return xxx_messageInfo_GrpcService_GoogleGrpc_ChannelCredentials.Size(m)
}
func (m *GrpcService_GoogleGrpc_ChannelCredentials) XXX_DiscardUnknown() {
	xxx_messageInfo_GrpcService_GoogleGrpc_ChannelCredentials.DiscardUnknown(m)
}

var xxx_messageInfo_GrpcService_GoogleGrpc_ChannelCredentials proto.InternalMessageInfo

type isGrpcService_GoogleGrpc_ChannelCredentials_CredentialSpecifier interface {
	isGrpcService_GoogleGrpc_ChannelCredentials_CredentialSpecifier()
}

type GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials struct {
	SslCredentials *GrpcService_GoogleGrpc_SslCredentials `protobuf:"bytes,1,opt,name=ssl_credentials,json=sslCredentials,proto3,oneof"`
}

type GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault struct {
	GoogleDefault *empty.Empty `protobuf:"bytes,2,opt,name=google_default,json=googleDefault,proto3,oneof"`
}

type GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials struct {
	LocalCredentials *GrpcService_GoogleGrpc_GoogleLocalCredentials `protobuf:"bytes,3,opt,name=local_credentials,json=localCredentials,proto3,oneof"`
}

func (*GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials) isGrpcService_GoogleGrpc_ChannelCredentials_CredentialSpecifier() {
}

func (*GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault) isGrpcService_GoogleGrpc_ChannelCredentials_CredentialSpecifier() {
}

func (*GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials) isGrpcService_GoogleGrpc_ChannelCredentials_CredentialSpecifier() {
}

func (m *GrpcService_GoogleGrpc_ChannelCredentials) GetCredentialSpecifier() isGrpcService_GoogleGrpc_ChannelCredentials_CredentialSpecifier {
	if m != nil {
		return m.CredentialSpecifier
	}
	return nil
}

func (m *GrpcService_GoogleGrpc_ChannelCredentials) GetSslCredentials() *GrpcService_GoogleGrpc_SslCredentials {
	if x, ok := m.GetCredentialSpecifier().(*GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials); ok {
		return x.SslCredentials
	}
	return nil
}

func (m *GrpcService_GoogleGrpc_ChannelCredentials) GetGoogleDefault() *empty.Empty {
	if x, ok := m.GetCredentialSpecifier().(*GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault); ok {
		return x.GoogleDefault
	}
	return nil
}

func (m *GrpcService_GoogleGrpc_ChannelCredentials) GetLocalCredentials() *GrpcService_GoogleGrpc_GoogleLocalCredentials {
	if x, ok := m.GetCredentialSpecifier().(*GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials); ok {
		return x.LocalCredentials
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*GrpcService_GoogleGrpc_ChannelCredentials) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials)(nil),
		(*GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault)(nil),
		(*GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials)(nil),
	}
}

// [#next-free-field: 7]
type GrpcService_GoogleGrpc_CallCredentials struct {
	// Types that are valid to be assigned to CredentialSpecifier:
	//	*GrpcService_GoogleGrpc_CallCredentials_AccessToken
	//	*GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine
	//	*GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken
	//	*GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess
	//	*GrpcService_GoogleGrpc_CallCredentials_GoogleIam
	//	*GrpcService_GoogleGrpc_CallCredentials_FromPlugin
	CredentialSpecifier  isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier `protobuf_oneof:"credential_specifier"`
	XXX_NoUnkeyedLiteral struct{}                                                     `json:"-"`
	XXX_unrecognized     []byte                                                       `json:"-"`
	XXX_sizecache        int32                                                        `json:"-"`
}

func (m *GrpcService_GoogleGrpc_CallCredentials) Reset() {
	*m = GrpcService_GoogleGrpc_CallCredentials{}
}
func (m *GrpcService_GoogleGrpc_CallCredentials) String() string { return proto.CompactTextString(m) }
func (*GrpcService_GoogleGrpc_CallCredentials) ProtoMessage()    {}
func (*GrpcService_GoogleGrpc_CallCredentials) Descriptor() ([]byte, []int) {
	return fileDescriptor_936cbcb9830ffdc2, []int{0, 1, 3}
}

func (m *GrpcService_GoogleGrpc_CallCredentials) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials.Unmarshal(m, b)
}
func (m *GrpcService_GoogleGrpc_CallCredentials) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials.Marshal(b, m, deterministic)
}
func (m *GrpcService_GoogleGrpc_CallCredentials) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials.Merge(m, src)
}
func (m *GrpcService_GoogleGrpc_CallCredentials) XXX_Size() int {
	return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials.Size(m)
}
func (m *GrpcService_GoogleGrpc_CallCredentials) XXX_DiscardUnknown() {
	xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials.DiscardUnknown(m)
}

var xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials proto.InternalMessageInfo

type isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier interface {
	isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier()
}

type GrpcService_GoogleGrpc_CallCredentials_AccessToken struct {
	AccessToken string `protobuf:"bytes,1,opt,name=access_token,json=accessToken,proto3,oneof"`
}

type GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine struct {
	GoogleComputeEngine *empty.Empty `protobuf:"bytes,2,opt,name=google_compute_engine,json=googleComputeEngine,proto3,oneof"`
}

type GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken struct {
	GoogleRefreshToken string `protobuf:"bytes,3,opt,name=google_refresh_token,json=googleRefreshToken,proto3,oneof"`
}

type GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess struct {
	ServiceAccountJwtAccess *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials `protobuf:"bytes,4,opt,name=service_account_jwt_access,json=serviceAccountJwtAccess,proto3,oneof"`
}

type GrpcService_GoogleGrpc_CallCredentials_GoogleIam struct {
	GoogleIam *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials `protobuf:"bytes,5,opt,name=google_iam,json=googleIam,proto3,oneof"`
}

type GrpcService_GoogleGrpc_CallCredentials_FromPlugin struct {
	FromPlugin *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin `protobuf:"bytes,6,opt,name=from_plugin,json=fromPlugin,proto3,oneof"`
}

func (*GrpcService_GoogleGrpc_CallCredentials_AccessToken) isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier() {
}

func (*GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine) isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier() {
}

func (*GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken) isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier() {
}

func (*GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess) isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier() {
}

func (*GrpcService_GoogleGrpc_CallCredentials_GoogleIam) isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier() {
}

func (*GrpcService_GoogleGrpc_CallCredentials_FromPlugin) isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier() {
}

func (m *GrpcService_GoogleGrpc_CallCredentials) GetCredentialSpecifier() isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier {
	if m != nil {
		return m.CredentialSpecifier
	}
	return nil
}

func (m *GrpcService_GoogleGrpc_CallCredentials) GetAccessToken() string {
	if x, ok := m.GetCredentialSpecifier().(*GrpcService_GoogleGrpc_CallCredentials_AccessToken); ok {
		return x.AccessToken
	}
	return ""
}

func (m *GrpcService_GoogleGrpc_CallCredentials) GetGoogleComputeEngine() *empty.Empty {
	if x, ok := m.GetCredentialSpecifier().(*GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine); ok {
		return x.GoogleComputeEngine
	}
	return nil
}

func (m *GrpcService_GoogleGrpc_CallCredentials) GetGoogleRefreshToken() string {
	if x, ok := m.GetCredentialSpecifier().(*GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken); ok {
		return x.GoogleRefreshToken
	}
	return ""
}

func (m *GrpcService_GoogleGrpc_CallCredentials) GetServiceAccountJwtAccess() *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials {
	if x, ok := m.GetCredentialSpecifier().(*GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess); ok {
		return x.ServiceAccountJwtAccess
	}
	return nil
}

func (m *GrpcService_GoogleGrpc_CallCredentials) GetGoogleIam() *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials {
	if x, ok := m.GetCredentialSpecifier().(*GrpcService_GoogleGrpc_CallCredentials_GoogleIam); ok {
		return x.GoogleIam
	}
	return nil
}

func (m *GrpcService_GoogleGrpc_CallCredentials) GetFromPlugin() *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin {
	if x, ok := m.GetCredentialSpecifier().(*GrpcService_GoogleGrpc_CallCredentials_FromPlugin); ok {
		return x.FromPlugin
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*GrpcService_GoogleGrpc_CallCredentials) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*GrpcService_GoogleGrpc_CallCredentials_AccessToken)(nil),
		(*GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine)(nil),
		(*GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken)(nil),
		(*GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess)(nil),
		(*GrpcService_GoogleGrpc_CallCredentials_GoogleIam)(nil),
		(*GrpcService_GoogleGrpc_CallCredentials_FromPlugin)(nil),
	}
}

type GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials struct {
	JsonKey              string   `protobuf:"bytes,1,opt,name=json_key,json=jsonKey,proto3" json:"json_key,omitempty"`
	TokenLifetimeSeconds uint64   `protobuf:"varint,2,opt,name=token_lifetime_seconds,json=tokenLifetimeSeconds,proto3" json:"token_lifetime_seconds,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) Reset() {
	*m = GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials{}
}
func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) String() string {
	return proto.CompactTextString(m)
}
func (*GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) ProtoMessage() {}
func (*GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) Descriptor() ([]byte, []int) {
	return fileDescriptor_936cbcb9830ffdc2, []int{0, 1, 3, 0}
}

func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials.Unmarshal(m, b)
}
func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials.Marshal(b, m, deterministic)
}
func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials.Merge(m, src)
}
func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) XXX_Size() int {
	return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials.Size(m)
}
func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) XXX_DiscardUnknown() {
	xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials.DiscardUnknown(m)
}

var xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials proto.InternalMessageInfo

func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) GetJsonKey() string {
	if m != nil {
		return m.JsonKey
	}
	return ""
}

func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) GetTokenLifetimeSeconds() uint64 {
	if m != nil {
		return m.TokenLifetimeSeconds
	}
	return 0
}

type GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials struct {
	AuthorizationToken   string   `protobuf:"bytes,1,opt,name=authorization_token,json=authorizationToken,proto3" json:"authorization_token,omitempty"`
	AuthoritySelector    string   `protobuf:"bytes,2,opt,name=authority_selector,json=authoritySelector,proto3" json:"authority_selector,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) Reset() {
	*m = GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials{}
}
func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) String() string {
	return proto.CompactTextString(m)
}
func (*GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) ProtoMessage() {}
func (*GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) Descriptor() ([]byte, []int) {
	return fileDescriptor_936cbcb9830ffdc2, []int{0, 1, 3, 1}
}

func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials.Unmarshal(m, b)
}
func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials.Marshal(b, m, deterministic)
}
func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials.Merge(m, src)
}
func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) XXX_Size() int {
	return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials.Size(m)
}
func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) XXX_DiscardUnknown() {
	xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials.DiscardUnknown(m)
}

var xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials proto.InternalMessageInfo

func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) GetAuthorizationToken() string {
	if m != nil {
		return m.AuthorizationToken
	}
	return ""
}

func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) GetAuthoritySelector() string {
	if m != nil {
		return m.AuthoritySelector
	}
	return ""
}

type GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin struct {
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Types that are valid to be assigned to ConfigType:
	//	*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config
	//	*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig
	ConfigType           isGrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}                                                                          `json:"-"`
	XXX_unrecognized     []byte                                                                            `json:"-"`
	XXX_sizecache        int32                                                                             `json:"-"`
}

func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) Reset() {
	*m = GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin{}
}
func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) String() string {
	return proto.CompactTextString(m)
}
func (*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) ProtoMessage() {}
func (*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) Descriptor() ([]byte, []int) {
	return fileDescriptor_936cbcb9830ffdc2, []int{0, 1, 3, 2}
}

func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin.Unmarshal(m, b)
}
func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin.Marshal(b, m, deterministic)
}
func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin.Merge(m, src)
}
func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) XXX_Size() int {
	return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin.Size(m)
}
func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) XXX_DiscardUnknown() {
	xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin.DiscardUnknown(m)
}

var xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin proto.InternalMessageInfo

func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isGrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_ConfigType interface {
	isGrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_ConfigType()
}

type GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config struct {
	Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"`
}

type GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig struct {
	TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config) isGrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_ConfigType() {
}

func (*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig) isGrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_ConfigType() {
}

func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) GetConfigType() isGrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

// Deprecated: Do not use.
func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) GetConfig() *_struct.Struct {
	if x, ok := m.GetConfigType().(*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config); ok {
		return x.Config
	}
	return nil
}

func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) GetTypedConfig() *any.Any {
	if x, ok := m.GetConfigType().(*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig); ok {
		return x.TypedConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config)(nil),
		(*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig)(nil),
	}
}

func init() {
	proto.RegisterType((*GrpcService)(nil), "envoy.api.v2.core.GrpcService")
	proto.RegisterType((*GrpcService_EnvoyGrpc)(nil), "envoy.api.v2.core.GrpcService.EnvoyGrpc")
	proto.RegisterType((*GrpcService_GoogleGrpc)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc")
	proto.RegisterType((*GrpcService_GoogleGrpc_SslCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.SslCredentials")
	proto.RegisterType((*GrpcService_GoogleGrpc_GoogleLocalCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.GoogleLocalCredentials")
	proto.RegisterType((*GrpcService_GoogleGrpc_ChannelCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.ChannelCredentials")
	proto.RegisterType((*GrpcService_GoogleGrpc_CallCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.CallCredentials")
	proto.RegisterType((*GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.CallCredentials.ServiceAccountJWTAccessCredentials")
	proto.RegisterType((*GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.CallCredentials.GoogleIAMCredentials")
	proto.RegisterType((*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.CallCredentials.MetadataCredentialsFromPlugin")
}

func init() {
	proto.RegisterFile("envoy/api/v2/core/grpc_service.proto", fileDescriptor_936cbcb9830ffdc2)
}

var fileDescriptor_936cbcb9830ffdc2 = []byte{
	// 1048 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0xdd, 0x4e, 0x1b, 0x47,
	0x14, 0xb6, 0xc1, 0x01, 0x7c, 0x96, 0x80, 0x19, 0x28, 0x98, 0xcd, 0x4f, 0x51, 0x5a, 0x55, 0xb4,
	0x52, 0xd7, 0x92, 0xd3, 0xa8, 0x89, 0x14, 0xb5, 0xc5, 0x86, 0xc4, 0xa4, 0x24, 0x42, 0xeb, 0xb4,
	0xb9, 0xa9, 0x34, 0x1a, 0xc6, 0x63, 0x33, 0xc9, 0xee, 0xce, 0x6a, 0x76, 0xd6, 0x89, 0xf3, 0x00,
	0x7d, 0x89, 0xbe, 0x46, 0x1f, 0xa2, 0x17, 0x7d, 0x83, 0xf6, 0x41, 0xaa, 0x5e, 0x55, 0xf3, 0x63,
	0xf0, 0xda, 0x08, 0x28, 0x77, 0xbb, 0xe7, 0x3b, 0xdf, 0xf9, 0xf9, 0xe6, 0xcc, 0x19, 0xf8, 0x9c,
	0x25, 0x43, 0x31, 0x6a, 0x90, 0x94, 0x37, 0x86, 0xcd, 0x06, 0x15, 0x92, 0x35, 0x06, 0x32, 0xa5,
	0x38, 0x63, 0x72, 0xc8, 0x29, 0x0b, 0x52, 0x29, 0x94, 0x40, 0x6b, 0xc6, 0x2b, 0x20, 0x29, 0x0f,
	0x86, 0xcd, 0x40, 0x7b, 0xf9, 0x77, 0x67, 0x89, 0x27, 0x24, 0x73, 0x04, 0x7f, 0x7b, 0x20, 0xc4,
	0x20, 0x62, 0x0d, 0xf3, 0x77, 0x92, 0xf7, 0x1b, 0x24, 0x19, 0x39, 0xe8, 0xfe, 0x34, 0xd4, 0xcb,
	0x25, 0x51, 0x5c, 0x24, 0x0e, 0xbf, 0x33, 0x8d, 0xb3, 0x38, 0x55, 0x63, 0xf2, 0xdd, 0x69, 0x30,
	0x53, 0x32, 0xa7, 0xca, 0xa1, 0x5b, 0x43, 0x12, 0xf1, 0x1e, 0x51, 0xac, 0x31, 0xfe, 0xb0, 0xc0,
	0x83, 0xbf, 0x11, 0x78, 0xcf, 0x65, 0x4a, 0xbb, 0xb6, 0x2b, 0x74, 0x08, 0x60, 0xca, 0xc7, 0xba,
	0xd7, 0x7a, 0x79, 0xa7, 0xbc, 0xeb, 0x35, 0x77, 0x83, 0x99, 0x26, 0x83, 0x09, 0x4e, 0x70, 0xa0,
	0x51, 0x6d, 0xe8, 0x94, 0xc2, 0x2a, 0x1b, 0xff, 0xa0, 0x23, 0xf0, 0x6c, 0x4d, 0x36, 0xd6, 0x9c,
	0x89, 0xf5, 0xe5, 0x15, 0xb1, 0x9e, 0x1b, 0x86, 0x0b, 0x06, 0x83, 0xb3, 0x3f, 0xf4, 0x10, 0x16,
	0x15, 0x8f, 0x99, 0xc8, 0x55, 0x7d, 0xde, 0x44, 0xda, 0x0e, 0x2c, 0x1a, 0x8c, 0x3b, 0x0e, 0xf6,
	0x9d, 0x5c, 0xe1, 0xd8, 0x13, 0x1d, 0x42, 0x8d, 0x27, 0x5c, 0x71, 0x12, 0xe1, 0x98, 0x29, 0xd2,
	0x23, 0x8a, 0xd4, 0x6f, 0xed, 0xcc, 0xef, 0x7a, 0xcd, 0xfb, 0x17, 0xd4, 0xd1, 0x61, 0xa4, 0xc7,
	0xe4, 0xcf, 0x24, 0xca, 0x59, 0xb8, 0xea, 0x78, 0x2f, 0x1d, 0xcd, 0xff, 0x16, 0xaa, 0x67, 0x7d,
	0xa2, 0xaf, 0x60, 0x99, 0x46, 0x79, 0xa6, 0x98, 0xc4, 0x09, 0x89, 0x99, 0xd1, 0xa9, 0xda, 0x5a,
	0xfc, 0xb7, 0x55, 0x91, 0x73, 0x3b, 0xe5, 0xd0, 0x73, 0xe0, 0x2b, 0x12, 0x33, 0xff, 0xaf, 0x55,
	0x80, 0xf3, 0xae, 0xd0, 0x17, 0x00, 0x8a, 0xc8, 0x01, 0x53, 0x38, 0x97, 0x7c, 0x9a, 0x58, 0xb5,
	0xd0, 0x4f, 0x92, 0xa3, 0x18, 0xd6, 0xe9, 0x29, 0x49, 0x12, 0x16, 0x61, 0x2a, 0x59, 0x8f, 0x25,
	0xba, 0x9a, 0xcc, 0xa9, 0xf8, 0xf4, 0xda, 0x2a, 0x06, 0x6d, 0x1b, 0xa4, 0x7d, 0x1e, 0x23, 0x44,
	0x74, 0xc6, 0x86, 0x7a, 0x50, 0xa3, 0x24, 0x2a, 0xe6, 0x9a, 0x37, 0x4a, 0x3d, 0xf9, 0x1f, 0xb9,
	0x48, 0x54, 0x48, 0xb4, 0x4a, 0x8b, 0x06, 0xb4, 0x0b, 0x5e, 0xa6, 0x88, 0xc2, 0xa9, 0x64, 0x7d,
	0xfe, 0xa1, 0x5e, 0x29, 0x76, 0x0f, 0x1a, 0x3b, 0x36, 0x10, 0x7a, 0x0c, 0xf5, 0x89, 0x52, 0x70,
	0x9f, 0x50, 0x25, 0xe4, 0xc8, 0xaa, 0x7d, 0x4b, 0xd3, 0xc2, 0xcd, 0x09, 0xfc, 0x99, 0x85, 0xb5,
	0xde, 0xa8, 0x01, 0x0b, 0x54, 0x24, 0x7d, 0x3e, 0xa8, 0x2f, 0x18, 0xad, 0xb6, 0x66, 0xe6, 0xa4,
	0x6b, 0x6e, 0x46, 0xe8, 0xdc, 0xfc, 0x3f, 0xcb, 0xb0, 0xd2, 0xcd, 0x0a, 0x75, 0x3e, 0x05, 0x90,
	0x42, 0x28, 0x4c, 0x99, 0x54, 0x99, 0xbb, 0x05, 0xf7, 0x2e, 0xd0, 0x61, 0x9f, 0x28, 0xd2, 0x15,
	0xb9, 0xa4, 0x2c, 0xac, 0x6a, 0x42, 0x5b, 0xfb, 0xa3, 0xef, 0xc0, 0x4b, 0x25, 0x1f, 0x12, 0xc5,
	0xf0, 0x3b, 0x36, 0x72, 0x47, 0x76, 0x05, 0x1d, 0x1c, 0xe3, 0x47, 0x36, 0xd2, 0xd9, 0x75, 0x62,
	0x4c, 0x4f, 0x09, 0x4f, 0xdc, 0xb4, 0x5f, 0x95, 0x5d, 0x13, 0xda, 0xda, 0xdf, 0xaf, 0xc3, 0xa6,
	0x3d, 0x92, 0x23, 0x41, 0xc9, 0x64, 0x57, 0xfe, 0x1f, 0x73, 0x80, 0x66, 0xc7, 0x01, 0x51, 0x58,
	0xcd, 0xb2, 0xe2, 0xc9, 0xdb, 0x8e, 0x1f, 0x5f, 0xff, 0xe4, 0x8b, 0xfa, 0x75, 0x4a, 0xe1, 0x4a,
	0x56, 0x54, 0xf4, 0x7b, 0x58, 0x71, 0xcb, 0xa0, 0xc7, 0xfa, 0x24, 0x8f, 0x94, 0x93, 0x65, 0x73,
	0xe6, 0x74, 0x0e, 0xf4, 0x52, 0xeb, 0x94, 0xc2, 0xdb, 0x16, 0xd8, 0xb7, 0xee, 0x48, 0xc0, 0x5a,
	0xa4, 0x1b, 0x9a, 0x9a, 0x50, 0x1d, 0xe3, 0x87, 0xeb, 0xd7, 0x79, 0xb1, 0x32, 0x9d, 0x52, 0x58,
	0x8b, 0xa6, 0x6c, 0xad, 0x3b, 0xb0, 0x71, 0x9e, 0x0a, 0x67, 0x29, 0xa3, 0xbc, 0xcf, 0x99, 0x44,
	0xf3, 0xff, 0xb4, 0xca, 0xfe, 0xaf, 0x4b, 0xb0, 0x3a, 0x35, 0xed, 0xe8, 0x33, 0x58, 0x26, 0x94,
	0xb2, 0x2c, 0xc3, 0x4a, 0xbc, 0x63, 0x89, 0xbd, 0xdb, 0x9d, 0x52, 0xe8, 0x59, 0xeb, 0x6b, 0x6d,
	0x44, 0x47, 0xf0, 0x89, 0xd3, 0x81, 0x8a, 0x38, 0xcd, 0x15, 0xc3, 0x2c, 0x19, 0xf0, 0x84, 0x5d,
	0x29, 0xc7, 0xba, 0x05, 0xda, 0x96, 0x75, 0x60, 0x48, 0xa8, 0x09, 0x1b, 0x2e, 0x9a, 0x64, 0x7d,
	0xc9, 0xb2, 0x53, 0x97, 0x7a, 0xde, 0xa5, 0x46, 0x16, 0x0d, 0x2d, 0x68, 0x2b, 0xf8, 0xad, 0x0c,
	0xbe, 0x7b, 0xc3, 0x30, 0xa1, 0x54, 0xe4, 0x89, 0xc2, 0x6f, 0xdf, 0x2b, 0x6c, 0xab, 0x34, 0x77,
	0xd2, 0x6b, 0xfe, 0x72, 0xe3, 0x4b, 0x1f, 0x38, 0x97, 0x3d, 0x1b, 0xfa, 0xc5, 0x9b, 0xd7, 0x7b,
	0x26, 0x70, 0x51, 0xee, 0xad, 0xac, 0xe8, 0xf5, 0x5e, 0x59, 0x2f, 0x24, 0xc0, 0x2d, 0x7d, 0xcc,
	0x49, 0x6c, 0x6e, 0xba, 0xd7, 0x7c, 0x75, 0xf3, 0x62, 0x2c, 0x74, 0xb8, 0xf7, 0xb2, 0x98, 0xbe,
	0x6a, 0x73, 0x1c, 0x92, 0x18, 0x7d, 0x04, 0xaf, 0x2f, 0x45, 0x8c, 0xd3, 0x28, 0x1f, 0xf0, 0xc4,
	0xed, 0x8c, 0x37, 0x37, 0xcf, 0x38, 0x7e, 0x30, 0x26, 0x6c, 0xcf, 0xa4, 0x88, 0x8f, 0x4d, 0x78,
	0xfd, 0xa6, 0xf5, 0xcf, 0xfe, 0xfc, 0x1c, 0x1e, 0x5c, 0xad, 0x16, 0xda, 0x86, 0xa5, 0xb7, 0x99,
	0x48, 0xcc, 0x2e, 0x31, 0x33, 0x15, 0x2e, 0xea, 0x7f, 0xbd, 0x29, 0xbe, 0x81, 0x4d, 0x73, 0xe0,
	0x38, 0xe2, 0x7d, 0xa6, 0x1f, 0x3d, 0x9c, 0x31, 0x2a, 0x92, 0x9e, 0x7d, 0x27, 0x2a, 0xe1, 0x86,
	0x41, 0x8f, 0x1c, 0xd8, 0xb5, 0x98, 0x3f, 0x84, 0x8d, 0x8b, 0x74, 0x41, 0x0d, 0x58, 0x27, 0xb9,
	0x3a, 0x15, 0x92, 0x7f, 0x34, 0xef, 0xe8, 0xe4, 0x1c, 0x87, 0xa8, 0x00, 0xd9, 0x51, 0xfa, 0x1a,
	0xc6, 0x56, 0x35, 0xc2, 0x19, 0x8b, 0x98, 0xde, 0xc2, 0x26, 0x75, 0x35, 0x5c, 0x3b, 0x43, 0xba,
	0x0e, 0xf0, 0x7f, 0x2f, 0xc3, 0xbd, 0x4b, 0xe5, 0x41, 0x08, 0x2a, 0xe7, 0xef, 0x69, 0x68, 0xbe,
	0xd1, 0xa3, 0xb3, 0x7d, 0x3e, 0x77, 0xe9, 0x3e, 0x6f, 0xcd, 0xd5, 0xcb, 0x9d, 0xd2, 0x78, 0xab,
	0xa3, 0x27, 0xb0, 0xac, 0x46, 0x29, 0xeb, 0x61, 0x47, 0xb6, 0xab, 0x62, 0x63, 0x86, 0xbc, 0x97,
	0xe8, 0xdb, 0xe5, 0x19, 0xdf, 0xb6, 0x71, 0x6d, 0xdd, 0x06, 0xcf, 0x92, 0xb0, 0xb6, 0x5e, 0xba,
	0x08, 0x5a, 0x5b, 0x50, 0x73, 0xcf, 0x79, 0x11, 0x78, 0x51, 0x59, 0xaa, 0xd4, 0x6e, 0xb5, 0x1e,
	0xc1, 0xa7, 0x5c, 0xd8, 0x61, 0x4a, 0xa5, 0xf8, 0x30, 0x9a, 0x9d, 0xab, 0x56, 0x6d, 0x62, 0xb0,
	0x8e, 0x75, 0x55, 0xc7, 0xe5, 0x93, 0x05, 0x53, 0xde, 0xc3, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff,
	0x80, 0xa7, 0x1e, 0x3d, 0x84, 0x0a, 0x00, 0x00,
}
   07070100000065000081A4000003E800000064000000015E17A24700009BDA000000000000000000000000000000000000003E00000000cilium-proxy-20200109/go/envoy/api/v2/core/health_check.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/core/health_check.proto

package envoy_api_v2_core

import (
	fmt "fmt"
	_type "github.com/cilium/proxy/go/envoy/type"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	duration "github.com/golang/protobuf/ptypes/duration"
	_struct "github.com/golang/protobuf/ptypes/struct"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Endpoint health status.
type HealthStatus int32

const (
	// The health status is not known. This is interpreted by Envoy as *HEALTHY*.
	HealthStatus_UNKNOWN HealthStatus = 0
	// Healthy.
	HealthStatus_HEALTHY HealthStatus = 1
	// Unhealthy.
	HealthStatus_UNHEALTHY HealthStatus = 2
	// Connection draining in progress. E.g.,
	// `<https://aws.amazon.com/blogs/aws/elb-connection-draining-remove-instances-from-service-with-care/>`_
	// or
	// `<https://cloud.google.com/compute/docs/load-balancing/enabling-connection-draining>`_.
	// This is interpreted by Envoy as *UNHEALTHY*.
	HealthStatus_DRAINING HealthStatus = 3
	// Health check timed out. This is part of HDS and is interpreted by Envoy as
	// *UNHEALTHY*.
	HealthStatus_TIMEOUT HealthStatus = 4
	// Degraded.
	HealthStatus_DEGRADED HealthStatus = 5
)

var HealthStatus_name = map[int32]string{
	0: "UNKNOWN",
	1: "HEALTHY",
	2: "UNHEALTHY",
	3: "DRAINING",
	4: "TIMEOUT",
	5: "DEGRADED",
}

var HealthStatus_value = map[string]int32{
	"UNKNOWN":   0,
	"HEALTHY":   1,
	"UNHEALTHY": 2,
	"DRAINING":  3,
	"TIMEOUT":   4,
	"DEGRADED":  5,
}

func (x HealthStatus) String() string {
	return proto.EnumName(HealthStatus_name, int32(x))
}

func (HealthStatus) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_b6ca44dd529b90bd, []int{0}
}

// [#next-free-field: 21]
type HealthCheck struct {
	// The time to wait for a health check response. If the timeout is reached the
	// health check attempt will be considered a failure.
	Timeout *duration.Duration `protobuf:"bytes,1,opt,name=timeout,proto3" json:"timeout,omitempty"`
	// The interval between health checks.
	Interval *duration.Duration `protobuf:"bytes,2,opt,name=interval,proto3" json:"interval,omitempty"`
	// An optional jitter amount in milliseconds. If specified, Envoy will start health
	// checking after for a random time in ms between 0 and initial_jitter. This only
	// applies to the first health check.
	InitialJitter *duration.Duration `protobuf:"bytes,20,opt,name=initial_jitter,json=initialJitter,proto3" json:"initial_jitter,omitempty"`
	// An optional jitter amount in milliseconds. If specified, during every
	// interval Envoy will add interval_jitter to the wait time.
	IntervalJitter *duration.Duration `protobuf:"bytes,3,opt,name=interval_jitter,json=intervalJitter,proto3" json:"interval_jitter,omitempty"`
	// An optional jitter amount as a percentage of interval_ms. If specified,
	// during every interval Envoy will add interval_ms *
	// interval_jitter_percent / 100 to the wait time.
	//
	// If interval_jitter_ms and interval_jitter_percent are both set, both of
	// them will be used to increase the wait time.
	IntervalJitterPercent uint32 `protobuf:"varint,18,opt,name=interval_jitter_percent,json=intervalJitterPercent,proto3" json:"interval_jitter_percent,omitempty"`
	// The number of unhealthy health checks required before a host is marked
	// unhealthy. Note that for *http* health checking if a host responds with 503
	// this threshold is ignored and the host is considered unhealthy immediately.
	UnhealthyThreshold *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=unhealthy_threshold,json=unhealthyThreshold,proto3" json:"unhealthy_threshold,omitempty"`
	// The number of healthy health checks required before a host is marked
	// healthy. Note that during startup, only a single successful health check is
	// required to mark a host healthy.
	HealthyThreshold *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=healthy_threshold,json=healthyThreshold,proto3" json:"healthy_threshold,omitempty"`
	// [#not-implemented-hide:] Non-serving port for health checking.
	AltPort *wrappers.UInt32Value `protobuf:"bytes,6,opt,name=alt_port,json=altPort,proto3" json:"alt_port,omitempty"`
	// Reuse health check connection between health checks. Default is true.
	ReuseConnection *wrappers.BoolValue `protobuf:"bytes,7,opt,name=reuse_connection,json=reuseConnection,proto3" json:"reuse_connection,omitempty"`
	// Types that are valid to be assigned to HealthChecker:
	//	*HealthCheck_HttpHealthCheck_
	//	*HealthCheck_TcpHealthCheck_
	//	*HealthCheck_GrpcHealthCheck_
	//	*HealthCheck_CustomHealthCheck_
	HealthChecker isHealthCheck_HealthChecker `protobuf_oneof:"health_checker"`
	// The "no traffic interval" is a special health check interval that is used when a cluster has
	// never had traffic routed to it. This lower interval allows cluster information to be kept up to
	// date, without sending a potentially large amount of active health checking traffic for no
	// reason. Once a cluster has been used for traffic routing, Envoy will shift back to using the
	// standard health check interval that is defined. Note that this interval takes precedence over
	// any other.
	//
	// The default value for "no traffic interval" is 60 seconds.
	NoTrafficInterval *duration.Duration `protobuf:"bytes,12,opt,name=no_traffic_interval,json=noTrafficInterval,proto3" json:"no_traffic_interval,omitempty"`
	// The "unhealthy interval" is a health check interval that is used for hosts that are marked as
	// unhealthy. As soon as the host is marked as healthy, Envoy will shift back to using the
	// standard health check interval that is defined.
	//
	// The default value for "unhealthy interval" is the same as "interval".
	UnhealthyInterval *duration.Duration `protobuf:"bytes,14,opt,name=unhealthy_interval,json=unhealthyInterval,proto3" json:"unhealthy_interval,omitempty"`
	// The "unhealthy edge interval" is a special health check interval that is used for the first
	// health check right after a host is marked as unhealthy. For subsequent health checks
	// Envoy will shift back to using either "unhealthy interval" if present or the standard health
	// check interval that is defined.
	//
	// The default value for "unhealthy edge interval" is the same as "unhealthy interval".
	UnhealthyEdgeInterval *duration.Duration `protobuf:"bytes,15,opt,name=unhealthy_edge_interval,json=unhealthyEdgeInterval,proto3" json:"unhealthy_edge_interval,omitempty"`
	// The "healthy edge interval" is a special health check interval that is used for the first
	// health check right after a host is marked as healthy. For subsequent health checks
	// Envoy will shift back to using the standard health check interval that is defined.
	//
	// The default value for "healthy edge interval" is the same as the default interval.
	HealthyEdgeInterval *duration.Duration `protobuf:"bytes,16,opt,name=healthy_edge_interval,json=healthyEdgeInterval,proto3" json:"healthy_edge_interval,omitempty"`
	// Specifies the path to the :ref:`health check event log <arch_overview_health_check_logging>`.
	// If empty, no event log will be written.
	EventLogPath string `protobuf:"bytes,17,opt,name=event_log_path,json=eventLogPath,proto3" json:"event_log_path,omitempty"`
	// If set to true, health check failure events will always be logged. If set to false, only the
	// initial health check failure event will be logged.
	// The default value is false.
	AlwaysLogHealthCheckFailures bool     `protobuf:"varint,19,opt,name=always_log_health_check_failures,json=alwaysLogHealthCheckFailures,proto3" json:"always_log_health_check_failures,omitempty"`
	XXX_NoUnkeyedLiteral         struct{} `json:"-"`
	XXX_unrecognized             []byte   `json:"-"`
	XXX_sizecache                int32    `json:"-"`
}

func (m *HealthCheck) Reset()         { *m = HealthCheck{} }
func (m *HealthCheck) String() string { return proto.CompactTextString(m) }
func (*HealthCheck) ProtoMessage()    {}
func (*HealthCheck) Descriptor() ([]byte, []int) {
	return fileDescriptor_b6ca44dd529b90bd, []int{0}
}

func (m *HealthCheck) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HealthCheck.Unmarshal(m, b)
}
func (m *HealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HealthCheck.Marshal(b, m, deterministic)
}
func (m *HealthCheck) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HealthCheck.Merge(m, src)
}
func (m *HealthCheck) XXX_Size() int {
	return xxx_messageInfo_HealthCheck.Size(m)
}
func (m *HealthCheck) XXX_DiscardUnknown() {
	xxx_messageInfo_HealthCheck.DiscardUnknown(m)
}

var xxx_messageInfo_HealthCheck proto.InternalMessageInfo

func (m *HealthCheck) GetTimeout() *duration.Duration {
	if m != nil {
		return m.Timeout
	}
	return nil
}

func (m *HealthCheck) GetInterval() *duration.Duration {
	if m != nil {
		return m.Interval
	}
	return nil
}

func (m *HealthCheck) GetInitialJitter() *duration.Duration {
	if m != nil {
		return m.InitialJitter
	}
	return nil
}

func (m *HealthCheck) GetIntervalJitter() *duration.Duration {
	if m != nil {
		return m.IntervalJitter
	}
	return nil
}

func (m *HealthCheck) GetIntervalJitterPercent() uint32 {
	if m != nil {
		return m.IntervalJitterPercent
	}
	return 0
}

func (m *HealthCheck) GetUnhealthyThreshold() *wrappers.UInt32Value {
	if m != nil {
		return m.UnhealthyThreshold
	}
	return nil
}

func (m *HealthCheck) GetHealthyThreshold() *wrappers.UInt32Value {
	if m != nil {
		return m.HealthyThreshold
	}
	return nil
}

func (m *HealthCheck) GetAltPort() *wrappers.UInt32Value {
	if m != nil {
		return m.AltPort
	}
	return nil
}

func (m *HealthCheck) GetReuseConnection() *wrappers.BoolValue {
	if m != nil {
		return m.ReuseConnection
	}
	return nil
}

type isHealthCheck_HealthChecker interface {
	isHealthCheck_HealthChecker()
}

type HealthCheck_HttpHealthCheck_ struct {
	HttpHealthCheck *HealthCheck_HttpHealthCheck `protobuf:"bytes,8,opt,name=http_health_check,json=httpHealthCheck,proto3,oneof"`
}

type HealthCheck_TcpHealthCheck_ struct {
	TcpHealthCheck *HealthCheck_TcpHealthCheck `protobuf:"bytes,9,opt,name=tcp_health_check,json=tcpHealthCheck,proto3,oneof"`
}

type HealthCheck_GrpcHealthCheck_ struct {
	GrpcHealthCheck *HealthCheck_GrpcHealthCheck `protobuf:"bytes,11,opt,name=grpc_health_check,json=grpcHealthCheck,proto3,oneof"`
}

type HealthCheck_CustomHealthCheck_ struct {
	CustomHealthCheck *HealthCheck_CustomHealthCheck `protobuf:"bytes,13,opt,name=custom_health_check,json=customHealthCheck,proto3,oneof"`
}

func (*HealthCheck_HttpHealthCheck_) isHealthCheck_HealthChecker() {}

func (*HealthCheck_TcpHealthCheck_) isHealthCheck_HealthChecker() {}

func (*HealthCheck_GrpcHealthCheck_) isHealthCheck_HealthChecker() {}

func (*HealthCheck_CustomHealthCheck_) isHealthCheck_HealthChecker() {}

func (m *HealthCheck) GetHealthChecker() isHealthCheck_HealthChecker {
	if m != nil {
		return m.HealthChecker
	}
	return nil
}

func (m *HealthCheck) GetHttpHealthCheck() *HealthCheck_HttpHealthCheck {
	if x, ok := m.GetHealthChecker().(*HealthCheck_HttpHealthCheck_); ok {
		return x.HttpHealthCheck
	}
	return nil
}

func (m *HealthCheck) GetTcpHealthCheck() *HealthCheck_TcpHealthCheck {
	if x, ok := m.GetHealthChecker().(*HealthCheck_TcpHealthCheck_); ok {
		return x.TcpHealthCheck
	}
	return nil
}

func (m *HealthCheck) GetGrpcHealthCheck() *HealthCheck_GrpcHealthCheck {
	if x, ok := m.GetHealthChecker().(*HealthCheck_GrpcHealthCheck_); ok {
		return x.GrpcHealthCheck
	}
	return nil
}

func (m *HealthCheck) GetCustomHealthCheck() *HealthCheck_CustomHealthCheck {
	if x, ok := m.GetHealthChecker().(*HealthCheck_CustomHealthCheck_); ok {
		return x.CustomHealthCheck
	}
	return nil
}

func (m *HealthCheck) GetNoTrafficInterval() *duration.Duration {
	if m != nil {
		return m.NoTrafficInterval
	}
	return nil
}

func (m *HealthCheck) GetUnhealthyInterval() *duration.Duration {
	if m != nil {
		return m.UnhealthyInterval
	}
	return nil
}

func (m *HealthCheck) GetUnhealthyEdgeInterval() *duration.Duration {
	if m != nil {
		return m.UnhealthyEdgeInterval
	}
	return nil
}

func (m *HealthCheck) GetHealthyEdgeInterval() *duration.Duration {
	if m != nil {
		return m.HealthyEdgeInterval
	}
	return nil
}

func (m *HealthCheck) GetEventLogPath() string {
	if m != nil {
		return m.EventLogPath
	}
	return ""
}

func (m *HealthCheck) GetAlwaysLogHealthCheckFailures() bool {
	if m != nil {
		return m.AlwaysLogHealthCheckFailures
	}
	return false
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*HealthCheck) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*HealthCheck_HttpHealthCheck_)(nil),
		(*HealthCheck_TcpHealthCheck_)(nil),
		(*HealthCheck_GrpcHealthCheck_)(nil),
		(*HealthCheck_CustomHealthCheck_)(nil),
	}
}

// Describes the encoding of the payload bytes in the payload.
type HealthCheck_Payload struct {
	// Types that are valid to be assigned to Payload:
	//	*HealthCheck_Payload_Text
	//	*HealthCheck_Payload_Binary
	Payload              isHealthCheck_Payload_Payload `protobuf_oneof:"payload"`
	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
	XXX_unrecognized     []byte                        `json:"-"`
	XXX_sizecache        int32                         `json:"-"`
}

func (m *HealthCheck_Payload) Reset()         { *m = HealthCheck_Payload{} }
func (m *HealthCheck_Payload) String() string { return proto.CompactTextString(m) }
func (*HealthCheck_Payload) ProtoMessage()    {}
func (*HealthCheck_Payload) Descriptor() ([]byte, []int) {
	return fileDescriptor_b6ca44dd529b90bd, []int{0, 0}
}

func (m *HealthCheck_Payload) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HealthCheck_Payload.Unmarshal(m, b)
}
func (m *HealthCheck_Payload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HealthCheck_Payload.Marshal(b, m, deterministic)
}
func (m *HealthCheck_Payload) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HealthCheck_Payload.Merge(m, src)
}
func (m *HealthCheck_Payload) XXX_Size() int {
	return xxx_messageInfo_HealthCheck_Payload.Size(m)
}
func (m *HealthCheck_Payload) XXX_DiscardUnknown() {
	xxx_messageInfo_HealthCheck_Payload.DiscardUnknown(m)
}

var xxx_messageInfo_HealthCheck_Payload proto.InternalMessageInfo

type isHealthCheck_Payload_Payload interface {
	isHealthCheck_Payload_Payload()
}

type HealthCheck_Payload_Text struct {
	Text string `protobuf:"bytes,1,opt,name=text,proto3,oneof"`
}

type HealthCheck_Payload_Binary struct {
	Binary []byte `protobuf:"bytes,2,opt,name=binary,proto3,oneof"`
}

func (*HealthCheck_Payload_Text) isHealthCheck_Payload_Payload() {}

func (*HealthCheck_Payload_Binary) isHealthCheck_Payload_Payload() {}

func (m *HealthCheck_Payload) GetPayload() isHealthCheck_Payload_Payload {
	if m != nil {
		return m.Payload
	}
	return nil
}

func (m *HealthCheck_Payload) GetText() string {
	if x, ok := m.GetPayload().(*HealthCheck_Payload_Text); ok {
		return x.Text
	}
	return ""
}

func (m *HealthCheck_Payload) GetBinary() []byte {
	if x, ok := m.GetPayload().(*HealthCheck_Payload_Binary); ok {
		return x.Binary
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*HealthCheck_Payload) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*HealthCheck_Payload_Text)(nil),
		(*HealthCheck_Payload_Binary)(nil),
	}
}

// [#next-free-field: 11]
type HealthCheck_HttpHealthCheck struct {
	// The value of the host header in the HTTP health check request. If
	// left empty (default value), the name of the cluster this health check is associated
	// with will be used.
	Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"`
	// Specifies the HTTP path that will be requested during health checking. For example
	// */healthcheck*.
	Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"`
	// [#not-implemented-hide:] HTTP specific payload.
	Send *HealthCheck_Payload `protobuf:"bytes,3,opt,name=send,proto3" json:"send,omitempty"`
	// [#not-implemented-hide:] HTTP specific response.
	Receive *HealthCheck_Payload `protobuf:"bytes,4,opt,name=receive,proto3" json:"receive,omitempty"`
	// An optional service name parameter which is used to validate the identity of
	// the health checked cluster. See the :ref:`architecture overview
	// <arch_overview_health_checking_identity>` for more information.
	ServiceName string `protobuf:"bytes,5,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"`
	// Specifies a list of HTTP headers that should be added to each request that is sent to the
	// health checked cluster. For more information, including details on header value syntax, see
	// the documentation on :ref:`custom request headers
	// <config_http_conn_man_headers_custom_request_headers>`.
	RequestHeadersToAdd []*HeaderValueOption `protobuf:"bytes,6,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"`
	// Specifies a list of HTTP headers that should be removed from each request that is sent to the
	// health checked cluster.
	RequestHeadersToRemove []string `protobuf:"bytes,8,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"`
	// If set, health checks will be made using http/2.
	// Deprecated, use :ref:`codec_client_type
	// <envoy_api_field_core.HealthCheck.HttpHealthCheck.codec_client_type>` instead.
	UseHttp2 bool `protobuf:"varint,7,opt,name=use_http2,json=useHttp2,proto3" json:"use_http2,omitempty"` // Deprecated: Do not use.
	// Specifies a list of HTTP response statuses considered healthy. If provided, replaces default
	// 200-only policy - 200 must be included explicitly as needed. Ranges follow half-open
	// semantics of :ref:`Int64Range <envoy_api_msg_type.Int64Range>`.
	ExpectedStatuses []*_type.Int64Range `protobuf:"bytes,9,rep,name=expected_statuses,json=expectedStatuses,proto3" json:"expected_statuses,omitempty"`
	// Use specified application protocol for health checks. This is to replace
	// :ref:`use_http2
	// <envoy_api_field_core.HealthCheck.HttpHealthCheck.use_http2>` in light of
	// HTTP3.
	CodecClientType      _type.CodecClientType `protobuf:"varint,10,opt,name=codec_client_type,json=codecClientType,proto3,enum=envoy.type.CodecClientType" json:"codec_client_type,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *HealthCheck_HttpHealthCheck) Reset()         { *m = HealthCheck_HttpHealthCheck{} }
func (m *HealthCheck_HttpHealthCheck) String() string { return proto.CompactTextString(m) }
func (*HealthCheck_HttpHealthCheck) ProtoMessage()    {}
func (*HealthCheck_HttpHealthCheck) Descriptor() ([]byte, []int) {
	return fileDescriptor_b6ca44dd529b90bd, []int{0, 1}
}

func (m *HealthCheck_HttpHealthCheck) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HealthCheck_HttpHealthCheck.Unmarshal(m, b)
}
func (m *HealthCheck_HttpHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HealthCheck_HttpHealthCheck.Marshal(b, m, deterministic)
}
func (m *HealthCheck_HttpHealthCheck) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HealthCheck_HttpHealthCheck.Merge(m, src)
}
func (m *HealthCheck_HttpHealthCheck) XXX_Size() int {
	return xxx_messageInfo_HealthCheck_HttpHealthCheck.Size(m)
}
func (m *HealthCheck_HttpHealthCheck) XXX_DiscardUnknown() {
	xxx_messageInfo_HealthCheck_HttpHealthCheck.DiscardUnknown(m)
}

var xxx_messageInfo_HealthCheck_HttpHealthCheck proto.InternalMessageInfo

func (m *HealthCheck_HttpHealthCheck) GetHost() string {
	if m != nil {
		return m.Host
	}
	return ""
}

func (m *HealthCheck_HttpHealthCheck) GetPath() string {
	if m != nil {
		return m.Path
	}
	return ""
}

func (m *HealthCheck_HttpHealthCheck) GetSend() *HealthCheck_Payload {
	if m != nil {
		return m.Send
	}
	return nil
}

func (m *HealthCheck_HttpHealthCheck) GetReceive() *HealthCheck_Payload {
	if m != nil {
		return m.Receive
	}
	return nil
}

func (m *HealthCheck_HttpHealthCheck) GetServiceName() string {
	if m != nil {
		return m.ServiceName
	}
	return ""
}

func (m *HealthCheck_HttpHealthCheck) GetRequestHeadersToAdd() []*HeaderValueOption {
	if m != nil {
		return m.RequestHeadersToAdd
	}
	return nil
}

func (m *HealthCheck_HttpHealthCheck) GetRequestHeadersToRemove() []string {
	if m != nil {
		return m.RequestHeadersToRemove
	}
	return nil
}

// Deprecated: Do not use.
func (m *HealthCheck_HttpHealthCheck) GetUseHttp2() bool {
	if m != nil {
		return m.UseHttp2
	}
	return false
}

func (m *HealthCheck_HttpHealthCheck) GetExpectedStatuses() []*_type.Int64Range {
	if m != nil {
		return m.ExpectedStatuses
	}
	return nil
}

func (m *HealthCheck_HttpHealthCheck) GetCodecClientType() _type.CodecClientType {
	if m != nil {
		return m.CodecClientType
	}
	return _type.CodecClientType_HTTP1
}

type HealthCheck_TcpHealthCheck struct {
	// Empty payloads imply a connect-only health check.
	Send *HealthCheck_Payload `protobuf:"bytes,1,opt,name=send,proto3" json:"send,omitempty"`
	// When checking the response, “fuzzy” matching is performed such that each
	// binary block must be found, and in the order specified, but not
	// necessarily contiguous.
	Receive              []*HealthCheck_Payload `protobuf:"bytes,2,rep,name=receive,proto3" json:"receive,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *HealthCheck_TcpHealthCheck) Reset()         { *m = HealthCheck_TcpHealthCheck{} }
func (m *HealthCheck_TcpHealthCheck) String() string { return proto.CompactTextString(m) }
func (*HealthCheck_TcpHealthCheck) ProtoMessage()    {}
func (*HealthCheck_TcpHealthCheck) Descriptor() ([]byte, []int) {
	return fileDescriptor_b6ca44dd529b90bd, []int{0, 2}
}

func (m *HealthCheck_TcpHealthCheck) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HealthCheck_TcpHealthCheck.Unmarshal(m, b)
}
func (m *HealthCheck_TcpHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HealthCheck_TcpHealthCheck.Marshal(b, m, deterministic)
}
func (m *HealthCheck_TcpHealthCheck) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HealthCheck_TcpHealthCheck.Merge(m, src)
}
func (m *HealthCheck_TcpHealthCheck) XXX_Size() int {
	return xxx_messageInfo_HealthCheck_TcpHealthCheck.Size(m)
}
func (m *HealthCheck_TcpHealthCheck) XXX_DiscardUnknown() {
	xxx_messageInfo_HealthCheck_TcpHealthCheck.DiscardUnknown(m)
}

var xxx_messageInfo_HealthCheck_TcpHealthCheck proto.InternalMessageInfo

func (m *HealthCheck_TcpHealthCheck) GetSend() *HealthCheck_Payload {
	if m != nil {
		return m.Send
	}
	return nil
}

func (m *HealthCheck_TcpHealthCheck) GetReceive() []*HealthCheck_Payload {
	if m != nil {
		return m.Receive
	}
	return nil
}

type HealthCheck_RedisHealthCheck struct {
	// If set, optionally perform ``EXISTS <key>`` instead of ``PING``. A return value
	// from Redis of 0 (does not exist) is considered a passing healthcheck. A return value other
	// than 0 is considered a failure. This allows the user to mark a Redis instance for maintenance
	// by setting the specified key to any value and waiting for traffic to drain.
	Key                  string   `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *HealthCheck_RedisHealthCheck) Reset()         { *m = HealthCheck_RedisHealthCheck{} }
func (m *HealthCheck_RedisHealthCheck) String() string { return proto.CompactTextString(m) }
func (*HealthCheck_RedisHealthCheck) ProtoMessage()    {}
func (*HealthCheck_RedisHealthCheck) Descriptor() ([]byte, []int) {
	return fileDescriptor_b6ca44dd529b90bd, []int{0, 3}
}

func (m *HealthCheck_RedisHealthCheck) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HealthCheck_RedisHealthCheck.Unmarshal(m, b)
}
func (m *HealthCheck_RedisHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HealthCheck_RedisHealthCheck.Marshal(b, m, deterministic)
}
func (m *HealthCheck_RedisHealthCheck) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HealthCheck_RedisHealthCheck.Merge(m, src)
}
func (m *HealthCheck_RedisHealthCheck) XXX_Size() int {
	return xxx_messageInfo_HealthCheck_RedisHealthCheck.Size(m)
}
func (m *HealthCheck_RedisHealthCheck) XXX_DiscardUnknown() {
	xxx_messageInfo_HealthCheck_RedisHealthCheck.DiscardUnknown(m)
}

var xxx_messageInfo_HealthCheck_RedisHealthCheck proto.InternalMessageInfo

func (m *HealthCheck_RedisHealthCheck) GetKey() string {
	if m != nil {
		return m.Key
	}
	return ""
}

// `grpc.health.v1.Health
// <https://github.com/grpc/grpc/blob/master/src/proto/grpc/health/v1/health.proto>`_-based
// healthcheck. See `gRPC doc <https://github.com/grpc/grpc/blob/master/doc/health-checking.md>`_
// for details.
type HealthCheck_GrpcHealthCheck struct {
	// An optional service name parameter which will be sent to gRPC service in
	// `grpc.health.v1.HealthCheckRequest
	// <https://github.com/grpc/grpc/blob/master/src/proto/grpc/health/v1/health.proto#L20>`_.
	// message. See `gRPC health-checking overview
	// <https://github.com/grpc/grpc/blob/master/doc/health-checking.md>`_ for more information.
	ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"`
	// The value of the :authority header in the gRPC health check request. If
	// left empty (default value), the name of the cluster this health check is associated
	// with will be used.
	Authority            string   `protobuf:"bytes,2,opt,name=authority,proto3" json:"authority,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *HealthCheck_GrpcHealthCheck) Reset()         { *m = HealthCheck_GrpcHealthCheck{} }
func (m *HealthCheck_GrpcHealthCheck) String() string { return proto.CompactTextString(m) }
func (*HealthCheck_GrpcHealthCheck) ProtoMessage()    {}
func (*HealthCheck_GrpcHealthCheck) Descriptor() ([]byte, []int) {
	return fileDescriptor_b6ca44dd529b90bd, []int{0, 4}
}

func (m *HealthCheck_GrpcHealthCheck) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HealthCheck_GrpcHealthCheck.Unmarshal(m, b)
}
func (m *HealthCheck_GrpcHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HealthCheck_GrpcHealthCheck.Marshal(b, m, deterministic)
}
func (m *HealthCheck_GrpcHealthCheck) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HealthCheck_GrpcHealthCheck.Merge(m, src)
}
func (m *HealthCheck_GrpcHealthCheck) XXX_Size() int {
	return xxx_messageInfo_HealthCheck_GrpcHealthCheck.Size(m)
}
func (m *HealthCheck_GrpcHealthCheck) XXX_DiscardUnknown() {
	xxx_messageInfo_HealthCheck_GrpcHealthCheck.DiscardUnknown(m)
}

var xxx_messageInfo_HealthCheck_GrpcHealthCheck proto.InternalMessageInfo

func (m *HealthCheck_GrpcHealthCheck) GetServiceName() string {
	if m != nil {
		return m.ServiceName
	}
	return ""
}

func (m *HealthCheck_GrpcHealthCheck) GetAuthority() string {
	if m != nil {
		return m.Authority
	}
	return ""
}

// Custom health check.
type HealthCheck_CustomHealthCheck struct {
	// The registered name of the custom health checker.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// A custom health checker specific configuration which depends on the custom health checker
	// being instantiated. See :api:`envoy/config/health_checker` for reference.
	//
	// Types that are valid to be assigned to ConfigType:
	//	*HealthCheck_CustomHealthCheck_Config
	//	*HealthCheck_CustomHealthCheck_TypedConfig
	ConfigType           isHealthCheck_CustomHealthCheck_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}                                   `json:"-"`
	XXX_unrecognized     []byte                                     `json:"-"`
	XXX_sizecache        int32                                      `json:"-"`
}

func (m *HealthCheck_CustomHealthCheck) Reset()         { *m = HealthCheck_CustomHealthCheck{} }
func (m *HealthCheck_CustomHealthCheck) String() string { return proto.CompactTextString(m) }
func (*HealthCheck_CustomHealthCheck) ProtoMessage()    {}
func (*HealthCheck_CustomHealthCheck) Descriptor() ([]byte, []int) {
	return fileDescriptor_b6ca44dd529b90bd, []int{0, 5}
}

func (m *HealthCheck_CustomHealthCheck) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HealthCheck_CustomHealthCheck.Unmarshal(m, b)
}
func (m *HealthCheck_CustomHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HealthCheck_CustomHealthCheck.Marshal(b, m, deterministic)
}
func (m *HealthCheck_CustomHealthCheck) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HealthCheck_CustomHealthCheck.Merge(m, src)
}
func (m *HealthCheck_CustomHealthCheck) XXX_Size() int {
	return xxx_messageInfo_HealthCheck_CustomHealthCheck.Size(m)
}
func (m *HealthCheck_CustomHealthCheck) XXX_DiscardUnknown() {
	xxx_messageInfo_HealthCheck_CustomHealthCheck.DiscardUnknown(m)
}

var xxx_messageInfo_HealthCheck_CustomHealthCheck proto.InternalMessageInfo

func (m *HealthCheck_CustomHealthCheck) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isHealthCheck_CustomHealthCheck_ConfigType interface {
	isHealthCheck_CustomHealthCheck_ConfigType()
}

type HealthCheck_CustomHealthCheck_Config struct {
	Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"`
}

type HealthCheck_CustomHealthCheck_TypedConfig struct {
	TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*HealthCheck_CustomHealthCheck_Config) isHealthCheck_CustomHealthCheck_ConfigType() {}

func (*HealthCheck_CustomHealthCheck_TypedConfig) isHealthCheck_CustomHealthCheck_ConfigType() {}

func (m *HealthCheck_CustomHealthCheck) GetConfigType() isHealthCheck_CustomHealthCheck_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

// Deprecated: Do not use.
func (m *HealthCheck_CustomHealthCheck) GetConfig() *_struct.Struct {
	if x, ok := m.GetConfigType().(*HealthCheck_CustomHealthCheck_Config); ok {
		return x.Config
	}
	return nil
}

func (m *HealthCheck_CustomHealthCheck) GetTypedConfig() *any.Any {
	if x, ok := m.GetConfigType().(*HealthCheck_CustomHealthCheck_TypedConfig); ok {
		return x.TypedConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*HealthCheck_CustomHealthCheck) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*HealthCheck_CustomHealthCheck_Config)(nil),
		(*HealthCheck_CustomHealthCheck_TypedConfig)(nil),
	}
}

func init() {
	proto.RegisterEnum("envoy.api.v2.core.HealthStatus", HealthStatus_name, HealthStatus_value)
	proto.RegisterType((*HealthCheck)(nil), "envoy.api.v2.core.HealthCheck")
	proto.RegisterType((*HealthCheck_Payload)(nil), "envoy.api.v2.core.HealthCheck.Payload")
	proto.RegisterType((*HealthCheck_HttpHealthCheck)(nil), "envoy.api.v2.core.HealthCheck.HttpHealthCheck")
	proto.RegisterType((*HealthCheck_TcpHealthCheck)(nil), "envoy.api.v2.core.HealthCheck.TcpHealthCheck")
	proto.RegisterType((*HealthCheck_RedisHealthCheck)(nil), "envoy.api.v2.core.HealthCheck.RedisHealthCheck")
	proto.RegisterType((*HealthCheck_GrpcHealthCheck)(nil), "envoy.api.v2.core.HealthCheck.GrpcHealthCheck")
	proto.RegisterType((*HealthCheck_CustomHealthCheck)(nil), "envoy.api.v2.core.HealthCheck.CustomHealthCheck")
}

func init() {
	proto.RegisterFile("envoy/api/v2/core/health_check.proto", fileDescriptor_b6ca44dd529b90bd)
}

var fileDescriptor_b6ca44dd529b90bd = []byte{
	// 1225 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x96, 0xdd, 0x72, 0xdb, 0x44,
	0x14, 0xc7, 0x23, 0xdb, 0x8d, 0xed, 0x63, 0xc7, 0x96, 0x37, 0x4d, 0xa2, 0xba, 0x81, 0x1a, 0x26,
	0xc3, 0x78, 0x3a, 0x83, 0xcd, 0xb8, 0xb4, 0x4c, 0xb9, 0xa1, 0x91, 0x93, 0xd6, 0x2e, 0xad, 0x1b,
	0xb6, 0x0e, 0x9d, 0x0e, 0xcc, 0x88, 0x8d, 0x74, 0x62, 0x8b, 0x2a, 0x5a, 0xb1, 0x5a, 0xbb, 0xf5,
	0x2d, 0x0f, 0xc0, 0x05, 0x6f, 0xc0, 0x6d, 0xef, 0x78, 0x00, 0xde, 0x87, 0x47, 0x60, 0x72, 0xc5,
	0x68, 0x25, 0x3b, 0xfe, 0x08, 0x93, 0x74, 0xb8, 0xd3, 0x9e, 0x73, 0xfe, 0xbf, 0xfd, 0x38, 0x1f,
	0x23, 0xd8, 0x43, 0x7f, 0xcc, 0x27, 0x4d, 0x16, 0xb8, 0xcd, 0x71, 0xab, 0x69, 0x73, 0x81, 0xcd,
	0x21, 0x32, 0x4f, 0x0e, 0x2d, 0x7b, 0x88, 0xf6, 0x9b, 0x46, 0x20, 0xb8, 0xe4, 0xa4, 0xa2, 0xa2,
	0x1a, 0x2c, 0x70, 0x1b, 0xe3, 0x56, 0x23, 0x8a, 0xaa, 0xee, 0xae, 0x0a, 0x4f, 0x58, 0x88, 0xb1,
	0xa0, 0xba, 0x15, 0x7b, 0xe5, 0x24, 0xc0, 0xe6, 0x50, 0xca, 0x20, 0x31, 0x6f, 0xcf, 0x99, 0x05,
	0xf3, 0x07, 0xd3, 0xf0, 0x5b, 0x03, 0xce, 0x07, 0x1e, 0x36, 0xd5, 0xea, 0x64, 0x74, 0xda, 0x64,
	0xfe, 0x24, 0x71, 0x7d, 0xbc, 0xec, 0x72, 0x46, 0x82, 0x49, 0x97, 0xfb, 0x89, 0x7f, 0x77, 0xd9,
	0x1f, 0x4a, 0x31, 0xb2, 0xe5, 0x7f, 0xa9, 0xdf, 0x0a, 0x16, 0x04, 0x28, 0xc2, 0xc4, 0xbf, 0x33,
	0x66, 0x9e, 0xeb, 0x30, 0x89, 0xcd, 0xe9, 0x47, 0xec, 0xf8, 0xf4, 0x8f, 0x9b, 0x50, 0xe8, 0xa8,
	0x87, 0x68, 0x47, 0xef, 0x40, 0xbe, 0x81, 0xac, 0x74, 0xcf, 0x90, 0x8f, 0xa4, 0xa1, 0xd5, 0xb4,
	0x7a, 0xa1, 0x75, 0xab, 0x11, 0xa3, 0x1b, 0x53, 0x74, 0xe3, 0x20, 0x39, 0x98, 0x09, 0xe7, 0x66,
	0xf6, 0xbd, 0x96, 0xc9, 0x69, 0x77, 0xd7, 0xe8, 0x54, 0x45, 0xf6, 0x21, 0xe7, 0xfa, 0x12, 0xc5,
	0x98, 0x79, 0x46, 0xea, 0x43, 0x08, 0x33, 0x19, 0x79, 0x04, 0x25, 0xd7, 0x77, 0xa5, 0xcb, 0x3c,
	0xeb, 0x67, 0x57, 0x4a, 0x14, 0xc6, 0xcd, 0x2b, 0x40, 0x74, 0x23, 0x11, 0x3c, 0x55, 0xf1, 0xc4,
	0x84, 0xf2, 0x94, 0x36, 0x45, 0xa4, 0xaf, 0x42, 0x94, 0xa6, 0x8a, 0x84, 0xf1, 0x00, 0x76, 0x96,
	0x18, 0x56, 0x80, 0xc2, 0x46, 0x5f, 0x1a, 0xa4, 0xa6, 0xd5, 0x37, 0xe8, 0xd6, 0xa2, 0xe0, 0x28,
	0x76, 0x92, 0xe7, 0xb0, 0x39, 0xf2, 0xe3, 0xda, 0x9a, 0x58, 0x72, 0x28, 0x30, 0x1c, 0x72, 0xcf,
	0x31, 0x32, 0x6a, 0xff, 0xdd, 0x95, 0xfd, 0x8f, 0xbb, 0xbe, 0xbc, 0xd7, 0xfa, 0x9e, 0x79, 0x23,
	0xa4, 0x64, 0x26, 0xec, 0x4f, 0x75, 0xa4, 0x0b, 0x95, 0x55, 0xd8, 0x8d, 0x6b, 0xc0, 0xf4, 0x15,
	0xd4, 0x57, 0x90, 0x63, 0x9e, 0xb4, 0x02, 0x2e, 0xa4, 0xb1, 0x7e, 0x0d, 0x42, 0x96, 0x79, 0xf2,
	0x88, 0x0b, 0x49, 0x0e, 0x41, 0x17, 0x38, 0x0a, 0xd1, 0xb2, 0xb9, 0xef, 0xa3, 0x1d, 0x3d, 0x97,
	0x91, 0x55, 0x80, 0xea, 0x0a, 0xc0, 0xe4, 0xdc, 0x8b, 0xe5, 0x65, 0xa5, 0x69, 0xcf, 0x24, 0xe4,
	0x47, 0xa8, 0x44, 0x3d, 0x62, 0xcd, 0x37, 0x9e, 0x91, 0x53, 0x9c, 0x46, 0x63, 0xa5, 0xf3, 0x1a,
	0x73, 0x65, 0xd9, 0xe8, 0x48, 0x19, 0xcc, 0xad, 0x3b, 0x6b, 0xb4, 0x3c, 0x5c, 0x34, 0x91, 0xd7,
	0xa0, 0x4b, 0x7b, 0x09, 0x9e, 0x57, 0xf0, 0xcf, 0xaf, 0x80, 0xf7, 0xed, 0x25, 0x76, 0x49, 0x2e,
	0x58, 0xa2, 0x83, 0x0f, 0x44, 0x60, 0x2f, 0xb2, 0x0b, 0xd7, 0x3a, 0xf8, 0x13, 0x11, 0xd8, 0x4b,
	0x07, 0x1f, 0x2c, 0x9a, 0xc8, 0x09, 0x6c, 0xda, 0xa3, 0x50, 0xf2, 0xb3, 0x45, 0xfe, 0x86, 0xe2,
	0x7f, 0x71, 0x05, 0xbf, 0xad, 0x94, 0x8b, 0x3b, 0x54, 0xec, 0x65, 0x23, 0x79, 0x09, 0x9b, 0x3e,
	0xb7, 0xa4, 0x60, 0xa7, 0xa7, 0xae, 0x6d, 0xcd, 0x1a, 0xb4, 0x78, 0x55, 0x83, 0xe6, 0xce, 0xcd,
	0x1b, 0xef, 0xb5, 0xd4, 0xdd, 0x35, 0x5a, 0xf1, 0x79, 0x3f, 0x96, 0x77, 0xa7, 0x7d, 0x4a, 0xe1,
	0xa2, 0x60, 0x2f, 0x98, 0xa5, 0x0f, 0x60, 0xce, 0xe4, 0x33, 0xe6, 0x0f, 0xb0, 0x73, 0xc1, 0x44,
	0x67, 0x80, 0x17, 0xe0, 0xf2, 0xf5, 0xc1, 0x5b, 0x33, 0xc6, 0xa1, 0x33, 0xc0, 0x19, 0xfc, 0x15,
	0x6c, 0x5d, 0x8e, 0xd6, 0xaf, 0x8f, 0xde, 0xbc, 0x0c, 0xbc, 0x07, 0x25, 0x1c, 0xa3, 0x2f, 0x2d,
	0x8f, 0x0f, 0xac, 0x80, 0xc9, 0xa1, 0x51, 0xa9, 0x69, 0xf5, 0x3c, 0x2d, 0x2a, 0xeb, 0x33, 0x3e,
	0x38, 0x62, 0x72, 0x48, 0x1e, 0x43, 0x8d, 0x79, 0x6f, 0xd9, 0x24, 0x54, 0x61, 0xf3, 0xc9, 0xb6,
	0x4e, 0x99, 0xeb, 0x8d, 0x04, 0x86, 0xc6, 0x66, 0x4d, 0xab, 0xe7, 0xe8, 0x6e, 0x1c, 0xf7, 0x8c,
	0x0f, 0xe6, 0x92, 0xf8, 0x38, 0x89, 0xa9, 0x52, 0xc8, 0x1e, 0xb1, 0x89, 0xc7, 0x99, 0x43, 0x3e,
	0x82, 0x8c, 0xc4, 0x77, 0xf1, 0xac, 0xce, 0x9b, 0xd9, 0x73, 0x33, 0x23, 0x52, 0x35, 0xad, 0xb3,
	0x46, 0x95, 0x99, 0x18, 0xb0, 0x7e, 0xe2, 0xfa, 0x4c, 0x4c, 0xd4, 0x28, 0x2e, 0x76, 0xd6, 0x68,
	0xb2, 0x36, 0x4b, 0x90, 0x0d, 0x12, 0x46, 0xfa, 0x1f, 0x53, 0xab, 0xfe, 0x95, 0x81, 0xf2, 0x52,
	0x93, 0x11, 0x02, 0x99, 0x21, 0x0f, 0x13, 0x38, 0x55, 0xdf, 0xe4, 0x36, 0x64, 0xd4, 0xfd, 0x52,
	0x0b, 0x1b, 0x52, 0x65, 0x24, 0x5f, 0x43, 0x26, 0x44, 0xdf, 0x49, 0x66, 0xed, 0x67, 0x57, 0x94,
	0x6e, 0x72, 0x07, 0xaa, 0x34, 0xe4, 0x11, 0x64, 0x05, 0xda, 0xe8, 0x8e, 0x31, 0x19, 0x95, 0xd7,
	0x95, 0x4f, 0x65, 0xe4, 0x13, 0x28, 0x86, 0x28, 0xc6, 0xae, 0x8d, 0x96, 0xcf, 0xce, 0x50, 0x0d,
	0xc9, 0x3c, 0x2d, 0x24, 0xb6, 0x1e, 0x3b, 0x43, 0xe2, 0xc0, 0xb6, 0xc0, 0x5f, 0x46, 0x18, 0xca,
	0xe8, 0xf9, 0x1d, 0x14, 0xa1, 0x25, 0xb9, 0xc5, 0x1c, 0xc7, 0x58, 0xaf, 0xa5, 0xeb, 0x85, 0xd6,
	0xde, 0xe5, 0x7b, 0x3a, 0x28, 0xd4, 0x48, 0x7b, 0x11, 0xa8, 0x62, 0xc8, 0x9f, 0x9b, 0xeb, 0xbf,
	0x6b, 0x69, 0xfd, 0xef, 0x2c, 0xdd, 0x4c, 0x70, 0x71, 0x50, 0xd8, 0xe7, 0xfb, 0x8e, 0x43, 0x1e,
	0xc2, 0xad, 0x4b, 0x76, 0x11, 0x78, 0xc6, 0xc7, 0x68, 0xe4, 0x6a, 0xe9, 0x7a, 0x9e, 0x6e, 0x2f,
	0xeb, 0xa8, 0xf2, 0x92, 0x3b, 0x90, 0x8f, 0xe6, 0x6c, 0x34, 0xdb, 0x5a, 0x6a, 0xc4, 0xe6, 0xcc,
	0x94, 0xa1, 0xd1, 0xdc, 0x28, 0xc4, 0x28, 0x3b, 0x2d, 0xd2, 0x86, 0x0a, 0xbe, 0x0b, 0xd0, 0x96,
	0xe8, 0x58, 0xa1, 0x64, 0x72, 0x14, 0x62, 0x68, 0xe4, 0xd5, 0xe1, 0xb7, 0x93, 0xc3, 0x47, 0x7f,
	0x1d, 0x8d, 0xae, 0x2f, 0x1f, 0x7c, 0x49, 0xa3, 0x5f, 0x0f, 0xaa, 0x4f, 0x05, 0x2f, 0x93, 0x78,
	0xf2, 0x1d, 0x54, 0x6c, 0xee, 0xa0, 0x6d, 0xd9, 0x9e, 0x1b, 0x55, 0x6d, 0xa4, 0x30, 0xa0, 0xa6,
	0xd5, 0x4b, 0xad, 0xdb, 0xf3, 0x90, 0x76, 0x14, 0xd4, 0x56, 0x31, 0xfd, 0x49, 0x80, 0xaa, 0x0b,
	0x7e, 0xd5, 0x52, 0xba, 0x46, 0xcb, 0xf6, 0xa2, 0xab, 0xfa, 0x9b, 0x06, 0xa5, 0xc5, 0x39, 0x3a,
	0xab, 0x06, 0xed, 0xff, 0x55, 0x43, 0x4a, 0x5d, 0xee, 0x43, 0xab, 0xa1, 0xba, 0x07, 0x3a, 0x45,
	0xc7, 0x0d, 0xe7, 0x4f, 0xa4, 0x43, 0xfa, 0x0d, 0x4e, 0x92, 0x7a, 0x8e, 0x3e, 0xab, 0x14, 0xca,
	0x4b, 0x13, 0x7a, 0xa5, 0x8c, 0xb4, 0xd5, 0x32, 0xda, 0x85, 0x3c, 0x1b, 0xc9, 0x21, 0x17, 0xae,
	0x8c, 0x3b, 0x2b, 0x4f, 0x2f, 0x0c, 0xd5, 0x3f, 0x35, 0xa8, 0xac, 0x8c, 0xe5, 0xa8, 0x71, 0x2e,
	0x70, 0x73, 0x8d, 0x13, 0x19, 0xc9, 0x7d, 0x58, 0xb7, 0xb9, 0x7f, 0xea, 0x0e, 0x92, 0x5f, 0xa6,
	0x9d, 0x95, 0x49, 0xf4, 0x52, 0xfd, 0xed, 0x45, 0xc5, 0x10, 0x35, 0x71, 0x1c, 0x4c, 0x1e, 0x42,
	0x31, 0xca, 0x93, 0x63, 0x25, 0xe2, 0xb8, 0xef, 0x6e, 0xae, 0x88, 0xf7, 0xfd, 0x49, 0x67, 0x8d,
	0x16, 0x54, 0x6c, 0x5b, 0x85, 0x9a, 0x1b, 0x50, 0x88, 0x45, 0x2a, 0xf9, 0xe6, 0x16, 0x94, 0xe6,
	0xe7, 0x11, 0x0a, 0x35, 0x15, 0x9e, 0x66, 0x72, 0xa0, 0x17, 0xee, 0xfe, 0x04, 0xc5, 0xf8, 0x26,
	0x71, 0x01, 0x91, 0x02, 0x64, 0x8f, 0x7b, 0xdf, 0xf6, 0x5e, 0xbc, 0xea, 0xe9, 0x6b, 0xd1, 0xa2,
	0x73, 0xb8, 0xff, 0xac, 0xdf, 0x79, 0xad, 0x6b, 0x64, 0x03, 0xf2, 0xc7, 0xbd, 0xe9, 0x32, 0x45,
	0x8a, 0x90, 0x3b, 0xa0, 0xfb, 0xdd, 0x5e, 0xb7, 0xf7, 0x44, 0x4f, 0x47, 0x91, 0xfd, 0xee, 0xf3,
	0xc3, 0x17, 0xc7, 0x7d, 0x3d, 0xa3, 0x5c, 0x87, 0x4f, 0xe8, 0xfe, 0xc1, 0xe1, 0x81, 0x7e, 0xc3,
	0xbc, 0x0f, 0x77, 0x5c, 0x1e, 0x67, 0x38, 0x10, 0xfc, 0xdd, 0x64, 0x35, 0xd9, 0xa6, 0x3e, 0xf7,
	0x98, 0x47, 0xd1, 0xc5, 0x8e, 0xb4, 0x93, 0x75, 0x75, 0xc3, 0x7b, 0xff, 0x06, 0x00, 0x00, 0xff,
	0xff, 0x42, 0x81, 0xa9, 0x57, 0xdd, 0x0b, 0x00, 0x00,
}
  07070100000066000081A4000003E800000064000000015E17A2470000150A000000000000000000000000000000000000003A00000000cilium-proxy-20200109/go/envoy/api/v2/core/http_uri.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/core/http_uri.proto

package envoy_api_v2_core

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Envoy external URI descriptor
type HttpUri struct {
	// The HTTP server URI. It should be a full FQDN with protocol, host and path.
	//
	// Example:
	//
	// .. code-block:: yaml
	//
	//    uri: https://www.googleapis.com/oauth2/v1/certs
	//
	Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"`
	// Specify how `uri` is to be fetched. Today, this requires an explicit
	// cluster, but in the future we may support dynamic cluster creation or
	// inline DNS resolution. See `issue
	// <https://github.com/envoyproxy/envoy/issues/1606>`_.
	//
	// Types that are valid to be assigned to HttpUpstreamType:
	//	*HttpUri_Cluster
	HttpUpstreamType isHttpUri_HttpUpstreamType `protobuf_oneof:"http_upstream_type"`
	// Sets the maximum duration in milliseconds that a response can take to arrive upon request.
	Timeout              *duration.Duration `protobuf:"bytes,3,opt,name=timeout,proto3" json:"timeout,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *HttpUri) Reset()         { *m = HttpUri{} }
func (m *HttpUri) String() string { return proto.CompactTextString(m) }
func (*HttpUri) ProtoMessage()    {}
func (*HttpUri) Descriptor() ([]byte, []int) {
	return fileDescriptor_1660b946db74c078, []int{0}
}

func (m *HttpUri) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpUri.Unmarshal(m, b)
}
func (m *HttpUri) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpUri.Marshal(b, m, deterministic)
}
func (m *HttpUri) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpUri.Merge(m, src)
}
func (m *HttpUri) XXX_Size() int {
	return xxx_messageInfo_HttpUri.Size(m)
}
func (m *HttpUri) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpUri.DiscardUnknown(m)
}

var xxx_messageInfo_HttpUri proto.InternalMessageInfo

func (m *HttpUri) GetUri() string {
	if m != nil {
		return m.Uri
	}
	return ""
}

type isHttpUri_HttpUpstreamType interface {
	isHttpUri_HttpUpstreamType()
}

type HttpUri_Cluster struct {
	Cluster string `protobuf:"bytes,2,opt,name=cluster,proto3,oneof"`
}

func (*HttpUri_Cluster) isHttpUri_HttpUpstreamType() {}

func (m *HttpUri) GetHttpUpstreamType() isHttpUri_HttpUpstreamType {
	if m != nil {
		return m.HttpUpstreamType
	}
	return nil
}

func (m *HttpUri) GetCluster() string {
	if x, ok := m.GetHttpUpstreamType().(*HttpUri_Cluster); ok {
		return x.Cluster
	}
	return ""
}

func (m *HttpUri) GetTimeout() *duration.Duration {
	if m != nil {
		return m.Timeout
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*HttpUri) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*HttpUri_Cluster)(nil),
	}
}

func init() {
	proto.RegisterType((*HttpUri)(nil), "envoy.api.v2.core.HttpUri")
}

func init() { proto.RegisterFile("envoy/api/v2/core/http_uri.proto", fileDescriptor_1660b946db74c078) }

var fileDescriptor_1660b946db74c078 = []byte{
	// 259 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0x31, 0x4f, 0xc3, 0x30,
	0x14, 0x84, 0xeb, 0xa6, 0xc2, 0x60, 0x58, 0xf0, 0x42, 0xd2, 0x01, 0x22, 0x58, 0x3a, 0xd9, 0x22,
	0xfc, 0x00, 0x24, 0x8b, 0xa1, 0x63, 0x15, 0x89, 0xb9, 0x72, 0x5b, 0x53, 0x2c, 0xa5, 0x7d, 0xd6,
	0xeb, 0x73, 0x44, 0x7e, 0x10, 0x0b, 0xbf, 0x10, 0x75, 0x42, 0x49, 0x9a, 0x01, 0x75, 0xb3, 0x7c,
	0x77, 0xba, 0xfb, 0x9e, 0xc8, 0xdd, 0xbe, 0x86, 0x46, 0xdb, 0xe0, 0x75, 0x5d, 0xe8, 0x35, 0xa0,
	0xd3, 0x9f, 0x44, 0x61, 0x19, 0xd1, 0xab, 0x80, 0x40, 0x20, 0x6f, 0x3b, 0x87, 0xb2, 0xc1, 0xab,
	0xba, 0x50, 0xad, 0x63, 0x7a, 0xbf, 0x05, 0xd8, 0x56, 0x4e, 0x77, 0x86, 0x55, 0xfc, 0xd0, 0x9b,
	0x88, 0x96, 0x3c, 0xec, 0xfb, 0xc8, 0xf4, 0xae, 0xb6, 0x95, 0xdf, 0x58, 0x72, 0x7a, 0x78, 0xf4,
	0xc2, 0xe3, 0x37, 0x13, 0x7c, 0x4e, 0x14, 0xde, 0xd1, 0xcb, 0x4c, 0x24, 0x11, 0x7d, 0xca, 0x72,
	0x36, 0xbb, 0x32, 0xfc, 0x68, 0x26, 0x38, 0xce, 0x59, 0xd9, 0xfe, 0xc9, 0x27, 0xc1, 0xd7, 0x55,
	0x3c, 0x90, 0xc3, 0x74, 0xfc, 0x4f, 0x9e, 0x8f, 0xca, 0x41, 0x91, 0xaf, 0x82, 0x93, 0xdf, 0x39,
	0x88, 0x94, 0x26, 0x39, 0x9b, 0x5d, 0x17, 0x99, 0xea, 0x67, 0xa9, 0x61, 0x96, 0x7a, 0x3b, 0xcd,
	0x32, 0xe2, 0x68, 0xf8, 0x0f, 0x9b, 0x5c, 0xb2, 0x62, 0x54, 0x0e, 0x29, 0x93, 0x09, 0xd9, 0xa3,
	0x86, 0x03, 0xa1, 0xb3, 0xbb, 0x25, 0x35, 0xc1, 0xc9, 0xe4, 0xd7, 0x30, 0xf3, 0x2c, 0x1e, 0x3c,
	0xa8, 0x0e, 0x3c, 0x20, 0x7c, 0x35, 0xea, 0xec, 0x06, 0xe6, 0xe6, 0xc4, 0xb1, 0x68, 0xcb, 0x16,
	0x6c, 0x75, 0xd1, 0xb5, 0xbe, 0xfc, 0x05, 0x00, 0x00, 0xff, 0xff, 0xf4, 0x5f, 0xac, 0x52, 0x51,
	0x01, 0x00, 0x00,
}
  07070100000067000081A4000003E800000064000000015E17A24700007D67000000000000000000000000000000000000003A00000000cilium-proxy-20200109/go/envoy/api/v2/core/protocol.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/core/protocol.proto

package envoy_api_v2_core

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#not-implemented-hide:]
type TcpProtocolOptions struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *TcpProtocolOptions) Reset()         { *m = TcpProtocolOptions{} }
func (m *TcpProtocolOptions) String() string { return proto.CompactTextString(m) }
func (*TcpProtocolOptions) ProtoMessage()    {}
func (*TcpProtocolOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_d86476e078060b60, []int{0}
}

func (m *TcpProtocolOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TcpProtocolOptions.Unmarshal(m, b)
}
func (m *TcpProtocolOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TcpProtocolOptions.Marshal(b, m, deterministic)
}
func (m *TcpProtocolOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TcpProtocolOptions.Merge(m, src)
}
func (m *TcpProtocolOptions) XXX_Size() int {
	return xxx_messageInfo_TcpProtocolOptions.Size(m)
}
func (m *TcpProtocolOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_TcpProtocolOptions.DiscardUnknown(m)
}

var xxx_messageInfo_TcpProtocolOptions proto.InternalMessageInfo

type HttpProtocolOptions struct {
	// The idle timeout for connections. The idle timeout is defined as the
	// period in which there are no active requests. If not set, there is no idle timeout. When the
	// idle timeout is reached the connection will be closed. If the connection is an HTTP/2
	// downstream connection a drain sequence will occur prior to closing the connection, see
	// :ref:`drain_timeout
	// <envoy_api_field_config.filter.network.http_connection_manager.v2.HttpConnectionManager.drain_timeout>`.
	// Note that request based timeouts mean that HTTP/2 PINGs will not keep the connection alive.
	// If not specified, this defaults to 1 hour. To disable idle timeouts explicitly set this to 0.
	//
	// .. warning::
	//   Disabling this timeout has a highly likelihood of yielding connection leaks due to lost TCP
	//   FIN packets, etc.
	IdleTimeout *duration.Duration `protobuf:"bytes,1,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"`
	// The maximum duration of a connection. The duration is defined as a period since a connection
	// was established. If not set, there is no max duration. When max_connection_duration is reached
	// the connection will be closed. Drain sequence will occur prior to closing the connection if
	// if's applicable. See :ref:`drain_timeout
	// <envoy_api_field_config.filter.network.http_connection_manager.v2.HttpConnectionManager.drain_timeout>`.
	// Note: not implemented for upstream connections.
	MaxConnectionDuration *duration.Duration `protobuf:"bytes,3,opt,name=max_connection_duration,json=maxConnectionDuration,proto3" json:"max_connection_duration,omitempty"`
	// The maximum number of headers. If unconfigured, the default
	// maximum number of request headers allowed is 100. Requests that exceed this limit will receive
	// a 431 response for HTTP/1.x and cause a stream reset for HTTP/2.
	MaxHeadersCount      *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=max_headers_count,json=maxHeadersCount,proto3" json:"max_headers_count,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *HttpProtocolOptions) Reset()         { *m = HttpProtocolOptions{} }
func (m *HttpProtocolOptions) String() string { return proto.CompactTextString(m) }
func (*HttpProtocolOptions) ProtoMessage()    {}
func (*HttpProtocolOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_d86476e078060b60, []int{1}
}

func (m *HttpProtocolOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpProtocolOptions.Unmarshal(m, b)
}
func (m *HttpProtocolOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpProtocolOptions.Marshal(b, m, deterministic)
}
func (m *HttpProtocolOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpProtocolOptions.Merge(m, src)
}
func (m *HttpProtocolOptions) XXX_Size() int {
	return xxx_messageInfo_HttpProtocolOptions.Size(m)
}
func (m *HttpProtocolOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpProtocolOptions.DiscardUnknown(m)
}

var xxx_messageInfo_HttpProtocolOptions proto.InternalMessageInfo

func (m *HttpProtocolOptions) GetIdleTimeout() *duration.Duration {
	if m != nil {
		return m.IdleTimeout
	}
	return nil
}

func (m *HttpProtocolOptions) GetMaxConnectionDuration() *duration.Duration {
	if m != nil {
		return m.MaxConnectionDuration
	}
	return nil
}

func (m *HttpProtocolOptions) GetMaxHeadersCount() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxHeadersCount
	}
	return nil
}

type Http1ProtocolOptions struct {
	// Handle HTTP requests with absolute URLs in the requests. These requests
	// are generally sent by clients to forward/explicit proxies. This allows clients to configure
	// envoy as their HTTP proxy. In Unix, for example, this is typically done by setting the
	// *http_proxy* environment variable.
	AllowAbsoluteUrl *wrappers.BoolValue `protobuf:"bytes,1,opt,name=allow_absolute_url,json=allowAbsoluteUrl,proto3" json:"allow_absolute_url,omitempty"`
	// Handle incoming HTTP/1.0 and HTTP 0.9 requests.
	// This is off by default, and not fully standards compliant. There is support for pre-HTTP/1.1
	// style connect logic, dechunking, and handling lack of client host iff
	// *default_host_for_http_10* is configured.
	AcceptHttp_10 bool `protobuf:"varint,2,opt,name=accept_http_10,json=acceptHttp10,proto3" json:"accept_http_10,omitempty"`
	// A default host for HTTP/1.0 requests. This is highly suggested if *accept_http_10* is true as
	// Envoy does not otherwise support HTTP/1.0 without a Host header.
	// This is a no-op if *accept_http_10* is not true.
	DefaultHostForHttp_10 string `protobuf:"bytes,3,opt,name=default_host_for_http_10,json=defaultHostForHttp10,proto3" json:"default_host_for_http_10,omitempty"`
	// Describes how the keys for response headers should be formatted. By default, all header keys
	// are lower cased.
	HeaderKeyFormat      *Http1ProtocolOptions_HeaderKeyFormat `protobuf:"bytes,4,opt,name=header_key_format,json=headerKeyFormat,proto3" json:"header_key_format,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
	XXX_unrecognized     []byte                                `json:"-"`
	XXX_sizecache        int32                                 `json:"-"`
}

func (m *Http1ProtocolOptions) Reset()         { *m = Http1ProtocolOptions{} }
func (m *Http1ProtocolOptions) String() string { return proto.CompactTextString(m) }
func (*Http1ProtocolOptions) ProtoMessage()    {}
func (*Http1ProtocolOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_d86476e078060b60, []int{2}
}

func (m *Http1ProtocolOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Http1ProtocolOptions.Unmarshal(m, b)
}
func (m *Http1ProtocolOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Http1ProtocolOptions.Marshal(b, m, deterministic)
}
func (m *Http1ProtocolOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Http1ProtocolOptions.Merge(m, src)
}
func (m *Http1ProtocolOptions) XXX_Size() int {
	return xxx_messageInfo_Http1ProtocolOptions.Size(m)
}
func (m *Http1ProtocolOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_Http1ProtocolOptions.DiscardUnknown(m)
}

var xxx_messageInfo_Http1ProtocolOptions proto.InternalMessageInfo

func (m *Http1ProtocolOptions) GetAllowAbsoluteUrl() *wrappers.BoolValue {
	if m != nil {
		return m.AllowAbsoluteUrl
	}
	return nil
}

func (m *Http1ProtocolOptions) GetAcceptHttp_10() bool {
	if m != nil {
		return m.AcceptHttp_10
	}
	return false
}

func (m *Http1ProtocolOptions) GetDefaultHostForHttp_10() string {
	if m != nil {
		return m.DefaultHostForHttp_10
	}
	return ""
}

func (m *Http1ProtocolOptions) GetHeaderKeyFormat() *Http1ProtocolOptions_HeaderKeyFormat {
	if m != nil {
		return m.HeaderKeyFormat
	}
	return nil
}

type Http1ProtocolOptions_HeaderKeyFormat struct {
	// Types that are valid to be assigned to HeaderFormat:
	//	*Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords_
	HeaderFormat         isHttp1ProtocolOptions_HeaderKeyFormat_HeaderFormat `protobuf_oneof:"header_format"`
	XXX_NoUnkeyedLiteral struct{}                                            `json:"-"`
	XXX_unrecognized     []byte                                              `json:"-"`
	XXX_sizecache        int32                                               `json:"-"`
}

func (m *Http1ProtocolOptions_HeaderKeyFormat) Reset()         { *m = Http1ProtocolOptions_HeaderKeyFormat{} }
func (m *Http1ProtocolOptions_HeaderKeyFormat) String() string { return proto.CompactTextString(m) }
func (*Http1ProtocolOptions_HeaderKeyFormat) ProtoMessage()    {}
func (*Http1ProtocolOptions_HeaderKeyFormat) Descriptor() ([]byte, []int) {
	return fileDescriptor_d86476e078060b60, []int{2, 0}
}

func (m *Http1ProtocolOptions_HeaderKeyFormat) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat.Unmarshal(m, b)
}
func (m *Http1ProtocolOptions_HeaderKeyFormat) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat.Marshal(b, m, deterministic)
}
func (m *Http1ProtocolOptions_HeaderKeyFormat) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat.Merge(m, src)
}
func (m *Http1ProtocolOptions_HeaderKeyFormat) XXX_Size() int {
	return xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat.Size(m)
}
func (m *Http1ProtocolOptions_HeaderKeyFormat) XXX_DiscardUnknown() {
	xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat.DiscardUnknown(m)
}

var xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat proto.InternalMessageInfo

type isHttp1ProtocolOptions_HeaderKeyFormat_HeaderFormat interface {
	isHttp1ProtocolOptions_HeaderKeyFormat_HeaderFormat()
}

type Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords_ struct {
	ProperCaseWords *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords `protobuf:"bytes,1,opt,name=proper_case_words,json=properCaseWords,proto3,oneof"`
}

func (*Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords_) isHttp1ProtocolOptions_HeaderKeyFormat_HeaderFormat() {
}

func (m *Http1ProtocolOptions_HeaderKeyFormat) GetHeaderFormat() isHttp1ProtocolOptions_HeaderKeyFormat_HeaderFormat {
	if m != nil {
		return m.HeaderFormat
	}
	return nil
}

func (m *Http1ProtocolOptions_HeaderKeyFormat) GetProperCaseWords() *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords {
	if x, ok := m.GetHeaderFormat().(*Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords_); ok {
		return x.ProperCaseWords
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Http1ProtocolOptions_HeaderKeyFormat) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords_)(nil),
	}
}

type Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) Reset() {
	*m = Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords{}
}
func (m *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) String() string {
	return proto.CompactTextString(m)
}
func (*Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) ProtoMessage() {}
func (*Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) Descriptor() ([]byte, []int) {
	return fileDescriptor_d86476e078060b60, []int{2, 0, 0}
}

func (m *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords.Unmarshal(m, b)
}
func (m *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords.Marshal(b, m, deterministic)
}
func (m *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords.Merge(m, src)
}
func (m *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) XXX_Size() int {
	return xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords.Size(m)
}
func (m *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) XXX_DiscardUnknown() {
	xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords.DiscardUnknown(m)
}

var xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords proto.InternalMessageInfo

// [#next-free-field: 13]
type Http2ProtocolOptions struct {
	// `Maximum table size <https://httpwg.org/specs/rfc7541.html#rfc.section.4.2>`_
	// (in octets) that the encoder is permitted to use for the dynamic HPACK table. Valid values
	// range from 0 to 4294967295 (2^32 - 1) and defaults to 4096. 0 effectively disables header
	// compression.
	HpackTableSize *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=hpack_table_size,json=hpackTableSize,proto3" json:"hpack_table_size,omitempty"`
	// `Maximum concurrent streams <https://httpwg.org/specs/rfc7540.html#rfc.section.5.1.2>`_
	// allowed for peer on one HTTP/2 connection. Valid values range from 1 to 2147483647 (2^31 - 1)
	// and defaults to 2147483647.
	MaxConcurrentStreams *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=max_concurrent_streams,json=maxConcurrentStreams,proto3" json:"max_concurrent_streams,omitempty"`
	// `Initial stream-level flow-control window
	// <https://httpwg.org/specs/rfc7540.html#rfc.section.6.9.2>`_ size. Valid values range from 65535
	// (2^16 - 1, HTTP/2 default) to 2147483647 (2^31 - 1, HTTP/2 maximum) and defaults to 268435456
	// (256 * 1024 * 1024).
	//
	// NOTE: 65535 is the initial window size from HTTP/2 spec. We only support increasing the default
	// window size now, so it's also the minimum.
	//
	// This field also acts as a soft limit on the number of bytes Envoy will buffer per-stream in the
	// HTTP/2 codec buffers. Once the buffer reaches this pointer, watermark callbacks will fire to
	// stop the flow of data to the codec buffers.
	InitialStreamWindowSize *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=initial_stream_window_size,json=initialStreamWindowSize,proto3" json:"initial_stream_window_size,omitempty"`
	// Similar to *initial_stream_window_size*, but for connection-level flow-control
	// window. Currently, this has the same minimum/maximum/default as *initial_stream_window_size*.
	InitialConnectionWindowSize *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=initial_connection_window_size,json=initialConnectionWindowSize,proto3" json:"initial_connection_window_size,omitempty"`
	// Allows proxying Websocket and other upgrades over H2 connect.
	AllowConnect bool `protobuf:"varint,5,opt,name=allow_connect,json=allowConnect,proto3" json:"allow_connect,omitempty"`
	// [#not-implemented-hide:] Hiding until envoy has full metadata support.
	// Still under implementation. DO NOT USE.
	//
	// Allows metadata. See [metadata
	// docs](https://github.com/envoyproxy/envoy/blob/master/source/docs/h2_metadata.md) for more
	// information.
	AllowMetadata bool `protobuf:"varint,6,opt,name=allow_metadata,json=allowMetadata,proto3" json:"allow_metadata,omitempty"`
	// Limit the number of pending outbound downstream frames of all types (frames that are waiting to
	// be written into the socket). Exceeding this limit triggers flood mitigation and connection is
	// terminated. The ``http2.outbound_flood`` stat tracks the number of terminated connections due
	// to flood mitigation. The default limit is 10000.
	// [#comment:TODO: implement same limits for upstream outbound frames as well.]
	MaxOutboundFrames *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=max_outbound_frames,json=maxOutboundFrames,proto3" json:"max_outbound_frames,omitempty"`
	// Limit the number of pending outbound downstream frames of types PING, SETTINGS and RST_STREAM,
	// preventing high memory utilization when receiving continuous stream of these frames. Exceeding
	// this limit triggers flood mitigation and connection is terminated. The
	// ``http2.outbound_control_flood`` stat tracks the number of terminated connections due to flood
	// mitigation. The default limit is 1000.
	// [#comment:TODO: implement same limits for upstream outbound frames as well.]
	MaxOutboundControlFrames *wrappers.UInt32Value `protobuf:"bytes,8,opt,name=max_outbound_control_frames,json=maxOutboundControlFrames,proto3" json:"max_outbound_control_frames,omitempty"`
	// Limit the number of consecutive inbound frames of types HEADERS, CONTINUATION and DATA with an
	// empty payload and no end stream flag. Those frames have no legitimate use and are abusive, but
	// might be a result of a broken HTTP/2 implementation. The `http2.inbound_empty_frames_flood``
	// stat tracks the number of connections terminated due to flood mitigation.
	// Setting this to 0 will terminate connection upon receiving first frame with an empty payload
	// and no end stream flag. The default limit is 1.
	// [#comment:TODO: implement same limits for upstream inbound frames as well.]
	MaxConsecutiveInboundFramesWithEmptyPayload *wrappers.UInt32Value `protobuf:"bytes,9,opt,name=max_consecutive_inbound_frames_with_empty_payload,json=maxConsecutiveInboundFramesWithEmptyPayload,proto3" json:"max_consecutive_inbound_frames_with_empty_payload,omitempty"`
	// Limit the number of inbound PRIORITY frames allowed per each opened stream. If the number
	// of PRIORITY frames received over the lifetime of connection exceeds the value calculated
	// using this formula::
	//
	//     max_inbound_priority_frames_per_stream * (1 + inbound_streams)
	//
	// the connection is terminated. The ``http2.inbound_priority_frames_flood`` stat tracks
	// the number of connections terminated due to flood mitigation. The default limit is 100.
	// [#comment:TODO: implement same limits for upstream inbound frames as well.]
	MaxInboundPriorityFramesPerStream *wrappers.UInt32Value `protobuf:"bytes,10,opt,name=max_inbound_priority_frames_per_stream,json=maxInboundPriorityFramesPerStream,proto3" json:"max_inbound_priority_frames_per_stream,omitempty"`
	// Limit the number of inbound WINDOW_UPDATE frames allowed per DATA frame sent. If the number
	// of WINDOW_UPDATE frames received over the lifetime of connection exceeds the value calculated
	// using this formula::
	//
	//     1 + 2 * (inbound_streams +
	//              max_inbound_window_update_frames_per_data_frame_sent * outbound_data_frames)
	//
	// the connection is terminated. The ``http2.inbound_priority_frames_flood`` stat tracks
	// the number of connections terminated due to flood mitigation. The default limit is 10.
	// Setting this to 1 should be enough to support HTTP/2 implementations with basic flow control,
	// but more complex implementations that try to estimate available bandwidth require at least 2.
	// [#comment:TODO: implement same limits for upstream inbound frames as well.]
	MaxInboundWindowUpdateFramesPerDataFrameSent *wrappers.UInt32Value `protobuf:"bytes,11,opt,name=max_inbound_window_update_frames_per_data_frame_sent,json=maxInboundWindowUpdateFramesPerDataFrameSent,proto3" json:"max_inbound_window_update_frames_per_data_frame_sent,omitempty"`
	// Allows invalid HTTP messaging and headers. When this option is disabled (default), then
	// the whole HTTP/2 connection is terminated upon receiving invalid HEADERS frame. However,
	// when this option is enabled, only the offending stream is terminated.
	//
	// See `RFC7540, sec. 8.1 <https://tools.ietf.org/html/rfc7540#section-8.1>`_ for details.
	StreamErrorOnInvalidHttpMessaging bool     `protobuf:"varint,12,opt,name=stream_error_on_invalid_http_messaging,json=streamErrorOnInvalidHttpMessaging,proto3" json:"stream_error_on_invalid_http_messaging,omitempty"`
	XXX_NoUnkeyedLiteral              struct{} `json:"-"`
	XXX_unrecognized                  []byte   `json:"-"`
	XXX_sizecache                     int32    `json:"-"`
}

func (m *Http2ProtocolOptions) Reset()         { *m = Http2ProtocolOptions{} }
func (m *Http2ProtocolOptions) String() string { return proto.CompactTextString(m) }
func (*Http2ProtocolOptions) ProtoMessage()    {}
func (*Http2ProtocolOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_d86476e078060b60, []int{3}
}

func (m *Http2ProtocolOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Http2ProtocolOptions.Unmarshal(m, b)
}
func (m *Http2ProtocolOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Http2ProtocolOptions.Marshal(b, m, deterministic)
}
func (m *Http2ProtocolOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Http2ProtocolOptions.Merge(m, src)
}
func (m *Http2ProtocolOptions) XXX_Size() int {
	return xxx_messageInfo_Http2ProtocolOptions.Size(m)
}
func (m *Http2ProtocolOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_Http2ProtocolOptions.DiscardUnknown(m)
}

var xxx_messageInfo_Http2ProtocolOptions proto.InternalMessageInfo

func (m *Http2ProtocolOptions) GetHpackTableSize() *wrappers.UInt32Value {
	if m != nil {
		return m.HpackTableSize
	}
	return nil
}

func (m *Http2ProtocolOptions) GetMaxConcurrentStreams() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxConcurrentStreams
	}
	return nil
}

func (m *Http2ProtocolOptions) GetInitialStreamWindowSize() *wrappers.UInt32Value {
	if m != nil {
		return m.InitialStreamWindowSize
	}
	return nil
}

func (m *Http2ProtocolOptions) GetInitialConnectionWindowSize() *wrappers.UInt32Value {
	if m != nil {
		return m.InitialConnectionWindowSize
	}
	return nil
}

func (m *Http2ProtocolOptions) GetAllowConnect() bool {
	if m != nil {
		return m.AllowConnect
	}
	return false
}

func (m *Http2ProtocolOptions) GetAllowMetadata() bool {
	if m != nil {
		return m.AllowMetadata
	}
	return false
}

func (m *Http2ProtocolOptions) GetMaxOutboundFrames() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxOutboundFrames
	}
	return nil
}

func (m *Http2ProtocolOptions) GetMaxOutboundControlFrames() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxOutboundControlFrames
	}
	return nil
}

func (m *Http2ProtocolOptions) GetMaxConsecutiveInboundFramesWithEmptyPayload() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxConsecutiveInboundFramesWithEmptyPayload
	}
	return nil
}

func (m *Http2ProtocolOptions) GetMaxInboundPriorityFramesPerStream() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxInboundPriorityFramesPerStream
	}
	return nil
}

func (m *Http2ProtocolOptions) GetMaxInboundWindowUpdateFramesPerDataFrameSent() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxInboundWindowUpdateFramesPerDataFrameSent
	}
	return nil
}

func (m *Http2ProtocolOptions) GetStreamErrorOnInvalidHttpMessaging() bool {
	if m != nil {
		return m.StreamErrorOnInvalidHttpMessaging
	}
	return false
}

// [#not-implemented-hide:]
type GrpcProtocolOptions struct {
	Http2ProtocolOptions *Http2ProtocolOptions `protobuf:"bytes,1,opt,name=http2_protocol_options,json=http2ProtocolOptions,proto3" json:"http2_protocol_options,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *GrpcProtocolOptions) Reset()         { *m = GrpcProtocolOptions{} }
func (m *GrpcProtocolOptions) String() string { return proto.CompactTextString(m) }
func (*GrpcProtocolOptions) ProtoMessage()    {}
func (*GrpcProtocolOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_d86476e078060b60, []int{4}
}

func (m *GrpcProtocolOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GrpcProtocolOptions.Unmarshal(m, b)
}
func (m *GrpcProtocolOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GrpcProtocolOptions.Marshal(b, m, deterministic)
}
func (m *GrpcProtocolOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GrpcProtocolOptions.Merge(m, src)
}
func (m *GrpcProtocolOptions) XXX_Size() int {
	return xxx_messageInfo_GrpcProtocolOptions.Size(m)
}
func (m *GrpcProtocolOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_GrpcProtocolOptions.DiscardUnknown(m)
}

var xxx_messageInfo_GrpcProtocolOptions proto.InternalMessageInfo

func (m *GrpcProtocolOptions) GetHttp2ProtocolOptions() *Http2ProtocolOptions {
	if m != nil {
		return m.Http2ProtocolOptions
	}
	return nil
}

func init() {
	proto.RegisterType((*TcpProtocolOptions)(nil), "envoy.api.v2.core.TcpProtocolOptions")
	proto.RegisterType((*HttpProtocolOptions)(nil), "envoy.api.v2.core.HttpProtocolOptions")
	proto.RegisterType((*Http1ProtocolOptions)(nil), "envoy.api.v2.core.Http1ProtocolOptions")
	proto.RegisterType((*Http1ProtocolOptions_HeaderKeyFormat)(nil), "envoy.api.v2.core.Http1ProtocolOptions.HeaderKeyFormat")
	proto.RegisterType((*Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords)(nil), "envoy.api.v2.core.Http1ProtocolOptions.HeaderKeyFormat.ProperCaseWords")
	proto.RegisterType((*Http2ProtocolOptions)(nil), "envoy.api.v2.core.Http2ProtocolOptions")
	proto.RegisterType((*GrpcProtocolOptions)(nil), "envoy.api.v2.core.GrpcProtocolOptions")
}

func init() { proto.RegisterFile("envoy/api/v2/core/protocol.proto", fileDescriptor_d86476e078060b60) }

var fileDescriptor_d86476e078060b60 = []byte{
	// 935 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xcd, 0x73, 0x1b, 0x35,
	0x14, 0x67, 0xeb, 0xd0, 0x24, 0xca, 0x87, 0xeb, 0x8d, 0x69, 0x16, 0x97, 0x29, 0xad, 0x81, 0x92,
	0x09, 0xcc, 0xba, 0x71, 0x19, 0xb8, 0x70, 0x61, 0xd3, 0xa6, 0xce, 0x30, 0x9d, 0xb8, 0x9b, 0x84,
	0x9c, 0x18, 0x8d, 0xbc, 0xab, 0xc4, 0xa2, 0xbb, 0x92, 0x46, 0xd2, 0xfa, 0xa3, 0x67, 0x2e, 0x1c,
	0xf9, 0x53, 0xf8, 0x6b, 0xf8, 0x57, 0x20, 0x17, 0x33, 0xfa, 0xd8, 0xd4, 0xb1, 0x0b, 0x38, 0x39,
	0x79, 0xf7, 0xe9, 0xf7, 0xf1, 0x9e, 0xf4, 0xf4, 0xd6, 0xe0, 0x11, 0xa6, 0x03, 0x36, 0x6e, 0x21,
	0x4e, 0x5a, 0x83, 0x76, 0x2b, 0x61, 0x02, 0xb7, 0xb8, 0x60, 0x8a, 0x25, 0x2c, 0x0b, 0xcd, 0x83,
	0x5f, 0x33, 0x88, 0x10, 0x71, 0x12, 0x0e, 0xda, 0xa1, 0x46, 0x34, 0x1e, 0x5e, 0x30, 0x76, 0x91,
	0x39, 0x64, 0xaf, 0x38, 0x6f, 0xa5, 0x85, 0x40, 0x8a, 0x30, 0x6a, 0x29, 0xf3, 0xeb, 0x43, 0x81,
	0x38, 0xc7, 0x42, 0xba, 0xf5, 0xed, 0x01, 0xca, 0x48, 0x8a, 0x14, 0x6e, 0x95, 0x0f, 0x76, 0xa1,
	0x59, 0x07, 0xfe, 0x49, 0xc2, 0xbb, 0x2e, 0x81, 0x23, 0xae, 0x35, 0x65, 0xf3, 0x6f, 0x0f, 0x6c,
	0x75, 0x94, 0x9a, 0x8d, 0xfb, 0xdf, 0x83, 0x75, 0x92, 0x66, 0x18, 0x2a, 0x92, 0x63, 0x56, 0xa8,
	0xc0, 0x7b, 0xe4, 0xed, 0xac, 0xb5, 0x3f, 0x0e, 0xad, 0x7b, 0x58, 0xba, 0x87, 0xcf, 0x5d, 0x76,
	0xf1, 0x9a, 0x86, 0x9f, 0x58, 0xb4, 0xff, 0x1a, 0x6c, 0xe7, 0x68, 0x04, 0x13, 0x46, 0x29, 0x4e,
	0xf4, 0x32, 0x2c, 0xab, 0x08, 0x2a, 0xff, 0x27, 0xf4, 0x51, 0x8e, 0x46, 0xfb, 0x57, 0xc4, 0x32,
	0xec, 0xbf, 0x06, 0x35, 0x2d, 0xd9, 0xc7, 0x28, 0xc5, 0x42, 0xc2, 0x84, 0x15, 0x54, 0x05, 0x77,
	0x8c, 0xd8, 0x27, 0x73, 0x62, 0xa7, 0x87, 0x54, 0x3d, 0x6b, 0xff, 0x84, 0xb2, 0x02, 0x47, 0xcb,
	0x97, 0xd1, 0xd2, 0xee, 0x9d, 0x1d, 0x2f, 0xae, 0xe6, 0x68, 0xd4, 0xb1, 0xf4, 0x7d, 0xcd, 0x6e,
	0xfe, 0x59, 0x01, 0x75, 0x5d, 0xfb, 0xde, 0x6c, 0xf1, 0x1d, 0xe0, 0xa3, 0x2c, 0x63, 0x43, 0x88,
	0x7a, 0x92, 0x65, 0x85, 0xc2, 0xb0, 0x10, 0x99, 0xdb, 0x82, 0xc6, 0x9c, 0x59, 0xc4, 0x58, 0x66,
	0xac, 0xe2, 0x7b, 0x86, 0xf5, 0x83, 0x23, 0x9d, 0x8a, 0xcc, 0xff, 0x1c, 0x6c, 0xa2, 0x24, 0xc1,
	0x5c, 0xc1, 0xbe, 0x52, 0x1c, 0xee, 0x3d, 0x35, 0x29, 0xaf, 0xc4, 0xeb, 0x36, 0x6a, 0xdc, 0x9f,
	0xfa, 0xdf, 0x82, 0x20, 0xc5, 0xe7, 0xa8, 0xc8, 0x14, 0xec, 0x33, 0xa9, 0xe0, 0x39, 0x13, 0x57,
	0x78, 0xbd, 0x5f, 0xab, 0x71, 0xdd, 0xad, 0x77, 0x98, 0x54, 0x07, 0x4c, 0x38, 0x5e, 0x02, 0x6a,
	0x76, 0x3f, 0xe0, 0x1b, 0x3c, 0xd6, 0xac, 0x1c, 0xa9, 0x60, 0xc9, 0xa4, 0xf9, 0x5d, 0x38, 0xd7,
	0x5a, 0xe1, 0xfb, 0x6a, 0x0d, 0xed, 0x8e, 0xfc, 0x88, 0xc7, 0x07, 0x86, 0x1e, 0x57, 0xfb, 0xd7,
	0x03, 0x8d, 0x3f, 0x3c, 0x50, 0x9d, 0x01, 0xf9, 0x05, 0xa8, 0x71, 0xc1, 0x38, 0x16, 0x30, 0x41,
	0x12, 0xc3, 0x21, 0x13, 0xa9, 0x74, 0xfb, 0xf3, 0xf2, 0x96, 0xc6, 0x61, 0xd7, 0x08, 0xee, 0x23,
	0x89, 0xcf, 0xb4, 0x5c, 0xe7, 0x83, 0xb8, 0xca, 0xaf, 0x87, 0x1a, 0x35, 0x50, 0x9d, 0x41, 0x45,
	0x75, 0xb0, 0xe1, 0xb6, 0xc0, 0x96, 0xef, 0x57, 0xfe, 0x8a, 0xbc, 0xe6, 0x6f, 0xab, 0xf6, 0x64,
	0xdb, 0xb3, 0x27, 0x7b, 0x00, 0xee, 0xf5, 0x39, 0x4a, 0xde, 0x40, 0x85, 0x7a, 0x19, 0x86, 0x92,
	0xbc, 0xc5, 0x2e, 0xef, 0xff, 0x6c, 0xa2, 0x78, 0xd3, 0xb0, 0x4e, 0x34, 0xe9, 0x98, 0xbc, 0xc5,
	0x3e, 0x02, 0xf7, 0x5d, 0x83, 0x27, 0x85, 0x10, 0x98, 0x2a, 0x28, 0x95, 0xc0, 0x28, 0x97, 0x0b,
	0xb5, 0xe4, 0xc6, 0x65, 0x04, 0x76, 0x57, 0x82, 0xc9, 0x64, 0x32, 0x59, 0xde, 0xf1, 0xe2, 0xba,
	0xed, 0x78, 0xa7, 0x74, 0x6c, 0x85, 0xfc, 0x5f, 0x40, 0x83, 0x50, 0xa2, 0x08, 0xca, 0x9c, 0x36,
	0x1c, 0x12, 0x9a, 0xb2, 0xa1, 0x4d, 0xba, 0xb2, 0x80, 0x4d, 0xf5, 0x32, 0x5a, 0xdf, 0x05, 0xce,
	0x66, 0x32, 0xa9, 0xc4, 0xdb, 0x4e, 0xd0, 0x5a, 0x9c, 0x19, 0x39, 0x53, 0x8e, 0x00, 0x0f, 0x4b,
	0xaf, 0xa9, 0x3b, 0x3b, 0xed, 0xb7, 0x74, 0x1b, 0xbf, 0x07, 0x4e, 0xf4, 0xdd, 0x75, 0x9e, 0xf2,
	0xfc, 0x0c, 0x6c, 0xd8, 0x4b, 0xe6, 0x1c, 0x83, 0x0f, 0xdd, 0xcd, 0xd0, 0x41, 0xc7, 0xf0, 0xbf,
	0x00, 0x9b, 0x16, 0x94, 0x63, 0x85, 0x52, 0xa4, 0x50, 0x70, 0xd7, 0xa0, 0x2c, 0xf5, 0x95, 0x0b,
	0xfa, 0xa7, 0x60, 0x4b, 0x1f, 0x07, 0x2b, 0x54, 0x8f, 0x15, 0x34, 0x85, 0xe7, 0x02, 0xe5, 0x58,
	0x06, 0xcb, 0x37, 0x19, 0x0f, 0x7a, 0xbc, 0x1c, 0x39, 0x81, 0x03, 0xc3, 0xf7, 0x53, 0xf0, 0xe0,
	0x9a, 0x6c, 0xc2, 0xa8, 0x12, 0x2c, 0x2b, 0xe5, 0x57, 0x6e, 0x22, 0x1f, 0x4c, 0xc9, 0xef, 0x5b,
	0x1d, 0xe7, 0xf2, 0xab, 0x07, 0xf6, 0x5c, 0x33, 0x49, 0x9c, 0x14, 0x8a, 0x0c, 0x30, 0x24, 0x74,
	0xba, 0x10, 0x38, 0x24, 0xaa, 0x0f, 0x71, 0xce, 0xd5, 0x18, 0x72, 0x34, 0xce, 0x18, 0x4a, 0x83,
	0xd5, 0x05, 0xba, 0xf6, 0x2b, 0xdb, 0x58, 0xa5, 0xea, 0x21, 0x9d, 0x2a, 0xee, 0x8c, 0xa8, 0xfe,
	0x0b, 0xad, 0xd8, 0xb5, 0x82, 0x3e, 0x03, 0x4f, 0x74, 0x16, 0xa5, 0x33, 0x17, 0x84, 0x09, 0xa2,
	0xc6, 0x65, 0x0a, 0xfa, 0xb2, 0xdb, 0x3e, 0x0c, 0xc0, 0x02, 0xd6, 0x8f, 0x73, 0x34, 0x72, 0x7e,
	0x5d, 0xa7, 0x64, 0x7d, 0xbb, 0x58, 0xd8, 0xf6, 0xf3, 0x7f, 0xf7, 0xc0, 0x37, 0xd3, 0x8e, 0xae,
	0xdd, 0x0a, 0xae, 0x3f, 0x5a, 0xd3, 0xb6, 0xfa, 0x88, 0xed, 0x3b, 0x94, 0x98, 0xaa, 0x60, 0xed,
	0x26, 0xfb, 0xfe, 0xf5, 0xbb, 0x44, 0x6c, 0xf3, 0x9d, 0x1a, 0xfd, 0xab, 0x64, 0x9e, 0x23, 0x85,
	0xcc, 0xcb, 0x31, 0xa6, 0xfa, 0xc3, 0xf5, 0xc4, 0x5d, 0x36, 0x2c, 0x04, 0x13, 0x90, 0x51, 0x48,
	0xa8, 0xf9, 0x90, 0xda, 0x81, 0x9c, 0x63, 0x29, 0xd1, 0x05, 0xa1, 0x17, 0xc1, 0xba, 0xe9, 0xc3,
	0xc7, 0x16, 0xfd, 0x42, 0x83, 0x8f, 0xe8, 0xa1, 0x85, 0xea, 0xc9, 0xf3, 0xaa, 0x04, 0x36, 0x15,
	0xd8, 0x7a, 0x29, 0x78, 0x32, 0x3b, 0x89, 0x7e, 0x06, 0xf7, 0xb5, 0x62, 0x1b, 0x96, 0x7f, 0x09,
	0x20, 0xb3, 0x2b, 0x6e, 0x1e, 0x7d, 0xf9, 0x2f, 0x73, 0x74, 0x76, 0xa4, 0xc5, 0xf5, 0xfe, 0x7b,
	0xa2, 0x51, 0x1b, 0x7c, 0x4a, 0x98, 0x95, 0xe0, 0x82, 0x8d, 0xc6, 0xf3, 0x6a, 0xd1, 0x46, 0xc9,
	0x31, 0xbf, 0x5d, 0xaf, 0x77, 0xd7, 0xa4, 0xf2, 0xec, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb4,
	0x90, 0xc4, 0x2e, 0xb8, 0x08, 0x00, 0x00,
}
 07070100000068000081A4000003E800000064000000015E17A24700006987000000000000000000000000000000000000003600000000cilium-proxy-20200109/go/envoy/api/v2/discovery.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/discovery.proto

package envoy_api_v2

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	status "google.golang.org/genproto/googleapis/rpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// A DiscoveryRequest requests a set of versioned resources of the same type for
// a given Envoy node on some API.
// [#next-free-field: 7]
type DiscoveryRequest struct {
	// The version_info provided in the request messages will be the version_info
	// received with the most recent successfully processed response or empty on
	// the first request. It is expected that no new request is sent after a
	// response is received until the Envoy instance is ready to ACK/NACK the new
	// configuration. ACK/NACK takes place by returning the new API config version
	// as applied or the previous API config version respectively. Each type_url
	// (see below) has an independent version associated with it.
	VersionInfo string `protobuf:"bytes,1,opt,name=version_info,json=versionInfo,proto3" json:"version_info,omitempty"`
	// The node making the request.
	Node *core.Node `protobuf:"bytes,2,opt,name=node,proto3" json:"node,omitempty"`
	// List of resources to subscribe to, e.g. list of cluster names or a route
	// configuration name. If this is empty, all resources for the API are
	// returned. LDS/CDS may have empty resource_names, which will cause all
	// resources for the Envoy instance to be returned. The LDS and CDS responses
	// will then imply a number of resources that need to be fetched via EDS/RDS,
	// which will be explicitly enumerated in resource_names.
	ResourceNames []string `protobuf:"bytes,3,rep,name=resource_names,json=resourceNames,proto3" json:"resource_names,omitempty"`
	// Type of the resource that is being requested, e.g.
	// "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment". This is implicit
	// in requests made via singleton xDS APIs such as CDS, LDS, etc. but is
	// required for ADS.
	TypeUrl string `protobuf:"bytes,4,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"`
	// nonce corresponding to DiscoveryResponse being ACK/NACKed. See above
	// discussion on version_info and the DiscoveryResponse nonce comment. This
	// may be empty only if 1) this is a non-persistent-stream xDS such as HTTP,
	// or 2) the client has not yet accepted an update in this xDS stream (unlike
	// delta, where it is populated only for new explicit ACKs).
	ResponseNonce string `protobuf:"bytes,5,opt,name=response_nonce,json=responseNonce,proto3" json:"response_nonce,omitempty"`
	// This is populated when the previous :ref:`DiscoveryResponse <envoy_api_msg_DiscoveryResponse>`
	// failed to update configuration. The *message* field in *error_details* provides the Envoy
	// internal exception related to the failure. It is only intended for consumption during manual
	// debugging, the string provided is not guaranteed to be stable across Envoy versions.
	ErrorDetail          *status.Status `protobuf:"bytes,6,opt,name=error_detail,json=errorDetail,proto3" json:"error_detail,omitempty"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

func (m *DiscoveryRequest) Reset()         { *m = DiscoveryRequest{} }
func (m *DiscoveryRequest) String() string { return proto.CompactTextString(m) }
func (*DiscoveryRequest) ProtoMessage()    {}
func (*DiscoveryRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_2c7365e287e5c035, []int{0}
}

func (m *DiscoveryRequest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DiscoveryRequest.Unmarshal(m, b)
}
func (m *DiscoveryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DiscoveryRequest.Marshal(b, m, deterministic)
}
func (m *DiscoveryRequest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DiscoveryRequest.Merge(m, src)
}
func (m *DiscoveryRequest) XXX_Size() int {
	return xxx_messageInfo_DiscoveryRequest.Size(m)
}
func (m *DiscoveryRequest) XXX_DiscardUnknown() {
	xxx_messageInfo_DiscoveryRequest.DiscardUnknown(m)
}

var xxx_messageInfo_DiscoveryRequest proto.InternalMessageInfo

func (m *DiscoveryRequest) GetVersionInfo() string {
	if m != nil {
		return m.VersionInfo
	}
	return ""
}

func (m *DiscoveryRequest) GetNode() *core.Node {
	if m != nil {
		return m.Node
	}
	return nil
}

func (m *DiscoveryRequest) GetResourceNames() []string {
	if m != nil {
		return m.ResourceNames
	}
	return nil
}

func (m *DiscoveryRequest) GetTypeUrl() string {
	if m != nil {
		return m.TypeUrl
	}
	return ""
}

func (m *DiscoveryRequest) GetResponseNonce() string {
	if m != nil {
		return m.ResponseNonce
	}
	return ""
}

func (m *DiscoveryRequest) GetErrorDetail() *status.Status {
	if m != nil {
		return m.ErrorDetail
	}
	return nil
}

// [#next-free-field: 7]
type DiscoveryResponse struct {
	// The version of the response data.
	VersionInfo string `protobuf:"bytes,1,opt,name=version_info,json=versionInfo,proto3" json:"version_info,omitempty"`
	// The response resources. These resources are typed and depend on the API being called.
	Resources []*any.Any `protobuf:"bytes,2,rep,name=resources,proto3" json:"resources,omitempty"`
	// [#not-implemented-hide:]
	// Canary is used to support two Envoy command line flags:
	//
	// * --terminate-on-canary-transition-failure. When set, Envoy is able to
	//   terminate if it detects that configuration is stuck at canary. Consider
	//   this example sequence of updates:
	//   - Management server applies a canary config successfully.
	//   - Management server rolls back to a production config.
	//   - Envoy rejects the new production config.
	//   Since there is no sensible way to continue receiving configuration
	//   updates, Envoy will then terminate and apply production config from a
	//   clean slate.
	// * --dry-run-canary. When set, a canary response will never be applied, only
	//   validated via a dry run.
	Canary bool `protobuf:"varint,3,opt,name=canary,proto3" json:"canary,omitempty"`
	// Type URL for resources. Identifies the xDS API when muxing over ADS.
	// Must be consistent with the type_url in the 'resources' repeated Any (if non-empty).
	TypeUrl string `protobuf:"bytes,4,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"`
	// For gRPC based subscriptions, the nonce provides a way to explicitly ack a
	// specific DiscoveryResponse in a following DiscoveryRequest. Additional
	// messages may have been sent by Envoy to the management server for the
	// previous version on the stream prior to this DiscoveryResponse, that were
	// unprocessed at response send time. The nonce allows the management server
	// to ignore any further DiscoveryRequests for the previous version until a
	// DiscoveryRequest bearing the nonce. The nonce is optional and is not
	// required for non-stream based xDS implementations.
	Nonce string `protobuf:"bytes,5,opt,name=nonce,proto3" json:"nonce,omitempty"`
	// [#not-implemented-hide:]
	// The control plane instance that sent the response.
	ControlPlane         *core.ControlPlane `protobuf:"bytes,6,opt,name=control_plane,json=controlPlane,proto3" json:"control_plane,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *DiscoveryResponse) Reset()         { *m = DiscoveryResponse{} }
func (m *DiscoveryResponse) String() string { return proto.CompactTextString(m) }
func (*DiscoveryResponse) ProtoMessage()    {}
func (*DiscoveryResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_2c7365e287e5c035, []int{1}
}

func (m *DiscoveryResponse) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DiscoveryResponse.Unmarshal(m, b)
}
func (m *DiscoveryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DiscoveryResponse.Marshal(b, m, deterministic)
}
func (m *DiscoveryResponse) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DiscoveryResponse.Merge(m, src)
}
func (m *DiscoveryResponse) XXX_Size() int {
	return xxx_messageInfo_DiscoveryResponse.Size(m)
}
func (m *DiscoveryResponse) XXX_DiscardUnknown() {
	xxx_messageInfo_DiscoveryResponse.DiscardUnknown(m)
}

var xxx_messageInfo_DiscoveryResponse proto.InternalMessageInfo

func (m *DiscoveryResponse) GetVersionInfo() string {
	if m != nil {
		return m.VersionInfo
	}
	return ""
}

func (m *DiscoveryResponse) GetResources() []*any.Any {
	if m != nil {
		return m.Resources
	}
	return nil
}

func (m *DiscoveryResponse) GetCanary() bool {
	if m != nil {
		return m.Canary
	}
	return false
}

func (m *DiscoveryResponse) GetTypeUrl() string {
	if m != nil {
		return m.TypeUrl
	}
	return ""
}

func (m *DiscoveryResponse) GetNonce() string {
	if m != nil {
		return m.Nonce
	}
	return ""
}

func (m *DiscoveryResponse) GetControlPlane() *core.ControlPlane {
	if m != nil {
		return m.ControlPlane
	}
	return nil
}

// DeltaDiscoveryRequest and DeltaDiscoveryResponse are used in a new gRPC
// endpoint for Delta xDS.
//
// With Delta xDS, the DeltaDiscoveryResponses do not need to include a full
// snapshot of the tracked resources. Instead, DeltaDiscoveryResponses are a
// diff to the state of a xDS client.
// In Delta XDS there are per-resource versions, which allow tracking state at
// the resource granularity.
// An xDS Delta session is always in the context of a gRPC bidirectional
// stream. This allows the xDS server to keep track of the state of xDS clients
// connected to it.
//
// In Delta xDS the nonce field is required and used to pair
// DeltaDiscoveryResponse to a DeltaDiscoveryRequest ACK or NACK.
// Optionally, a response message level system_version_info is present for
// debugging purposes only.
//
// DeltaDiscoveryRequest plays two independent roles. Any DeltaDiscoveryRequest
// can be either or both of: [1] informing the server of what resources the
// client has gained/lost interest in (using resource_names_subscribe and
// resource_names_unsubscribe), or [2] (N)ACKing an earlier resource update from
// the server (using response_nonce, with presence of error_detail making it a NACK).
// Additionally, the first message (for a given type_url) of a reconnected gRPC stream
// has a third role: informing the server of the resources (and their versions)
// that the client already possesses, using the initial_resource_versions field.
//
// As with state-of-the-world, when multiple resource types are multiplexed (ADS),
// all requests/acknowledgments/updates are logically walled off by type_url:
// a Cluster ACK exists in a completely separate world from a prior Route NACK.
// In particular, initial_resource_versions being sent at the "start" of every
// gRPC stream actually entails a message for each type_url, each with its own
// initial_resource_versions.
// [#next-free-field: 8]
type DeltaDiscoveryRequest struct {
	// The node making the request.
	Node *core.Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"`
	// Type of the resource that is being requested, e.g.
	// "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment".
	TypeUrl string `protobuf:"bytes,2,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"`
	// DeltaDiscoveryRequests allow the client to add or remove individual
	// resources to the set of tracked resources in the context of a stream.
	// All resource names in the resource_names_subscribe list are added to the
	// set of tracked resources and all resource names in the resource_names_unsubscribe
	// list are removed from the set of tracked resources.
	//
	// *Unlike* state-of-the-world xDS, an empty resource_names_subscribe or
	// resource_names_unsubscribe list simply means that no resources are to be
	// added or removed to the resource list.
	// *Like* state-of-the-world xDS, the server must send updates for all tracked
	// resources, but can also send updates for resources the client has not subscribed to.
	//
	// NOTE: the server must respond with all resources listed in resource_names_subscribe,
	// even if it believes the client has the most recent version of them. The reason:
	// the client may have dropped them, but then regained interest before it had a chance
	// to send the unsubscribe message. See DeltaSubscriptionStateTest.RemoveThenAdd.
	//
	// These two fields can be set in any DeltaDiscoveryRequest, including ACKs
	// and initial_resource_versions.
	//
	// A list of Resource names to add to the list of tracked resources.
	ResourceNamesSubscribe []string `protobuf:"bytes,3,rep,name=resource_names_subscribe,json=resourceNamesSubscribe,proto3" json:"resource_names_subscribe,omitempty"`
	// A list of Resource names to remove from the list of tracked resources.
	ResourceNamesUnsubscribe []string `protobuf:"bytes,4,rep,name=resource_names_unsubscribe,json=resourceNamesUnsubscribe,proto3" json:"resource_names_unsubscribe,omitempty"`
	// Informs the server of the versions of the resources the xDS client knows of, to enable the
	// client to continue the same logical xDS session even in the face of gRPC stream reconnection.
	// It will not be populated: [1] in the very first stream of a session, since the client will
	// not yet have any resources,  [2] in any message after the first in a stream (for a given
	// type_url), since the server will already be correctly tracking the client's state.
	// (In ADS, the first message *of each type_url* of a reconnected stream populates this map.)
	// The map's keys are names of xDS resources known to the xDS client.
	// The map's values are opaque resource versions.
	InitialResourceVersions map[string]string `protobuf:"bytes,5,rep,name=initial_resource_versions,json=initialResourceVersions,proto3" json:"initial_resource_versions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// When the DeltaDiscoveryRequest is a ACK or NACK message in response
	// to a previous DeltaDiscoveryResponse, the response_nonce must be the
	// nonce in the DeltaDiscoveryResponse.
	// Otherwise (unlike in DiscoveryRequest) response_nonce must be omitted.
	ResponseNonce string `protobuf:"bytes,6,opt,name=response_nonce,json=responseNonce,proto3" json:"response_nonce,omitempty"`
	// This is populated when the previous :ref:`DiscoveryResponse <envoy_api_msg_DiscoveryResponse>`
	// failed to update configuration. The *message* field in *error_details*
	// provides the Envoy internal exception related to the failure.
	ErrorDetail          *status.Status `protobuf:"bytes,7,opt,name=error_detail,json=errorDetail,proto3" json:"error_detail,omitempty"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

func (m *DeltaDiscoveryRequest) Reset()         { *m = DeltaDiscoveryRequest{} }
func (m *DeltaDiscoveryRequest) String() string { return proto.CompactTextString(m) }
func (*DeltaDiscoveryRequest) ProtoMessage()    {}
func (*DeltaDiscoveryRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_2c7365e287e5c035, []int{2}
}

func (m *DeltaDiscoveryRequest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DeltaDiscoveryRequest.Unmarshal(m, b)
}
func (m *DeltaDiscoveryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DeltaDiscoveryRequest.Marshal(b, m, deterministic)
}
func (m *DeltaDiscoveryRequest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DeltaDiscoveryRequest.Merge(m, src)
}
func (m *DeltaDiscoveryRequest) XXX_Size() int {
	return xxx_messageInfo_DeltaDiscoveryRequest.Size(m)
}
func (m *DeltaDiscoveryRequest) XXX_DiscardUnknown() {
	xxx_messageInfo_DeltaDiscoveryRequest.DiscardUnknown(m)
}

var xxx_messageInfo_DeltaDiscoveryRequest proto.InternalMessageInfo

func (m *DeltaDiscoveryRequest) GetNode() *core.Node {
	if m != nil {
		return m.Node
	}
	return nil
}

func (m *DeltaDiscoveryRequest) GetTypeUrl() string {
	if m != nil {
		return m.TypeUrl
	}
	return ""
}

func (m *DeltaDiscoveryRequest) GetResourceNamesSubscribe() []string {
	if m != nil {
		return m.ResourceNamesSubscribe
	}
	return nil
}

func (m *DeltaDiscoveryRequest) GetResourceNamesUnsubscribe() []string {
	if m != nil {
		return m.ResourceNamesUnsubscribe
	}
	return nil
}

func (m *DeltaDiscoveryRequest) GetInitialResourceVersions() map[string]string {
	if m != nil {
		return m.InitialResourceVersions
	}
	return nil
}

func (m *DeltaDiscoveryRequest) GetResponseNonce() string {
	if m != nil {
		return m.ResponseNonce
	}
	return ""
}

func (m *DeltaDiscoveryRequest) GetErrorDetail() *status.Status {
	if m != nil {
		return m.ErrorDetail
	}
	return nil
}

// [#next-free-field: 7]
type DeltaDiscoveryResponse struct {
	// The version of the response data (used for debugging).
	SystemVersionInfo string `protobuf:"bytes,1,opt,name=system_version_info,json=systemVersionInfo,proto3" json:"system_version_info,omitempty"`
	// The response resources. These are typed resources, whose types must match
	// the type_url field.
	Resources []*Resource `protobuf:"bytes,2,rep,name=resources,proto3" json:"resources,omitempty"`
	// Type URL for resources. Identifies the xDS API when muxing over ADS.
	// Must be consistent with the type_url in the Any within 'resources' if 'resources' is non-empty.
	TypeUrl string `protobuf:"bytes,4,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"`
	// Resources names of resources that have be deleted and to be removed from the xDS Client.
	// Removed resources for missing resources can be ignored.
	RemovedResources []string `protobuf:"bytes,6,rep,name=removed_resources,json=removedResources,proto3" json:"removed_resources,omitempty"`
	// The nonce provides a way for DeltaDiscoveryRequests to uniquely
	// reference a DeltaDiscoveryResponse when (N)ACKing. The nonce is required.
	Nonce                string   `protobuf:"bytes,5,opt,name=nonce,proto3" json:"nonce,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *DeltaDiscoveryResponse) Reset()         { *m = DeltaDiscoveryResponse{} }
func (m *DeltaDiscoveryResponse) String() string { return proto.CompactTextString(m) }
func (*DeltaDiscoveryResponse) ProtoMessage()    {}
func (*DeltaDiscoveryResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_2c7365e287e5c035, []int{3}
}

func (m *DeltaDiscoveryResponse) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DeltaDiscoveryResponse.Unmarshal(m, b)
}
func (m *DeltaDiscoveryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DeltaDiscoveryResponse.Marshal(b, m, deterministic)
}
func (m *DeltaDiscoveryResponse) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DeltaDiscoveryResponse.Merge(m, src)
}
func (m *DeltaDiscoveryResponse) XXX_Size() int {
	return xxx_messageInfo_DeltaDiscoveryResponse.Size(m)
}
func (m *DeltaDiscoveryResponse) XXX_DiscardUnknown() {
	xxx_messageInfo_DeltaDiscoveryResponse.DiscardUnknown(m)
}

var xxx_messageInfo_DeltaDiscoveryResponse proto.InternalMessageInfo

func (m *DeltaDiscoveryResponse) GetSystemVersionInfo() string {
	if m != nil {
		return m.SystemVersionInfo
	}
	return ""
}

func (m *DeltaDiscoveryResponse) GetResources() []*Resource {
	if m != nil {
		return m.Resources
	}
	return nil
}

func (m *DeltaDiscoveryResponse) GetTypeUrl() string {
	if m != nil {
		return m.TypeUrl
	}
	return ""
}

func (m *DeltaDiscoveryResponse) GetRemovedResources() []string {
	if m != nil {
		return m.RemovedResources
	}
	return nil
}

func (m *DeltaDiscoveryResponse) GetNonce() string {
	if m != nil {
		return m.Nonce
	}
	return ""
}

type Resource struct {
	// The resource's name, to distinguish it from others of the same type of resource.
	Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
	// [#not-implemented-hide:]
	// The aliases are a list of other names that this resource can go by.
	Aliases []string `protobuf:"bytes,4,rep,name=aliases,proto3" json:"aliases,omitempty"`
	// The resource level version. It allows xDS to track the state of individual
	// resources.
	Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
	// The resource being tracked.
	Resource             *any.Any `protobuf:"bytes,2,opt,name=resource,proto3" json:"resource,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Resource) Reset()         { *m = Resource{} }
func (m *Resource) String() string { return proto.CompactTextString(m) }
func (*Resource) ProtoMessage()    {}
func (*Resource) Descriptor() ([]byte, []int) {
	return fileDescriptor_2c7365e287e5c035, []int{4}
}

func (m *Resource) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Resource.Unmarshal(m, b)
}
func (m *Resource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Resource.Marshal(b, m, deterministic)
}
func (m *Resource) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Resource.Merge(m, src)
}
func (m *Resource) XXX_Size() int {
	return xxx_messageInfo_Resource.Size(m)
}
func (m *Resource) XXX_DiscardUnknown() {
	xxx_messageInfo_Resource.DiscardUnknown(m)
}

var xxx_messageInfo_Resource proto.InternalMessageInfo

func (m *Resource) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Resource) GetAliases() []string {
	if m != nil {
		return m.Aliases
	}
	return nil
}

func (m *Resource) GetVersion() string {
	if m != nil {
		return m.Version
	}
	return ""
}

func (m *Resource) GetResource() *any.Any {
	if m != nil {
		return m.Resource
	}
	return nil
}

func init() {
	proto.RegisterType((*DiscoveryRequest)(nil), "envoy.api.v2.DiscoveryRequest")
	proto.RegisterType((*DiscoveryResponse)(nil), "envoy.api.v2.DiscoveryResponse")
	proto.RegisterType((*DeltaDiscoveryRequest)(nil), "envoy.api.v2.DeltaDiscoveryRequest")
	proto.RegisterMapType((map[string]string)(nil), "envoy.api.v2.DeltaDiscoveryRequest.InitialResourceVersionsEntry")
	proto.RegisterType((*DeltaDiscoveryResponse)(nil), "envoy.api.v2.DeltaDiscoveryResponse")
	proto.RegisterType((*Resource)(nil), "envoy.api.v2.Resource")
}

func init() { proto.RegisterFile("envoy/api/v2/discovery.proto", fileDescriptor_2c7365e287e5c035) }

var fileDescriptor_2c7365e287e5c035 = []byte{
	// 653 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xc1, 0x6a, 0xdb, 0x40,
	0x10, 0x45, 0xb6, 0xe3, 0xd8, 0x63, 0x27, 0x24, 0xdb, 0xd4, 0x51, 0x4c, 0xa0, 0xae, 0xa1, 0x60,
	0x08, 0xc8, 0xc5, 0x6d, 0x21, 0x94, 0x1e, 0xda, 0xd4, 0x3d, 0xa4, 0x87, 0x10, 0x14, 0x92, 0xab,
	0x58, 0xcb, 0x93, 0x20, 0xaa, 0xec, 0xaa, 0xbb, 0x92, 0xa8, 0xa0, 0xa7, 0xd2, 0xcf, 0xec, 0x8f,
	0xf4, 0xd4, 0xa2, 0xd5, 0xae, 0x2d, 0x25, 0x22, 0xf8, 0xa6, 0xd9, 0x79, 0xfb, 0x76, 0xde, 0xcc,
	0x1b, 0xc1, 0x31, 0xb2, 0x94, 0x67, 0x53, 0x1a, 0x05, 0xd3, 0x74, 0x36, 0x5d, 0x06, 0xd2, 0xe7,
	0x29, 0x8a, 0xcc, 0x89, 0x04, 0x8f, 0x39, 0xe9, 0xab, 0xac, 0x43, 0xa3, 0xc0, 0x49, 0x67, 0xc3,
	0x2a, 0xd6, 0xe7, 0x02, 0xa7, 0x0b, 0x2a, 0xb1, 0xc0, 0x0e, 0x8f, 0xee, 0x38, 0xbf, 0x0b, 0x71,
	0xaa, 0xa2, 0x45, 0x72, 0x3b, 0xa5, 0x4c, 0xd3, 0x0c, 0x0f, 0x75, 0x4a, 0x44, 0xfe, 0x54, 0xc6,
	0x34, 0x4e, 0x64, 0x91, 0x18, 0xff, 0x6a, 0xc0, 0xde, 0xdc, 0xbc, 0xe9, 0xe2, 0xf7, 0x04, 0x65,
	0x4c, 0x5e, 0x42, 0x3f, 0x45, 0x21, 0x03, 0xce, 0xbc, 0x80, 0xdd, 0x72, 0xdb, 0x1a, 0x59, 0x93,
	0xae, 0xdb, 0xd3, 0x67, 0xe7, 0xec, 0x96, 0x93, 0x13, 0x68, 0x31, 0xbe, 0x44, 0xbb, 0x31, 0xb2,
	0x26, 0xbd, 0xd9, 0xa1, 0x53, 0x2e, 0xd3, 0xc9, 0x0b, 0x73, 0x2e, 0xf8, 0x12, 0x5d, 0x05, 0x22,
	0xaf, 0x60, 0x57, 0xa0, 0xe4, 0x89, 0xf0, 0xd1, 0x63, 0xf4, 0x1e, 0xa5, 0xdd, 0x1c, 0x35, 0x27,
	0x5d, 0x77, 0xc7, 0x9c, 0x5e, 0xe4, 0x87, 0xe4, 0x08, 0x3a, 0x71, 0x16, 0xa1, 0x97, 0x88, 0xd0,
	0x6e, 0xa9, 0x27, 0xb7, 0xf3, 0xf8, 0x5a, 0x84, 0x9a, 0x21, 0xe2, 0x4c, 0xa2, 0xc7, 0x38, 0xf3,
	0xd1, 0xde, 0x52, 0x80, 0x1d, 0x73, 0x7a, 0x91, 0x1f, 0x92, 0x77, 0xd0, 0x47, 0x21, 0xb8, 0xf0,
	0x96, 0x18, 0xd3, 0x20, 0xb4, 0xdb, 0xaa, 0x3a, 0xe2, 0x14, 0xea, 0x1d, 0x11, 0xf9, 0xce, 0x95,
	0x52, 0xef, 0xf6, 0x14, 0x6e, 0xae, 0x60, 0xe3, 0xbf, 0x16, 0xec, 0x97, 0x9a, 0x50, 0x30, 0x6e,
	0xd2, 0x85, 0x19, 0x74, 0x8d, 0x04, 0x69, 0x37, 0x46, 0xcd, 0x49, 0x6f, 0x76, 0x60, 0x1e, 0x33,
	0x53, 0x70, 0x3e, 0xb1, 0xcc, 0x5d, 0xc3, 0xc8, 0x00, 0xda, 0x3e, 0x65, 0x54, 0x64, 0x76, 0x73,
	0x64, 0x4d, 0x3a, 0xae, 0x8e, 0x9e, 0x52, 0x7f, 0x00, 0x5b, 0x65, 0xd1, 0x45, 0x40, 0xe6, 0xb0,
	0xe3, 0x73, 0x16, 0x0b, 0x1e, 0x7a, 0x51, 0x48, 0x19, 0x6a, 0xb5, 0x2f, 0x6a, 0x66, 0xf1, 0xb9,
	0xc0, 0x5d, 0xe6, 0x30, 0xb7, 0xef, 0x97, 0xa2, 0xf1, 0xbf, 0x26, 0x3c, 0x9f, 0x63, 0x18, 0xd3,
	0x47, 0x2e, 0x30, 0x23, 0xb6, 0x36, 0x19, 0x71, 0xb9, 0xfa, 0x46, 0xb5, 0xfa, 0x53, 0xb0, 0xab,
	0xd3, 0xf7, 0x64, 0xb2, 0x90, 0xbe, 0x08, 0x16, 0xa8, 0x7d, 0x30, 0xa8, 0xf8, 0xe0, 0xca, 0x64,
	0xc9, 0x07, 0x18, 0x3e, 0xb8, 0x99, 0xb0, 0xf5, 0xdd, 0x96, 0xba, 0x6b, 0x57, 0xee, 0x5e, 0xaf,
	0xf3, 0xe4, 0x27, 0x1c, 0x05, 0x2c, 0x88, 0x03, 0x1a, 0x7a, 0x2b, 0x16, 0x3d, 0x3c, 0x69, 0x6f,
	0xa9, 0x61, 0x7d, 0xac, 0x8a, 0xaa, 0xed, 0x83, 0x73, 0x5e, 0x90, 0xb8, 0x9a, 0xe3, 0x46, 0x53,
	0x7c, 0x61, 0xb1, 0xc8, 0xdc, 0xc3, 0xa0, 0x3e, 0x5b, 0xe3, 0xd8, 0xf6, 0x26, 0x8e, 0xdd, 0xde,
	0xc8, 0xb1, 0xc3, 0xaf, 0x70, 0xfc, 0x54, 0x59, 0x64, 0x0f, 0x9a, 0xdf, 0x30, 0xd3, 0x96, 0xcd,
	0x3f, 0x73, 0x0f, 0xa5, 0x34, 0x4c, 0x50, 0x4f, 0xa7, 0x08, 0xde, 0x37, 0x4e, 0xad, 0xf1, 0x1f,
	0x0b, 0x06, 0x0f, 0x95, 0xeb, 0x15, 0x70, 0xe0, 0x99, 0xcc, 0x64, 0x8c, 0xf7, 0x5e, 0xcd, 0x26,
	0xec, 0x17, 0xa9, 0x9b, 0xd2, 0x3e, 0xbc, 0x7d, 0xbc, 0x0f, 0x83, 0x6a, 0x8b, 0x4d, 0xb9, 0xe5,
	0x8d, 0x78, 0xc2, 0xf9, 0x27, 0xb0, 0x2f, 0xf0, 0x9e, 0xa7, 0xb8, 0xf4, 0xd6, 0xc4, 0x6d, 0x35,
	0xf8, 0x3d, 0x9d, 0x70, 0x57, 0x3c, 0xb5, 0x6b, 0x32, 0xfe, 0x6d, 0x41, 0xc7, 0x60, 0x08, 0x81,
	0x56, 0x6e, 0x24, 0xb5, 0x7a, 0x5d, 0x57, 0x7d, 0x13, 0x1b, 0xb6, 0x69, 0x18, 0x50, 0x89, 0x52,
	0x5b, 0xca, 0x84, 0x79, 0x46, 0xeb, 0xd6, 0x92, 0x4d, 0x48, 0x5e, 0x43, 0xc7, 0xd4, 0xa3, 0x7f,
	0x81, 0xf5, 0x7b, 0xbf, 0x42, 0x9d, 0x39, 0x30, 0x0c, 0x78, 0xd1, 0x8b, 0x48, 0xf0, 0x1f, 0x59,
	0xa5, 0x2d, 0x67, 0xbb, 0xab, 0xde, 0x5f, 0xe6, 0xd7, 0x2f, 0xad, 0x45, 0x5b, 0xf1, 0xbc, 0xf9,
	0x1f, 0x00, 0x00, 0xff, 0xff, 0x97, 0x59, 0x36, 0x09, 0x1f, 0x06, 0x00, 0x00,
}
 07070100000069000081A4000003E800000064000000015E17A247000060EA000000000000000000000000000000000000003000000000cilium-proxy-20200109/go/envoy/api/v2/eds.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/eds.proto

package envoy_api_v2

import (
	context "context"
	fmt "fmt"
	endpoint "github.com/cilium/proxy/go/envoy/api/v2/endpoint"
	_type "github.com/cilium/proxy/go/envoy/type"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Each route from RDS will map to a single cluster or traffic split across
// clusters using weights expressed in the RDS WeightedCluster.
//
// With EDS, each cluster is treated independently from a LB perspective, with
// LB taking place between the Localities within a cluster and at a finer
// granularity between the hosts within a locality. The percentage of traffic
// for each endpoint is determined by both its load_balancing_weight, and the
// load_balancing_weight of its locality. First, a locality will be selected,
// then an endpoint within that locality will be chose based on its weight.
// [#next-free-field: 6]
type ClusterLoadAssignment struct {
	// Name of the cluster. This will be the :ref:`service_name
	// <envoy_api_field_Cluster.EdsClusterConfig.service_name>` value if specified
	// in the cluster :ref:`EdsClusterConfig
	// <envoy_api_msg_Cluster.EdsClusterConfig>`.
	ClusterName string `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"`
	// List of endpoints to load balance to.
	Endpoints []*endpoint.LocalityLbEndpoints `protobuf:"bytes,2,rep,name=endpoints,proto3" json:"endpoints,omitempty"`
	// Map of named endpoints that can be referenced in LocalityLbEndpoints.
	NamedEndpoints map[string]*endpoint.Endpoint `protobuf:"bytes,5,rep,name=named_endpoints,json=namedEndpoints,proto3" json:"named_endpoints,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Load balancing policy settings.
	Policy               *ClusterLoadAssignment_Policy `protobuf:"bytes,4,opt,name=policy,proto3" json:"policy,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
	XXX_unrecognized     []byte                        `json:"-"`
	XXX_sizecache        int32                         `json:"-"`
}

func (m *ClusterLoadAssignment) Reset()         { *m = ClusterLoadAssignment{} }
func (m *ClusterLoadAssignment) String() string { return proto.CompactTextString(m) }
func (*ClusterLoadAssignment) ProtoMessage()    {}
func (*ClusterLoadAssignment) Descriptor() ([]byte, []int) {
	return fileDescriptor_3c8760f38742c17f, []int{0}
}

func (m *ClusterLoadAssignment) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClusterLoadAssignment.Unmarshal(m, b)
}
func (m *ClusterLoadAssignment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClusterLoadAssignment.Marshal(b, m, deterministic)
}
func (m *ClusterLoadAssignment) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClusterLoadAssignment.Merge(m, src)
}
func (m *ClusterLoadAssignment) XXX_Size() int {
	return xxx_messageInfo_ClusterLoadAssignment.Size(m)
}
func (m *ClusterLoadAssignment) XXX_DiscardUnknown() {
	xxx_messageInfo_ClusterLoadAssignment.DiscardUnknown(m)
}

var xxx_messageInfo_ClusterLoadAssignment proto.InternalMessageInfo

func (m *ClusterLoadAssignment) GetClusterName() string {
	if m != nil {
		return m.ClusterName
	}
	return ""
}

func (m *ClusterLoadAssignment) GetEndpoints() []*endpoint.LocalityLbEndpoints {
	if m != nil {
		return m.Endpoints
	}
	return nil
}

func (m *ClusterLoadAssignment) GetNamedEndpoints() map[string]*endpoint.Endpoint {
	if m != nil {
		return m.NamedEndpoints
	}
	return nil
}

func (m *ClusterLoadAssignment) GetPolicy() *ClusterLoadAssignment_Policy {
	if m != nil {
		return m.Policy
	}
	return nil
}

// Load balancing policy settings.
// [#next-free-field: 6]
type ClusterLoadAssignment_Policy struct {
	// Action to trim the overall incoming traffic to protect the upstream
	// hosts. This action allows protection in case the hosts are unable to
	// recover from an outage, or unable to autoscale or unable to handle
	// incoming traffic volume for any reason.
	//
	// At the client each category is applied one after the other to generate
	// the 'actual' drop percentage on all outgoing traffic. For example:
	//
	// .. code-block:: json
	//
	//  { "drop_overloads": [
	//      { "category": "throttle", "drop_percentage": 60 }
	//      { "category": "lb", "drop_percentage": 50 }
	//  ]}
	//
	// The actual drop percentages applied to the traffic at the clients will be
	//    "throttle"_drop = 60%
	//    "lb"_drop = 20%  // 50% of the remaining 'actual' load, which is 40%.
	//    actual_outgoing_load = 20% // remaining after applying all categories.
	DropOverloads []*ClusterLoadAssignment_Policy_DropOverload `protobuf:"bytes,2,rep,name=drop_overloads,json=dropOverloads,proto3" json:"drop_overloads,omitempty"`
	// Priority levels and localities are considered overprovisioned with this
	// factor (in percentage). This means that we don't consider a priority
	// level or locality unhealthy until the percentage of healthy hosts
	// multiplied by the overprovisioning factor drops below 100.
	// With the default value 140(1.4), Envoy doesn't consider a priority level
	// or a locality unhealthy until their percentage of healthy hosts drops
	// below 72%. For example:
	//
	// .. code-block:: json
	//
	//  { "overprovisioning_factor": 100 }
	//
	// Read more at :ref:`priority levels <arch_overview_load_balancing_priority_levels>` and
	// :ref:`localities <arch_overview_load_balancing_locality_weighted_lb>`.
	OverprovisioningFactor *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=overprovisioning_factor,json=overprovisioningFactor,proto3" json:"overprovisioning_factor,omitempty"`
	// The max time until which the endpoints from this assignment can be used.
	// If no new assignments are received before this time expires the endpoints
	// are considered stale and should be marked unhealthy.
	// Defaults to 0 which means endpoints never go stale.
	EndpointStaleAfter *duration.Duration `protobuf:"bytes,4,opt,name=endpoint_stale_after,json=endpointStaleAfter,proto3" json:"endpoint_stale_after,omitempty"`
	// The flag to disable overprovisioning. If it is set to true,
	// :ref:`overprovisioning factor
	// <arch_overview_load_balancing_overprovisioning_factor>` will be ignored
	// and Envoy will not perform graceful failover between priority levels or
	// localities as endpoints become unhealthy. Otherwise Envoy will perform
	// graceful failover as :ref:`overprovisioning factor
	// <arch_overview_load_balancing_overprovisioning_factor>` suggests.
	// [#next-major-version: Unify with overprovisioning config as a single message.]
	// [#not-implemented-hide:]
	DisableOverprovisioning bool     `protobuf:"varint,5,opt,name=disable_overprovisioning,json=disableOverprovisioning,proto3" json:"disable_overprovisioning,omitempty"`
	XXX_NoUnkeyedLiteral    struct{} `json:"-"`
	XXX_unrecognized        []byte   `json:"-"`
	XXX_sizecache           int32    `json:"-"`
}

func (m *ClusterLoadAssignment_Policy) Reset()         { *m = ClusterLoadAssignment_Policy{} }
func (m *ClusterLoadAssignment_Policy) String() string { return proto.CompactTextString(m) }
func (*ClusterLoadAssignment_Policy) ProtoMessage()    {}
func (*ClusterLoadAssignment_Policy) Descriptor() ([]byte, []int) {
	return fileDescriptor_3c8760f38742c17f, []int{0, 0}
}

func (m *ClusterLoadAssignment_Policy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClusterLoadAssignment_Policy.Unmarshal(m, b)
}
func (m *ClusterLoadAssignment_Policy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClusterLoadAssignment_Policy.Marshal(b, m, deterministic)
}
func (m *ClusterLoadAssignment_Policy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClusterLoadAssignment_Policy.Merge(m, src)
}
func (m *ClusterLoadAssignment_Policy) XXX_Size() int {
	return xxx_messageInfo_ClusterLoadAssignment_Policy.Size(m)
}
func (m *ClusterLoadAssignment_Policy) XXX_DiscardUnknown() {
	xxx_messageInfo_ClusterLoadAssignment_Policy.DiscardUnknown(m)
}

var xxx_messageInfo_ClusterLoadAssignment_Policy proto.InternalMessageInfo

func (m *ClusterLoadAssignment_Policy) GetDropOverloads() []*ClusterLoadAssignment_Policy_DropOverload {
	if m != nil {
		return m.DropOverloads
	}
	return nil
}

func (m *ClusterLoadAssignment_Policy) GetOverprovisioningFactor() *wrappers.UInt32Value {
	if m != nil {
		return m.OverprovisioningFactor
	}
	return nil
}

func (m *ClusterLoadAssignment_Policy) GetEndpointStaleAfter() *duration.Duration {
	if m != nil {
		return m.EndpointStaleAfter
	}
	return nil
}

func (m *ClusterLoadAssignment_Policy) GetDisableOverprovisioning() bool {
	if m != nil {
		return m.DisableOverprovisioning
	}
	return false
}

type ClusterLoadAssignment_Policy_DropOverload struct {
	// Identifier for the policy specifying the drop.
	Category string `protobuf:"bytes,1,opt,name=category,proto3" json:"category,omitempty"`
	// Percentage of traffic that should be dropped for the category.
	DropPercentage       *_type.FractionalPercent `protobuf:"bytes,2,opt,name=drop_percentage,json=dropPercentage,proto3" json:"drop_percentage,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
	XXX_unrecognized     []byte                   `json:"-"`
	XXX_sizecache        int32                    `json:"-"`
}

func (m *ClusterLoadAssignment_Policy_DropOverload) Reset() {
	*m = ClusterLoadAssignment_Policy_DropOverload{}
}
func (m *ClusterLoadAssignment_Policy_DropOverload) String() string { return proto.CompactTextString(m) }
func (*ClusterLoadAssignment_Policy_DropOverload) ProtoMessage()    {}
func (*ClusterLoadAssignment_Policy_DropOverload) Descriptor() ([]byte, []int) {
	return fileDescriptor_3c8760f38742c17f, []int{0, 0, 0}
}

func (m *ClusterLoadAssignment_Policy_DropOverload) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClusterLoadAssignment_Policy_DropOverload.Unmarshal(m, b)
}
func (m *ClusterLoadAssignment_Policy_DropOverload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClusterLoadAssignment_Policy_DropOverload.Marshal(b, m, deterministic)
}
func (m *ClusterLoadAssignment_Policy_DropOverload) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClusterLoadAssignment_Policy_DropOverload.Merge(m, src)
}
func (m *ClusterLoadAssignment_Policy_DropOverload) XXX_Size() int {
	return xxx_messageInfo_ClusterLoadAssignment_Policy_DropOverload.Size(m)
}
func (m *ClusterLoadAssignment_Policy_DropOverload) XXX_DiscardUnknown() {
	xxx_messageInfo_ClusterLoadAssignment_Policy_DropOverload.DiscardUnknown(m)
}

var xxx_messageInfo_ClusterLoadAssignment_Policy_DropOverload proto.InternalMessageInfo

func (m *ClusterLoadAssignment_Policy_DropOverload) GetCategory() string {
	if m != nil {
		return m.Category
	}
	return ""
}

func (m *ClusterLoadAssignment_Policy_DropOverload) GetDropPercentage() *_type.FractionalPercent {
	if m != nil {
		return m.DropPercentage
	}
	return nil
}

func init() {
	proto.RegisterType((*ClusterLoadAssignment)(nil), "envoy.api.v2.ClusterLoadAssignment")
	proto.RegisterMapType((map[string]*endpoint.Endpoint)(nil), "envoy.api.v2.ClusterLoadAssignment.NamedEndpointsEntry")
	proto.RegisterType((*ClusterLoadAssignment_Policy)(nil), "envoy.api.v2.ClusterLoadAssignment.Policy")
	proto.RegisterType((*ClusterLoadAssignment_Policy_DropOverload)(nil), "envoy.api.v2.ClusterLoadAssignment.Policy.DropOverload")
}

func init() { proto.RegisterFile("envoy/api/v2/eds.proto", fileDescriptor_3c8760f38742c17f) }

var fileDescriptor_3c8760f38742c17f = []byte{
	// 702 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x94, 0xcf, 0x6e, 0xd3, 0x4a,
	0x14, 0xc6, 0x6b, 0xa7, 0xc9, 0x4d, 0xa7, 0xbd, 0x69, 0x35, 0xf7, 0xde, 0xc6, 0xd7, 0x0a, 0x6d,
	0x94, 0x76, 0x11, 0x05, 0xc9, 0x41, 0xa9, 0x50, 0xa1, 0xbb, 0x86, 0x34, 0x02, 0x54, 0xd1, 0xc8,
	0x55, 0x11, 0xab, 0x9a, 0x89, 0x7d, 0x1a, 0x46, 0x38, 0x33, 0x66, 0x3c, 0x31, 0x58, 0xec, 0x58,
	0xb1, 0xe7, 0x2d, 0x78, 0x18, 0x36, 0xac, 0xd9, 0xf1, 0x0e, 0x48, 0x5d, 0x21, 0xff, 0x4d, 0x9d,
	0xb6, 0x88, 0x05, 0xbb, 0xf1, 0x7c, 0xe7, 0xfb, 0xcd, 0x99, 0x73, 0x8e, 0x07, 0x6d, 0x02, 0x0b,
	0x78, 0xd8, 0x25, 0x1e, 0xed, 0x06, 0xbd, 0x2e, 0x38, 0xbe, 0xe1, 0x09, 0x2e, 0x39, 0x5e, 0x8b,
	0xf7, 0x0d, 0xe2, 0x51, 0x23, 0xe8, 0xe9, 0x8d, 0x42, 0x94, 0x43, 0x7d, 0x9b, 0x07, 0x20, 0xc2,
	0x24, 0x56, 0xdf, 0x2d, 0x32, 0x98, 0xe3, 0x71, 0xca, 0x64, 0xbe, 0x48, 0xa3, 0xb4, 0x24, 0x4a,
	0x86, 0x1e, 0x74, 0x3d, 0x10, 0x36, 0xe4, 0x4a, 0x63, 0xc2, 0xf9, 0xc4, 0x85, 0x18, 0x40, 0x18,
	0xe3, 0x92, 0x48, 0xca, 0x59, 0x9a, 0x89, 0xbe, 0x95, 0xaa, 0xf1, 0xd7, 0x78, 0x76, 0xd1, 0x75,
	0x66, 0x22, 0x0e, 0xb8, 0x4d, 0x7f, 0x2b, 0x88, 0xe7, 0x81, 0xc8, 0xfc, 0xf5, 0x80, 0xb8, 0xd4,
	0x21, 0x12, 0xba, 0xd9, 0x22, 0x11, 0x5a, 0x3f, 0x2a, 0xe8, 0xbf, 0x47, 0xee, 0xcc, 0x97, 0x20,
	0x8e, 0x39, 0x71, 0x0e, 0x7d, 0x9f, 0x4e, 0xd8, 0x14, 0x98, 0xc4, 0x1d, 0xb4, 0x66, 0x27, 0x82,
	0xc5, 0xc8, 0x14, 0x34, 0xa5, 0xa9, 0xb4, 0x57, 0xfa, 0x7f, 0x5d, 0xf6, 0x97, 0x85, 0xda, 0x54,
	0xcc, 0xd5, 0x54, 0x7c, 0x46, 0xa6, 0x80, 0x1f, 0xa3, 0x95, 0xec, 0xa2, 0xbe, 0xa6, 0x36, 0x4b,
	0xed, 0xd5, 0x5e, 0xc7, 0xb8, 0x5a, 0x3c, 0x23, 0xaf, 0xc3, 0x31, 0xb7, 0x89, 0x4b, 0x65, 0x78,
	0x3c, 0x3e, 0xca, 0x1c, 0xe6, 0xdc, 0x8c, 0x5f, 0xa2, 0xf5, 0xe8, 0x34, 0xc7, 0x9a, 0xf3, 0xca,
	0x31, 0x6f, 0xbf, 0xc8, 0xbb, 0x31, 0x67, 0x23, 0x4a, 0xc6, 0xc9, 0xb9, 0x47, 0x4c, 0x8a, 0xd0,
	0xac, 0xb1, 0xc2, 0x26, 0xee, 0xa3, 0x8a, 0xc7, 0x5d, 0x6a, 0x87, 0xda, 0x72, 0x53, 0xb9, 0x9e,
	0xe8, 0xcd, 0xe0, 0x51, 0xec, 0x30, 0x53, 0xa7, 0xfe, 0xad, 0x84, 0x2a, 0xc9, 0x16, 0x3e, 0x47,
	0x35, 0x47, 0x70, 0xcf, 0x8a, 0x66, 0xc1, 0xe5, 0xc4, 0xc9, 0xee, 0xbf, 0xff, 0xfb, 0x58, 0x63,
	0x20, 0xb8, 0x77, 0x92, 0xfa, 0xcd, 0xbf, 0x9d, 0x2b, 0x5f, 0x3e, 0x3e, 0x47, 0xf5, 0x08, 0xed,
	0x09, 0x1e, 0x50, 0x9f, 0x72, 0x46, 0xd9, 0xc4, 0xba, 0x20, 0xb6, 0xe4, 0x42, 0x2b, 0xc5, 0xf9,
	0x37, 0x8c, 0xa4, 0xf7, 0x46, 0xd6, 0x7b, 0xe3, 0xec, 0x09, 0x93, 0x7b, 0xbd, 0xe7, 0xc4, 0x9d,
	0x41, 0xdc, 0xaf, 0x8e, 0xda, 0x5c, 0x32, 0x37, 0x17, 0x29, 0xc3, 0x18, 0x82, 0xcf, 0xd0, 0xbf,
	0x59, 0xa9, 0x2d, 0x5f, 0x12, 0x17, 0x2c, 0x72, 0x21, 0x41, 0xa4, 0xc5, 0xf9, 0xff, 0x1a, 0x7c,
	0x90, 0x0e, 0x5e, 0xbf, 0x7a, 0xd9, 0x2f, 0x7f, 0x56, 0xd4, 0xce, 0x92, 0x89, 0x33, 0xc0, 0x69,
	0xe4, 0x3f, 0x8c, 0xec, 0xf8, 0x21, 0xd2, 0x1c, 0xea, 0x93, 0xb1, 0x0b, 0xd6, 0xe2, 0xc1, 0x5a,
	0xb9, 0xa9, 0xb4, 0xab, 0x66, 0x3d, 0xd5, 0x4f, 0x16, 0x64, 0xfd, 0x3d, 0x5a, 0xbb, 0x5a, 0x10,
	0xbc, 0x83, 0xaa, 0x36, 0x91, 0x30, 0xe1, 0x22, 0x5c, 0x1c, 0xc2, 0x5c, 0xc0, 0x43, 0xb4, 0x1e,
	0xb7, 0x21, 0xfd, 0xa9, 0xc8, 0x04, 0x34, 0x35, 0xbe, 0xc1, 0x9d, 0xb4, 0x0f, 0xd1, 0x2f, 0x67,
	0x0c, 0x05, 0xb1, 0xa3, 0xe4, 0x89, 0x3b, 0x4a, 0xe2, 0xcc, 0xb8, 0x79, 0xa3, 0xdc, 0xf4, 0x74,
	0xb9, 0xaa, 0x6c, 0xa8, 0xfa, 0x18, 0xfd, 0x73, 0xc3, 0x28, 0xe1, 0x0d, 0x54, 0x7a, 0x0d, 0x69,
	0x12, 0x66, 0xb4, 0xc4, 0xf7, 0x51, 0x39, 0x88, 0xea, 0x9c, 0x1e, 0xb6, 0x7d, 0xcb, 0xd0, 0x67,
	0x1c, 0x33, 0x89, 0x3e, 0x50, 0x1f, 0x28, 0xbd, 0x2f, 0x2a, 0xd2, 0xb2, 0xfd, 0x41, 0xf6, 0x98,
	0x9c, 0x82, 0x08, 0xa8, 0x0d, 0xf8, 0x05, 0x5a, 0x3f, 0x95, 0x02, 0xc8, 0x74, 0x3e, 0xb7, 0x5b,
	0x45, 0x76, 0x6e, 0x31, 0xe1, 0xcd, 0x0c, 0x7c, 0xa9, 0x6f, 0xdf, 0xaa, 0xfb, 0x1e, 0x67, 0x3e,
	0xb4, 0x96, 0xda, 0xca, 0x3d, 0x05, 0x13, 0x54, 0x1b, 0x80, 0x2b, 0xc9, 0x1c, 0xbc, 0xb3, 0x60,
	0x8c, 0xd4, 0x6b, 0xf4, 0xdd, 0x5f, 0x07, 0x15, 0x8e, 0x98, 0xa1, 0xda, 0x10, 0xa4, 0xfd, 0xea,
	0x0f, 0xe6, 0xde, 0xfa, 0xf0, 0xf5, 0xfb, 0x27, 0xb5, 0xd1, 0xaa, 0x17, 0x9e, 0xde, 0x83, 0xfc,
	0x91, 0x38, 0x50, 0x3a, 0xfd, 0xbb, 0x48, 0xa7, 0x3c, 0x01, 0x79, 0x82, 0xbf, 0x0b, 0x0b, 0xcc,
	0x7e, 0xf5, 0xc8, 0xf1, 0x47, 0xd1, 0x10, 0x8f, 0x94, 0x8f, 0x8a, 0x32, 0xae, 0xc4, 0x03, 0xbd,
	0xf7, 0x33, 0x00, 0x00, 0xff, 0xff, 0x67, 0x4f, 0x40, 0xb4, 0xfb, 0x05, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// EndpointDiscoveryServiceClient is the client API for EndpointDiscoveryService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type EndpointDiscoveryServiceClient interface {
	// The resource_names field in DiscoveryRequest specifies a list of clusters
	// to subscribe to updates for.
	StreamEndpoints(ctx context.Context, opts ...grpc.CallOption) (EndpointDiscoveryService_StreamEndpointsClient, error)
	DeltaEndpoints(ctx context.Context, opts ...grpc.CallOption) (EndpointDiscoveryService_DeltaEndpointsClient, error)
	FetchEndpoints(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error)
}

type endpointDiscoveryServiceClient struct {
	cc *grpc.ClientConn
}

func NewEndpointDiscoveryServiceClient(cc *grpc.ClientConn) EndpointDiscoveryServiceClient {
	return &endpointDiscoveryServiceClient{cc}
}

func (c *endpointDiscoveryServiceClient) StreamEndpoints(ctx context.Context, opts ...grpc.CallOption) (EndpointDiscoveryService_StreamEndpointsClient, error) {
	stream, err := c.cc.NewStream(ctx, &_EndpointDiscoveryService_serviceDesc.Streams[0], "/envoy.api.v2.EndpointDiscoveryService/StreamEndpoints", opts...)
	if err != nil {
		return nil, err
	}
	x := &endpointDiscoveryServiceStreamEndpointsClient{stream}
	return x, nil
}

type EndpointDiscoveryService_StreamEndpointsClient interface {
	Send(*DiscoveryRequest) error
	Recv() (*DiscoveryResponse, error)
	grpc.ClientStream
}

type endpointDiscoveryServiceStreamEndpointsClient struct {
	grpc.ClientStream
}

func (x *endpointDiscoveryServiceStreamEndpointsClient) Send(m *DiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *endpointDiscoveryServiceStreamEndpointsClient) Recv() (*DiscoveryResponse, error) {
	m := new(DiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *endpointDiscoveryServiceClient) DeltaEndpoints(ctx context.Context, opts ...grpc.CallOption) (EndpointDiscoveryService_DeltaEndpointsClient, error) {
	stream, err := c.cc.NewStream(ctx, &_EndpointDiscoveryService_serviceDesc.Streams[1], "/envoy.api.v2.EndpointDiscoveryService/DeltaEndpoints", opts...)
	if err != nil {
		return nil, err
	}
	x := &endpointDiscoveryServiceDeltaEndpointsClient{stream}
	return x, nil
}

type EndpointDiscoveryService_DeltaEndpointsClient interface {
	Send(*DeltaDiscoveryRequest) error
	Recv() (*DeltaDiscoveryResponse, error)
	grpc.ClientStream
}

type endpointDiscoveryServiceDeltaEndpointsClient struct {
	grpc.ClientStream
}

func (x *endpointDiscoveryServiceDeltaEndpointsClient) Send(m *DeltaDiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *endpointDiscoveryServiceDeltaEndpointsClient) Recv() (*DeltaDiscoveryResponse, error) {
	m := new(DeltaDiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *endpointDiscoveryServiceClient) FetchEndpoints(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error) {
	out := new(DiscoveryResponse)
	err := c.cc.Invoke(ctx, "/envoy.api.v2.EndpointDiscoveryService/FetchEndpoints", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// EndpointDiscoveryServiceServer is the server API for EndpointDiscoveryService service.
type EndpointDiscoveryServiceServer interface {
	// The resource_names field in DiscoveryRequest specifies a list of clusters
	// to subscribe to updates for.
	StreamEndpoints(EndpointDiscoveryService_StreamEndpointsServer) error
	DeltaEndpoints(EndpointDiscoveryService_DeltaEndpointsServer) error
	FetchEndpoints(context.Context, *DiscoveryRequest) (*DiscoveryResponse, error)
}

// UnimplementedEndpointDiscoveryServiceServer can be embedded to have forward compatible implementations.
type UnimplementedEndpointDiscoveryServiceServer struct {
}

func (*UnimplementedEndpointDiscoveryServiceServer) StreamEndpoints(srv EndpointDiscoveryService_StreamEndpointsServer) error {
	return status.Errorf(codes.Unimplemented, "method StreamEndpoints not implemented")
}
func (*UnimplementedEndpointDiscoveryServiceServer) DeltaEndpoints(srv EndpointDiscoveryService_DeltaEndpointsServer) error {
	return status.Errorf(codes.Unimplemented, "method DeltaEndpoints not implemented")
}
func (*UnimplementedEndpointDiscoveryServiceServer) FetchEndpoints(ctx context.Context, req *DiscoveryRequest) (*DiscoveryResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method FetchEndpoints not implemented")
}

func RegisterEndpointDiscoveryServiceServer(s *grpc.Server, srv EndpointDiscoveryServiceServer) {
	s.RegisterService(&_EndpointDiscoveryService_serviceDesc, srv)
}

func _EndpointDiscoveryService_StreamEndpoints_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(EndpointDiscoveryServiceServer).StreamEndpoints(&endpointDiscoveryServiceStreamEndpointsServer{stream})
}

type EndpointDiscoveryService_StreamEndpointsServer interface {
	Send(*DiscoveryResponse) error
	Recv() (*DiscoveryRequest, error)
	grpc.ServerStream
}

type endpointDiscoveryServiceStreamEndpointsServer struct {
	grpc.ServerStream
}

func (x *endpointDiscoveryServiceStreamEndpointsServer) Send(m *DiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *endpointDiscoveryServiceStreamEndpointsServer) Recv() (*DiscoveryRequest, error) {
	m := new(DiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _EndpointDiscoveryService_DeltaEndpoints_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(EndpointDiscoveryServiceServer).DeltaEndpoints(&endpointDiscoveryServiceDeltaEndpointsServer{stream})
}

type EndpointDiscoveryService_DeltaEndpointsServer interface {
	Send(*DeltaDiscoveryResponse) error
	Recv() (*DeltaDiscoveryRequest, error)
	grpc.ServerStream
}

type endpointDiscoveryServiceDeltaEndpointsServer struct {
	grpc.ServerStream
}

func (x *endpointDiscoveryServiceDeltaEndpointsServer) Send(m *DeltaDiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *endpointDiscoveryServiceDeltaEndpointsServer) Recv() (*DeltaDiscoveryRequest, error) {
	m := new(DeltaDiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _EndpointDiscoveryService_FetchEndpoints_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(DiscoveryRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(EndpointDiscoveryServiceServer).FetchEndpoints(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/envoy.api.v2.EndpointDiscoveryService/FetchEndpoints",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(EndpointDiscoveryServiceServer).FetchEndpoints(ctx, req.(*DiscoveryRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _EndpointDiscoveryService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.api.v2.EndpointDiscoveryService",
	HandlerType: (*EndpointDiscoveryServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "FetchEndpoints",
			Handler:    _EndpointDiscoveryService_FetchEndpoints_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "StreamEndpoints",
			Handler:       _EndpointDiscoveryService_StreamEndpoints_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
		{
			StreamName:    "DeltaEndpoints",
			Handler:       _EndpointDiscoveryService_DeltaEndpoints_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
	},
	Metadata: "envoy/api/v2/eds.proto",
}
  0707010000006A000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000002F00000000cilium-proxy-20200109/go/envoy/api/v2/endpoint    0707010000006B000081A4000003E800000064000000015E17A247000044A5000000000000000000000000000000000000003E00000000cilium-proxy-20200109/go/envoy/api/v2/endpoint/endpoint.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/endpoint/endpoint.proto

package envoy_api_v2_endpoint

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Upstream host identifier.
type Endpoint struct {
	// The upstream host address.
	//
	// .. attention::
	//
	//   The form of host address depends on the given cluster type. For STATIC or EDS,
	//   it is expected to be a direct IP address (or something resolvable by the
	//   specified :ref:`resolver <envoy_api_field_core.SocketAddress.resolver_name>`
	//   in the Address). For LOGICAL or STRICT DNS, it is expected to be hostname,
	//   and will be resolved via DNS.
	Address *core.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
	// The optional health check configuration is used as configuration for the
	// health checker to contact the health checked host.
	//
	// .. attention::
	//
	//   This takes into effect only for upstream clusters with
	//   :ref:`active health checking <arch_overview_health_checking>` enabled.
	HealthCheckConfig    *Endpoint_HealthCheckConfig `protobuf:"bytes,2,opt,name=health_check_config,json=healthCheckConfig,proto3" json:"health_check_config,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
	XXX_unrecognized     []byte                      `json:"-"`
	XXX_sizecache        int32                       `json:"-"`
}

func (m *Endpoint) Reset()         { *m = Endpoint{} }
func (m *Endpoint) String() string { return proto.CompactTextString(m) }
func (*Endpoint) ProtoMessage()    {}
func (*Endpoint) Descriptor() ([]byte, []int) {
	return fileDescriptor_a9d2a3e4ee06324f, []int{0}
}

func (m *Endpoint) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Endpoint.Unmarshal(m, b)
}
func (m *Endpoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Endpoint.Marshal(b, m, deterministic)
}
func (m *Endpoint) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Endpoint.Merge(m, src)
}
func (m *Endpoint) XXX_Size() int {
	return xxx_messageInfo_Endpoint.Size(m)
}
func (m *Endpoint) XXX_DiscardUnknown() {
	xxx_messageInfo_Endpoint.DiscardUnknown(m)
}

var xxx_messageInfo_Endpoint proto.InternalMessageInfo

func (m *Endpoint) GetAddress() *core.Address {
	if m != nil {
		return m.Address
	}
	return nil
}

func (m *Endpoint) GetHealthCheckConfig() *Endpoint_HealthCheckConfig {
	if m != nil {
		return m.HealthCheckConfig
	}
	return nil
}

// The optional health check configuration.
type Endpoint_HealthCheckConfig struct {
	// Optional alternative health check port value.
	//
	// By default the health check address port of an upstream host is the same
	// as the host's serving address port. This provides an alternative health
	// check port. Setting this with a non-zero value allows an upstream host
	// to have different health check address port.
	PortValue            uint32   `protobuf:"varint,1,opt,name=port_value,json=portValue,proto3" json:"port_value,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Endpoint_HealthCheckConfig) Reset()         { *m = Endpoint_HealthCheckConfig{} }
func (m *Endpoint_HealthCheckConfig) String() string { return proto.CompactTextString(m) }
func (*Endpoint_HealthCheckConfig) ProtoMessage()    {}
func (*Endpoint_HealthCheckConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_a9d2a3e4ee06324f, []int{0, 0}
}

func (m *Endpoint_HealthCheckConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Endpoint_HealthCheckConfig.Unmarshal(m, b)
}
func (m *Endpoint_HealthCheckConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Endpoint_HealthCheckConfig.Marshal(b, m, deterministic)
}
func (m *Endpoint_HealthCheckConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Endpoint_HealthCheckConfig.Merge(m, src)
}
func (m *Endpoint_HealthCheckConfig) XXX_Size() int {
	return xxx_messageInfo_Endpoint_HealthCheckConfig.Size(m)
}
func (m *Endpoint_HealthCheckConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_Endpoint_HealthCheckConfig.DiscardUnknown(m)
}

var xxx_messageInfo_Endpoint_HealthCheckConfig proto.InternalMessageInfo

func (m *Endpoint_HealthCheckConfig) GetPortValue() uint32 {
	if m != nil {
		return m.PortValue
	}
	return 0
}

// An Endpoint that Envoy can route traffic to.
// [#next-free-field: 6]
type LbEndpoint struct {
	// Upstream host identifier or a named reference.
	//
	// Types that are valid to be assigned to HostIdentifier:
	//	*LbEndpoint_Endpoint
	//	*LbEndpoint_EndpointName
	HostIdentifier isLbEndpoint_HostIdentifier `protobuf_oneof:"host_identifier"`
	// Optional health status when known and supplied by EDS server.
	HealthStatus core.HealthStatus `protobuf:"varint,2,opt,name=health_status,json=healthStatus,proto3,enum=envoy.api.v2.core.HealthStatus" json:"health_status,omitempty"`
	// The endpoint metadata specifies values that may be used by the load
	// balancer to select endpoints in a cluster for a given request. The filter
	// name should be specified as *envoy.lb*. An example boolean key-value pair
	// is *canary*, providing the optional canary status of the upstream host.
	// This may be matched against in a route's
	// :ref:`RouteAction <envoy_api_msg_route.RouteAction>` metadata_match field
	// to subset the endpoints considered in cluster load balancing.
	Metadata *core.Metadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"`
	// The optional load balancing weight of the upstream host; at least 1.
	// Envoy uses the load balancing weight in some of the built in load
	// balancers. The load balancing weight for an endpoint is divided by the sum
	// of the weights of all endpoints in the endpoint's locality to produce a
	// percentage of traffic for the endpoint. This percentage is then further
	// weighted by the endpoint's locality's load balancing weight from
	// LocalityLbEndpoints. If unspecified, each host is presumed to have equal
	// weight in a locality.
	LoadBalancingWeight  *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=load_balancing_weight,json=loadBalancingWeight,proto3" json:"load_balancing_weight,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *LbEndpoint) Reset()         { *m = LbEndpoint{} }
func (m *LbEndpoint) String() string { return proto.CompactTextString(m) }
func (*LbEndpoint) ProtoMessage()    {}
func (*LbEndpoint) Descriptor() ([]byte, []int) {
	return fileDescriptor_a9d2a3e4ee06324f, []int{1}
}

func (m *LbEndpoint) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_LbEndpoint.Unmarshal(m, b)
}
func (m *LbEndpoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_LbEndpoint.Marshal(b, m, deterministic)
}
func (m *LbEndpoint) XXX_Merge(src proto.Message) {
	xxx_messageInfo_LbEndpoint.Merge(m, src)
}
func (m *LbEndpoint) XXX_Size() int {
	return xxx_messageInfo_LbEndpoint.Size(m)
}
func (m *LbEndpoint) XXX_DiscardUnknown() {
	xxx_messageInfo_LbEndpoint.DiscardUnknown(m)
}

var xxx_messageInfo_LbEndpoint proto.InternalMessageInfo

type isLbEndpoint_HostIdentifier interface {
	isLbEndpoint_HostIdentifier()
}

type LbEndpoint_Endpoint struct {
	Endpoint *Endpoint `protobuf:"bytes,1,opt,name=endpoint,proto3,oneof"`
}

type LbEndpoint_EndpointName struct {
	EndpointName string `protobuf:"bytes,5,opt,name=endpoint_name,json=endpointName,proto3,oneof"`
}

func (*LbEndpoint_Endpoint) isLbEndpoint_HostIdentifier() {}

func (*LbEndpoint_EndpointName) isLbEndpoint_HostIdentifier() {}

func (m *LbEndpoint) GetHostIdentifier() isLbEndpoint_HostIdentifier {
	if m != nil {
		return m.HostIdentifier
	}
	return nil
}

func (m *LbEndpoint) GetEndpoint() *Endpoint {
	if x, ok := m.GetHostIdentifier().(*LbEndpoint_Endpoint); ok {
		return x.Endpoint
	}
	return nil
}

func (m *LbEndpoint) GetEndpointName() string {
	if x, ok := m.GetHostIdentifier().(*LbEndpoint_EndpointName); ok {
		return x.EndpointName
	}
	return ""
}

func (m *LbEndpoint) GetHealthStatus() core.HealthStatus {
	if m != nil {
		return m.HealthStatus
	}
	return core.HealthStatus_UNKNOWN
}

func (m *LbEndpoint) GetMetadata() *core.Metadata {
	if m != nil {
		return m.Metadata
	}
	return nil
}

func (m *LbEndpoint) GetLoadBalancingWeight() *wrappers.UInt32Value {
	if m != nil {
		return m.LoadBalancingWeight
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*LbEndpoint) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*LbEndpoint_Endpoint)(nil),
		(*LbEndpoint_EndpointName)(nil),
	}
}

// A group of endpoints belonging to a Locality.
// One can have multiple LocalityLbEndpoints for a locality, but this is
// generally only done if the different groups need to have different load
// balancing weights or different priorities.
// [#next-free-field: 7]
type LocalityLbEndpoints struct {
	// Identifies location of where the upstream hosts run.
	Locality *core.Locality `protobuf:"bytes,1,opt,name=locality,proto3" json:"locality,omitempty"`
	// The group of endpoints belonging to the locality specified.
	LbEndpoints []*LbEndpoint `protobuf:"bytes,2,rep,name=lb_endpoints,json=lbEndpoints,proto3" json:"lb_endpoints,omitempty"`
	// Optional: Per priority/region/zone/sub_zone weight; at least 1. The load
	// balancing weight for a locality is divided by the sum of the weights of all
	// localities  at the same priority level to produce the effective percentage
	// of traffic for the locality.
	//
	// Locality weights are only considered when :ref:`locality weighted load
	// balancing <arch_overview_load_balancing_locality_weighted_lb>` is
	// configured. These weights are ignored otherwise. If no weights are
	// specified when locality weighted load balancing is enabled, the locality is
	// assigned no load.
	LoadBalancingWeight *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=load_balancing_weight,json=loadBalancingWeight,proto3" json:"load_balancing_weight,omitempty"`
	// Optional: the priority for this LocalityLbEndpoints. If unspecified this will
	// default to the highest priority (0).
	//
	// Under usual circumstances, Envoy will only select endpoints for the highest
	// priority (0). In the event all endpoints for a particular priority are
	// unavailable/unhealthy, Envoy will fail over to selecting endpoints for the
	// next highest priority group.
	//
	// Priorities should range from 0 (highest) to N (lowest) without skipping.
	Priority uint32 `protobuf:"varint,5,opt,name=priority,proto3" json:"priority,omitempty"`
	// Optional: Per locality proximity value which indicates how close this
	// locality is from the source locality. This value only provides ordering
	// information (lower the value, closer it is to the source locality).
	// This will be consumed by load balancing schemes that need proximity order
	// to determine where to route the requests.
	// [#not-implemented-hide:]
	Proximity            *wrappers.UInt32Value `protobuf:"bytes,6,opt,name=proximity,proto3" json:"proximity,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *LocalityLbEndpoints) Reset()         { *m = LocalityLbEndpoints{} }
func (m *LocalityLbEndpoints) String() string { return proto.CompactTextString(m) }
func (*LocalityLbEndpoints) ProtoMessage()    {}
func (*LocalityLbEndpoints) Descriptor() ([]byte, []int) {
	return fileDescriptor_a9d2a3e4ee06324f, []int{2}
}

func (m *LocalityLbEndpoints) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_LocalityLbEndpoints.Unmarshal(m, b)
}
func (m *LocalityLbEndpoints) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_LocalityLbEndpoints.Marshal(b, m, deterministic)
}
func (m *LocalityLbEndpoints) XXX_Merge(src proto.Message) {
	xxx_messageInfo_LocalityLbEndpoints.Merge(m, src)
}
func (m *LocalityLbEndpoints) XXX_Size() int {
	return xxx_messageInfo_LocalityLbEndpoints.Size(m)
}
func (m *LocalityLbEndpoints) XXX_DiscardUnknown() {
	xxx_messageInfo_LocalityLbEndpoints.DiscardUnknown(m)
}

var xxx_messageInfo_LocalityLbEndpoints proto.InternalMessageInfo

func (m *LocalityLbEndpoints) GetLocality() *core.Locality {
	if m != nil {
		return m.Locality
	}
	return nil
}

func (m *LocalityLbEndpoints) GetLbEndpoints() []*LbEndpoint {
	if m != nil {
		return m.LbEndpoints
	}
	return nil
}

func (m *LocalityLbEndpoints) GetLoadBalancingWeight() *wrappers.UInt32Value {
	if m != nil {
		return m.LoadBalancingWeight
	}
	return nil
}

func (m *LocalityLbEndpoints) GetPriority() uint32 {
	if m != nil {
		return m.Priority
	}
	return 0
}

func (m *LocalityLbEndpoints) GetProximity() *wrappers.UInt32Value {
	if m != nil {
		return m.Proximity
	}
	return nil
}

func init() {
	proto.RegisterType((*Endpoint)(nil), "envoy.api.v2.endpoint.Endpoint")
	proto.RegisterType((*Endpoint_HealthCheckConfig)(nil), "envoy.api.v2.endpoint.Endpoint.HealthCheckConfig")
	proto.RegisterType((*LbEndpoint)(nil), "envoy.api.v2.endpoint.LbEndpoint")
	proto.RegisterType((*LocalityLbEndpoints)(nil), "envoy.api.v2.endpoint.LocalityLbEndpoints")
}

func init() {
	proto.RegisterFile("envoy/api/v2/endpoint/endpoint.proto", fileDescriptor_a9d2a3e4ee06324f)
}

var fileDescriptor_a9d2a3e4ee06324f = []byte{
	// 556 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x52, 0x4d, 0x6f, 0xd3, 0x30,
	0x18, 0x5e, 0xfa, 0xb5, 0xd6, 0x6d, 0x41, 0x75, 0x35, 0x11, 0x95, 0x89, 0x8d, 0x52, 0xa4, 0xaa,
	0x07, 0x47, 0x74, 0x08, 0x24, 0xa4, 0x1d, 0xc8, 0x86, 0x54, 0xa4, 0x81, 0x26, 0x23, 0x40, 0x9c,
	0x22, 0x27, 0x71, 0x1b, 0x8b, 0x34, 0x8e, 0x12, 0x37, 0xa3, 0x37, 0xfe, 0x22, 0xbf, 0x00, 0x89,
	0x9f, 0xd1, 0xcb, 0x50, 0x9c, 0x38, 0xed, 0xd6, 0x4e, 0x3b, 0xec, 0xe6, 0xf8, 0x7d, 0xde, 0xe7,
	0x2b, 0x06, 0x03, 0x1a, 0x24, 0x7c, 0x69, 0x90, 0x90, 0x19, 0xc9, 0xd8, 0xa0, 0x81, 0x1b, 0x72,
	0x16, 0x88, 0xe2, 0x80, 0xc2, 0x88, 0x0b, 0x0e, 0x0f, 0x24, 0x0a, 0x91, 0x90, 0xa1, 0x64, 0x8c,
	0xd4, 0xb0, 0x77, 0x74, 0x63, 0xd9, 0xe1, 0x11, 0x35, 0x88, 0xeb, 0x46, 0x34, 0x8e, 0xb3, 0xbd,
	0xde, 0xe1, 0x36, 0xc0, 0x26, 0x31, 0xcd, 0xa7, 0x83, 0xed, 0xa9, 0x47, 0x89, 0x2f, 0x3c, 0xcb,
	0xf1, 0xa8, 0xf3, 0x33, 0x47, 0x3d, 0x9b, 0x71, 0x3e, 0xf3, 0xa9, 0x21, 0xbf, 0xec, 0xc5, 0xd4,
	0xb8, 0x8a, 0x48, 0x18, 0xd2, 0x48, 0x69, 0x3c, 0x49, 0x88, 0xcf, 0x5c, 0x22, 0xa8, 0xa1, 0x0e,
	0xd9, 0xa0, 0xff, 0x4f, 0x03, 0xf5, 0x0f, 0xb9, 0x55, 0xf8, 0x1a, 0xec, 0xe7, 0xd6, 0x74, 0xed,
	0x58, 0x1b, 0x36, 0xc7, 0x3d, 0x74, 0x23, 0x53, 0xaa, 0x8e, 0xde, 0x67, 0x08, 0xac, 0xa0, 0x90,
	0x80, 0xee, 0xa6, 0x23, 0xcb, 0xe1, 0xc1, 0x94, 0xcd, 0xf4, 0x92, 0x64, 0x78, 0x85, 0x76, 0xb6,
	0x82, 0x94, 0x26, 0x9a, 0xc8, 0xd5, 0xb3, 0x74, 0xf3, 0x4c, 0x2e, 0xe2, 0x8e, 0x77, 0xfb, 0xaa,
	0x77, 0x0a, 0x3a, 0x5b, 0x38, 0x38, 0x04, 0x20, 0xe4, 0x91, 0xb0, 0x12, 0xe2, 0x2f, 0xa8, 0x34,
	0xdc, 0x36, 0x1b, 0x2b, 0xb3, 0x36, 0xaa, 0xe8, 0xd7, 0xd7, 0x65, 0xdc, 0x48, 0x87, 0xdf, 0xd2,
	0x59, 0xff, 0x6f, 0x09, 0x80, 0x0b, 0xbb, 0x88, 0x79, 0x0a, 0xea, 0xca, 0x47, 0x9e, 0xf3, 0xe8,
	0x1e, 0x97, 0x93, 0x3d, 0x5c, 0xac, 0xc0, 0x97, 0xa0, 0xad, 0xce, 0x56, 0x40, 0xe6, 0x54, 0xaf,
	0x1e, 0x6b, 0xc3, 0xc6, 0x64, 0x0f, 0xb7, 0xd4, 0xf5, 0x67, 0x32, 0xa7, 0xf0, 0x1c, 0xb4, 0xf3,
	0x5a, 0x62, 0x41, 0xc4, 0x22, 0x96, 0x85, 0x3c, 0xba, 0x2d, 0x25, 0x2b, 0xcd, 0xb2, 0x7d, 0x91,
	0x30, 0xdc, 0xf2, 0x36, 0xbe, 0xe0, 0x5b, 0x50, 0x9f, 0x53, 0x41, 0x5c, 0x22, 0x88, 0x5e, 0x96,
	0x5e, 0x9f, 0xee, 0x20, 0xf8, 0x94, 0x43, 0x70, 0x01, 0x86, 0x3f, 0xc0, 0x81, 0xcf, 0x89, 0x6b,
	0xd9, 0xc4, 0x27, 0x81, 0xc3, 0x82, 0x99, 0x75, 0x45, 0xd9, 0xcc, 0x13, 0x7a, 0x45, 0xb2, 0x1c,
	0xa2, 0xec, 0xc5, 0x20, 0xf5, 0x62, 0xd0, 0xd7, 0x8f, 0x81, 0x38, 0x19, 0xcb, 0xc2, 0xcc, 0xfd,
	0x95, 0x59, 0x19, 0x95, 0x86, 0x1a, 0xee, 0xa6, 0x1c, 0xa6, 0xa2, 0xf8, 0x2e, 0x19, 0xcc, 0x0e,
	0x78, 0xec, 0xf1, 0x58, 0x58, 0xcc, 0xa5, 0x81, 0x60, 0x53, 0x46, 0xa3, 0xfe, 0x9f, 0x12, 0xe8,
	0x5e, 0x70, 0x87, 0xf8, 0x4c, 0x2c, 0xd7, 0x4d, 0x4b, 0xfb, 0x7e, 0x7e, 0x9d, 0x57, 0xbd, 0xcb,
	0xbe, 0xda, 0xc4, 0x05, 0x18, 0x9e, 0x83, 0x96, 0x6f, 0x5b, 0xaa, 0xd0, 0xb4, 0xbc, 0xf2, 0xb0,
	0x39, 0x7e, 0x7e, 0xc7, 0x7f, 0x5a, 0x4b, 0xe2, 0xa6, 0xbf, 0x21, 0x7f, 0x67, 0x09, 0xe5, 0x87,
	0x96, 0x00, 0x07, 0xa0, 0x1e, 0x46, 0x8c, 0x47, 0x69, 0xb2, 0xaa, 0x7c, 0x7b, 0xf5, 0x95, 0x59,
	0x1d, 0x95, 0xf5, 0xdf, 0x1a, 0x2e, 0x26, 0xf0, 0x1d, 0x68, 0x84, 0x11, 0xff, 0xc5, 0xe6, 0x29,
	0xac, 0x76, 0xbf, 0x28, 0x5e, 0xc3, 0xcd, 0x37, 0xe0, 0x05, 0xe3, 0x59, 0xe0, 0xf4, 0x72, 0xb9,
	0x3b, 0xbb, 0xd9, 0x56, 0x71, 0x2f, 0x53, 0xbe, 0x4b, 0xcd, 0xae, 0x49, 0xe2, 0x93, 0xff, 0x01,
	0x00, 0x00, 0xff, 0xff, 0xf6, 0x0a, 0x15, 0x8d, 0xb6, 0x04, 0x00, 0x00,
}
   0707010000006C000081A4000003E800000064000000015E17A24700005C2B000000000000000000000000000000000000004100000000cilium-proxy-20200109/go/envoy/api/v2/endpoint/load_report.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/endpoint/load_report.proto

package envoy_api_v2_endpoint

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	_struct "github.com/golang/protobuf/ptypes/struct"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// These are stats Envoy reports to GLB every so often. Report frequency is
// defined by
// :ref:`LoadStatsResponse.load_reporting_interval<envoy_api_field_service.load_stats.v2.LoadStatsResponse.load_reporting_interval>`.
// Stats per upstream region/zone and optionally per subzone.
// [#not-implemented-hide:] Not configuration. TBD how to doc proto APIs.
// [#next-free-field: 9]
type UpstreamLocalityStats struct {
	// Name of zone, region and optionally endpoint group these metrics were
	// collected from. Zone and region names could be empty if unknown.
	Locality *core.Locality `protobuf:"bytes,1,opt,name=locality,proto3" json:"locality,omitempty"`
	// The total number of requests successfully completed by the endpoints in the
	// locality.
	TotalSuccessfulRequests uint64 `protobuf:"varint,2,opt,name=total_successful_requests,json=totalSuccessfulRequests,proto3" json:"total_successful_requests,omitempty"`
	// The total number of unfinished requests
	TotalRequestsInProgress uint64 `protobuf:"varint,3,opt,name=total_requests_in_progress,json=totalRequestsInProgress,proto3" json:"total_requests_in_progress,omitempty"`
	// The total number of requests that failed due to errors at the endpoint,
	// aggregated over all endpoints in the locality.
	TotalErrorRequests uint64 `protobuf:"varint,4,opt,name=total_error_requests,json=totalErrorRequests,proto3" json:"total_error_requests,omitempty"`
	// The total number of requests that were issued by this Envoy since
	// the last report. This information is aggregated over all the
	// upstream endpoints in the locality.
	TotalIssuedRequests uint64 `protobuf:"varint,8,opt,name=total_issued_requests,json=totalIssuedRequests,proto3" json:"total_issued_requests,omitempty"`
	// Stats for multi-dimensional load balancing.
	LoadMetricStats []*EndpointLoadMetricStats `protobuf:"bytes,5,rep,name=load_metric_stats,json=loadMetricStats,proto3" json:"load_metric_stats,omitempty"`
	// Endpoint granularity stats information for this locality. This information
	// is populated if the Server requests it by setting
	// :ref:`LoadStatsResponse.report_endpoint_granularity<envoy_api_field_service.load_stats.v2.LoadStatsResponse.report_endpoint_granularity>`.
	UpstreamEndpointStats []*UpstreamEndpointStats `protobuf:"bytes,7,rep,name=upstream_endpoint_stats,json=upstreamEndpointStats,proto3" json:"upstream_endpoint_stats,omitempty"`
	// [#not-implemented-hide:] The priority of the endpoint group these metrics
	// were collected from.
	Priority             uint32   `protobuf:"varint,6,opt,name=priority,proto3" json:"priority,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *UpstreamLocalityStats) Reset()         { *m = UpstreamLocalityStats{} }
func (m *UpstreamLocalityStats) String() string { return proto.CompactTextString(m) }
func (*UpstreamLocalityStats) ProtoMessage()    {}
func (*UpstreamLocalityStats) Descriptor() ([]byte, []int) {
	return fileDescriptor_5134f8f33d8f8d01, []int{0}
}

func (m *UpstreamLocalityStats) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_UpstreamLocalityStats.Unmarshal(m, b)
}
func (m *UpstreamLocalityStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_UpstreamLocalityStats.Marshal(b, m, deterministic)
}
func (m *UpstreamLocalityStats) XXX_Merge(src proto.Message) {
	xxx_messageInfo_UpstreamLocalityStats.Merge(m, src)
}
func (m *UpstreamLocalityStats) XXX_Size() int {
	return xxx_messageInfo_UpstreamLocalityStats.Size(m)
}
func (m *UpstreamLocalityStats) XXX_DiscardUnknown() {
	xxx_messageInfo_UpstreamLocalityStats.DiscardUnknown(m)
}

var xxx_messageInfo_UpstreamLocalityStats proto.InternalMessageInfo

func (m *UpstreamLocalityStats) GetLocality() *core.Locality {
	if m != nil {
		return m.Locality
	}
	return nil
}

func (m *UpstreamLocalityStats) GetTotalSuccessfulRequests() uint64 {
	if m != nil {
		return m.TotalSuccessfulRequests
	}
	return 0
}

func (m *UpstreamLocalityStats) GetTotalRequestsInProgress() uint64 {
	if m != nil {
		return m.TotalRequestsInProgress
	}
	return 0
}

func (m *UpstreamLocalityStats) GetTotalErrorRequests() uint64 {
	if m != nil {
		return m.TotalErrorRequests
	}
	return 0
}

func (m *UpstreamLocalityStats) GetTotalIssuedRequests() uint64 {
	if m != nil {
		return m.TotalIssuedRequests
	}
	return 0
}

func (m *UpstreamLocalityStats) GetLoadMetricStats() []*EndpointLoadMetricStats {
	if m != nil {
		return m.LoadMetricStats
	}
	return nil
}

func (m *UpstreamLocalityStats) GetUpstreamEndpointStats() []*UpstreamEndpointStats {
	if m != nil {
		return m.UpstreamEndpointStats
	}
	return nil
}

func (m *UpstreamLocalityStats) GetPriority() uint32 {
	if m != nil {
		return m.Priority
	}
	return 0
}

// [#not-implemented-hide:] Not configuration. TBD how to doc proto APIs.
// [#next-free-field: 8]
type UpstreamEndpointStats struct {
	// Upstream host address.
	Address *core.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
	// Opaque and implementation dependent metadata of the
	// endpoint. Envoy will pass this directly to the management server.
	Metadata *_struct.Struct `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"`
	// The total number of requests successfully completed by the endpoints in the
	// locality. These include non-5xx responses for HTTP, where errors
	// originate at the client and the endpoint responded successfully. For gRPC,
	// the grpc-status values are those not covered by total_error_requests below.
	TotalSuccessfulRequests uint64 `protobuf:"varint,2,opt,name=total_successful_requests,json=totalSuccessfulRequests,proto3" json:"total_successful_requests,omitempty"`
	// The total number of unfinished requests for this endpoint.
	TotalRequestsInProgress uint64 `protobuf:"varint,3,opt,name=total_requests_in_progress,json=totalRequestsInProgress,proto3" json:"total_requests_in_progress,omitempty"`
	// The total number of requests that failed due to errors at the endpoint.
	// For HTTP these are responses with 5xx status codes and for gRPC the
	// grpc-status values:
	//
	//   - DeadlineExceeded
	//   - Unimplemented
	//   - Internal
	//   - Unavailable
	//   - Unknown
	//   - DataLoss
	TotalErrorRequests uint64 `protobuf:"varint,4,opt,name=total_error_requests,json=totalErrorRequests,proto3" json:"total_error_requests,omitempty"`
	// The total number of requests that were issued to this endpoint
	// since the last report. A single TCP connection, HTTP or gRPC
	// request or stream is counted as one request.
	TotalIssuedRequests uint64 `protobuf:"varint,7,opt,name=total_issued_requests,json=totalIssuedRequests,proto3" json:"total_issued_requests,omitempty"`
	// Stats for multi-dimensional load balancing.
	LoadMetricStats      []*EndpointLoadMetricStats `protobuf:"bytes,5,rep,name=load_metric_stats,json=loadMetricStats,proto3" json:"load_metric_stats,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
	XXX_unrecognized     []byte                     `json:"-"`
	XXX_sizecache        int32                      `json:"-"`
}

func (m *UpstreamEndpointStats) Reset()         { *m = UpstreamEndpointStats{} }
func (m *UpstreamEndpointStats) String() string { return proto.CompactTextString(m) }
func (*UpstreamEndpointStats) ProtoMessage()    {}
func (*UpstreamEndpointStats) Descriptor() ([]byte, []int) {
	return fileDescriptor_5134f8f33d8f8d01, []int{1}
}

func (m *UpstreamEndpointStats) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_UpstreamEndpointStats.Unmarshal(m, b)
}
func (m *UpstreamEndpointStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_UpstreamEndpointStats.Marshal(b, m, deterministic)
}
func (m *UpstreamEndpointStats) XXX_Merge(src proto.Message) {
	xxx_messageInfo_UpstreamEndpointStats.Merge(m, src)
}
func (m *UpstreamEndpointStats) XXX_Size() int {
	return xxx_messageInfo_UpstreamEndpointStats.Size(m)
}
func (m *UpstreamEndpointStats) XXX_DiscardUnknown() {
	xxx_messageInfo_UpstreamEndpointStats.DiscardUnknown(m)
}

var xxx_messageInfo_UpstreamEndpointStats proto.InternalMessageInfo

func (m *UpstreamEndpointStats) GetAddress() *core.Address {
	if m != nil {
		return m.Address
	}
	return nil
}

func (m *UpstreamEndpointStats) GetMetadata() *_struct.Struct {
	if m != nil {
		return m.Metadata
	}
	return nil
}

func (m *UpstreamEndpointStats) GetTotalSuccessfulRequests() uint64 {
	if m != nil {
		return m.TotalSuccessfulRequests
	}
	return 0
}

func (m *UpstreamEndpointStats) GetTotalRequestsInProgress() uint64 {
	if m != nil {
		return m.TotalRequestsInProgress
	}
	return 0
}

func (m *UpstreamEndpointStats) GetTotalErrorRequests() uint64 {
	if m != nil {
		return m.TotalErrorRequests
	}
	return 0
}

func (m *UpstreamEndpointStats) GetTotalIssuedRequests() uint64 {
	if m != nil {
		return m.TotalIssuedRequests
	}
	return 0
}

func (m *UpstreamEndpointStats) GetLoadMetricStats() []*EndpointLoadMetricStats {
	if m != nil {
		return m.LoadMetricStats
	}
	return nil
}

// [#not-implemented-hide:] Not configuration. TBD how to doc proto APIs.
type EndpointLoadMetricStats struct {
	// Name of the metric; may be empty.
	MetricName string `protobuf:"bytes,1,opt,name=metric_name,json=metricName,proto3" json:"metric_name,omitempty"`
	// Number of calls that finished and included this metric.
	NumRequestsFinishedWithMetric uint64 `protobuf:"varint,2,opt,name=num_requests_finished_with_metric,json=numRequestsFinishedWithMetric,proto3" json:"num_requests_finished_with_metric,omitempty"`
	// Sum of metric values across all calls that finished with this metric for
	// load_reporting_interval.
	TotalMetricValue     float64  `protobuf:"fixed64,3,opt,name=total_metric_value,json=totalMetricValue,proto3" json:"total_metric_value,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *EndpointLoadMetricStats) Reset()         { *m = EndpointLoadMetricStats{} }
func (m *EndpointLoadMetricStats) String() string { return proto.CompactTextString(m) }
func (*EndpointLoadMetricStats) ProtoMessage()    {}
func (*EndpointLoadMetricStats) Descriptor() ([]byte, []int) {
	return fileDescriptor_5134f8f33d8f8d01, []int{2}
}

func (m *EndpointLoadMetricStats) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_EndpointLoadMetricStats.Unmarshal(m, b)
}
func (m *EndpointLoadMetricStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_EndpointLoadMetricStats.Marshal(b, m, deterministic)
}
func (m *EndpointLoadMetricStats) XXX_Merge(src proto.Message) {
	xxx_messageInfo_EndpointLoadMetricStats.Merge(m, src)
}
func (m *EndpointLoadMetricStats) XXX_Size() int {
	return xxx_messageInfo_EndpointLoadMetricStats.Size(m)
}
func (m *EndpointLoadMetricStats) XXX_DiscardUnknown() {
	xxx_messageInfo_EndpointLoadMetricStats.DiscardUnknown(m)
}

var xxx_messageInfo_EndpointLoadMetricStats proto.InternalMessageInfo

func (m *EndpointLoadMetricStats) GetMetricName() string {
	if m != nil {
		return m.MetricName
	}
	return ""
}

func (m *EndpointLoadMetricStats) GetNumRequestsFinishedWithMetric() uint64 {
	if m != nil {
		return m.NumRequestsFinishedWithMetric
	}
	return 0
}

func (m *EndpointLoadMetricStats) GetTotalMetricValue() float64 {
	if m != nil {
		return m.TotalMetricValue
	}
	return 0
}

// Per cluster load stats. Envoy reports these stats a management server in a
// :ref:`LoadStatsRequest<envoy_api_msg_service.load_stats.v2.LoadStatsRequest>`
// [#not-implemented-hide:] Not configuration. TBD how to doc proto APIs.
// Next ID: 7
// [#next-free-field: 7]
type ClusterStats struct {
	// The name of the cluster.
	ClusterName string `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"`
	// The eds_cluster_config service_name of the cluster.
	// It's possible that two clusters send the same service_name to EDS,
	// in that case, the management server is supposed to do aggregation on the load reports.
	ClusterServiceName string `protobuf:"bytes,6,opt,name=cluster_service_name,json=clusterServiceName,proto3" json:"cluster_service_name,omitempty"`
	// Need at least one.
	UpstreamLocalityStats []*UpstreamLocalityStats `protobuf:"bytes,2,rep,name=upstream_locality_stats,json=upstreamLocalityStats,proto3" json:"upstream_locality_stats,omitempty"`
	// Cluster-level stats such as total_successful_requests may be computed by
	// summing upstream_locality_stats. In addition, below there are additional
	// cluster-wide stats.
	//
	// The total number of dropped requests. This covers requests
	// deliberately dropped by the drop_overload policy and circuit breaking.
	TotalDroppedRequests uint64 `protobuf:"varint,3,opt,name=total_dropped_requests,json=totalDroppedRequests,proto3" json:"total_dropped_requests,omitempty"`
	// Information about deliberately dropped requests for each category specified
	// in the DropOverload policy.
	DroppedRequests []*ClusterStats_DroppedRequests `protobuf:"bytes,5,rep,name=dropped_requests,json=droppedRequests,proto3" json:"dropped_requests,omitempty"`
	// Period over which the actual load report occurred. This will be guaranteed to include every
	// request reported. Due to system load and delays between the *LoadStatsRequest* sent from Envoy
	// and the *LoadStatsResponse* message sent from the management server, this may be longer than
	// the requested load reporting interval in the *LoadStatsResponse*.
	LoadReportInterval   *duration.Duration `protobuf:"bytes,4,opt,name=load_report_interval,json=loadReportInterval,proto3" json:"load_report_interval,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *ClusterStats) Reset()         { *m = ClusterStats{} }
func (m *ClusterStats) String() string { return proto.CompactTextString(m) }
func (*ClusterStats) ProtoMessage()    {}
func (*ClusterStats) Descriptor() ([]byte, []int) {
	return fileDescriptor_5134f8f33d8f8d01, []int{3}
}

func (m *ClusterStats) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClusterStats.Unmarshal(m, b)
}
func (m *ClusterStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClusterStats.Marshal(b, m, deterministic)
}
func (m *ClusterStats) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClusterStats.Merge(m, src)
}
func (m *ClusterStats) XXX_Size() int {
	return xxx_messageInfo_ClusterStats.Size(m)
}
func (m *ClusterStats) XXX_DiscardUnknown() {
	xxx_messageInfo_ClusterStats.DiscardUnknown(m)
}

var xxx_messageInfo_ClusterStats proto.InternalMessageInfo

func (m *ClusterStats) GetClusterName() string {
	if m != nil {
		return m.ClusterName
	}
	return ""
}

func (m *ClusterStats) GetClusterServiceName() string {
	if m != nil {
		return m.ClusterServiceName
	}
	return ""
}

func (m *ClusterStats) GetUpstreamLocalityStats() []*UpstreamLocalityStats {
	if m != nil {
		return m.UpstreamLocalityStats
	}
	return nil
}

func (m *ClusterStats) GetTotalDroppedRequests() uint64 {
	if m != nil {
		return m.TotalDroppedRequests
	}
	return 0
}

func (m *ClusterStats) GetDroppedRequests() []*ClusterStats_DroppedRequests {
	if m != nil {
		return m.DroppedRequests
	}
	return nil
}

func (m *ClusterStats) GetLoadReportInterval() *duration.Duration {
	if m != nil {
		return m.LoadReportInterval
	}
	return nil
}

type ClusterStats_DroppedRequests struct {
	// Identifier for the policy specifying the drop.
	Category string `protobuf:"bytes,1,opt,name=category,proto3" json:"category,omitempty"`
	// Total number of deliberately dropped requests for the category.
	DroppedCount         uint64   `protobuf:"varint,2,opt,name=dropped_count,json=droppedCount,proto3" json:"dropped_count,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ClusterStats_DroppedRequests) Reset()         { *m = ClusterStats_DroppedRequests{} }
func (m *ClusterStats_DroppedRequests) String() string { return proto.CompactTextString(m) }
func (*ClusterStats_DroppedRequests) ProtoMessage()    {}
func (*ClusterStats_DroppedRequests) Descriptor() ([]byte, []int) {
	return fileDescriptor_5134f8f33d8f8d01, []int{3, 0}
}

func (m *ClusterStats_DroppedRequests) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClusterStats_DroppedRequests.Unmarshal(m, b)
}
func (m *ClusterStats_DroppedRequests) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClusterStats_DroppedRequests.Marshal(b, m, deterministic)
}
func (m *ClusterStats_DroppedRequests) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClusterStats_DroppedRequests.Merge(m, src)
}
func (m *ClusterStats_DroppedRequests) XXX_Size() int {
	return xxx_messageInfo_ClusterStats_DroppedRequests.Size(m)
}
func (m *ClusterStats_DroppedRequests) XXX_DiscardUnknown() {
	xxx_messageInfo_ClusterStats_DroppedRequests.DiscardUnknown(m)
}

var xxx_messageInfo_ClusterStats_DroppedRequests proto.InternalMessageInfo

func (m *ClusterStats_DroppedRequests) GetCategory() string {
	if m != nil {
		return m.Category
	}
	return ""
}

func (m *ClusterStats_DroppedRequests) GetDroppedCount() uint64 {
	if m != nil {
		return m.DroppedCount
	}
	return 0
}

func init() {
	proto.RegisterType((*UpstreamLocalityStats)(nil), "envoy.api.v2.endpoint.UpstreamLocalityStats")
	proto.RegisterType((*UpstreamEndpointStats)(nil), "envoy.api.v2.endpoint.UpstreamEndpointStats")
	proto.RegisterType((*EndpointLoadMetricStats)(nil), "envoy.api.v2.endpoint.EndpointLoadMetricStats")
	proto.RegisterType((*ClusterStats)(nil), "envoy.api.v2.endpoint.ClusterStats")
	proto.RegisterType((*ClusterStats_DroppedRequests)(nil), "envoy.api.v2.endpoint.ClusterStats.DroppedRequests")
}

func init() {
	proto.RegisterFile("envoy/api/v2/endpoint/load_report.proto", fileDescriptor_5134f8f33d8f8d01)
}

var fileDescriptor_5134f8f33d8f8d01 = []byte{
	// 753 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x55, 0x4b, 0x6f, 0xd3, 0x4a,
	0x18, 0x95, 0xd3, 0xb4, 0xc9, 0x9d, 0xb4, 0x4a, 0xef, 0xdc, 0xe6, 0x26, 0xcd, 0xbd, 0xd0, 0x90,
	0x2e, 0x88, 0x50, 0x65, 0x57, 0x69, 0x25, 0x10, 0xac, 0x48, 0x5b, 0x44, 0x45, 0x41, 0x95, 0x23,
	0x40, 0x02, 0x09, 0x6b, 0x6a, 0x4f, 0xd3, 0x91, 0x1c, 0x8f, 0x99, 0x87, 0x21, 0x3f, 0x82, 0x0d,
	0x6b, 0x7e, 0x05, 0x7b, 0xfe, 0x58, 0x57, 0xc8, 0xf3, 0x70, 0x1e, 0x4d, 0x25, 0x76, 0x48, 0xec,
	0xec, 0xef, 0x9c, 0xe3, 0xef, 0x75, 0x66, 0x0c, 0xee, 0xe3, 0x24, 0xa3, 0x13, 0x0f, 0xa5, 0xc4,
	0xcb, 0xfa, 0x1e, 0x4e, 0xa2, 0x94, 0x92, 0x44, 0x78, 0x31, 0x45, 0x51, 0xc0, 0x70, 0x4a, 0x99,
	0x70, 0x53, 0x46, 0x05, 0x85, 0x0d, 0x45, 0x74, 0x51, 0x4a, 0xdc, 0xac, 0xef, 0x5a, 0x62, 0x7b,
	0x67, 0x4e, 0x1f, 0x52, 0x86, 0x3d, 0x14, 0x45, 0x0c, 0x73, 0xae, 0x75, 0xed, 0xff, 0x6f, 0x12,
	0x2e, 0x10, 0xc7, 0x06, 0xbd, 0x3b, 0xa2, 0x74, 0x14, 0x63, 0x4f, 0xbd, 0x5d, 0xc8, 0x4b, 0x2f,
	0x92, 0x0c, 0x09, 0x42, 0x13, 0xab, 0x5e, 0xc4, 0xb9, 0x60, 0x32, 0x34, 0x35, 0xb5, 0x9b, 0x19,
	0x8a, 0x49, 0x84, 0x04, 0xf6, 0xec, 0x83, 0x06, 0xba, 0x5f, 0xca, 0xa0, 0xf1, 0x3a, 0xe5, 0x82,
	0x61, 0x34, 0x3e, 0xa3, 0x21, 0x8a, 0x89, 0x98, 0x0c, 0x05, 0x12, 0x1c, 0x3e, 0x04, 0xd5, 0xd8,
	0x04, 0x5a, 0x4e, 0xc7, 0xe9, 0xd5, 0xfa, 0xff, 0xb9, 0x73, 0x9d, 0xe5, 0x15, 0xba, 0x56, 0xe3,
	0x17, 0x64, 0xf8, 0x18, 0x6c, 0x0b, 0x2a, 0x50, 0x1c, 0x70, 0x19, 0x86, 0x98, 0xf3, 0x4b, 0x19,
	0x07, 0x0c, 0x7f, 0x94, 0x98, 0x0b, 0xde, 0x2a, 0x75, 0x9c, 0x5e, 0xd9, 0x6f, 0x2a, 0xc2, 0xb0,
	0xc0, 0x7d, 0x03, 0xc3, 0x27, 0xa0, 0xad, 0xb5, 0x56, 0x10, 0x90, 0x24, 0x48, 0x19, 0x1d, 0xe5,
	0x73, 0x6a, 0xad, 0xcc, 0x88, 0xad, 0xe4, 0x34, 0x39, 0x37, 0x30, 0xdc, 0x07, 0x5b, 0x5a, 0x8c,
	0x19, 0xa3, 0x6c, 0x9a, 0xb3, 0xac, 0x64, 0x50, 0x61, 0x27, 0x39, 0x54, 0xa4, 0xeb, 0x83, 0x86,
	0x56, 0x10, 0xce, 0x25, 0x8e, 0xa6, 0x92, 0xaa, 0x92, 0xfc, 0xa3, 0xc0, 0x53, 0x85, 0x15, 0x9a,
	0x77, 0xe0, 0x6f, 0xb5, 0xf3, 0x31, 0x16, 0x8c, 0x84, 0x01, 0xcf, 0x87, 0xd5, 0x5a, 0xed, 0xac,
	0xf4, 0x6a, 0x7d, 0xd7, 0x5d, 0xba, 0x7a, 0xf7, 0xc4, 0x3c, 0x9c, 0x51, 0x14, 0xbd, 0x54, 0x32,
	0x35, 0x62, 0xbf, 0x1e, 0xcf, 0x07, 0x60, 0x04, 0x9a, 0xd2, 0x2c, 0x23, 0xb0, 0x6a, 0x93, 0xa1,
	0xa2, 0x32, 0xec, 0xdd, 0x92, 0xc1, 0xae, 0xd0, 0x66, 0xd2, 0xdf, 0x6f, 0xc8, 0x65, 0x61, 0xd8,
	0x06, 0xd5, 0x94, 0x11, 0xca, 0xf2, 0xcd, 0xae, 0x75, 0x9c, 0xde, 0x86, 0x5f, 0xbc, 0x77, 0x7f,
	0xac, 0x4c, 0xfd, 0x30, 0xaf, 0x3a, 0x04, 0x15, 0xe3, 0x57, 0x63, 0x87, 0xf6, 0x12, 0x3b, 0x3c,
	0xd5, 0x0c, 0xdf, 0x52, 0xe1, 0x01, 0xa8, 0x8e, 0xb1, 0x40, 0x11, 0x12, 0x48, 0xe5, 0xaa, 0xf5,
	0x9b, 0xae, 0x76, 0xaa, 0x6b, 0x9d, 0xea, 0x0e, 0x95, 0x53, 0xfd, 0x82, 0xf8, 0x47, 0x38, 0xa8,
	0xf2, 0x5b, 0x1c, 0xd4, 0xfd, 0xee, 0x80, 0xe6, 0x2d, 0x64, 0xb8, 0x03, 0x6a, 0x26, 0x65, 0x82,
	0xc6, 0x58, 0x6d, 0xf1, 0x2f, 0x1f, 0xe8, 0xd0, 0x2b, 0x34, 0xc6, 0xf0, 0x39, 0xb8, 0x97, 0xc8,
	0xf1, 0x74, 0x72, 0x97, 0x24, 0x21, 0xfc, 0x0a, 0x47, 0xc1, 0x27, 0x22, 0xae, 0x4c, 0xb9, 0x66,
	0xfe, 0x77, 0x12, 0x39, 0xb6, 0x0d, 0x3d, 0x33, 0xb4, 0xb7, 0x44, 0x5c, 0xe9, 0x7c, 0x70, 0x0f,
	0xe8, 0x61, 0xd9, 0x1e, 0x33, 0x14, 0x4b, 0xac, 0xa6, 0xef, 0xf8, 0x9b, 0x0a, 0xd1, 0xc4, 0x37,
	0x79, 0xbc, 0xfb, 0xad, 0x0c, 0xd6, 0x8f, 0x62, 0xc9, 0x05, 0x66, 0xba, 0xd2, 0x07, 0x60, 0x3d,
	0xd4, 0xef, 0x33, 0xa5, 0x0e, 0x2a, 0xd7, 0x83, 0x32, 0x2b, 0x75, 0x1c, 0xbf, 0x66, 0x40, 0x55,
	0xf4, 0x3e, 0xd8, 0xb2, 0x5c, 0x8e, 0x59, 0x46, 0x42, 0xac, 0x35, 0x6b, 0xaa, 0x3d, 0x68, 0xb0,
	0xa1, 0x86, 0x94, 0x22, 0x99, 0x39, 0x65, 0xf6, 0xd6, 0x32, 0x5b, 0x28, 0xfd, 0xd2, 0x29, 0x9b,
	0xbb, 0x28, 0x07, 0xd5, 0xeb, 0xc1, 0xea, 0x57, 0xa7, 0x54, 0x75, 0xa6, 0xe7, 0x6d, 0xfe, 0x26,
	0x3d, 0x04, 0xff, 0xea, 0x61, 0x44, 0x8c, 0xa6, 0xe9, 0xac, 0x49, 0xb4, 0x1d, 0xb5, 0xe7, 0x8e,
	0x35, 0x58, 0xb8, 0xe4, 0x03, 0xd8, 0xbc, 0xc1, 0xd7, 0x26, 0x39, 0xb8, 0xa5, 0xbc, 0xd9, 0x11,
	0xba, 0x0b, 0x9f, 0xf3, 0xeb, 0xd1, 0xc2, 0xf7, 0x5f, 0x80, 0xad, 0x99, 0x7f, 0x57, 0x40, 0x12,
	0x81, 0x59, 0x86, 0x62, 0xe5, 0xf5, 0x5a, 0x7f, 0xfb, 0xc6, 0x29, 0x3d, 0x36, 0xff, 0x1b, 0x1f,
	0xe6, 0x32, 0x5f, 0xa9, 0x4e, 0x8d, 0xa8, 0xfd, 0x1e, 0xd4, 0x17, 0xeb, 0xdf, 0x05, 0xd5, 0x10,
	0x09, 0x3c, 0xa2, 0x6c, 0xb2, 0xb8, 0xbf, 0x02, 0x80, 0xbb, 0x60, 0xc3, 0x36, 0x19, 0x52, 0x99,
	0x08, 0xe3, 0xae, 0x75, 0x13, 0x3c, 0xca, 0x63, 0x83, 0x47, 0x60, 0x97, 0x50, 0xdd, 0x73, 0xca,
	0xe8, 0xe7, 0xc9, 0xf2, 0xf6, 0x07, 0xf5, 0xb3, 0xa2, 0xae, 0xf3, 0xbc, 0xe8, 0x73, 0xe7, 0x62,
	0x4d, 0x55, 0x7f, 0xf0, 0x33, 0x00, 0x00, 0xff, 0xff, 0xdd, 0x92, 0x77, 0xb5, 0xbc, 0x07, 0x00,
	0x00,
}
 0707010000006D000081A4000003E800000064000000015E17A247000094C2000000000000000000000000000000000000003000000000cilium-proxy-20200109/go/envoy/api/v2/lds.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/lds.proto

package envoy_api_v2

import (
	context "context"
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	listener "github.com/cilium/proxy/go/envoy/api/v2/listener"
	v2 "github.com/cilium/proxy/go/envoy/config/listener/v2"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type Listener_DrainType int32

const (
	// Drain in response to calling /healthcheck/fail admin endpoint (along with the health check
	// filter), listener removal/modification, and hot restart.
	Listener_DEFAULT Listener_DrainType = 0
	// Drain in response to listener removal/modification and hot restart. This setting does not
	// include /healthcheck/fail. This setting may be desirable if Envoy is hosting both ingress
	// and egress listeners.
	Listener_MODIFY_ONLY Listener_DrainType = 1
)

var Listener_DrainType_name = map[int32]string{
	0: "DEFAULT",
	1: "MODIFY_ONLY",
}

var Listener_DrainType_value = map[string]int32{
	"DEFAULT":     0,
	"MODIFY_ONLY": 1,
}

func (x Listener_DrainType) String() string {
	return proto.EnumName(Listener_DrainType_name, int32(x))
}

func (Listener_DrainType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_34e2cd84a105bcd1, []int{0, 0}
}

// [#next-free-field: 21]
type Listener struct {
	// The unique name by which this listener is known. If no name is provided,
	// Envoy will allocate an internal UUID for the listener. If the listener is to be dynamically
	// updated or removed via :ref:`LDS <config_listeners_lds>` a unique name must be provided.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The address that the listener should listen on. In general, the address must be unique, though
	// that is governed by the bind rules of the OS. E.g., multiple listeners can listen on port 0 on
	// Linux as the actual port will be allocated by the OS.
	Address *core.Address `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
	// A list of filter chains to consider for this listener. The
	// :ref:`FilterChain <envoy_api_msg_listener.FilterChain>` with the most specific
	// :ref:`FilterChainMatch <envoy_api_msg_listener.FilterChainMatch>` criteria is used on a
	// connection.
	//
	// Example using SNI for filter chain selection can be found in the
	// :ref:`FAQ entry <faq_how_to_setup_sni>`.
	FilterChains []*listener.FilterChain `protobuf:"bytes,3,rep,name=filter_chains,json=filterChains,proto3" json:"filter_chains,omitempty"`
	// If a connection is redirected using *iptables*, the port on which the proxy
	// receives it might be different from the original destination address. When this flag is set to
	// true, the listener hands off redirected connections to the listener associated with the
	// original destination address. If there is no listener associated with the original destination
	// address, the connection is handled by the listener that receives it. Defaults to false.
	//
	// .. attention::
	//
	//   This field is deprecated. Use :ref:`an original_dst <config_listener_filters_original_dst>`
	//   :ref:`listener filter <envoy_api_field_Listener.listener_filters>` instead.
	//
	//   Note that hand off to another listener is *NOT* performed without this flag. Once
	//   :ref:`FilterChainMatch <envoy_api_msg_listener.FilterChainMatch>` is implemented this flag
	//   will be removed, as filter chain matching can be used to select a filter chain based on the
	//   restored destination address.
	UseOriginalDst *wrappers.BoolValue `protobuf:"bytes,4,opt,name=use_original_dst,json=useOriginalDst,proto3" json:"use_original_dst,omitempty"` // Deprecated: Do not use.
	// Soft limit on size of the listener’s new connection read and write buffers.
	// If unspecified, an implementation defined default is applied (1MiB).
	PerConnectionBufferLimitBytes *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=per_connection_buffer_limit_bytes,json=perConnectionBufferLimitBytes,proto3" json:"per_connection_buffer_limit_bytes,omitempty"`
	// Listener metadata.
	Metadata *core.Metadata `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"`
	// [#not-implemented-hide:]
	DeprecatedV1 *Listener_DeprecatedV1 `protobuf:"bytes,7,opt,name=deprecated_v1,json=deprecatedV1,proto3" json:"deprecated_v1,omitempty"`
	// The type of draining to perform at a listener-wide level.
	DrainType Listener_DrainType `protobuf:"varint,8,opt,name=drain_type,json=drainType,proto3,enum=envoy.api.v2.Listener_DrainType" json:"drain_type,omitempty"`
	// Listener filters have the opportunity to manipulate and augment the connection metadata that
	// is used in connection filter chain matching, for example. These filters are run before any in
	// :ref:`filter_chains <envoy_api_field_Listener.filter_chains>`. Order matters as the
	// filters are processed sequentially right after a socket has been accepted by the listener, and
	// before a connection is created.
	// UDP Listener filters can be specified when the protocol in the listener socket address in
	// :ref:`protocol <envoy_api_field_core.SocketAddress.protocol>` is :ref:`UDP
	// <envoy_api_enum_value_core.SocketAddress.Protocol.UDP>`.
	// UDP listeners currently support a single filter.
	ListenerFilters []*listener.ListenerFilter `protobuf:"bytes,9,rep,name=listener_filters,json=listenerFilters,proto3" json:"listener_filters,omitempty"`
	// The timeout to wait for all listener filters to complete operation. If the timeout is reached,
	// the accepted socket is closed without a connection being created unless
	// `continue_on_listener_filters_timeout` is set to true. Specify 0 to disable the
	// timeout. If not specified, a default timeout of 15s is used.
	ListenerFiltersTimeout *duration.Duration `protobuf:"bytes,15,opt,name=listener_filters_timeout,json=listenerFiltersTimeout,proto3" json:"listener_filters_timeout,omitempty"`
	// Whether a connection should be created when listener filters timeout. Default is false.
	//
	// .. attention::
	//
	//   Some listener filters, such as :ref:`Proxy Protocol filter
	//   <config_listener_filters_proxy_protocol>`, should not be used with this option. It will cause
	//   unexpected behavior when a connection is created.
	ContinueOnListenerFiltersTimeout bool `protobuf:"varint,17,opt,name=continue_on_listener_filters_timeout,json=continueOnListenerFiltersTimeout,proto3" json:"continue_on_listener_filters_timeout,omitempty"`
	// Whether the listener should be set as a transparent socket.
	// When this flag is set to true, connections can be redirected to the listener using an
	// *iptables* *TPROXY* target, in which case the original source and destination addresses and
	// ports are preserved on accepted connections. This flag should be used in combination with
	// :ref:`an original_dst <config_listener_filters_original_dst>` :ref:`listener filter
	// <envoy_api_field_Listener.listener_filters>` to mark the connections' local addresses as
	// "restored." This can be used to hand off each redirected connection to another listener
	// associated with the connection's destination address. Direct connections to the socket without
	// using *TPROXY* cannot be distinguished from connections redirected using *TPROXY* and are
	// therefore treated as if they were redirected.
	// When this flag is set to false, the listener's socket is explicitly reset as non-transparent.
	// Setting this flag requires Envoy to run with the *CAP_NET_ADMIN* capability.
	// When this flag is not set (default), the socket is not modified, i.e. the transparent option
	// is neither set nor reset.
	Transparent *wrappers.BoolValue `protobuf:"bytes,10,opt,name=transparent,proto3" json:"transparent,omitempty"`
	// Whether the listener should set the *IP_FREEBIND* socket option. When this
	// flag is set to true, listeners can be bound to an IP address that is not
	// configured on the system running Envoy. When this flag is set to false, the
	// option *IP_FREEBIND* is disabled on the socket. When this flag is not set
	// (default), the socket is not modified, i.e. the option is neither enabled
	// nor disabled.
	Freebind *wrappers.BoolValue `protobuf:"bytes,11,opt,name=freebind,proto3" json:"freebind,omitempty"`
	// Additional socket options that may not be present in Envoy source code or
	// precompiled binaries.
	SocketOptions []*core.SocketOption `protobuf:"bytes,13,rep,name=socket_options,json=socketOptions,proto3" json:"socket_options,omitempty"`
	// Whether the listener should accept TCP Fast Open (TFO) connections.
	// When this flag is set to a value greater than 0, the option TCP_FASTOPEN is enabled on
	// the socket, with a queue length of the specified size
	// (see `details in RFC7413 <https://tools.ietf.org/html/rfc7413#section-5.1>`_).
	// When this flag is set to 0, the option TCP_FASTOPEN is disabled on the socket.
	// When this flag is not set (default), the socket is not modified,
	// i.e. the option is neither enabled nor disabled.
	//
	// On Linux, the net.ipv4.tcp_fastopen kernel parameter must include flag 0x2 to enable
	// TCP_FASTOPEN.
	// See `ip-sysctl.txt <https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt>`_.
	//
	// On macOS, only values of 0, 1, and unset are valid; other values may result in an error.
	// To set the queue length on macOS, set the net.inet.tcp.fastopen_backlog kernel parameter.
	TcpFastOpenQueueLength *wrappers.UInt32Value `protobuf:"bytes,12,opt,name=tcp_fast_open_queue_length,json=tcpFastOpenQueueLength,proto3" json:"tcp_fast_open_queue_length,omitempty"`
	// Specifies the intended direction of the traffic relative to the local Envoy.
	TrafficDirection core.TrafficDirection `protobuf:"varint,16,opt,name=traffic_direction,json=trafficDirection,proto3,enum=envoy.api.v2.core.TrafficDirection" json:"traffic_direction,omitempty"`
	// If the protocol in the listener socket address in :ref:`protocol
	// <envoy_api_field_core.SocketAddress.protocol>` is :ref:`UDP
	// <envoy_api_enum_value_core.SocketAddress.Protocol.UDP>`, this field specifies the actual udp
	// listener to create, i.e. :ref:`udp_listener_name
	// <envoy_api_field_listener.UdpListenerConfig.udp_listener_name>` = "raw_udp_listener" for
	// creating a packet-oriented UDP listener. If not present, treat it as "raw_udp_listener".
	UdpListenerConfig *listener.UdpListenerConfig `protobuf:"bytes,18,opt,name=udp_listener_config,json=udpListenerConfig,proto3" json:"udp_listener_config,omitempty"`
	// [#not-implemented-hide:]
	// Used to represent an API listener, which is used in non-proxy clients. The type of API
	// exposed to the non-proxy application depends on the type of API listener.
	// When this field is set, no other field except for :ref:`name<envoy_api_field_Listener.name>`
	// should be set.
	// [#next-major-version: In the v3 API, instead of this messy approach where the socket
	// listener fields are directly in the top-level Listener message and the API listener types
	// are in the ApiListener message, the socket listener messages should be in their own message,
	// and the top-level Listener should essentially be a oneof that selects between the
	// socket listener and the various types of API listener. That way, a given Listener message
	// can structurally only contain the fields of the relevant type.]
	ApiListener *v2.ApiListener `protobuf:"bytes,19,opt,name=api_listener,json=apiListener,proto3" json:"api_listener,omitempty"`
	// The listener's connection balancer configuration, currently only applicable to TCP listeners.
	// If no configuration is specified, Envoy will not attempt to balance active connections between
	// worker threads.
	ConnectionBalanceConfig *Listener_ConnectionBalanceConfig `protobuf:"bytes,20,opt,name=connection_balance_config,json=connectionBalanceConfig,proto3" json:"connection_balance_config,omitempty"`
	XXX_NoUnkeyedLiteral    struct{}                          `json:"-"`
	XXX_unrecognized        []byte                            `json:"-"`
	XXX_sizecache           int32                             `json:"-"`
}

func (m *Listener) Reset()         { *m = Listener{} }
func (m *Listener) String() string { return proto.CompactTextString(m) }
func (*Listener) ProtoMessage()    {}
func (*Listener) Descriptor() ([]byte, []int) {
	return fileDescriptor_34e2cd84a105bcd1, []int{0}
}

func (m *Listener) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Listener.Unmarshal(m, b)
}
func (m *Listener) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Listener.Marshal(b, m, deterministic)
}
func (m *Listener) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Listener.Merge(m, src)
}
func (m *Listener) XXX_Size() int {
	return xxx_messageInfo_Listener.Size(m)
}
func (m *Listener) XXX_DiscardUnknown() {
	xxx_messageInfo_Listener.DiscardUnknown(m)
}

var xxx_messageInfo_Listener proto.InternalMessageInfo

func (m *Listener) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Listener) GetAddress() *core.Address {
	if m != nil {
		return m.Address
	}
	return nil
}

func (m *Listener) GetFilterChains() []*listener.FilterChain {
	if m != nil {
		return m.FilterChains
	}
	return nil
}

// Deprecated: Do not use.
func (m *Listener) GetUseOriginalDst() *wrappers.BoolValue {
	if m != nil {
		return m.UseOriginalDst
	}
	return nil
}

func (m *Listener) GetPerConnectionBufferLimitBytes() *wrappers.UInt32Value {
	if m != nil {
		return m.PerConnectionBufferLimitBytes
	}
	return nil
}

func (m *Listener) GetMetadata() *core.Metadata {
	if m != nil {
		return m.Metadata
	}
	return nil
}

func (m *Listener) GetDeprecatedV1() *Listener_DeprecatedV1 {
	if m != nil {
		return m.DeprecatedV1
	}
	return nil
}

func (m *Listener) GetDrainType() Listener_DrainType {
	if m != nil {
		return m.DrainType
	}
	return Listener_DEFAULT
}

func (m *Listener) GetListenerFilters() []*listener.ListenerFilter {
	if m != nil {
		return m.ListenerFilters
	}
	return nil
}

func (m *Listener) GetListenerFiltersTimeout() *duration.Duration {
	if m != nil {
		return m.ListenerFiltersTimeout
	}
	return nil
}

func (m *Listener) GetContinueOnListenerFiltersTimeout() bool {
	if m != nil {
		return m.ContinueOnListenerFiltersTimeout
	}
	return false
}

func (m *Listener) GetTransparent() *wrappers.BoolValue {
	if m != nil {
		return m.Transparent
	}
	return nil
}

func (m *Listener) GetFreebind() *wrappers.BoolValue {
	if m != nil {
		return m.Freebind
	}
	return nil
}

func (m *Listener) GetSocketOptions() []*core.SocketOption {
	if m != nil {
		return m.SocketOptions
	}
	return nil
}

func (m *Listener) GetTcpFastOpenQueueLength() *wrappers.UInt32Value {
	if m != nil {
		return m.TcpFastOpenQueueLength
	}
	return nil
}

func (m *Listener) GetTrafficDirection() core.TrafficDirection {
	if m != nil {
		return m.TrafficDirection
	}
	return core.TrafficDirection_UNSPECIFIED
}

func (m *Listener) GetUdpListenerConfig() *listener.UdpListenerConfig {
	if m != nil {
		return m.UdpListenerConfig
	}
	return nil
}

func (m *Listener) GetApiListener() *v2.ApiListener {
	if m != nil {
		return m.ApiListener
	}
	return nil
}

func (m *Listener) GetConnectionBalanceConfig() *Listener_ConnectionBalanceConfig {
	if m != nil {
		return m.ConnectionBalanceConfig
	}
	return nil
}

// [#not-implemented-hide:]
type Listener_DeprecatedV1 struct {
	// Whether the listener should bind to the port. A listener that doesn't
	// bind can only receive connections redirected from other listeners that
	// set use_original_dst parameter to true. Default is true.
	//
	// This is deprecated in v2, all Listeners will bind to their port. An
	// additional filter chain must be created for every original destination
	// port this listener may redirect to in v2, with the original port
	// specified in the FilterChainMatch destination_port field.
	//
	// [#comment:TODO(PiotrSikora): Remove this once verified that we no longer need it.]
	BindToPort           *wrappers.BoolValue `protobuf:"bytes,1,opt,name=bind_to_port,json=bindToPort,proto3" json:"bind_to_port,omitempty"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *Listener_DeprecatedV1) Reset()         { *m = Listener_DeprecatedV1{} }
func (m *Listener_DeprecatedV1) String() string { return proto.CompactTextString(m) }
func (*Listener_DeprecatedV1) ProtoMessage()    {}
func (*Listener_DeprecatedV1) Descriptor() ([]byte, []int) {
	return fileDescriptor_34e2cd84a105bcd1, []int{0, 0}
}

func (m *Listener_DeprecatedV1) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Listener_DeprecatedV1.Unmarshal(m, b)
}
func (m *Listener_DeprecatedV1) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Listener_DeprecatedV1.Marshal(b, m, deterministic)
}
func (m *Listener_DeprecatedV1) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Listener_DeprecatedV1.Merge(m, src)
}
func (m *Listener_DeprecatedV1) XXX_Size() int {
	return xxx_messageInfo_Listener_DeprecatedV1.Size(m)
}
func (m *Listener_DeprecatedV1) XXX_DiscardUnknown() {
	xxx_messageInfo_Listener_DeprecatedV1.DiscardUnknown(m)
}

var xxx_messageInfo_Listener_DeprecatedV1 proto.InternalMessageInfo

func (m *Listener_DeprecatedV1) GetBindToPort() *wrappers.BoolValue {
	if m != nil {
		return m.BindToPort
	}
	return nil
}

// Configuration for listener connection balancing.
type Listener_ConnectionBalanceConfig struct {
	// Types that are valid to be assigned to BalanceType:
	//	*Listener_ConnectionBalanceConfig_ExactBalance_
	BalanceType          isListener_ConnectionBalanceConfig_BalanceType `protobuf_oneof:"balance_type"`
	XXX_NoUnkeyedLiteral struct{}                                       `json:"-"`
	XXX_unrecognized     []byte                                         `json:"-"`
	XXX_sizecache        int32                                          `json:"-"`
}

func (m *Listener_ConnectionBalanceConfig) Reset()         { *m = Listener_ConnectionBalanceConfig{} }
func (m *Listener_ConnectionBalanceConfig) String() string { return proto.CompactTextString(m) }
func (*Listener_ConnectionBalanceConfig) ProtoMessage()    {}
func (*Listener_ConnectionBalanceConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_34e2cd84a105bcd1, []int{0, 1}
}

func (m *Listener_ConnectionBalanceConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Listener_ConnectionBalanceConfig.Unmarshal(m, b)
}
func (m *Listener_ConnectionBalanceConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Listener_ConnectionBalanceConfig.Marshal(b, m, deterministic)
}
func (m *Listener_ConnectionBalanceConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Listener_ConnectionBalanceConfig.Merge(m, src)
}
func (m *Listener_ConnectionBalanceConfig) XXX_Size() int {
	return xxx_messageInfo_Listener_ConnectionBalanceConfig.Size(m)
}
func (m *Listener_ConnectionBalanceConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_Listener_ConnectionBalanceConfig.DiscardUnknown(m)
}

var xxx_messageInfo_Listener_ConnectionBalanceConfig proto.InternalMessageInfo

type isListener_ConnectionBalanceConfig_BalanceType interface {
	isListener_ConnectionBalanceConfig_BalanceType()
}

type Listener_ConnectionBalanceConfig_ExactBalance_ struct {
	ExactBalance *Listener_ConnectionBalanceConfig_ExactBalance `protobuf:"bytes,1,opt,name=exact_balance,json=exactBalance,proto3,oneof"`
}

func (*Listener_ConnectionBalanceConfig_ExactBalance_) isListener_ConnectionBalanceConfig_BalanceType() {
}

func (m *Listener_ConnectionBalanceConfig) GetBalanceType() isListener_ConnectionBalanceConfig_BalanceType {
	if m != nil {
		return m.BalanceType
	}
	return nil
}

func (m *Listener_ConnectionBalanceConfig) GetExactBalance() *Listener_ConnectionBalanceConfig_ExactBalance {
	if x, ok := m.GetBalanceType().(*Listener_ConnectionBalanceConfig_ExactBalance_); ok {
		return x.ExactBalance
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Listener_ConnectionBalanceConfig) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Listener_ConnectionBalanceConfig_ExactBalance_)(nil),
	}
}

// A connection balancer implementation that does exact balancing. This means that a lock is
// held during balancing so that connection counts are nearly exactly balanced between worker
// threads. This is "nearly" exact in the sense that a connection might close in parallel thus
// making the counts incorrect, but this should be rectified on the next accept. This balancer
// sacrifices accept throughput for accuracy and should be used when there are a small number of
// connections that rarely cycle (e.g., service mesh gRPC egress).
type Listener_ConnectionBalanceConfig_ExactBalance struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Listener_ConnectionBalanceConfig_ExactBalance) Reset() {
	*m = Listener_ConnectionBalanceConfig_ExactBalance{}
}
func (m *Listener_ConnectionBalanceConfig_ExactBalance) String() string {
	return proto.CompactTextString(m)
}
func (*Listener_ConnectionBalanceConfig_ExactBalance) ProtoMessage() {}
func (*Listener_ConnectionBalanceConfig_ExactBalance) Descriptor() ([]byte, []int) {
	return fileDescriptor_34e2cd84a105bcd1, []int{0, 1, 0}
}

func (m *Listener_ConnectionBalanceConfig_ExactBalance) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Listener_ConnectionBalanceConfig_ExactBalance.Unmarshal(m, b)
}
func (m *Listener_ConnectionBalanceConfig_ExactBalance) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Listener_ConnectionBalanceConfig_ExactBalance.Marshal(b, m, deterministic)
}
func (m *Listener_ConnectionBalanceConfig_ExactBalance) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Listener_ConnectionBalanceConfig_ExactBalance.Merge(m, src)
}
func (m *Listener_ConnectionBalanceConfig_ExactBalance) XXX_Size() int {
	return xxx_messageInfo_Listener_ConnectionBalanceConfig_ExactBalance.Size(m)
}
func (m *Listener_ConnectionBalanceConfig_ExactBalance) XXX_DiscardUnknown() {
	xxx_messageInfo_Listener_ConnectionBalanceConfig_ExactBalance.DiscardUnknown(m)
}

var xxx_messageInfo_Listener_ConnectionBalanceConfig_ExactBalance proto.InternalMessageInfo

func init() {
	proto.RegisterEnum("envoy.api.v2.Listener_DrainType", Listener_DrainType_name, Listener_DrainType_value)
	proto.RegisterType((*Listener)(nil), "envoy.api.v2.Listener")
	proto.RegisterType((*Listener_DeprecatedV1)(nil), "envoy.api.v2.Listener.DeprecatedV1")
	proto.RegisterType((*Listener_ConnectionBalanceConfig)(nil), "envoy.api.v2.Listener.ConnectionBalanceConfig")
	proto.RegisterType((*Listener_ConnectionBalanceConfig_ExactBalance)(nil), "envoy.api.v2.Listener.ConnectionBalanceConfig.ExactBalance")
}

func init() { proto.RegisterFile("envoy/api/v2/lds.proto", fileDescriptor_34e2cd84a105bcd1) }

var fileDescriptor_34e2cd84a105bcd1 = []byte{
	// 1037 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdd, 0x6e, 0x1b, 0x45,
	0x14, 0xee, 0xa6, 0x3f, 0x71, 0xc6, 0x3f, 0x71, 0x26, 0x28, 0xd9, 0x9a, 0xd0, 0x18, 0x37, 0x48,
	0x86, 0x4a, 0x6b, 0xea, 0x4a, 0x20, 0x95, 0x0a, 0x14, 0xc7, 0x35, 0x29, 0x72, 0xeb, 0xb0, 0x49,
	0xaa, 0xf4, 0x6a, 0x35, 0xde, 0x3d, 0x9b, 0x0c, 0x6c, 0x66, 0xb6, 0x33, 0xb3, 0xa6, 0xbe, 0xe5,
	0x0a, 0x71, 0xcb, 0x1b, 0xf0, 0x08, 0x3c, 0x08, 0x37, 0xbc, 0x02, 0x0f, 0x81, 0xb8, 0x42, 0x3b,
	0xbb, 0xe3, 0xd8, 0x8e, 0xdd, 0x82, 0xc4, 0xdd, 0x9c, 0x39, 0xdf, 0xf7, 0xf9, 0xcc, 0x39, 0xdf,
	0x9e, 0x04, 0x6d, 0x01, 0x1b, 0xf1, 0x71, 0x8b, 0xc4, 0xb4, 0x35, 0x6a, 0xb7, 0xa2, 0x40, 0x3a,
	0xb1, 0xe0, 0x8a, 0xe3, 0x92, 0xbe, 0x77, 0x48, 0x4c, 0x9d, 0x51, 0xbb, 0xb6, 0x3b, 0x83, 0xf2,
	0xb9, 0x80, 0x16, 0x09, 0x02, 0x01, 0x32, 0x87, 0xd7, 0x76, 0xae, 0x03, 0x86, 0x44, 0xc2, 0xc2,
	0x6c, 0x40, 0xa5, 0xcf, 0x47, 0x20, 0xc6, 0x79, 0x76, 0x6f, 0xb6, 0x04, 0x2a, 0x15, 0x30, 0x10,
	0x93, 0x43, 0x8e, 0x6a, 0x2d, 0x46, 0x25, 0x41, 0xec, 0x99, 0xc0, 0xf3, 0x39, 0x0b, 0xe9, 0x79,
	0x4e, 0x78, 0x90, 0x11, 0xb2, 0xbb, 0x2b, 0xc2, 0xa8, 0x9d, 0x6a, 0x78, 0x73, 0xea, 0x3b, 0xe7,
	0x9c, 0x9f, 0x47, 0xa0, 0xe5, 0x09, 0x63, 0x5c, 0x11, 0x45, 0x39, 0x33, 0xaf, 0xbb, 0x97, 0x67,
	0x75, 0x34, 0x4c, 0xc2, 0x56, 0x90, 0x08, 0x0d, 0x58, 0x96, 0xff, 0x41, 0x90, 0x38, 0x06, 0x61,
	0xf8, 0xdb, 0x23, 0x12, 0xd1, 0x80, 0x28, 0x68, 0x99, 0x43, 0x96, 0x68, 0xfc, 0x56, 0x46, 0x85,
	0x7e, 0x5e, 0x09, 0xc6, 0xe8, 0x16, 0x23, 0x97, 0x60, 0x5b, 0x75, 0xab, 0xb9, 0xe6, 0xea, 0x33,
	0xfe, 0x12, 0xad, 0xe6, 0x8d, 0xb6, 0x57, 0xea, 0x56, 0xb3, 0xd8, 0xae, 0x39, 0xd3, 0x83, 0x71,
	0xd2, 0x4e, 0x3b, 0xfb, 0x19, 0xa2, 0x53, 0xf8, 0xbb, 0x73, 0xfb, 0x67, 0x6b, 0xa5, 0x6a, 0xb9,
	0x86, 0x84, 0xbf, 0x46, 0xe5, 0x90, 0x46, 0x2a, 0xed, 0xcd, 0x05, 0xa1, 0x4c, 0xda, 0x37, 0xeb,
	0x37, 0x9b, 0xc5, 0x76, 0x63, 0x56, 0x65, 0xd2, 0x8c, 0x9e, 0xc6, 0x1e, 0xa4, 0x50, 0xb7, 0x14,
	0x5e, 0x05, 0x12, 0x1f, 0xa2, 0x6a, 0x22, 0xc1, 0xe3, 0x82, 0x9e, 0x53, 0x46, 0x22, 0x2f, 0x90,
	0xca, 0xbe, 0x95, 0x57, 0x94, 0xbd, 0xde, 0x31, 0xaf, 0x77, 0x3a, 0x9c, 0x47, 0x2f, 0x49, 0x94,
	0x40, 0x67, 0xc5, 0xb6, 0xdc, 0x4a, 0x22, 0x61, 0x90, 0xd3, 0xba, 0x52, 0xe1, 0x10, 0x7d, 0x18,
	0x67, 0xb3, 0x62, 0xe0, 0xa7, 0x4d, 0xf4, 0x86, 0x49, 0x18, 0x82, 0xf0, 0x22, 0x7a, 0x49, 0x95,
	0x37, 0x1c, 0x2b, 0x90, 0xf6, 0x6d, 0x2d, 0xbd, 0x73, 0x4d, 0xfa, 0xf4, 0x19, 0x53, 0x8f, 0xda,
	0x5a, 0xdc, 0xfd, 0x20, 0x06, 0x71, 0x30, 0x51, 0xe9, 0x68, 0x91, 0x7e, 0xaa, 0xd1, 0x49, 0x25,
	0xf0, 0xe7, 0xa8, 0x70, 0x09, 0x8a, 0x04, 0x44, 0x11, 0xfb, 0x8e, 0x96, 0x7b, 0x7f, 0x41, 0xef,
	0x9e, 0xe7, 0x10, 0x77, 0x02, 0xc6, 0x87, 0xa8, 0x1c, 0x40, 0x2c, 0xc0, 0x27, 0x0a, 0x02, 0x6f,
	0xf4, 0xd0, 0x5e, 0xd5, 0xec, 0xfb, 0xb3, 0x6c, 0x33, 0x36, 0xa7, 0x3b, 0xc1, 0xbe, 0x7c, 0xe8,
	0x96, 0x82, 0xa9, 0x08, 0x7f, 0x85, 0x50, 0x20, 0x08, 0x65, 0x9e, 0x1a, 0xc7, 0x60, 0x17, 0xea,
	0x56, 0xb3, 0xd2, 0xae, 0x2f, 0x93, 0x49, 0x81, 0x27, 0xe3, 0x18, 0xdc, 0xb5, 0xc0, 0x1c, 0xf1,
	0x11, 0xaa, 0x4e, 0xcc, 0x9d, 0x8d, 0x43, 0xda, 0x6b, 0x7a, 0x82, 0x1f, 0x2d, 0x99, 0xa0, 0xd1,
	0xcb, 0x26, 0xe9, 0xae, 0x47, 0x33, 0xb1, 0xc4, 0xc7, 0xc8, 0x9e, 0x57, 0xf4, 0x14, 0xbd, 0x04,
	0x9e, 0x28, 0x7b, 0x5d, 0xbf, 0xf3, 0xee, 0xb5, 0xa6, 0x77, 0x73, 0xb7, 0xbb, 0x5b, 0x73, 0x6a,
	0x27, 0x19, 0x11, 0xbf, 0x40, 0x7b, 0x3e, 0x67, 0x8a, 0xb2, 0x04, 0x3c, 0xce, 0xbc, 0xa5, 0x3f,
	0xb0, 0x51, 0xb7, 0x9a, 0x05, 0xb7, 0x6e, 0xb0, 0x03, 0xd6, 0x5f, 0xac, 0xf7, 0x04, 0x15, 0x95,
	0x20, 0x4c, 0xc6, 0x44, 0x00, 0x53, 0x36, 0x7a, 0x97, 0xcf, 0xdc, 0x69, 0x38, 0xfe, 0x0c, 0x15,
	0x42, 0x01, 0x30, 0xa4, 0x2c, 0xb0, 0x8b, 0xef, 0xa4, 0x4e, 0xb0, 0xb8, 0x87, 0x2a, 0x92, 0xfb,
	0xdf, 0x83, 0xf2, 0x78, 0xac, 0xbf, 0x7e, 0xbb, 0xac, 0x5b, 0xbd, 0xbb, 0xc0, 0x36, 0xc7, 0x1a,
	0x38, 0xd0, 0x38, 0xb7, 0x2c, 0xa7, 0x22, 0x89, 0xcf, 0x50, 0x4d, 0xf9, 0xb1, 0x17, 0x12, 0x99,
	0x2a, 0x01, 0xf3, 0x5e, 0x27, 0x90, 0x80, 0x17, 0x01, 0x3b, 0x57, 0x17, 0x76, 0xe9, 0x5f, 0x38,
	0x7b, 0x4b, 0xf9, 0x71, 0x8f, 0x48, 0x35, 0x88, 0x81, 0x7d, 0x9b, 0x92, 0xfb, 0x9a, 0x8b, 0x8f,
	0xd0, 0x86, 0x12, 0x24, 0x0c, 0xa9, 0xef, 0x05, 0x54, 0x64, 0xbe, 0xb7, 0xab, 0xda, 0x56, 0xf7,
	0x17, 0x14, 0x79, 0x92, 0x61, 0xbb, 0x06, 0xea, 0x56, 0xd5, 0xdc, 0x0d, 0x3e, 0x43, 0x9b, 0x0b,
	0x36, 0xa8, 0x8d, 0x75, 0x91, 0xcd, 0x25, 0x1e, 0x3b, 0x0d, 0x62, 0x33, 0xb8, 0x03, 0x8d, 0x77,
	0x37, 0x92, 0xf9, 0x2b, 0x7c, 0x88, 0x4a, 0xd3, 0x7b, 0xd6, 0xde, 0xd4, 0x92, 0xc6, 0xb6, 0xf9,
	0xa6, 0x9e, 0x48, 0x8e, 0xda, 0xce, 0x7e, 0x4c, 0x8d, 0x84, 0x5b, 0x24, 0x57, 0x01, 0xfe, 0x0e,
	0xdd, 0x9d, 0x5e, 0x16, 0x24, 0x22, 0xcc, 0x07, 0x53, 0xe9, 0x7b, 0x5a, 0xd6, 0x59, 0xf2, 0x51,
	0x4d, 0xad, 0x87, 0x8c, 0x96, 0xd7, 0xbb, 0xed, 0x2f, 0x4e, 0xd4, 0xfa, 0xa8, 0x34, 0xfd, 0x3d,
	0xe3, 0x27, 0xa8, 0x94, 0x7a, 0xc3, 0x53, 0xdc, 0x8b, 0xb9, 0x50, 0x7a, 0x37, 0xbf, 0xdd, 0x4f,
	0x28, 0xc5, 0x9f, 0xf0, 0x23, 0x2e, 0x54, 0xed, 0x57, 0x0b, 0x6d, 0x2f, 0x29, 0x01, 0x0f, 0x51,
	0x19, 0xde, 0x10, 0x5f, 0x99, 0x07, 0xe5, 0xd2, 0x5f, 0xfc, 0xb7, 0x97, 0x38, 0x4f, 0x53, 0x8d,
	0xfc, 0xea, 0xf0, 0x86, 0x5b, 0x82, 0xa9, 0xb8, 0x56, 0x41, 0xa5, 0xe9, 0x7c, 0x67, 0x13, 0x95,
	0x4c, 0xfb, 0xd2, 0x8d, 0x84, 0x6f, 0xfe, 0xd5, 0xb1, 0x1a, 0x1f, 0xa3, 0xb5, 0xc9, 0xee, 0xc1,
	0x45, 0xb4, 0xda, 0x7d, 0xda, 0xdb, 0x3f, 0xed, 0x9f, 0x54, 0x6f, 0xe0, 0x75, 0x54, 0x7c, 0x3e,
	0xe8, 0x3e, 0xeb, 0xbd, 0xf2, 0x06, 0x2f, 0xfa, 0xaf, 0xaa, 0xd6, 0x37, 0xb7, 0x0a, 0x95, 0xea,
	0x7a, 0xfb, 0xf7, 0x15, 0x64, 0x9b, 0xba, 0xba, 0xe6, 0x6f, 0xf9, 0x31, 0x88, 0x11, 0xf5, 0x01,
	0x13, 0x54, 0xe9, 0x42, 0xa4, 0x88, 0x01, 0x48, 0x3c, 0xe7, 0x4c, 0x9d, 0x9d, 0xd0, 0x5c, 0x78,
	0x9d, 0x80, 0x54, 0xb5, 0xbd, 0xb7, 0x83, 0x64, 0xcc, 0x99, 0x84, 0xc6, 0x8d, 0xa6, 0xf5, 0xa9,
	0x85, 0xcf, 0xd0, 0xfa, 0xb1, 0x12, 0x40, 0x2e, 0xaf, 0x7e, 0xe3, 0xde, 0x1c, 0x7d, 0x5e, 0x7e,
	0x77, 0x69, 0x7e, 0x46, 0x39, 0x41, 0x95, 0x1e, 0x28, 0xff, 0xe2, 0x7f, 0x14, 0x6e, 0xfc, 0xf8,
	0xc7, 0x9f, 0xbf, 0xac, 0xec, 0x34, 0xb6, 0x67, 0xfe, 0xf3, 0x79, 0x6c, 0x8c, 0x2f, 0x1f, 0x5b,
	0x9f, 0x74, 0x1e, 0xa0, 0x1a, 0xe5, 0x99, 0x50, 0x2c, 0xf8, 0x9b, 0xf1, 0x8c, 0x66, 0xa7, 0xd0,
	0x0f, 0xe4, 0x51, 0xea, 0xb3, 0x23, 0xeb, 0x27, 0xcb, 0x1a, 0xde, 0xd1, 0x9e, 0x7b, 0xf4, 0x4f,
	0x00, 0x00, 0x00, 0xff, 0xff, 0x33, 0x61, 0x78, 0x40, 0xb9, 0x09, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// ListenerDiscoveryServiceClient is the client API for ListenerDiscoveryService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type ListenerDiscoveryServiceClient interface {
	DeltaListeners(ctx context.Context, opts ...grpc.CallOption) (ListenerDiscoveryService_DeltaListenersClient, error)
	StreamListeners(ctx context.Context, opts ...grpc.CallOption) (ListenerDiscoveryService_StreamListenersClient, error)
	FetchListeners(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error)
}

type listenerDiscoveryServiceClient struct {
	cc *grpc.ClientConn
}

func NewListenerDiscoveryServiceClient(cc *grpc.ClientConn) ListenerDiscoveryServiceClient {
	return &listenerDiscoveryServiceClient{cc}
}

func (c *listenerDiscoveryServiceClient) DeltaListeners(ctx context.Context, opts ...grpc.CallOption) (ListenerDiscoveryService_DeltaListenersClient, error) {
	stream, err := c.cc.NewStream(ctx, &_ListenerDiscoveryService_serviceDesc.Streams[0], "/envoy.api.v2.ListenerDiscoveryService/DeltaListeners", opts...)
	if err != nil {
		return nil, err
	}
	x := &listenerDiscoveryServiceDeltaListenersClient{stream}
	return x, nil
}

type ListenerDiscoveryService_DeltaListenersClient interface {
	Send(*DeltaDiscoveryRequest) error
	Recv() (*DeltaDiscoveryResponse, error)
	grpc.ClientStream
}

type listenerDiscoveryServiceDeltaListenersClient struct {
	grpc.ClientStream
}

func (x *listenerDiscoveryServiceDeltaListenersClient) Send(m *DeltaDiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *listenerDiscoveryServiceDeltaListenersClient) Recv() (*DeltaDiscoveryResponse, error) {
	m := new(DeltaDiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *listenerDiscoveryServiceClient) StreamListeners(ctx context.Context, opts ...grpc.CallOption) (ListenerDiscoveryService_StreamListenersClient, error) {
	stream, err := c.cc.NewStream(ctx, &_ListenerDiscoveryService_serviceDesc.Streams[1], "/envoy.api.v2.ListenerDiscoveryService/StreamListeners", opts...)
	if err != nil {
		return nil, err
	}
	x := &listenerDiscoveryServiceStreamListenersClient{stream}
	return x, nil
}

type ListenerDiscoveryService_StreamListenersClient interface {
	Send(*DiscoveryRequest) error
	Recv() (*DiscoveryResponse, error)
	grpc.ClientStream
}

type listenerDiscoveryServiceStreamListenersClient struct {
	grpc.ClientStream
}

func (x *listenerDiscoveryServiceStreamListenersClient) Send(m *DiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *listenerDiscoveryServiceStreamListenersClient) Recv() (*DiscoveryResponse, error) {
	m := new(DiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *listenerDiscoveryServiceClient) FetchListeners(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error) {
	out := new(DiscoveryResponse)
	err := c.cc.Invoke(ctx, "/envoy.api.v2.ListenerDiscoveryService/FetchListeners", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// ListenerDiscoveryServiceServer is the server API for ListenerDiscoveryService service.
type ListenerDiscoveryServiceServer interface {
	DeltaListeners(ListenerDiscoveryService_DeltaListenersServer) error
	StreamListeners(ListenerDiscoveryService_StreamListenersServer) error
	FetchListeners(context.Context, *DiscoveryRequest) (*DiscoveryResponse, error)
}

// UnimplementedListenerDiscoveryServiceServer can be embedded to have forward compatible implementations.
type UnimplementedListenerDiscoveryServiceServer struct {
}

func (*UnimplementedListenerDiscoveryServiceServer) DeltaListeners(srv ListenerDiscoveryService_DeltaListenersServer) error {
	return status.Errorf(codes.Unimplemented, "method DeltaListeners not implemented")
}
func (*UnimplementedListenerDiscoveryServiceServer) StreamListeners(srv ListenerDiscoveryService_StreamListenersServer) error {
	return status.Errorf(codes.Unimplemented, "method StreamListeners not implemented")
}
func (*UnimplementedListenerDiscoveryServiceServer) FetchListeners(ctx context.Context, req *DiscoveryRequest) (*DiscoveryResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method FetchListeners not implemented")
}

func RegisterListenerDiscoveryServiceServer(s *grpc.Server, srv ListenerDiscoveryServiceServer) {
	s.RegisterService(&_ListenerDiscoveryService_serviceDesc, srv)
}

func _ListenerDiscoveryService_DeltaListeners_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(ListenerDiscoveryServiceServer).DeltaListeners(&listenerDiscoveryServiceDeltaListenersServer{stream})
}

type ListenerDiscoveryService_DeltaListenersServer interface {
	Send(*DeltaDiscoveryResponse) error
	Recv() (*DeltaDiscoveryRequest, error)
	grpc.ServerStream
}

type listenerDiscoveryServiceDeltaListenersServer struct {
	grpc.ServerStream
}

func (x *listenerDiscoveryServiceDeltaListenersServer) Send(m *DeltaDiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *listenerDiscoveryServiceDeltaListenersServer) Recv() (*DeltaDiscoveryRequest, error) {
	m := new(DeltaDiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _ListenerDiscoveryService_StreamListeners_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(ListenerDiscoveryServiceServer).StreamListeners(&listenerDiscoveryServiceStreamListenersServer{stream})
}

type ListenerDiscoveryService_StreamListenersServer interface {
	Send(*DiscoveryResponse) error
	Recv() (*DiscoveryRequest, error)
	grpc.ServerStream
}

type listenerDiscoveryServiceStreamListenersServer struct {
	grpc.ServerStream
}

func (x *listenerDiscoveryServiceStreamListenersServer) Send(m *DiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *listenerDiscoveryServiceStreamListenersServer) Recv() (*DiscoveryRequest, error) {
	m := new(DiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _ListenerDiscoveryService_FetchListeners_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(DiscoveryRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(ListenerDiscoveryServiceServer).FetchListeners(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/envoy.api.v2.ListenerDiscoveryService/FetchListeners",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(ListenerDiscoveryServiceServer).FetchListeners(ctx, req.(*DiscoveryRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _ListenerDiscoveryService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.api.v2.ListenerDiscoveryService",
	HandlerType: (*ListenerDiscoveryServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "FetchListeners",
			Handler:    _ListenerDiscoveryService_FetchListeners_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "DeltaListeners",
			Handler:       _ListenerDiscoveryService_DeltaListeners_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
		{
			StreamName:    "StreamListeners",
			Handler:       _ListenerDiscoveryService_StreamListeners_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
	},
	Metadata: "envoy/api/v2/lds.proto",
}
  0707010000006E000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000002F00000000cilium-proxy-20200109/go/envoy/api/v2/listener    0707010000006F000081A4000003E800000064000000015E17A2470000663B000000000000000000000000000000000000003E00000000cilium-proxy-20200109/go/envoy/api/v2/listener/listener.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/listener/listener.proto

package envoy_api_v2_listener

import (
	fmt "fmt"
	auth "github.com/cilium/proxy/go/envoy/api/v2/auth"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	_struct "github.com/golang/protobuf/ptypes/struct"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type FilterChainMatch_ConnectionSourceType int32

const (
	// Any connection source matches.
	FilterChainMatch_ANY FilterChainMatch_ConnectionSourceType = 0
	// Match a connection originating from the same host.
	FilterChainMatch_LOCAL FilterChainMatch_ConnectionSourceType = 1
	// Match a connection originating from a different host.
	FilterChainMatch_EXTERNAL FilterChainMatch_ConnectionSourceType = 2
)

var FilterChainMatch_ConnectionSourceType_name = map[int32]string{
	0: "ANY",
	1: "LOCAL",
	2: "EXTERNAL",
}

var FilterChainMatch_ConnectionSourceType_value = map[string]int32{
	"ANY":      0,
	"LOCAL":    1,
	"EXTERNAL": 2,
}

func (x FilterChainMatch_ConnectionSourceType) String() string {
	return proto.EnumName(FilterChainMatch_ConnectionSourceType_name, int32(x))
}

func (FilterChainMatch_ConnectionSourceType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_0ced541f18749edd, []int{1, 0}
}

type Filter struct {
	// The name of the filter to instantiate. The name must match a
	// :ref:`supported filter <config_network_filters>`.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Filter specific configuration which depends on the filter being
	// instantiated. See the supported filters for further documentation.
	//
	// Types that are valid to be assigned to ConfigType:
	//	*Filter_Config
	//	*Filter_TypedConfig
	ConfigType           isFilter_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *Filter) Reset()         { *m = Filter{} }
func (m *Filter) String() string { return proto.CompactTextString(m) }
func (*Filter) ProtoMessage()    {}
func (*Filter) Descriptor() ([]byte, []int) {
	return fileDescriptor_0ced541f18749edd, []int{0}
}

func (m *Filter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Filter.Unmarshal(m, b)
}
func (m *Filter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Filter.Marshal(b, m, deterministic)
}
func (m *Filter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Filter.Merge(m, src)
}
func (m *Filter) XXX_Size() int {
	return xxx_messageInfo_Filter.Size(m)
}
func (m *Filter) XXX_DiscardUnknown() {
	xxx_messageInfo_Filter.DiscardUnknown(m)
}

var xxx_messageInfo_Filter proto.InternalMessageInfo

func (m *Filter) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isFilter_ConfigType interface {
	isFilter_ConfigType()
}

type Filter_Config struct {
	Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"`
}

type Filter_TypedConfig struct {
	TypedConfig *any.Any `protobuf:"bytes,4,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*Filter_Config) isFilter_ConfigType() {}

func (*Filter_TypedConfig) isFilter_ConfigType() {}

func (m *Filter) GetConfigType() isFilter_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

// Deprecated: Do not use.
func (m *Filter) GetConfig() *_struct.Struct {
	if x, ok := m.GetConfigType().(*Filter_Config); ok {
		return x.Config
	}
	return nil
}

func (m *Filter) GetTypedConfig() *any.Any {
	if x, ok := m.GetConfigType().(*Filter_TypedConfig); ok {
		return x.TypedConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Filter) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Filter_Config)(nil),
		(*Filter_TypedConfig)(nil),
	}
}

// Specifies the match criteria for selecting a specific filter chain for a
// listener.
//
// In order for a filter chain to be selected, *ALL* of its criteria must be
// fulfilled by the incoming connection, properties of which are set by the
// networking stack and/or listener filters.
//
// The following order applies:
//
// 1. Destination port.
// 2. Destination IP address.
// 3. Server name (e.g. SNI for TLS protocol),
// 4. Transport protocol.
// 5. Application protocols (e.g. ALPN for TLS protocol).
// 6. Source type (e.g. any, local or external network).
// 7. Source IP address.
// 8. Source port.
//
// For criteria that allow ranges or wildcards, the most specific value in any
// of the configured filter chains that matches the incoming connection is going
// to be used (e.g. for SNI ``www.example.com`` the most specific match would be
// ``www.example.com``, then ``*.example.com``, then ``*.com``, then any filter
// chain without ``server_names`` requirements).
//
// [#comment: Implemented rules are kept in the preference order, with deprecated fields
// listed at the end, because that's how we want to list them in the docs.
//
// [#comment:TODO(PiotrSikora): Add support for configurable precedence of the rules]
// [#next-free-field: 13]
type FilterChainMatch struct {
	// Optional destination port to consider when use_original_dst is set on the
	// listener in determining a filter chain match.
	DestinationPort *wrappers.UInt32Value `protobuf:"bytes,8,opt,name=destination_port,json=destinationPort,proto3" json:"destination_port,omitempty"`
	// If non-empty, an IP address and prefix length to match addresses when the
	// listener is bound to 0.0.0.0/:: or when use_original_dst is specified.
	PrefixRanges []*core.CidrRange `protobuf:"bytes,3,rep,name=prefix_ranges,json=prefixRanges,proto3" json:"prefix_ranges,omitempty"`
	// If non-empty, an IP address and suffix length to match addresses when the
	// listener is bound to 0.0.0.0/:: or when use_original_dst is specified.
	// [#not-implemented-hide:]
	AddressSuffix string `protobuf:"bytes,4,opt,name=address_suffix,json=addressSuffix,proto3" json:"address_suffix,omitempty"`
	// [#not-implemented-hide:]
	SuffixLen *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=suffix_len,json=suffixLen,proto3" json:"suffix_len,omitempty"`
	// Specifies the connection source IP match type. Can be any, local or external network.
	SourceType FilterChainMatch_ConnectionSourceType `protobuf:"varint,12,opt,name=source_type,json=sourceType,proto3,enum=envoy.api.v2.listener.FilterChainMatch_ConnectionSourceType" json:"source_type,omitempty"`
	// The criteria is satisfied if the source IP address of the downstream
	// connection is contained in at least one of the specified subnets. If the
	// parameter is not specified or the list is empty, the source IP address is
	// ignored.
	SourcePrefixRanges []*core.CidrRange `protobuf:"bytes,6,rep,name=source_prefix_ranges,json=sourcePrefixRanges,proto3" json:"source_prefix_ranges,omitempty"`
	// The criteria is satisfied if the source port of the downstream connection
	// is contained in at least one of the specified ports. If the parameter is
	// not specified, the source port is ignored.
	SourcePorts []uint32 `protobuf:"varint,7,rep,packed,name=source_ports,json=sourcePorts,proto3" json:"source_ports,omitempty"`
	// If non-empty, a list of server names (e.g. SNI for TLS protocol) to consider when determining
	// a filter chain match. Those values will be compared against the server names of a new
	// connection, when detected by one of the listener filters.
	//
	// The server name will be matched against all wildcard domains, i.e. ``www.example.com``
	// will be first matched against ``www.example.com``, then ``*.example.com``, then ``*.com``.
	//
	// Note that partial wildcards are not supported, and values like ``*w.example.com`` are invalid.
	//
	// .. attention::
	//
	//   See the :ref:`FAQ entry <faq_how_to_setup_sni>` on how to configure SNI for more
	//   information.
	ServerNames []string `protobuf:"bytes,11,rep,name=server_names,json=serverNames,proto3" json:"server_names,omitempty"`
	// If non-empty, a transport protocol to consider when determining a filter chain match.
	// This value will be compared against the transport protocol of a new connection, when
	// it's detected by one of the listener filters.
	//
	// Suggested values include:
	//
	// * ``raw_buffer`` - default, used when no transport protocol is detected,
	// * ``tls`` - set by :ref:`envoy.listener.tls_inspector <config_listener_filters_tls_inspector>`
	//   when TLS protocol is detected.
	TransportProtocol string `protobuf:"bytes,9,opt,name=transport_protocol,json=transportProtocol,proto3" json:"transport_protocol,omitempty"`
	// If non-empty, a list of application protocols (e.g. ALPN for TLS protocol) to consider when
	// determining a filter chain match. Those values will be compared against the application
	// protocols of a new connection, when detected by one of the listener filters.
	//
	// Suggested values include:
	//
	// * ``http/1.1`` - set by :ref:`envoy.listener.tls_inspector
	//   <config_listener_filters_tls_inspector>`,
	// * ``h2`` - set by :ref:`envoy.listener.tls_inspector <config_listener_filters_tls_inspector>`
	//
	// .. attention::
	//
	//   Currently, only :ref:`TLS Inspector <config_listener_filters_tls_inspector>` provides
	//   application protocol detection based on the requested
	//   `ALPN <https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation>`_ values.
	//
	//   However, the use of ALPN is pretty much limited to the HTTP/2 traffic on the Internet,
	//   and matching on values other than ``h2`` is going to lead to a lot of false negatives,
	//   unless all connecting clients are known to use ALPN.
	ApplicationProtocols []string `protobuf:"bytes,10,rep,name=application_protocols,json=applicationProtocols,proto3" json:"application_protocols,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *FilterChainMatch) Reset()         { *m = FilterChainMatch{} }
func (m *FilterChainMatch) String() string { return proto.CompactTextString(m) }
func (*FilterChainMatch) ProtoMessage()    {}
func (*FilterChainMatch) Descriptor() ([]byte, []int) {
	return fileDescriptor_0ced541f18749edd, []int{1}
}

func (m *FilterChainMatch) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FilterChainMatch.Unmarshal(m, b)
}
func (m *FilterChainMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FilterChainMatch.Marshal(b, m, deterministic)
}
func (m *FilterChainMatch) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FilterChainMatch.Merge(m, src)
}
func (m *FilterChainMatch) XXX_Size() int {
	return xxx_messageInfo_FilterChainMatch.Size(m)
}
func (m *FilterChainMatch) XXX_DiscardUnknown() {
	xxx_messageInfo_FilterChainMatch.DiscardUnknown(m)
}

var xxx_messageInfo_FilterChainMatch proto.InternalMessageInfo

func (m *FilterChainMatch) GetDestinationPort() *wrappers.UInt32Value {
	if m != nil {
		return m.DestinationPort
	}
	return nil
}

func (m *FilterChainMatch) GetPrefixRanges() []*core.CidrRange {
	if m != nil {
		return m.PrefixRanges
	}
	return nil
}

func (m *FilterChainMatch) GetAddressSuffix() string {
	if m != nil {
		return m.AddressSuffix
	}
	return ""
}

func (m *FilterChainMatch) GetSuffixLen() *wrappers.UInt32Value {
	if m != nil {
		return m.SuffixLen
	}
	return nil
}

func (m *FilterChainMatch) GetSourceType() FilterChainMatch_ConnectionSourceType {
	if m != nil {
		return m.SourceType
	}
	return FilterChainMatch_ANY
}

func (m *FilterChainMatch) GetSourcePrefixRanges() []*core.CidrRange {
	if m != nil {
		return m.SourcePrefixRanges
	}
	return nil
}

func (m *FilterChainMatch) GetSourcePorts() []uint32 {
	if m != nil {
		return m.SourcePorts
	}
	return nil
}

func (m *FilterChainMatch) GetServerNames() []string {
	if m != nil {
		return m.ServerNames
	}
	return nil
}

func (m *FilterChainMatch) GetTransportProtocol() string {
	if m != nil {
		return m.TransportProtocol
	}
	return ""
}

func (m *FilterChainMatch) GetApplicationProtocols() []string {
	if m != nil {
		return m.ApplicationProtocols
	}
	return nil
}

// A filter chain wraps a set of match criteria, an option TLS context, a set of filters, and
// various other parameters.
// [#next-free-field: 8]
type FilterChain struct {
	// The criteria to use when matching a connection to this filter chain.
	FilterChainMatch *FilterChainMatch `protobuf:"bytes,1,opt,name=filter_chain_match,json=filterChainMatch,proto3" json:"filter_chain_match,omitempty"`
	// The TLS context for this filter chain.
	//
	// .. attention::
	//
	//   **This field is deprecated**. Use `transport_socket` with name `tls` instead. If both are
	//   set, `transport_socket` takes priority.
	TlsContext *auth.DownstreamTlsContext `protobuf:"bytes,2,opt,name=tls_context,json=tlsContext,proto3" json:"tls_context,omitempty"` // Deprecated: Do not use.
	// A list of individual network filters that make up the filter chain for
	// connections established with the listener. Order matters as the filters are
	// processed sequentially as connection events happen. Note: If the filter
	// list is empty, the connection will close by default.
	Filters []*Filter `protobuf:"bytes,3,rep,name=filters,proto3" json:"filters,omitempty"`
	// Whether the listener should expect a PROXY protocol V1 header on new
	// connections. If this option is enabled, the listener will assume that that
	// remote address of the connection is the one specified in the header. Some
	// load balancers including the AWS ELB support this option. If the option is
	// absent or set to false, Envoy will use the physical peer address of the
	// connection as the remote address.
	UseProxyProto *wrappers.BoolValue `protobuf:"bytes,4,opt,name=use_proxy_proto,json=useProxyProto,proto3" json:"use_proxy_proto,omitempty"`
	// [#not-implemented-hide:] filter chain metadata.
	Metadata *core.Metadata `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"`
	// Optional custom transport socket implementation to use for downstream connections.
	// To setup TLS, set a transport socket with name `tls` and
	// :ref:`DownstreamTlsContext <envoy_api_msg_auth.DownstreamTlsContext>` in the `typed_config`.
	// If no transport socket configuration is specified, new connections
	// will be set up with plaintext.
	TransportSocket *core.TransportSocket `protobuf:"bytes,6,opt,name=transport_socket,json=transportSocket,proto3" json:"transport_socket,omitempty"`
	// [#not-implemented-hide:] The unique name (or empty) by which this filter chain is known. If no
	// name is provided, Envoy will allocate an internal UUID for the filter chain. If the filter
	// chain is to be dynamically updated or removed via FCDS a unique name must be provided.
	Name                 string   `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *FilterChain) Reset()         { *m = FilterChain{} }
func (m *FilterChain) String() string { return proto.CompactTextString(m) }
func (*FilterChain) ProtoMessage()    {}
func (*FilterChain) Descriptor() ([]byte, []int) {
	return fileDescriptor_0ced541f18749edd, []int{2}
}

func (m *FilterChain) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FilterChain.Unmarshal(m, b)
}
func (m *FilterChain) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FilterChain.Marshal(b, m, deterministic)
}
func (m *FilterChain) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FilterChain.Merge(m, src)
}
func (m *FilterChain) XXX_Size() int {
	return xxx_messageInfo_FilterChain.Size(m)
}
func (m *FilterChain) XXX_DiscardUnknown() {
	xxx_messageInfo_FilterChain.DiscardUnknown(m)
}

var xxx_messageInfo_FilterChain proto.InternalMessageInfo

func (m *FilterChain) GetFilterChainMatch() *FilterChainMatch {
	if m != nil {
		return m.FilterChainMatch
	}
	return nil
}

// Deprecated: Do not use.
func (m *FilterChain) GetTlsContext() *auth.DownstreamTlsContext {
	if m != nil {
		return m.TlsContext
	}
	return nil
}

func (m *FilterChain) GetFilters() []*Filter {
	if m != nil {
		return m.Filters
	}
	return nil
}

func (m *FilterChain) GetUseProxyProto() *wrappers.BoolValue {
	if m != nil {
		return m.UseProxyProto
	}
	return nil
}

func (m *FilterChain) GetMetadata() *core.Metadata {
	if m != nil {
		return m.Metadata
	}
	return nil
}

func (m *FilterChain) GetTransportSocket() *core.TransportSocket {
	if m != nil {
		return m.TransportSocket
	}
	return nil
}

func (m *FilterChain) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type ListenerFilter struct {
	// The name of the filter to instantiate. The name must match a
	// :ref:`supported filter <config_listener_filters>`.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Filter specific configuration which depends on the filter being instantiated.
	// See the supported filters for further documentation.
	//
	// Types that are valid to be assigned to ConfigType:
	//	*ListenerFilter_Config
	//	*ListenerFilter_TypedConfig
	ConfigType           isListenerFilter_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
	XXX_unrecognized     []byte                      `json:"-"`
	XXX_sizecache        int32                       `json:"-"`
}

func (m *ListenerFilter) Reset()         { *m = ListenerFilter{} }
func (m *ListenerFilter) String() string { return proto.CompactTextString(m) }
func (*ListenerFilter) ProtoMessage()    {}
func (*ListenerFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_0ced541f18749edd, []int{3}
}

func (m *ListenerFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ListenerFilter.Unmarshal(m, b)
}
func (m *ListenerFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ListenerFilter.Marshal(b, m, deterministic)
}
func (m *ListenerFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ListenerFilter.Merge(m, src)
}
func (m *ListenerFilter) XXX_Size() int {
	return xxx_messageInfo_ListenerFilter.Size(m)
}
func (m *ListenerFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_ListenerFilter.DiscardUnknown(m)
}

var xxx_messageInfo_ListenerFilter proto.InternalMessageInfo

func (m *ListenerFilter) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isListenerFilter_ConfigType interface {
	isListenerFilter_ConfigType()
}

type ListenerFilter_Config struct {
	Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"`
}

type ListenerFilter_TypedConfig struct {
	TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*ListenerFilter_Config) isListenerFilter_ConfigType() {}

func (*ListenerFilter_TypedConfig) isListenerFilter_ConfigType() {}

func (m *ListenerFilter) GetConfigType() isListenerFilter_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

// Deprecated: Do not use.
func (m *ListenerFilter) GetConfig() *_struct.Struct {
	if x, ok := m.GetConfigType().(*ListenerFilter_Config); ok {
		return x.Config
	}
	return nil
}

func (m *ListenerFilter) GetTypedConfig() *any.Any {
	if x, ok := m.GetConfigType().(*ListenerFilter_TypedConfig); ok {
		return x.TypedConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ListenerFilter) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*ListenerFilter_Config)(nil),
		(*ListenerFilter_TypedConfig)(nil),
	}
}

func init() {
	proto.RegisterEnum("envoy.api.v2.listener.FilterChainMatch_ConnectionSourceType", FilterChainMatch_ConnectionSourceType_name, FilterChainMatch_ConnectionSourceType_value)
	proto.RegisterType((*Filter)(nil), "envoy.api.v2.listener.Filter")
	proto.RegisterType((*FilterChainMatch)(nil), "envoy.api.v2.listener.FilterChainMatch")
	proto.RegisterType((*FilterChain)(nil), "envoy.api.v2.listener.FilterChain")
	proto.RegisterType((*ListenerFilter)(nil), "envoy.api.v2.listener.ListenerFilter")
}

func init() {
	proto.RegisterFile("envoy/api/v2/listener/listener.proto", fileDescriptor_0ced541f18749edd)
}

var fileDescriptor_0ced541f18749edd = []byte{
	// 858 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xdd, 0x6e, 0xe3, 0x44,
	0x14, 0xae, 0xe3, 0x34, 0x3f, 0xc7, 0x49, 0x6b, 0x46, 0x5d, 0xd5, 0x74, 0x0b, 0x84, 0x00, 0x22,
	0x42, 0xc2, 0x91, 0x52, 0xa1, 0x05, 0xc1, 0x4d, 0x1c, 0x8a, 0x96, 0x55, 0x1a, 0x22, 0x27, 0xbb,
	0x82, 0x2b, 0x6b, 0xea, 0x4c, 0x52, 0x83, 0x3b, 0x63, 0xcd, 0x8c, 0xb3, 0xcd, 0x2d, 0x8f, 0xc0,
	0x63, 0x20, 0xc4, 0x53, 0x70, 0xc7, 0x9b, 0xf0, 0x08, 0xbd, 0x59, 0xe4, 0xf1, 0x38, 0xdb, 0xa4,
	0x01, 0x2a, 0x2e, 0xf6, 0x6e, 0xe6, 0x7c, 0xdf, 0x77, 0xce, 0x9c, 0xbf, 0x81, 0x0f, 0x09, 0x5d,
	0xb2, 0x55, 0x17, 0x27, 0x51, 0x77, 0xd9, 0xeb, 0xc6, 0x91, 0x90, 0x84, 0x12, 0xbe, 0x3e, 0xb8,
	0x09, 0x67, 0x92, 0xa1, 0x47, 0x8a, 0xe5, 0xe2, 0x24, 0x72, 0x97, 0x3d, 0xb7, 0x00, 0x4f, 0x4e,
	0x37, 0xc4, 0x38, 0x95, 0x57, 0xdd, 0x90, 0x70, 0x99, 0x8b, 0x4e, 0xde, 0xdb, 0x40, 0x43, 0xc6,
	0x49, 0x17, 0xcf, 0x66, 0x9c, 0x08, 0xa1, 0x09, 0xa7, 0xf7, 0x09, 0x97, 0x58, 0x10, 0x8d, 0xbe,
	0xbd, 0x60, 0x6c, 0x11, 0x93, 0xae, 0xba, 0x5d, 0xa6, 0xf3, 0x2e, 0xa6, 0xab, 0x42, 0xb8, 0x0d,
	0x09, 0xc9, 0xd3, 0xb0, 0x88, 0xfb, 0xee, 0x36, 0xfa, 0x92, 0xe3, 0x24, 0x21, 0xbc, 0x08, 0x7b,
	0xbc, 0xc4, 0x71, 0x34, 0xc3, 0x92, 0x74, 0x8b, 0x43, 0x0e, 0xb4, 0x7f, 0x33, 0xa0, 0xf2, 0x4d,
	0x14, 0x4b, 0xc2, 0xd1, 0x63, 0x28, 0x53, 0x7c, 0x4d, 0x1c, 0xa3, 0x65, 0x74, 0xea, 0x5e, 0xf5,
	0xd6, 0x2b, 0xf3, 0x52, 0xcb, 0xf0, 0x95, 0x11, 0x7d, 0x06, 0x95, 0x90, 0xd1, 0x79, 0xb4, 0x70,
	0x4a, 0x2d, 0xa3, 0x63, 0xf5, 0x8e, 0xdd, 0x3c, 0xa2, 0x5b, 0x44, 0x74, 0x27, 0xea, 0x3d, 0x5e,
	0xc9, 0x31, 0x9e, 0xee, 0xf9, 0x9a, 0x8c, 0xbe, 0x80, 0x86, 0x5c, 0x25, 0x64, 0x16, 0x68, 0x71,
	0x59, 0x89, 0x8f, 0xee, 0x89, 0xfb, 0x74, 0xf5, 0x74, 0xcf, 0xb7, 0x14, 0x77, 0xa0, 0xa8, 0x5e,
	0x13, 0xac, 0x5c, 0x14, 0x64, 0xd6, 0x67, 0xe5, 0x9a, 0x69, 0x97, 0xdb, 0x7f, 0xec, 0x83, 0x9d,
	0x3f, 0x77, 0x70, 0x85, 0x23, 0x7a, 0x81, 0x65, 0x78, 0x85, 0xa6, 0x60, 0xcf, 0x88, 0x90, 0x11,
	0xc5, 0x32, 0x62, 0x34, 0x48, 0x18, 0x97, 0x4e, 0x4d, 0x05, 0x3a, 0xbd, 0x17, 0xe8, 0xf9, 0xb7,
	0x54, 0x9e, 0xf5, 0x5e, 0xe0, 0x38, 0x25, 0x9e, 0x75, 0xeb, 0xd5, 0x3e, 0xa9, 0x38, 0xaf, 0x5e,
	0x99, 0x1d, 0xc3, 0x3f, 0xbc, 0xe3, 0x62, 0xcc, 0xb8, 0x44, 0x7d, 0x68, 0x26, 0x9c, 0xcc, 0xa3,
	0x9b, 0x80, 0x63, 0xba, 0x20, 0xc2, 0x31, 0x5b, 0xa6, 0x72, 0xb9, 0x31, 0x17, 0x59, 0x07, 0xdd,
	0x41, 0x34, 0xe3, 0x7e, 0x46, 0xf2, 0x1b, 0xb9, 0x44, 0x5d, 0x04, 0xfa, 0x08, 0x0e, 0x74, 0xf7,
	0x03, 0x91, 0xce, 0xe7, 0xd1, 0x8d, 0xca, 0xbf, 0xee, 0x37, 0xb5, 0x75, 0xa2, 0x8c, 0xe8, 0x4b,
	0x80, 0x1c, 0x0e, 0x62, 0x42, 0x9d, 0xfd, 0xff, 0x7e, 0xb9, 0x5f, 0xcf, 0xf9, 0x43, 0x42, 0xd1,
	0x02, 0x2c, 0xc1, 0x52, 0x1e, 0x12, 0x55, 0x26, 0xa7, 0xd1, 0x32, 0x3a, 0x07, 0xbd, 0xaf, 0xdc,
	0x9d, 0xc3, 0xeb, 0x6e, 0x97, 0xce, 0x1d, 0x30, 0x4a, 0x49, 0x98, 0xe5, 0x3c, 0x51, 0x4e, 0xa6,
	0xab, 0x84, 0x78, 0xb5, 0x5b, 0x6f, 0xff, 0x67, 0xa3, 0x64, 0x1b, 0x3e, 0x88, 0xb5, 0x15, 0x8d,
	0xe0, 0x48, 0x07, 0xda, 0x2c, 0x4b, 0xe5, 0x01, 0x65, 0x41, 0xb9, 0x72, 0x7c, 0xb7, 0x38, 0x67,
	0xd0, 0x28, 0xfc, 0x31, 0x2e, 0x85, 0x53, 0x6d, 0x99, 0x9d, 0xa6, 0x67, 0xdf, 0x7a, 0xcd, 0x5f,
	0x0c, 0x68, 0xbf, 0x6e, 0x8c, 0x4e, 0x2f, 0xeb, 0x89, 0x40, 0xef, 0x43, 0x43, 0x10, 0xbe, 0x24,
	0x3c, 0xc8, 0xa6, 0x52, 0x38, 0x56, 0xcb, 0xec, 0xd4, 0x7d, 0x2b, 0xb7, 0x8d, 0x32, 0x13, 0xfa,
	0x14, 0x90, 0xe4, 0x98, 0x8a, 0xcc, 0x6b, 0xa0, 0xaa, 0x17, 0xb2, 0xd8, 0xa9, 0xab, 0xc2, 0xbf,
	0xb5, 0x46, 0xc6, 0x1a, 0x40, 0x67, 0xf0, 0x08, 0x27, 0x49, 0x1c, 0x85, 0x7a, 0x78, 0xb4, 0x5d,
	0x38, 0xa0, 0x5c, 0x1f, 0xdd, 0x01, 0x0b, 0x8d, 0x68, 0x7f, 0x0e, 0x47, 0xbb, 0x2a, 0x87, 0xaa,
	0x60, 0xf6, 0x47, 0x3f, 0xd8, 0x7b, 0xa8, 0x0e, 0xfb, 0xc3, 0xef, 0x06, 0xfd, 0xa1, 0x6d, 0xa0,
	0x06, 0xd4, 0xce, 0xbf, 0x9f, 0x9e, 0xfb, 0xa3, 0xfe, 0xd0, 0x2e, 0x3d, 0x2b, 0xd7, 0x0c, 0xbb,
	0xd4, 0xfe, 0xd3, 0x04, 0xeb, 0x4e, 0x2f, 0xd0, 0x73, 0x40, 0x73, 0x75, 0x0d, 0xc2, 0xec, 0x1e,
	0x5c, 0x67, 0xcd, 0x51, 0x8b, 0x68, 0xf5, 0x3e, 0x7e, 0x60, 0x2f, 0x7d, 0x7b, 0xbe, 0xbd, 0x18,
	0x43, 0xb0, 0x64, 0x2c, 0xb2, 0xdd, 0x93, 0xe4, 0x46, 0xea, 0xcd, 0xdd, 0xf2, 0x97, 0xfd, 0x60,
	0xee, 0xd7, 0xec, 0x25, 0x15, 0x92, 0x13, 0x7c, 0x3d, 0x8d, 0xc5, 0x20, 0xa7, 0x67, 0x9b, 0xec,
	0x83, 0x5c, 0xdf, 0xd1, 0x13, 0xa8, 0xe6, 0x11, 0x8a, 0x55, 0x78, 0xe7, 0x5f, 0x5f, 0xe6, 0x17,
	0x6c, 0xe4, 0xc1, 0x61, 0x2a, 0xb2, 0xb1, 0x61, 0x37, 0xab, 0xbc, 0xc0, 0xfa, 0x1f, 0x38, 0xb9,
	0x37, 0xe4, 0x1e, 0x63, 0x71, 0x3e, 0xe2, 0xcd, 0x54, 0x90, 0x71, 0xa6, 0x50, 0x55, 0x47, 0x4f,
	0xa0, 0x76, 0x4d, 0x24, 0x9e, 0x61, 0x89, 0xf5, 0x86, 0x3c, 0xde, 0x31, 0x71, 0x17, 0x9a, 0xe2,
	0xaf, 0xc9, 0xe8, 0x02, 0xec, 0xd7, 0xe3, 0x20, 0x58, 0xf8, 0x13, 0x91, 0x4e, 0x45, 0x39, 0x68,
	0xef, 0x70, 0x30, 0x2d, 0xa8, 0x13, 0xc5, 0xf4, 0x0f, 0xe5, 0xa6, 0x01, 0x21, 0xfd, 0x49, 0x56,
	0xd5, 0x3c, 0xa9, 0x73, 0xfb, 0x77, 0x03, 0x0e, 0x86, 0x3a, 0xf9, 0x37, 0xf8, 0x97, 0x9a, 0xff,
	0xf7, 0x2f, 0xf5, 0x7e, 0x84, 0x0f, 0x22, 0x96, 0x67, 0xaf, 0x9a, 0xb2, 0xbb, 0x8f, 0x5e, 0xb3,
	0x48, 0x4a, 0xb5, 0x60, 0x6c, 0xfc, 0x5a, 0x3a, 0x3e, 0x57, 0xc4, 0x7e, 0x12, 0xb9, 0x2f, 0x7a,
	0x6e, 0x01, 0x8f, 0x26, 0x7f, 0xfd, 0x23, 0x72, 0x59, 0x51, 0xef, 0x3a, 0xfb, 0x3b, 0x00, 0x00,
	0xff, 0xff, 0xcf, 0xae, 0x2e, 0xfe, 0x75, 0x07, 0x00, 0x00,
}
 07070100000070000081A4000003E800000064000000015E17A24700001556000000000000000000000000000000000000004100000000cilium-proxy-20200109/go/envoy/api/v2/listener/quic_config.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/listener/quic_config.proto

package envoy_api_v2_listener

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Configuration specific to the QUIC protocol.
// Next id: 4
type QuicProtocolOptions struct {
	// Maximum number of streams that the client can negotiate per connection. 100
	// if not specified.
	MaxConcurrentStreams *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=max_concurrent_streams,json=maxConcurrentStreams,proto3" json:"max_concurrent_streams,omitempty"`
	// Maximum number of milliseconds that connection will be alive when there is
	// no network activity. 300000ms if not specified.
	IdleTimeout *duration.Duration `protobuf:"bytes,2,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"`
	// Connection timeout in milliseconds before the crypto handshake is finished.
	// 20000ms if not specified.
	CryptoHandshakeTimeout *duration.Duration `protobuf:"bytes,3,opt,name=crypto_handshake_timeout,json=cryptoHandshakeTimeout,proto3" json:"crypto_handshake_timeout,omitempty"`
	XXX_NoUnkeyedLiteral   struct{}           `json:"-"`
	XXX_unrecognized       []byte             `json:"-"`
	XXX_sizecache          int32              `json:"-"`
}

func (m *QuicProtocolOptions) Reset()         { *m = QuicProtocolOptions{} }
func (m *QuicProtocolOptions) String() string { return proto.CompactTextString(m) }
func (*QuicProtocolOptions) ProtoMessage()    {}
func (*QuicProtocolOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_1f6a4a402e708e40, []int{0}
}

func (m *QuicProtocolOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_QuicProtocolOptions.Unmarshal(m, b)
}
func (m *QuicProtocolOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_QuicProtocolOptions.Marshal(b, m, deterministic)
}
func (m *QuicProtocolOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_QuicProtocolOptions.Merge(m, src)
}
func (m *QuicProtocolOptions) XXX_Size() int {
	return xxx_messageInfo_QuicProtocolOptions.Size(m)
}
func (m *QuicProtocolOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_QuicProtocolOptions.DiscardUnknown(m)
}

var xxx_messageInfo_QuicProtocolOptions proto.InternalMessageInfo

func (m *QuicProtocolOptions) GetMaxConcurrentStreams() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxConcurrentStreams
	}
	return nil
}

func (m *QuicProtocolOptions) GetIdleTimeout() *duration.Duration {
	if m != nil {
		return m.IdleTimeout
	}
	return nil
}

func (m *QuicProtocolOptions) GetCryptoHandshakeTimeout() *duration.Duration {
	if m != nil {
		return m.CryptoHandshakeTimeout
	}
	return nil
}

func init() {
	proto.RegisterType((*QuicProtocolOptions)(nil), "envoy.api.v2.listener.QuicProtocolOptions")
}

func init() {
	proto.RegisterFile("envoy/api/v2/listener/quic_config.proto", fileDescriptor_1f6a4a402e708e40)
}

var fileDescriptor_1f6a4a402e708e40 = []byte{
	// 309 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xcd, 0x4a, 0x33, 0x31,
	0x18, 0x85, 0x99, 0x7e, 0xf0, 0x2d, 0x52, 0x41, 0x18, 0xb5, 0x56, 0x11, 0x11, 0x5d, 0xe8, 0x2a,
	0x81, 0xe9, 0xd6, 0x8d, 0xad, 0x82, 0x82, 0x68, 0x6d, 0xb5, 0xdb, 0x21, 0x4d, 0xd3, 0x36, 0x98,
	0xc9, 0x1b, 0xf3, 0x53, 0xdb, 0x5b, 0xf2, 0xd2, 0xbc, 0x06, 0x17, 0x32, 0xc9, 0x8c, 0x2e, 0xaa,
	0xb8, 0x1c, 0xce, 0x73, 0x1e, 0xde, 0x39, 0x41, 0xa7, 0x5c, 0x2d, 0x60, 0x45, 0xa8, 0x16, 0x64,
	0x91, 0x11, 0x29, 0xac, 0xe3, 0x8a, 0x1b, 0xf2, 0xe2, 0x05, 0xcb, 0x19, 0xa8, 0xa9, 0x98, 0x61,
	0x6d, 0xc0, 0x41, 0xba, 0x13, 0x40, 0x4c, 0xb5, 0xc0, 0x8b, 0x0c, 0xd7, 0xe0, 0xfe, 0xe1, 0x0c,
	0x60, 0x26, 0x39, 0x09, 0xd0, 0xd8, 0x4f, 0xc9, 0xc4, 0x1b, 0xea, 0x04, 0xa8, 0x58, 0x5b, 0xcf,
	0x5f, 0x0d, 0xd5, 0x9a, 0x1b, 0x1b, 0xf3, 0xe3, 0x8f, 0x04, 0x6d, 0x3d, 0x78, 0xc1, 0xfa, 0xe5,
	0x17, 0x03, 0x79, 0xaf, 0xcb, 0xb2, 0x4d, 0x07, 0xa8, 0x55, 0xd0, 0x65, 0x79, 0x02, 0xf3, 0xc6,
	0x70, 0xe5, 0x72, 0xeb, 0x0c, 0xa7, 0x85, 0x6d, 0x27, 0x47, 0xc9, 0x59, 0x33, 0x3b, 0xc0, 0x51,
	0x8c, 0x6b, 0x31, 0x7e, 0xba, 0x51, 0xae, 0x93, 0x8d, 0xa8, 0xf4, 0x7c, 0xb0, 0x5d, 0xd0, 0x65,
	0xef, 0xab, 0x3a, 0x8c, 0xcd, 0xf4, 0x1c, 0x6d, 0x88, 0x89, 0xe4, 0xb9, 0x13, 0x05, 0x07, 0xef,
	0xda, 0x8d, 0x60, 0xda, 0x5b, 0x33, 0x5d, 0x56, 0xbf, 0x30, 0x68, 0x96, 0xf8, 0x63, 0xa4, 0xd3,
	0x21, 0x6a, 0x33, 0xb3, 0xd2, 0x0e, 0xf2, 0x39, 0x55, 0x13, 0x3b, 0xa7, 0xcf, 0xdf, 0xa6, 0x7f,
	0x7f, 0x99, 0x5a, 0xb1, 0x7a, 0x5d, 0x37, 0x2b, 0x69, 0x57, 0xa2, 0x13, 0x01, 0x38, 0x4c, 0xab,
	0x0d, 0x2c, 0x57, 0xf8, 0xc7, 0x95, 0xbb, 0x9b, 0xe5, 0x44, 0xbd, 0xf0, 0x1c, 0x61, 0xa8, 0x7e,
	0xf2, 0xd6, 0xd8, 0xbd, 0x0a, 0xe8, 0x85, 0x16, 0x78, 0x94, 0xe1, 0xdb, 0x0a, 0xbd, 0x1b, 0xbe,
	0xff, 0x9a, 0x8c, 0xff, 0x87, 0xc3, 0x3a, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xb3, 0xb8, 0x2d,
	0x7e, 0xf5, 0x01, 0x00, 0x00,
}
  07070100000071000081A4000003E800000064000000015E17A247000016F8000000000000000000000000000000000000004900000000cilium-proxy-20200109/go/envoy/api/v2/listener/udp_listener_config.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/listener/udp_listener_config.proto

package envoy_api_v2_listener

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	_struct "github.com/golang/protobuf/ptypes/struct"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type UdpListenerConfig struct {
	// Used to look up UDP listener factory, matches "raw_udp_listener" or
	// "quic_listener" to create a specific udp listener.
	// If not specified, treat as "raw_udp_listener".
	UdpListenerName string `protobuf:"bytes,1,opt,name=udp_listener_name,json=udpListenerName,proto3" json:"udp_listener_name,omitempty"`
	// Used to create a specific listener factory. To some factory, e.g.
	// "raw_udp_listener", config is not needed.
	//
	// Types that are valid to be assigned to ConfigType:
	//	*UdpListenerConfig_Config
	//	*UdpListenerConfig_TypedConfig
	ConfigType           isUdpListenerConfig_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	XXX_sizecache        int32                          `json:"-"`
}

func (m *UdpListenerConfig) Reset()         { *m = UdpListenerConfig{} }
func (m *UdpListenerConfig) String() string { return proto.CompactTextString(m) }
func (*UdpListenerConfig) ProtoMessage()    {}
func (*UdpListenerConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_04a0b1c45e39fc83, []int{0}
}

func (m *UdpListenerConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_UdpListenerConfig.Unmarshal(m, b)
}
func (m *UdpListenerConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_UdpListenerConfig.Marshal(b, m, deterministic)
}
func (m *UdpListenerConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_UdpListenerConfig.Merge(m, src)
}
func (m *UdpListenerConfig) XXX_Size() int {
	return xxx_messageInfo_UdpListenerConfig.Size(m)
}
func (m *UdpListenerConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_UdpListenerConfig.DiscardUnknown(m)
}

var xxx_messageInfo_UdpListenerConfig proto.InternalMessageInfo

func (m *UdpListenerConfig) GetUdpListenerName() string {
	if m != nil {
		return m.UdpListenerName
	}
	return ""
}

type isUdpListenerConfig_ConfigType interface {
	isUdpListenerConfig_ConfigType()
}

type UdpListenerConfig_Config struct {
	Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"`
}

type UdpListenerConfig_TypedConfig struct {
	TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*UdpListenerConfig_Config) isUdpListenerConfig_ConfigType() {}

func (*UdpListenerConfig_TypedConfig) isUdpListenerConfig_ConfigType() {}

func (m *UdpListenerConfig) GetConfigType() isUdpListenerConfig_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

func (m *UdpListenerConfig) GetConfig() *_struct.Struct {
	if x, ok := m.GetConfigType().(*UdpListenerConfig_Config); ok {
		return x.Config
	}
	return nil
}

func (m *UdpListenerConfig) GetTypedConfig() *any.Any {
	if x, ok := m.GetConfigType().(*UdpListenerConfig_TypedConfig); ok {
		return x.TypedConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*UdpListenerConfig) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*UdpListenerConfig_Config)(nil),
		(*UdpListenerConfig_TypedConfig)(nil),
	}
}

func init() {
	proto.RegisterType((*UdpListenerConfig)(nil), "envoy.api.v2.listener.UdpListenerConfig")
}

func init() {
	proto.RegisterFile("envoy/api/v2/listener/udp_listener_config.proto", fileDescriptor_04a0b1c45e39fc83)
}

var fileDescriptor_04a0b1c45e39fc83 = []byte{
	// 273 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4f, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0x2c, 0xc8, 0xd4, 0x2f, 0x33, 0xd2, 0xcf, 0xc9, 0x2c, 0x2e, 0x49, 0xcd, 0x4b,
	0x2d, 0xd2, 0x2f, 0x4d, 0x29, 0x88, 0x87, 0x71, 0xe2, 0x93, 0xf3, 0xf3, 0xd2, 0x32, 0xd3, 0xf5,
	0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0x44, 0xc1, 0x1a, 0xf4, 0x12, 0x0b, 0x32, 0xf5, 0xca, 0x8c,
	0xf4, 0x60, 0x6a, 0xa4, 0x24, 0xd3, 0xf3, 0xf3, 0xd3, 0x73, 0x52, 0xf5, 0xc1, 0x8a, 0x92, 0x4a,
	0xd3, 0xf4, 0x13, 0xf3, 0x2a, 0x21, 0x3a, 0xa4, 0x64, 0xd0, 0xa5, 0x8a, 0x4b, 0x8a, 0x4a, 0x93,
	0x4b, 0x20, 0xb2, 0x4a, 0x7b, 0x18, 0xb9, 0x04, 0x43, 0x53, 0x0a, 0x7c, 0xa0, 0x06, 0x39, 0x83,
	0xed, 0x12, 0xd2, 0xe2, 0x12, 0x44, 0x71, 0x42, 0x5e, 0x62, 0x6e, 0xaa, 0x04, 0xa3, 0x02, 0xa3,
	0x06, 0x67, 0x10, 0x7f, 0x29, 0x42, 0xb5, 0x5f, 0x62, 0x6e, 0xaa, 0x90, 0x21, 0x17, 0x1b, 0xc4,
	0x85, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0xdc, 0x46, 0xe2, 0x7a, 0x10, 0x0b, 0xf5, 0x60, 0x16, 0xea,
	0x05, 0x83, 0x2d, 0xf4, 0x60, 0x08, 0x82, 0x2a, 0x14, 0xb2, 0xe4, 0xe2, 0x29, 0xa9, 0x2c, 0x48,
	0x4d, 0x81, 0x7a, 0x4d, 0x82, 0x19, 0xac, 0x51, 0x04, 0x43, 0xa3, 0x63, 0x5e, 0xa5, 0x07, 0x43,
	0x10, 0x37, 0x58, 0x2d, 0xc4, 0x65, 0x4e, 0xbc, 0x5c, 0xdc, 0x10, 0x4d, 0xf1, 0x20, 0x51, 0xa7,
	0x62, 0x2e, 0xe5, 0xcc, 0x7c, 0x3d, 0x70, 0x98, 0x14, 0x14, 0xe5, 0x57, 0x54, 0xea, 0x61, 0x0d,
	0x1e, 0x27, 0x31, 0x0c, 0x2f, 0x06, 0x80, 0xec, 0x08, 0x60, 0x5c, 0xc5, 0x24, 0xee, 0x0a, 0xd6,
	0xe1, 0x58, 0x90, 0xa9, 0x17, 0x66, 0xa4, 0x07, 0xf7, 0x59, 0xf0, 0x2b, 0x9c, 0x32, 0x49, 0x6c,
	0x60, 0x07, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x92, 0x53, 0xee, 0x0e, 0xbd, 0x01, 0x00,
	0x00,
}
07070100000072000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003000000000cilium-proxy-20200109/go/envoy/api/v2/ratelimit   07070100000073000081A4000003E800000064000000015E17A24700001CDA000000000000000000000000000000000000004000000000cilium-proxy-20200109/go/envoy/api/v2/ratelimit/ratelimit.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/ratelimit/ratelimit.proto

package envoy_api_v2_ratelimit

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// A RateLimitDescriptor is a list of hierarchical entries that are used by the service to
// determine the final rate limit key and overall allowed limit. Here are some examples of how
// they might be used for the domain "envoy".
//
// .. code-block:: cpp
//
//   ["authenticated": "false"], ["remote_address": "10.0.0.1"]
//
// What it does: Limits all unauthenticated traffic for the IP address 10.0.0.1. The
// configuration supplies a default limit for the *remote_address* key. If there is a desire to
// raise the limit for 10.0.0.1 or block it entirely it can be specified directly in the
// configuration.
//
// .. code-block:: cpp
//
//   ["authenticated": "false"], ["path": "/foo/bar"]
//
// What it does: Limits all unauthenticated traffic globally for a specific path (or prefix if
// configured that way in the service).
//
// .. code-block:: cpp
//
//   ["authenticated": "false"], ["path": "/foo/bar"], ["remote_address": "10.0.0.1"]
//
// What it does: Limits unauthenticated traffic to a specific path for a specific IP address.
// Like (1) we can raise/block specific IP addresses if we want with an override configuration.
//
// .. code-block:: cpp
//
//   ["authenticated": "true"], ["client_id": "foo"]
//
// What it does: Limits all traffic for an authenticated client "foo"
//
// .. code-block:: cpp
//
//   ["authenticated": "true"], ["client_id": "foo"], ["path": "/foo/bar"]
//
// What it does: Limits traffic to a specific path for an authenticated client "foo"
//
// The idea behind the API is that (1)/(2)/(3) and (4)/(5) can be sent in 1 request if desired.
// This enables building complex application scenarios with a generic backend.
type RateLimitDescriptor struct {
	// Descriptor entries.
	Entries              []*RateLimitDescriptor_Entry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
	XXX_unrecognized     []byte                       `json:"-"`
	XXX_sizecache        int32                        `json:"-"`
}

func (m *RateLimitDescriptor) Reset()         { *m = RateLimitDescriptor{} }
func (m *RateLimitDescriptor) String() string { return proto.CompactTextString(m) }
func (*RateLimitDescriptor) ProtoMessage()    {}
func (*RateLimitDescriptor) Descriptor() ([]byte, []int) {
	return fileDescriptor_5684844e04543b8d, []int{0}
}

func (m *RateLimitDescriptor) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimitDescriptor.Unmarshal(m, b)
}
func (m *RateLimitDescriptor) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimitDescriptor.Marshal(b, m, deterministic)
}
func (m *RateLimitDescriptor) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimitDescriptor.Merge(m, src)
}
func (m *RateLimitDescriptor) XXX_Size() int {
	return xxx_messageInfo_RateLimitDescriptor.Size(m)
}
func (m *RateLimitDescriptor) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimitDescriptor.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimitDescriptor proto.InternalMessageInfo

func (m *RateLimitDescriptor) GetEntries() []*RateLimitDescriptor_Entry {
	if m != nil {
		return m.Entries
	}
	return nil
}

type RateLimitDescriptor_Entry struct {
	// Descriptor key.
	Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
	// Descriptor value.
	Value                string   `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RateLimitDescriptor_Entry) Reset()         { *m = RateLimitDescriptor_Entry{} }
func (m *RateLimitDescriptor_Entry) String() string { return proto.CompactTextString(m) }
func (*RateLimitDescriptor_Entry) ProtoMessage()    {}
func (*RateLimitDescriptor_Entry) Descriptor() ([]byte, []int) {
	return fileDescriptor_5684844e04543b8d, []int{0, 0}
}

func (m *RateLimitDescriptor_Entry) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimitDescriptor_Entry.Unmarshal(m, b)
}
func (m *RateLimitDescriptor_Entry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimitDescriptor_Entry.Marshal(b, m, deterministic)
}
func (m *RateLimitDescriptor_Entry) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimitDescriptor_Entry.Merge(m, src)
}
func (m *RateLimitDescriptor_Entry) XXX_Size() int {
	return xxx_messageInfo_RateLimitDescriptor_Entry.Size(m)
}
func (m *RateLimitDescriptor_Entry) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimitDescriptor_Entry.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimitDescriptor_Entry proto.InternalMessageInfo

func (m *RateLimitDescriptor_Entry) GetKey() string {
	if m != nil {
		return m.Key
	}
	return ""
}

func (m *RateLimitDescriptor_Entry) GetValue() string {
	if m != nil {
		return m.Value
	}
	return ""
}

func init() {
	proto.RegisterType((*RateLimitDescriptor)(nil), "envoy.api.v2.ratelimit.RateLimitDescriptor")
	proto.RegisterType((*RateLimitDescriptor_Entry)(nil), "envoy.api.v2.ratelimit.RateLimitDescriptor.Entry")
}

func init() {
	proto.RegisterFile("envoy/api/v2/ratelimit/ratelimit.proto", fileDescriptor_5684844e04543b8d)
}

var fileDescriptor_5684844e04543b8d = []byte{
	// 228 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4b, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0x2c, 0xc8, 0xd4, 0x2f, 0x33, 0xd2, 0x2f, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc,
	0xcd, 0x2c, 0x41, 0xb0, 0xf4, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0xc4, 0xc0, 0xea, 0xf4, 0x12,
	0x0b, 0x32, 0xf5, 0xca, 0x8c, 0xf4, 0xe0, 0xb2, 0x52, 0xe2, 0x65, 0x89, 0x39, 0x99, 0x29, 0x89,
	0x25, 0xa9, 0xfa, 0x30, 0x06, 0x44, 0x83, 0xd2, 0x7a, 0x46, 0x2e, 0xe1, 0xa0, 0xc4, 0x92, 0x54,
	0x1f, 0x90, 0x32, 0x97, 0xd4, 0xe2, 0xe4, 0xa2, 0xcc, 0x82, 0x92, 0xfc, 0x22, 0xa1, 0x50, 0x2e,
	0xf6, 0xd4, 0xbc, 0x92, 0xa2, 0xcc, 0xd4, 0x62, 0x09, 0x46, 0x05, 0x66, 0x0d, 0x6e, 0x23, 0x43,
	0x3d, 0xec, 0x46, 0xeb, 0x61, 0xd1, 0xad, 0xe7, 0x9a, 0x57, 0x52, 0x54, 0xe9, 0xc4, 0xf1, 0xcb,
	0x89, 0x75, 0x12, 0x23, 0x13, 0x07, 0x63, 0x10, 0xcc, 0x2c, 0x29, 0x47, 0x2e, 0x56, 0xb0, 0x9c,
	0x90, 0x24, 0x17, 0x73, 0x76, 0x6a, 0xa5, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0xa7, 0x13, 0xfb, 0x2f,
	0x27, 0x96, 0x22, 0x26, 0x05, 0xc6, 0x20, 0x90, 0x98, 0x90, 0x2c, 0x17, 0x6b, 0x59, 0x62, 0x4e,
	0x69, 0xaa, 0x04, 0x13, 0xaa, 0x24, 0x44, 0xd4, 0xc9, 0x82, 0x4b, 0x25, 0x33, 0x1f, 0xe2, 0x98,
	0x82, 0xa2, 0xfc, 0x8a, 0x4a, 0x1c, 0xee, 0x72, 0xe2, 0x0b, 0x82, 0x31, 0x03, 0x40, 0x3e, 0x0d,
	0x60, 0x4c, 0x62, 0x03, 0x7b, 0xd9, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x57, 0xbb, 0x02, 0xaf,
	0x4d, 0x01, 0x00, 0x00,
}
  07070100000074000081A4000003E800000064000000015E17A2470000649E000000000000000000000000000000000000003000000000cilium-proxy-20200109/go/envoy/api/v2/rds.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/rds.proto

package envoy_api_v2

import (
	context "context"
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	route "github.com/cilium/proxy/go/envoy/api/v2/route"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#next-free-field: 11]
type RouteConfiguration struct {
	// The name of the route configuration. For example, it might match
	// :ref:`route_config_name
	// <envoy_api_field_config.filter.network.http_connection_manager.v2.Rds.route_config_name>` in
	// :ref:`envoy_api_msg_config.filter.network.http_connection_manager.v2.Rds`.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// An array of virtual hosts that make up the route table.
	VirtualHosts []*route.VirtualHost `protobuf:"bytes,2,rep,name=virtual_hosts,json=virtualHosts,proto3" json:"virtual_hosts,omitempty"`
	// An array of virtual hosts will be dynamically loaded via the VHDS API.
	// Both *virtual_hosts* and *vhds* fields will be used when present. *virtual_hosts* can be used
	// for a base routing table or for infrequently changing virtual hosts. *vhds* is used for
	// on-demand discovery of virtual hosts. The contents of these two fields will be merged to
	// generate a routing table for a given RouteConfiguration, with *vhds* derived configuration
	// taking precedence.
	// [#not-implemented-hide:]
	Vhds *Vhds `protobuf:"bytes,9,opt,name=vhds,proto3" json:"vhds,omitempty"`
	// Optionally specifies a list of HTTP headers that the connection manager
	// will consider to be internal only. If they are found on external requests they will be cleaned
	// prior to filter invocation. See :ref:`config_http_conn_man_headers_x-envoy-internal` for more
	// information.
	InternalOnlyHeaders []string `protobuf:"bytes,3,rep,name=internal_only_headers,json=internalOnlyHeaders,proto3" json:"internal_only_headers,omitempty"`
	// Specifies a list of HTTP headers that should be added to each response that
	// the connection manager encodes. Headers specified at this level are applied
	// after headers from any enclosed :ref:`envoy_api_msg_route.VirtualHost` or
	// :ref:`envoy_api_msg_route.RouteAction`. For more information, including details on
	// header value syntax, see the documentation on :ref:`custom request headers
	// <config_http_conn_man_headers_custom_request_headers>`.
	ResponseHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,4,rep,name=response_headers_to_add,json=responseHeadersToAdd,proto3" json:"response_headers_to_add,omitempty"`
	// Specifies a list of HTTP headers that should be removed from each response
	// that the connection manager encodes.
	ResponseHeadersToRemove []string `protobuf:"bytes,5,rep,name=response_headers_to_remove,json=responseHeadersToRemove,proto3" json:"response_headers_to_remove,omitempty"`
	// Specifies a list of HTTP headers that should be added to each request
	// routed by the HTTP connection manager. Headers specified at this level are
	// applied after headers from any enclosed :ref:`envoy_api_msg_route.VirtualHost` or
	// :ref:`envoy_api_msg_route.RouteAction`. For more information, including details on
	// header value syntax, see the documentation on :ref:`custom request headers
	// <config_http_conn_man_headers_custom_request_headers>`.
	RequestHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,6,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"`
	// Specifies a list of HTTP headers that should be removed from each request
	// routed by the HTTP connection manager.
	RequestHeadersToRemove []string `protobuf:"bytes,8,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"`
	// By default, headers that should be added/removed are evaluated from most to least specific:
	//
	// * route level
	// * virtual host level
	// * connection manager level
	//
	// To allow setting overrides at the route or virtual host level, this order can be reversed
	// by setting this option to true. Defaults to false.
	//
	// [#next-major-version: In the v3 API, this will default to true.]
	MostSpecificHeaderMutationsWins bool `protobuf:"varint,10,opt,name=most_specific_header_mutations_wins,json=mostSpecificHeaderMutationsWins,proto3" json:"most_specific_header_mutations_wins,omitempty"`
	// An optional boolean that specifies whether the clusters that the route
	// table refers to will be validated by the cluster manager. If set to true
	// and a route refers to a non-existent cluster, the route table will not
	// load. If set to false and a route refers to a non-existent cluster, the
	// route table will load and the router filter will return a 404 if the route
	// is selected at runtime. This setting defaults to true if the route table
	// is statically defined via the :ref:`route_config
	// <envoy_api_field_config.filter.network.http_connection_manager.v2.HttpConnectionManager.route_config>`
	// option. This setting default to false if the route table is loaded dynamically via the
	// :ref:`rds
	// <envoy_api_field_config.filter.network.http_connection_manager.v2.HttpConnectionManager.rds>`
	// option. Users may wish to override the default behavior in certain cases (for example when
	// using CDS with a static route table).
	ValidateClusters     *wrappers.BoolValue `protobuf:"bytes,7,opt,name=validate_clusters,json=validateClusters,proto3" json:"validate_clusters,omitempty"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *RouteConfiguration) Reset()         { *m = RouteConfiguration{} }
func (m *RouteConfiguration) String() string { return proto.CompactTextString(m) }
func (*RouteConfiguration) ProtoMessage()    {}
func (*RouteConfiguration) Descriptor() ([]byte, []int) {
	return fileDescriptor_78812f46dcff924a, []int{0}
}

func (m *RouteConfiguration) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteConfiguration.Unmarshal(m, b)
}
func (m *RouteConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteConfiguration.Marshal(b, m, deterministic)
}
func (m *RouteConfiguration) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteConfiguration.Merge(m, src)
}
func (m *RouteConfiguration) XXX_Size() int {
	return xxx_messageInfo_RouteConfiguration.Size(m)
}
func (m *RouteConfiguration) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteConfiguration.DiscardUnknown(m)
}

var xxx_messageInfo_RouteConfiguration proto.InternalMessageInfo

func (m *RouteConfiguration) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *RouteConfiguration) GetVirtualHosts() []*route.VirtualHost {
	if m != nil {
		return m.VirtualHosts
	}
	return nil
}

func (m *RouteConfiguration) GetVhds() *Vhds {
	if m != nil {
		return m.Vhds
	}
	return nil
}

func (m *RouteConfiguration) GetInternalOnlyHeaders() []string {
	if m != nil {
		return m.InternalOnlyHeaders
	}
	return nil
}

func (m *RouteConfiguration) GetResponseHeadersToAdd() []*core.HeaderValueOption {
	if m != nil {
		return m.ResponseHeadersToAdd
	}
	return nil
}

func (m *RouteConfiguration) GetResponseHeadersToRemove() []string {
	if m != nil {
		return m.ResponseHeadersToRemove
	}
	return nil
}

func (m *RouteConfiguration) GetRequestHeadersToAdd() []*core.HeaderValueOption {
	if m != nil {
		return m.RequestHeadersToAdd
	}
	return nil
}

func (m *RouteConfiguration) GetRequestHeadersToRemove() []string {
	if m != nil {
		return m.RequestHeadersToRemove
	}
	return nil
}

func (m *RouteConfiguration) GetMostSpecificHeaderMutationsWins() bool {
	if m != nil {
		return m.MostSpecificHeaderMutationsWins
	}
	return false
}

func (m *RouteConfiguration) GetValidateClusters() *wrappers.BoolValue {
	if m != nil {
		return m.ValidateClusters
	}
	return nil
}

// [#not-implemented-hide:]
type Vhds struct {
	// Configuration source specifier for VHDS.
	ConfigSource         *core.ConfigSource `protobuf:"bytes,1,opt,name=config_source,json=configSource,proto3" json:"config_source,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *Vhds) Reset()         { *m = Vhds{} }
func (m *Vhds) String() string { return proto.CompactTextString(m) }
func (*Vhds) ProtoMessage()    {}
func (*Vhds) Descriptor() ([]byte, []int) {
	return fileDescriptor_78812f46dcff924a, []int{1}
}

func (m *Vhds) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Vhds.Unmarshal(m, b)
}
func (m *Vhds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Vhds.Marshal(b, m, deterministic)
}
func (m *Vhds) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Vhds.Merge(m, src)
}
func (m *Vhds) XXX_Size() int {
	return xxx_messageInfo_Vhds.Size(m)
}
func (m *Vhds) XXX_DiscardUnknown() {
	xxx_messageInfo_Vhds.DiscardUnknown(m)
}

var xxx_messageInfo_Vhds proto.InternalMessageInfo

func (m *Vhds) GetConfigSource() *core.ConfigSource {
	if m != nil {
		return m.ConfigSource
	}
	return nil
}

func init() {
	proto.RegisterType((*RouteConfiguration)(nil), "envoy.api.v2.RouteConfiguration")
	proto.RegisterType((*Vhds)(nil), "envoy.api.v2.Vhds")
}

func init() { proto.RegisterFile("envoy/api/v2/rds.proto", fileDescriptor_78812f46dcff924a) }

var fileDescriptor_78812f46dcff924a = []byte{
	// 675 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xcf, 0x6e, 0xd3, 0x30,
	0x1c, 0xc6, 0x6d, 0xb7, 0xb5, 0x6e, 0x27, 0x6d, 0xde, 0xbf, 0xae, 0xa0, 0xb5, 0xea, 0x06, 0xaa,
	0x40, 0x4a, 0x51, 0x38, 0x31, 0x4e, 0x64, 0x13, 0xec, 0x00, 0x6c, 0x4a, 0xa1, 0xdc, 0x88, 0xbc,
	0xc4, 0x5d, 0x2d, 0xa5, 0x71, 0xb0, 0x9d, 0x8c, 0x5e, 0xe1, 0x82, 0x38, 0xc2, 0x43, 0xf0, 0x18,
	0x3c, 0x04, 0xaf, 0xc0, 0x81, 0x67, 0xd8, 0x09, 0xc5, 0x8e, 0xa1, 0x59, 0x07, 0x07, 0xb4, 0x4b,
	0x94, 0xe4, 0xfb, 0xbe, 0xdf, 0xef, 0xb3, 0xfd, 0xfd, 0x0c, 0x37, 0x49, 0x94, 0xb2, 0x69, 0x1f,
	0xc7, 0xb4, 0x9f, 0xda, 0x7d, 0x1e, 0x08, 0x2b, 0xe6, 0x4c, 0x32, 0xd4, 0x50, 0xff, 0x2d, 0x1c,
	0x53, 0x2b, 0xb5, 0x5b, 0xb7, 0x0a, 0x2c, 0x9f, 0x71, 0xd2, 0x3f, 0xc5, 0x82, 0x68, 0x6e, 0xeb,
	0xf6, 0x3c, 0xea, 0xb3, 0x68, 0x44, 0xcf, 0x3c, 0xc1, 0x12, 0xee, 0x1b, 0x5a, 0xb1, 0x48, 0x40,
	0x85, 0xcf, 0x52, 0xc2, 0xa7, 0x39, 0xba, 0x53, 0x34, 0xc2, 0x12, 0x49, 0xf4, 0xd3, 0xa8, 0xcf,
	0x18, 0x3b, 0x0b, 0x89, 0x22, 0xe0, 0x28, 0x62, 0x12, 0x4b, 0xca, 0x22, 0x61, 0xd4, 0x39, 0xaa,
	0xbe, 0x4e, 0x93, 0x51, 0xff, 0x9c, 0xe3, 0x38, 0x26, 0xdc, 0xe0, 0x5b, 0x29, 0x0e, 0x69, 0x80,
	0x25, 0xe9, 0x9b, 0x17, 0x0d, 0x74, 0xbf, 0x2e, 0x40, 0xe4, 0x66, 0x6d, 0x0e, 0x94, 0xe3, 0x84,
	0xab, 0xb2, 0x08, 0xc1, 0x4a, 0x84, 0x27, 0xa4, 0x09, 0x3a, 0xa0, 0x57, 0x73, 0xd5, 0x3b, 0x3a,
	0x84, 0xcb, 0x29, 0xe5, 0x32, 0xc1, 0xa1, 0x37, 0x66, 0x42, 0x8a, 0x66, 0xa9, 0x53, 0xee, 0xd5,
	0xed, 0xb6, 0x35, 0xbb, 0x55, 0x96, 0xf6, 0x3c, 0xd4, 0xc4, 0x23, 0x26, 0xa4, 0xdb, 0x48, 0xff,
	0x7c, 0x08, 0x74, 0x07, 0x56, 0xd2, 0x71, 0x20, 0x9a, 0xb5, 0x0e, 0xe8, 0xd5, 0x6d, 0x54, 0x14,
	0x0f, 0xc7, 0x81, 0x70, 0x15, 0x8e, 0x6c, 0xb8, 0x41, 0x23, 0x49, 0x78, 0x84, 0x43, 0x8f, 0x45,
	0xe1, 0xd4, 0x1b, 0x13, 0x1c, 0x10, 0x2e, 0x9a, 0xe5, 0x4e, 0xb9, 0x57, 0x73, 0xd7, 0x0c, 0x78,
	0x1c, 0x85, 0xd3, 0x23, 0x0d, 0xa1, 0x11, 0xdc, 0xe2, 0x44, 0xc4, 0x2c, 0x12, 0xc4, 0xd0, 0x3d,
	0xc9, 0x3c, 0x1c, 0x04, 0xcd, 0x8a, 0xf2, 0xba, 0x57, 0x6c, 0x97, 0x1d, 0x95, 0xa5, 0xc5, 0x43,
	0x1c, 0x26, 0xe4, 0x38, 0xce, 0x16, 0xef, 0xd4, 0x2e, 0x9c, 0xc5, 0xcf, 0xa0, 0xbc, 0xf2, 0x73,
	0xc9, 0x5d, 0x37, 0xf5, 0xf2, 0x16, 0x2f, 0xd9, 0xe3, 0x20, 0x40, 0x8f, 0x60, 0xeb, 0xaa, 0x3e,
	0x9c, 0x4c, 0x58, 0x4a, 0x9a, 0x0b, 0xca, 0xe0, 0xd6, 0x9c, 0xd2, 0x55, 0x30, 0x0a, 0xe0, 0x26,
	0x27, 0x6f, 0x13, 0x22, 0xe4, 0x65, 0x8f, 0x8b, 0xff, 0xe7, 0x71, 0x2d, 0x2f, 0x57, 0xb0, 0xf8,
	0x10, 0x6e, 0x5f, 0xd1, 0x25, 0x77, 0x58, 0x55, 0x0e, 0x37, 0x2f, 0xeb, 0x72, 0x83, 0xcf, 0xe0,
	0xee, 0x84, 0x09, 0xe9, 0x89, 0x98, 0xf8, 0x74, 0x44, 0xfd, 0xbc, 0x80, 0x37, 0x49, 0xf2, 0xcc,
	0x79, 0xe7, 0x34, 0x12, 0x4d, 0xd8, 0x01, 0xbd, 0xaa, 0xdb, 0xce, 0xa8, 0x83, 0x9c, 0xa9, 0x2b,
	0x3d, 0x37, 0xbc, 0xd7, 0x34, 0x12, 0xe8, 0x29, 0x5c, 0x35, 0x91, 0xf3, 0xfc, 0x30, 0x11, 0x32,
	0x3b, 0xc3, 0x25, 0x75, 0xf8, 0x2d, 0x4b, 0xa7, 0xd6, 0x32, 0xa9, 0xb5, 0x1c, 0xc6, 0x42, 0xb5,
	0x4a, 0x77, 0xc5, 0x88, 0x0e, 0x72, 0x4d, 0x77, 0x08, 0x2b, 0x59, 0x3c, 0xd0, 0x0b, 0xb8, 0x5c,
	0x98, 0x2e, 0x95, 0xd1, 0xb9, 0x18, 0xaa, 0x6d, 0xd3, 0x99, 0x1e, 0x28, 0x9a, 0x53, 0xbd, 0x70,
	0x16, 0x3e, 0x81, 0xd2, 0x0a, 0x70, 0x1b, 0xfe, 0xcc, 0x7f, 0xfb, 0x5b, 0x09, 0x6e, 0xa8, 0x09,
	0x38, 0x34, 0x13, 0x39, 0x20, 0x3c, 0xa5, 0x3e, 0x41, 0xaf, 0x60, 0x63, 0x20, 0x39, 0xc1, 0x13,
	0x05, 0x0b, 0xb4, 0x53, 0x6c, 0xf1, 0x9b, 0xef, 0xea, 0x7d, 0x6c, 0xb5, 0xff, 0x8a, 0xeb, 0x24,
	0x74, 0x6f, 0xf4, 0xc0, 0x7d, 0x80, 0xde, 0xc0, 0xfa, 0x21, 0x09, 0x25, 0xce, 0xab, 0xee, 0x5e,
	0x52, 0x65, 0xd0, 0x5c, 0xe9, 0xbd, 0x7f, 0x93, 0x0a, 0xf5, 0x19, 0xac, 0x3f, 0x21, 0xd2, 0x1f,
	0x5f, 0x97, 0xeb, 0xf6, 0xfb, 0xef, 0x3f, 0xbe, 0x94, 0xb6, 0xbb, 0xeb, 0x85, 0x6b, 0x6b, 0x5f,
	0x0d, 0xba, 0xd8, 0x07, 0x77, 0xed, 0x0f, 0x00, 0xde, 0x9c, 0x19, 0xf8, 0xb9, 0x7d, 0x0c, 0xe0,
	0xaa, 0x32, 0x3c, 0x9c, 0xbd, 0x07, 0xae, 0x7b, 0xd9, 0xce, 0x3d, 0xd8, 0xa2, 0x4c, 0xf3, 0x63,
	0xce, 0xde, 0x4d, 0x0b, 0x52, 0xa7, 0xea, 0x06, 0xe2, 0x24, 0x8b, 0xd9, 0x09, 0xf8, 0x08, 0xc0,
	0xe9, 0xa2, 0x8a, 0xdc, 0x83, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x8c, 0x65, 0x72, 0xfc, 0xff,
	0x05, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// RouteDiscoveryServiceClient is the client API for RouteDiscoveryService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type RouteDiscoveryServiceClient interface {
	StreamRoutes(ctx context.Context, opts ...grpc.CallOption) (RouteDiscoveryService_StreamRoutesClient, error)
	DeltaRoutes(ctx context.Context, opts ...grpc.CallOption) (RouteDiscoveryService_DeltaRoutesClient, error)
	FetchRoutes(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error)
}

type routeDiscoveryServiceClient struct {
	cc *grpc.ClientConn
}

func NewRouteDiscoveryServiceClient(cc *grpc.ClientConn) RouteDiscoveryServiceClient {
	return &routeDiscoveryServiceClient{cc}
}

func (c *routeDiscoveryServiceClient) StreamRoutes(ctx context.Context, opts ...grpc.CallOption) (RouteDiscoveryService_StreamRoutesClient, error) {
	stream, err := c.cc.NewStream(ctx, &_RouteDiscoveryService_serviceDesc.Streams[0], "/envoy.api.v2.RouteDiscoveryService/StreamRoutes", opts...)
	if err != nil {
		return nil, err
	}
	x := &routeDiscoveryServiceStreamRoutesClient{stream}
	return x, nil
}

type RouteDiscoveryService_StreamRoutesClient interface {
	Send(*DiscoveryRequest) error
	Recv() (*DiscoveryResponse, error)
	grpc.ClientStream
}

type routeDiscoveryServiceStreamRoutesClient struct {
	grpc.ClientStream
}

func (x *routeDiscoveryServiceStreamRoutesClient) Send(m *DiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *routeDiscoveryServiceStreamRoutesClient) Recv() (*DiscoveryResponse, error) {
	m := new(DiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *routeDiscoveryServiceClient) DeltaRoutes(ctx context.Context, opts ...grpc.CallOption) (RouteDiscoveryService_DeltaRoutesClient, error) {
	stream, err := c.cc.NewStream(ctx, &_RouteDiscoveryService_serviceDesc.Streams[1], "/envoy.api.v2.RouteDiscoveryService/DeltaRoutes", opts...)
	if err != nil {
		return nil, err
	}
	x := &routeDiscoveryServiceDeltaRoutesClient{stream}
	return x, nil
}

type RouteDiscoveryService_DeltaRoutesClient interface {
	Send(*DeltaDiscoveryRequest) error
	Recv() (*DeltaDiscoveryResponse, error)
	grpc.ClientStream
}

type routeDiscoveryServiceDeltaRoutesClient struct {
	grpc.ClientStream
}

func (x *routeDiscoveryServiceDeltaRoutesClient) Send(m *DeltaDiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *routeDiscoveryServiceDeltaRoutesClient) Recv() (*DeltaDiscoveryResponse, error) {
	m := new(DeltaDiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *routeDiscoveryServiceClient) FetchRoutes(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error) {
	out := new(DiscoveryResponse)
	err := c.cc.Invoke(ctx, "/envoy.api.v2.RouteDiscoveryService/FetchRoutes", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// RouteDiscoveryServiceServer is the server API for RouteDiscoveryService service.
type RouteDiscoveryServiceServer interface {
	StreamRoutes(RouteDiscoveryService_StreamRoutesServer) error
	DeltaRoutes(RouteDiscoveryService_DeltaRoutesServer) error
	FetchRoutes(context.Context, *DiscoveryRequest) (*DiscoveryResponse, error)
}

// UnimplementedRouteDiscoveryServiceServer can be embedded to have forward compatible implementations.
type UnimplementedRouteDiscoveryServiceServer struct {
}

func (*UnimplementedRouteDiscoveryServiceServer) StreamRoutes(srv RouteDiscoveryService_StreamRoutesServer) error {
	return status.Errorf(codes.Unimplemented, "method StreamRoutes not implemented")
}
func (*UnimplementedRouteDiscoveryServiceServer) DeltaRoutes(srv RouteDiscoveryService_DeltaRoutesServer) error {
	return status.Errorf(codes.Unimplemented, "method DeltaRoutes not implemented")
}
func (*UnimplementedRouteDiscoveryServiceServer) FetchRoutes(ctx context.Context, req *DiscoveryRequest) (*DiscoveryResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method FetchRoutes not implemented")
}

func RegisterRouteDiscoveryServiceServer(s *grpc.Server, srv RouteDiscoveryServiceServer) {
	s.RegisterService(&_RouteDiscoveryService_serviceDesc, srv)
}

func _RouteDiscoveryService_StreamRoutes_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(RouteDiscoveryServiceServer).StreamRoutes(&routeDiscoveryServiceStreamRoutesServer{stream})
}

type RouteDiscoveryService_StreamRoutesServer interface {
	Send(*DiscoveryResponse) error
	Recv() (*DiscoveryRequest, error)
	grpc.ServerStream
}

type routeDiscoveryServiceStreamRoutesServer struct {
	grpc.ServerStream
}

func (x *routeDiscoveryServiceStreamRoutesServer) Send(m *DiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *routeDiscoveryServiceStreamRoutesServer) Recv() (*DiscoveryRequest, error) {
	m := new(DiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _RouteDiscoveryService_DeltaRoutes_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(RouteDiscoveryServiceServer).DeltaRoutes(&routeDiscoveryServiceDeltaRoutesServer{stream})
}

type RouteDiscoveryService_DeltaRoutesServer interface {
	Send(*DeltaDiscoveryResponse) error
	Recv() (*DeltaDiscoveryRequest, error)
	grpc.ServerStream
}

type routeDiscoveryServiceDeltaRoutesServer struct {
	grpc.ServerStream
}

func (x *routeDiscoveryServiceDeltaRoutesServer) Send(m *DeltaDiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *routeDiscoveryServiceDeltaRoutesServer) Recv() (*DeltaDiscoveryRequest, error) {
	m := new(DeltaDiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _RouteDiscoveryService_FetchRoutes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(DiscoveryRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(RouteDiscoveryServiceServer).FetchRoutes(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/envoy.api.v2.RouteDiscoveryService/FetchRoutes",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(RouteDiscoveryServiceServer).FetchRoutes(ctx, req.(*DiscoveryRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _RouteDiscoveryService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.api.v2.RouteDiscoveryService",
	HandlerType: (*RouteDiscoveryServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "FetchRoutes",
			Handler:    _RouteDiscoveryService_FetchRoutes_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "StreamRoutes",
			Handler:       _RouteDiscoveryService_StreamRoutes_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
		{
			StreamName:    "DeltaRoutes",
			Handler:       _RouteDiscoveryService_DeltaRoutes_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
	},
	Metadata: "envoy/api/v2/rds.proto",
}

// VirtualHostDiscoveryServiceClient is the client API for VirtualHostDiscoveryService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type VirtualHostDiscoveryServiceClient interface {
	DeltaVirtualHosts(ctx context.Context, opts ...grpc.CallOption) (VirtualHostDiscoveryService_DeltaVirtualHostsClient, error)
}

type virtualHostDiscoveryServiceClient struct {
	cc *grpc.ClientConn
}

func NewVirtualHostDiscoveryServiceClient(cc *grpc.ClientConn) VirtualHostDiscoveryServiceClient {
	return &virtualHostDiscoveryServiceClient{cc}
}

func (c *virtualHostDiscoveryServiceClient) DeltaVirtualHosts(ctx context.Context, opts ...grpc.CallOption) (VirtualHostDiscoveryService_DeltaVirtualHostsClient, error) {
	stream, err := c.cc.NewStream(ctx, &_VirtualHostDiscoveryService_serviceDesc.Streams[0], "/envoy.api.v2.VirtualHostDiscoveryService/DeltaVirtualHosts", opts...)
	if err != nil {
		return nil, err
	}
	x := &virtualHostDiscoveryServiceDeltaVirtualHostsClient{stream}
	return x, nil
}

type VirtualHostDiscoveryService_DeltaVirtualHostsClient interface {
	Send(*DeltaDiscoveryRequest) error
	Recv() (*DeltaDiscoveryResponse, error)
	grpc.ClientStream
}

type virtualHostDiscoveryServiceDeltaVirtualHostsClient struct {
	grpc.ClientStream
}

func (x *virtualHostDiscoveryServiceDeltaVirtualHostsClient) Send(m *DeltaDiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *virtualHostDiscoveryServiceDeltaVirtualHostsClient) Recv() (*DeltaDiscoveryResponse, error) {
	m := new(DeltaDiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

// VirtualHostDiscoveryServiceServer is the server API for VirtualHostDiscoveryService service.
type VirtualHostDiscoveryServiceServer interface {
	DeltaVirtualHosts(VirtualHostDiscoveryService_DeltaVirtualHostsServer) error
}

// UnimplementedVirtualHostDiscoveryServiceServer can be embedded to have forward compatible implementations.
type UnimplementedVirtualHostDiscoveryServiceServer struct {
}

func (*UnimplementedVirtualHostDiscoveryServiceServer) DeltaVirtualHosts(srv VirtualHostDiscoveryService_DeltaVirtualHostsServer) error {
	return status.Errorf(codes.Unimplemented, "method DeltaVirtualHosts not implemented")
}

func RegisterVirtualHostDiscoveryServiceServer(s *grpc.Server, srv VirtualHostDiscoveryServiceServer) {
	s.RegisterService(&_VirtualHostDiscoveryService_serviceDesc, srv)
}

func _VirtualHostDiscoveryService_DeltaVirtualHosts_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(VirtualHostDiscoveryServiceServer).DeltaVirtualHosts(&virtualHostDiscoveryServiceDeltaVirtualHostsServer{stream})
}

type VirtualHostDiscoveryService_DeltaVirtualHostsServer interface {
	Send(*DeltaDiscoveryResponse) error
	Recv() (*DeltaDiscoveryRequest, error)
	grpc.ServerStream
}

type virtualHostDiscoveryServiceDeltaVirtualHostsServer struct {
	grpc.ServerStream
}

func (x *virtualHostDiscoveryServiceDeltaVirtualHostsServer) Send(m *DeltaDiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *virtualHostDiscoveryServiceDeltaVirtualHostsServer) Recv() (*DeltaDiscoveryRequest, error) {
	m := new(DeltaDiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

var _VirtualHostDiscoveryService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.api.v2.VirtualHostDiscoveryService",
	HandlerType: (*VirtualHostDiscoveryServiceServer)(nil),
	Methods:     []grpc.MethodDesc{},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "DeltaVirtualHosts",
			Handler:       _VirtualHostDiscoveryService_DeltaVirtualHosts_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
	},
	Metadata: "envoy/api/v2/rds.proto",
}
  07070100000075000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000002C00000000cilium-proxy-20200109/go/envoy/api/v2/route   07070100000076000081A4000003E800000064000000015E17A2470002C5CB000000000000000000000000000000000000003800000000cilium-proxy-20200109/go/envoy/api/v2/route/route.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/route/route.proto

package envoy_api_v2_route

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_type "github.com/cilium/proxy/go/envoy/type"
	matcher "github.com/cilium/proxy/go/envoy/type/matcher"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	duration "github.com/golang/protobuf/ptypes/duration"
	_struct "github.com/golang/protobuf/ptypes/struct"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type VirtualHost_TlsRequirementType int32

const (
	// No TLS requirement for the virtual host.
	VirtualHost_NONE VirtualHost_TlsRequirementType = 0
	// External requests must use TLS. If a request is external and it is not
	// using TLS, a 301 redirect will be sent telling the client to use HTTPS.
	VirtualHost_EXTERNAL_ONLY VirtualHost_TlsRequirementType = 1
	// All requests must use TLS. If a request is not using TLS, a 301 redirect
	// will be sent telling the client to use HTTPS.
	VirtualHost_ALL VirtualHost_TlsRequirementType = 2
)

var VirtualHost_TlsRequirementType_name = map[int32]string{
	0: "NONE",
	1: "EXTERNAL_ONLY",
	2: "ALL",
}

var VirtualHost_TlsRequirementType_value = map[string]int32{
	"NONE":          0,
	"EXTERNAL_ONLY": 1,
	"ALL":           2,
}

func (x VirtualHost_TlsRequirementType) String() string {
	return proto.EnumName(VirtualHost_TlsRequirementType_name, int32(x))
}

func (VirtualHost_TlsRequirementType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{0, 0}
}

type RouteAction_ClusterNotFoundResponseCode int32

const (
	// HTTP status code - 503 Service Unavailable.
	RouteAction_SERVICE_UNAVAILABLE RouteAction_ClusterNotFoundResponseCode = 0
	// HTTP status code - 404 Not Found.
	RouteAction_NOT_FOUND RouteAction_ClusterNotFoundResponseCode = 1
)

var RouteAction_ClusterNotFoundResponseCode_name = map[int32]string{
	0: "SERVICE_UNAVAILABLE",
	1: "NOT_FOUND",
}

var RouteAction_ClusterNotFoundResponseCode_value = map[string]int32{
	"SERVICE_UNAVAILABLE": 0,
	"NOT_FOUND":           1,
}

func (x RouteAction_ClusterNotFoundResponseCode) String() string {
	return proto.EnumName(RouteAction_ClusterNotFoundResponseCode_name, int32(x))
}

func (RouteAction_ClusterNotFoundResponseCode) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{5, 0}
}

// Configures :ref:`internal redirect <arch_overview_internal_redirects>` behavior.
type RouteAction_InternalRedirectAction int32

const (
	RouteAction_PASS_THROUGH_INTERNAL_REDIRECT RouteAction_InternalRedirectAction = 0
	RouteAction_HANDLE_INTERNAL_REDIRECT       RouteAction_InternalRedirectAction = 1
)

var RouteAction_InternalRedirectAction_name = map[int32]string{
	0: "PASS_THROUGH_INTERNAL_REDIRECT",
	1: "HANDLE_INTERNAL_REDIRECT",
}

var RouteAction_InternalRedirectAction_value = map[string]int32{
	"PASS_THROUGH_INTERNAL_REDIRECT": 0,
	"HANDLE_INTERNAL_REDIRECT":       1,
}

func (x RouteAction_InternalRedirectAction) String() string {
	return proto.EnumName(RouteAction_InternalRedirectAction_name, int32(x))
}

func (RouteAction_InternalRedirectAction) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{5, 1}
}

type RedirectAction_RedirectResponseCode int32

const (
	// Moved Permanently HTTP Status Code - 301.
	RedirectAction_MOVED_PERMANENTLY RedirectAction_RedirectResponseCode = 0
	// Found HTTP Status Code - 302.
	RedirectAction_FOUND RedirectAction_RedirectResponseCode = 1
	// See Other HTTP Status Code - 303.
	RedirectAction_SEE_OTHER RedirectAction_RedirectResponseCode = 2
	// Temporary Redirect HTTP Status Code - 307.
	RedirectAction_TEMPORARY_REDIRECT RedirectAction_RedirectResponseCode = 3
	// Permanent Redirect HTTP Status Code - 308.
	RedirectAction_PERMANENT_REDIRECT RedirectAction_RedirectResponseCode = 4
)

var RedirectAction_RedirectResponseCode_name = map[int32]string{
	0: "MOVED_PERMANENTLY",
	1: "FOUND",
	2: "SEE_OTHER",
	3: "TEMPORARY_REDIRECT",
	4: "PERMANENT_REDIRECT",
}

var RedirectAction_RedirectResponseCode_value = map[string]int32{
	"MOVED_PERMANENTLY":  0,
	"FOUND":              1,
	"SEE_OTHER":          2,
	"TEMPORARY_REDIRECT": 3,
	"PERMANENT_REDIRECT": 4,
}

func (x RedirectAction_RedirectResponseCode) String() string {
	return proto.EnumName(RedirectAction_RedirectResponseCode_name, int32(x))
}

func (RedirectAction_RedirectResponseCode) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{8, 0}
}

// The top level element in the routing configuration is a virtual host. Each virtual host has
// a logical name as well as a set of domains that get routed to it based on the incoming request's
// host header. This allows a single listener to service multiple top level domain path trees. Once
// a virtual host is selected based on the domain, the routes are processed in order to see which
// upstream cluster to route to or whether to perform a redirect.
// [#next-free-field: 19]
type VirtualHost struct {
	// The logical name of the virtual host. This is used when emitting certain
	// statistics but is not relevant for routing.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// A list of domains (host/authority header) that will be matched to this
	// virtual host. Wildcard hosts are supported in the suffix or prefix form.
	//
	// Domain search order:
	//  1. Exact domain names: ``www.foo.com``.
	//  2. Suffix domain wildcards: ``*.foo.com`` or ``*-bar.foo.com``.
	//  3. Prefix domain wildcards: ``foo.*`` or ``foo-*``.
	//  4. Special wildcard ``*`` matching any domain.
	//
	// .. note::
	//
	//   The wildcard will not match the empty string.
	//   e.g. ``*-bar.foo.com`` will match ``baz-bar.foo.com`` but not ``-bar.foo.com``.
	//   The longest wildcards match first.
	//   Only a single virtual host in the entire route configuration can match on ``*``. A domain
	//   must be unique across all virtual hosts or the config will fail to load.
	Domains []string `protobuf:"bytes,2,rep,name=domains,proto3" json:"domains,omitempty"`
	// The list of routes that will be matched, in order, for incoming requests.
	// The first route that matches will be used.
	Routes []*Route `protobuf:"bytes,3,rep,name=routes,proto3" json:"routes,omitempty"`
	// Specifies the type of TLS enforcement the virtual host expects. If this option is not
	// specified, there is no TLS requirement for the virtual host.
	RequireTls VirtualHost_TlsRequirementType `protobuf:"varint,4,opt,name=require_tls,json=requireTls,proto3,enum=envoy.api.v2.route.VirtualHost_TlsRequirementType" json:"require_tls,omitempty"`
	// A list of virtual clusters defined for this virtual host. Virtual clusters
	// are used for additional statistics gathering.
	VirtualClusters []*VirtualCluster `protobuf:"bytes,5,rep,name=virtual_clusters,json=virtualClusters,proto3" json:"virtual_clusters,omitempty"`
	// Specifies a set of rate limit configurations that will be applied to the
	// virtual host.
	RateLimits []*RateLimit `protobuf:"bytes,6,rep,name=rate_limits,json=rateLimits,proto3" json:"rate_limits,omitempty"`
	// Specifies a list of HTTP headers that should be added to each request
	// handled by this virtual host. Headers specified at this level are applied
	// after headers from enclosed :ref:`envoy_api_msg_route.Route` and before headers from the
	// enclosing :ref:`envoy_api_msg_RouteConfiguration`. For more information, including
	// details on header value syntax, see the documentation on :ref:`custom request headers
	// <config_http_conn_man_headers_custom_request_headers>`.
	RequestHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,7,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"`
	// Specifies a list of HTTP headers that should be removed from each request
	// handled by this virtual host.
	RequestHeadersToRemove []string `protobuf:"bytes,13,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"`
	// Specifies a list of HTTP headers that should be added to each response
	// handled by this virtual host. Headers specified at this level are applied
	// after headers from enclosed :ref:`envoy_api_msg_route.Route` and before headers from the
	// enclosing :ref:`envoy_api_msg_RouteConfiguration`. For more information, including
	// details on header value syntax, see the documentation on :ref:`custom request headers
	// <config_http_conn_man_headers_custom_request_headers>`.
	ResponseHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,10,rep,name=response_headers_to_add,json=responseHeadersToAdd,proto3" json:"response_headers_to_add,omitempty"`
	// Specifies a list of HTTP headers that should be removed from each response
	// handled by this virtual host.
	ResponseHeadersToRemove []string `protobuf:"bytes,11,rep,name=response_headers_to_remove,json=responseHeadersToRemove,proto3" json:"response_headers_to_remove,omitempty"`
	// Indicates that the virtual host has a CORS policy.
	Cors *CorsPolicy `protobuf:"bytes,8,opt,name=cors,proto3" json:"cors,omitempty"`
	// The per_filter_config field can be used to provide virtual host-specific
	// configurations for filters. The key should match the filter name, such as
	// *envoy.buffer* for the HTTP buffer filter. Use of this field is filter
	// specific; see the :ref:`HTTP filter documentation <config_http_filters>`
	// for if and how it is utilized.
	PerFilterConfig map[string]*_struct.Struct `protobuf:"bytes,12,rep,name=per_filter_config,json=perFilterConfig,proto3" json:"per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Deprecated: Do not use.
	// The per_filter_config field can be used to provide virtual host-specific
	// configurations for filters. The key should match the filter name, such as
	// *envoy.buffer* for the HTTP buffer filter. Use of this field is filter
	// specific; see the :ref:`HTTP filter documentation <config_http_filters>`
	// for if and how it is utilized.
	TypedPerFilterConfig map[string]*any.Any `protobuf:"bytes,15,rep,name=typed_per_filter_config,json=typedPerFilterConfig,proto3" json:"typed_per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Decides whether the :ref:`x-envoy-attempt-count
	// <config_http_filters_router_x-envoy-attempt-count>` header should be included
	// in the upstream request. Setting this option will cause it to override any existing header
	// value, so in the case of two Envoys on the request path with this option enabled, the upstream
	// will see the attempt count as perceived by the second Envoy. Defaults to false.
	// This header is unaffected by the
	// :ref:`suppress_envoy_headers
	// <envoy_api_field_config.filter.http.router.v2.Router.suppress_envoy_headers>` flag.
	IncludeRequestAttemptCount bool `protobuf:"varint,14,opt,name=include_request_attempt_count,json=includeRequestAttemptCount,proto3" json:"include_request_attempt_count,omitempty"`
	// Indicates the retry policy for all routes in this virtual host. Note that setting a
	// route level entry will take precedence over this config and it'll be treated
	// independently (e.g.: values are not inherited).
	RetryPolicy *RetryPolicy `protobuf:"bytes,16,opt,name=retry_policy,json=retryPolicy,proto3" json:"retry_policy,omitempty"`
	// Indicates the hedge policy for all routes in this virtual host. Note that setting a
	// route level entry will take precedence over this config and it'll be treated
	// independently (e.g.: values are not inherited).
	HedgePolicy *HedgePolicy `protobuf:"bytes,17,opt,name=hedge_policy,json=hedgePolicy,proto3" json:"hedge_policy,omitempty"`
	// The maximum bytes which will be buffered for retries and shadowing.
	// If set and a route-specific limit is not set, the bytes actually buffered will be the minimum
	// value of this and the listener per_connection_buffer_limit_bytes.
	PerRequestBufferLimitBytes *wrappers.UInt32Value `protobuf:"bytes,18,opt,name=per_request_buffer_limit_bytes,json=perRequestBufferLimitBytes,proto3" json:"per_request_buffer_limit_bytes,omitempty"`
	XXX_NoUnkeyedLiteral       struct{}              `json:"-"`
	XXX_unrecognized           []byte                `json:"-"`
	XXX_sizecache              int32                 `json:"-"`
}

func (m *VirtualHost) Reset()         { *m = VirtualHost{} }
func (m *VirtualHost) String() string { return proto.CompactTextString(m) }
func (*VirtualHost) ProtoMessage()    {}
func (*VirtualHost) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{0}
}

func (m *VirtualHost) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_VirtualHost.Unmarshal(m, b)
}
func (m *VirtualHost) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_VirtualHost.Marshal(b, m, deterministic)
}
func (m *VirtualHost) XXX_Merge(src proto.Message) {
	xxx_messageInfo_VirtualHost.Merge(m, src)
}
func (m *VirtualHost) XXX_Size() int {
	return xxx_messageInfo_VirtualHost.Size(m)
}
func (m *VirtualHost) XXX_DiscardUnknown() {
	xxx_messageInfo_VirtualHost.DiscardUnknown(m)
}

var xxx_messageInfo_VirtualHost proto.InternalMessageInfo

func (m *VirtualHost) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *VirtualHost) GetDomains() []string {
	if m != nil {
		return m.Domains
	}
	return nil
}

func (m *VirtualHost) GetRoutes() []*Route {
	if m != nil {
		return m.Routes
	}
	return nil
}

func (m *VirtualHost) GetRequireTls() VirtualHost_TlsRequirementType {
	if m != nil {
		return m.RequireTls
	}
	return VirtualHost_NONE
}

func (m *VirtualHost) GetVirtualClusters() []*VirtualCluster {
	if m != nil {
		return m.VirtualClusters
	}
	return nil
}

func (m *VirtualHost) GetRateLimits() []*RateLimit {
	if m != nil {
		return m.RateLimits
	}
	return nil
}

func (m *VirtualHost) GetRequestHeadersToAdd() []*core.HeaderValueOption {
	if m != nil {
		return m.RequestHeadersToAdd
	}
	return nil
}

func (m *VirtualHost) GetRequestHeadersToRemove() []string {
	if m != nil {
		return m.RequestHeadersToRemove
	}
	return nil
}

func (m *VirtualHost) GetResponseHeadersToAdd() []*core.HeaderValueOption {
	if m != nil {
		return m.ResponseHeadersToAdd
	}
	return nil
}

func (m *VirtualHost) GetResponseHeadersToRemove() []string {
	if m != nil {
		return m.ResponseHeadersToRemove
	}
	return nil
}

func (m *VirtualHost) GetCors() *CorsPolicy {
	if m != nil {
		return m.Cors
	}
	return nil
}

// Deprecated: Do not use.
func (m *VirtualHost) GetPerFilterConfig() map[string]*_struct.Struct {
	if m != nil {
		return m.PerFilterConfig
	}
	return nil
}

func (m *VirtualHost) GetTypedPerFilterConfig() map[string]*any.Any {
	if m != nil {
		return m.TypedPerFilterConfig
	}
	return nil
}

func (m *VirtualHost) GetIncludeRequestAttemptCount() bool {
	if m != nil {
		return m.IncludeRequestAttemptCount
	}
	return false
}

func (m *VirtualHost) GetRetryPolicy() *RetryPolicy {
	if m != nil {
		return m.RetryPolicy
	}
	return nil
}

func (m *VirtualHost) GetHedgePolicy() *HedgePolicy {
	if m != nil {
		return m.HedgePolicy
	}
	return nil
}

func (m *VirtualHost) GetPerRequestBufferLimitBytes() *wrappers.UInt32Value {
	if m != nil {
		return m.PerRequestBufferLimitBytes
	}
	return nil
}

// A route is both a specification of how to match a request as well as an indication of what to do
// next (e.g., redirect, forward, rewrite, etc.).
//
// .. attention::
//
//   Envoy supports routing on HTTP method via :ref:`header matching
//   <envoy_api_msg_route.HeaderMatcher>`.
// [#next-free-field: 17]
type Route struct {
	// Name for the route.
	Name string `protobuf:"bytes,14,opt,name=name,proto3" json:"name,omitempty"`
	// Route matching parameters.
	Match *RouteMatch `protobuf:"bytes,1,opt,name=match,proto3" json:"match,omitempty"`
	// Types that are valid to be assigned to Action:
	//	*Route_Route
	//	*Route_Redirect
	//	*Route_DirectResponse
	Action isRoute_Action `protobuf_oneof:"action"`
	// The Metadata field can be used to provide additional information
	// about the route. It can be used for configuration, stats, and logging.
	// The metadata should go under the filter namespace that will need it.
	// For instance, if the metadata is intended for the Router filter,
	// the filter name should be specified as *envoy.router*.
	Metadata *core.Metadata `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"`
	// Decorator for the matched route.
	Decorator *Decorator `protobuf:"bytes,5,opt,name=decorator,proto3" json:"decorator,omitempty"`
	// The per_filter_config field can be used to provide route-specific
	// configurations for filters. The key should match the filter name, such as
	// *envoy.buffer* for the HTTP buffer filter. Use of this field is filter
	// specific; see the :ref:`HTTP filter documentation <config_http_filters>` for
	// if and how it is utilized.
	PerFilterConfig map[string]*_struct.Struct `protobuf:"bytes,8,rep,name=per_filter_config,json=perFilterConfig,proto3" json:"per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Deprecated: Do not use.
	// The per_filter_config field can be used to provide route-specific
	// configurations for filters. The key should match the filter name, such as
	// *envoy.buffer* for the HTTP buffer filter. Use of this field is filter
	// specific; see the :ref:`HTTP filter documentation <config_http_filters>` for
	// if and how it is utilized.
	TypedPerFilterConfig map[string]*any.Any `protobuf:"bytes,13,rep,name=typed_per_filter_config,json=typedPerFilterConfig,proto3" json:"typed_per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Specifies a set of headers that will be added to requests matching this
	// route. Headers specified at this level are applied before headers from the
	// enclosing :ref:`envoy_api_msg_route.VirtualHost` and
	// :ref:`envoy_api_msg_RouteConfiguration`. For more information, including details on
	// header value syntax, see the documentation on :ref:`custom request headers
	// <config_http_conn_man_headers_custom_request_headers>`.
	RequestHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,9,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"`
	// Specifies a list of HTTP headers that should be removed from each request
	// matching this route.
	RequestHeadersToRemove []string `protobuf:"bytes,12,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"`
	// Specifies a set of headers that will be added to responses to requests
	// matching this route. Headers specified at this level are applied before
	// headers from the enclosing :ref:`envoy_api_msg_route.VirtualHost` and
	// :ref:`envoy_api_msg_RouteConfiguration`. For more information, including
	// details on header value syntax, see the documentation on
	// :ref:`custom request headers <config_http_conn_man_headers_custom_request_headers>`.
	ResponseHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,10,rep,name=response_headers_to_add,json=responseHeadersToAdd,proto3" json:"response_headers_to_add,omitempty"`
	// Specifies a list of HTTP headers that should be removed from each response
	// to requests matching this route.
	ResponseHeadersToRemove []string `protobuf:"bytes,11,rep,name=response_headers_to_remove,json=responseHeadersToRemove,proto3" json:"response_headers_to_remove,omitempty"`
	// Presence of the object defines whether the connection manager's tracing configuration
	// is overridden by this route specific instance.
	Tracing *Tracing `protobuf:"bytes,15,opt,name=tracing,proto3" json:"tracing,omitempty"`
	// The maximum bytes which will be buffered for retries and shadowing.
	// If set, the bytes actually buffered will be the minimum value of this and the
	// listener per_connection_buffer_limit_bytes.
	PerRequestBufferLimitBytes *wrappers.UInt32Value `protobuf:"bytes,16,opt,name=per_request_buffer_limit_bytes,json=perRequestBufferLimitBytes,proto3" json:"per_request_buffer_limit_bytes,omitempty"`
	XXX_NoUnkeyedLiteral       struct{}              `json:"-"`
	XXX_unrecognized           []byte                `json:"-"`
	XXX_sizecache              int32                 `json:"-"`
}

func (m *Route) Reset()         { *m = Route{} }
func (m *Route) String() string { return proto.CompactTextString(m) }
func (*Route) ProtoMessage()    {}
func (*Route) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{1}
}

func (m *Route) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Route.Unmarshal(m, b)
}
func (m *Route) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Route.Marshal(b, m, deterministic)
}
func (m *Route) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Route.Merge(m, src)
}
func (m *Route) XXX_Size() int {
	return xxx_messageInfo_Route.Size(m)
}
func (m *Route) XXX_DiscardUnknown() {
	xxx_messageInfo_Route.DiscardUnknown(m)
}

var xxx_messageInfo_Route proto.InternalMessageInfo

func (m *Route) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Route) GetMatch() *RouteMatch {
	if m != nil {
		return m.Match
	}
	return nil
}

type isRoute_Action interface {
	isRoute_Action()
}

type Route_Route struct {
	Route *RouteAction `protobuf:"bytes,2,opt,name=route,proto3,oneof"`
}

type Route_Redirect struct {
	Redirect *RedirectAction `protobuf:"bytes,3,opt,name=redirect,proto3,oneof"`
}

type Route_DirectResponse struct {
	DirectResponse *DirectResponseAction `protobuf:"bytes,7,opt,name=direct_response,json=directResponse,proto3,oneof"`
}

func (*Route_Route) isRoute_Action() {}

func (*Route_Redirect) isRoute_Action() {}

func (*Route_DirectResponse) isRoute_Action() {}

func (m *Route) GetAction() isRoute_Action {
	if m != nil {
		return m.Action
	}
	return nil
}

func (m *Route) GetRoute() *RouteAction {
	if x, ok := m.GetAction().(*Route_Route); ok {
		return x.Route
	}
	return nil
}

func (m *Route) GetRedirect() *RedirectAction {
	if x, ok := m.GetAction().(*Route_Redirect); ok {
		return x.Redirect
	}
	return nil
}

func (m *Route) GetDirectResponse() *DirectResponseAction {
	if x, ok := m.GetAction().(*Route_DirectResponse); ok {
		return x.DirectResponse
	}
	return nil
}

func (m *Route) GetMetadata() *core.Metadata {
	if m != nil {
		return m.Metadata
	}
	return nil
}

func (m *Route) GetDecorator() *Decorator {
	if m != nil {
		return m.Decorator
	}
	return nil
}

// Deprecated: Do not use.
func (m *Route) GetPerFilterConfig() map[string]*_struct.Struct {
	if m != nil {
		return m.PerFilterConfig
	}
	return nil
}

func (m *Route) GetTypedPerFilterConfig() map[string]*any.Any {
	if m != nil {
		return m.TypedPerFilterConfig
	}
	return nil
}

func (m *Route) GetRequestHeadersToAdd() []*core.HeaderValueOption {
	if m != nil {
		return m.RequestHeadersToAdd
	}
	return nil
}

func (m *Route) GetRequestHeadersToRemove() []string {
	if m != nil {
		return m.RequestHeadersToRemove
	}
	return nil
}

func (m *Route) GetResponseHeadersToAdd() []*core.HeaderValueOption {
	if m != nil {
		return m.ResponseHeadersToAdd
	}
	return nil
}

func (m *Route) GetResponseHeadersToRemove() []string {
	if m != nil {
		return m.ResponseHeadersToRemove
	}
	return nil
}

func (m *Route) GetTracing() *Tracing {
	if m != nil {
		return m.Tracing
	}
	return nil
}

func (m *Route) GetPerRequestBufferLimitBytes() *wrappers.UInt32Value {
	if m != nil {
		return m.PerRequestBufferLimitBytes
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Route) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Route_Route)(nil),
		(*Route_Redirect)(nil),
		(*Route_DirectResponse)(nil),
	}
}

// Compared to the :ref:`cluster <envoy_api_field_route.RouteAction.cluster>` field that specifies a
// single upstream cluster as the target of a request, the :ref:`weighted_clusters
// <envoy_api_field_route.RouteAction.weighted_clusters>` option allows for specification of
// multiple upstream clusters along with weights that indicate the percentage of
// traffic to be forwarded to each cluster. The router selects an upstream cluster based on the
// weights.
type WeightedCluster struct {
	// Specifies one or more upstream clusters associated with the route.
	Clusters []*WeightedCluster_ClusterWeight `protobuf:"bytes,1,rep,name=clusters,proto3" json:"clusters,omitempty"`
	// Specifies the total weight across all clusters. The sum of all cluster weights must equal this
	// value, which must be greater than 0. Defaults to 100.
	TotalWeight *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=total_weight,json=totalWeight,proto3" json:"total_weight,omitempty"`
	// Specifies the runtime key prefix that should be used to construct the
	// runtime keys associated with each cluster. When the *runtime_key_prefix* is
	// specified, the router will look for weights associated with each upstream
	// cluster under the key *runtime_key_prefix* + "." + *cluster[i].name* where
	// *cluster[i]* denotes an entry in the clusters array field. If the runtime
	// key for the cluster does not exist, the value specified in the
	// configuration file will be used as the default weight. See the :ref:`runtime documentation
	// <operations_runtime>` for how key names map to the underlying implementation.
	RuntimeKeyPrefix     string   `protobuf:"bytes,2,opt,name=runtime_key_prefix,json=runtimeKeyPrefix,proto3" json:"runtime_key_prefix,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *WeightedCluster) Reset()         { *m = WeightedCluster{} }
func (m *WeightedCluster) String() string { return proto.CompactTextString(m) }
func (*WeightedCluster) ProtoMessage()    {}
func (*WeightedCluster) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{2}
}

func (m *WeightedCluster) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_WeightedCluster.Unmarshal(m, b)
}
func (m *WeightedCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_WeightedCluster.Marshal(b, m, deterministic)
}
func (m *WeightedCluster) XXX_Merge(src proto.Message) {
	xxx_messageInfo_WeightedCluster.Merge(m, src)
}
func (m *WeightedCluster) XXX_Size() int {
	return xxx_messageInfo_WeightedCluster.Size(m)
}
func (m *WeightedCluster) XXX_DiscardUnknown() {
	xxx_messageInfo_WeightedCluster.DiscardUnknown(m)
}

var xxx_messageInfo_WeightedCluster proto.InternalMessageInfo

func (m *WeightedCluster) GetClusters() []*WeightedCluster_ClusterWeight {
	if m != nil {
		return m.Clusters
	}
	return nil
}

func (m *WeightedCluster) GetTotalWeight() *wrappers.UInt32Value {
	if m != nil {
		return m.TotalWeight
	}
	return nil
}

func (m *WeightedCluster) GetRuntimeKeyPrefix() string {
	if m != nil {
		return m.RuntimeKeyPrefix
	}
	return ""
}

// [#next-free-field: 11]
type WeightedCluster_ClusterWeight struct {
	// Name of the upstream cluster. The cluster must exist in the
	// :ref:`cluster manager configuration <config_cluster_manager>`.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// An integer between 0 and :ref:`total_weight
	// <envoy_api_field_route.WeightedCluster.total_weight>`. When a request matches the route,
	// the choice of an upstream cluster is determined by its weight. The sum of weights across all
	// entries in the clusters array must add up to the total_weight, which defaults to 100.
	Weight *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=weight,proto3" json:"weight,omitempty"`
	// Optional endpoint metadata match criteria used by the subset load balancer. Only endpoints in
	// the upstream cluster with metadata matching what is set in this field will be considered for
	// load balancing. Note that this will be merged with what's provided in :ref:
	// `RouteAction.MetadataMatch <envoy_api_field_route.RouteAction.metadata_match>`, with values
	// here taking precedence. The filter name should be specified as *envoy.lb*.
	MetadataMatch *core.Metadata `protobuf:"bytes,3,opt,name=metadata_match,json=metadataMatch,proto3" json:"metadata_match,omitempty"`
	// Specifies a list of headers to be added to requests when this cluster is selected
	// through the enclosing :ref:`envoy_api_msg_route.RouteAction`.
	// Headers specified at this level are applied before headers from the enclosing
	// :ref:`envoy_api_msg_route.Route`, :ref:`envoy_api_msg_route.VirtualHost`, and
	// :ref:`envoy_api_msg_RouteConfiguration`. For more information, including details on
	// header value syntax, see the documentation on :ref:`custom request headers
	// <config_http_conn_man_headers_custom_request_headers>`.
	RequestHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,4,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"`
	// Specifies a list of HTTP headers that should be removed from each request when
	// this cluster is selected through the enclosing :ref:`envoy_api_msg_route.RouteAction`.
	RequestHeadersToRemove []string `protobuf:"bytes,9,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"`
	// Specifies a list of headers to be added to responses when this cluster is selected
	// through the enclosing :ref:`envoy_api_msg_route.RouteAction`.
	// Headers specified at this level are applied before headers from the enclosing
	// :ref:`envoy_api_msg_route.Route`, :ref:`envoy_api_msg_route.VirtualHost`, and
	// :ref:`envoy_api_msg_RouteConfiguration`. For more information, including details on
	// header value syntax, see the documentation on :ref:`custom request headers
	// <config_http_conn_man_headers_custom_request_headers>`.
	ResponseHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,5,rep,name=response_headers_to_add,json=responseHeadersToAdd,proto3" json:"response_headers_to_add,omitempty"`
	// Specifies a list of headers to be removed from responses when this cluster is selected
	// through the enclosing :ref:`envoy_api_msg_route.RouteAction`.
	ResponseHeadersToRemove []string `protobuf:"bytes,6,rep,name=response_headers_to_remove,json=responseHeadersToRemove,proto3" json:"response_headers_to_remove,omitempty"`
	// The per_filter_config field can be used to provide weighted cluster-specific
	// configurations for filters. The key should match the filter name, such as
	// *envoy.buffer* for the HTTP buffer filter. Use of this field is filter
	// specific; see the :ref:`HTTP filter documentation <config_http_filters>`
	// for if and how it is utilized.
	PerFilterConfig map[string]*_struct.Struct `protobuf:"bytes,8,rep,name=per_filter_config,json=perFilterConfig,proto3" json:"per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Deprecated: Do not use.
	// The per_filter_config field can be used to provide weighted cluster-specific
	// configurations for filters. The key should match the filter name, such as
	// *envoy.buffer* for the HTTP buffer filter. Use of this field is filter
	// specific; see the :ref:`HTTP filter documentation <config_http_filters>`
	// for if and how it is utilized.
	TypedPerFilterConfig map[string]*any.Any `protobuf:"bytes,10,rep,name=typed_per_filter_config,json=typedPerFilterConfig,proto3" json:"typed_per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *WeightedCluster_ClusterWeight) Reset()         { *m = WeightedCluster_ClusterWeight{} }
func (m *WeightedCluster_ClusterWeight) String() string { return proto.CompactTextString(m) }
func (*WeightedCluster_ClusterWeight) ProtoMessage()    {}
func (*WeightedCluster_ClusterWeight) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{2, 0}
}

func (m *WeightedCluster_ClusterWeight) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_WeightedCluster_ClusterWeight.Unmarshal(m, b)
}
func (m *WeightedCluster_ClusterWeight) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_WeightedCluster_ClusterWeight.Marshal(b, m, deterministic)
}
func (m *WeightedCluster_ClusterWeight) XXX_Merge(src proto.Message) {
	xxx_messageInfo_WeightedCluster_ClusterWeight.Merge(m, src)
}
func (m *WeightedCluster_ClusterWeight) XXX_Size() int {
	return xxx_messageInfo_WeightedCluster_ClusterWeight.Size(m)
}
func (m *WeightedCluster_ClusterWeight) XXX_DiscardUnknown() {
	xxx_messageInfo_WeightedCluster_ClusterWeight.DiscardUnknown(m)
}

var xxx_messageInfo_WeightedCluster_ClusterWeight proto.InternalMessageInfo

func (m *WeightedCluster_ClusterWeight) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *WeightedCluster_ClusterWeight) GetWeight() *wrappers.UInt32Value {
	if m != nil {
		return m.Weight
	}
	return nil
}

func (m *WeightedCluster_ClusterWeight) GetMetadataMatch() *core.Metadata {
	if m != nil {
		return m.MetadataMatch
	}
	return nil
}

func (m *WeightedCluster_ClusterWeight) GetRequestHeadersToAdd() []*core.HeaderValueOption {
	if m != nil {
		return m.RequestHeadersToAdd
	}
	return nil
}

func (m *WeightedCluster_ClusterWeight) GetRequestHeadersToRemove() []string {
	if m != nil {
		return m.RequestHeadersToRemove
	}
	return nil
}

func (m *WeightedCluster_ClusterWeight) GetResponseHeadersToAdd() []*core.HeaderValueOption {
	if m != nil {
		return m.ResponseHeadersToAdd
	}
	return nil
}

func (m *WeightedCluster_ClusterWeight) GetResponseHeadersToRemove() []string {
	if m != nil {
		return m.ResponseHeadersToRemove
	}
	return nil
}

// Deprecated: Do not use.
func (m *WeightedCluster_ClusterWeight) GetPerFilterConfig() map[string]*_struct.Struct {
	if m != nil {
		return m.PerFilterConfig
	}
	return nil
}

func (m *WeightedCluster_ClusterWeight) GetTypedPerFilterConfig() map[string]*any.Any {
	if m != nil {
		return m.TypedPerFilterConfig
	}
	return nil
}

// [#next-free-field: 12]
type RouteMatch struct {
	// Types that are valid to be assigned to PathSpecifier:
	//	*RouteMatch_Prefix
	//	*RouteMatch_Path
	//	*RouteMatch_Regex
	//	*RouteMatch_SafeRegex
	PathSpecifier isRouteMatch_PathSpecifier `protobuf_oneof:"path_specifier"`
	// Indicates that prefix/path matching should be case insensitive. The default
	// is true.
	CaseSensitive *wrappers.BoolValue `protobuf:"bytes,4,opt,name=case_sensitive,json=caseSensitive,proto3" json:"case_sensitive,omitempty"`
	// Indicates that the route should additionally match on a runtime key. Every time the route
	// is considered for a match, it must also fall under the percentage of matches indicated by
	// this field. For some fraction N/D, a random number in the range [0,D) is selected. If the
	// number is <= the value of the numerator N, or if the key is not present, the default
	// value, the router continues to evaluate the remaining match criteria. A runtime_fraction
	// route configuration can be used to roll out route changes in a gradual manner without full
	// code/config deploys. Refer to the :ref:`traffic shifting
	// <config_http_conn_man_route_table_traffic_splitting_shift>` docs for additional documentation.
	//
	// .. note::
	//
	//    Parsing this field is implemented such that the runtime key's data may be represented
	//    as a FractionalPercent proto represented as JSON/YAML and may also be represented as an
	//    integer with the assumption that the value is an integral percentage out of 100. For
	//    instance, a runtime key lookup returning the value "42" would parse as a FractionalPercent
	//    whose numerator is 42 and denominator is HUNDRED. This preserves legacy semantics.
	RuntimeFraction *core.RuntimeFractionalPercent `protobuf:"bytes,9,opt,name=runtime_fraction,json=runtimeFraction,proto3" json:"runtime_fraction,omitempty"`
	// Specifies a set of headers that the route should match on. The router will
	// check the request’s headers against all the specified headers in the route
	// config. A match will happen if all the headers in the route are present in
	// the request with the same values (or based on presence if the value field
	// is not in the config).
	Headers []*HeaderMatcher `protobuf:"bytes,6,rep,name=headers,proto3" json:"headers,omitempty"`
	// Specifies a set of URL query parameters on which the route should
	// match. The router will check the query string from the *path* header
	// against all the specified query parameters. If the number of specified
	// query parameters is nonzero, they all must match the *path* header's
	// query string for a match to occur.
	QueryParameters []*QueryParameterMatcher `protobuf:"bytes,7,rep,name=query_parameters,json=queryParameters,proto3" json:"query_parameters,omitempty"`
	// If specified, only gRPC requests will be matched. The router will check
	// that the content-type header has a application/grpc or one of the various
	// application/grpc+ values.
	Grpc *RouteMatch_GrpcRouteMatchOptions `protobuf:"bytes,8,opt,name=grpc,proto3" json:"grpc,omitempty"`
	// If specified, the client tls context will be matched against the defined
	// match options.
	//
	// [#next-major-version: unify with RBAC]
	TlsContext           *RouteMatch_TlsContextMatchOptions `protobuf:"bytes,11,opt,name=tls_context,json=tlsContext,proto3" json:"tls_context,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
	XXX_unrecognized     []byte                             `json:"-"`
	XXX_sizecache        int32                              `json:"-"`
}

func (m *RouteMatch) Reset()         { *m = RouteMatch{} }
func (m *RouteMatch) String() string { return proto.CompactTextString(m) }
func (*RouteMatch) ProtoMessage()    {}
func (*RouteMatch) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{3}
}

func (m *RouteMatch) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteMatch.Unmarshal(m, b)
}
func (m *RouteMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteMatch.Marshal(b, m, deterministic)
}
func (m *RouteMatch) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteMatch.Merge(m, src)
}
func (m *RouteMatch) XXX_Size() int {
	return xxx_messageInfo_RouteMatch.Size(m)
}
func (m *RouteMatch) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteMatch.DiscardUnknown(m)
}

var xxx_messageInfo_RouteMatch proto.InternalMessageInfo

type isRouteMatch_PathSpecifier interface {
	isRouteMatch_PathSpecifier()
}

type RouteMatch_Prefix struct {
	Prefix string `protobuf:"bytes,1,opt,name=prefix,proto3,oneof"`
}

type RouteMatch_Path struct {
	Path string `protobuf:"bytes,2,opt,name=path,proto3,oneof"`
}

type RouteMatch_Regex struct {
	Regex string `protobuf:"bytes,3,opt,name=regex,proto3,oneof"`
}

type RouteMatch_SafeRegex struct {
	SafeRegex *matcher.RegexMatcher `protobuf:"bytes,10,opt,name=safe_regex,json=safeRegex,proto3,oneof"`
}

func (*RouteMatch_Prefix) isRouteMatch_PathSpecifier() {}

func (*RouteMatch_Path) isRouteMatch_PathSpecifier() {}

func (*RouteMatch_Regex) isRouteMatch_PathSpecifier() {}

func (*RouteMatch_SafeRegex) isRouteMatch_PathSpecifier() {}

func (m *RouteMatch) GetPathSpecifier() isRouteMatch_PathSpecifier {
	if m != nil {
		return m.PathSpecifier
	}
	return nil
}

func (m *RouteMatch) GetPrefix() string {
	if x, ok := m.GetPathSpecifier().(*RouteMatch_Prefix); ok {
		return x.Prefix
	}
	return ""
}

func (m *RouteMatch) GetPath() string {
	if x, ok := m.GetPathSpecifier().(*RouteMatch_Path); ok {
		return x.Path
	}
	return ""
}

// Deprecated: Do not use.
func (m *RouteMatch) GetRegex() string {
	if x, ok := m.GetPathSpecifier().(*RouteMatch_Regex); ok {
		return x.Regex
	}
	return ""
}

func (m *RouteMatch) GetSafeRegex() *matcher.RegexMatcher {
	if x, ok := m.GetPathSpecifier().(*RouteMatch_SafeRegex); ok {
		return x.SafeRegex
	}
	return nil
}

func (m *RouteMatch) GetCaseSensitive() *wrappers.BoolValue {
	if m != nil {
		return m.CaseSensitive
	}
	return nil
}

func (m *RouteMatch) GetRuntimeFraction() *core.RuntimeFractionalPercent {
	if m != nil {
		return m.RuntimeFraction
	}
	return nil
}

func (m *RouteMatch) GetHeaders() []*HeaderMatcher {
	if m != nil {
		return m.Headers
	}
	return nil
}

func (m *RouteMatch) GetQueryParameters() []*QueryParameterMatcher {
	if m != nil {
		return m.QueryParameters
	}
	return nil
}

func (m *RouteMatch) GetGrpc() *RouteMatch_GrpcRouteMatchOptions {
	if m != nil {
		return m.Grpc
	}
	return nil
}

func (m *RouteMatch) GetTlsContext() *RouteMatch_TlsContextMatchOptions {
	if m != nil {
		return m.TlsContext
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*RouteMatch) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*RouteMatch_Prefix)(nil),
		(*RouteMatch_Path)(nil),
		(*RouteMatch_Regex)(nil),
		(*RouteMatch_SafeRegex)(nil),
	}
}

type RouteMatch_GrpcRouteMatchOptions struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RouteMatch_GrpcRouteMatchOptions) Reset()         { *m = RouteMatch_GrpcRouteMatchOptions{} }
func (m *RouteMatch_GrpcRouteMatchOptions) String() string { return proto.CompactTextString(m) }
func (*RouteMatch_GrpcRouteMatchOptions) ProtoMessage()    {}
func (*RouteMatch_GrpcRouteMatchOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{3, 0}
}

func (m *RouteMatch_GrpcRouteMatchOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteMatch_GrpcRouteMatchOptions.Unmarshal(m, b)
}
func (m *RouteMatch_GrpcRouteMatchOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteMatch_GrpcRouteMatchOptions.Marshal(b, m, deterministic)
}
func (m *RouteMatch_GrpcRouteMatchOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteMatch_GrpcRouteMatchOptions.Merge(m, src)
}
func (m *RouteMatch_GrpcRouteMatchOptions) XXX_Size() int {
	return xxx_messageInfo_RouteMatch_GrpcRouteMatchOptions.Size(m)
}
func (m *RouteMatch_GrpcRouteMatchOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteMatch_GrpcRouteMatchOptions.DiscardUnknown(m)
}

var xxx_messageInfo_RouteMatch_GrpcRouteMatchOptions proto.InternalMessageInfo

type RouteMatch_TlsContextMatchOptions struct {
	// If specified, the route will match against whether or not a certificate is presented.
	Presented            *wrappers.BoolValue `protobuf:"bytes,1,opt,name=presented,proto3" json:"presented,omitempty"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *RouteMatch_TlsContextMatchOptions) Reset()         { *m = RouteMatch_TlsContextMatchOptions{} }
func (m *RouteMatch_TlsContextMatchOptions) String() string { return proto.CompactTextString(m) }
func (*RouteMatch_TlsContextMatchOptions) ProtoMessage()    {}
func (*RouteMatch_TlsContextMatchOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{3, 1}
}

func (m *RouteMatch_TlsContextMatchOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteMatch_TlsContextMatchOptions.Unmarshal(m, b)
}
func (m *RouteMatch_TlsContextMatchOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteMatch_TlsContextMatchOptions.Marshal(b, m, deterministic)
}
func (m *RouteMatch_TlsContextMatchOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteMatch_TlsContextMatchOptions.Merge(m, src)
}
func (m *RouteMatch_TlsContextMatchOptions) XXX_Size() int {
	return xxx_messageInfo_RouteMatch_TlsContextMatchOptions.Size(m)
}
func (m *RouteMatch_TlsContextMatchOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteMatch_TlsContextMatchOptions.DiscardUnknown(m)
}

var xxx_messageInfo_RouteMatch_TlsContextMatchOptions proto.InternalMessageInfo

func (m *RouteMatch_TlsContextMatchOptions) GetPresented() *wrappers.BoolValue {
	if m != nil {
		return m.Presented
	}
	return nil
}

// [#next-free-field: 12]
type CorsPolicy struct {
	// Specifies the origins that will be allowed to do CORS requests.
	//
	// An origin is allowed if either allow_origin or allow_origin_regex match.
	//
	// .. attention::
	//  This field has been deprecated in favor of `allow_origin_string_match`.
	AllowOrigin []string `protobuf:"bytes,1,rep,name=allow_origin,json=allowOrigin,proto3" json:"allow_origin,omitempty"` // Deprecated: Do not use.
	// Specifies regex patterns that match allowed origins.
	//
	// An origin is allowed if either allow_origin or allow_origin_regex match.
	//
	// .. attention::
	//   This field has been deprecated in favor of `allow_origin_string_match` as it is not safe for
	//   use with untrusted input in all cases.
	AllowOriginRegex []string `protobuf:"bytes,8,rep,name=allow_origin_regex,json=allowOriginRegex,proto3" json:"allow_origin_regex,omitempty"` // Deprecated: Do not use.
	// Specifies string patterns that match allowed origins. An origin is allowed if any of the
	// string matchers match.
	AllowOriginStringMatch []*matcher.StringMatcher `protobuf:"bytes,11,rep,name=allow_origin_string_match,json=allowOriginStringMatch,proto3" json:"allow_origin_string_match,omitempty"`
	// Specifies the content for the *access-control-allow-methods* header.
	AllowMethods string `protobuf:"bytes,2,opt,name=allow_methods,json=allowMethods,proto3" json:"allow_methods,omitempty"`
	// Specifies the content for the *access-control-allow-headers* header.
	AllowHeaders string `protobuf:"bytes,3,opt,name=allow_headers,json=allowHeaders,proto3" json:"allow_headers,omitempty"`
	// Specifies the content for the *access-control-expose-headers* header.
	ExposeHeaders string `protobuf:"bytes,4,opt,name=expose_headers,json=exposeHeaders,proto3" json:"expose_headers,omitempty"`
	// Specifies the content for the *access-control-max-age* header.
	MaxAge string `protobuf:"bytes,5,opt,name=max_age,json=maxAge,proto3" json:"max_age,omitempty"`
	// Specifies whether the resource allows credentials.
	AllowCredentials *wrappers.BoolValue `protobuf:"bytes,6,opt,name=allow_credentials,json=allowCredentials,proto3" json:"allow_credentials,omitempty"`
	// Types that are valid to be assigned to EnabledSpecifier:
	//	*CorsPolicy_Enabled
	//	*CorsPolicy_FilterEnabled
	EnabledSpecifier isCorsPolicy_EnabledSpecifier `protobuf_oneof:"enabled_specifier"`
	// Specifies the % of requests for which the CORS policies will be evaluated and tracked, but not
	// enforced.
	//
	// This field is intended to be used when ``filter_enabled`` and ``enabled`` are off. One of those
	// fields have to explicitly disable the filter in order for this setting to take effect.
	//
	// If :ref:`runtime_key <envoy_api_field_core.runtimefractionalpercent.runtime_key>` is specified,
	// Envoy will lookup the runtime key to get the percentage of requests for which it will evaluate
	// and track the request's *Origin* to determine if it's valid but will not enforce any policies.
	ShadowEnabled        *core.RuntimeFractionalPercent `protobuf:"bytes,10,opt,name=shadow_enabled,json=shadowEnabled,proto3" json:"shadow_enabled,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	XXX_sizecache        int32                          `json:"-"`
}

func (m *CorsPolicy) Reset()         { *m = CorsPolicy{} }
func (m *CorsPolicy) String() string { return proto.CompactTextString(m) }
func (*CorsPolicy) ProtoMessage()    {}
func (*CorsPolicy) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{4}
}

func (m *CorsPolicy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_CorsPolicy.Unmarshal(m, b)
}
func (m *CorsPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_CorsPolicy.Marshal(b, m, deterministic)
}
func (m *CorsPolicy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CorsPolicy.Merge(m, src)
}
func (m *CorsPolicy) XXX_Size() int {
	return xxx_messageInfo_CorsPolicy.Size(m)
}
func (m *CorsPolicy) XXX_DiscardUnknown() {
	xxx_messageInfo_CorsPolicy.DiscardUnknown(m)
}

var xxx_messageInfo_CorsPolicy proto.InternalMessageInfo

// Deprecated: Do not use.
func (m *CorsPolicy) GetAllowOrigin() []string {
	if m != nil {
		return m.AllowOrigin
	}
	return nil
}

// Deprecated: Do not use.
func (m *CorsPolicy) GetAllowOriginRegex() []string {
	if m != nil {
		return m.AllowOriginRegex
	}
	return nil
}

func (m *CorsPolicy) GetAllowOriginStringMatch() []*matcher.StringMatcher {
	if m != nil {
		return m.AllowOriginStringMatch
	}
	return nil
}

func (m *CorsPolicy) GetAllowMethods() string {
	if m != nil {
		return m.AllowMethods
	}
	return ""
}

func (m *CorsPolicy) GetAllowHeaders() string {
	if m != nil {
		return m.AllowHeaders
	}
	return ""
}

func (m *CorsPolicy) GetExposeHeaders() string {
	if m != nil {
		return m.ExposeHeaders
	}
	return ""
}

func (m *CorsPolicy) GetMaxAge() string {
	if m != nil {
		return m.MaxAge
	}
	return ""
}

func (m *CorsPolicy) GetAllowCredentials() *wrappers.BoolValue {
	if m != nil {
		return m.AllowCredentials
	}
	return nil
}

type isCorsPolicy_EnabledSpecifier interface {
	isCorsPolicy_EnabledSpecifier()
}

type CorsPolicy_Enabled struct {
	Enabled *wrappers.BoolValue `protobuf:"bytes,7,opt,name=enabled,proto3,oneof"`
}

type CorsPolicy_FilterEnabled struct {
	FilterEnabled *core.RuntimeFractionalPercent `protobuf:"bytes,9,opt,name=filter_enabled,json=filterEnabled,proto3,oneof"`
}

func (*CorsPolicy_Enabled) isCorsPolicy_EnabledSpecifier() {}

func (*CorsPolicy_FilterEnabled) isCorsPolicy_EnabledSpecifier() {}

func (m *CorsPolicy) GetEnabledSpecifier() isCorsPolicy_EnabledSpecifier {
	if m != nil {
		return m.EnabledSpecifier
	}
	return nil
}

// Deprecated: Do not use.
func (m *CorsPolicy) GetEnabled() *wrappers.BoolValue {
	if x, ok := m.GetEnabledSpecifier().(*CorsPolicy_Enabled); ok {
		return x.Enabled
	}
	return nil
}

func (m *CorsPolicy) GetFilterEnabled() *core.RuntimeFractionalPercent {
	if x, ok := m.GetEnabledSpecifier().(*CorsPolicy_FilterEnabled); ok {
		return x.FilterEnabled
	}
	return nil
}

func (m *CorsPolicy) GetShadowEnabled() *core.RuntimeFractionalPercent {
	if m != nil {
		return m.ShadowEnabled
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*CorsPolicy) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*CorsPolicy_Enabled)(nil),
		(*CorsPolicy_FilterEnabled)(nil),
	}
}

// [#next-free-field: 30]
type RouteAction struct {
	// Types that are valid to be assigned to ClusterSpecifier:
	//	*RouteAction_Cluster
	//	*RouteAction_ClusterHeader
	//	*RouteAction_WeightedClusters
	ClusterSpecifier isRouteAction_ClusterSpecifier `protobuf_oneof:"cluster_specifier"`
	// The HTTP status code to use when configured cluster is not found.
	// The default response code is 503 Service Unavailable.
	ClusterNotFoundResponseCode RouteAction_ClusterNotFoundResponseCode `protobuf:"varint,20,opt,name=cluster_not_found_response_code,json=clusterNotFoundResponseCode,proto3,enum=envoy.api.v2.route.RouteAction_ClusterNotFoundResponseCode" json:"cluster_not_found_response_code,omitempty"`
	// Optional endpoint metadata match criteria used by the subset load balancer. Only endpoints
	// in the upstream cluster with metadata matching what's set in this field will be considered
	// for load balancing. If using :ref:`weighted_clusters
	// <envoy_api_field_route.RouteAction.weighted_clusters>`, metadata will be merged, with values
	// provided there taking precedence. The filter name should be specified as *envoy.lb*.
	MetadataMatch *core.Metadata `protobuf:"bytes,4,opt,name=metadata_match,json=metadataMatch,proto3" json:"metadata_match,omitempty"`
	// Indicates that during forwarding, the matched prefix (or path) should be
	// swapped with this value. This option allows application URLs to be rooted
	// at a different path from those exposed at the reverse proxy layer. The router filter will
	// place the original path before rewrite into the :ref:`x-envoy-original-path
	// <config_http_filters_router_x-envoy-original-path>` header.
	//
	// .. attention::
	//
	//   Pay careful attention to the use of trailing slashes in the
	//   :ref:`route's match <envoy_api_field_route.Route.match>` prefix value.
	//   Stripping a prefix from a path requires multiple Routes to handle all cases. For example,
	//   rewriting */prefix* to */* and */prefix/etc* to */etc* cannot be done in a single
	//   :ref:`Route <envoy_api_msg_route.Route>`, as shown by the below config entries:
	//
	//   .. code-block:: yaml
	//
	//     - match:
	//         prefix: "/prefix/"
	//       route:
	//         prefix_rewrite: "/"
	//     - match:
	//         prefix: "/prefix"
	//       route:
	//         prefix_rewrite: "/"
	//
	//   Having above entries in the config, requests to */prefix* will be stripped to */*, while
	//   requests to */prefix/etc* will be stripped to */etc*.
	PrefixRewrite string `protobuf:"bytes,5,opt,name=prefix_rewrite,json=prefixRewrite,proto3" json:"prefix_rewrite,omitempty"`
	// Types that are valid to be assigned to HostRewriteSpecifier:
	//	*RouteAction_HostRewrite
	//	*RouteAction_AutoHostRewrite
	//	*RouteAction_AutoHostRewriteHeader
	HostRewriteSpecifier isRouteAction_HostRewriteSpecifier `protobuf_oneof:"host_rewrite_specifier"`
	// Specifies the upstream timeout for the route. If not specified, the default is 15s. This
	// spans between the point at which the entire downstream request (i.e. end-of-stream) has been
	// processed and when the upstream response has been completely processed. A value of 0 will
	// disable the route's timeout.
	//
	// .. note::
	//
	//   This timeout includes all retries. See also
	//   :ref:`config_http_filters_router_x-envoy-upstream-rq-timeout-ms`,
	//   :ref:`config_http_filters_router_x-envoy-upstream-rq-per-try-timeout-ms`, and the
	//   :ref:`retry overview <arch_overview_http_routing_retry>`.
	Timeout *duration.Duration `protobuf:"bytes,8,opt,name=timeout,proto3" json:"timeout,omitempty"`
	// Specifies the idle timeout for the route. If not specified, there is no per-route idle timeout,
	// although the connection manager wide :ref:`stream_idle_timeout
	// <envoy_api_field_config.filter.network.http_connection_manager.v2.HttpConnectionManager.stream_idle_timeout>`
	// will still apply. A value of 0 will completely disable the route's idle timeout, even if a
	// connection manager stream idle timeout is configured.
	//
	// The idle timeout is distinct to :ref:`timeout
	// <envoy_api_field_route.RouteAction.timeout>`, which provides an upper bound
	// on the upstream response time; :ref:`idle_timeout
	// <envoy_api_field_route.RouteAction.idle_timeout>` instead bounds the amount
	// of time the request's stream may be idle.
	//
	// After header decoding, the idle timeout will apply on downstream and
	// upstream request events. Each time an encode/decode event for headers or
	// data is processed for the stream, the timer will be reset. If the timeout
	// fires, the stream is terminated with a 408 Request Timeout error code if no
	// upstream response header has been received, otherwise a stream reset
	// occurs.
	IdleTimeout *duration.Duration `protobuf:"bytes,24,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"`
	// Indicates that the route has a retry policy. Note that if this is set,
	// it'll take precedence over the virtual host level retry policy entirely
	// (e.g.: policies are not merged, most internal one becomes the enforced policy).
	RetryPolicy *RetryPolicy `protobuf:"bytes,9,opt,name=retry_policy,json=retryPolicy,proto3" json:"retry_policy,omitempty"`
	// Indicates that the route has a request mirroring policy.
	RequestMirrorPolicy *RouteAction_RequestMirrorPolicy `protobuf:"bytes,10,opt,name=request_mirror_policy,json=requestMirrorPolicy,proto3" json:"request_mirror_policy,omitempty"`
	// Optionally specifies the :ref:`routing priority <arch_overview_http_routing_priority>`.
	Priority core.RoutingPriority `protobuf:"varint,11,opt,name=priority,proto3,enum=envoy.api.v2.core.RoutingPriority" json:"priority,omitempty"`
	// Specifies a set of rate limit configurations that could be applied to the
	// route.
	RateLimits []*RateLimit `protobuf:"bytes,13,rep,name=rate_limits,json=rateLimits,proto3" json:"rate_limits,omitempty"`
	// Specifies if the rate limit filter should include the virtual host rate
	// limits. By default, if the route configured rate limits, the virtual host
	// :ref:`rate_limits <envoy_api_field_route.VirtualHost.rate_limits>` are not applied to the
	// request.
	IncludeVhRateLimits *wrappers.BoolValue `protobuf:"bytes,14,opt,name=include_vh_rate_limits,json=includeVhRateLimits,proto3" json:"include_vh_rate_limits,omitempty"`
	// Specifies a list of hash policies to use for ring hash load balancing. Each
	// hash policy is evaluated individually and the combined result is used to
	// route the request. The method of combination is deterministic such that
	// identical lists of hash policies will produce the same hash. Since a hash
	// policy examines specific parts of a request, it can fail to produce a hash
	// (i.e. if the hashed header is not present). If (and only if) all configured
	// hash policies fail to generate a hash, no hash will be produced for
	// the route. In this case, the behavior is the same as if no hash policies
	// were specified (i.e. the ring hash load balancer will choose a random
	// backend). If a hash policy has the "terminal" attribute set to true, and
	// there is already a hash generated, the hash is returned immediately,
	// ignoring the rest of the hash policy list.
	HashPolicy []*RouteAction_HashPolicy `protobuf:"bytes,15,rep,name=hash_policy,json=hashPolicy,proto3" json:"hash_policy,omitempty"`
	// Indicates that the route has a CORS policy.
	Cors *CorsPolicy `protobuf:"bytes,17,opt,name=cors,proto3" json:"cors,omitempty"`
	// If present, and the request is a gRPC request, use the
	// `grpc-timeout header <https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md>`_,
	// or its default value (infinity) instead of
	// :ref:`timeout <envoy_api_field_route.RouteAction.timeout>`, but limit the applied timeout
	// to the maximum value specified here. If configured as 0, the maximum allowed timeout for
	// gRPC requests is infinity. If not configured at all, the `grpc-timeout` header is not used
	// and gRPC requests time out like any other requests using
	// :ref:`timeout <envoy_api_field_route.RouteAction.timeout>` or its default.
	// This can be used to prevent unexpected upstream request timeouts due to potentially long
	// time gaps between gRPC request and response in gRPC streaming mode.
	MaxGrpcTimeout *duration.Duration `protobuf:"bytes,23,opt,name=max_grpc_timeout,json=maxGrpcTimeout,proto3" json:"max_grpc_timeout,omitempty"`
	// If present, Envoy will adjust the timeout provided by the `grpc-timeout` header by subtracting
	// the provided duration from the header. This is useful in allowing Envoy to set its global
	// timeout to be less than that of the deadline imposed by the calling client, which makes it more
	// likely that Envoy will handle the timeout instead of having the call canceled by the client.
	// The offset will only be applied if the provided grpc_timeout is greater than the offset. This
	// ensures that the offset will only ever decrease the timeout and never set it to 0 (meaning
	// infinity).
	GrpcTimeoutOffset      *duration.Duration                 `protobuf:"bytes,28,opt,name=grpc_timeout_offset,json=grpcTimeoutOffset,proto3" json:"grpc_timeout_offset,omitempty"`
	UpgradeConfigs         []*RouteAction_UpgradeConfig       `protobuf:"bytes,25,rep,name=upgrade_configs,json=upgradeConfigs,proto3" json:"upgrade_configs,omitempty"`
	InternalRedirectAction RouteAction_InternalRedirectAction `protobuf:"varint,26,opt,name=internal_redirect_action,json=internalRedirectAction,proto3,enum=envoy.api.v2.route.RouteAction_InternalRedirectAction" json:"internal_redirect_action,omitempty"`
	// Indicates that the route has a hedge policy. Note that if this is set,
	// it'll take precedence over the virtual host level hedge policy entirely
	// (e.g.: policies are not merged, most internal one becomes the enforced policy).
	HedgePolicy          *HedgePolicy `protobuf:"bytes,27,opt,name=hedge_policy,json=hedgePolicy,proto3" json:"hedge_policy,omitempty"`
	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
	XXX_unrecognized     []byte       `json:"-"`
	XXX_sizecache        int32        `json:"-"`
}

func (m *RouteAction) Reset()         { *m = RouteAction{} }
func (m *RouteAction) String() string { return proto.CompactTextString(m) }
func (*RouteAction) ProtoMessage()    {}
func (*RouteAction) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{5}
}

func (m *RouteAction) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteAction.Unmarshal(m, b)
}
func (m *RouteAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteAction.Marshal(b, m, deterministic)
}
func (m *RouteAction) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteAction.Merge(m, src)
}
func (m *RouteAction) XXX_Size() int {
	return xxx_messageInfo_RouteAction.Size(m)
}
func (m *RouteAction) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteAction.DiscardUnknown(m)
}

var xxx_messageInfo_RouteAction proto.InternalMessageInfo

type isRouteAction_ClusterSpecifier interface {
	isRouteAction_ClusterSpecifier()
}

type RouteAction_Cluster struct {
	Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3,oneof"`
}

type RouteAction_ClusterHeader struct {
	ClusterHeader string `protobuf:"bytes,2,opt,name=cluster_header,json=clusterHeader,proto3,oneof"`
}

type RouteAction_WeightedClusters struct {
	WeightedClusters *WeightedCluster `protobuf:"bytes,3,opt,name=weighted_clusters,json=weightedClusters,proto3,oneof"`
}

func (*RouteAction_Cluster) isRouteAction_ClusterSpecifier() {}

func (*RouteAction_ClusterHeader) isRouteAction_ClusterSpecifier() {}

func (*RouteAction_WeightedClusters) isRouteAction_ClusterSpecifier() {}

func (m *RouteAction) GetClusterSpecifier() isRouteAction_ClusterSpecifier {
	if m != nil {
		return m.ClusterSpecifier
	}
	return nil
}

func (m *RouteAction) GetCluster() string {
	if x, ok := m.GetClusterSpecifier().(*RouteAction_Cluster); ok {
		return x.Cluster
	}
	return ""
}

func (m *RouteAction) GetClusterHeader() string {
	if x, ok := m.GetClusterSpecifier().(*RouteAction_ClusterHeader); ok {
		return x.ClusterHeader
	}
	return ""
}

func (m *RouteAction) GetWeightedClusters() *WeightedCluster {
	if x, ok := m.GetClusterSpecifier().(*RouteAction_WeightedClusters); ok {
		return x.WeightedClusters
	}
	return nil
}

func (m *RouteAction) GetClusterNotFoundResponseCode() RouteAction_ClusterNotFoundResponseCode {
	if m != nil {
		return m.ClusterNotFoundResponseCode
	}
	return RouteAction_SERVICE_UNAVAILABLE
}

func (m *RouteAction) GetMetadataMatch() *core.Metadata {
	if m != nil {
		return m.MetadataMatch
	}
	return nil
}

func (m *RouteAction) GetPrefixRewrite() string {
	if m != nil {
		return m.PrefixRewrite
	}
	return ""
}

type isRouteAction_HostRewriteSpecifier interface {
	isRouteAction_HostRewriteSpecifier()
}

type RouteAction_HostRewrite struct {
	HostRewrite string `protobuf:"bytes,6,opt,name=host_rewrite,json=hostRewrite,proto3,oneof"`
}

type RouteAction_AutoHostRewrite struct {
	AutoHostRewrite *wrappers.BoolValue `protobuf:"bytes,7,opt,name=auto_host_rewrite,json=autoHostRewrite,proto3,oneof"`
}

type RouteAction_AutoHostRewriteHeader struct {
	AutoHostRewriteHeader string `protobuf:"bytes,29,opt,name=auto_host_rewrite_header,json=autoHostRewriteHeader,proto3,oneof"`
}

func (*RouteAction_HostRewrite) isRouteAction_HostRewriteSpecifier() {}

func (*RouteAction_AutoHostRewrite) isRouteAction_HostRewriteSpecifier() {}

func (*RouteAction_AutoHostRewriteHeader) isRouteAction_HostRewriteSpecifier() {}

func (m *RouteAction) GetHostRewriteSpecifier() isRouteAction_HostRewriteSpecifier {
	if m != nil {
		return m.HostRewriteSpecifier
	}
	return nil
}

func (m *RouteAction) GetHostRewrite() string {
	if x, ok := m.GetHostRewriteSpecifier().(*RouteAction_HostRewrite); ok {
		return x.HostRewrite
	}
	return ""
}

func (m *RouteAction) GetAutoHostRewrite() *wrappers.BoolValue {
	if x, ok := m.GetHostRewriteSpecifier().(*RouteAction_AutoHostRewrite); ok {
		return x.AutoHostRewrite
	}
	return nil
}

func (m *RouteAction) GetAutoHostRewriteHeader() string {
	if x, ok := m.GetHostRewriteSpecifier().(*RouteAction_AutoHostRewriteHeader); ok {
		return x.AutoHostRewriteHeader
	}
	return ""
}

func (m *RouteAction) GetTimeout() *duration.Duration {
	if m != nil {
		return m.Timeout
	}
	return nil
}

func (m *RouteAction) GetIdleTimeout() *duration.Duration {
	if m != nil {
		return m.IdleTimeout
	}
	return nil
}

func (m *RouteAction) GetRetryPolicy() *RetryPolicy {
	if m != nil {
		return m.RetryPolicy
	}
	return nil
}

func (m *RouteAction) GetRequestMirrorPolicy() *RouteAction_RequestMirrorPolicy {
	if m != nil {
		return m.RequestMirrorPolicy
	}
	return nil
}

func (m *RouteAction) GetPriority() core.RoutingPriority {
	if m != nil {
		return m.Priority
	}
	return core.RoutingPriority_DEFAULT
}

func (m *RouteAction) GetRateLimits() []*RateLimit {
	if m != nil {
		return m.RateLimits
	}
	return nil
}

func (m *RouteAction) GetIncludeVhRateLimits() *wrappers.BoolValue {
	if m != nil {
		return m.IncludeVhRateLimits
	}
	return nil
}

func (m *RouteAction) GetHashPolicy() []*RouteAction_HashPolicy {
	if m != nil {
		return m.HashPolicy
	}
	return nil
}

func (m *RouteAction) GetCors() *CorsPolicy {
	if m != nil {
		return m.Cors
	}
	return nil
}

func (m *RouteAction) GetMaxGrpcTimeout() *duration.Duration {
	if m != nil {
		return m.MaxGrpcTimeout
	}
	return nil
}

func (m *RouteAction) GetGrpcTimeoutOffset() *duration.Duration {
	if m != nil {
		return m.GrpcTimeoutOffset
	}
	return nil
}

func (m *RouteAction) GetUpgradeConfigs() []*RouteAction_UpgradeConfig {
	if m != nil {
		return m.UpgradeConfigs
	}
	return nil
}

func (m *RouteAction) GetInternalRedirectAction() RouteAction_InternalRedirectAction {
	if m != nil {
		return m.InternalRedirectAction
	}
	return RouteAction_PASS_THROUGH_INTERNAL_REDIRECT
}

func (m *RouteAction) GetHedgePolicy() *HedgePolicy {
	if m != nil {
		return m.HedgePolicy
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*RouteAction) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*RouteAction_Cluster)(nil),
		(*RouteAction_ClusterHeader)(nil),
		(*RouteAction_WeightedClusters)(nil),
		(*RouteAction_HostRewrite)(nil),
		(*RouteAction_AutoHostRewrite)(nil),
		(*RouteAction_AutoHostRewriteHeader)(nil),
	}
}

// The router is capable of shadowing traffic from one cluster to another. The current
// implementation is "fire and forget," meaning Envoy will not wait for the shadow cluster to
// respond before returning the response from the primary cluster. All normal statistics are
// collected for the shadow cluster making this feature useful for testing.
//
// During shadowing, the host/authority header is altered such that *-shadow* is appended. This is
// useful for logging. For example, *cluster1* becomes *cluster1-shadow*.
type RouteAction_RequestMirrorPolicy struct {
	// Specifies the cluster that requests will be mirrored to. The cluster must
	// exist in the cluster manager configuration.
	Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"`
	// If not specified, all requests to the target cluster will be mirrored. If
	// specified, Envoy will lookup the runtime key to get the % of requests to
	// mirror. Valid values are from 0 to 10000, allowing for increments of
	// 0.01% of requests to be mirrored. If the runtime key is specified in the
	// configuration but not present in runtime, 0 is the default and thus 0% of
	// requests will be mirrored.
	//
	// .. attention::
	//
	//   **This field is deprecated**. Set the
	//   :ref:`runtime_fraction
	//   <envoy_api_field_route.RouteAction.RequestMirrorPolicy.runtime_fraction>` field instead.
	RuntimeKey string `protobuf:"bytes,2,opt,name=runtime_key,json=runtimeKey,proto3" json:"runtime_key,omitempty"` // Deprecated: Do not use.
	// If both :ref:`runtime_key
	// <envoy_api_field_route.RouteAction.RequestMirrorPolicy.runtime_key>` and this field are not
	// specified, all requests to the target cluster will be mirrored.
	//
	// If specified, this field takes precedence over the `runtime_key` field and requests must also
	// fall under the percentage of matches indicated by this field.
	//
	// For some fraction N/D, a random number in the range [0,D) is selected. If the
	// number is <= the value of the numerator N, or if the key is not present, the default
	// value, the request will be mirrored.
	RuntimeFraction      *core.RuntimeFractionalPercent `protobuf:"bytes,3,opt,name=runtime_fraction,json=runtimeFraction,proto3" json:"runtime_fraction,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	XXX_sizecache        int32                          `json:"-"`
}

func (m *RouteAction_RequestMirrorPolicy) Reset()         { *m = RouteAction_RequestMirrorPolicy{} }
func (m *RouteAction_RequestMirrorPolicy) String() string { return proto.CompactTextString(m) }
func (*RouteAction_RequestMirrorPolicy) ProtoMessage()    {}
func (*RouteAction_RequestMirrorPolicy) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{5, 0}
}

func (m *RouteAction_RequestMirrorPolicy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteAction_RequestMirrorPolicy.Unmarshal(m, b)
}
func (m *RouteAction_RequestMirrorPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteAction_RequestMirrorPolicy.Marshal(b, m, deterministic)
}
func (m *RouteAction_RequestMirrorPolicy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteAction_RequestMirrorPolicy.Merge(m, src)
}
func (m *RouteAction_RequestMirrorPolicy) XXX_Size() int {
	return xxx_messageInfo_RouteAction_RequestMirrorPolicy.Size(m)
}
func (m *RouteAction_RequestMirrorPolicy) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteAction_RequestMirrorPolicy.DiscardUnknown(m)
}

var xxx_messageInfo_RouteAction_RequestMirrorPolicy proto.InternalMessageInfo

func (m *RouteAction_RequestMirrorPolicy) GetCluster() string {
	if m != nil {
		return m.Cluster
	}
	return ""
}

// Deprecated: Do not use.
func (m *RouteAction_RequestMirrorPolicy) GetRuntimeKey() string {
	if m != nil {
		return m.RuntimeKey
	}
	return ""
}

func (m *RouteAction_RequestMirrorPolicy) GetRuntimeFraction() *core.RuntimeFractionalPercent {
	if m != nil {
		return m.RuntimeFraction
	}
	return nil
}

// Specifies the route's hashing policy if the upstream cluster uses a hashing :ref:`load balancer
// <arch_overview_load_balancing_types>`.
type RouteAction_HashPolicy struct {
	// Types that are valid to be assigned to PolicySpecifier:
	//	*RouteAction_HashPolicy_Header_
	//	*RouteAction_HashPolicy_Cookie_
	//	*RouteAction_HashPolicy_ConnectionProperties_
	PolicySpecifier isRouteAction_HashPolicy_PolicySpecifier `protobuf_oneof:"policy_specifier"`
	// The flag that short-circuits the hash computing. This field provides a
	// 'fallback' style of configuration: "if a terminal policy doesn't work,
	// fallback to rest of the policy list", it saves time when the terminal
	// policy works.
	//
	// If true, and there is already a hash computed, ignore rest of the
	// list of hash polices.
	// For example, if the following hash methods are configured:
	//
	//  ========= ========
	//  specifier terminal
	//  ========= ========
	//  Header A  true
	//  Header B  false
	//  Header C  false
	//  ========= ========
	//
	// The generateHash process ends if policy "header A" generates a hash, as
	// it's a terminal policy.
	Terminal             bool     `protobuf:"varint,4,opt,name=terminal,proto3" json:"terminal,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RouteAction_HashPolicy) Reset()         { *m = RouteAction_HashPolicy{} }
func (m *RouteAction_HashPolicy) String() string { return proto.CompactTextString(m) }
func (*RouteAction_HashPolicy) ProtoMessage()    {}
func (*RouteAction_HashPolicy) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{5, 1}
}

func (m *RouteAction_HashPolicy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteAction_HashPolicy.Unmarshal(m, b)
}
func (m *RouteAction_HashPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteAction_HashPolicy.Marshal(b, m, deterministic)
}
func (m *RouteAction_HashPolicy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteAction_HashPolicy.Merge(m, src)
}
func (m *RouteAction_HashPolicy) XXX_Size() int {
	return xxx_messageInfo_RouteAction_HashPolicy.Size(m)
}
func (m *RouteAction_HashPolicy) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteAction_HashPolicy.DiscardUnknown(m)
}

var xxx_messageInfo_RouteAction_HashPolicy proto.InternalMessageInfo

type isRouteAction_HashPolicy_PolicySpecifier interface {
	isRouteAction_HashPolicy_PolicySpecifier()
}

type RouteAction_HashPolicy_Header_ struct {
	Header *RouteAction_HashPolicy_Header `protobuf:"bytes,1,opt,name=header,proto3,oneof"`
}

type RouteAction_HashPolicy_Cookie_ struct {
	Cookie *RouteAction_HashPolicy_Cookie `protobuf:"bytes,2,opt,name=cookie,proto3,oneof"`
}

type RouteAction_HashPolicy_ConnectionProperties_ struct {
	ConnectionProperties *RouteAction_HashPolicy_ConnectionProperties `protobuf:"bytes,3,opt,name=connection_properties,json=connectionProperties,proto3,oneof"`
}

func (*RouteAction_HashPolicy_Header_) isRouteAction_HashPolicy_PolicySpecifier() {}

func (*RouteAction_HashPolicy_Cookie_) isRouteAction_HashPolicy_PolicySpecifier() {}

func (*RouteAction_HashPolicy_ConnectionProperties_) isRouteAction_HashPolicy_PolicySpecifier() {}

func (m *RouteAction_HashPolicy) GetPolicySpecifier() isRouteAction_HashPolicy_PolicySpecifier {
	if m != nil {
		return m.PolicySpecifier
	}
	return nil
}

func (m *RouteAction_HashPolicy) GetHeader() *RouteAction_HashPolicy_Header {
	if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_Header_); ok {
		return x.Header
	}
	return nil
}

func (m *RouteAction_HashPolicy) GetCookie() *RouteAction_HashPolicy_Cookie {
	if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_Cookie_); ok {
		return x.Cookie
	}
	return nil
}

func (m *RouteAction_HashPolicy) GetConnectionProperties() *RouteAction_HashPolicy_ConnectionProperties {
	if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_ConnectionProperties_); ok {
		return x.ConnectionProperties
	}
	return nil
}

func (m *RouteAction_HashPolicy) GetTerminal() bool {
	if m != nil {
		return m.Terminal
	}
	return false
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*RouteAction_HashPolicy) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*RouteAction_HashPolicy_Header_)(nil),
		(*RouteAction_HashPolicy_Cookie_)(nil),
		(*RouteAction_HashPolicy_ConnectionProperties_)(nil),
	}
}

type RouteAction_HashPolicy_Header struct {
	// The name of the request header that will be used to obtain the hash
	// key. If the request header is not present, no hash will be produced.
	HeaderName           string   `protobuf:"bytes,1,opt,name=header_name,json=headerName,proto3" json:"header_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RouteAction_HashPolicy_Header) Reset()         { *m = RouteAction_HashPolicy_Header{} }
func (m *RouteAction_HashPolicy_Header) String() string { return proto.CompactTextString(m) }
func (*RouteAction_HashPolicy_Header) ProtoMessage()    {}
func (*RouteAction_HashPolicy_Header) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{5, 1, 0}
}

func (m *RouteAction_HashPolicy_Header) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteAction_HashPolicy_Header.Unmarshal(m, b)
}
func (m *RouteAction_HashPolicy_Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteAction_HashPolicy_Header.Marshal(b, m, deterministic)
}
func (m *RouteAction_HashPolicy_Header) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteAction_HashPolicy_Header.Merge(m, src)
}
func (m *RouteAction_HashPolicy_Header) XXX_Size() int {
	return xxx_messageInfo_RouteAction_HashPolicy_Header.Size(m)
}
func (m *RouteAction_HashPolicy_Header) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteAction_HashPolicy_Header.DiscardUnknown(m)
}

var xxx_messageInfo_RouteAction_HashPolicy_Header proto.InternalMessageInfo

func (m *RouteAction_HashPolicy_Header) GetHeaderName() string {
	if m != nil {
		return m.HeaderName
	}
	return ""
}

// Envoy supports two types of cookie affinity:
//
// 1. Passive. Envoy takes a cookie that's present in the cookies header and
//    hashes on its value.
//
// 2. Generated. Envoy generates and sets a cookie with an expiration (TTL)
//    on the first request from the client in its response to the client,
//    based on the endpoint the request gets sent to. The client then
//    presents this on the next and all subsequent requests. The hash of
//    this is sufficient to ensure these requests get sent to the same
//    endpoint. The cookie is generated by hashing the source and
//    destination ports and addresses so that multiple independent HTTP2
//    streams on the same connection will independently receive the same
//    cookie, even if they arrive at the Envoy simultaneously.
type RouteAction_HashPolicy_Cookie struct {
	// The name of the cookie that will be used to obtain the hash key. If the
	// cookie is not present and ttl below is not set, no hash will be
	// produced.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// If specified, a cookie with the TTL will be generated if the cookie is
	// not present. If the TTL is present and zero, the generated cookie will
	// be a session cookie.
	Ttl *duration.Duration `protobuf:"bytes,2,opt,name=ttl,proto3" json:"ttl,omitempty"`
	// The name of the path for the cookie. If no path is specified here, no path
	// will be set for the cookie.
	Path                 string   `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RouteAction_HashPolicy_Cookie) Reset()         { *m = RouteAction_HashPolicy_Cookie{} }
func (m *RouteAction_HashPolicy_Cookie) String() string { return proto.CompactTextString(m) }
func (*RouteAction_HashPolicy_Cookie) ProtoMessage()    {}
func (*RouteAction_HashPolicy_Cookie) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{5, 1, 1}
}

func (m *RouteAction_HashPolicy_Cookie) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteAction_HashPolicy_Cookie.Unmarshal(m, b)
}
func (m *RouteAction_HashPolicy_Cookie) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteAction_HashPolicy_Cookie.Marshal(b, m, deterministic)
}
func (m *RouteAction_HashPolicy_Cookie) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteAction_HashPolicy_Cookie.Merge(m, src)
}
func (m *RouteAction_HashPolicy_Cookie) XXX_Size() int {
	return xxx_messageInfo_RouteAction_HashPolicy_Cookie.Size(m)
}
func (m *RouteAction_HashPolicy_Cookie) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteAction_HashPolicy_Cookie.DiscardUnknown(m)
}

var xxx_messageInfo_RouteAction_HashPolicy_Cookie proto.InternalMessageInfo

func (m *RouteAction_HashPolicy_Cookie) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *RouteAction_HashPolicy_Cookie) GetTtl() *duration.Duration {
	if m != nil {
		return m.Ttl
	}
	return nil
}

func (m *RouteAction_HashPolicy_Cookie) GetPath() string {
	if m != nil {
		return m.Path
	}
	return ""
}

type RouteAction_HashPolicy_ConnectionProperties struct {
	// Hash on source IP address.
	SourceIp             bool     `protobuf:"varint,1,opt,name=source_ip,json=sourceIp,proto3" json:"source_ip,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RouteAction_HashPolicy_ConnectionProperties) Reset() {
	*m = RouteAction_HashPolicy_ConnectionProperties{}
}
func (m *RouteAction_HashPolicy_ConnectionProperties) String() string {
	return proto.CompactTextString(m)
}
func (*RouteAction_HashPolicy_ConnectionProperties) ProtoMessage() {}
func (*RouteAction_HashPolicy_ConnectionProperties) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{5, 1, 2}
}

func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.Unmarshal(m, b)
}
func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.Marshal(b, m, deterministic)
}
func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.Merge(m, src)
}
func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Size() int {
	return xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.Size(m)
}
func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.DiscardUnknown(m)
}

var xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties proto.InternalMessageInfo

func (m *RouteAction_HashPolicy_ConnectionProperties) GetSourceIp() bool {
	if m != nil {
		return m.SourceIp
	}
	return false
}

// Allows enabling and disabling upgrades on a per-route basis.
// This overrides any enabled/disabled upgrade filter chain specified in the
// HttpConnectionManager
// :ref:upgrade_configs`
// <envoy_api_field_config.filter.network.http_connection_manager.v2.HttpConnectionManager.upgrade_configs>`
// but does not affect any custom filter chain specified there.
type RouteAction_UpgradeConfig struct {
	// The case-insensitive name of this upgrade, e.g. "websocket".
	// For each upgrade type present in upgrade_configs, requests with
	// Upgrade: [upgrade_type] will be proxied upstream.
	UpgradeType string `protobuf:"bytes,1,opt,name=upgrade_type,json=upgradeType,proto3" json:"upgrade_type,omitempty"`
	// Determines if upgrades are available on this route. Defaults to true.
	Enabled              *wrappers.BoolValue `protobuf:"bytes,2,opt,name=enabled,proto3" json:"enabled,omitempty"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *RouteAction_UpgradeConfig) Reset()         { *m = RouteAction_UpgradeConfig{} }
func (m *RouteAction_UpgradeConfig) String() string { return proto.CompactTextString(m) }
func (*RouteAction_UpgradeConfig) ProtoMessage()    {}
func (*RouteAction_UpgradeConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{5, 2}
}

func (m *RouteAction_UpgradeConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteAction_UpgradeConfig.Unmarshal(m, b)
}
func (m *RouteAction_UpgradeConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteAction_UpgradeConfig.Marshal(b, m, deterministic)
}
func (m *RouteAction_UpgradeConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteAction_UpgradeConfig.Merge(m, src)
}
func (m *RouteAction_UpgradeConfig) XXX_Size() int {
	return xxx_messageInfo_RouteAction_UpgradeConfig.Size(m)
}
func (m *RouteAction_UpgradeConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteAction_UpgradeConfig.DiscardUnknown(m)
}

var xxx_messageInfo_RouteAction_UpgradeConfig proto.InternalMessageInfo

func (m *RouteAction_UpgradeConfig) GetUpgradeType() string {
	if m != nil {
		return m.UpgradeType
	}
	return ""
}

func (m *RouteAction_UpgradeConfig) GetEnabled() *wrappers.BoolValue {
	if m != nil {
		return m.Enabled
	}
	return nil
}

// HTTP retry :ref:`architecture overview <arch_overview_http_routing_retry>`.
// [#next-free-field: 11]
type RetryPolicy struct {
	// Specifies the conditions under which retry takes place. These are the same
	// conditions documented for :ref:`config_http_filters_router_x-envoy-retry-on` and
	// :ref:`config_http_filters_router_x-envoy-retry-grpc-on`.
	RetryOn string `protobuf:"bytes,1,opt,name=retry_on,json=retryOn,proto3" json:"retry_on,omitempty"`
	// Specifies the allowed number of retries. This parameter is optional and
	// defaults to 1. These are the same conditions documented for
	// :ref:`config_http_filters_router_x-envoy-max-retries`.
	NumRetries *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=num_retries,json=numRetries,proto3" json:"num_retries,omitempty"`
	// Specifies a non-zero upstream timeout per retry attempt. This parameter is optional. The
	// same conditions documented for
	// :ref:`config_http_filters_router_x-envoy-upstream-rq-per-try-timeout-ms` apply.
	//
	// .. note::
	//
	//   If left unspecified, Envoy will use the global
	//   :ref:`route timeout <envoy_api_field_route.RouteAction.timeout>` for the request.
	//   Consequently, when using a :ref:`5xx <config_http_filters_router_x-envoy-retry-on>` based
	//   retry policy, a request that times out will not be retried as the total timeout budget
	//   would have been exhausted.
	PerTryTimeout *duration.Duration `protobuf:"bytes,3,opt,name=per_try_timeout,json=perTryTimeout,proto3" json:"per_try_timeout,omitempty"`
	// Specifies an implementation of a RetryPriority which is used to determine the
	// distribution of load across priorities used for retries. Refer to
	// :ref:`retry plugin configuration <arch_overview_http_retry_plugins>` for more details.
	RetryPriority *RetryPolicy_RetryPriority `protobuf:"bytes,4,opt,name=retry_priority,json=retryPriority,proto3" json:"retry_priority,omitempty"`
	// Specifies a collection of RetryHostPredicates that will be consulted when selecting a host
	// for retries. If any of the predicates reject the host, host selection will be reattempted.
	// Refer to :ref:`retry plugin configuration <arch_overview_http_retry_plugins>` for more
	// details.
	RetryHostPredicate []*RetryPolicy_RetryHostPredicate `protobuf:"bytes,5,rep,name=retry_host_predicate,json=retryHostPredicate,proto3" json:"retry_host_predicate,omitempty"`
	// The maximum number of times host selection will be reattempted before giving up, at which
	// point the host that was last selected will be routed to. If unspecified, this will default to
	// retrying once.
	HostSelectionRetryMaxAttempts int64 `protobuf:"varint,6,opt,name=host_selection_retry_max_attempts,json=hostSelectionRetryMaxAttempts,proto3" json:"host_selection_retry_max_attempts,omitempty"`
	// HTTP status codes that should trigger a retry in addition to those specified by retry_on.
	RetriableStatusCodes []uint32 `protobuf:"varint,7,rep,packed,name=retriable_status_codes,json=retriableStatusCodes,proto3" json:"retriable_status_codes,omitempty"`
	// Specifies parameters that control retry back off. This parameter is optional, in which case the
	// default base interval is 25 milliseconds or, if set, the current value of the
	// `upstream.base_retry_backoff_ms` runtime parameter. The default maximum interval is 10 times
	// the base interval. The documentation for :ref:`config_http_filters_router_x-envoy-max-retries`
	// describes Envoy's back-off algorithm.
	RetryBackOff *RetryPolicy_RetryBackOff `protobuf:"bytes,8,opt,name=retry_back_off,json=retryBackOff,proto3" json:"retry_back_off,omitempty"`
	// HTTP response headers that trigger a retry if present in the response. A retry will be
	// triggered if any of the header matches match the upstream response headers.
	// The field is only consulted if 'retriable-headers' retry policy is active.
	RetriableHeaders []*HeaderMatcher `protobuf:"bytes,9,rep,name=retriable_headers,json=retriableHeaders,proto3" json:"retriable_headers,omitempty"`
	// HTTP headers which must be present in the request for retries to be attempted.
	RetriableRequestHeaders []*HeaderMatcher `protobuf:"bytes,10,rep,name=retriable_request_headers,json=retriableRequestHeaders,proto3" json:"retriable_request_headers,omitempty"`
	XXX_NoUnkeyedLiteral    struct{}         `json:"-"`
	XXX_unrecognized        []byte           `json:"-"`
	XXX_sizecache           int32            `json:"-"`
}

func (m *RetryPolicy) Reset()         { *m = RetryPolicy{} }
func (m *RetryPolicy) String() string { return proto.CompactTextString(m) }
func (*RetryPolicy) ProtoMessage()    {}
func (*RetryPolicy) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{6}
}

func (m *RetryPolicy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RetryPolicy.Unmarshal(m, b)
}
func (m *RetryPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RetryPolicy.Marshal(b, m, deterministic)
}
func (m *RetryPolicy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RetryPolicy.Merge(m, src)
}
func (m *RetryPolicy) XXX_Size() int {
	return xxx_messageInfo_RetryPolicy.Size(m)
}
func (m *RetryPolicy) XXX_DiscardUnknown() {
	xxx_messageInfo_RetryPolicy.DiscardUnknown(m)
}

var xxx_messageInfo_RetryPolicy proto.InternalMessageInfo

func (m *RetryPolicy) GetRetryOn() string {
	if m != nil {
		return m.RetryOn
	}
	return ""
}

func (m *RetryPolicy) GetNumRetries() *wrappers.UInt32Value {
	if m != nil {
		return m.NumRetries
	}
	return nil
}

func (m *RetryPolicy) GetPerTryTimeout() *duration.Duration {
	if m != nil {
		return m.PerTryTimeout
	}
	return nil
}

func (m *RetryPolicy) GetRetryPriority() *RetryPolicy_RetryPriority {
	if m != nil {
		return m.RetryPriority
	}
	return nil
}

func (m *RetryPolicy) GetRetryHostPredicate() []*RetryPolicy_RetryHostPredicate {
	if m != nil {
		return m.RetryHostPredicate
	}
	return nil
}

func (m *RetryPolicy) GetHostSelectionRetryMaxAttempts() int64 {
	if m != nil {
		return m.HostSelectionRetryMaxAttempts
	}
	return 0
}

func (m *RetryPolicy) GetRetriableStatusCodes() []uint32 {
	if m != nil {
		return m.RetriableStatusCodes
	}
	return nil
}

func (m *RetryPolicy) GetRetryBackOff() *RetryPolicy_RetryBackOff {
	if m != nil {
		return m.RetryBackOff
	}
	return nil
}

func (m *RetryPolicy) GetRetriableHeaders() []*HeaderMatcher {
	if m != nil {
		return m.RetriableHeaders
	}
	return nil
}

func (m *RetryPolicy) GetRetriableRequestHeaders() []*HeaderMatcher {
	if m != nil {
		return m.RetriableRequestHeaders
	}
	return nil
}

type RetryPolicy_RetryPriority struct {
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Types that are valid to be assigned to ConfigType:
	//	*RetryPolicy_RetryPriority_Config
	//	*RetryPolicy_RetryPriority_TypedConfig
	ConfigType           isRetryPolicy_RetryPriority_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
	XXX_unrecognized     []byte                                 `json:"-"`
	XXX_sizecache        int32                                  `json:"-"`
}

func (m *RetryPolicy_RetryPriority) Reset()         { *m = RetryPolicy_RetryPriority{} }
func (m *RetryPolicy_RetryPriority) String() string { return proto.CompactTextString(m) }
func (*RetryPolicy_RetryPriority) ProtoMessage()    {}
func (*RetryPolicy_RetryPriority) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{6, 0}
}

func (m *RetryPolicy_RetryPriority) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RetryPolicy_RetryPriority.Unmarshal(m, b)
}
func (m *RetryPolicy_RetryPriority) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RetryPolicy_RetryPriority.Marshal(b, m, deterministic)
}
func (m *RetryPolicy_RetryPriority) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RetryPolicy_RetryPriority.Merge(m, src)
}
func (m *RetryPolicy_RetryPriority) XXX_Size() int {
	return xxx_messageInfo_RetryPolicy_RetryPriority.Size(m)
}
func (m *RetryPolicy_RetryPriority) XXX_DiscardUnknown() {
	xxx_messageInfo_RetryPolicy_RetryPriority.DiscardUnknown(m)
}

var xxx_messageInfo_RetryPolicy_RetryPriority proto.InternalMessageInfo

func (m *RetryPolicy_RetryPriority) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isRetryPolicy_RetryPriority_ConfigType interface {
	isRetryPolicy_RetryPriority_ConfigType()
}

type RetryPolicy_RetryPriority_Config struct {
	Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"`
}

type RetryPolicy_RetryPriority_TypedConfig struct {
	TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*RetryPolicy_RetryPriority_Config) isRetryPolicy_RetryPriority_ConfigType() {}

func (*RetryPolicy_RetryPriority_TypedConfig) isRetryPolicy_RetryPriority_ConfigType() {}

func (m *RetryPolicy_RetryPriority) GetConfigType() isRetryPolicy_RetryPriority_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

// Deprecated: Do not use.
func (m *RetryPolicy_RetryPriority) GetConfig() *_struct.Struct {
	if x, ok := m.GetConfigType().(*RetryPolicy_RetryPriority_Config); ok {
		return x.Config
	}
	return nil
}

func (m *RetryPolicy_RetryPriority) GetTypedConfig() *any.Any {
	if x, ok := m.GetConfigType().(*RetryPolicy_RetryPriority_TypedConfig); ok {
		return x.TypedConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*RetryPolicy_RetryPriority) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*RetryPolicy_RetryPriority_Config)(nil),
		(*RetryPolicy_RetryPriority_TypedConfig)(nil),
	}
}

type RetryPolicy_RetryHostPredicate struct {
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Types that are valid to be assigned to ConfigType:
	//	*RetryPolicy_RetryHostPredicate_Config
	//	*RetryPolicy_RetryHostPredicate_TypedConfig
	ConfigType           isRetryPolicy_RetryHostPredicate_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
	XXX_unrecognized     []byte                                      `json:"-"`
	XXX_sizecache        int32                                       `json:"-"`
}

func (m *RetryPolicy_RetryHostPredicate) Reset()         { *m = RetryPolicy_RetryHostPredicate{} }
func (m *RetryPolicy_RetryHostPredicate) String() string { return proto.CompactTextString(m) }
func (*RetryPolicy_RetryHostPredicate) ProtoMessage()    {}
func (*RetryPolicy_RetryHostPredicate) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{6, 1}
}

func (m *RetryPolicy_RetryHostPredicate) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RetryPolicy_RetryHostPredicate.Unmarshal(m, b)
}
func (m *RetryPolicy_RetryHostPredicate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RetryPolicy_RetryHostPredicate.Marshal(b, m, deterministic)
}
func (m *RetryPolicy_RetryHostPredicate) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RetryPolicy_RetryHostPredicate.Merge(m, src)
}
func (m *RetryPolicy_RetryHostPredicate) XXX_Size() int {
	return xxx_messageInfo_RetryPolicy_RetryHostPredicate.Size(m)
}
func (m *RetryPolicy_RetryHostPredicate) XXX_DiscardUnknown() {
	xxx_messageInfo_RetryPolicy_RetryHostPredicate.DiscardUnknown(m)
}

var xxx_messageInfo_RetryPolicy_RetryHostPredicate proto.InternalMessageInfo

func (m *RetryPolicy_RetryHostPredicate) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isRetryPolicy_RetryHostPredicate_ConfigType interface {
	isRetryPolicy_RetryHostPredicate_ConfigType()
}

type RetryPolicy_RetryHostPredicate_Config struct {
	Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"`
}

type RetryPolicy_RetryHostPredicate_TypedConfig struct {
	TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*RetryPolicy_RetryHostPredicate_Config) isRetryPolicy_RetryHostPredicate_ConfigType() {}

func (*RetryPolicy_RetryHostPredicate_TypedConfig) isRetryPolicy_RetryHostPredicate_ConfigType() {}

func (m *RetryPolicy_RetryHostPredicate) GetConfigType() isRetryPolicy_RetryHostPredicate_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

// Deprecated: Do not use.
func (m *RetryPolicy_RetryHostPredicate) GetConfig() *_struct.Struct {
	if x, ok := m.GetConfigType().(*RetryPolicy_RetryHostPredicate_Config); ok {
		return x.Config
	}
	return nil
}

func (m *RetryPolicy_RetryHostPredicate) GetTypedConfig() *any.Any {
	if x, ok := m.GetConfigType().(*RetryPolicy_RetryHostPredicate_TypedConfig); ok {
		return x.TypedConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*RetryPolicy_RetryHostPredicate) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*RetryPolicy_RetryHostPredicate_Config)(nil),
		(*RetryPolicy_RetryHostPredicate_TypedConfig)(nil),
	}
}

type RetryPolicy_RetryBackOff struct {
	// Specifies the base interval between retries. This parameter is required and must be greater
	// than zero. Values less than 1 ms are rounded up to 1 ms.
	// See :ref:`config_http_filters_router_x-envoy-max-retries` for a discussion of Envoy's
	// back-off algorithm.
	BaseInterval *duration.Duration `protobuf:"bytes,1,opt,name=base_interval,json=baseInterval,proto3" json:"base_interval,omitempty"`
	// Specifies the maximum interval between retries. This parameter is optional, but must be
	// greater than or equal to the `base_interval` if set. The default is 10 times the
	// `base_interval`. See :ref:`config_http_filters_router_x-envoy-max-retries` for a discussion
	// of Envoy's back-off algorithm.
	MaxInterval          *duration.Duration `protobuf:"bytes,2,opt,name=max_interval,json=maxInterval,proto3" json:"max_interval,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *RetryPolicy_RetryBackOff) Reset()         { *m = RetryPolicy_RetryBackOff{} }
func (m *RetryPolicy_RetryBackOff) String() string { return proto.CompactTextString(m) }
func (*RetryPolicy_RetryBackOff) ProtoMessage()    {}
func (*RetryPolicy_RetryBackOff) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{6, 2}
}

func (m *RetryPolicy_RetryBackOff) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RetryPolicy_RetryBackOff.Unmarshal(m, b)
}
func (m *RetryPolicy_RetryBackOff) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RetryPolicy_RetryBackOff.Marshal(b, m, deterministic)
}
func (m *RetryPolicy_RetryBackOff) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RetryPolicy_RetryBackOff.Merge(m, src)
}
func (m *RetryPolicy_RetryBackOff) XXX_Size() int {
	return xxx_messageInfo_RetryPolicy_RetryBackOff.Size(m)
}
func (m *RetryPolicy_RetryBackOff) XXX_DiscardUnknown() {
	xxx_messageInfo_RetryPolicy_RetryBackOff.DiscardUnknown(m)
}

var xxx_messageInfo_RetryPolicy_RetryBackOff proto.InternalMessageInfo

func (m *RetryPolicy_RetryBackOff) GetBaseInterval() *duration.Duration {
	if m != nil {
		return m.BaseInterval
	}
	return nil
}

func (m *RetryPolicy_RetryBackOff) GetMaxInterval() *duration.Duration {
	if m != nil {
		return m.MaxInterval
	}
	return nil
}

// HTTP request hedging :ref:`architecture overview <arch_overview_http_routing_hedging>`.
type HedgePolicy struct {
	// Specifies the number of initial requests that should be sent upstream.
	// Must be at least 1.
	// Defaults to 1.
	// [#not-implemented-hide:]
	InitialRequests *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=initial_requests,json=initialRequests,proto3" json:"initial_requests,omitempty"`
	// Specifies a probability that an additional upstream request should be sent
	// on top of what is specified by initial_requests.
	// Defaults to 0.
	// [#not-implemented-hide:]
	AdditionalRequestChance *_type.FractionalPercent `protobuf:"bytes,2,opt,name=additional_request_chance,json=additionalRequestChance,proto3" json:"additional_request_chance,omitempty"`
	// Indicates that a hedged request should be sent when the per-try timeout
	// is hit. This will only occur if the retry policy also indicates that a
	// timed out request should be retried.
	// Once a timed out request is retried due to per try timeout, the router
	// filter will ensure that it is not retried again even if the returned
	// response headers would otherwise be retried according the specified
	// :ref:`RetryPolicy <envoy_api_msg_route.RetryPolicy>`.
	// Defaults to false.
	HedgeOnPerTryTimeout bool     `protobuf:"varint,3,opt,name=hedge_on_per_try_timeout,json=hedgeOnPerTryTimeout,proto3" json:"hedge_on_per_try_timeout,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *HedgePolicy) Reset()         { *m = HedgePolicy{} }
func (m *HedgePolicy) String() string { return proto.CompactTextString(m) }
func (*HedgePolicy) ProtoMessage()    {}
func (*HedgePolicy) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{7}
}

func (m *HedgePolicy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HedgePolicy.Unmarshal(m, b)
}
func (m *HedgePolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HedgePolicy.Marshal(b, m, deterministic)
}
func (m *HedgePolicy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HedgePolicy.Merge(m, src)
}
func (m *HedgePolicy) XXX_Size() int {
	return xxx_messageInfo_HedgePolicy.Size(m)
}
func (m *HedgePolicy) XXX_DiscardUnknown() {
	xxx_messageInfo_HedgePolicy.DiscardUnknown(m)
}

var xxx_messageInfo_HedgePolicy proto.InternalMessageInfo

func (m *HedgePolicy) GetInitialRequests() *wrappers.UInt32Value {
	if m != nil {
		return m.InitialRequests
	}
	return nil
}

func (m *HedgePolicy) GetAdditionalRequestChance() *_type.FractionalPercent {
	if m != nil {
		return m.AdditionalRequestChance
	}
	return nil
}

func (m *HedgePolicy) GetHedgeOnPerTryTimeout() bool {
	if m != nil {
		return m.HedgeOnPerTryTimeout
	}
	return false
}

// [#next-free-field: 9]
type RedirectAction struct {
	// When the scheme redirection take place, the following rules apply:
	//  1. If the source URI scheme is `http` and the port is explicitly
	//     set to `:80`, the port will be removed after the redirection
	//  2. If the source URI scheme is `https` and the port is explicitly
	//     set to `:443`, the port will be removed after the redirection
	//
	// Types that are valid to be assigned to SchemeRewriteSpecifier:
	//	*RedirectAction_HttpsRedirect
	//	*RedirectAction_SchemeRedirect
	SchemeRewriteSpecifier isRedirectAction_SchemeRewriteSpecifier `protobuf_oneof:"scheme_rewrite_specifier"`
	// The host portion of the URL will be swapped with this value.
	HostRedirect string `protobuf:"bytes,1,opt,name=host_redirect,json=hostRedirect,proto3" json:"host_redirect,omitempty"`
	// The port value of the URL will be swapped with this value.
	PortRedirect uint32 `protobuf:"varint,8,opt,name=port_redirect,json=portRedirect,proto3" json:"port_redirect,omitempty"`
	// Types that are valid to be assigned to PathRewriteSpecifier:
	//	*RedirectAction_PathRedirect
	//	*RedirectAction_PrefixRewrite
	PathRewriteSpecifier isRedirectAction_PathRewriteSpecifier `protobuf_oneof:"path_rewrite_specifier"`
	// The HTTP status code to use in the redirect response. The default response
	// code is MOVED_PERMANENTLY (301).
	ResponseCode RedirectAction_RedirectResponseCode `protobuf:"varint,3,opt,name=response_code,json=responseCode,proto3,enum=envoy.api.v2.route.RedirectAction_RedirectResponseCode" json:"response_code,omitempty"`
	// Indicates that during redirection, the query portion of the URL will
	// be removed. Default value is false.
	StripQuery           bool     `protobuf:"varint,6,opt,name=strip_query,json=stripQuery,proto3" json:"strip_query,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RedirectAction) Reset()         { *m = RedirectAction{} }
func (m *RedirectAction) String() string { return proto.CompactTextString(m) }
func (*RedirectAction) ProtoMessage()    {}
func (*RedirectAction) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{8}
}

func (m *RedirectAction) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RedirectAction.Unmarshal(m, b)
}
func (m *RedirectAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RedirectAction.Marshal(b, m, deterministic)
}
func (m *RedirectAction) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RedirectAction.Merge(m, src)
}
func (m *RedirectAction) XXX_Size() int {
	return xxx_messageInfo_RedirectAction.Size(m)
}
func (m *RedirectAction) XXX_DiscardUnknown() {
	xxx_messageInfo_RedirectAction.DiscardUnknown(m)
}

var xxx_messageInfo_RedirectAction proto.InternalMessageInfo

type isRedirectAction_SchemeRewriteSpecifier interface {
	isRedirectAction_SchemeRewriteSpecifier()
}

type RedirectAction_HttpsRedirect struct {
	HttpsRedirect bool `protobuf:"varint,4,opt,name=https_redirect,json=httpsRedirect,proto3,oneof"`
}

type RedirectAction_SchemeRedirect struct {
	SchemeRedirect string `protobuf:"bytes,7,opt,name=scheme_redirect,json=schemeRedirect,proto3,oneof"`
}

func (*RedirectAction_HttpsRedirect) isRedirectAction_SchemeRewriteSpecifier() {}

func (*RedirectAction_SchemeRedirect) isRedirectAction_SchemeRewriteSpecifier() {}

func (m *RedirectAction) GetSchemeRewriteSpecifier() isRedirectAction_SchemeRewriteSpecifier {
	if m != nil {
		return m.SchemeRewriteSpecifier
	}
	return nil
}

func (m *RedirectAction) GetHttpsRedirect() bool {
	if x, ok := m.GetSchemeRewriteSpecifier().(*RedirectAction_HttpsRedirect); ok {
		return x.HttpsRedirect
	}
	return false
}

func (m *RedirectAction) GetSchemeRedirect() string {
	if x, ok := m.GetSchemeRewriteSpecifier().(*RedirectAction_SchemeRedirect); ok {
		return x.SchemeRedirect
	}
	return ""
}

func (m *RedirectAction) GetHostRedirect() string {
	if m != nil {
		return m.HostRedirect
	}
	return ""
}

func (m *RedirectAction) GetPortRedirect() uint32 {
	if m != nil {
		return m.PortRedirect
	}
	return 0
}

type isRedirectAction_PathRewriteSpecifier interface {
	isRedirectAction_PathRewriteSpecifier()
}

type RedirectAction_PathRedirect struct {
	PathRedirect string `protobuf:"bytes,2,opt,name=path_redirect,json=pathRedirect,proto3,oneof"`
}

type RedirectAction_PrefixRewrite struct {
	PrefixRewrite string `protobuf:"bytes,5,opt,name=prefix_rewrite,json=prefixRewrite,proto3,oneof"`
}

func (*RedirectAction_PathRedirect) isRedirectAction_PathRewriteSpecifier() {}

func (*RedirectAction_PrefixRewrite) isRedirectAction_PathRewriteSpecifier() {}

func (m *RedirectAction) GetPathRewriteSpecifier() isRedirectAction_PathRewriteSpecifier {
	if m != nil {
		return m.PathRewriteSpecifier
	}
	return nil
}

func (m *RedirectAction) GetPathRedirect() string {
	if x, ok := m.GetPathRewriteSpecifier().(*RedirectAction_PathRedirect); ok {
		return x.PathRedirect
	}
	return ""
}

func (m *RedirectAction) GetPrefixRewrite() string {
	if x, ok := m.GetPathRewriteSpecifier().(*RedirectAction_PrefixRewrite); ok {
		return x.PrefixRewrite
	}
	return ""
}

func (m *RedirectAction) GetResponseCode() RedirectAction_RedirectResponseCode {
	if m != nil {
		return m.ResponseCode
	}
	return RedirectAction_MOVED_PERMANENTLY
}

func (m *RedirectAction) GetStripQuery() bool {
	if m != nil {
		return m.StripQuery
	}
	return false
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*RedirectAction) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*RedirectAction_HttpsRedirect)(nil),
		(*RedirectAction_SchemeRedirect)(nil),
		(*RedirectAction_PathRedirect)(nil),
		(*RedirectAction_PrefixRewrite)(nil),
	}
}

type DirectResponseAction struct {
	// Specifies the HTTP response status to be returned.
	Status uint32 `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"`
	// Specifies the content of the response body. If this setting is omitted,
	// no body is included in the generated response.
	//
	// .. note::
	//
	//   Headers can be specified using *response_headers_to_add* in the enclosing
	//   :ref:`envoy_api_msg_route.Route`, :ref:`envoy_api_msg_RouteConfiguration` or
	//   :ref:`envoy_api_msg_route.VirtualHost`.
	Body                 *core.DataSource `protobuf:"bytes,2,opt,name=body,proto3" json:"body,omitempty"`
	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
	XXX_unrecognized     []byte           `json:"-"`
	XXX_sizecache        int32            `json:"-"`
}

func (m *DirectResponseAction) Reset()         { *m = DirectResponseAction{} }
func (m *DirectResponseAction) String() string { return proto.CompactTextString(m) }
func (*DirectResponseAction) ProtoMessage()    {}
func (*DirectResponseAction) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{9}
}

func (m *DirectResponseAction) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DirectResponseAction.Unmarshal(m, b)
}
func (m *DirectResponseAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DirectResponseAction.Marshal(b, m, deterministic)
}
func (m *DirectResponseAction) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DirectResponseAction.Merge(m, src)
}
func (m *DirectResponseAction) XXX_Size() int {
	return xxx_messageInfo_DirectResponseAction.Size(m)
}
func (m *DirectResponseAction) XXX_DiscardUnknown() {
	xxx_messageInfo_DirectResponseAction.DiscardUnknown(m)
}

var xxx_messageInfo_DirectResponseAction proto.InternalMessageInfo

func (m *DirectResponseAction) GetStatus() uint32 {
	if m != nil {
		return m.Status
	}
	return 0
}

func (m *DirectResponseAction) GetBody() *core.DataSource {
	if m != nil {
		return m.Body
	}
	return nil
}

type Decorator struct {
	// The operation name associated with the request matched to this route. If tracing is
	// enabled, this information will be used as the span name reported for this request.
	//
	// .. note::
	//
	//   For ingress (inbound) requests, or egress (outbound) responses, this value may be overridden
	//   by the :ref:`x-envoy-decorator-operation
	//   <config_http_filters_router_x-envoy-decorator-operation>` header.
	Operation            string   `protobuf:"bytes,1,opt,name=operation,proto3" json:"operation,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Decorator) Reset()         { *m = Decorator{} }
func (m *Decorator) String() string { return proto.CompactTextString(m) }
func (*Decorator) ProtoMessage()    {}
func (*Decorator) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{10}
}

func (m *Decorator) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Decorator.Unmarshal(m, b)
}
func (m *Decorator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Decorator.Marshal(b, m, deterministic)
}
func (m *Decorator) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Decorator.Merge(m, src)
}
func (m *Decorator) XXX_Size() int {
	return xxx_messageInfo_Decorator.Size(m)
}
func (m *Decorator) XXX_DiscardUnknown() {
	xxx_messageInfo_Decorator.DiscardUnknown(m)
}

var xxx_messageInfo_Decorator proto.InternalMessageInfo

func (m *Decorator) GetOperation() string {
	if m != nil {
		return m.Operation
	}
	return ""
}

type Tracing struct {
	// Target percentage of requests managed by this HTTP connection manager that will be force
	// traced if the :ref:`x-client-trace-id <config_http_conn_man_headers_x-client-trace-id>`
	// header is set. This field is a direct analog for the runtime variable
	// 'tracing.client_sampling' in the :ref:`HTTP Connection Manager
	// <config_http_conn_man_runtime>`.
	// Default: 100%
	ClientSampling *_type.FractionalPercent `protobuf:"bytes,1,opt,name=client_sampling,json=clientSampling,proto3" json:"client_sampling,omitempty"`
	// Target percentage of requests managed by this HTTP connection manager that will be randomly
	// selected for trace generation, if not requested by the client or not forced. This field is
	// a direct analog for the runtime variable 'tracing.random_sampling' in the
	// :ref:`HTTP Connection Manager <config_http_conn_man_runtime>`.
	// Default: 100%
	RandomSampling *_type.FractionalPercent `protobuf:"bytes,2,opt,name=random_sampling,json=randomSampling,proto3" json:"random_sampling,omitempty"`
	// Target percentage of requests managed by this HTTP connection manager that will be traced
	// after all other sampling checks have been applied (client-directed, force tracing, random
	// sampling). This field functions as an upper limit on the total configured sampling rate. For
	// instance, setting client_sampling to 100% but overall_sampling to 1% will result in only 1%
	// of client requests with the appropriate headers to be force traced. This field is a direct
	// analog for the runtime variable 'tracing.global_enabled' in the
	// :ref:`HTTP Connection Manager <config_http_conn_man_runtime>`.
	// Default: 100%
	OverallSampling      *_type.FractionalPercent `protobuf:"bytes,3,opt,name=overall_sampling,json=overallSampling,proto3" json:"overall_sampling,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
	XXX_unrecognized     []byte                   `json:"-"`
	XXX_sizecache        int32                    `json:"-"`
}

func (m *Tracing) Reset()         { *m = Tracing{} }
func (m *Tracing) String() string { return proto.CompactTextString(m) }
func (*Tracing) ProtoMessage()    {}
func (*Tracing) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{11}
}

func (m *Tracing) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Tracing.Unmarshal(m, b)
}
func (m *Tracing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Tracing.Marshal(b, m, deterministic)
}
func (m *Tracing) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Tracing.Merge(m, src)
}
func (m *Tracing) XXX_Size() int {
	return xxx_messageInfo_Tracing.Size(m)
}
func (m *Tracing) XXX_DiscardUnknown() {
	xxx_messageInfo_Tracing.DiscardUnknown(m)
}

var xxx_messageInfo_Tracing proto.InternalMessageInfo

func (m *Tracing) GetClientSampling() *_type.FractionalPercent {
	if m != nil {
		return m.ClientSampling
	}
	return nil
}

func (m *Tracing) GetRandomSampling() *_type.FractionalPercent {
	if m != nil {
		return m.RandomSampling
	}
	return nil
}

func (m *Tracing) GetOverallSampling() *_type.FractionalPercent {
	if m != nil {
		return m.OverallSampling
	}
	return nil
}

// A virtual cluster is a way of specifying a regex matching rule against
// certain important endpoints such that statistics are generated explicitly for
// the matched requests. The reason this is useful is that when doing
// prefix/path matching Envoy does not always know what the application
// considers to be an endpoint. Thus, it’s impossible for Envoy to generically
// emit per endpoint statistics. However, often systems have highly critical
// endpoints that they wish to get “perfect” statistics on. Virtual cluster
// statistics are perfect in the sense that they are emitted on the downstream
// side such that they include network level failures.
//
// Documentation for :ref:`virtual cluster statistics <config_http_filters_router_stats>`.
//
// .. note::
//
//    Virtual clusters are a useful tool, but we do not recommend setting up a virtual cluster for
//    every application endpoint. This is both not easily maintainable and as well the matching and
//    statistics output are not free.
type VirtualCluster struct {
	// Specifies a regex pattern to use for matching requests. The entire path of the request
	// must match the regex. The regex grammar used is defined `here
	// <https://en.cppreference.com/w/cpp/regex/ecmascript>`_.
	//
	// Examples:
	//
	// * The regex ``/rides/\d+`` matches the path */rides/0*
	// * The regex ``/rides/\d+`` matches the path */rides/123*
	// * The regex ``/rides/\d+`` does not match the path */rides/123/456*
	//
	// .. attention::
	//   This field has been deprecated in favor of `headers` as it is not safe for use with
	//   untrusted input in all cases.
	Pattern string `protobuf:"bytes,1,opt,name=pattern,proto3" json:"pattern,omitempty"` // Deprecated: Do not use.
	// Specifies a list of header matchers to use for matching requests. Each specified header must
	// match. The pseudo-headers `:path` and `:method` can be used to match the request path and
	// method, respectively.
	Headers []*HeaderMatcher `protobuf:"bytes,4,rep,name=headers,proto3" json:"headers,omitempty"`
	// Specifies the name of the virtual cluster. The virtual cluster name as well
	// as the virtual host name are used when emitting statistics. The statistics are emitted by the
	// router filter and are documented :ref:`here <config_http_filters_router_stats>`.
	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	// Optionally specifies the HTTP method to match on. For example GET, PUT,
	// etc.
	//
	// .. attention::
	//   This field has been deprecated in favor of `headers`.
	Method               core.RequestMethod `protobuf:"varint,3,opt,name=method,proto3,enum=envoy.api.v2.core.RequestMethod" json:"method,omitempty"` // Deprecated: Do not use.
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *VirtualCluster) Reset()         { *m = VirtualCluster{} }
func (m *VirtualCluster) String() string { return proto.CompactTextString(m) }
func (*VirtualCluster) ProtoMessage()    {}
func (*VirtualCluster) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{12}
}

func (m *VirtualCluster) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_VirtualCluster.Unmarshal(m, b)
}
func (m *VirtualCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_VirtualCluster.Marshal(b, m, deterministic)
}
func (m *VirtualCluster) XXX_Merge(src proto.Message) {
	xxx_messageInfo_VirtualCluster.Merge(m, src)
}
func (m *VirtualCluster) XXX_Size() int {
	return xxx_messageInfo_VirtualCluster.Size(m)
}
func (m *VirtualCluster) XXX_DiscardUnknown() {
	xxx_messageInfo_VirtualCluster.DiscardUnknown(m)
}

var xxx_messageInfo_VirtualCluster proto.InternalMessageInfo

// Deprecated: Do not use.
func (m *VirtualCluster) GetPattern() string {
	if m != nil {
		return m.Pattern
	}
	return ""
}

func (m *VirtualCluster) GetHeaders() []*HeaderMatcher {
	if m != nil {
		return m.Headers
	}
	return nil
}

func (m *VirtualCluster) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

// Deprecated: Do not use.
func (m *VirtualCluster) GetMethod() core.RequestMethod {
	if m != nil {
		return m.Method
	}
	return core.RequestMethod_METHOD_UNSPECIFIED
}

// Global rate limiting :ref:`architecture overview <arch_overview_rate_limit>`.
type RateLimit struct {
	// Refers to the stage set in the filter. The rate limit configuration only
	// applies to filters with the same stage number. The default stage number is
	// 0.
	//
	// .. note::
	//
	//   The filter supports a range of 0 - 10 inclusively for stage numbers.
	Stage *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=stage,proto3" json:"stage,omitempty"`
	// The key to be set in runtime to disable this rate limit configuration.
	DisableKey string `protobuf:"bytes,2,opt,name=disable_key,json=disableKey,proto3" json:"disable_key,omitempty"`
	// A list of actions that are to be applied for this rate limit configuration.
	// Order matters as the actions are processed sequentially and the descriptor
	// is composed by appending descriptor entries in that sequence. If an action
	// cannot append a descriptor entry, no descriptor is generated for the
	// configuration. See :ref:`composing actions
	// <config_http_filters_rate_limit_composing_actions>` for additional documentation.
	Actions              []*RateLimit_Action `protobuf:"bytes,3,rep,name=actions,proto3" json:"actions,omitempty"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *RateLimit) Reset()         { *m = RateLimit{} }
func (m *RateLimit) String() string { return proto.CompactTextString(m) }
func (*RateLimit) ProtoMessage()    {}
func (*RateLimit) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{13}
}

func (m *RateLimit) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimit.Unmarshal(m, b)
}
func (m *RateLimit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimit.Marshal(b, m, deterministic)
}
func (m *RateLimit) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimit.Merge(m, src)
}
func (m *RateLimit) XXX_Size() int {
	return xxx_messageInfo_RateLimit.Size(m)
}
func (m *RateLimit) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimit.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimit proto.InternalMessageInfo

func (m *RateLimit) GetStage() *wrappers.UInt32Value {
	if m != nil {
		return m.Stage
	}
	return nil
}

func (m *RateLimit) GetDisableKey() string {
	if m != nil {
		return m.DisableKey
	}
	return ""
}

func (m *RateLimit) GetActions() []*RateLimit_Action {
	if m != nil {
		return m.Actions
	}
	return nil
}

// [#next-free-field: 7]
type RateLimit_Action struct {
	// Types that are valid to be assigned to ActionSpecifier:
	//	*RateLimit_Action_SourceCluster_
	//	*RateLimit_Action_DestinationCluster_
	//	*RateLimit_Action_RequestHeaders_
	//	*RateLimit_Action_RemoteAddress_
	//	*RateLimit_Action_GenericKey_
	//	*RateLimit_Action_HeaderValueMatch_
	ActionSpecifier      isRateLimit_Action_ActionSpecifier `protobuf_oneof:"action_specifier"`
	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
	XXX_unrecognized     []byte                             `json:"-"`
	XXX_sizecache        int32                              `json:"-"`
}

func (m *RateLimit_Action) Reset()         { *m = RateLimit_Action{} }
func (m *RateLimit_Action) String() string { return proto.CompactTextString(m) }
func (*RateLimit_Action) ProtoMessage()    {}
func (*RateLimit_Action) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{13, 0}
}

func (m *RateLimit_Action) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimit_Action.Unmarshal(m, b)
}
func (m *RateLimit_Action) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimit_Action.Marshal(b, m, deterministic)
}
func (m *RateLimit_Action) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimit_Action.Merge(m, src)
}
func (m *RateLimit_Action) XXX_Size() int {
	return xxx_messageInfo_RateLimit_Action.Size(m)
}
func (m *RateLimit_Action) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimit_Action.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimit_Action proto.InternalMessageInfo

type isRateLimit_Action_ActionSpecifier interface {
	isRateLimit_Action_ActionSpecifier()
}

type RateLimit_Action_SourceCluster_ struct {
	SourceCluster *RateLimit_Action_SourceCluster `protobuf:"bytes,1,opt,name=source_cluster,json=sourceCluster,proto3,oneof"`
}

type RateLimit_Action_DestinationCluster_ struct {
	DestinationCluster *RateLimit_Action_DestinationCluster `protobuf:"bytes,2,opt,name=destination_cluster,json=destinationCluster,proto3,oneof"`
}

type RateLimit_Action_RequestHeaders_ struct {
	RequestHeaders *RateLimit_Action_RequestHeaders `protobuf:"bytes,3,opt,name=request_headers,json=requestHeaders,proto3,oneof"`
}

type RateLimit_Action_RemoteAddress_ struct {
	RemoteAddress *RateLimit_Action_RemoteAddress `protobuf:"bytes,4,opt,name=remote_address,json=remoteAddress,proto3,oneof"`
}

type RateLimit_Action_GenericKey_ struct {
	GenericKey *RateLimit_Action_GenericKey `protobuf:"bytes,5,opt,name=generic_key,json=genericKey,proto3,oneof"`
}

type RateLimit_Action_HeaderValueMatch_ struct {
	HeaderValueMatch *RateLimit_Action_HeaderValueMatch `protobuf:"bytes,6,opt,name=header_value_match,json=headerValueMatch,proto3,oneof"`
}

func (*RateLimit_Action_SourceCluster_) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_DestinationCluster_) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_RequestHeaders_) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_RemoteAddress_) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_GenericKey_) isRateLimit_Action_ActionSpecifier() {}

func (*RateLimit_Action_HeaderValueMatch_) isRateLimit_Action_ActionSpecifier() {}

func (m *RateLimit_Action) GetActionSpecifier() isRateLimit_Action_ActionSpecifier {
	if m != nil {
		return m.ActionSpecifier
	}
	return nil
}

func (m *RateLimit_Action) GetSourceCluster() *RateLimit_Action_SourceCluster {
	if x, ok := m.GetActionSpecifier().(*RateLimit_Action_SourceCluster_); ok {
		return x.SourceCluster
	}
	return nil
}

func (m *RateLimit_Action) GetDestinationCluster() *RateLimit_Action_DestinationCluster {
	if x, ok := m.GetActionSpecifier().(*RateLimit_Action_DestinationCluster_); ok {
		return x.DestinationCluster
	}
	return nil
}

func (m *RateLimit_Action) GetRequestHeaders() *RateLimit_Action_RequestHeaders {
	if x, ok := m.GetActionSpecifier().(*RateLimit_Action_RequestHeaders_); ok {
		return x.RequestHeaders
	}
	return nil
}

func (m *RateLimit_Action) GetRemoteAddress() *RateLimit_Action_RemoteAddress {
	if x, ok := m.GetActionSpecifier().(*RateLimit_Action_RemoteAddress_); ok {
		return x.RemoteAddress
	}
	return nil
}

func (m *RateLimit_Action) GetGenericKey() *RateLimit_Action_GenericKey {
	if x, ok := m.GetActionSpecifier().(*RateLimit_Action_GenericKey_); ok {
		return x.GenericKey
	}
	return nil
}

func (m *RateLimit_Action) GetHeaderValueMatch() *RateLimit_Action_HeaderValueMatch {
	if x, ok := m.GetActionSpecifier().(*RateLimit_Action_HeaderValueMatch_); ok {
		return x.HeaderValueMatch
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*RateLimit_Action) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*RateLimit_Action_SourceCluster_)(nil),
		(*RateLimit_Action_DestinationCluster_)(nil),
		(*RateLimit_Action_RequestHeaders_)(nil),
		(*RateLimit_Action_RemoteAddress_)(nil),
		(*RateLimit_Action_GenericKey_)(nil),
		(*RateLimit_Action_HeaderValueMatch_)(nil),
	}
}

// The following descriptor entry is appended to the descriptor:
//
// .. code-block:: cpp
//
//   ("source_cluster", "<local service cluster>")
//
// <local service cluster> is derived from the :option:`--service-cluster` option.
type RateLimit_Action_SourceCluster struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RateLimit_Action_SourceCluster) Reset()         { *m = RateLimit_Action_SourceCluster{} }
func (m *RateLimit_Action_SourceCluster) String() string { return proto.CompactTextString(m) }
func (*RateLimit_Action_SourceCluster) ProtoMessage()    {}
func (*RateLimit_Action_SourceCluster) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{13, 0, 0}
}

func (m *RateLimit_Action_SourceCluster) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimit_Action_SourceCluster.Unmarshal(m, b)
}
func (m *RateLimit_Action_SourceCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimit_Action_SourceCluster.Marshal(b, m, deterministic)
}
func (m *RateLimit_Action_SourceCluster) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimit_Action_SourceCluster.Merge(m, src)
}
func (m *RateLimit_Action_SourceCluster) XXX_Size() int {
	return xxx_messageInfo_RateLimit_Action_SourceCluster.Size(m)
}
func (m *RateLimit_Action_SourceCluster) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimit_Action_SourceCluster.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimit_Action_SourceCluster proto.InternalMessageInfo

// The following descriptor entry is appended to the descriptor:
//
// .. code-block:: cpp
//
//   ("destination_cluster", "<routed target cluster>")
//
// Once a request matches against a route table rule, a routed cluster is determined by one of
// the following :ref:`route table configuration <envoy_api_msg_RouteConfiguration>`
// settings:
//
// * :ref:`cluster <envoy_api_field_route.RouteAction.cluster>` indicates the upstream cluster
//   to route to.
// * :ref:`weighted_clusters <envoy_api_field_route.RouteAction.weighted_clusters>`
//   chooses a cluster randomly from a set of clusters with attributed weight.
// * :ref:`cluster_header <envoy_api_field_route.RouteAction.cluster_header>` indicates which
//   header in the request contains the target cluster.
type RateLimit_Action_DestinationCluster struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RateLimit_Action_DestinationCluster) Reset()         { *m = RateLimit_Action_DestinationCluster{} }
func (m *RateLimit_Action_DestinationCluster) String() string { return proto.CompactTextString(m) }
func (*RateLimit_Action_DestinationCluster) ProtoMessage()    {}
func (*RateLimit_Action_DestinationCluster) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{13, 0, 1}
}

func (m *RateLimit_Action_DestinationCluster) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimit_Action_DestinationCluster.Unmarshal(m, b)
}
func (m *RateLimit_Action_DestinationCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimit_Action_DestinationCluster.Marshal(b, m, deterministic)
}
func (m *RateLimit_Action_DestinationCluster) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimit_Action_DestinationCluster.Merge(m, src)
}
func (m *RateLimit_Action_DestinationCluster) XXX_Size() int {
	return xxx_messageInfo_RateLimit_Action_DestinationCluster.Size(m)
}
func (m *RateLimit_Action_DestinationCluster) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimit_Action_DestinationCluster.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimit_Action_DestinationCluster proto.InternalMessageInfo

// The following descriptor entry is appended when a header contains a key that matches the
// *header_name*:
//
// .. code-block:: cpp
//
//   ("<descriptor_key>", "<header_value_queried_from_header>")
type RateLimit_Action_RequestHeaders struct {
	// The header name to be queried from the request headers. The header’s
	// value is used to populate the value of the descriptor entry for the
	// descriptor_key.
	HeaderName string `protobuf:"bytes,1,opt,name=header_name,json=headerName,proto3" json:"header_name,omitempty"`
	// The key to use in the descriptor entry.
	DescriptorKey        string   `protobuf:"bytes,2,opt,name=descriptor_key,json=descriptorKey,proto3" json:"descriptor_key,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RateLimit_Action_RequestHeaders) Reset()         { *m = RateLimit_Action_RequestHeaders{} }
func (m *RateLimit_Action_RequestHeaders) String() string { return proto.CompactTextString(m) }
func (*RateLimit_Action_RequestHeaders) ProtoMessage()    {}
func (*RateLimit_Action_RequestHeaders) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{13, 0, 2}
}

func (m *RateLimit_Action_RequestHeaders) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimit_Action_RequestHeaders.Unmarshal(m, b)
}
func (m *RateLimit_Action_RequestHeaders) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimit_Action_RequestHeaders.Marshal(b, m, deterministic)
}
func (m *RateLimit_Action_RequestHeaders) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimit_Action_RequestHeaders.Merge(m, src)
}
func (m *RateLimit_Action_RequestHeaders) XXX_Size() int {
	return xxx_messageInfo_RateLimit_Action_RequestHeaders.Size(m)
}
func (m *RateLimit_Action_RequestHeaders) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimit_Action_RequestHeaders.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimit_Action_RequestHeaders proto.InternalMessageInfo

func (m *RateLimit_Action_RequestHeaders) GetHeaderName() string {
	if m != nil {
		return m.HeaderName
	}
	return ""
}

func (m *RateLimit_Action_RequestHeaders) GetDescriptorKey() string {
	if m != nil {
		return m.DescriptorKey
	}
	return ""
}

// The following descriptor entry is appended to the descriptor and is populated using the
// trusted address from :ref:`x-forwarded-for <config_http_conn_man_headers_x-forwarded-for>`:
//
// .. code-block:: cpp
//
//   ("remote_address", "<trusted address from x-forwarded-for>")
type RateLimit_Action_RemoteAddress struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RateLimit_Action_RemoteAddress) Reset()         { *m = RateLimit_Action_RemoteAddress{} }
func (m *RateLimit_Action_RemoteAddress) String() string { return proto.CompactTextString(m) }
func (*RateLimit_Action_RemoteAddress) ProtoMessage()    {}
func (*RateLimit_Action_RemoteAddress) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{13, 0, 3}
}

func (m *RateLimit_Action_RemoteAddress) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimit_Action_RemoteAddress.Unmarshal(m, b)
}
func (m *RateLimit_Action_RemoteAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimit_Action_RemoteAddress.Marshal(b, m, deterministic)
}
func (m *RateLimit_Action_RemoteAddress) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimit_Action_RemoteAddress.Merge(m, src)
}
func (m *RateLimit_Action_RemoteAddress) XXX_Size() int {
	return xxx_messageInfo_RateLimit_Action_RemoteAddress.Size(m)
}
func (m *RateLimit_Action_RemoteAddress) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimit_Action_RemoteAddress.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimit_Action_RemoteAddress proto.InternalMessageInfo

// The following descriptor entry is appended to the descriptor:
//
// .. code-block:: cpp
//
//   ("generic_key", "<descriptor_value>")
type RateLimit_Action_GenericKey struct {
	// The value to use in the descriptor entry.
	DescriptorValue      string   `protobuf:"bytes,1,opt,name=descriptor_value,json=descriptorValue,proto3" json:"descriptor_value,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RateLimit_Action_GenericKey) Reset()         { *m = RateLimit_Action_GenericKey{} }
func (m *RateLimit_Action_GenericKey) String() string { return proto.CompactTextString(m) }
func (*RateLimit_Action_GenericKey) ProtoMessage()    {}
func (*RateLimit_Action_GenericKey) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{13, 0, 4}
}

func (m *RateLimit_Action_GenericKey) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimit_Action_GenericKey.Unmarshal(m, b)
}
func (m *RateLimit_Action_GenericKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimit_Action_GenericKey.Marshal(b, m, deterministic)
}
func (m *RateLimit_Action_GenericKey) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimit_Action_GenericKey.Merge(m, src)
}
func (m *RateLimit_Action_GenericKey) XXX_Size() int {
	return xxx_messageInfo_RateLimit_Action_GenericKey.Size(m)
}
func (m *RateLimit_Action_GenericKey) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimit_Action_GenericKey.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimit_Action_GenericKey proto.InternalMessageInfo

func (m *RateLimit_Action_GenericKey) GetDescriptorValue() string {
	if m != nil {
		return m.DescriptorValue
	}
	return ""
}

// The following descriptor entry is appended to the descriptor:
//
// .. code-block:: cpp
//
//   ("header_match", "<descriptor_value>")
type RateLimit_Action_HeaderValueMatch struct {
	// The value to use in the descriptor entry.
	DescriptorValue string `protobuf:"bytes,1,opt,name=descriptor_value,json=descriptorValue,proto3" json:"descriptor_value,omitempty"`
	// If set to true, the action will append a descriptor entry when the
	// request matches the headers. If set to false, the action will append a
	// descriptor entry when the request does not match the headers. The
	// default value is true.
	ExpectMatch *wrappers.BoolValue `protobuf:"bytes,2,opt,name=expect_match,json=expectMatch,proto3" json:"expect_match,omitempty"`
	// Specifies a set of headers that the rate limit action should match
	// on. The action will check the request’s headers against all the
	// specified headers in the config. A match will happen if all the
	// headers in the config are present in the request with the same values
	// (or based on presence if the value field is not in the config).
	Headers              []*HeaderMatcher `protobuf:"bytes,3,rep,name=headers,proto3" json:"headers,omitempty"`
	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
	XXX_unrecognized     []byte           `json:"-"`
	XXX_sizecache        int32            `json:"-"`
}

func (m *RateLimit_Action_HeaderValueMatch) Reset()         { *m = RateLimit_Action_HeaderValueMatch{} }
func (m *RateLimit_Action_HeaderValueMatch) String() string { return proto.CompactTextString(m) }
func (*RateLimit_Action_HeaderValueMatch) ProtoMessage()    {}
func (*RateLimit_Action_HeaderValueMatch) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{13, 0, 5}
}

func (m *RateLimit_Action_HeaderValueMatch) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimit_Action_HeaderValueMatch.Unmarshal(m, b)
}
func (m *RateLimit_Action_HeaderValueMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimit_Action_HeaderValueMatch.Marshal(b, m, deterministic)
}
func (m *RateLimit_Action_HeaderValueMatch) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimit_Action_HeaderValueMatch.Merge(m, src)
}
func (m *RateLimit_Action_HeaderValueMatch) XXX_Size() int {
	return xxx_messageInfo_RateLimit_Action_HeaderValueMatch.Size(m)
}
func (m *RateLimit_Action_HeaderValueMatch) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimit_Action_HeaderValueMatch.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimit_Action_HeaderValueMatch proto.InternalMessageInfo

func (m *RateLimit_Action_HeaderValueMatch) GetDescriptorValue() string {
	if m != nil {
		return m.DescriptorValue
	}
	return ""
}

func (m *RateLimit_Action_HeaderValueMatch) GetExpectMatch() *wrappers.BoolValue {
	if m != nil {
		return m.ExpectMatch
	}
	return nil
}

func (m *RateLimit_Action_HeaderValueMatch) GetHeaders() []*HeaderMatcher {
	if m != nil {
		return m.Headers
	}
	return nil
}

// .. attention::
//
//   Internally, Envoy always uses the HTTP/2 *:authority* header to represent the HTTP/1 *Host*
//   header. Thus, if attempting to match on *Host*, match on *:authority* instead.
//
// .. attention::
//
//   To route on HTTP method, use the special HTTP/2 *:method* header. This works for both
//   HTTP/1 and HTTP/2 as Envoy normalizes headers. E.g.,
//
//   .. code-block:: json
//
//     {
//       "name": ":method",
//       "exact_match": "POST"
//     }
//
// .. attention::
//   In the absence of any header match specifier, match will default to :ref:`present_match
//   <envoy_api_field_route.HeaderMatcher.present_match>`. i.e, a request that has the :ref:`name
//   <envoy_api_field_route.HeaderMatcher.name>` header will match, regardless of the header's
//   value.
//
//  [#next-major-version: HeaderMatcher should be refactored to use StringMatcher.]
// [#next-free-field: 12]
type HeaderMatcher struct {
	// Specifies the name of the header in the request.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Specifies how the header match will be performed to route the request.
	//
	// Types that are valid to be assigned to HeaderMatchSpecifier:
	//	*HeaderMatcher_ExactMatch
	//	*HeaderMatcher_RegexMatch
	//	*HeaderMatcher_SafeRegexMatch
	//	*HeaderMatcher_RangeMatch
	//	*HeaderMatcher_PresentMatch
	//	*HeaderMatcher_PrefixMatch
	//	*HeaderMatcher_SuffixMatch
	HeaderMatchSpecifier isHeaderMatcher_HeaderMatchSpecifier `protobuf_oneof:"header_match_specifier"`
	// If specified, the match result will be inverted before checking. Defaults to false.
	//
	// Examples:
	//
	// * The regex ``\d{3}`` does not match the value *1234*, so it will match when inverted.
	// * The range [-10,0) will match the value -1, so it will not match when inverted.
	InvertMatch          bool     `protobuf:"varint,8,opt,name=invert_match,json=invertMatch,proto3" json:"invert_match,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *HeaderMatcher) Reset()         { *m = HeaderMatcher{} }
func (m *HeaderMatcher) String() string { return proto.CompactTextString(m) }
func (*HeaderMatcher) ProtoMessage()    {}
func (*HeaderMatcher) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{14}
}

func (m *HeaderMatcher) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HeaderMatcher.Unmarshal(m, b)
}
func (m *HeaderMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HeaderMatcher.Marshal(b, m, deterministic)
}
func (m *HeaderMatcher) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HeaderMatcher.Merge(m, src)
}
func (m *HeaderMatcher) XXX_Size() int {
	return xxx_messageInfo_HeaderMatcher.Size(m)
}
func (m *HeaderMatcher) XXX_DiscardUnknown() {
	xxx_messageInfo_HeaderMatcher.DiscardUnknown(m)
}

var xxx_messageInfo_HeaderMatcher proto.InternalMessageInfo

func (m *HeaderMatcher) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isHeaderMatcher_HeaderMatchSpecifier interface {
	isHeaderMatcher_HeaderMatchSpecifier()
}

type HeaderMatcher_ExactMatch struct {
	ExactMatch string `protobuf:"bytes,4,opt,name=exact_match,json=exactMatch,proto3,oneof"`
}

type HeaderMatcher_RegexMatch struct {
	RegexMatch string `protobuf:"bytes,5,opt,name=regex_match,json=regexMatch,proto3,oneof"`
}

type HeaderMatcher_SafeRegexMatch struct {
	SafeRegexMatch *matcher.RegexMatcher `protobuf:"bytes,11,opt,name=safe_regex_match,json=safeRegexMatch,proto3,oneof"`
}

type HeaderMatcher_RangeMatch struct {
	RangeMatch *_type.Int64Range `protobuf:"bytes,6,opt,name=range_match,json=rangeMatch,proto3,oneof"`
}

type HeaderMatcher_PresentMatch struct {
	PresentMatch bool `protobuf:"varint,7,opt,name=present_match,json=presentMatch,proto3,oneof"`
}

type HeaderMatcher_PrefixMatch struct {
	PrefixMatch string `protobuf:"bytes,9,opt,name=prefix_match,json=prefixMatch,proto3,oneof"`
}

type HeaderMatcher_SuffixMatch struct {
	SuffixMatch string `protobuf:"bytes,10,opt,name=suffix_match,json=suffixMatch,proto3,oneof"`
}

func (*HeaderMatcher_ExactMatch) isHeaderMatcher_HeaderMatchSpecifier() {}

func (*HeaderMatcher_RegexMatch) isHeaderMatcher_HeaderMatchSpecifier() {}

func (*HeaderMatcher_SafeRegexMatch) isHeaderMatcher_HeaderMatchSpecifier() {}

func (*HeaderMatcher_RangeMatch) isHeaderMatcher_HeaderMatchSpecifier() {}

func (*HeaderMatcher_PresentMatch) isHeaderMatcher_HeaderMatchSpecifier() {}

func (*HeaderMatcher_PrefixMatch) isHeaderMatcher_HeaderMatchSpecifier() {}

func (*HeaderMatcher_SuffixMatch) isHeaderMatcher_HeaderMatchSpecifier() {}

func (m *HeaderMatcher) GetHeaderMatchSpecifier() isHeaderMatcher_HeaderMatchSpecifier {
	if m != nil {
		return m.HeaderMatchSpecifier
	}
	return nil
}

func (m *HeaderMatcher) GetExactMatch() string {
	if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_ExactMatch); ok {
		return x.ExactMatch
	}
	return ""
}

// Deprecated: Do not use.
func (m *HeaderMatcher) GetRegexMatch() string {
	if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_RegexMatch); ok {
		return x.RegexMatch
	}
	return ""
}

func (m *HeaderMatcher) GetSafeRegexMatch() *matcher.RegexMatcher {
	if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_SafeRegexMatch); ok {
		return x.SafeRegexMatch
	}
	return nil
}

func (m *HeaderMatcher) GetRangeMatch() *_type.Int64Range {
	if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_RangeMatch); ok {
		return x.RangeMatch
	}
	return nil
}

func (m *HeaderMatcher) GetPresentMatch() bool {
	if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_PresentMatch); ok {
		return x.PresentMatch
	}
	return false
}

func (m *HeaderMatcher) GetPrefixMatch() string {
	if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_PrefixMatch); ok {
		return x.PrefixMatch
	}
	return ""
}

func (m *HeaderMatcher) GetSuffixMatch() string {
	if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_SuffixMatch); ok {
		return x.SuffixMatch
	}
	return ""
}

func (m *HeaderMatcher) GetInvertMatch() bool {
	if m != nil {
		return m.InvertMatch
	}
	return false
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*HeaderMatcher) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*HeaderMatcher_ExactMatch)(nil),
		(*HeaderMatcher_RegexMatch)(nil),
		(*HeaderMatcher_SafeRegexMatch)(nil),
		(*HeaderMatcher_RangeMatch)(nil),
		(*HeaderMatcher_PresentMatch)(nil),
		(*HeaderMatcher_PrefixMatch)(nil),
		(*HeaderMatcher_SuffixMatch)(nil),
	}
}

// Query parameter matching treats the query string of a request's :path header
// as an ampersand-separated list of keys and/or key=value elements.
// [#next-free-field: 7]
type QueryParameterMatcher struct {
	// Specifies the name of a key that must be present in the requested
	// *path*'s query string.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Specifies the value of the key. If the value is absent, a request
	// that contains the key in its query string will match, whether the
	// key appears with a value (e.g., "?debug=true") or not (e.g., "?debug")
	//
	// ..attention::
	//   This field is deprecated. Use an `exact` match inside the `string_match` field.
	Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` // Deprecated: Do not use.
	// Specifies whether the query parameter value is a regular expression.
	// Defaults to false. The entire query parameter value (i.e., the part to
	// the right of the equals sign in "key=value") must match the regex.
	// E.g., the regex ``\d+$`` will match *123* but not *a123* or *123a*.
	//
	// ..attention::
	//   This field is deprecated. Use a `safe_regex` match inside the `string_match` field.
	Regex *wrappers.BoolValue `protobuf:"bytes,4,opt,name=regex,proto3" json:"regex,omitempty"` // Deprecated: Do not use.
	// Types that are valid to be assigned to QueryParameterMatchSpecifier:
	//	*QueryParameterMatcher_StringMatch
	//	*QueryParameterMatcher_PresentMatch
	QueryParameterMatchSpecifier isQueryParameterMatcher_QueryParameterMatchSpecifier `protobuf_oneof:"query_parameter_match_specifier"`
	XXX_NoUnkeyedLiteral         struct{}                                             `json:"-"`
	XXX_unrecognized             []byte                                               `json:"-"`
	XXX_sizecache                int32                                                `json:"-"`
}

func (m *QueryParameterMatcher) Reset()         { *m = QueryParameterMatcher{} }
func (m *QueryParameterMatcher) String() string { return proto.CompactTextString(m) }
func (*QueryParameterMatcher) ProtoMessage()    {}
func (*QueryParameterMatcher) Descriptor() ([]byte, []int) {
	return fileDescriptor_7dc2895fb75d9d41, []int{15}
}

func (m *QueryParameterMatcher) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_QueryParameterMatcher.Unmarshal(m, b)
}
func (m *QueryParameterMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_QueryParameterMatcher.Marshal(b, m, deterministic)
}
func (m *QueryParameterMatcher) XXX_Merge(src proto.Message) {
	xxx_messageInfo_QueryParameterMatcher.Merge(m, src)
}
func (m *QueryParameterMatcher) XXX_Size() int {
	return xxx_messageInfo_QueryParameterMatcher.Size(m)
}
func (m *QueryParameterMatcher) XXX_DiscardUnknown() {
	xxx_messageInfo_QueryParameterMatcher.DiscardUnknown(m)
}

var xxx_messageInfo_QueryParameterMatcher proto.InternalMessageInfo

func (m *QueryParameterMatcher) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

// Deprecated: Do not use.
func (m *QueryParameterMatcher) GetValue() string {
	if m != nil {
		return m.Value
	}
	return ""
}

// Deprecated: Do not use.
func (m *QueryParameterMatcher) GetRegex() *wrappers.BoolValue {
	if m != nil {
		return m.Regex
	}
	return nil
}

type isQueryParameterMatcher_QueryParameterMatchSpecifier interface {
	isQueryParameterMatcher_QueryParameterMatchSpecifier()
}

type QueryParameterMatcher_StringMatch struct {
	StringMatch *matcher.StringMatcher `protobuf:"bytes,5,opt,name=string_match,json=stringMatch,proto3,oneof"`
}

type QueryParameterMatcher_PresentMatch struct {
	PresentMatch bool `protobuf:"varint,6,opt,name=present_match,json=presentMatch,proto3,oneof"`
}

func (*QueryParameterMatcher_StringMatch) isQueryParameterMatcher_QueryParameterMatchSpecifier() {}

func (*QueryParameterMatcher_PresentMatch) isQueryParameterMatcher_QueryParameterMatchSpecifier() {}

func (m *QueryParameterMatcher) GetQueryParameterMatchSpecifier() isQueryParameterMatcher_QueryParameterMatchSpecifier {
	if m != nil {
		return m.QueryParameterMatchSpecifier
	}
	return nil
}

func (m *QueryParameterMatcher) GetStringMatch() *matcher.StringMatcher {
	if x, ok := m.GetQueryParameterMatchSpecifier().(*QueryParameterMatcher_StringMatch); ok {
		return x.StringMatch
	}
	return nil
}

func (m *QueryParameterMatcher) GetPresentMatch() bool {
	if x, ok := m.GetQueryParameterMatchSpecifier().(*QueryParameterMatcher_PresentMatch); ok {
		return x.PresentMatch
	}
	return false
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*QueryParameterMatcher) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*QueryParameterMatcher_StringMatch)(nil),
		(*QueryParameterMatcher_PresentMatch)(nil),
	}
}

func init() {
	proto.RegisterEnum("envoy.api.v2.route.VirtualHost_TlsRequirementType", VirtualHost_TlsRequirementType_name, VirtualHost_TlsRequirementType_value)
	proto.RegisterEnum("envoy.api.v2.route.RouteAction_ClusterNotFoundResponseCode", RouteAction_ClusterNotFoundResponseCode_name, RouteAction_ClusterNotFoundResponseCode_value)
	proto.RegisterEnum("envoy.api.v2.route.RouteAction_InternalRedirectAction", RouteAction_InternalRedirectAction_name, RouteAction_InternalRedirectAction_value)
	proto.RegisterEnum("envoy.api.v2.route.RedirectAction_RedirectResponseCode", RedirectAction_RedirectResponseCode_name, RedirectAction_RedirectResponseCode_value)
	proto.RegisterType((*VirtualHost)(nil), "envoy.api.v2.route.VirtualHost")
	proto.RegisterMapType((map[string]*_struct.Struct)(nil), "envoy.api.v2.route.VirtualHost.PerFilterConfigEntry")
	proto.RegisterMapType((map[string]*any.Any)(nil), "envoy.api.v2.route.VirtualHost.TypedPerFilterConfigEntry")
	proto.RegisterType((*Route)(nil), "envoy.api.v2.route.Route")
	proto.RegisterMapType((map[string]*_struct.Struct)(nil), "envoy.api.v2.route.Route.PerFilterConfigEntry")
	proto.RegisterMapType((map[string]*any.Any)(nil), "envoy.api.v2.route.Route.TypedPerFilterConfigEntry")
	proto.RegisterType((*WeightedCluster)(nil), "envoy.api.v2.route.WeightedCluster")
	proto.RegisterType((*WeightedCluster_ClusterWeight)(nil), "envoy.api.v2.route.WeightedCluster.ClusterWeight")
	proto.RegisterMapType((map[string]*_struct.Struct)(nil), "envoy.api.v2.route.WeightedCluster.ClusterWeight.PerFilterConfigEntry")
	proto.RegisterMapType((map[string]*any.Any)(nil), "envoy.api.v2.route.WeightedCluster.ClusterWeight.TypedPerFilterConfigEntry")
	proto.RegisterType((*RouteMatch)(nil), "envoy.api.v2.route.RouteMatch")
	proto.RegisterType((*RouteMatch_GrpcRouteMatchOptions)(nil), "envoy.api.v2.route.RouteMatch.GrpcRouteMatchOptions")
	proto.RegisterType((*RouteMatch_TlsContextMatchOptions)(nil), "envoy.api.v2.route.RouteMatch.TlsContextMatchOptions")
	proto.RegisterType((*CorsPolicy)(nil), "envoy.api.v2.route.CorsPolicy")
	proto.RegisterType((*RouteAction)(nil), "envoy.api.v2.route.RouteAction")
	proto.RegisterType((*RouteAction_RequestMirrorPolicy)(nil), "envoy.api.v2.route.RouteAction.RequestMirrorPolicy")
	proto.RegisterType((*RouteAction_HashPolicy)(nil), "envoy.api.v2.route.RouteAction.HashPolicy")
	proto.RegisterType((*RouteAction_HashPolicy_Header)(nil), "envoy.api.v2.route.RouteAction.HashPolicy.Header")
	proto.RegisterType((*RouteAction_HashPolicy_Cookie)(nil), "envoy.api.v2.route.RouteAction.HashPolicy.Cookie")
	proto.RegisterType((*RouteAction_HashPolicy_ConnectionProperties)(nil), "envoy.api.v2.route.RouteAction.HashPolicy.ConnectionProperties")
	proto.RegisterType((*RouteAction_UpgradeConfig)(nil), "envoy.api.v2.route.RouteAction.UpgradeConfig")
	proto.RegisterType((*RetryPolicy)(nil), "envoy.api.v2.route.RetryPolicy")
	proto.RegisterType((*RetryPolicy_RetryPriority)(nil), "envoy.api.v2.route.RetryPolicy.RetryPriority")
	proto.RegisterType((*RetryPolicy_RetryHostPredicate)(nil), "envoy.api.v2.route.RetryPolicy.RetryHostPredicate")
	proto.RegisterType((*RetryPolicy_RetryBackOff)(nil), "envoy.api.v2.route.RetryPolicy.RetryBackOff")
	proto.RegisterType((*HedgePolicy)(nil), "envoy.api.v2.route.HedgePolicy")
	proto.RegisterType((*RedirectAction)(nil), "envoy.api.v2.route.RedirectAction")
	proto.RegisterType((*DirectResponseAction)(nil), "envoy.api.v2.route.DirectResponseAction")
	proto.RegisterType((*Decorator)(nil), "envoy.api.v2.route.Decorator")
	proto.RegisterType((*Tracing)(nil), "envoy.api.v2.route.Tracing")
	proto.RegisterType((*VirtualCluster)(nil), "envoy.api.v2.route.VirtualCluster")
	proto.RegisterType((*RateLimit)(nil), "envoy.api.v2.route.RateLimit")
	proto.RegisterType((*RateLimit_Action)(nil), "envoy.api.v2.route.RateLimit.Action")
	proto.RegisterType((*RateLimit_Action_SourceCluster)(nil), "envoy.api.v2.route.RateLimit.Action.SourceCluster")
	proto.RegisterType((*RateLimit_Action_DestinationCluster)(nil), "envoy.api.v2.route.RateLimit.Action.DestinationCluster")
	proto.RegisterType((*RateLimit_Action_RequestHeaders)(nil), "envoy.api.v2.route.RateLimit.Action.RequestHeaders")
	proto.RegisterType((*RateLimit_Action_RemoteAddress)(nil), "envoy.api.v2.route.RateLimit.Action.RemoteAddress")
	proto.RegisterType((*RateLimit_Action_GenericKey)(nil), "envoy.api.v2.route.RateLimit.Action.GenericKey")
	proto.RegisterType((*RateLimit_Action_HeaderValueMatch)(nil), "envoy.api.v2.route.RateLimit.Action.HeaderValueMatch")
	proto.RegisterType((*HeaderMatcher)(nil), "envoy.api.v2.route.HeaderMatcher")
	proto.RegisterType((*QueryParameterMatcher)(nil), "envoy.api.v2.route.QueryParameterMatcher")
}

func init() { proto.RegisterFile("envoy/api/v2/route/route.proto", fileDescriptor_7dc2895fb75d9d41) }

var fileDescriptor_7dc2895fb75d9d41 = []byte{
	// 4044 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5b, 0xcb, 0x73, 0x1b, 0xc9,
	0x79, 0xe7, 0x10, 0x20, 0x1e, 0x1f, 0x1e, 0x1c, 0xb6, 0x28, 0x72, 0x08, 0xad, 0x24, 0x0a, 0x5a,
	0x95, 0x69, 0x79, 0x17, 0xf4, 0x52, 0xda, 0x5d, 0x6b, 0x65, 0x3b, 0x26, 0x28, 0x68, 0x41, 0x8a,
	0xaf, 0x34, 0x29, 0x39, 0x1b, 0xc7, 0x9e, 0x8c, 0x30, 0x4d, 0x60, 0x56, 0xc0, 0xcc, 0x6c, 0x4f,
	0x83, 0x22, 0x6f, 0x2e, 0x5f, 0x52, 0x95, 0x5c, 0x52, 0x7b, 0xc9, 0x29, 0x39, 0x24, 0x39, 0x39,
	0x95, 0x4b, 0xaa, 0x92, 0xaa, 0xfc, 0x0f, 0x49, 0x2e, 0xb9, 0xe4, 0x9c, 0x5c, 0x72, 0x4e, 0x2e,
	0x29, 0x9d, 0x52, 0xfd, 0x98, 0x07, 0xc0, 0x21, 0x01, 0x6e, 0xaa, 0xb6, 0xe2, 0xf2, 0x85, 0xc2,
	0x74, 0xff, 0xbe, 0x5f, 0xf7, 0x74, 0x7f, 0xfd, 0xbd, 0x7a, 0x04, 0x77, 0x88, 0x7b, 0xea, 0x9d,
	0xaf, 0x5b, 0xbe, 0xb3, 0x7e, 0xba, 0xb1, 0x4e, 0xbd, 0x21, 0x23, 0xf2, 0x6f, 0xc3, 0xa7, 0x1e,
	0xf3, 0x10, 0x12, 0xfd, 0x0d, 0xcb, 0x77, 0x1a, 0xa7, 0x1b, 0x0d, 0xd1, 0x53, 0x7b, 0x6f, 0x44,
	0xa6, 0xe3, 0x51, 0xb2, 0xfe, 0xda, 0x0a, 0x94, 0x44, 0x4d, 0x31, 0xb2, 0x73, 0x9f, 0xac, 0x0f,
	0x2c, 0xd6, 0xe9, 0x11, 0xba, 0x4e, 0x49, 0x97, 0x9c, 0xa9, 0xfe, 0xbb, 0x29, 0xfd, 0x01, 0xa3,
	0x8e, 0xdb, 0x55, 0x00, 0x23, 0x01, 0xf0, 0x09, 0xed, 0x10, 0x97, 0xa9, 0x9e, 0xa5, 0x44, 0x0f,
	0xb5, 0xdc, 0x6e, 0x38, 0xe4, 0x4a, 0xd7, 0xf3, 0xba, 0x7d, 0xb2, 0x2e, 0x9e, 0x5e, 0x0f, 0x4f,
	0xd6, 0x2d, 0xf7, 0x3c, 0x9c, 0xcd, 0x78, 0x97, 0x3d, 0xa4, 0x16, 0x73, 0x3c, 0x57, 0xf5, 0xbf,
	0x37, 0xde, 0x1f, 0x30, 0x3a, 0xec, 0xb0, 0xcb, 0xa4, 0xdf, 0x52, 0xcb, 0xf7, 0x09, 0x0d, 0x54,
	0xff, 0xf2, 0xa9, 0xd5, 0x77, 0x6c, 0x8b, 0x91, 0xf5, 0xf0, 0x87, 0xec, 0xa8, 0xff, 0x7b, 0x09,
	0x4a, 0xaf, 0x1c, 0xca, 0x86, 0x56, 0xbf, 0xed, 0x05, 0x0c, 0xdd, 0x82, 0xac, 0x6b, 0x0d, 0x88,
	0xa1, 0xad, 0x6a, 0x6b, 0xc5, 0x66, 0xfe, 0x5d, 0x33, 0x4b, 0x67, 0x57, 0x35, 0x2c, 0x1a, 0x51,
	0x1d, 0xf2, 0xb6, 0x37, 0xb0, 0x1c, 0x37, 0x30, 0x66, 0x57, 0x33, 0x6b, 0xc5, 0x66, 0xe1, 0x5d,
	0x73, 0xee, 0x6b, 0x6d, 0xb6, 0xa0, 0xe1, 0xb0, 0x03, 0x7d, 0x04, 0x39, 0xb1, 0xf8, 0x81, 0x91,
	0x59, 0xcd, 0xac, 0x95, 0x36, 0x56, 0x1a, 0x17, 0x37, 0xa6, 0x81, 0xf9, 0x5f, 0xac, 0x80, 0xe8,
	0x08, 0x4a, 0x94, 0x7c, 0x35, 0x74, 0x28, 0x31, 0x59, 0x3f, 0x30, 0xb2, 0xab, 0xda, 0x5a, 0x75,
	0x63, 0x23, 0x4d, 0x2e, 0x31, 0xd3, 0xc6, 0x71, 0x3f, 0xc0, 0x52, 0x6a, 0x40, 0x5c, 0x76, 0x7c,
	0xee, 0x13, 0x0c, 0x8a, 0xe6, 0xb8, 0x1f, 0xa0, 0x3d, 0xd0, 0x4f, 0x25, 0xda, 0xec, 0xf4, 0x87,
	0x01, 0x23, 0x34, 0x30, 0xe6, 0xc4, 0x8c, 0xea, 0x57, 0x30, 0x6f, 0x49, 0x28, 0x9e, 0x3f, 0x1d,
	0x79, 0x0e, 0xd0, 0x8f, 0xa1, 0x44, 0x2d, 0x46, 0xcc, 0xbe, 0x33, 0x70, 0x58, 0x60, 0xe4, 0x04,
	0xd3, 0xed, 0xd4, 0x77, 0xb3, 0x18, 0xd9, 0xe5, 0x28, 0x0c, 0x34, 0xfc, 0x19, 0x20, 0x1b, 0x96,
	0xf8, 0xe4, 0x48, 0xc0, 0xcc, 0x1e, 0xb1, 0x6c, 0x42, 0x03, 0x93, 0x79, 0xa6, 0x65, 0xdb, 0x46,
	0x5e, 0x50, 0xbd, 0x3f, 0x4a, 0xc5, 0x75, 0xb5, 0xd1, 0x16, 0xc0, 0x57, 0x56, 0x7f, 0x48, 0x0e,
	0x7c, 0xae, 0x0a, 0xcd, 0xe2, 0xbb, 0x66, 0xee, 0x6b, 0x2d, 0xa3, 0xff, 0x67, 0x1e, 0xdf, 0x50,
	0x74, 0x12, 0x14, 0x1c, 0x7b, 0x9b, 0xb6, 0x8d, 0x9e, 0xc0, 0x4a, 0xca, 0x28, 0x94, 0x0c, 0xbc,
	0x53, 0x62, 0x54, 0xf8, 0x96, 0xe1, 0xa5, 0x71, 0x39, 0x2c, 0x7a, 0xd1, 0x09, 0x2c, 0x53, 0x12,
	0xf8, 0x9e, 0x1b, 0x90, 0xf1, 0x19, 0xc2, 0x37, 0x9b, 0xe1, 0x62, 0xc8, 0x37, 0x32, 0xc5, 0xa7,
	0x50, 0x4b, 0x1b, 0x47, 0xcd, 0xb1, 0x24, 0xe6, 0xb8, 0x7c, 0x41, 0x52, 0x4d, 0x72, 0x03, 0xb2,
	0x1d, 0x8f, 0x06, 0x46, 0x61, 0x55, 0x5b, 0x2b, 0x6d, 0xdc, 0x49, 0x5b, 0xfe, 0x2d, 0x8f, 0x06,
	0x87, 0x5e, 0xdf, 0xe9, 0x9c, 0x63, 0x81, 0x45, 0x36, 0x2c, 0xf8, 0x84, 0x9a, 0x27, 0x4e, 0x9f,
	0x11, 0x6a, 0x76, 0x3c, 0xf7, 0xc4, 0xe9, 0x1a, 0x65, 0xf1, 0x4a, 0x8f, 0x27, 0xe9, 0xd8, 0x21,
	0xa1, 0xcf, 0x85, 0xdc, 0x96, 0x10, 0x6b, 0xb9, 0x8c, 0x9e, 0x37, 0x67, 0x0d, 0x0d, 0xcf, 0xfb,
	0xa3, 0x3d, 0xc8, 0x87, 0x65, 0x7e, 0xda, 0x6d, 0xf3, 0xe2, 0x58, 0xf3, 0x62, 0xac, 0x27, 0x13,
	0xf5, 0x99, 0x8b, 0xa7, 0x0d, 0x88, 0x17, 0x59, 0x4a, 0x17, 0xda, 0x84, 0xdb, 0x8e, 0xdb, 0xe9,
	0x0f, 0x6d, 0x62, 0x86, 0x7b, 0x6e, 0x31, 0x46, 0x06, 0x3e, 0x33, 0x3b, 0xde, 0xd0, 0x65, 0x46,
	0x75, 0x55, 0x5b, 0x2b, 0xe0, 0x9a, 0x02, 0x61, 0x89, 0xd9, 0x94, 0x90, 0x2d, 0x8e, 0x40, 0x4d,
	0x28, 0x53, 0xc2, 0xe8, 0xb9, 0xe9, 0x8b, 0x05, 0x33, 0x74, 0xb1, 0xac, 0x77, 0x53, 0xb5, 0x9a,
	0xe3, 0xd4, 0xba, 0x96, 0x68, 0xfc, 0xc0, 0x39, 0x7a, 0xc4, 0xee, 0x92, 0x90, 0x63, 0xe1, 0x72,
	0x8e, 0x36, 0xc7, 0x85, 0x1c, 0xbd, 0xf8, 0x01, 0xfd, 0x21, 0xdc, 0xe1, 0xcb, 0x16, 0xbe, 0xc6,
	0xeb, 0xe1, 0xc9, 0x09, 0xa1, 0xf2, 0xa8, 0x99, 0xaf, 0xcf, 0xb9, 0x2d, 0x41, 0x82, 0xf5, 0xbd,
	0x86, 0x34, 0x73, 0x8d, 0xd0, 0xcc, 0x35, 0x5e, 0x6e, 0xbb, 0xec, 0xd1, 0x86, 0x50, 0x40, 0x5c,
	0xf3, 0x09, 0x55, 0x6f, 0xd9, 0x14, 0x0c, 0xe2, 0xe8, 0x35, 0xb9, 0x7c, 0xed, 0x67, 0xb0, 0x98,
	0xb6, 0xb4, 0x48, 0x87, 0xcc, 0x1b, 0x72, 0x2e, 0xad, 0x1d, 0xe6, 0x3f, 0xd1, 0x87, 0x30, 0x77,
	0xca, 0xe9, 0x8c, 0x59, 0x31, 0xe4, 0xf2, 0x85, 0x21, 0x8f, 0x84, 0xdd, 0xc5, 0x12, 0xf5, 0xd9,
	0xec, 0x0f, 0xb4, 0xda, 0xcf, 0x61, 0xe5, 0xd2, 0xcd, 0x4b, 0x19, 0xe1, 0xe1, 0xe8, 0x08, 0x8b,
	0x17, 0x46, 0xd8, 0x74, 0xcf, 0x13, 0xf4, 0xf5, 0xcf, 0x00, 0x5d, 0xb4, 0x75, 0xa8, 0x00, 0xd9,
	0xfd, 0x83, 0xfd, 0x96, 0x3e, 0x83, 0x16, 0xa0, 0xd2, 0xfa, 0xbd, 0xe3, 0x16, 0xde, 0xdf, 0xdc,
	0x35, 0x0f, 0xf6, 0x77, 0xbf, 0xd0, 0x35, 0x94, 0x87, 0xcc, 0xe6, 0xee, 0xae, 0x3e, 0xbb, 0x93,
	0x2d, 0x14, 0x75, 0xa8, 0xff, 0x39, 0xc0, 0x9c, 0x30, 0xb9, 0x08, 0x29, 0xf3, 0x5e, 0x15, 0xd3,
	0x91, 0x56, 0xfd, 0xc7, 0x30, 0x27, 0xdc, 0x9b, 0x98, 0xe3, 0x25, 0xa7, 0x4a, 0x48, 0xef, 0x71,
	0x94, 0xb0, 0xf9, 0x7f, 0xac, 0xcd, 0xea, 0x1a, 0x96, 0x62, 0xe8, 0x53, 0x98, 0x13, 0x20, 0xf5,
	0x3e, 0x77, 0x2f, 0x95, 0xdf, 0xec, 0x70, 0x13, 0xd1, 0x9e, 0xc1, 0x12, 0x8f, 0x7e, 0x02, 0x05,
	0x4a, 0x6c, 0x87, 0x92, 0x0e, 0x33, 0x32, 0x42, 0xb6, 0x9e, 0xae, 0x7a, 0x12, 0x13, 0x89, 0x47,
	0x52, 0xe8, 0x08, 0xe6, 0xe5, 0x2f, 0x33, 0xb4, 0x18, 0x46, 0x5e, 0x10, 0xad, 0xa5, 0x11, 0x3d,
	0x13, 0x50, 0xac, 0x90, 0x11, 0x5d, 0xd5, 0x1e, 0x69, 0x47, 0x9f, 0x42, 0x61, 0x40, 0x98, 0x65,
	0x5b, 0xcc, 0x12, 0xbe, 0xa8, 0xb4, 0x71, 0x2b, 0xc5, 0xf4, 0xed, 0x29, 0x08, 0x8e, 0xc0, 0xe8,
	0x29, 0x14, 0x6d, 0xd2, 0xf1, 0xa8, 0xc5, 0x3c, 0x6a, 0xcc, 0x09, 0xc9, 0x54, 0x0f, 0xf1, 0x2c,
	0x04, 0xe1, 0x18, 0x8f, 0x7e, 0x91, 0x66, 0xa6, 0x0a, 0xc2, 0x74, 0x34, 0x2e, 0x5d, 0xd1, 0x6b,
	0x18, 0xa8, 0x2f, 0x2f, 0x37, 0x50, 0x15, 0x31, 0xca, 0xa3, 0xcb, 0x47, 0xb9, 0xae, 0x69, 0xba,
	0xdc, 0xd9, 0x15, 0xbf, 0x2d, 0x67, 0x57, 0xfe, 0xcd, 0x77, 0x76, 0x1f, 0x43, 0x9e, 0x51, 0xab,
	0xe3, 0xb8, 0xdc, 0x85, 0xa4, 0xa8, 0xa1, 0xdc, 0xa1, 0x63, 0x09, 0xc1, 0x21, 0x76, 0x0a, 0x63,
	0xaa, 0xff, 0xf6, 0x1a, 0xd3, 0x66, 0x05, 0x72, 0x96, 0x38, 0xf8, 0x28, 0xf3, 0x3f, 0x4d, 0x6d,
	0x27, 0x5b, 0xc8, 0xe9, 0xf9, 0xfa, 0x9f, 0x16, 0x61, 0xfe, 0xa7, 0xc4, 0xe9, 0xf6, 0x18, 0xb1,
	0x55, 0xc4, 0x87, 0x7e, 0x0a, 0x85, 0x28, 0x6e, 0xd4, 0x84, 0x4e, 0x7c, 0x94, 0xb6, 0xfc, 0x63,
	0x62, 0x0d, 0xf5, 0xaf, 0x6c, 0x4e, 0xc4, 0xc7, 0x11, 0x19, 0x6a, 0x43, 0x99, 0x79, 0xcc, 0xea,
	0x9b, 0x6f, 0x05, 0x46, 0x59, 0xbe, 0x2b, 0x77, 0x43, 0xc4, 0xe1, 0x0f, 0x67, 0xd7, 0x34, 0x5c,
	0x12, 0xa2, 0x92, 0x1d, 0x7d, 0x00, 0x88, 0x0e, 0x5d, 0xe6, 0x0c, 0x88, 0xf9, 0x86, 0x9c, 0x9b,
	0x3e, 0x25, 0x27, 0xce, 0x99, 0x58, 0x88, 0x22, 0xd6, 0x55, 0xcf, 0x0b, 0x72, 0x7e, 0x28, 0xda,
	0x6b, 0x7f, 0x93, 0x87, 0xca, 0xc8, 0xec, 0xae, 0x8e, 0xf5, 0x1f, 0x43, 0x4e, 0x4d, 0x70, 0x76,
	0x0a, 0x75, 0x51, 0x58, 0xd4, 0x84, 0x6a, 0x68, 0x0e, 0x4d, 0xe9, 0x54, 0x32, 0x93, 0x2d, 0x68,
	0x25, 0x14, 0x11, 0x0e, 0xe6, 0x0a, 0xeb, 0x91, 0xfd, 0xb6, 0xac, 0x47, 0xf1, 0x9b, 0x5a, 0x8f,
	0xb9, 0x6f, 0xcf, 0x7a, 0xe4, 0xae, 0xb6, 0x1e, 0xa7, 0x97, 0xfb, 0x93, 0xe7, 0xd7, 0x56, 0xe4,
	0x6b, 0xf8, 0x99, 0x5f, 0x69, 0x97, 0x3b, 0x1a, 0x69, 0x5b, 0x5f, 0x5c, 0x7f, 0xf8, 0x6b, 0x3a,
	0xa0, 0xdf, 0x64, 0x0b, 0xb5, 0x93, 0x2d, 0xe4, 0xf5, 0x42, 0xfd, 0x8f, 0x72, 0x00, 0x71, 0xd0,
	0x85, 0x0c, 0xc8, 0xa9, 0xe3, 0x2d, 0x98, 0xdb, 0x33, 0x58, 0x3d, 0xa3, 0x45, 0xc8, 0xfa, 0x16,
	0xeb, 0xc9, 0x63, 0xdf, 0x9e, 0xc1, 0xe2, 0x09, 0xd5, 0x61, 0x4e, 0x94, 0x32, 0xc4, 0xf1, 0x2b,
	0x36, 0xe1, 0x5d, 0x73, 0x8e, 0x66, 0xd6, 0x7e, 0x59, 0x30, 0x34, 0x11, 0x7e, 0xf1, 0x2e, 0xf4,
	0x02, 0x20, 0xb0, 0x4e, 0x78, 0xf6, 0xc0, 0x81, 0x20, 0x66, 0xb7, 0xaa, 0xf6, 0x86, 0xaf, 0x6a,
	0x43, 0x15, 0x3d, 0x1a, 0x98, 0x03, 0xf6, 0xe4, 0x43, 0x1c, 0xfe, 0xb5, 0x67, 0x70, 0x91, 0xcb,
	0x8b, 0x5e, 0xb4, 0x09, 0xd5, 0x8e, 0x15, 0x10, 0x33, 0x20, 0x6e, 0xe0, 0x30, 0xe7, 0x94, 0xa8,
	0xd0, 0xa9, 0x76, 0xe1, 0x75, 0x9b, 0x9e, 0xd7, 0x97, 0x46, 0xa3, 0xc2, 0x25, 0x8e, 0x42, 0x01,
	0xf4, 0x0a, 0x42, 0xa3, 0x65, 0x9e, 0x50, 0x69, 0xa4, 0x8d, 0xa2, 0x20, 0xf9, 0x5e, 0xca, 0x79,
	0xc2, 0x12, 0xfa, 0x5c, 0x21, 0xad, 0xfe, 0xa1, 0xac, 0xc0, 0xe0, 0x79, 0x3a, 0xda, 0x83, 0x9e,
	0x42, 0x5e, 0x9d, 0x1e, 0x95, 0xb6, 0xdf, 0x4b, 0x4f, 0x4e, 0x38, 0x44, 0xbd, 0x25, 0x0e, 0x25,
	0xd0, 0x31, 0xe8, 0x5f, 0x0d, 0x09, 0x4f, 0x91, 0x2c, 0x6a, 0x0d, 0x88, 0x70, 0x07, 0x32, 0x63,
	0xff, 0x6e, 0x1a, 0xcb, 0xef, 0x72, 0xec, 0x61, 0x08, 0x0d, 0xd9, 0xe6, 0xbf, 0x1a, 0x69, 0xe6,
	0x3e, 0x20, 0xdb, 0xa5, 0x7e, 0x47, 0xe5, 0xb1, 0x8f, 0xaf, 0x8e, 0xb8, 0x1b, 0x9f, 0x53, 0xbf,
	0x13, 0x3f, 0x4a, 0xeb, 0x11, 0x60, 0xc1, 0x80, 0x5e, 0x41, 0x89, 0xf5, 0x03, 0x7e, 0xc0, 0x18,
	0x39, 0x63, 0x46, 0x49, 0x10, 0x7e, 0x3c, 0x81, 0xf0, 0xb8, 0x1f, 0x6c, 0x49, 0x81, 0x11, 0x46,
	0x60, 0x51, 0x7b, 0x6d, 0x19, 0x6e, 0xa6, 0x0e, 0x5b, 0xc3, 0xb0, 0x94, 0x2e, 0x8e, 0x7e, 0x00,
	0x45, 0x9f, 0x92, 0x80, 0xb8, 0x8c, 0xd8, 0x2a, 0x97, 0xb8, 0x6a, 0xf7, 0x63, 0x70, 0xf3, 0x26,
	0x54, 0xb9, 0xd6, 0x9a, 0x81, 0x4f, 0x3a, 0xce, 0x89, 0x43, 0x68, 0xe8, 0x9c, 0xe7, 0xf4, 0x5c,
	0xfd, 0x2f, 0xe6, 0x00, 0xe2, 0xa4, 0x1e, 0x3d, 0x80, 0xb2, 0xd5, 0xef, 0x7b, 0x6f, 0x4d, 0x8f,
	0x3a, 0x5d, 0xc7, 0x15, 0xbe, 0xb9, 0x28, 0x4c, 0x51, 0x49, 0xb4, 0x1f, 0x88, 0x66, 0xf4, 0x23,
	0x40, 0x49, 0x98, 0x52, 0xf2, 0x82, 0x00, 0xcf, 0xbf, 0x6b, 0xc2, 0xd7, 0x5a, 0xbe, 0x1e, 0x1e,
	0x09, 0xac, 0x27, 0x24, 0xa5, 0x3a, 0xff, 0x01, 0xac, 0x8c, 0x88, 0xcb, 0xba, 0x9f, 0x72, 0x69,
	0xa5, 0x11, 0x2d, 0x1a, 0x39, 0x2a, 0x47, 0x02, 0x17, 0xee, 0xfb, 0x52, 0x82, 0x37, 0xd1, 0x83,
	0xee, 0x43, 0x45, 0xb2, 0x0f, 0x08, 0xeb, 0x79, 0x76, 0xa0, 0x7c, 0xb6, 0x7c, 0xb1, 0x3d, 0xd9,
	0x16, 0x83, 0x42, 0xe5, 0xcd, 0x24, 0x40, 0xca, 0xda, 0xa3, 0x07, 0x50, 0x25, 0x67, 0xbe, 0x17,
	0x3b, 0x08, 0x71, 0xec, 0x8a, 0xb8, 0x22, 0x5b, 0x43, 0xd8, 0x32, 0xe4, 0x07, 0xd6, 0x99, 0x69,
	0x75, 0x89, 0xc8, 0x4b, 0x8a, 0x38, 0x37, 0xb0, 0xce, 0x36, 0xbb, 0x04, 0x7d, 0x0e, 0x0b, 0x72,
	0x90, 0x0e, 0x25, 0x36, 0x71, 0x99, 0x63, 0xf5, 0xf9, 0x29, 0x99, 0xb4, 0x77, 0x72, 0xc1, 0xb6,
	0x62, 0x19, 0xf4, 0x19, 0xe4, 0x89, 0x6b, 0xbd, 0xee, 0x13, 0x5b, 0x65, 0x60, 0x57, 0x88, 0xf3,
	0xdd, 0x6a, 0xcf, 0xe0, 0x50, 0x00, 0x1d, 0x43, 0x55, 0xf9, 0x89, 0x90, 0xe2, 0xfa, 0xc7, 0xbe,
	0x3d, 0x83, 0x2b, 0x92, 0xa4, 0xa5, 0x58, 0x31, 0x54, 0x83, 0x9e, 0x65, 0x7b, 0x6f, 0x23, 0x56,
	0xb8, 0xbe, 0x31, 0xa9, 0x48, 0x0a, 0xc5, 0xd9, 0xbc, 0x01, 0x0b, 0x8a, 0x2c, 0xd6, 0xd5, 0xfa,
	0x3f, 0xde, 0x84, 0x52, 0x22, 0xbf, 0x45, 0xf7, 0x21, 0xaf, 0x82, 0xbd, 0xb1, 0xc8, 0x8a, 0xbf,
	0xb3, 0xea, 0x41, 0xdf, 0x87, 0xaa, 0xfa, 0xa9, 0x76, 0x4e, 0xea, 0x40, 0x12, 0x5b, 0x51, 0x00,
	0xb9, 0x89, 0x08, 0xc3, 0xc2, 0x5b, 0xe5, 0x24, 0xe3, 0x8a, 0xa6, 0x8c, 0xae, 0xee, 0x4f, 0xe1,
	0x51, 0xdb, 0x33, 0x58, 0x7f, 0x3b, 0xda, 0x14, 0xa0, 0x3f, 0xd1, 0xe0, 0x6e, 0x38, 0x0d, 0xd7,
	0x63, 0xe6, 0x89, 0x37, 0x74, 0xed, 0x28, 0x97, 0x36, 0x3b, 0x9e, 0x4d, 0x8c, 0x45, 0x51, 0x8e,
	0x7d, 0x3a, 0x21, 0xab, 0x0f, 0x1d, 0xf6, 0xbe, 0xc7, 0x9e, 0x73, 0x92, 0x30, 0x9b, 0xde, 0xf2,
	0x6c, 0x22, 0x7c, 0xc6, 0xaf, 0x44, 0xc9, 0xe0, 0x56, 0xe7, 0x72, 0x58, 0x4a, 0xf0, 0x98, 0xbd,
	0x76, 0xf0, 0xf8, 0x00, 0xaa, 0xd2, 0x31, 0x9a, 0x94, 0xbc, 0xa5, 0x0e, 0x0b, 0x15, 0xbe, 0x22,
	0x5b, 0xb1, 0x6c, 0x44, 0xf7, 0xa1, 0xdc, 0xf3, 0x02, 0x16, 0x81, 0x72, 0xc2, 0x7b, 0x6a, 0xb8,
	0xc4, 0x5b, 0x43, 0x50, 0x1b, 0x16, 0xac, 0x21, 0xf3, 0xcc, 0x11, 0xe4, 0x44, 0xed, 0x6e, 0x6b,
	0x78, 0x9e, 0x8b, 0xb5, 0x13, 0x4c, 0x4f, 0xc0, 0xb8, 0xc0, 0x14, 0xee, 0xfb, 0x6d, 0x35, 0xf4,
	0xcd, 0x31, 0x21, 0xb5, 0xed, 0x8f, 0x20, 0xcf, 0x55, 0xd3, 0x1b, 0x32, 0xe5, 0x2d, 0x56, 0x2e,
	0x0c, 0xfd, 0x4c, 0xdd, 0x14, 0xe0, 0x10, 0x89, 0x7e, 0x08, 0x65, 0xc7, 0xee, 0x13, 0x33, 0x94,
	0x34, 0x26, 0x49, 0x96, 0x38, 0xfc, 0x58, 0x49, 0x8f, 0x97, 0x05, 0x8b, 0xdf, 0xa0, 0x2c, 0xd8,
	0x85, 0x9b, 0x61, 0x78, 0x3d, 0x70, 0x28, 0xf5, 0x68, 0x48, 0x26, 0x0f, 0xe1, 0xa3, 0x49, 0xea,
	0xa4, 0x72, 0xcf, 0x3d, 0x21, 0xab, 0x06, 0x08, 0xe3, 0xf8, 0x64, 0x23, 0x6a, 0x43, 0xc1, 0xa7,
	0x8e, 0x47, 0x1d, 0x76, 0x2e, 0xbc, 0x5f, 0x75, 0xbc, 0x88, 0x24, 0x0f, 0xb8, 0x37, 0x64, 0x8e,
	0xdb, 0x3d, 0x54, 0xc8, 0x84, 0x46, 0x46, 0xd2, 0xe3, 0x25, 0xfe, 0xca, 0x75, 0x4b, 0xfc, 0x07,
	0xb0, 0x14, 0x16, 0x64, 0x4f, 0x7b, 0x66, 0x92, 0xaa, 0x3a, 0xd1, 0xa0, 0xde, 0x50, 0x92, 0xaf,
	0x7a, 0x38, 0x26, 0x7c, 0x01, 0xa5, 0x9e, 0x15, 0xf4, 0xc2, 0x95, 0x93, 0x75, 0xe4, 0x87, 0x93,
	0x56, 0xae, 0x6d, 0x05, 0x3d, 0xb5, 0x60, 0xd0, 0x8b, 0x7e, 0x47, 0xa5, 0xf3, 0x85, 0x6b, 0x94,
	0xce, 0xb7, 0x40, 0xe7, 0x6e, 0x83, 0x07, 0x1a, 0x91, 0x2a, 0x2d, 0x4f, 0x52, 0xa5, 0xea, 0xc0,
	0x3a, 0xe3, 0xa1, 0x43, 0xa8, 0x4d, 0xdb, 0x70, 0x23, 0x49, 0x60, 0x7a, 0x27, 0x27, 0x01, 0x61,
	0xc6, 0x7b, 0x93, 0x78, 0x16, 0xba, 0x31, 0xc9, 0x81, 0x90, 0x41, 0xaf, 0x60, 0x7e, 0xe8, 0x77,
	0xa9, 0x65, 0x13, 0x95, 0x51, 0x04, 0xc6, 0x8a, 0x58, 0x94, 0x0f, 0x27, 0x2d, 0xca, 0x4b, 0x29,
	0x26, 0x23, 0x75, 0x5c, 0x1d, 0x26, 0x1f, 0x03, 0xe4, 0x83, 0xe1, 0xb8, 0x8c, 0x50, 0xd7, 0xea,
	0x9b, 0x61, 0x6d, 0xd1, 0x54, 0x11, 0x68, 0x4d, 0xe8, 0xd4, 0x27, 0x93, 0x06, 0xd8, 0x56, 0xf2,
	0xa3, 0xc5, 0x4a, 0xbc, 0xe4, 0xa4, 0xb6, 0x5f, 0xa8, 0x9a, 0xdf, 0xba, 0x7e, 0xd5, 0xbc, 0xf6,
	0xf7, 0x1a, 0xdc, 0x48, 0x39, 0x26, 0xe8, 0xde, 0x65, 0xfe, 0x27, 0xf6, 0x3e, 0xf7, 0xa1, 0x94,
	0xa8, 0x1c, 0x28, 0xd7, 0xc3, 0x63, 0x28, 0x88, 0xcb, 0x06, 0xa9, 0xf1, 0x78, 0xe6, 0xff, 0x1e,
	0x8f, 0xd7, 0xfe, 0x3a, 0x0b, 0x10, 0x2b, 0x29, 0x7a, 0x01, 0x39, 0x65, 0x09, 0x65, 0xcc, 0xf8,
	0xd1, 0xf4, 0x0a, 0xae, 0x82, 0x76, 0x9e, 0x0d, 0x49, 0x0a, 0x4e, 0xd6, 0xf1, 0xbc, 0x37, 0x4e,
	0x98, 0x6d, 0x5d, 0x87, 0x6c, 0x4b, 0x08, 0x72, 0x32, 0x49, 0x81, 0x4e, 0xe1, 0x66, 0xc7, 0x73,
	0x5d, 0x22, 0x90, 0xa6, 0x4f, 0x3d, 0x9f, 0x50, 0xe6, 0x90, 0xd0, 0xeb, 0xfe, 0xce, 0xb5, 0xb8,
	0x43, 0x9e, 0xc3, 0x88, 0xa6, 0x3d, 0x83, 0x17, 0x3b, 0x29, 0xed, 0xa8, 0x06, 0x05, 0x46, 0xe8,
	0xc0, 0x71, 0xad, 0xbe, 0xf0, 0x80, 0x05, 0x1c, 0x3d, 0xd7, 0x36, 0x20, 0xa7, 0x1c, 0xc3, 0x1a,
	0x94, 0xe4, 0x4b, 0x9b, 0x69, 0x45, 0x1c, 0x90, 0x7d, 0xfb, 0xd6, 0x80, 0xd4, 0x4e, 0x20, 0x27,
	0xdf, 0xed, 0xea, 0x8a, 0xcf, 0xf7, 0x20, 0xc3, 0x58, 0x5f, 0x2d, 0xdc, 0x15, 0x07, 0x93, 0xa3,
	0x10, 0x52, 0x69, 0xa7, 0x0c, 0x4a, 0xc5, 0xef, 0xda, 0x23, 0x58, 0x4c, 0x7b, 0x4f, 0x74, 0x0b,
	0x8a, 0x81, 0x37, 0xa4, 0x1d, 0x62, 0x3a, 0xbe, 0x18, 0xba, 0x80, 0x0b, 0xb2, 0x61, 0xdb, 0x6f,
	0x2e, 0x83, 0x2e, 0xcf, 0xc0, 0x58, 0xf4, 0x5f, 0xeb, 0x41, 0x65, 0xe4, 0xd4, 0xa2, 0x7b, 0x50,
	0x0e, 0x4f, 0x3f, 0x8f, 0xb9, 0x55, 0x8e, 0x5d, 0x52, 0x6d, 0xe2, 0x52, 0xe4, 0x71, 0x1c, 0x85,
	0xce, 0x4e, 0xb4, 0xb9, 0x21, 0xb4, 0xde, 0x82, 0x5b, 0x57, 0x44, 0x2f, 0x68, 0x19, 0x6e, 0x1c,
	0xb5, 0xf0, 0xab, 0xed, 0xad, 0x96, 0xf9, 0x72, 0x7f, 0xf3, 0xd5, 0xe6, 0xf6, 0xee, 0x66, 0x73,
	0xb7, 0xa5, 0xcf, 0xa0, 0x0a, 0x14, 0xf7, 0x0f, 0x8e, 0xcd, 0xe7, 0x07, 0x2f, 0xf7, 0x9f, 0xe9,
	0x5a, 0xfd, 0xf7, 0x61, 0x29, 0xdd, 0x0a, 0xa0, 0x3a, 0xdc, 0x39, 0xdc, 0x3c, 0x3a, 0x32, 0x8f,
	0xdb, 0xf8, 0xe0, 0xe5, 0xe7, 0x6d, 0x73, 0x7b, 0x5f, 0x5d, 0xd7, 0xe0, 0xd6, 0xb3, 0x6d, 0xdc,
	0xda, 0x3a, 0xd6, 0x67, 0xd0, 0x7b, 0x60, 0xb4, 0x37, 0xf7, 0x9f, 0xed, 0xb6, 0x52, 0x7a, 0xb5,
	0xa6, 0x01, 0x0b, 0x61, 0x9c, 0x36, 0xba, 0x4c, 0x4d, 0x03, 0x96, 0x46, 0xa2, 0x8a, 0xa8, 0x7b,
	0x27, 0x5b, 0x28, 0xeb, 0x95, 0x9d, 0x6c, 0x01, 0xe9, 0x37, 0x76, 0xb2, 0x85, 0x1b, 0xfa, 0xe2,
	0x4e, 0xb6, 0xa0, 0xeb, 0x0b, 0x3b, 0xd9, 0xc2, 0x92, 0xbe, 0xbc, 0x93, 0x2d, 0xdc, 0xd4, 0x97,
	0xea, 0xff, 0x5d, 0x84, 0x52, 0xc2, 0x87, 0xa3, 0x15, 0x28, 0x48, 0xd7, 0xef, 0xb9, 0x6a, 0x7d,
	0xf3, 0xe2, 0xf9, 0x80, 0x67, 0x54, 0x25, 0x77, 0x38, 0x30, 0xf9, 0x23, 0x3f, 0x03, 0xd3, 0x54,
	0x05, 0xc1, 0x1d, 0x0e, 0xb0, 0xc4, 0xa3, 0x4d, 0x98, 0xf7, 0x09, 0x35, 0x39, 0x77, 0xe8, 0x4a,
	0x32, 0x93, 0x34, 0xad, 0xe2, 0x13, 0x7a, 0x4c, 0xcf, 0x43, 0x4f, 0x72, 0x0c, 0x55, 0x15, 0x97,
	0x84, 0x0e, 0x5f, 0xc6, 0x87, 0x1f, 0x4e, 0x88, 0x4c, 0xd4, 0x6f, 0x25, 0x84, 0x2b, 0x34, 0xf9,
	0x88, 0x6c, 0x58, 0x94, 0xac, 0x62, 0x19, 0x7d, 0x6e, 0xff, 0x3b, 0x96, 0x88, 0x1b, 0xb9, 0x67,
	0xd9, 0x98, 0x8a, 0x9b, 0x87, 0x6d, 0x87, 0xa1, 0x24, 0x46, 0xf4, 0x42, 0x1b, 0x6a, 0xc3, 0x3d,
	0xc1, 0x1f, 0x90, 0xbe, 0xb2, 0x27, 0x72, 0x50, 0x91, 0x96, 0xc9, 0x3b, 0x59, 0x99, 0x78, 0x65,
	0xf0, 0x6d, 0x0e, 0x3c, 0x0a, 0x71, 0x82, 0x7f, 0xcf, 0x3a, 0x53, 0x17, 0xb7, 0x01, 0x7a, 0x0c,
	0x4b, 0x62, 0x0f, 0xb8, 0xee, 0x9a, 0x01, 0xb3, 0xd8, 0x30, 0x10, 0x81, 0xba, 0xac, 0x4b, 0x54,
	0xf0, 0x62, 0xd4, 0x7b, 0x24, 0x3a, 0xb9, 0x0e, 0x07, 0x3c, 0x1b, 0x92, 0x03, 0xbe, 0xb6, 0x3a,
	0x6f, 0xb8, 0x0f, 0x56, 0xd1, 0xe4, 0x07, 0x53, 0xbd, 0x5f, 0xd3, 0xea, 0xbc, 0x39, 0x38, 0x39,
	0xc1, 0x32, 0x2e, 0x54, 0x4f, 0x68, 0x1f, 0x16, 0xe2, 0x99, 0x84, 0xf9, 0x67, 0x71, 0xda, 0x12,
	0x8b, 0x1e, 0xc9, 0x86, 0x59, 0xea, 0xcf, 0x61, 0x25, 0xe6, 0x1b, 0x2b, 0xce, 0xaa, 0xda, 0xe1,
	0x14, 0xbc, 0xcb, 0x11, 0x07, 0x1e, 0x29, 0xdf, 0xd6, 0xfe, 0x56, 0x83, 0xca, 0x88, 0x26, 0x5c,
	0x6d, 0x0e, 0x3f, 0xe6, 0xae, 0x44, 0x94, 0x2d, 0xaf, 0x2e, 0x0d, 0xaa, 0x6c, 0x56, 0x81, 0xd1,
	0x13, 0x28, 0xcb, 0xf2, 0xa7, 0x12, 0xce, 0x5c, 0x5e, 0xf5, 0x6b, 0xcf, 0xe0, 0x92, 0xc0, 0x4a,
	0x03, 0xd7, 0xac, 0x40, 0x49, 0x0a, 0x09, 0xfb, 0x56, 0xfb, 0x3b, 0x0d, 0xd0, 0x45, 0xed, 0xfa,
	0x7f, 0x3e, 0xe9, 0xbf, 0xd4, 0xa0, 0x9c, 0x54, 0x19, 0xb4, 0x03, 0x95, 0xd7, 0x56, 0x40, 0x4c,
	0x11, 0x08, 0x9d, 0x5a, 0x7d, 0xe5, 0xe5, 0x2f, 0x3f, 0xf5, 0x4d, 0x78, 0xd7, 0xcc, 0xff, 0x5a,
	0xcb, 0x16, 0xb4, 0x87, 0x33, 0xb8, 0xcc, 0x65, 0xb7, 0x95, 0x28, 0x7a, 0x0e, 0x65, 0x7e, 0x5e,
	0x22, 0xaa, 0x49, 0xae, 0x4a, 0x84, 0xf9, 0xbf, 0xd6, 0x66, 0x1f, 0xce, 0xe0, 0xd2, 0xc0, 0x3a,
	0x0b, 0x79, 0xea, 0xff, 0xa5, 0x41, 0x29, 0x11, 0x56, 0xa1, 0x43, 0xd0, 0x1d, 0xd7, 0x61, 0x8e,
	0x08, 0xff, 0x84, 0xce, 0x04, 0x6a, 0x9a, 0x53, 0x5e, 0xcb, 0xcc, 0x2b, 0x71, 0xa5, 0x71, 0x01,
	0xfa, 0x02, 0x56, 0x2c, 0xdb, 0x76, 0x64, 0x24, 0x14, 0xe9, 0x72, 0xa7, 0x67, 0xb9, 0x9d, 0x30,
	0x34, 0xb9, 0x9d, 0xac, 0x1f, 0x5d, 0x0c, 0x9b, 0x96, 0x63, 0x79, 0xc5, 0xba, 0x25, 0xa4, 0xd1,
	0x27, 0x60, 0xc8, 0xd0, 0x91, 0xc7, 0x24, 0x29, 0x16, 0xb5, 0x80, 0x17, 0x45, 0xff, 0x81, 0x7b,
	0x98, 0xb4, 0x9e, 0xf5, 0x7f, 0xc8, 0x42, 0x75, 0xcc, 0x2f, 0x7d, 0x07, 0xaa, 0x3d, 0xc6, 0xfc,
	0x20, 0x0a, 0x7a, 0x65, 0xb8, 0xd1, 0x9e, 0xc1, 0x15, 0xd1, 0x1e, 0xc2, 0xd1, 0x77, 0x61, 0x3e,
	0xe8, 0xf4, 0xc8, 0x80, 0xc4, 0xc8, 0xbc, 0xaa, 0x37, 0x57, 0x65, 0x47, 0x04, 0xbd, 0x0f, 0x15,
	0xe5, 0x8f, 0x14, 0x50, 0xba, 0x91, 0xb2, 0x4c, 0xac, 0x63, 0x90, 0xef, 0xd1, 0x04, 0x88, 0x1b,
	0xa3, 0x0a, 0x2e, 0xf3, 0xc6, 0x08, 0xf4, 0x00, 0x2a, 0xa2, 0x2a, 0x18, 0x81, 0x66, 0x55, 0xa6,
	0x5c, 0xe6, 0xcd, 0x11, 0xec, 0x3b, 0xe9, 0x19, 0x7f, 0x5b, 0x1b, 0xcf, 0xf9, 0x4f, 0xa0, 0x32,
	0x5a, 0xd9, 0xc8, 0x88, 0xd0, 0xfe, 0xd3, 0xc9, 0xdf, 0x1c, 0x44, 0x8f, 0x97, 0x54, 0x35, 0xca,
	0x34, 0x19, 0x2f, 0xdc, 0x85, 0x52, 0xc0, 0xa8, 0xe3, 0x9b, 0xa2, 0xea, 0x2b, 0x8c, 0x7a, 0x01,
	0x83, 0x68, 0x12, 0xe5, 0xe1, 0xfa, 0x5b, 0x58, 0x4c, 0x23, 0x44, 0x37, 0x61, 0x61, 0xef, 0xe0,
	0x55, 0xeb, 0x99, 0x79, 0xd8, 0xc2, 0x7b, 0x9b, 0xfb, 0xad, 0xfd, 0xe3, 0xdd, 0x2f, 0xf4, 0x19,
	0x54, 0x84, 0x39, 0x15, 0x62, 0xf0, 0x88, 0xe3, 0xa8, 0xd5, 0x32, 0x0f, 0x8e, 0xdb, 0x2d, 0xac,
	0xcf, 0xa2, 0x25, 0x40, 0xc7, 0xad, 0xbd, 0xc3, 0x03, 0xbc, 0x89, 0xbf, 0x88, 0xa3, 0x85, 0x0c,
	0x6f, 0x8f, 0x28, 0xe2, 0xf6, 0x6c, 0xb3, 0x06, 0x46, 0xb4, 0x8d, 0x63, 0xd1, 0x02, 0x8f, 0x23,
	0xd4, 0x6a, 0x8f, 0xf5, 0xd4, 0x07, 0xb0, 0x98, 0xf6, 0xe5, 0x04, 0xaa, 0x43, 0x4e, 0xba, 0x1f,
	0xb1, 0xc5, 0x15, 0x71, 0x6e, 0x1f, 0xce, 0xe9, 0xff, 0x96, 0x5d, 0xb3, 0xb1, 0xea, 0x41, 0x1f,
	0x41, 0xf6, 0xb5, 0x67, 0x9f, 0x8f, 0xa9, 0x7c, 0x32, 0x6f, 0x78, 0x66, 0x31, 0xeb, 0x48, 0x04,
	0x83, 0x58, 0x40, 0xeb, 0x1b, 0x50, 0x8c, 0x3e, 0x90, 0x40, 0x0f, 0xa0, 0xc8, 0xc3, 0x48, 0x71,
	0x9a, 0xc7, 0x2d, 0x5e, 0xdc, 0x53, 0xff, 0x0f, 0x0d, 0xf2, 0xea, 0x22, 0x1c, 0x3d, 0x87, 0xf9,
	0x4e, 0xdf, 0x21, 0x2e, 0x33, 0x03, 0x6b, 0xe0, 0xf7, 0x1d, 0xb7, 0xab, 0xce, 0xf2, 0x84, 0x03,
	0x57, 0x95, 0x52, 0x47, 0x4a, 0x88, 0xf3, 0x50, 0xcb, 0xb5, 0xbd, 0x41, 0xcc, 0x33, 0xd5, 0xc1,
	0xad, 0x4a, 0xa9, 0x88, 0xa7, 0x0d, 0xba, 0x77, 0x4a, 0xa8, 0xd5, 0xef, 0xc7, 0x44, 0x99, 0x69,
	0x88, 0xe6, 0x95, 0x58, 0xc8, 0x54, 0xff, 0x17, 0x0d, 0xaa, 0xa3, 0xdf, 0x29, 0xa2, 0xf7, 0x21,
	0xef, 0xf3, 0xf0, 0x81, 0x86, 0xab, 0x93, 0xb8, 0xe9, 0xc1, 0x61, 0x57, 0xf2, 0x06, 0x24, 0x7b,
	0xed, 0x1b, 0x90, 0xd0, 0xdf, 0xcc, 0xa6, 0xf9, 0x9b, 0x1f, 0x42, 0x4e, 0xd6, 0xb0, 0xd5, 0x61,
	0x5a, 0x4d, 0xcb, 0x0c, 0x55, 0x8e, 0x2a, 0x70, 0x22, 0xcb, 0x54, 0x32, 0xf5, 0x7f, 0x2e, 0x42,
	0x31, 0xaa, 0x77, 0xa0, 0xa7, 0x30, 0x17, 0x30, 0xab, 0x4b, 0xae, 0x61, 0x7a, 0x0d, 0xc0, 0x52,
	0x86, 0x1f, 0x3a, 0xdb, 0x09, 0x44, 0xe4, 0x10, 0x65, 0xb4, 0x18, 0x54, 0x13, 0xcf, 0x66, 0xdb,
	0x90, 0x97, 0x0b, 0x1c, 0x7e, 0x98, 0xfa, 0xfe, 0x95, 0x95, 0x9d, 0x86, 0x54, 0xf2, 0xe4, 0x17,
	0xae, 0x4a, 0xbc, 0xf6, 0x67, 0x05, 0xc8, 0xa9, 0x23, 0xf0, 0x33, 0xa8, 0xaa, 0xcc, 0x26, 0x99,
	0x71, 0x5f, 0x16, 0x35, 0x8e, 0x71, 0x37, 0xa4, 0xda, 0xc7, 0xf5, 0xd9, 0x4a, 0x90, 0x6c, 0x40,
	0x5f, 0xc2, 0x0d, 0x9b, 0x04, 0xcc, 0x71, 0x85, 0x8e, 0x47, 0x23, 0x48, 0x25, 0xfc, 0x74, 0xaa,
	0x11, 0x9e, 0xc5, 0xf2, 0xf1, 0x30, 0xc8, 0xbe, 0xd0, 0x8a, 0x7e, 0x01, 0xf3, 0xe3, 0x01, 0x57,
	0xe6, 0x8a, 0x42, 0xdd, 0xf8, 0x38, 0xa3, 0x91, 0x16, 0xf7, 0x0a, 0xa3, 0x57, 0xe7, 0x7c, 0xa1,
	0x28, 0x19, 0x78, 0x8c, 0x98, 0x96, 0x6d, 0x53, 0x12, 0x04, 0x2a, 0x74, 0xdf, 0x98, 0x92, 0x9e,
	0x8b, 0x6e, 0x4a, 0x49, 0xbe, 0x50, 0x34, 0xd9, 0x80, 0x30, 0x94, 0xba, 0xc4, 0x25, 0xd4, 0xe9,
	0x88, 0xbd, 0x97, 0x5f, 0x5e, 0xad, 0x4f, 0xc5, 0xfc, 0xb9, 0x94, 0x7b, 0x41, 0x78, 0x5c, 0x03,
	0xdd, 0xe8, 0x09, 0x11, 0x40, 0x2a, 0xbb, 0x16, 0x37, 0xb3, 0xaa, 0x1e, 0x9d, 0xbb, 0xe2, 0x7a,
	0x6d, 0x9c, 0x3a, 0x71, 0xe1, 0x2f, 0xce, 0x54, 0x7b, 0x06, 0xeb, 0xbd, 0xb1, 0xb6, 0xda, 0x3c,
	0x54, 0x46, 0xb4, 0xa0, 0xb6, 0x08, 0xe8, 0xe2, 0xa6, 0xd5, 0xbe, 0xe4, 0xae, 0x7b, 0x64, 0x41,
	0xa7, 0xce, 0xfe, 0x51, 0x03, 0xaa, 0x36, 0x09, 0x3a, 0xd4, 0xf1, 0x99, 0x47, 0x13, 0xe5, 0x9e,
	0x08, 0x5c, 0x89, 0xbb, 0x5f, 0x90, 0x73, 0x3e, 0xa5, 0x91, 0xf5, 0xae, 0xfd, 0x04, 0x20, 0x5e,
	0x26, 0xb4, 0x01, 0x7a, 0x82, 0x4e, 0xde, 0x6c, 0x8f, 0x8d, 0x3e, 0x1f, 0x03, 0xc4, 0xab, 0xd6,
	0xfe, 0x49, 0x03, 0x7d, 0x7c, 0x39, 0xbe, 0x09, 0x11, 0xfa, 0x11, 0x94, 0xc9, 0x99, 0x4f, 0x3a,
	0x4c, 0xed, 0xc7, 0xe4, 0x24, 0xbf, 0x24, 0xf1, 0x72, 0xc8, 0x56, 0x6c, 0x07, 0x33, 0x53, 0xda,
	0xc1, 0xa4, 0x01, 0x50, 0xb2, 0xcd, 0x65, 0xd0, 0xa5, 0x2d, 0x18, 0xcb, 0xc5, 0xeb, 0xff, 0x9a,
	0x81, 0xca, 0x88, 0xf4, 0xd5, 0xc1, 0xfa, 0x3d, 0x28, 0x91, 0x33, 0x2b, 0x7a, 0x99, 0xac, 0x8a,
	0xa8, 0x40, 0x34, 0xca, 0x19, 0x7f, 0x08, 0x25, 0x71, 0x73, 0xa9, 0x20, 0x73, 0x29, 0xb7, 0xf9,
	0x40, 0xa3, 0xeb, 0x79, 0xb4, 0x0b, 0x7a, 0x7c, 0xa5, 0x1f, 0xdd, 0x56, 0x4e, 0x75, 0xb1, 0x2f,
	0x42, 0xb9, 0xf0, 0x3a, 0x5f, 0xb2, 0x3d, 0x81, 0x92, 0xf8, 0xcf, 0x0b, 0x23, 0xca, 0xbf, 0x94,
	0x24, 0xda, 0x76, 0xd9, 0x27, 0x8f, 0x31, 0xc7, 0x88, 0x89, 0xf0, 0x1f, 0xe1, 0x35, 0x4c, 0x45,
	0x5d, 0xef, 0x2a, 0xe1, 0xbc, 0x0a, 0x2c, 0xcb, 0xaa, 0x59, 0xc2, 0x3e, 0x80, 0xb2, 0x8a, 0xdd,
	0x24, 0xaa, 0x38, 0x7e, 0x07, 0x56, 0x92, 0xdd, 0x11, 0x3a, 0x18, 0x9e, 0xc4, 0x68, 0xb8, 0x80,
	0x96, 0xdd, 0x12, 0x7d, 0x0f, 0xca, 0x8e, 0x7b, 0x4a, 0x68, 0x38, 0x83, 0x82, 0x88, 0xc3, 0x4a,
	0xb2, 0x4d, 0x7e, 0xca, 0x6a, 0xc0, 0x92, 0x3a, 0x44, 0x02, 0x32, 0x52, 0x3b, 0x99, 0xd5, 0x33,
	0x3b, 0xd9, 0x42, 0x46, 0xcf, 0xd6, 0xff, 0x6a, 0x16, 0x6e, 0xa6, 0xde, 0xeb, 0xa3, 0x3b, 0x23,
	0xbb, 0xcb, 0xe3, 0x1f, 0xca, 0x77, 0xe8, 0x97, 0x05, 0xb5, 0xc1, 0x46, 0xf8, 0xe9, 0x47, 0x26,
	0x2a, 0xb0, 0xca, 0x06, 0xf4, 0x38, 0xfc, 0x3e, 0x23, 0x3b, 0xcd, 0x65, 0x69, 0xf8, 0xc5, 0xc6,
	0x21, 0x94, 0x47, 0x2e, 0xa2, 0xa5, 0xa5, 0x9b, 0x7c, 0x11, 0x3d, 0xf2, 0xd1, 0x46, 0x29, 0x48,
	0xdc, 0x44, 0x5f, 0xd8, 0xa7, 0x5c, 0xda, 0x3e, 0x35, 0xef, 0xc1, 0xdd, 0xb1, 0xaf, 0x20, 0xc6,
	0x57, 0xac, 0xf9, 0x7d, 0x58, 0x75, 0x3c, 0x39, 0x13, 0x9f, 0x7a, 0x67, 0xe7, 0x29, 0x27, 0xab,
	0x29, 0xbf, 0x68, 0x39, 0xe4, 0xef, 0x78, 0xa8, 0xbd, 0xce, 0x89, 0x97, 0x7d, 0xf4, 0xbf, 0x01,
	0x00, 0x00, 0xff, 0xff, 0x26, 0x3f, 0xe1, 0xe6, 0xda, 0x33, 0x00, 0x00,
}
 07070100000077000081A4000003E800000064000000015E17A24700005486000000000000000000000000000000000000003100000000cilium-proxy-20200109/go/envoy/api/v2/srds.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/api/v2/srds.proto

package envoy_api_v2

import (
	context "context"
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Specifies a routing scope, which associates a
// :ref:`Key<envoy_api_msg_ScopedRouteConfiguration.Key>` to a
// :ref:`envoy_api_msg_RouteConfiguration` (identified by its resource name).
//
// The HTTP connection manager builds up a table consisting of these Key to
// RouteConfiguration mappings, and looks up the RouteConfiguration to use per
// request according to the algorithm specified in the
// :ref:`scope_key_builder<envoy_api_field_config.filter.network.http_connection_manager.v2.ScopedRoutes.scope_key_builder>`
// assigned to the HttpConnectionManager.
//
// For example, with the following configurations (in YAML):
//
// HttpConnectionManager config:
//
// .. code::
//
//   ...
//   scoped_routes:
//     name: foo-scoped-routes
//     scope_key_builder:
//       fragments:
//         - header_value_extractor:
//             name: X-Route-Selector
//             element_separator: ,
//             element:
//               separator: =
//               key: vip
//
// ScopedRouteConfiguration resources (specified statically via
// :ref:`scoped_route_configurations_list<envoy_api_field_config.filter.network.http_connection_manager.v2.ScopedRoutes.scoped_route_configurations_list>`
// or obtained dynamically via SRDS):
//
// .. code::
//
//  (1)
//   name: route-scope1
//   route_configuration_name: route-config1
//   key:
//      fragments:
//        - string_key: 172.10.10.20
//
//  (2)
//   name: route-scope2
//   route_configuration_name: route-config2
//   key:
//     fragments:
//       - string_key: 172.20.20.30
//
// A request from a client such as:
//
// .. code::
//
//     GET / HTTP/1.1
//     Host: foo.com
//     X-Route-Selector: vip=172.10.10.20
//
// would result in the routing table defined by the `route-config1`
// RouteConfiguration being assigned to the HTTP request/stream.
//
type ScopedRouteConfiguration struct {
	// The name assigned to the routing scope.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The resource name to use for a :ref:`envoy_api_msg_DiscoveryRequest` to an
	// RDS server to fetch the :ref:`envoy_api_msg_RouteConfiguration` associated
	// with this scope.
	RouteConfigurationName string `protobuf:"bytes,2,opt,name=route_configuration_name,json=routeConfigurationName,proto3" json:"route_configuration_name,omitempty"`
	// The key to match against.
	Key                  *ScopedRouteConfiguration_Key `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
	XXX_unrecognized     []byte                        `json:"-"`
	XXX_sizecache        int32                         `json:"-"`
}

func (m *ScopedRouteConfiguration) Reset()         { *m = ScopedRouteConfiguration{} }
func (m *ScopedRouteConfiguration) String() string { return proto.CompactTextString(m) }
func (*ScopedRouteConfiguration) ProtoMessage()    {}
func (*ScopedRouteConfiguration) Descriptor() ([]byte, []int) {
	return fileDescriptor_92f394721ede65e9, []int{0}
}

func (m *ScopedRouteConfiguration) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ScopedRouteConfiguration.Unmarshal(m, b)
}
func (m *ScopedRouteConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ScopedRouteConfiguration.Marshal(b, m, deterministic)
}
func (m *ScopedRouteConfiguration) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ScopedRouteConfiguration.Merge(m, src)
}
func (m *ScopedRouteConfiguration) XXX_Size() int {
	return xxx_messageInfo_ScopedRouteConfiguration.Size(m)
}
func (m *ScopedRouteConfiguration) XXX_DiscardUnknown() {
	xxx_messageInfo_ScopedRouteConfiguration.DiscardUnknown(m)
}

var xxx_messageInfo_ScopedRouteConfiguration proto.InternalMessageInfo

func (m *ScopedRouteConfiguration) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *ScopedRouteConfiguration) GetRouteConfigurationName() string {
	if m != nil {
		return m.RouteConfigurationName
	}
	return ""
}

func (m *ScopedRouteConfiguration) GetKey() *ScopedRouteConfiguration_Key {
	if m != nil {
		return m.Key
	}
	return nil
}

// Specifies a key which is matched against the output of the
// :ref:`scope_key_builder<envoy_api_field_config.filter.network.http_connection_manager.v2.ScopedRoutes.scope_key_builder>`
// specified in the HttpConnectionManager. The matching is done per HTTP
// request and is dependent on the order of the fragments contained in the
// Key.
type ScopedRouteConfiguration_Key struct {
	// The ordered set of fragments to match against. The order must match the
	// fragments in the corresponding
	// :ref:`scope_key_builder<envoy_api_field_config.filter.network.http_connection_manager.v2.ScopedRoutes.scope_key_builder>`.
	Fragments            []*ScopedRouteConfiguration_Key_Fragment `protobuf:"bytes,1,rep,name=fragments,proto3" json:"fragments,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                                 `json:"-"`
	XXX_unrecognized     []byte                                   `json:"-"`
	XXX_sizecache        int32                                    `json:"-"`
}

func (m *ScopedRouteConfiguration_Key) Reset()         { *m = ScopedRouteConfiguration_Key{} }
func (m *ScopedRouteConfiguration_Key) String() string { return proto.CompactTextString(m) }
func (*ScopedRouteConfiguration_Key) ProtoMessage()    {}
func (*ScopedRouteConfiguration_Key) Descriptor() ([]byte, []int) {
	return fileDescriptor_92f394721ede65e9, []int{0, 0}
}

func (m *ScopedRouteConfiguration_Key) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ScopedRouteConfiguration_Key.Unmarshal(m, b)
}
func (m *ScopedRouteConfiguration_Key) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ScopedRouteConfiguration_Key.Marshal(b, m, deterministic)
}
func (m *ScopedRouteConfiguration_Key) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ScopedRouteConfiguration_Key.Merge(m, src)
}
func (m *ScopedRouteConfiguration_Key) XXX_Size() int {
	return xxx_messageInfo_ScopedRouteConfiguration_Key.Size(m)
}
func (m *ScopedRouteConfiguration_Key) XXX_DiscardUnknown() {
	xxx_messageInfo_ScopedRouteConfiguration_Key.DiscardUnknown(m)
}

var xxx_messageInfo_ScopedRouteConfiguration_Key proto.InternalMessageInfo

func (m *ScopedRouteConfiguration_Key) GetFragments() []*ScopedRouteConfiguration_Key_Fragment {
	if m != nil {
		return m.Fragments
	}
	return nil
}

type ScopedRouteConfiguration_Key_Fragment struct {
	// Types that are valid to be assigned to Type:
	//	*ScopedRouteConfiguration_Key_Fragment_StringKey
	Type                 isScopedRouteConfiguration_Key_Fragment_Type `protobuf_oneof:"type"`
	XXX_NoUnkeyedLiteral struct{}                                     `json:"-"`
	XXX_unrecognized     []byte                                       `json:"-"`
	XXX_sizecache        int32                                        `json:"-"`
}

func (m *ScopedRouteConfiguration_Key_Fragment) Reset()         { *m = ScopedRouteConfiguration_Key_Fragment{} }
func (m *ScopedRouteConfiguration_Key_Fragment) String() string { return proto.CompactTextString(m) }
func (*ScopedRouteConfiguration_Key_Fragment) ProtoMessage()    {}
func (*ScopedRouteConfiguration_Key_Fragment) Descriptor() ([]byte, []int) {
	return fileDescriptor_92f394721ede65e9, []int{0, 0, 0}
}

func (m *ScopedRouteConfiguration_Key_Fragment) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ScopedRouteConfiguration_Key_Fragment.Unmarshal(m, b)
}
func (m *ScopedRouteConfiguration_Key_Fragment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ScopedRouteConfiguration_Key_Fragment.Marshal(b, m, deterministic)
}
func (m *ScopedRouteConfiguration_Key_Fragment) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ScopedRouteConfiguration_Key_Fragment.Merge(m, src)
}
func (m *ScopedRouteConfiguration_Key_Fragment) XXX_Size() int {
	return xxx_messageInfo_ScopedRouteConfiguration_Key_Fragment.Size(m)
}
func (m *ScopedRouteConfiguration_Key_Fragment) XXX_DiscardUnknown() {
	xxx_messageInfo_ScopedRouteConfiguration_Key_Fragment.DiscardUnknown(m)
}

var xxx_messageInfo_ScopedRouteConfiguration_Key_Fragment proto.InternalMessageInfo

type isScopedRouteConfiguration_Key_Fragment_Type interface {
	isScopedRouteConfiguration_Key_Fragment_Type()
}

type ScopedRouteConfiguration_Key_Fragment_StringKey struct {
	StringKey string `protobuf:"bytes,1,opt,name=string_key,json=stringKey,proto3,oneof"`
}

func (*ScopedRouteConfiguration_Key_Fragment_StringKey) isScopedRouteConfiguration_Key_Fragment_Type() {
}

func (m *ScopedRouteConfiguration_Key_Fragment) GetType() isScopedRouteConfiguration_Key_Fragment_Type {
	if m != nil {
		return m.Type
	}
	return nil
}

func (m *ScopedRouteConfiguration_Key_Fragment) GetStringKey() string {
	if x, ok := m.GetType().(*ScopedRouteConfiguration_Key_Fragment_StringKey); ok {
		return x.StringKey
	}
	return ""
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ScopedRouteConfiguration_Key_Fragment) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*ScopedRouteConfiguration_Key_Fragment_StringKey)(nil),
	}
}

func init() {
	proto.RegisterType((*ScopedRouteConfiguration)(nil), "envoy.api.v2.ScopedRouteConfiguration")
	proto.RegisterType((*ScopedRouteConfiguration_Key)(nil), "envoy.api.v2.ScopedRouteConfiguration.Key")
	proto.RegisterType((*ScopedRouteConfiguration_Key_Fragment)(nil), "envoy.api.v2.ScopedRouteConfiguration.Key.Fragment")
}

func init() { proto.RegisterFile("envoy/api/v2/srds.proto", fileDescriptor_92f394721ede65e9) }

var fileDescriptor_92f394721ede65e9 = []byte{
	// 450 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x92, 0x41, 0x6b, 0xd4, 0x40,
	0x14, 0xc7, 0xfb, 0x92, 0x55, 0x77, 0x67, 0x3d, 0xd8, 0x39, 0xd8, 0x90, 0x2e, 0x36, 0xac, 0x22,
	0x4b, 0xd1, 0xac, 0xa4, 0x17, 0xe9, 0xcd, 0x58, 0x16, 0xa1, 0x20, 0x25, 0x7b, 0xec, 0x61, 0x19,
	0x93, 0xd7, 0x38, 0xb8, 0x3b, 0x13, 0x67, 0x66, 0x83, 0x01, 0x4f, 0x9e, 0xc4, 0xa3, 0x5e, 0xfd,
	0x56, 0x7e, 0x00, 0x11, 0xfc, 0x10, 0xd2, 0x93, 0x64, 0xd2, 0xd5, 0xc4, 0x52, 0xf1, 0xe0, 0x2d,
	0xcc, 0xfb, 0xff, 0x7e, 0xef, 0x4d, 0xe6, 0x91, 0x1d, 0x14, 0xa5, 0xac, 0xa6, 0xac, 0xe0, 0xd3,
	0x32, 0x9a, 0x6a, 0x95, 0xe9, 0xb0, 0x50, 0xd2, 0x48, 0x7a, 0xd3, 0x16, 0x42, 0x56, 0xf0, 0xb0,
	0x8c, 0xfc, 0x51, 0x27, 0x96, 0x71, 0x9d, 0xca, 0x12, 0x55, 0xd5, 0x64, 0xfd, 0x51, 0x2e, 0x65,
	0xbe, 0x44, 0x5b, 0x66, 0x42, 0x48, 0xc3, 0x0c, 0x97, 0xe2, 0xc2, 0xe4, 0xef, 0x94, 0x6c, 0xc9,
	0x33, 0x66, 0x70, 0xba, 0xf9, 0x68, 0x0a, 0xe3, 0x6f, 0x0e, 0xf1, 0xe6, 0xa9, 0x2c, 0x30, 0x4b,
	0xe4, 0xda, 0xe0, 0x53, 0x29, 0xce, 0x78, 0xbe, 0x56, 0x16, 0xa6, 0xbb, 0xa4, 0x27, 0xd8, 0x0a,
	0x3d, 0x08, 0x60, 0x32, 0x88, 0x6f, 0x9c, 0xc7, 0x3d, 0xe5, 0x04, 0x90, 0xd8, 0x43, 0xfa, 0x84,
	0x78, 0xaa, 0x46, 0x16, 0x69, 0x9b, 0x59, 0x58, 0xc0, 0xe9, 0x02, 0xb7, 0xd5, 0x25, 0xf7, 0xf3,
	0x5a, 0x31, 0x23, 0xee, 0x2b, 0xac, 0x3c, 0x37, 0x80, 0xc9, 0x30, 0xda, 0x0f, 0xdb, 0xb7, 0x0d,
	0xaf, 0x1a, 0x2a, 0x3c, 0xc6, 0x2a, 0xee, 0x9f, 0xc7, 0xd7, 0x3e, 0x80, 0x73, 0x0b, 0x92, 0x5a,
	0xe0, 0x7f, 0x06, 0xe2, 0x1e, 0x63, 0x45, 0x4f, 0xc9, 0xe0, 0x4c, 0xb1, 0x7c, 0x85, 0xc2, 0x68,
	0x0f, 0x02, 0x77, 0x32, 0x8c, 0x0e, 0xfe, 0xdd, 0x1a, 0xce, 0x2e, 0x58, 0xab, 0xff, 0x08, 0x4e,
	0x1f, 0x92, 0xdf, 0x3e, 0xff, 0x31, 0xe9, 0x6f, 0x02, 0x74, 0x8f, 0x10, 0x6d, 0x14, 0x17, 0xf9,
	0xa2, 0x9e, 0xdf, 0xfe, 0x9e, 0x67, 0x5b, 0xc9, 0xa0, 0x39, 0xab, 0x07, 0x1c, 0x92, 0x9e, 0xa9,
	0x0a, 0xa4, 0xee, 0x8f, 0x18, 0xa2, 0xaf, 0x0e, 0x19, 0xb5, 0x1a, 0xeb, 0xa3, 0xcd, 0xd3, 0xcd,
	0x51, 0x95, 0x3c, 0x45, 0x7a, 0x4a, 0xe8, 0xdc, 0x28, 0x64, 0xab, 0x76, 0x8a, 0xde, 0xe9, 0x8e,
	0xfe, 0x8b, 0x4a, 0xf0, 0xf5, 0x1a, 0xb5, 0xf1, 0xf7, 0xae, 0xac, 0xeb, 0x42, 0x0a, 0x8d, 0xe3,
	0xad, 0x09, 0x3c, 0x02, 0x9a, 0x91, 0xed, 0x23, 0x5c, 0x1a, 0xd6, 0x71, 0xdf, 0xfd, 0x83, 0xad,
	0x03, 0x97, 0x1a, 0xdc, 0xfb, 0x7b, 0xa8, 0xd3, 0xe5, 0x2d, 0xd9, 0x9e, 0xa1, 0x49, 0x5f, 0xfe,
	0xdf, 0x1b, 0xdc, 0x7f, 0xf7, 0xe5, 0xfb, 0x27, 0x27, 0x18, 0xef, 0x76, 0x36, 0xfe, 0x50, 0xdb,
	0x26, 0x0f, 0xed, 0x56, 0xe9, 0x43, 0xd8, 0x8f, 0x1f, 0x10, 0x9f, 0xcb, 0x46, 0x56, 0x28, 0xf9,
	0xa6, 0xea, 0x78, 0xe3, 0xc1, 0x5c, 0x65, 0xfa, 0xa4, 0x5e, 0xf7, 0x13, 0x78, 0x0f, 0xf0, 0xe2,
	0xba, 0x5d, 0xfd, 0x83, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x30, 0x05, 0xdd, 0xc2, 0x78, 0x03,
	0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// ScopedRoutesDiscoveryServiceClient is the client API for ScopedRoutesDiscoveryService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type ScopedRoutesDiscoveryServiceClient interface {
	StreamScopedRoutes(ctx context.Context, opts ...grpc.CallOption) (ScopedRoutesDiscoveryService_StreamScopedRoutesClient, error)
	DeltaScopedRoutes(ctx context.Context, opts ...grpc.CallOption) (ScopedRoutesDiscoveryService_DeltaScopedRoutesClient, error)
	FetchScopedRoutes(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error)
}

type scopedRoutesDiscoveryServiceClient struct {
	cc *grpc.ClientConn
}

func NewScopedRoutesDiscoveryServiceClient(cc *grpc.ClientConn) ScopedRoutesDiscoveryServiceClient {
	return &scopedRoutesDiscoveryServiceClient{cc}
}

func (c *scopedRoutesDiscoveryServiceClient) StreamScopedRoutes(ctx context.Context, opts ...grpc.CallOption) (ScopedRoutesDiscoveryService_StreamScopedRoutesClient, error) {
	stream, err := c.cc.NewStream(ctx, &_ScopedRoutesDiscoveryService_serviceDesc.Streams[0], "/envoy.api.v2.ScopedRoutesDiscoveryService/StreamScopedRoutes", opts...)
	if err != nil {
		return nil, err
	}
	x := &scopedRoutesDiscoveryServiceStreamScopedRoutesClient{stream}
	return x, nil
}

type ScopedRoutesDiscoveryService_StreamScopedRoutesClient interface {
	Send(*DiscoveryRequest) error
	Recv() (*DiscoveryResponse, error)
	grpc.ClientStream
}

type scopedRoutesDiscoveryServiceStreamScopedRoutesClient struct {
	grpc.ClientStream
}

func (x *scopedRoutesDiscoveryServiceStreamScopedRoutesClient) Send(m *DiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *scopedRoutesDiscoveryServiceStreamScopedRoutesClient) Recv() (*DiscoveryResponse, error) {
	m := new(DiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *scopedRoutesDiscoveryServiceClient) DeltaScopedRoutes(ctx context.Context, opts ...grpc.CallOption) (ScopedRoutesDiscoveryService_DeltaScopedRoutesClient, error) {
	stream, err := c.cc.NewStream(ctx, &_ScopedRoutesDiscoveryService_serviceDesc.Streams[1], "/envoy.api.v2.ScopedRoutesDiscoveryService/DeltaScopedRoutes", opts...)
	if err != nil {
		return nil, err
	}
	x := &scopedRoutesDiscoveryServiceDeltaScopedRoutesClient{stream}
	return x, nil
}

type ScopedRoutesDiscoveryService_DeltaScopedRoutesClient interface {
	Send(*DeltaDiscoveryRequest) error
	Recv() (*DeltaDiscoveryResponse, error)
	grpc.ClientStream
}

type scopedRoutesDiscoveryServiceDeltaScopedRoutesClient struct {
	grpc.ClientStream
}

func (x *scopedRoutesDiscoveryServiceDeltaScopedRoutesClient) Send(m *DeltaDiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *scopedRoutesDiscoveryServiceDeltaScopedRoutesClient) Recv() (*DeltaDiscoveryResponse, error) {
	m := new(DeltaDiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *scopedRoutesDiscoveryServiceClient) FetchScopedRoutes(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error) {
	out := new(DiscoveryResponse)
	err := c.cc.Invoke(ctx, "/envoy.api.v2.ScopedRoutesDiscoveryService/FetchScopedRoutes", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// ScopedRoutesDiscoveryServiceServer is the server API for ScopedRoutesDiscoveryService service.
type ScopedRoutesDiscoveryServiceServer interface {
	StreamScopedRoutes(ScopedRoutesDiscoveryService_StreamScopedRoutesServer) error
	DeltaScopedRoutes(ScopedRoutesDiscoveryService_DeltaScopedRoutesServer) error
	FetchScopedRoutes(context.Context, *DiscoveryRequest) (*DiscoveryResponse, error)
}

// UnimplementedScopedRoutesDiscoveryServiceServer can be embedded to have forward compatible implementations.
type UnimplementedScopedRoutesDiscoveryServiceServer struct {
}

func (*UnimplementedScopedRoutesDiscoveryServiceServer) StreamScopedRoutes(srv ScopedRoutesDiscoveryService_StreamScopedRoutesServer) error {
	return status.Errorf(codes.Unimplemented, "method StreamScopedRoutes not implemented")
}
func (*UnimplementedScopedRoutesDiscoveryServiceServer) DeltaScopedRoutes(srv ScopedRoutesDiscoveryService_DeltaScopedRoutesServer) error {
	return status.Errorf(codes.Unimplemented, "method DeltaScopedRoutes not implemented")
}
func (*UnimplementedScopedRoutesDiscoveryServiceServer) FetchScopedRoutes(ctx context.Context, req *DiscoveryRequest) (*DiscoveryResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method FetchScopedRoutes not implemented")
}

func RegisterScopedRoutesDiscoveryServiceServer(s *grpc.Server, srv ScopedRoutesDiscoveryServiceServer) {
	s.RegisterService(&_ScopedRoutesDiscoveryService_serviceDesc, srv)
}

func _ScopedRoutesDiscoveryService_StreamScopedRoutes_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(ScopedRoutesDiscoveryServiceServer).StreamScopedRoutes(&scopedRoutesDiscoveryServiceStreamScopedRoutesServer{stream})
}

type ScopedRoutesDiscoveryService_StreamScopedRoutesServer interface {
	Send(*DiscoveryResponse) error
	Recv() (*DiscoveryRequest, error)
	grpc.ServerStream
}

type scopedRoutesDiscoveryServiceStreamScopedRoutesServer struct {
	grpc.ServerStream
}

func (x *scopedRoutesDiscoveryServiceStreamScopedRoutesServer) Send(m *DiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *scopedRoutesDiscoveryServiceStreamScopedRoutesServer) Recv() (*DiscoveryRequest, error) {
	m := new(DiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _ScopedRoutesDiscoveryService_DeltaScopedRoutes_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(ScopedRoutesDiscoveryServiceServer).DeltaScopedRoutes(&scopedRoutesDiscoveryServiceDeltaScopedRoutesServer{stream})
}

type ScopedRoutesDiscoveryService_DeltaScopedRoutesServer interface {
	Send(*DeltaDiscoveryResponse) error
	Recv() (*DeltaDiscoveryRequest, error)
	grpc.ServerStream
}

type scopedRoutesDiscoveryServiceDeltaScopedRoutesServer struct {
	grpc.ServerStream
}

func (x *scopedRoutesDiscoveryServiceDeltaScopedRoutesServer) Send(m *DeltaDiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *scopedRoutesDiscoveryServiceDeltaScopedRoutesServer) Recv() (*DeltaDiscoveryRequest, error) {
	m := new(DeltaDiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _ScopedRoutesDiscoveryService_FetchScopedRoutes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(DiscoveryRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(ScopedRoutesDiscoveryServiceServer).FetchScopedRoutes(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/envoy.api.v2.ScopedRoutesDiscoveryService/FetchScopedRoutes",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(ScopedRoutesDiscoveryServiceServer).FetchScopedRoutes(ctx, req.(*DiscoveryRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _ScopedRoutesDiscoveryService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.api.v2.ScopedRoutesDiscoveryService",
	HandlerType: (*ScopedRoutesDiscoveryServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "FetchScopedRoutes",
			Handler:    _ScopedRoutesDiscoveryService_FetchScopedRoutes_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "StreamScopedRoutes",
			Handler:       _ScopedRoutesDiscoveryService_StreamScopedRoutes_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
		{
			StreamName:    "DeltaScopedRoutes",
			Handler:       _ScopedRoutesDiscoveryService_DeltaScopedRoutes_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
	},
	Metadata: "envoy/api/v2/srds.proto",
}
  07070100000078000041ED000003E800000064000000125E17A24700000000000000000000000000000000000000000000002600000000cilium-proxy-20200109/go/envoy/config 07070100000079000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003000000000cilium-proxy-20200109/go/envoy/config/accesslog   0707010000007A000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003300000000cilium-proxy-20200109/go/envoy/config/accesslog/v2    0707010000007B000081A4000003E800000064000000015E17A24700003218000000000000000000000000000000000000003D00000000cilium-proxy-20200109/go/envoy/config/accesslog/v2/als.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/accesslog/v2/als.proto

package envoy_config_accesslog_v2

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Configuration for the built-in *envoy.http_grpc_access_log*
// :ref:`AccessLog <envoy_api_msg_config.filter.accesslog.v2.AccessLog>`. This configuration will
// populate :ref:`StreamAccessLogsMessage.http_logs
// <envoy_api_field_service.accesslog.v2.StreamAccessLogsMessage.http_logs>`.
type HttpGrpcAccessLogConfig struct {
	CommonConfig *CommonGrpcAccessLogConfig `protobuf:"bytes,1,opt,name=common_config,json=commonConfig,proto3" json:"common_config,omitempty"`
	// Additional request headers to log in :ref:`HTTPRequestProperties.request_headers
	// <envoy_api_field_data.accesslog.v2.HTTPRequestProperties.request_headers>`.
	AdditionalRequestHeadersToLog []string `protobuf:"bytes,2,rep,name=additional_request_headers_to_log,json=additionalRequestHeadersToLog,proto3" json:"additional_request_headers_to_log,omitempty"`
	// Additional response headers to log in :ref:`HTTPResponseProperties.response_headers
	// <envoy_api_field_data.accesslog.v2.HTTPResponseProperties.response_headers>`.
	AdditionalResponseHeadersToLog []string `protobuf:"bytes,3,rep,name=additional_response_headers_to_log,json=additionalResponseHeadersToLog,proto3" json:"additional_response_headers_to_log,omitempty"`
	// Additional response trailers to log in :ref:`HTTPResponseProperties.response_trailers
	// <envoy_api_field_data.accesslog.v2.HTTPResponseProperties.response_trailers>`.
	AdditionalResponseTrailersToLog []string `protobuf:"bytes,4,rep,name=additional_response_trailers_to_log,json=additionalResponseTrailersToLog,proto3" json:"additional_response_trailers_to_log,omitempty"`
	XXX_NoUnkeyedLiteral            struct{} `json:"-"`
	XXX_unrecognized                []byte   `json:"-"`
	XXX_sizecache                   int32    `json:"-"`
}

func (m *HttpGrpcAccessLogConfig) Reset()         { *m = HttpGrpcAccessLogConfig{} }
func (m *HttpGrpcAccessLogConfig) String() string { return proto.CompactTextString(m) }
func (*HttpGrpcAccessLogConfig) ProtoMessage()    {}
func (*HttpGrpcAccessLogConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_e7b431652a309a2e, []int{0}
}

func (m *HttpGrpcAccessLogConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpGrpcAccessLogConfig.Unmarshal(m, b)
}
func (m *HttpGrpcAccessLogConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpGrpcAccessLogConfig.Marshal(b, m, deterministic)
}
func (m *HttpGrpcAccessLogConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpGrpcAccessLogConfig.Merge(m, src)
}
func (m *HttpGrpcAccessLogConfig) XXX_Size() int {
	return xxx_messageInfo_HttpGrpcAccessLogConfig.Size(m)
}
func (m *HttpGrpcAccessLogConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpGrpcAccessLogConfig.DiscardUnknown(m)
}

var xxx_messageInfo_HttpGrpcAccessLogConfig proto.InternalMessageInfo

func (m *HttpGrpcAccessLogConfig) GetCommonConfig() *CommonGrpcAccessLogConfig {
	if m != nil {
		return m.CommonConfig
	}
	return nil
}

func (m *HttpGrpcAccessLogConfig) GetAdditionalRequestHeadersToLog() []string {
	if m != nil {
		return m.AdditionalRequestHeadersToLog
	}
	return nil
}

func (m *HttpGrpcAccessLogConfig) GetAdditionalResponseHeadersToLog() []string {
	if m != nil {
		return m.AdditionalResponseHeadersToLog
	}
	return nil
}

func (m *HttpGrpcAccessLogConfig) GetAdditionalResponseTrailersToLog() []string {
	if m != nil {
		return m.AdditionalResponseTrailersToLog
	}
	return nil
}

// Configuration for the built-in *envoy.tcp_grpc_access_log* type. This configuration will
// populate *StreamAccessLogsMessage.tcp_logs*.
type TcpGrpcAccessLogConfig struct {
	CommonConfig         *CommonGrpcAccessLogConfig `protobuf:"bytes,1,opt,name=common_config,json=commonConfig,proto3" json:"common_config,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
	XXX_unrecognized     []byte                     `json:"-"`
	XXX_sizecache        int32                      `json:"-"`
}

func (m *TcpGrpcAccessLogConfig) Reset()         { *m = TcpGrpcAccessLogConfig{} }
func (m *TcpGrpcAccessLogConfig) String() string { return proto.CompactTextString(m) }
func (*TcpGrpcAccessLogConfig) ProtoMessage()    {}
func (*TcpGrpcAccessLogConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_e7b431652a309a2e, []int{1}
}

func (m *TcpGrpcAccessLogConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TcpGrpcAccessLogConfig.Unmarshal(m, b)
}
func (m *TcpGrpcAccessLogConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TcpGrpcAccessLogConfig.Marshal(b, m, deterministic)
}
func (m *TcpGrpcAccessLogConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TcpGrpcAccessLogConfig.Merge(m, src)
}
func (m *TcpGrpcAccessLogConfig) XXX_Size() int {
	return xxx_messageInfo_TcpGrpcAccessLogConfig.Size(m)
}
func (m *TcpGrpcAccessLogConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_TcpGrpcAccessLogConfig.DiscardUnknown(m)
}

var xxx_messageInfo_TcpGrpcAccessLogConfig proto.InternalMessageInfo

func (m *TcpGrpcAccessLogConfig) GetCommonConfig() *CommonGrpcAccessLogConfig {
	if m != nil {
		return m.CommonConfig
	}
	return nil
}

// Common configuration for gRPC access logs.
type CommonGrpcAccessLogConfig struct {
	// The friendly name of the access log to be returned in :ref:`StreamAccessLogsMessage.Identifier
	// <envoy_api_msg_service.accesslog.v2.StreamAccessLogsMessage.Identifier>`. This allows the
	// access log server to differentiate between different access logs coming from the same Envoy.
	LogName string `protobuf:"bytes,1,opt,name=log_name,json=logName,proto3" json:"log_name,omitempty"`
	// The gRPC service for the access log service.
	GrpcService *core.GrpcService `protobuf:"bytes,2,opt,name=grpc_service,json=grpcService,proto3" json:"grpc_service,omitempty"`
	// Interval for flushing access logs to the gRPC stream. Logger will flush requests every time
	// this interval is elapsed, or when batch size limit is hit, whichever comes first. Defaults to
	// 1 second.
	BufferFlushInterval *duration.Duration `protobuf:"bytes,3,opt,name=buffer_flush_interval,json=bufferFlushInterval,proto3" json:"buffer_flush_interval,omitempty"`
	// Soft size limit in bytes for access log entries buffer. Logger will buffer requests until
	// this limit it hit, or every time flush interval is elapsed, whichever comes first. Setting it
	// to zero effectively disables the batching. Defaults to 16384.
	BufferSizeBytes      *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=buffer_size_bytes,json=bufferSizeBytes,proto3" json:"buffer_size_bytes,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *CommonGrpcAccessLogConfig) Reset()         { *m = CommonGrpcAccessLogConfig{} }
func (m *CommonGrpcAccessLogConfig) String() string { return proto.CompactTextString(m) }
func (*CommonGrpcAccessLogConfig) ProtoMessage()    {}
func (*CommonGrpcAccessLogConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_e7b431652a309a2e, []int{2}
}

func (m *CommonGrpcAccessLogConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_CommonGrpcAccessLogConfig.Unmarshal(m, b)
}
func (m *CommonGrpcAccessLogConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_CommonGrpcAccessLogConfig.Marshal(b, m, deterministic)
}
func (m *CommonGrpcAccessLogConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CommonGrpcAccessLogConfig.Merge(m, src)
}
func (m *CommonGrpcAccessLogConfig) XXX_Size() int {
	return xxx_messageInfo_CommonGrpcAccessLogConfig.Size(m)
}
func (m *CommonGrpcAccessLogConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_CommonGrpcAccessLogConfig.DiscardUnknown(m)
}

var xxx_messageInfo_CommonGrpcAccessLogConfig proto.InternalMessageInfo

func (m *CommonGrpcAccessLogConfig) GetLogName() string {
	if m != nil {
		return m.LogName
	}
	return ""
}

func (m *CommonGrpcAccessLogConfig) GetGrpcService() *core.GrpcService {
	if m != nil {
		return m.GrpcService
	}
	return nil
}

func (m *CommonGrpcAccessLogConfig) GetBufferFlushInterval() *duration.Duration {
	if m != nil {
		return m.BufferFlushInterval
	}
	return nil
}

func (m *CommonGrpcAccessLogConfig) GetBufferSizeBytes() *wrappers.UInt32Value {
	if m != nil {
		return m.BufferSizeBytes
	}
	return nil
}

func init() {
	proto.RegisterType((*HttpGrpcAccessLogConfig)(nil), "envoy.config.accesslog.v2.HttpGrpcAccessLogConfig")
	proto.RegisterType((*TcpGrpcAccessLogConfig)(nil), "envoy.config.accesslog.v2.TcpGrpcAccessLogConfig")
	proto.RegisterType((*CommonGrpcAccessLogConfig)(nil), "envoy.config.accesslog.v2.CommonGrpcAccessLogConfig")
}

func init() {
	proto.RegisterFile("envoy/config/accesslog/v2/als.proto", fileDescriptor_e7b431652a309a2e)
}

var fileDescriptor_e7b431652a309a2e = []byte{
	// 504 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x92, 0xd1, 0x6e, 0xd3, 0x30,
	0x14, 0x86, 0x49, 0x56, 0x58, 0xe7, 0x0d, 0x01, 0x41, 0xb0, 0xb6, 0x82, 0x52, 0x3a, 0x24, 0x26,
	0x2e, 0x12, 0xa9, 0x83, 0x07, 0x58, 0x86, 0xa0, 0x83, 0x0a, 0x4d, 0x59, 0x81, 0xcb, 0xc8, 0x4d,
	0x4f, 0x3d, 0x4b, 0x6e, 0x8e, 0xb1, 0x9d, 0x40, 0x27, 0xf1, 0x02, 0x3c, 0x0a, 0x37, 0xbc, 0x13,
	0x8f, 0xb1, 0x2b, 0x14, 0x3b, 0x63, 0x1d, 0x5b, 0xaf, 0xb9, 0x4b, 0xe2, 0xff, 0xff, 0xce, 0x7f,
	0xe2, 0x9f, 0xec, 0x40, 0x5e, 0xe2, 0x22, 0xca, 0x30, 0x9f, 0x71, 0x16, 0xd1, 0x2c, 0x03, 0xad,
	0x05, 0xb2, 0xa8, 0x1c, 0x44, 0x54, 0xe8, 0x50, 0x2a, 0x34, 0x18, 0xb4, 0xad, 0x28, 0x74, 0xa2,
	0xf0, 0xaf, 0x28, 0x2c, 0x07, 0x9d, 0x67, 0xce, 0x4f, 0x25, 0xaf, 0x2c, 0x19, 0x2a, 0x88, 0x98,
	0x92, 0x59, 0xaa, 0x41, 0x95, 0x3c, 0x03, 0x07, 0xe8, 0x74, 0x19, 0x22, 0x13, 0x10, 0xd9, 0xb7,
	0x49, 0x31, 0x8b, 0xa6, 0x85, 0xa2, 0x86, 0x63, 0xbe, 0xea, 0xfc, 0xab, 0xa2, 0x52, 0x82, 0xaa,
	0x03, 0x74, 0xb6, 0x4b, 0x2a, 0xf8, 0x94, 0x1a, 0x88, 0xce, 0x1f, 0xdc, 0x41, 0xff, 0xb7, 0x4f,
	0xb6, 0x87, 0xc6, 0xc8, 0xb7, 0x4a, 0x66, 0xfb, 0x36, 0xd7, 0x08, 0xd9, 0x81, 0xcd, 0x19, 0x64,
	0xe4, 0x76, 0x86, 0xf3, 0x39, 0xe6, 0xa9, 0x0b, 0xde, 0xf2, 0x7a, 0xde, 0xee, 0xe6, 0xe0, 0x65,
	0xb8, 0x72, 0x9b, 0xf0, 0xc0, 0xea, 0xaf, 0x81, 0xc5, 0xcd, 0xb3, 0xf8, 0xe6, 0x0f, 0xcf, 0xbf,
	0xeb, 0x25, 0x5b, 0x0e, 0x5a, 0x0f, 0x19, 0x92, 0xa7, 0x74, 0x3a, 0xe5, 0xd5, 0x2e, 0x54, 0xa4,
	0x0a, 0xbe, 0x14, 0xa0, 0x4d, 0x7a, 0x02, 0x74, 0x0a, 0x4a, 0xa7, 0x06, 0x53, 0x81, 0xac, 0xe5,
	0xf7, 0xd6, 0x76, 0x37, 0x92, 0xc7, 0x17, 0xc2, 0xc4, 0xe9, 0x86, 0x4e, 0x36, 0xc6, 0x11, 0xb2,
	0xe0, 0x1d, 0xe9, 0x5f, 0x22, 0x69, 0x89, 0xb9, 0x86, 0x7f, 0x51, 0x6b, 0x16, 0xd5, 0x5d, 0x46,
	0x39, 0xe1, 0x25, 0xd6, 0x88, 0xec, 0x5c, 0xc7, 0x32, 0x8a, 0x72, 0xb1, 0x04, 0x6b, 0x58, 0xd8,
	0x93, 0xab, 0xb0, 0x71, 0x2d, 0xb4, 0xb4, 0xfe, 0x77, 0xf2, 0x70, 0x9c, 0xfd, 0xb7, 0x5f, 0xdc,
	0xff, 0xe5, 0x93, 0xf6, 0x4a, 0x57, 0xd0, 0x27, 0x4d, 0x81, 0x2c, 0xcd, 0xe9, 0x1c, 0xec, 0xf4,
	0x8d, 0x78, 0xfd, 0x2c, 0x6e, 0x28, 0xbf, 0xe7, 0x25, 0xeb, 0x02, 0xd9, 0x07, 0x3a, 0x87, 0xe0,
	0x3d, 0xd9, 0x5a, 0x2e, 0x65, 0xcb, 0xb7, 0x29, 0xbb, 0x75, 0x4a, 0x2a, 0x79, 0x15, 0xac, 0xea,
	0x6e, 0x58, 0x4d, 0x38, 0x76, 0xaa, 0xa5, 0x3c, 0x9b, 0xec, 0xe2, 0x73, 0xf0, 0x99, 0x3c, 0x98,
	0x14, 0xb3, 0x19, 0xa8, 0x74, 0x26, 0x0a, 0x7d, 0x92, 0xf2, 0xdc, 0x80, 0x2a, 0xa9, 0x68, 0xad,
	0x59, 0x6a, 0x3b, 0x74, 0x5d, 0x0e, 0xcf, 0xbb, 0x1c, 0xbe, 0xae, 0xbb, 0x6e, 0x81, 0x3f, 0x3d,
	0xff, 0xc5, 0x8d, 0xe4, 0xbe, 0x23, 0xbc, 0xa9, 0x00, 0x87, 0xb5, 0x3f, 0x18, 0x92, 0x7b, 0x35,
	0x58, 0xf3, 0x53, 0x48, 0x27, 0x0b, 0x03, 0xba, 0xd5, 0xb0, 0xd0, 0x47, 0x57, 0xa0, 0x1f, 0x0f,
	0x73, 0xb3, 0x37, 0xf8, 0x44, 0x45, 0x01, 0xc9, 0x1d, 0x67, 0x3b, 0xe6, 0xa7, 0x10, 0x57, 0xa6,
	0xf8, 0x15, 0x79, 0xce, 0xd1, 0x6d, 0x27, 0x15, 0x7e, 0x5b, 0xac, 0xbe, 0x8e, 0xb8, 0xb9, 0x2f,
	0xf4, 0x51, 0x05, 0x3d, 0xf2, 0x26, 0xb7, 0x2c, 0x7d, 0xef, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff,
	0x1d, 0x2a, 0x70, 0x6e, 0x14, 0x04, 0x00, 0x00,
}
0707010000007C000081A4000003E800000064000000015E17A2470000165E000000000000000000000000000000000000003E00000000cilium-proxy-20200109/go/envoy/config/accesslog/v2/file.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/accesslog/v2/file.proto

package envoy_config_accesslog_v2

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	_struct "github.com/golang/protobuf/ptypes/struct"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Custom configuration for an :ref:`AccessLog <envoy_api_msg_config.filter.accesslog.v2.AccessLog>`
// that writes log entries directly to a file. Configures the built-in *envoy.file_access_log*
// AccessLog.
type FileAccessLog struct {
	// A path to a local file to which to write the access log entries.
	Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
	// Access log format. Envoy supports :ref:`custom access log formats
	// <config_access_log_format>` as well as a :ref:`default format
	// <config_access_log_default_format>`.
	//
	// Types that are valid to be assigned to AccessLogFormat:
	//	*FileAccessLog_Format
	//	*FileAccessLog_JsonFormat
	AccessLogFormat      isFileAccessLog_AccessLogFormat `protobuf_oneof:"access_log_format"`
	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
	XXX_unrecognized     []byte                          `json:"-"`
	XXX_sizecache        int32                           `json:"-"`
}

func (m *FileAccessLog) Reset()         { *m = FileAccessLog{} }
func (m *FileAccessLog) String() string { return proto.CompactTextString(m) }
func (*FileAccessLog) ProtoMessage()    {}
func (*FileAccessLog) Descriptor() ([]byte, []int) {
	return fileDescriptor_bb42a04cfa71ce3c, []int{0}
}

func (m *FileAccessLog) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FileAccessLog.Unmarshal(m, b)
}
func (m *FileAccessLog) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FileAccessLog.Marshal(b, m, deterministic)
}
func (m *FileAccessLog) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FileAccessLog.Merge(m, src)
}
func (m *FileAccessLog) XXX_Size() int {
	return xxx_messageInfo_FileAccessLog.Size(m)
}
func (m *FileAccessLog) XXX_DiscardUnknown() {
	xxx_messageInfo_FileAccessLog.DiscardUnknown(m)
}

var xxx_messageInfo_FileAccessLog proto.InternalMessageInfo

func (m *FileAccessLog) GetPath() string {
	if m != nil {
		return m.Path
	}
	return ""
}

type isFileAccessLog_AccessLogFormat interface {
	isFileAccessLog_AccessLogFormat()
}

type FileAccessLog_Format struct {
	Format string `protobuf:"bytes,2,opt,name=format,proto3,oneof"`
}

type FileAccessLog_JsonFormat struct {
	JsonFormat *_struct.Struct `protobuf:"bytes,3,opt,name=json_format,json=jsonFormat,proto3,oneof"`
}

func (*FileAccessLog_Format) isFileAccessLog_AccessLogFormat() {}

func (*FileAccessLog_JsonFormat) isFileAccessLog_AccessLogFormat() {}

func (m *FileAccessLog) GetAccessLogFormat() isFileAccessLog_AccessLogFormat {
	if m != nil {
		return m.AccessLogFormat
	}
	return nil
}

func (m *FileAccessLog) GetFormat() string {
	if x, ok := m.GetAccessLogFormat().(*FileAccessLog_Format); ok {
		return x.Format
	}
	return ""
}

func (m *FileAccessLog) GetJsonFormat() *_struct.Struct {
	if x, ok := m.GetAccessLogFormat().(*FileAccessLog_JsonFormat); ok {
		return x.JsonFormat
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*FileAccessLog) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*FileAccessLog_Format)(nil),
		(*FileAccessLog_JsonFormat)(nil),
	}
}

func init() {
	proto.RegisterType((*FileAccessLog)(nil), "envoy.config.accesslog.v2.FileAccessLog")
}

func init() {
	proto.RegisterFile("envoy/config/accesslog/v2/file.proto", fileDescriptor_bb42a04cfa71ce3c)
}

var fileDescriptor_bb42a04cfa71ce3c = []byte{
	// 253 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x8f, 0xb1, 0x4e, 0xc3, 0x30,
	0x10, 0x86, 0xeb, 0x52, 0x15, 0xd5, 0x15, 0x03, 0x61, 0x68, 0x28, 0x0c, 0x11, 0x42, 0xa2, 0xd3,
	0x59, 0x0a, 0x12, 0x03, 0x1b, 0x1e, 0xaa, 0x0e, 0x0c, 0x55, 0x78, 0x80, 0xca, 0x0d, 0x8e, 0x31,
	0x32, 0xb9, 0xc8, 0x71, 0x23, 0xfa, 0x24, 0xbc, 0x2b, 0x13, 0xb2, 0x9d, 0xb0, 0x75, 0xb3, 0xfd,
	0x7f, 0xbe, 0xfb, 0x3f, 0x7a, 0x2f, 0xeb, 0x0e, 0x8f, 0xac, 0xc4, 0xba, 0xd2, 0x8a, 0x89, 0xb2,
	0x94, 0x6d, 0x6b, 0x50, 0xb1, 0x2e, 0x67, 0x95, 0x36, 0x12, 0x1a, 0x8b, 0x0e, 0x93, 0xeb, 0x40,
	0x41, 0xa4, 0xe0, 0x9f, 0x82, 0x2e, 0x5f, 0xde, 0x2a, 0x44, 0x65, 0x24, 0x0b, 0xe0, 0xfe, 0x50,
	0xb1, 0xd6, 0xd9, 0x43, 0xe9, 0xe2, 0xc7, 0xe5, 0xa2, 0x13, 0x46, 0xbf, 0x0b, 0x27, 0xd9, 0x70,
	0x88, 0xc1, 0xdd, 0x0f, 0xa1, 0x17, 0x6b, 0x6d, 0xe4, 0x4b, 0x98, 0xf5, 0x8a, 0x2a, 0xb9, 0xa1,
	0x93, 0x46, 0xb8, 0x8f, 0x94, 0x64, 0x64, 0x35, 0xe3, 0xe7, 0xbf, 0x7c, 0x62, 0xc7, 0x19, 0x29,
	0xc2, 0x63, 0x92, 0xd2, 0x69, 0x85, 0xf6, 0x4b, 0xb8, 0x74, 0xec, 0xe3, 0xcd, 0xa8, 0xe8, 0xef,
	0xc9, 0x33, 0x9d, 0x7f, 0xb6, 0x58, 0xef, 0xfa, 0xf8, 0x2c, 0x23, 0xab, 0x79, 0xbe, 0x80, 0xd8,
	0x0a, 0x86, 0x56, 0xf0, 0x16, 0x5a, 0x6d, 0x46, 0x05, 0xf5, 0xf4, 0x3a, 0xc0, 0xfc, 0x8a, 0x5e,
	0x46, 0x97, 0x9d, 0x41, 0xd5, 0x4f, 0xe0, 0x4f, 0xf4, 0x41, 0x23, 0x04, 0xe1, 0xc6, 0xe2, 0xf7,
	0x11, 0x4e, 0xba, 0xf3, 0x99, 0x37, 0xd8, 0xfa, 0x15, 0x5b, 0xb2, 0x9f, 0x86, 0x5d, 0x8f, 0x7f,
	0x01, 0x00, 0x00, 0xff, 0xff, 0xfa, 0x14, 0xe6, 0x0c, 0x52, 0x01, 0x00, 0x00,
}
  0707010000007D000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003000000000cilium-proxy-20200109/go/envoy/config/bootstrap   0707010000007E000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003300000000cilium-proxy-20200109/go/envoy/config/bootstrap/v2    0707010000007F000081A4000003E800000064000000015E17A2470000C6A7000000000000000000000000000000000000004300000000cilium-proxy-20200109/go/envoy/config/bootstrap/v2/bootstrap.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/bootstrap/v2/bootstrap.proto

package envoy_config_bootstrap_v2

import (
	fmt "fmt"
	v22 "github.com/cilium/proxy/go/envoy/api/v2"
	auth "github.com/cilium/proxy/go/envoy/api/v2/auth"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	v2 "github.com/cilium/proxy/go/envoy/config/metrics/v2"
	v2alpha "github.com/cilium/proxy/go/envoy/config/overload/v2alpha"
	v21 "github.com/cilium/proxy/go/envoy/config/trace/v2"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	_struct "github.com/golang/protobuf/ptypes/struct"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Bootstrap :ref:`configuration overview <config_overview_v2_bootstrap>`.
// [#next-free-field: 20]
type Bootstrap struct {
	// Node identity to present to the management server and for instance
	// identification purposes (e.g. in generated headers).
	Node *core.Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"`
	// Statically specified resources.
	StaticResources *Bootstrap_StaticResources `protobuf:"bytes,2,opt,name=static_resources,json=staticResources,proto3" json:"static_resources,omitempty"`
	// xDS configuration sources.
	DynamicResources *Bootstrap_DynamicResources `protobuf:"bytes,3,opt,name=dynamic_resources,json=dynamicResources,proto3" json:"dynamic_resources,omitempty"`
	// Configuration for the cluster manager which owns all upstream clusters
	// within the server.
	ClusterManager *ClusterManager `protobuf:"bytes,4,opt,name=cluster_manager,json=clusterManager,proto3" json:"cluster_manager,omitempty"`
	// Health discovery service config option.
	// (:ref:`core.ApiConfigSource <envoy_api_msg_core.ApiConfigSource>`)
	HdsConfig *core.ApiConfigSource `protobuf:"bytes,14,opt,name=hds_config,json=hdsConfig,proto3" json:"hds_config,omitempty"`
	// Optional file system path to search for startup flag files.
	FlagsPath string `protobuf:"bytes,5,opt,name=flags_path,json=flagsPath,proto3" json:"flags_path,omitempty"`
	// Optional set of stats sinks.
	StatsSinks []*v2.StatsSink `protobuf:"bytes,6,rep,name=stats_sinks,json=statsSinks,proto3" json:"stats_sinks,omitempty"`
	// Configuration for internal processing of stats.
	StatsConfig *v2.StatsConfig `protobuf:"bytes,13,opt,name=stats_config,json=statsConfig,proto3" json:"stats_config,omitempty"`
	// Optional duration between flushes to configured stats sinks. For
	// performance reasons Envoy latches counters and only flushes counters and
	// gauges at a periodic interval. If not specified the default is 5000ms (5
	// seconds).
	// Duration must be at least 1ms and at most 5 min.
	StatsFlushInterval *duration.Duration `protobuf:"bytes,7,opt,name=stats_flush_interval,json=statsFlushInterval,proto3" json:"stats_flush_interval,omitempty"`
	// Optional watchdog configuration.
	Watchdog *Watchdog `protobuf:"bytes,8,opt,name=watchdog,proto3" json:"watchdog,omitempty"`
	// Configuration for an external tracing provider. If not specified, no
	// tracing will be performed.
	Tracing *v21.Tracing `protobuf:"bytes,9,opt,name=tracing,proto3" json:"tracing,omitempty"`
	// Configuration for the runtime configuration provider (deprecated). If not
	// specified, a “null” provider will be used which will result in all defaults
	// being used.
	Runtime *Runtime `protobuf:"bytes,11,opt,name=runtime,proto3" json:"runtime,omitempty"` // Deprecated: Do not use.
	// Configuration for the runtime configuration provider. If not
	// specified, a “null” provider will be used which will result in all defaults
	// being used.
	LayeredRuntime *LayeredRuntime `protobuf:"bytes,17,opt,name=layered_runtime,json=layeredRuntime,proto3" json:"layered_runtime,omitempty"`
	// Configuration for the local administration HTTP server.
	Admin *Admin `protobuf:"bytes,12,opt,name=admin,proto3" json:"admin,omitempty"`
	// Optional overload manager configuration.
	OverloadManager *v2alpha.OverloadManager `protobuf:"bytes,15,opt,name=overload_manager,json=overloadManager,proto3" json:"overload_manager,omitempty"`
	// Enable :ref:`stats for event dispatcher <operations_performance>`, defaults to false.
	// Note that this records a value for each iteration of the event loop on every thread. This
	// should normally be minimal overhead, but when using
	// :ref:`statsd <envoy_api_msg_config.metrics.v2.StatsdSink>`, it will send each observed value
	// over the wire individually because the statsd protocol doesn't have any way to represent a
	// histogram summary. Be aware that this can be a very large volume of data.
	EnableDispatcherStats bool `protobuf:"varint,16,opt,name=enable_dispatcher_stats,json=enableDispatcherStats,proto3" json:"enable_dispatcher_stats,omitempty"`
	// Optional string which will be used in lieu of x-envoy in prefixing headers.
	//
	// For example, if this string is present and set to X-Foo, then x-envoy-retry-on will be
	// transformed into x-foo-retry-on etc.
	//
	// Note this applies to the headers Envoy will generate, the headers Envoy will sanitize, and the
	// headers Envoy will trust for core code and core extensions only. Be VERY careful making
	// changes to this string, especially in multi-layer Envoy deployments or deployments using
	// extensions which are not upstream.
	HeaderPrefix string `protobuf:"bytes,18,opt,name=header_prefix,json=headerPrefix,proto3" json:"header_prefix,omitempty"`
	// Optional proxy version which will be used to set the value of :ref:`server.version statistic
	// <server_statistics>` if specified. Envoy will not process this value, it will be sent as is to
	// :ref:<stats sinks <envoy_api_msg_config.metrics.v2.StatsSink>.
	StatsServerVersionOverride *wrappers.UInt64Value `protobuf:"bytes,19,opt,name=stats_server_version_override,json=statsServerVersionOverride,proto3" json:"stats_server_version_override,omitempty"`
	XXX_NoUnkeyedLiteral       struct{}              `json:"-"`
	XXX_unrecognized           []byte                `json:"-"`
	XXX_sizecache              int32                 `json:"-"`
}

func (m *Bootstrap) Reset()         { *m = Bootstrap{} }
func (m *Bootstrap) String() string { return proto.CompactTextString(m) }
func (*Bootstrap) ProtoMessage()    {}
func (*Bootstrap) Descriptor() ([]byte, []int) {
	return fileDescriptor_f1197defdf9c5e6a, []int{0}
}

func (m *Bootstrap) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Bootstrap.Unmarshal(m, b)
}
func (m *Bootstrap) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Bootstrap.Marshal(b, m, deterministic)
}
func (m *Bootstrap) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Bootstrap.Merge(m, src)
}
func (m *Bootstrap) XXX_Size() int {
	return xxx_messageInfo_Bootstrap.Size(m)
}
func (m *Bootstrap) XXX_DiscardUnknown() {
	xxx_messageInfo_Bootstrap.DiscardUnknown(m)
}

var xxx_messageInfo_Bootstrap proto.InternalMessageInfo

func (m *Bootstrap) GetNode() *core.Node {
	if m != nil {
		return m.Node
	}
	return nil
}

func (m *Bootstrap) GetStaticResources() *Bootstrap_StaticResources {
	if m != nil {
		return m.StaticResources
	}
	return nil
}

func (m *Bootstrap) GetDynamicResources() *Bootstrap_DynamicResources {
	if m != nil {
		return m.DynamicResources
	}
	return nil
}

func (m *Bootstrap) GetClusterManager() *ClusterManager {
	if m != nil {
		return m.ClusterManager
	}
	return nil
}

func (m *Bootstrap) GetHdsConfig() *core.ApiConfigSource {
	if m != nil {
		return m.HdsConfig
	}
	return nil
}

func (m *Bootstrap) GetFlagsPath() string {
	if m != nil {
		return m.FlagsPath
	}
	return ""
}

func (m *Bootstrap) GetStatsSinks() []*v2.StatsSink {
	if m != nil {
		return m.StatsSinks
	}
	return nil
}

func (m *Bootstrap) GetStatsConfig() *v2.StatsConfig {
	if m != nil {
		return m.StatsConfig
	}
	return nil
}

func (m *Bootstrap) GetStatsFlushInterval() *duration.Duration {
	if m != nil {
		return m.StatsFlushInterval
	}
	return nil
}

func (m *Bootstrap) GetWatchdog() *Watchdog {
	if m != nil {
		return m.Watchdog
	}
	return nil
}

func (m *Bootstrap) GetTracing() *v21.Tracing {
	if m != nil {
		return m.Tracing
	}
	return nil
}

// Deprecated: Do not use.
func (m *Bootstrap) GetRuntime() *Runtime {
	if m != nil {
		return m.Runtime
	}
	return nil
}

func (m *Bootstrap) GetLayeredRuntime() *LayeredRuntime {
	if m != nil {
		return m.LayeredRuntime
	}
	return nil
}

func (m *Bootstrap) GetAdmin() *Admin {
	if m != nil {
		return m.Admin
	}
	return nil
}

func (m *Bootstrap) GetOverloadManager() *v2alpha.OverloadManager {
	if m != nil {
		return m.OverloadManager
	}
	return nil
}

func (m *Bootstrap) GetEnableDispatcherStats() bool {
	if m != nil {
		return m.EnableDispatcherStats
	}
	return false
}

func (m *Bootstrap) GetHeaderPrefix() string {
	if m != nil {
		return m.HeaderPrefix
	}
	return ""
}

func (m *Bootstrap) GetStatsServerVersionOverride() *wrappers.UInt64Value {
	if m != nil {
		return m.StatsServerVersionOverride
	}
	return nil
}

type Bootstrap_StaticResources struct {
	// Static :ref:`Listeners <envoy_api_msg_Listener>`. These listeners are
	// available regardless of LDS configuration.
	Listeners []*v22.Listener `protobuf:"bytes,1,rep,name=listeners,proto3" json:"listeners,omitempty"`
	// If a network based configuration source is specified for :ref:`cds_config
	// <envoy_api_field_config.bootstrap.v2.Bootstrap.DynamicResources.cds_config>`, it's necessary
	// to have some initial cluster definitions available to allow Envoy to know
	// how to speak to the management server. These cluster definitions may not
	// use :ref:`EDS <arch_overview_dynamic_config_eds>` (i.e. they should be static
	// IP or DNS-based).
	Clusters []*v22.Cluster `protobuf:"bytes,2,rep,name=clusters,proto3" json:"clusters,omitempty"`
	// These static secrets can be used by :ref:`SdsSecretConfig
	// <envoy_api_msg_auth.SdsSecretConfig>`
	Secrets              []*auth.Secret `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

func (m *Bootstrap_StaticResources) Reset()         { *m = Bootstrap_StaticResources{} }
func (m *Bootstrap_StaticResources) String() string { return proto.CompactTextString(m) }
func (*Bootstrap_StaticResources) ProtoMessage()    {}
func (*Bootstrap_StaticResources) Descriptor() ([]byte, []int) {
	return fileDescriptor_f1197defdf9c5e6a, []int{0, 0}
}

func (m *Bootstrap_StaticResources) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Bootstrap_StaticResources.Unmarshal(m, b)
}
func (m *Bootstrap_StaticResources) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Bootstrap_StaticResources.Marshal(b, m, deterministic)
}
func (m *Bootstrap_StaticResources) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Bootstrap_StaticResources.Merge(m, src)
}
func (m *Bootstrap_StaticResources) XXX_Size() int {
	return xxx_messageInfo_Bootstrap_StaticResources.Size(m)
}
func (m *Bootstrap_StaticResources) XXX_DiscardUnknown() {
	xxx_messageInfo_Bootstrap_StaticResources.DiscardUnknown(m)
}

var xxx_messageInfo_Bootstrap_StaticResources proto.InternalMessageInfo

func (m *Bootstrap_StaticResources) GetListeners() []*v22.Listener {
	if m != nil {
		return m.Listeners
	}
	return nil
}

func (m *Bootstrap_StaticResources) GetClusters() []*v22.Cluster {
	if m != nil {
		return m.Clusters
	}
	return nil
}

func (m *Bootstrap_StaticResources) GetSecrets() []*auth.Secret {
	if m != nil {
		return m.Secrets
	}
	return nil
}

type Bootstrap_DynamicResources struct {
	// All :ref:`Listeners <envoy_api_msg_Listener>` are provided by a single
	// :ref:`LDS <arch_overview_dynamic_config_lds>` configuration source.
	LdsConfig *core.ConfigSource `protobuf:"bytes,1,opt,name=lds_config,json=ldsConfig,proto3" json:"lds_config,omitempty"`
	// All post-bootstrap :ref:`Cluster <envoy_api_msg_Cluster>` definitions are
	// provided by a single :ref:`CDS <arch_overview_dynamic_config_cds>`
	// configuration source.
	CdsConfig *core.ConfigSource `protobuf:"bytes,2,opt,name=cds_config,json=cdsConfig,proto3" json:"cds_config,omitempty"`
	// A single :ref:`ADS <config_overview_v2_ads>` source may be optionally
	// specified. This must have :ref:`api_type
	// <envoy_api_field_core.ApiConfigSource.api_type>` :ref:`GRPC
	// <envoy_api_enum_value_core.ApiConfigSource.ApiType.GRPC>`. Only
	// :ref:`ConfigSources <envoy_api_msg_core.ConfigSource>` that have
	// the :ref:`ads <envoy_api_field_core.ConfigSource.ads>` field set will be
	// streamed on the ADS channel.
	AdsConfig            *core.ApiConfigSource `protobuf:"bytes,3,opt,name=ads_config,json=adsConfig,proto3" json:"ads_config,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *Bootstrap_DynamicResources) Reset()         { *m = Bootstrap_DynamicResources{} }
func (m *Bootstrap_DynamicResources) String() string { return proto.CompactTextString(m) }
func (*Bootstrap_DynamicResources) ProtoMessage()    {}
func (*Bootstrap_DynamicResources) Descriptor() ([]byte, []int) {
	return fileDescriptor_f1197defdf9c5e6a, []int{0, 1}
}

func (m *Bootstrap_DynamicResources) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Bootstrap_DynamicResources.Unmarshal(m, b)
}
func (m *Bootstrap_DynamicResources) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Bootstrap_DynamicResources.Marshal(b, m, deterministic)
}
func (m *Bootstrap_DynamicResources) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Bootstrap_DynamicResources.Merge(m, src)
}
func (m *Bootstrap_DynamicResources) XXX_Size() int {
	return xxx_messageInfo_Bootstrap_DynamicResources.Size(m)
}
func (m *Bootstrap_DynamicResources) XXX_DiscardUnknown() {
	xxx_messageInfo_Bootstrap_DynamicResources.DiscardUnknown(m)
}

var xxx_messageInfo_Bootstrap_DynamicResources proto.InternalMessageInfo

func (m *Bootstrap_DynamicResources) GetLdsConfig() *core.ConfigSource {
	if m != nil {
		return m.LdsConfig
	}
	return nil
}

func (m *Bootstrap_DynamicResources) GetCdsConfig() *core.ConfigSource {
	if m != nil {
		return m.CdsConfig
	}
	return nil
}

func (m *Bootstrap_DynamicResources) GetAdsConfig() *core.ApiConfigSource {
	if m != nil {
		return m.AdsConfig
	}
	return nil
}

// Administration interface :ref:`operations documentation
// <operations_admin_interface>`.
type Admin struct {
	// The path to write the access log for the administration server. If no
	// access log is desired specify ‘/dev/null’. This is only required if
	// :ref:`address <envoy_api_field_config.bootstrap.v2.Admin.address>` is set.
	AccessLogPath string `protobuf:"bytes,1,opt,name=access_log_path,json=accessLogPath,proto3" json:"access_log_path,omitempty"`
	// The cpu profiler output path for the administration server. If no profile
	// path is specified, the default is ‘/var/log/envoy/envoy.prof’.
	ProfilePath string `protobuf:"bytes,2,opt,name=profile_path,json=profilePath,proto3" json:"profile_path,omitempty"`
	// The TCP address that the administration server will listen on.
	// If not specified, Envoy will not start an administration server.
	Address *core.Address `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"`
	// Additional socket options that may not be present in Envoy source code or
	// precompiled binaries.
	SocketOptions        []*core.SocketOption `protobuf:"bytes,4,rep,name=socket_options,json=socketOptions,proto3" json:"socket_options,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *Admin) Reset()         { *m = Admin{} }
func (m *Admin) String() string { return proto.CompactTextString(m) }
func (*Admin) ProtoMessage()    {}
func (*Admin) Descriptor() ([]byte, []int) {
	return fileDescriptor_f1197defdf9c5e6a, []int{1}
}

func (m *Admin) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Admin.Unmarshal(m, b)
}
func (m *Admin) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Admin.Marshal(b, m, deterministic)
}
func (m *Admin) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Admin.Merge(m, src)
}
func (m *Admin) XXX_Size() int {
	return xxx_messageInfo_Admin.Size(m)
}
func (m *Admin) XXX_DiscardUnknown() {
	xxx_messageInfo_Admin.DiscardUnknown(m)
}

var xxx_messageInfo_Admin proto.InternalMessageInfo

func (m *Admin) GetAccessLogPath() string {
	if m != nil {
		return m.AccessLogPath
	}
	return ""
}

func (m *Admin) GetProfilePath() string {
	if m != nil {
		return m.ProfilePath
	}
	return ""
}

func (m *Admin) GetAddress() *core.Address {
	if m != nil {
		return m.Address
	}
	return nil
}

func (m *Admin) GetSocketOptions() []*core.SocketOption {
	if m != nil {
		return m.SocketOptions
	}
	return nil
}

// Cluster manager :ref:`architecture overview <arch_overview_cluster_manager>`.
type ClusterManager struct {
	// Name of the local cluster (i.e., the cluster that owns the Envoy running
	// this configuration). In order to enable :ref:`zone aware routing
	// <arch_overview_load_balancing_zone_aware_routing>` this option must be set.
	// If *local_cluster_name* is defined then :ref:`clusters
	// <envoy_api_msg_Cluster>` must be defined in the :ref:`Bootstrap
	// static cluster resources
	// <envoy_api_field_config.bootstrap.v2.Bootstrap.StaticResources.clusters>`. This is unrelated to
	// the :option:`--service-cluster` option which does not `affect zone aware
	// routing <https://github.com/envoyproxy/envoy/issues/774>`_.
	LocalClusterName string `protobuf:"bytes,1,opt,name=local_cluster_name,json=localClusterName,proto3" json:"local_cluster_name,omitempty"`
	// Optional global configuration for outlier detection.
	OutlierDetection *ClusterManager_OutlierDetection `protobuf:"bytes,2,opt,name=outlier_detection,json=outlierDetection,proto3" json:"outlier_detection,omitempty"`
	// Optional configuration used to bind newly established upstream connections.
	// This may be overridden on a per-cluster basis by upstream_bind_config in the cds_config.
	UpstreamBindConfig *core.BindConfig `protobuf:"bytes,3,opt,name=upstream_bind_config,json=upstreamBindConfig,proto3" json:"upstream_bind_config,omitempty"`
	// A management server endpoint to stream load stats to via
	// *StreamLoadStats*. This must have :ref:`api_type
	// <envoy_api_field_core.ApiConfigSource.api_type>` :ref:`GRPC
	// <envoy_api_enum_value_core.ApiConfigSource.ApiType.GRPC>`.
	LoadStatsConfig      *core.ApiConfigSource `protobuf:"bytes,4,opt,name=load_stats_config,json=loadStatsConfig,proto3" json:"load_stats_config,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *ClusterManager) Reset()         { *m = ClusterManager{} }
func (m *ClusterManager) String() string { return proto.CompactTextString(m) }
func (*ClusterManager) ProtoMessage()    {}
func (*ClusterManager) Descriptor() ([]byte, []int) {
	return fileDescriptor_f1197defdf9c5e6a, []int{2}
}

func (m *ClusterManager) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClusterManager.Unmarshal(m, b)
}
func (m *ClusterManager) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClusterManager.Marshal(b, m, deterministic)
}
func (m *ClusterManager) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClusterManager.Merge(m, src)
}
func (m *ClusterManager) XXX_Size() int {
	return xxx_messageInfo_ClusterManager.Size(m)
}
func (m *ClusterManager) XXX_DiscardUnknown() {
	xxx_messageInfo_ClusterManager.DiscardUnknown(m)
}

var xxx_messageInfo_ClusterManager proto.InternalMessageInfo

func (m *ClusterManager) GetLocalClusterName() string {
	if m != nil {
		return m.LocalClusterName
	}
	return ""
}

func (m *ClusterManager) GetOutlierDetection() *ClusterManager_OutlierDetection {
	if m != nil {
		return m.OutlierDetection
	}
	return nil
}

func (m *ClusterManager) GetUpstreamBindConfig() *core.BindConfig {
	if m != nil {
		return m.UpstreamBindConfig
	}
	return nil
}

func (m *ClusterManager) GetLoadStatsConfig() *core.ApiConfigSource {
	if m != nil {
		return m.LoadStatsConfig
	}
	return nil
}

type ClusterManager_OutlierDetection struct {
	// Specifies the path to the outlier event log.
	EventLogPath         string   `protobuf:"bytes,1,opt,name=event_log_path,json=eventLogPath,proto3" json:"event_log_path,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ClusterManager_OutlierDetection) Reset()         { *m = ClusterManager_OutlierDetection{} }
func (m *ClusterManager_OutlierDetection) String() string { return proto.CompactTextString(m) }
func (*ClusterManager_OutlierDetection) ProtoMessage()    {}
func (*ClusterManager_OutlierDetection) Descriptor() ([]byte, []int) {
	return fileDescriptor_f1197defdf9c5e6a, []int{2, 0}
}

func (m *ClusterManager_OutlierDetection) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClusterManager_OutlierDetection.Unmarshal(m, b)
}
func (m *ClusterManager_OutlierDetection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClusterManager_OutlierDetection.Marshal(b, m, deterministic)
}
func (m *ClusterManager_OutlierDetection) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClusterManager_OutlierDetection.Merge(m, src)
}
func (m *ClusterManager_OutlierDetection) XXX_Size() int {
	return xxx_messageInfo_ClusterManager_OutlierDetection.Size(m)
}
func (m *ClusterManager_OutlierDetection) XXX_DiscardUnknown() {
	xxx_messageInfo_ClusterManager_OutlierDetection.DiscardUnknown(m)
}

var xxx_messageInfo_ClusterManager_OutlierDetection proto.InternalMessageInfo

func (m *ClusterManager_OutlierDetection) GetEventLogPath() string {
	if m != nil {
		return m.EventLogPath
	}
	return ""
}

// Envoy process watchdog configuration. When configured, this monitors for
// nonresponsive threads and kills the process after the configured thresholds.
// See the :ref:`watchdog documentation <operations_performance_watchdog>` for more information.
type Watchdog struct {
	// The duration after which Envoy counts a nonresponsive thread in the
	// *watchdog_miss* statistic. If not specified the default is 200ms.
	MissTimeout *duration.Duration `protobuf:"bytes,1,opt,name=miss_timeout,json=missTimeout,proto3" json:"miss_timeout,omitempty"`
	// The duration after which Envoy counts a nonresponsive thread in the
	// *watchdog_mega_miss* statistic. If not specified the default is
	// 1000ms.
	MegamissTimeout *duration.Duration `protobuf:"bytes,2,opt,name=megamiss_timeout,json=megamissTimeout,proto3" json:"megamiss_timeout,omitempty"`
	// If a watched thread has been nonresponsive for this duration, assume a
	// programming error and kill the entire Envoy process. Set to 0 to disable
	// kill behavior. If not specified the default is 0 (disabled).
	KillTimeout *duration.Duration `protobuf:"bytes,3,opt,name=kill_timeout,json=killTimeout,proto3" json:"kill_timeout,omitempty"`
	// If at least two watched threads have been nonresponsive for at least this
	// duration assume a true deadlock and kill the entire Envoy process. Set to 0
	// to disable this behavior. If not specified the default is 0 (disabled).
	MultikillTimeout     *duration.Duration `protobuf:"bytes,4,opt,name=multikill_timeout,json=multikillTimeout,proto3" json:"multikill_timeout,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *Watchdog) Reset()         { *m = Watchdog{} }
func (m *Watchdog) String() string { return proto.CompactTextString(m) }
func (*Watchdog) ProtoMessage()    {}
func (*Watchdog) Descriptor() ([]byte, []int) {
	return fileDescriptor_f1197defdf9c5e6a, []int{3}
}

func (m *Watchdog) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Watchdog.Unmarshal(m, b)
}
func (m *Watchdog) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Watchdog.Marshal(b, m, deterministic)
}
func (m *Watchdog) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Watchdog.Merge(m, src)
}
func (m *Watchdog) XXX_Size() int {
	return xxx_messageInfo_Watchdog.Size(m)
}
func (m *Watchdog) XXX_DiscardUnknown() {
	xxx_messageInfo_Watchdog.DiscardUnknown(m)
}

var xxx_messageInfo_Watchdog proto.InternalMessageInfo

func (m *Watchdog) GetMissTimeout() *duration.Duration {
	if m != nil {
		return m.MissTimeout
	}
	return nil
}

func (m *Watchdog) GetMegamissTimeout() *duration.Duration {
	if m != nil {
		return m.MegamissTimeout
	}
	return nil
}

func (m *Watchdog) GetKillTimeout() *duration.Duration {
	if m != nil {
		return m.KillTimeout
	}
	return nil
}

func (m *Watchdog) GetMultikillTimeout() *duration.Duration {
	if m != nil {
		return m.MultikillTimeout
	}
	return nil
}

// Runtime :ref:`configuration overview <config_runtime>` (deprecated).
type Runtime struct {
	// The implementation assumes that the file system tree is accessed via a
	// symbolic link. An atomic link swap is used when a new tree should be
	// switched to. This parameter specifies the path to the symbolic link. Envoy
	// will watch the location for changes and reload the file system tree when
	// they happen. If this parameter is not set, there will be no disk based
	// runtime.
	SymlinkRoot string `protobuf:"bytes,1,opt,name=symlink_root,json=symlinkRoot,proto3" json:"symlink_root,omitempty"`
	// Specifies the subdirectory to load within the root directory. This is
	// useful if multiple systems share the same delivery mechanism. Envoy
	// configuration elements can be contained in a dedicated subdirectory.
	Subdirectory string `protobuf:"bytes,2,opt,name=subdirectory,proto3" json:"subdirectory,omitempty"`
	// Specifies an optional subdirectory to load within the root directory. If
	// specified and the directory exists, configuration values within this
	// directory will override those found in the primary subdirectory. This is
	// useful when Envoy is deployed across many different types of servers.
	// Sometimes it is useful to have a per service cluster directory for runtime
	// configuration. See below for exactly how the override directory is used.
	OverrideSubdirectory string `protobuf:"bytes,3,opt,name=override_subdirectory,json=overrideSubdirectory,proto3" json:"override_subdirectory,omitempty"`
	// Static base runtime. This will be :ref:`overridden
	// <config_runtime_layering>` by other runtime layers, e.g.
	// disk or admin. This follows the :ref:`runtime protobuf JSON representation
	// encoding <config_runtime_proto_json>`.
	Base                 *_struct.Struct `protobuf:"bytes,4,opt,name=base,proto3" json:"base,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *Runtime) Reset()         { *m = Runtime{} }
func (m *Runtime) String() string { return proto.CompactTextString(m) }
func (*Runtime) ProtoMessage()    {}
func (*Runtime) Descriptor() ([]byte, []int) {
	return fileDescriptor_f1197defdf9c5e6a, []int{4}
}

func (m *Runtime) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Runtime.Unmarshal(m, b)
}
func (m *Runtime) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Runtime.Marshal(b, m, deterministic)
}
func (m *Runtime) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Runtime.Merge(m, src)
}
func (m *Runtime) XXX_Size() int {
	return xxx_messageInfo_Runtime.Size(m)
}
func (m *Runtime) XXX_DiscardUnknown() {
	xxx_messageInfo_Runtime.DiscardUnknown(m)
}

var xxx_messageInfo_Runtime proto.InternalMessageInfo

func (m *Runtime) GetSymlinkRoot() string {
	if m != nil {
		return m.SymlinkRoot
	}
	return ""
}

func (m *Runtime) GetSubdirectory() string {
	if m != nil {
		return m.Subdirectory
	}
	return ""
}

func (m *Runtime) GetOverrideSubdirectory() string {
	if m != nil {
		return m.OverrideSubdirectory
	}
	return ""
}

func (m *Runtime) GetBase() *_struct.Struct {
	if m != nil {
		return m.Base
	}
	return nil
}

// [#next-free-field: 6]
type RuntimeLayer struct {
	// Descriptive name for the runtime layer. This is only used for the runtime
	// :http:get:`/runtime` output.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Types that are valid to be assigned to LayerSpecifier:
	//	*RuntimeLayer_StaticLayer
	//	*RuntimeLayer_DiskLayer_
	//	*RuntimeLayer_AdminLayer_
	//	*RuntimeLayer_RtdsLayer_
	LayerSpecifier       isRuntimeLayer_LayerSpecifier `protobuf_oneof:"layer_specifier"`
	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
	XXX_unrecognized     []byte                        `json:"-"`
	XXX_sizecache        int32                         `json:"-"`
}

func (m *RuntimeLayer) Reset()         { *m = RuntimeLayer{} }
func (m *RuntimeLayer) String() string { return proto.CompactTextString(m) }
func (*RuntimeLayer) ProtoMessage()    {}
func (*RuntimeLayer) Descriptor() ([]byte, []int) {
	return fileDescriptor_f1197defdf9c5e6a, []int{5}
}

func (m *RuntimeLayer) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RuntimeLayer.Unmarshal(m, b)
}
func (m *RuntimeLayer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RuntimeLayer.Marshal(b, m, deterministic)
}
func (m *RuntimeLayer) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RuntimeLayer.Merge(m, src)
}
func (m *RuntimeLayer) XXX_Size() int {
	return xxx_messageInfo_RuntimeLayer.Size(m)
}
func (m *RuntimeLayer) XXX_DiscardUnknown() {
	xxx_messageInfo_RuntimeLayer.DiscardUnknown(m)
}

var xxx_messageInfo_RuntimeLayer proto.InternalMessageInfo

func (m *RuntimeLayer) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isRuntimeLayer_LayerSpecifier interface {
	isRuntimeLayer_LayerSpecifier()
}

type RuntimeLayer_StaticLayer struct {
	StaticLayer *_struct.Struct `protobuf:"bytes,2,opt,name=static_layer,json=staticLayer,proto3,oneof"`
}

type RuntimeLayer_DiskLayer_ struct {
	DiskLayer *RuntimeLayer_DiskLayer `protobuf:"bytes,3,opt,name=disk_layer,json=diskLayer,proto3,oneof"`
}

type RuntimeLayer_AdminLayer_ struct {
	AdminLayer *RuntimeLayer_AdminLayer `protobuf:"bytes,4,opt,name=admin_layer,json=adminLayer,proto3,oneof"`
}

type RuntimeLayer_RtdsLayer_ struct {
	RtdsLayer *RuntimeLayer_RtdsLayer `protobuf:"bytes,5,opt,name=rtds_layer,json=rtdsLayer,proto3,oneof"`
}

func (*RuntimeLayer_StaticLayer) isRuntimeLayer_LayerSpecifier() {}

func (*RuntimeLayer_DiskLayer_) isRuntimeLayer_LayerSpecifier() {}

func (*RuntimeLayer_AdminLayer_) isRuntimeLayer_LayerSpecifier() {}

func (*RuntimeLayer_RtdsLayer_) isRuntimeLayer_LayerSpecifier() {}

func (m *RuntimeLayer) GetLayerSpecifier() isRuntimeLayer_LayerSpecifier {
	if m != nil {
		return m.LayerSpecifier
	}
	return nil
}

func (m *RuntimeLayer) GetStaticLayer() *_struct.Struct {
	if x, ok := m.GetLayerSpecifier().(*RuntimeLayer_StaticLayer); ok {
		return x.StaticLayer
	}
	return nil
}

func (m *RuntimeLayer) GetDiskLayer() *RuntimeLayer_DiskLayer {
	if x, ok := m.GetLayerSpecifier().(*RuntimeLayer_DiskLayer_); ok {
		return x.DiskLayer
	}
	return nil
}

func (m *RuntimeLayer) GetAdminLayer() *RuntimeLayer_AdminLayer {
	if x, ok := m.GetLayerSpecifier().(*RuntimeLayer_AdminLayer_); ok {
		return x.AdminLayer
	}
	return nil
}

func (m *RuntimeLayer) GetRtdsLayer() *RuntimeLayer_RtdsLayer {
	if x, ok := m.GetLayerSpecifier().(*RuntimeLayer_RtdsLayer_); ok {
		return x.RtdsLayer
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*RuntimeLayer) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*RuntimeLayer_StaticLayer)(nil),
		(*RuntimeLayer_DiskLayer_)(nil),
		(*RuntimeLayer_AdminLayer_)(nil),
		(*RuntimeLayer_RtdsLayer_)(nil),
	}
}

// :ref:`Disk runtime <config_runtime_local_disk>` layer.
type RuntimeLayer_DiskLayer struct {
	// The implementation assumes that the file system tree is accessed via a
	// symbolic link. An atomic link swap is used when a new tree should be
	// switched to. This parameter specifies the path to the symbolic link.
	// Envoy will watch the location for changes and reload the file system tree
	// when they happen. See documentation on runtime :ref:`atomicity
	// <config_runtime_atomicity>` for further details on how reloads are
	// treated.
	SymlinkRoot string `protobuf:"bytes,1,opt,name=symlink_root,json=symlinkRoot,proto3" json:"symlink_root,omitempty"`
	// Specifies the subdirectory to load within the root directory. This is
	// useful if multiple systems share the same delivery mechanism. Envoy
	// configuration elements can be contained in a dedicated subdirectory.
	Subdirectory string `protobuf:"bytes,3,opt,name=subdirectory,proto3" json:"subdirectory,omitempty"`
	// :ref:`Append <config_runtime_local_disk_service_cluster_subdirs>` the
	// service cluster to the path under symlink root.
	AppendServiceCluster bool     `protobuf:"varint,2,opt,name=append_service_cluster,json=appendServiceCluster,proto3" json:"append_service_cluster,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RuntimeLayer_DiskLayer) Reset()         { *m = RuntimeLayer_DiskLayer{} }
func (m *RuntimeLayer_DiskLayer) String() string { return proto.CompactTextString(m) }
func (*RuntimeLayer_DiskLayer) ProtoMessage()    {}
func (*RuntimeLayer_DiskLayer) Descriptor() ([]byte, []int) {
	return fileDescriptor_f1197defdf9c5e6a, []int{5, 0}
}

func (m *RuntimeLayer_DiskLayer) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RuntimeLayer_DiskLayer.Unmarshal(m, b)
}
func (m *RuntimeLayer_DiskLayer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RuntimeLayer_DiskLayer.Marshal(b, m, deterministic)
}
func (m *RuntimeLayer_DiskLayer) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RuntimeLayer_DiskLayer.Merge(m, src)
}
func (m *RuntimeLayer_DiskLayer) XXX_Size() int {
	return xxx_messageInfo_RuntimeLayer_DiskLayer.Size(m)
}
func (m *RuntimeLayer_DiskLayer) XXX_DiscardUnknown() {
	xxx_messageInfo_RuntimeLayer_DiskLayer.DiscardUnknown(m)
}

var xxx_messageInfo_RuntimeLayer_DiskLayer proto.InternalMessageInfo

func (m *RuntimeLayer_DiskLayer) GetSymlinkRoot() string {
	if m != nil {
		return m.SymlinkRoot
	}
	return ""
}

func (m *RuntimeLayer_DiskLayer) GetSubdirectory() string {
	if m != nil {
		return m.Subdirectory
	}
	return ""
}

func (m *RuntimeLayer_DiskLayer) GetAppendServiceCluster() bool {
	if m != nil {
		return m.AppendServiceCluster
	}
	return false
}

// :ref:`Admin console runtime <config_runtime_admin>` layer.
type RuntimeLayer_AdminLayer struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RuntimeLayer_AdminLayer) Reset()         { *m = RuntimeLayer_AdminLayer{} }
func (m *RuntimeLayer_AdminLayer) String() string { return proto.CompactTextString(m) }
func (*RuntimeLayer_AdminLayer) ProtoMessage()    {}
func (*RuntimeLayer_AdminLayer) Descriptor() ([]byte, []int) {
	return fileDescriptor_f1197defdf9c5e6a, []int{5, 1}
}

func (m *RuntimeLayer_AdminLayer) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RuntimeLayer_AdminLayer.Unmarshal(m, b)
}
func (m *RuntimeLayer_AdminLayer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RuntimeLayer_AdminLayer.Marshal(b, m, deterministic)
}
func (m *RuntimeLayer_AdminLayer) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RuntimeLayer_AdminLayer.Merge(m, src)
}
func (m *RuntimeLayer_AdminLayer) XXX_Size() int {
	return xxx_messageInfo_RuntimeLayer_AdminLayer.Size(m)
}
func (m *RuntimeLayer_AdminLayer) XXX_DiscardUnknown() {
	xxx_messageInfo_RuntimeLayer_AdminLayer.DiscardUnknown(m)
}

var xxx_messageInfo_RuntimeLayer_AdminLayer proto.InternalMessageInfo

// :ref:`Runtime Discovery Service (RTDS) <config_runtime_rtds>` layer.
type RuntimeLayer_RtdsLayer struct {
	// Resource to subscribe to at *rtds_config* for the RTDS layer.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// RTDS configuration source.
	RtdsConfig           *core.ConfigSource `protobuf:"bytes,2,opt,name=rtds_config,json=rtdsConfig,proto3" json:"rtds_config,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *RuntimeLayer_RtdsLayer) Reset()         { *m = RuntimeLayer_RtdsLayer{} }
func (m *RuntimeLayer_RtdsLayer) String() string { return proto.CompactTextString(m) }
func (*RuntimeLayer_RtdsLayer) ProtoMessage()    {}
func (*RuntimeLayer_RtdsLayer) Descriptor() ([]byte, []int) {
	return fileDescriptor_f1197defdf9c5e6a, []int{5, 2}
}

func (m *RuntimeLayer_RtdsLayer) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RuntimeLayer_RtdsLayer.Unmarshal(m, b)
}
func (m *RuntimeLayer_RtdsLayer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RuntimeLayer_RtdsLayer.Marshal(b, m, deterministic)
}
func (m *RuntimeLayer_RtdsLayer) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RuntimeLayer_RtdsLayer.Merge(m, src)
}
func (m *RuntimeLayer_RtdsLayer) XXX_Size() int {
	return xxx_messageInfo_RuntimeLayer_RtdsLayer.Size(m)
}
func (m *RuntimeLayer_RtdsLayer) XXX_DiscardUnknown() {
	xxx_messageInfo_RuntimeLayer_RtdsLayer.DiscardUnknown(m)
}

var xxx_messageInfo_RuntimeLayer_RtdsLayer proto.InternalMessageInfo

func (m *RuntimeLayer_RtdsLayer) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *RuntimeLayer_RtdsLayer) GetRtdsConfig() *core.ConfigSource {
	if m != nil {
		return m.RtdsConfig
	}
	return nil
}

// Runtime :ref:`configuration overview <config_runtime>`.
type LayeredRuntime struct {
	// The :ref:`layers <config_runtime_layering>` of the runtime. This is ordered
	// such that later layers in the list overlay earlier entries.
	Layers               []*RuntimeLayer `protobuf:"bytes,1,rep,name=layers,proto3" json:"layers,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *LayeredRuntime) Reset()         { *m = LayeredRuntime{} }
func (m *LayeredRuntime) String() string { return proto.CompactTextString(m) }
func (*LayeredRuntime) ProtoMessage()    {}
func (*LayeredRuntime) Descriptor() ([]byte, []int) {
	return fileDescriptor_f1197defdf9c5e6a, []int{6}
}

func (m *LayeredRuntime) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_LayeredRuntime.Unmarshal(m, b)
}
func (m *LayeredRuntime) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_LayeredRuntime.Marshal(b, m, deterministic)
}
func (m *LayeredRuntime) XXX_Merge(src proto.Message) {
	xxx_messageInfo_LayeredRuntime.Merge(m, src)
}
func (m *LayeredRuntime) XXX_Size() int {
	return xxx_messageInfo_LayeredRuntime.Size(m)
}
func (m *LayeredRuntime) XXX_DiscardUnknown() {
	xxx_messageInfo_LayeredRuntime.DiscardUnknown(m)
}

var xxx_messageInfo_LayeredRuntime proto.InternalMessageInfo

func (m *LayeredRuntime) GetLayers() []*RuntimeLayer {
	if m != nil {
		return m.Layers
	}
	return nil
}

func init() {
	proto.RegisterType((*Bootstrap)(nil), "envoy.config.bootstrap.v2.Bootstrap")
	proto.RegisterType((*Bootstrap_StaticResources)(nil), "envoy.config.bootstrap.v2.Bootstrap.StaticResources")
	proto.RegisterType((*Bootstrap_DynamicResources)(nil), "envoy.config.bootstrap.v2.Bootstrap.DynamicResources")
	proto.RegisterType((*Admin)(nil), "envoy.config.bootstrap.v2.Admin")
	proto.RegisterType((*ClusterManager)(nil), "envoy.config.bootstrap.v2.ClusterManager")
	proto.RegisterType((*ClusterManager_OutlierDetection)(nil), "envoy.config.bootstrap.v2.ClusterManager.OutlierDetection")
	proto.RegisterType((*Watchdog)(nil), "envoy.config.bootstrap.v2.Watchdog")
	proto.RegisterType((*Runtime)(nil), "envoy.config.bootstrap.v2.Runtime")
	proto.RegisterType((*RuntimeLayer)(nil), "envoy.config.bootstrap.v2.RuntimeLayer")
	proto.RegisterType((*RuntimeLayer_DiskLayer)(nil), "envoy.config.bootstrap.v2.RuntimeLayer.DiskLayer")
	proto.RegisterType((*RuntimeLayer_AdminLayer)(nil), "envoy.config.bootstrap.v2.RuntimeLayer.AdminLayer")
	proto.RegisterType((*RuntimeLayer_RtdsLayer)(nil), "envoy.config.bootstrap.v2.RuntimeLayer.RtdsLayer")
	proto.RegisterType((*LayeredRuntime)(nil), "envoy.config.bootstrap.v2.LayeredRuntime")
}

func init() {
	proto.RegisterFile("envoy/config/bootstrap/v2/bootstrap.proto", fileDescriptor_f1197defdf9c5e6a)
}

var fileDescriptor_f1197defdf9c5e6a = []byte{
	// 1528 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0xdd, 0x6e, 0x23, 0xb7,
	0x15, 0xce, 0x48, 0xf2, 0x5a, 0x3a, 0x92, 0x25, 0x99, 0xf5, 0xda, 0x13, 0x75, 0x37, 0xf1, 0x6a,
	0xd3, 0x66, 0x83, 0x04, 0x23, 0x44, 0xeb, 0x2e, 0x82, 0x36, 0x4d, 0x62, 0xad, 0xb1, 0x4d, 0x82,
	0xed, 0xda, 0xa5, 0x92, 0x14, 0xbd, 0xe9, 0x80, 0x9a, 0xa1, 0x25, 0xc2, 0xa3, 0xe1, 0x80, 0xa4,
	0x94, 0xf8, 0xb6, 0xe8, 0x45, 0x1f, 0xa0, 0x37, 0x7d, 0x85, 0xa2, 0x40, 0x81, 0x3e, 0x41, 0x1f,
	0xa1, 0xf7, 0x7d, 0x91, 0x62, 0xd1, 0x8b, 0x62, 0xf8, 0x33, 0xf2, 0xd8, 0xf2, 0xcf, 0xf6, 0x6e,
	0x78, 0xf8, 0x7d, 0xdf, 0x39, 0x24, 0x0f, 0xcf, 0xe1, 0xc0, 0x07, 0x34, 0x5d, 0xf2, 0xf3, 0x41,
	0xc4, 0xd3, 0x53, 0x36, 0x1d, 0x4c, 0x38, 0x57, 0x52, 0x09, 0x92, 0x0d, 0x96, 0xc3, 0xd5, 0x20,
	0xc8, 0x04, 0x57, 0x1c, 0xbd, 0xad, 0xa1, 0x81, 0x81, 0x06, 0xab, 0xd9, 0xe5, 0xb0, 0xf7, 0xc0,
	0xa8, 0x90, 0x8c, 0xe5, 0x44, 0xb2, 0x50, 0xb3, 0x41, 0x44, 0x85, 0x32, 0xc4, 0xde, 0x6e, 0x69,
	0x36, 0x8a, 0xa5, 0xb5, 0xbf, 0x5b, 0xb6, 0x73, 0x41, 0x07, 0x24, 0x8e, 0x05, 0x95, 0x0e, 0xf0,
	0xe0, 0x2a, 0x60, 0x42, 0x24, 0xb5, 0xb3, 0x3f, 0xb9, 0x3a, 0x6b, 0x62, 0x0b, 0x25, 0x5f, 0x88,
	0x88, 0xae, 0xf5, 0x9e, 0x14, 0xde, 0x1f, 0x97, 0x56, 0x3e, 0xa7, 0x4a, 0xb0, 0x48, 0xe6, 0x10,
	0xa9, 0x88, 0x72, 0xa0, 0x8f, 0x4a, 0x20, 0xbe, 0xa4, 0x22, 0xe1, 0x24, 0x1e, 0x2c, 0x87, 0x24,
	0xc9, 0x66, 0xa4, 0x30, 0x58, 0xf4, 0xa3, 0x12, 0x5a, 0x09, 0x12, 0xd1, 0x5c, 0x50, 0x7f, 0x58,
	0xc8, 0x3b, 0x53, 0xce, 0xa7, 0x09, 0x1d, 0xe8, 0xd1, 0x64, 0x71, 0x3a, 0x88, 0x17, 0x82, 0x28,
	0xc6, 0x53, 0xb7, 0xe4, 0xcb, 0xf3, 0x52, 0x89, 0x45, 0xa4, 0xae, 0x63, 0x7f, 0x2f, 0x48, 0x96,
	0x51, 0xe1, 0xc2, 0xdd, 0x5b, 0x92, 0x84, 0xc5, 0x44, 0xd1, 0x81, 0xfb, 0x30, 0x13, 0xfd, 0xbf,
	0x6c, 0x41, 0x63, 0xe4, 0x4e, 0x0c, 0x7d, 0x08, 0xb5, 0x94, 0xc7, 0xd4, 0xf7, 0xf6, 0xbd, 0x27,
	0xcd, 0xe1, 0x5e, 0x60, 0x0e, 0x96, 0x64, 0x2c, 0x58, 0x0e, 0x83, 0x7c, 0x23, 0x83, 0x57, 0x3c,
	0xa6, 0x58, 0x83, 0x50, 0x08, 0xdd, 0x7c, 0x47, 0x58, 0x14, 0x0a, 0x6a, 0x36, 0x56, 0xfa, 0x15,
	0x4d, 0x3c, 0x08, 0xae, 0xcd, 0x88, 0xa0, 0x70, 0x16, 0x8c, 0x35, 0x19, 0x3b, 0x2e, 0xee, 0xc8,
	0xb2, 0x01, 0x4d, 0x60, 0x3b, 0x3e, 0x4f, 0xc9, 0xbc, 0xe4, 0xa1, 0xaa, 0x3d, 0xfc, 0xec, 0x4e,
	0x1e, 0x8e, 0x0c, 0x7b, 0xe5, 0xa2, 0x1b, 0x5f, 0xb2, 0x20, 0x0c, 0x9d, 0x28, 0x59, 0x48, 0x45,
	0x45, 0x38, 0x27, 0x29, 0x99, 0x52, 0xe1, 0xd7, 0xb4, 0x87, 0x0f, 0x6e, 0xf0, 0xf0, 0xdc, 0x30,
	0x7e, 0x6d, 0x08, 0xb8, 0x1d, 0x95, 0xc6, 0xe8, 0x10, 0x60, 0x16, 0xcb, 0xd0, 0x30, 0xfd, 0xb6,
	0x96, 0xeb, 0xaf, 0xd9, 0xcb, 0xc3, 0x8c, 0x3d, 0xd7, 0x98, 0xb1, 0x0e, 0x06, 0x37, 0x66, 0xb1,
	0x34, 0x06, 0xf4, 0x10, 0xe0, 0x34, 0x21, 0x53, 0x19, 0x66, 0x44, 0xcd, 0xfc, 0x8d, 0x7d, 0xef,
	0x49, 0x03, 0x37, 0xb4, 0xe5, 0x84, 0xa8, 0x19, 0x7a, 0x0e, 0x4d, 0x9d, 0x8c, 0xa1, 0x64, 0xe9,
	0x99, 0xf4, 0xef, 0xed, 0x57, 0x2f, 0xb8, 0xb0, 0x11, 0xdb, 0xc4, 0xcd, 0xbd, 0xe5, 0x3b, 0x2d,
	0xc7, 0x2c, 0x3d, 0xc3, 0x20, 0xdd, 0xa7, 0x44, 0xbf, 0x82, 0x96, 0x11, 0xb1, 0x81, 0x6e, 0xe9,
	0x40, 0xdf, 0xbb, 0x59, 0xc5, 0xc4, 0x87, 0x8d, 0x7b, 0x1b, 0xec, 0xef, 0x61, 0xc7, 0x08, 0x9d,
	0x26, 0x0b, 0x39, 0x0b, 0x59, 0xaa, 0xa8, 0x58, 0x92, 0xc4, 0xdf, 0xd4, 0x82, 0x6f, 0x07, 0x26,
	0x37, 0x03, 0x97, 0x9b, 0xc1, 0x91, 0xcd, 0xec, 0xd1, 0xf6, 0xeb, 0x51, 0xfb, 0xaf, 0x5e, 0xb3,
	0x57, 0xad, 0xff, 0xad, 0x32, 0xac, 0x75, 0xff, 0xf9, 0xc7, 0x5f, 0x62, 0xa4, 0x95, 0x5e, 0xe4,
	0x42, 0x5f, 0x59, 0x1d, 0xf4, 0x39, 0xd4, 0xbf, 0x27, 0x2a, 0x9a, 0xc5, 0x7c, 0xea, 0xd7, 0xb5,
	0xe6, 0xe3, 0x1b, 0x0e, 0xe7, 0xb7, 0x16, 0x8a, 0x0b, 0x12, 0xfa, 0x04, 0x36, 0xf3, 0xab, 0xc6,
	0xd2, 0xa9, 0xdf, 0xd0, 0xfc, 0x77, 0xca, 0x7c, 0x73, 0x0f, 0x97, 0xc3, 0xe0, 0x1b, 0x83, 0xc2,
	0x0e, 0x8e, 0xbe, 0x80, 0x4d, 0xb1, 0x48, 0x15, 0x9b, 0x53, 0xbf, 0x59, 0x3a, 0xc7, 0x75, 0x9e,
	0xb1, 0x41, 0x8e, 0x2a, 0xbe, 0x87, 0x1d, 0x2d, 0x4f, 0xb0, 0x84, 0x9c, 0x53, 0x41, 0xe3, 0xd0,
	0x29, 0x6d, 0xdf, 0x9a, 0x60, 0x2f, 0x0d, 0xc3, 0x0a, 0xe2, 0x76, 0x52, 0x1a, 0xa3, 0x67, 0xb0,
	0x41, 0xe2, 0x39, 0x4b, 0xfd, 0x96, 0x56, 0xda, 0xbf, 0x41, 0xe9, 0x30, 0xc7, 0x61, 0x03, 0x47,
	0xbf, 0x83, 0xae, 0x2b, 0x4c, 0x45, 0xb6, 0x77, 0xb4, 0x44, 0x50, 0x96, 0x28, 0xca, 0x97, 0xad,
	0x67, 0xc1, 0xb1, 0x35, 0xb8, 0x94, 0xef, 0xf0, 0xb2, 0x01, 0x3d, 0x83, 0x3d, 0x9a, 0x92, 0x49,
	0x42, 0xc3, 0x98, 0xc9, 0x2c, 0xdf, 0x78, 0x2a, 0x42, 0x7d, 0x96, 0x7e, 0x77, 0xdf, 0x7b, 0x52,
	0xc7, 0xf7, 0xcd, 0xf4, 0x51, 0x31, 0xab, 0xd3, 0x09, 0x3d, 0x86, 0xad, 0x19, 0x25, 0x31, 0x15,
	0x61, 0x26, 0xe8, 0x29, 0xfb, 0xc1, 0x47, 0x3a, 0xd7, 0x5b, 0xc6, 0x78, 0xa2, 0x6d, 0x28, 0x84,
	0x87, 0x36, 0xdd, 0xa9, 0x58, 0x52, 0x11, 0x2e, 0xa9, 0x90, 0x8c, 0xa7, 0x61, 0x1e, 0x84, 0x60,
	0x31, 0xf5, 0x7f, 0xa4, 0x17, 0xf1, 0xe0, 0x4a, 0xa6, 0x7d, 0xfb, 0x55, 0xaa, 0x9e, 0x1d, 0x7c,
	0x47, 0x92, 0x05, 0xc5, 0x3d, 0x93, 0xfa, 0x5a, 0xe1, 0x3b, 0x23, 0x70, 0x6c, 0xf9, 0xbd, 0xbf,
	0x7b, 0xd0, 0xb9, 0x54, 0x8e, 0xd0, 0x01, 0x34, 0x12, 0x26, 0x15, 0x4d, 0xa9, 0x90, 0xbe, 0xa7,
	0x6f, 0xd8, 0x6e, 0xf9, 0x12, 0xbf, 0xb4, 0xd3, 0x78, 0x05, 0x44, 0x1f, 0x43, 0xdd, 0x56, 0x83,
	0xbc, 0x18, 0xe6, 0xa4, 0xfb, 0x65, 0x92, 0xad, 0x1d, 0xb8, 0x80, 0xa1, 0xa7, 0xb0, 0x29, 0x69,
	0x24, 0xa8, 0xca, 0x8b, 0x5b, 0x55, 0xdf, 0x98, 0x12, 0x23, 0xef, 0x9a, 0xc1, 0x58, 0x23, 0xb0,
	0x43, 0xf6, 0xfe, 0xed, 0x41, 0xf7, 0x72, 0x79, 0x43, 0x9f, 0x01, 0x24, 0xab, 0xc2, 0x63, 0x8a,
	0xf8, 0xbb, 0x6b, 0x0a, 0x4f, 0xb9, 0xea, 0x24, 0x45, 0xd5, 0xf9, 0x0c, 0x20, 0x5a, 0xf1, 0x2b,
	0x77, 0xe4, 0x47, 0x05, 0xff, 0x10, 0x80, 0xac, 0xf8, 0xd5, 0xbb, 0x17, 0x3e, 0xe2, 0x24, 0xbe,
	0xae, 0xd5, 0x6b, 0xdd, 0x8d, 0xaf, 0x6b, 0x75, 0xe8, 0x36, 0xfb, 0xff, 0xf2, 0x60, 0x43, 0xe7,
	0x2f, 0xfa, 0x29, 0x74, 0x48, 0x14, 0x51, 0x29, 0xc3, 0x84, 0x4f, 0x4d, 0x4d, 0xf4, 0x74, 0x9e,
	0x6c, 0x19, 0xf3, 0x4b, 0x3e, 0xd5, 0x75, 0xf1, 0x11, 0xb4, 0x32, 0xc1, 0x4f, 0x59, 0x42, 0x0d,
	0xa8, 0xa2, 0x41, 0x4d, 0x6b, 0xd3, 0x90, 0x03, 0xd8, 0xb4, 0x6f, 0x09, 0x1b, 0x60, 0x6f, 0x5d,
	0x80, 0x06, 0x81, 0x1d, 0x14, 0xbd, 0x80, 0xb6, 0xe4, 0xd1, 0x19, 0x55, 0x21, 0xcf, 0xf2, 0xd2,
	0x25, 0xfd, 0x9a, 0x3e, 0xaa, 0x75, 0xbb, 0x33, 0xd6, 0xc0, 0x63, 0x8d, 0xc3, 0x5b, 0xf2, 0xc2,
	0x48, 0xf6, 0xff, 0x50, 0x85, 0x76, 0xb9, 0x7b, 0xa0, 0x8f, 0x00, 0x25, 0x3c, 0x22, 0x49, 0xe8,
	0xfa, 0x50, 0x4a, 0xe6, 0xd4, 0x2e, 0xaf, 0xab, 0x67, 0x2c, 0xe1, 0x15, 0x99, 0x53, 0x34, 0x85,
	0x6d, 0xbe, 0x50, 0x09, 0xa3, 0x22, 0x8c, 0xa9, 0xa2, 0x51, 0x2e, 0x6b, 0x4f, 0xea, 0xe7, 0x77,
	0xee, 0x58, 0xc1, 0xb1, 0x91, 0x38, 0x72, 0x0a, 0xb8, 0xcb, 0x2f, 0x59, 0xd0, 0x31, 0xec, 0x2c,
	0x32, 0xa9, 0x04, 0x25, 0xf3, 0x70, 0xc2, 0xd2, 0xb8, 0x7c, 0xaa, 0x0f, 0xd7, 0xac, 0x7b, 0xc4,
	0xd2, 0xd8, 0xb6, 0x07, 0xe4, 0xa8, 0x2b, 0x1b, 0x7a, 0x05, 0xdb, 0xba, 0xf0, 0x94, 0x7a, 0x4e,
	0xed, 0xce, 0x39, 0xd2, 0xc9, 0xc9, 0x17, 0x5a, 0x50, 0xef, 0x13, 0xe8, 0x5e, 0x5e, 0x06, 0x7a,
	0x0f, 0xda, 0x74, 0x49, 0x53, 0x75, 0x39, 0x4d, 0x5a, 0xda, 0x6a, 0xb3, 0xa4, 0xff, 0xe7, 0x0a,
	0xd4, 0x5d, 0x97, 0x40, 0x9f, 0x42, 0x6b, 0xce, 0xa4, 0x0c, 0xf3, 0xc2, 0xca, 0x17, 0xca, 0xde,
	0x9a, 0xeb, 0x9b, 0x16, 0x6e, 0xe6, 0xf0, 0x6f, 0x0c, 0x1a, 0x1d, 0x41, 0x77, 0x4e, 0xa7, 0xa4,
	0xa4, 0x50, 0xb9, 0x4d, 0xa1, 0xe3, 0x28, 0x4e, 0xe5, 0x53, 0x68, 0x9d, 0xb1, 0x24, 0x29, 0x14,
	0xaa, 0xb7, 0xc6, 0x90, 0xc3, 0x1d, 0xfb, 0x05, 0x6c, 0xcf, 0x17, 0x89, 0x62, 0x25, 0x89, 0xda,
	0x6d, 0x12, 0xdd, 0x82, 0x63, 0x75, 0xfa, 0xff, 0xf0, 0x60, 0xd3, 0x75, 0x98, 0x47, 0xd0, 0x92,
	0xe7, 0xf3, 0x84, 0xa5, 0x67, 0xa1, 0xe0, 0x5c, 0xd9, 0x6d, 0x6c, 0x5a, 0x1b, 0xe6, 0x5c, 0xa1,
	0x3e, 0xb4, 0xe4, 0x62, 0x12, 0x33, 0x41, 0x23, 0xc5, 0xc5, 0xb9, 0xbd, 0x6b, 0x25, 0x1b, 0x7a,
	0x0a, 0xf7, 0x5d, 0x8d, 0x0e, 0x4b, 0xe0, 0xaa, 0x06, 0xef, 0xb8, 0xc9, 0xf1, 0x45, 0xd2, 0x87,
	0x50, 0xcb, 0x1f, 0xf3, 0x76, 0x09, 0x7b, 0x57, 0x96, 0x30, 0xd6, 0x0f, 0x5f, 0xac, 0x41, 0xfd,
	0xff, 0xd6, 0xa0, 0x65, 0x83, 0xd6, 0x4d, 0x13, 0xfd, 0x18, 0x6a, 0xab, 0x0b, 0x34, 0xda, 0x7c,
	0x3d, 0xaa, 0x89, 0xca, 0xbe, 0x87, 0xb5, 0x31, 0xdf, 0x68, 0xfb, 0x64, 0xd5, 0x1d, 0xd5, 0x1e,
	0xd5, 0x75, 0x2e, 0xbe, 0x7c, 0xcb, 0xbc, 0x73, 0x58, 0x64, 0xa4, 0x31, 0x40, 0xcc, 0xe4, 0x99,
	0xe5, 0x9a, 0x43, 0xfa, 0xf8, 0xf6, 0xf7, 0x80, 0x26, 0x07, 0x47, 0x4c, 0x9e, 0xe9, 0xaf, 0x2f,
	0xdf, 0xc2, 0x8d, 0xd8, 0x0d, 0xd0, 0xb7, 0xd0, 0xd4, 0xbd, 0xd9, 0x8a, 0x9a, 0x35, 0x0f, 0xef,
	0x2a, 0xaa, 0xab, 0xa3, 0x53, 0x05, 0x52, 0x8c, 0xf2, 0x50, 0x85, 0x8a, 0xa5, 0x55, 0xdd, 0x78,
	0xb3, 0x50, 0xb1, 0x8a, 0x65, 0x11, 0xaa, 0x70, 0x83, 0xde, 0x9f, 0x3c, 0x68, 0x14, 0xab, 0xf8,
	0x7f, 0x32, 0xa4, 0xba, 0x26, 0x43, 0x0e, 0x60, 0x37, 0xff, 0x51, 0x49, 0x63, 0xdd, 0xdb, 0x59,
	0x44, 0x5d, 0x19, 0xd4, 0x67, 0x53, 0xc7, 0x3b, 0x66, 0x76, 0x6c, 0x26, 0x6d, 0x19, 0xeb, 0xb5,
	0x00, 0x56, 0x4b, 0xef, 0x11, 0x68, 0x14, 0x21, 0x23, 0x74, 0xf1, 0xfc, 0xed, 0xb1, 0x7f, 0x01,
	0x4d, 0xbd, 0x1b, 0x6f, 0xd6, 0xd8, 0xf4, 0x0e, 0x1a, 0xcb, 0x68, 0xd7, 0xbe, 0xe2, 0x42, 0x99,
	0xd1, 0x88, 0x9d, 0x32, 0x2a, 0x50, 0xf5, 0x3f, 0x23, 0xaf, 0xff, 0x1b, 0x68, 0x97, 0xdf, 0x6a,
	0xe8, 0x73, 0xb8, 0xa7, 0x91, 0xee, 0xcd, 0xf0, 0xfe, 0x1d, 0x77, 0x1d, 0x5b, 0xda, 0xe8, 0x17,
	0xf0, 0x3e, 0xe3, 0x86, 0x94, 0x09, 0xfe, 0xc3, 0xf9, 0xf5, 0xfc, 0x51, 0xbb, 0xf8, 0xd5, 0x39,
	0xc9, 0x33, 0xf7, 0xc4, 0x9b, 0xdc, 0xd3, 0x29, 0xfc, 0xf4, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff,
	0xab, 0x88, 0x6c, 0x8a, 0xbe, 0x0f, 0x00, 0x00,
}
 07070100000080000041ED000003E800000064000000045E17A24700000000000000000000000000000000000000000000002E00000000cilium-proxy-20200109/go/envoy/config/cluster 07070100000081000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004400000000cilium-proxy-20200109/go/envoy/config/cluster/dynamic_forward_proxy   07070100000082000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004C00000000cilium-proxy-20200109/go/envoy/config/cluster/dynamic_forward_proxy/v2alpha   07070100000083000081A4000003E800000064000000015E17A24700001144000000000000000000000000000000000000005A00000000cilium-proxy-20200109/go/envoy/config/cluster/dynamic_forward_proxy/v2alpha/cluster.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/cluster/dynamic_forward_proxy/v2alpha/cluster.proto

package envoy_config_cluster_dynamic_forward_proxy_v2alpha

import (
	fmt "fmt"
	v2alpha "github.com/cilium/proxy/go/envoy/config/common/dynamic_forward_proxy/v2alpha"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Configuration for the dynamic forward proxy cluster. See the :ref:`architecture overview
// <arch_overview_http_dynamic_forward_proxy>` for more information.
type ClusterConfig struct {
	// The DNS cache configuration that the cluster will attach to. Note this configuration must
	// match that of associated :ref:`dynamic forward proxy HTTP filter configuration
	// <envoy_api_field_config.filter.http.dynamic_forward_proxy.v2alpha.FilterConfig.dns_cache_config>`.
	DnsCacheConfig       *v2alpha.DnsCacheConfig `protobuf:"bytes,1,opt,name=dns_cache_config,json=dnsCacheConfig,proto3" json:"dns_cache_config,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
	XXX_unrecognized     []byte                  `json:"-"`
	XXX_sizecache        int32                   `json:"-"`
}

func (m *ClusterConfig) Reset()         { *m = ClusterConfig{} }
func (m *ClusterConfig) String() string { return proto.CompactTextString(m) }
func (*ClusterConfig) ProtoMessage()    {}
func (*ClusterConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_faeb9d327e132c11, []int{0}
}

func (m *ClusterConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClusterConfig.Unmarshal(m, b)
}
func (m *ClusterConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClusterConfig.Marshal(b, m, deterministic)
}
func (m *ClusterConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClusterConfig.Merge(m, src)
}
func (m *ClusterConfig) XXX_Size() int {
	return xxx_messageInfo_ClusterConfig.Size(m)
}
func (m *ClusterConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_ClusterConfig.DiscardUnknown(m)
}

var xxx_messageInfo_ClusterConfig proto.InternalMessageInfo

func (m *ClusterConfig) GetDnsCacheConfig() *v2alpha.DnsCacheConfig {
	if m != nil {
		return m.DnsCacheConfig
	}
	return nil
}

func init() {
	proto.RegisterType((*ClusterConfig)(nil), "envoy.config.cluster.dynamic_forward_proxy.v2alpha.ClusterConfig")
}

func init() {
	proto.RegisterFile("envoy/config/cluster/dynamic_forward_proxy/v2alpha/cluster.proto", fileDescriptor_faeb9d327e132c11)
}

var fileDescriptor_faeb9d327e132c11 = []byte{
	// 225 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x72, 0x48, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0xce, 0x29, 0x2d, 0x2e, 0x49, 0x2d,
	0xd2, 0x4f, 0xa9, 0xcc, 0x4b, 0xcc, 0xcd, 0x4c, 0x8e, 0x4f, 0xcb, 0x2f, 0x2a, 0x4f, 0x2c, 0x4a,
	0x89, 0x2f, 0x28, 0xca, 0xaf, 0xa8, 0xd4, 0x2f, 0x33, 0x4a, 0xcc, 0x29, 0xc8, 0x48, 0x84, 0xa9,
	0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x32, 0x02, 0x9b, 0xa0, 0x07, 0x31, 0x41, 0x0f, 0x26,
	0x87, 0xd5, 0x04, 0x3d, 0xa8, 0x09, 0x52, 0x8e, 0xa8, 0xb6, 0xe6, 0xe7, 0xe6, 0xe6, 0xe7, 0x11,
	0xb0, 0x34, 0x25, 0xaf, 0x38, 0x3e, 0x39, 0x31, 0x39, 0x23, 0x15, 0x62, 0xad, 0x94, 0x78, 0x59,
	0x62, 0x4e, 0x66, 0x4a, 0x62, 0x49, 0xaa, 0x3e, 0x8c, 0x01, 0x91, 0x50, 0x6a, 0x63, 0xe4, 0xe2,
	0x75, 0x86, 0xb8, 0xc2, 0x19, 0x6c, 0xbe, 0x50, 0x29, 0x97, 0x00, 0x5c, 0x77, 0x3c, 0xc4, 0x4e,
	0x09, 0x46, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x47, 0x3d, 0x54, 0xc7, 0x83, 0x1d, 0x82, 0xdf, 0xed,
	0x7a, 0x2e, 0x79, 0xc5, 0xce, 0x20, 0x93, 0x20, 0x86, 0x3b, 0x71, 0xfc, 0x72, 0x62, 0xed, 0x62,
	0x64, 0x12, 0x60, 0x0c, 0xe2, 0x4b, 0x41, 0x95, 0x09, 0xe2, 0x72, 0xc8, 0xcc, 0x87, 0x58, 0x00,
	0x31, 0x81, 0xf4, 0x80, 0x72, 0xe2, 0x81, 0xfa, 0x24, 0x00, 0xe4, 0xb5, 0x00, 0xc6, 0x24, 0x36,
	0xb0, 0x1f, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1d, 0x55, 0xeb, 0x77, 0xb7, 0x01, 0x00,
	0x00,
}
07070100000084000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003400000000cilium-proxy-20200109/go/envoy/config/cluster/redis   07070100000085000081A4000003E800000064000000015E17A247000017EF000000000000000000000000000000000000004800000000cilium-proxy-20200109/go/envoy/config/cluster/redis/redis_cluster.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/cluster/redis/redis_cluster.proto

package envoy_config_cluster_redis

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type RedisClusterConfig struct {
	// Interval between successive topology refresh requests. If not set, this defaults to 5s.
	ClusterRefreshRate *duration.Duration `protobuf:"bytes,1,opt,name=cluster_refresh_rate,json=clusterRefreshRate,proto3" json:"cluster_refresh_rate,omitempty"`
	// Timeout for topology refresh request. If not set, this defaults to 3s.
	ClusterRefreshTimeout *duration.Duration `protobuf:"bytes,2,opt,name=cluster_refresh_timeout,json=clusterRefreshTimeout,proto3" json:"cluster_refresh_timeout,omitempty"`
	// The minimum interval that must pass after triggering a topology refresh request before a new
	// request can possibly be triggered again. Any redirection errors received during one of these
	// time intervals are ignored. If not set, this defaults to 5s.
	RedirectRefreshInterval *duration.Duration `protobuf:"bytes,3,opt,name=redirect_refresh_interval,json=redirectRefreshInterval,proto3" json:"redirect_refresh_interval,omitempty"`
	// The number of redirection errors that must be received before
	// triggering a topology refresh request. If not set, this defaults to 5.
	RedirectRefreshThreshold *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=redirect_refresh_threshold,json=redirectRefreshThreshold,proto3" json:"redirect_refresh_threshold,omitempty"`
	XXX_NoUnkeyedLiteral     struct{}              `json:"-"`
	XXX_unrecognized         []byte                `json:"-"`
	XXX_sizecache            int32                 `json:"-"`
}

func (m *RedisClusterConfig) Reset()         { *m = RedisClusterConfig{} }
func (m *RedisClusterConfig) String() string { return proto.CompactTextString(m) }
func (*RedisClusterConfig) ProtoMessage()    {}
func (*RedisClusterConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_6d6593a6ec218c02, []int{0}
}

func (m *RedisClusterConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RedisClusterConfig.Unmarshal(m, b)
}
func (m *RedisClusterConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RedisClusterConfig.Marshal(b, m, deterministic)
}
func (m *RedisClusterConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RedisClusterConfig.Merge(m, src)
}
func (m *RedisClusterConfig) XXX_Size() int {
	return xxx_messageInfo_RedisClusterConfig.Size(m)
}
func (m *RedisClusterConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_RedisClusterConfig.DiscardUnknown(m)
}

var xxx_messageInfo_RedisClusterConfig proto.InternalMessageInfo

func (m *RedisClusterConfig) GetClusterRefreshRate() *duration.Duration {
	if m != nil {
		return m.ClusterRefreshRate
	}
	return nil
}

func (m *RedisClusterConfig) GetClusterRefreshTimeout() *duration.Duration {
	if m != nil {
		return m.ClusterRefreshTimeout
	}
	return nil
}

func (m *RedisClusterConfig) GetRedirectRefreshInterval() *duration.Duration {
	if m != nil {
		return m.RedirectRefreshInterval
	}
	return nil
}

func (m *RedisClusterConfig) GetRedirectRefreshThreshold() *wrappers.UInt32Value {
	if m != nil {
		return m.RedirectRefreshThreshold
	}
	return nil
}

func init() {
	proto.RegisterType((*RedisClusterConfig)(nil), "envoy.config.cluster.redis.RedisClusterConfig")
}

func init() {
	proto.RegisterFile("envoy/config/cluster/redis/redis_cluster.proto", fileDescriptor_6d6593a6ec218c02)
}

var fileDescriptor_6d6593a6ec218c02 = []byte{
	// 316 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xc1, 0x4a, 0xf3, 0x40,
	0x14, 0x85, 0xff, 0xf4, 0x57, 0x91, 0x71, 0xe5, 0xa0, 0x34, 0x2d, 0x22, 0xe2, 0xaa, 0xb8, 0x98,
	0x40, 0xfb, 0x00, 0x42, 0xea, 0xa6, 0xbb, 0x32, 0xb4, 0x2e, 0x74, 0x51, 0xa6, 0xcd, 0x6d, 0x3b,
	0x30, 0x66, 0xc2, 0xcd, 0x4d, 0xb5, 0xaf, 0xe4, 0x23, 0xea, 0x46, 0x32, 0x33, 0x11, 0x6d, 0x11,
	0xdd, 0x24, 0x21, 0xe7, 0x9c, 0xef, 0x5c, 0x66, 0x2e, 0x13, 0x90, 0x6f, 0xec, 0x36, 0x59, 0xd8,
	0x7c, 0xa9, 0x57, 0xc9, 0xc2, 0x54, 0x25, 0x01, 0x26, 0x08, 0x99, 0x2e, 0xfd, 0x73, 0x16, 0xfe,
	0x89, 0x02, 0x2d, 0x59, 0xde, 0x75, 0x7e, 0xe1, 0xfd, 0xa2, 0xd1, 0x9c, 0xb3, 0x7b, 0xb9, 0xb2,
	0x76, 0x65, 0x20, 0x71, 0xce, 0x79, 0xb5, 0x4c, 0xb2, 0x0a, 0x15, 0x69, 0x9b, 0xfb, 0xec, 0xbe,
	0xfe, 0x8c, 0xaa, 0x28, 0x00, 0xcb, 0xa0, 0xb7, 0x37, 0xca, 0xe8, 0x4c, 0x11, 0x24, 0xcd, 0x87,
	0x17, 0xae, 0xdf, 0x5b, 0x8c, 0xcb, 0xba, 0x62, 0xe8, 0xfb, 0x86, 0xae, 0x9d, 0x4f, 0xd9, 0x59,
	0x18, 0x60, 0x86, 0xb0, 0x44, 0x28, 0xd7, 0x33, 0x54, 0x04, 0x71, 0x74, 0x15, 0xf5, 0x4e, 0xfa,
	0x1d, 0xe1, 0xeb, 0x44, 0x53, 0x27, 0xee, 0xc2, 0x38, 0xe9, 0xf1, 0x5b, 0x7a, 0xf8, 0x1a, 0xb5,
	0x6e, 0xfe, 0x49, 0x1e, 0x00, 0xd2, 0xe7, 0xa5, 0x22, 0xe0, 0x8f, 0xac, 0xbd, 0x8b, 0x25, 0xfd,
	0x04, 0xb6, 0xa2, 0xb8, 0xf5, 0x77, 0xf2, 0xf9, 0x77, 0xf2, 0xc4, 0x13, 0xf8, 0x94, 0x75, 0xea,
	0xc3, 0x42, 0x58, 0xd0, 0x27, 0x5d, 0xe7, 0x04, 0xb8, 0x51, 0x26, 0xfe, 0xff, 0x0b, 0x5e, 0xb6,
	0x9b, 0x6c, 0xa0, 0x8e, 0x42, 0x92, 0x3f, 0xb0, 0xee, 0x1e, 0x96, 0xd6, 0xf5, 0xcb, 0x9a, 0x2c,
	0x3e, 0x70, 0xdc, 0x8b, 0x3d, 0xee, 0x74, 0x94, 0xd3, 0xa0, 0x7f, 0xaf, 0x4c, 0x05, 0x32, 0xde,
	0x41, 0x4f, 0x9a, 0x74, 0x7a, 0xcb, 0x7a, 0xda, 0xfa, 0x3d, 0x29, 0xd0, 0xbe, 0x6c, 0xc5, 0xcf,
	0x2b, 0x90, 0x9e, 0x7e, 0xbd, 0xa6, 0x71, 0xdd, 0x33, 0x8e, 0xe6, 0x47, 0xae, 0x70, 0xf0, 0x11,
	0x00, 0x00, 0xff, 0xff, 0x99, 0x0d, 0x94, 0xf0, 0x6c, 0x02, 0x00, 0x00,
}
 07070100000086000041ED000003E800000064000000045E17A24700000000000000000000000000000000000000000000002D00000000cilium-proxy-20200109/go/envoy/config/common  07070100000087000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004300000000cilium-proxy-20200109/go/envoy/config/common/dynamic_forward_proxy    07070100000088000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004B00000000cilium-proxy-20200109/go/envoy/config/common/dynamic_forward_proxy/v2alpha    07070100000089000081A4000003E800000064000000015E17A247000020C6000000000000000000000000000000000000005B00000000cilium-proxy-20200109/go/envoy/config/common/dynamic_forward_proxy/v2alpha/dns_cache.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/common/dynamic_forward_proxy/v2alpha/dns_cache.proto

package envoy_config_common_dynamic_forward_proxy_v2alpha

import (
	fmt "fmt"
	v2 "github.com/cilium/proxy/go/envoy/api/v2"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Configuration for the dynamic forward proxy DNS cache. See the :ref:`architecture overview
// <arch_overview_http_dynamic_forward_proxy>` for more information.
// [#next-free-field: 6]
type DnsCacheConfig struct {
	// The name of the cache. Multiple named caches allow independent dynamic forward proxy
	// configurations to operate within a single Envoy process using different configurations. All
	// configurations with the same name *must* otherwise have the same settings when referenced
	// from different configuration components. Configuration will fail to load if this is not
	// the case.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The DNS lookup family to use during resolution.
	//
	// [#comment:TODO(mattklein123): Figure out how to support IPv4/IPv6 "happy eyeballs" mode. The
	// way this might work is a new lookup family which returns both IPv4 and IPv6 addresses, and
	// then configures a host to have a primary and fall back address. With this, we could very
	// likely build a "happy eyeballs" connection pool which would race the primary / fall back
	// address and return the one that wins. This same method could potentially also be used for
	// QUIC to TCP fall back.]
	DnsLookupFamily v2.Cluster_DnsLookupFamily `protobuf:"varint,2,opt,name=dns_lookup_family,json=dnsLookupFamily,proto3,enum=envoy.api.v2.Cluster_DnsLookupFamily" json:"dns_lookup_family,omitempty"`
	// The DNS refresh rate for currently cached DNS hosts. If not specified defaults to 60s.
	//
	// .. note:
	//
	//  The returned DNS TTL is not currently used to alter the refresh rate. This feature will be
	//  added in a future change.
	DnsRefreshRate *duration.Duration `protobuf:"bytes,3,opt,name=dns_refresh_rate,json=dnsRefreshRate,proto3" json:"dns_refresh_rate,omitempty"`
	// The TTL for hosts that are unused. Hosts that have not been used in the configured time
	// interval will be purged. If not specified defaults to 5m.
	//
	// .. note:
	//
	//   The TTL is only checked at the time of DNS refresh, as specified by *dns_refresh_rate*. This
	//   means that if the configured TTL is shorter than the refresh rate the host may not be removed
	//   immediately.
	//
	//  .. note:
	//
	//   The TTL has no relation to DNS TTL and is only used to control Envoy's resource usage.
	HostTtl *duration.Duration `protobuf:"bytes,4,opt,name=host_ttl,json=hostTtl,proto3" json:"host_ttl,omitempty"`
	// The maximum number of hosts that the cache will hold. If not specified defaults to 1024.
	//
	// .. note:
	//
	//   The implementation is approximate and enforced independently on each worker thread, thus
	//   it is possible for the maximum hosts in the cache to go slightly above the configured
	//   value depending on timing. This is similar to how other circuit breakers work.
	MaxHosts             *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=max_hosts,json=maxHosts,proto3" json:"max_hosts,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *DnsCacheConfig) Reset()         { *m = DnsCacheConfig{} }
func (m *DnsCacheConfig) String() string { return proto.CompactTextString(m) }
func (*DnsCacheConfig) ProtoMessage()    {}
func (*DnsCacheConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_d2d9297e0c94cb56, []int{0}
}

func (m *DnsCacheConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DnsCacheConfig.Unmarshal(m, b)
}
func (m *DnsCacheConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DnsCacheConfig.Marshal(b, m, deterministic)
}
func (m *DnsCacheConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DnsCacheConfig.Merge(m, src)
}
func (m *DnsCacheConfig) XXX_Size() int {
	return xxx_messageInfo_DnsCacheConfig.Size(m)
}
func (m *DnsCacheConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_DnsCacheConfig.DiscardUnknown(m)
}

var xxx_messageInfo_DnsCacheConfig proto.InternalMessageInfo

func (m *DnsCacheConfig) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *DnsCacheConfig) GetDnsLookupFamily() v2.Cluster_DnsLookupFamily {
	if m != nil {
		return m.DnsLookupFamily
	}
	return v2.Cluster_AUTO
}

func (m *DnsCacheConfig) GetDnsRefreshRate() *duration.Duration {
	if m != nil {
		return m.DnsRefreshRate
	}
	return nil
}

func (m *DnsCacheConfig) GetHostTtl() *duration.Duration {
	if m != nil {
		return m.HostTtl
	}
	return nil
}

func (m *DnsCacheConfig) GetMaxHosts() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxHosts
	}
	return nil
}

func init() {
	proto.RegisterType((*DnsCacheConfig)(nil), "envoy.config.common.dynamic_forward_proxy.v2alpha.DnsCacheConfig")
}

func init() {
	proto.RegisterFile("envoy/config/common/dynamic_forward_proxy/v2alpha/dns_cache.proto", fileDescriptor_d2d9297e0c94cb56)
}

var fileDescriptor_d2d9297e0c94cb56 = []byte{
	// 406 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xc1, 0x6e, 0xd4, 0x30,
	0x10, 0x86, 0xeb, 0xb0, 0xa5, 0x5b, 0x23, 0x96, 0x92, 0x03, 0x84, 0x82, 0x50, 0x84, 0x84, 0xb4,
	0xea, 0xc1, 0x16, 0xe9, 0x1d, 0x44, 0x76, 0x85, 0x40, 0x02, 0xa9, 0x8a, 0x80, 0x0b, 0x87, 0x68,
	0x1a, 0x3b, 0xbb, 0x16, 0x8e, 0x6d, 0xd9, 0x4e, 0xba, 0x7b, 0xe5, 0x71, 0x78, 0x27, 0x5e, 0xa4,
	0x27, 0x14, 0xbb, 0x39, 0x20, 0x40, 0x82, 0x5b, 0x26, 0x33, 0xff, 0x37, 0xf3, 0xcf, 0x18, 0xbf,
	0xe6, 0x6a, 0xd0, 0x7b, 0xda, 0x68, 0xd5, 0x8a, 0x0d, 0x6d, 0x74, 0xd7, 0x69, 0x45, 0xd9, 0x5e,
	0x41, 0x27, 0x9a, 0xba, 0xd5, 0xf6, 0x0a, 0x2c, 0xab, 0x8d, 0xd5, 0xbb, 0x3d, 0x1d, 0x0a, 0x90,
	0x66, 0x0b, 0x94, 0x29, 0x57, 0x37, 0xd0, 0x6c, 0x39, 0x31, 0x56, 0x7b, 0x9d, 0xbe, 0x08, 0x08,
	0x12, 0x11, 0x24, 0x22, 0xc8, 0x1f, 0x11, 0xe4, 0x06, 0x71, 0xfa, 0x20, 0x76, 0x05, 0x23, 0xe8,
	0x50, 0xd0, 0x86, 0xb9, 0x88, 0x3a, 0x7d, 0xba, 0xd1, 0x7a, 0x23, 0x39, 0x0d, 0xd1, 0x65, 0xdf,
	0x52, 0xd6, 0x5b, 0xf0, 0x42, 0xab, 0xbf, 0xe5, 0xaf, 0x2c, 0x18, 0xc3, 0xed, 0xa4, 0x7f, 0x38,
	0x80, 0x14, 0x0c, 0x3c, 0xa7, 0xd3, 0x47, 0x4c, 0x3c, 0xfb, 0x91, 0xe0, 0xc5, 0x5a, 0xb9, 0xd5,
	0x38, 0xf6, 0x2a, 0x0c, 0x9a, 0x3e, 0xc6, 0x33, 0x05, 0x1d, 0xcf, 0x50, 0x8e, 0x96, 0xc7, 0xe5,
	0xd1, 0x75, 0x39, 0xb3, 0x49, 0x8e, 0xaa, 0xf0, 0x33, 0xfd, 0x82, 0xef, 0x8f, 0x36, 0xa5, 0xd6,
	0x5f, 0x7b, 0x53, 0xb7, 0xd0, 0x09, 0xb9, 0xcf, 0x92, 0x1c, 0x2d, 0x17, 0xc5, 0x73, 0x12, 0xfd,
	0x82, 0x11, 0x64, 0x28, 0xc8, 0x4a, 0xf6, 0xce, 0x73, 0x4b, 0xd6, 0xca, 0xbd, 0x0f, 0xd5, 0x6f,
	0x42, 0x71, 0x39, 0xbf, 0x2e, 0x0f, 0xbf, 0xa1, 0xe4, 0x04, 0x55, 0xf7, 0xd8, 0xaf, 0xa9, 0xf4,
	0x03, 0x3e, 0x19, 0xe1, 0x96, 0xb7, 0x96, 0xbb, 0x6d, 0x6d, 0xc1, 0xf3, 0xec, 0x56, 0x8e, 0x96,
	0x77, 0x8a, 0x47, 0x24, 0x1a, 0x24, 0x93, 0x41, 0xb2, 0xbe, 0x59, 0x40, 0xe0, 0x7d, 0x47, 0xc9,
	0xd9, 0x41, 0xb5, 0x60, 0xca, 0x55, 0x51, 0x5b, 0x81, 0xe7, 0xe9, 0x4b, 0x3c, 0xdf, 0x6a, 0xe7,
	0x6b, 0xef, 0x65, 0x36, 0xfb, 0x77, 0xcc, 0xd1, 0x28, 0xfa, 0xe8, 0x65, 0x5a, 0xe2, 0xe3, 0x0e,
	0x76, 0xf5, 0x18, 0xba, 0xec, 0x30, 0x00, 0x9e, 0xfc, 0x06, 0xf8, 0xf4, 0x4e, 0xf9, 0xf3, 0xe2,
	0x33, 0xc8, 0x9e, 0x87, 0x5d, 0x9d, 0x25, 0xf9, 0x41, 0x35, 0xef, 0x60, 0xf7, 0x76, 0x94, 0x95,
	0x15, 0x7e, 0x25, 0x74, 0x5c, 0x4c, 0xbc, 0xf4, 0x7f, 0xbf, 0x89, 0xf2, 0xee, 0x74, 0x9f, 0x8b,
	0xb1, 0xe7, 0x05, 0xba, 0xbc, 0x1d, 0x9a, 0x9f, 0xff, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xc1, 0xfa,
	0xa5, 0x1e, 0xa3, 0x02, 0x00, 0x00,
}
  0707010000008A000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003100000000cilium-proxy-20200109/go/envoy/config/common/tap  0707010000008B000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003900000000cilium-proxy-20200109/go/envoy/config/common/tap/v2alpha  0707010000008C000081A4000003E800000064000000015E17A247000029CA000000000000000000000000000000000000004600000000cilium-proxy-20200109/go/envoy/config/common/tap/v2alpha/common.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/common/tap/v2alpha/common.proto

package envoy_config_common_tap_v2alpha

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	v2alpha "github.com/cilium/proxy/go/envoy/service/tap/v2alpha"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Common configuration for all tap extensions.
type CommonExtensionConfig struct {
	// Types that are valid to be assigned to ConfigType:
	//	*CommonExtensionConfig_AdminConfig
	//	*CommonExtensionConfig_StaticConfig
	//	*CommonExtensionConfig_TapdsConfig
	ConfigType           isCommonExtensionConfig_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
	XXX_unrecognized     []byte                             `json:"-"`
	XXX_sizecache        int32                              `json:"-"`
}

func (m *CommonExtensionConfig) Reset()         { *m = CommonExtensionConfig{} }
func (m *CommonExtensionConfig) String() string { return proto.CompactTextString(m) }
func (*CommonExtensionConfig) ProtoMessage()    {}
func (*CommonExtensionConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_79cf139d98a2fe3f, []int{0}
}

func (m *CommonExtensionConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_CommonExtensionConfig.Unmarshal(m, b)
}
func (m *CommonExtensionConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_CommonExtensionConfig.Marshal(b, m, deterministic)
}
func (m *CommonExtensionConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CommonExtensionConfig.Merge(m, src)
}
func (m *CommonExtensionConfig) XXX_Size() int {
	return xxx_messageInfo_CommonExtensionConfig.Size(m)
}
func (m *CommonExtensionConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_CommonExtensionConfig.DiscardUnknown(m)
}

var xxx_messageInfo_CommonExtensionConfig proto.InternalMessageInfo

type isCommonExtensionConfig_ConfigType interface {
	isCommonExtensionConfig_ConfigType()
}

type CommonExtensionConfig_AdminConfig struct {
	AdminConfig *AdminConfig `protobuf:"bytes,1,opt,name=admin_config,json=adminConfig,proto3,oneof"`
}

type CommonExtensionConfig_StaticConfig struct {
	StaticConfig *v2alpha.TapConfig `protobuf:"bytes,2,opt,name=static_config,json=staticConfig,proto3,oneof"`
}

type CommonExtensionConfig_TapdsConfig struct {
	TapdsConfig *CommonExtensionConfig_TapDSConfig `protobuf:"bytes,3,opt,name=tapds_config,json=tapdsConfig,proto3,oneof"`
}

func (*CommonExtensionConfig_AdminConfig) isCommonExtensionConfig_ConfigType() {}

func (*CommonExtensionConfig_StaticConfig) isCommonExtensionConfig_ConfigType() {}

func (*CommonExtensionConfig_TapdsConfig) isCommonExtensionConfig_ConfigType() {}

func (m *CommonExtensionConfig) GetConfigType() isCommonExtensionConfig_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

func (m *CommonExtensionConfig) GetAdminConfig() *AdminConfig {
	if x, ok := m.GetConfigType().(*CommonExtensionConfig_AdminConfig); ok {
		return x.AdminConfig
	}
	return nil
}

func (m *CommonExtensionConfig) GetStaticConfig() *v2alpha.TapConfig {
	if x, ok := m.GetConfigType().(*CommonExtensionConfig_StaticConfig); ok {
		return x.StaticConfig
	}
	return nil
}

func (m *CommonExtensionConfig) GetTapdsConfig() *CommonExtensionConfig_TapDSConfig {
	if x, ok := m.GetConfigType().(*CommonExtensionConfig_TapdsConfig); ok {
		return x.TapdsConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*CommonExtensionConfig) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*CommonExtensionConfig_AdminConfig)(nil),
		(*CommonExtensionConfig_StaticConfig)(nil),
		(*CommonExtensionConfig_TapdsConfig)(nil),
	}
}

// [#not-implemented-hide:]
type CommonExtensionConfig_TapDSConfig struct {
	// Configuration for the source of TapDS updates for this Cluster.
	ConfigSource *core.ConfigSource `protobuf:"bytes,1,opt,name=config_source,json=configSource,proto3" json:"config_source,omitempty"`
	// Tap config to request from XDS server.
	Name                 string   `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *CommonExtensionConfig_TapDSConfig) Reset()         { *m = CommonExtensionConfig_TapDSConfig{} }
func (m *CommonExtensionConfig_TapDSConfig) String() string { return proto.CompactTextString(m) }
func (*CommonExtensionConfig_TapDSConfig) ProtoMessage()    {}
func (*CommonExtensionConfig_TapDSConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_79cf139d98a2fe3f, []int{0, 0}
}

func (m *CommonExtensionConfig_TapDSConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_CommonExtensionConfig_TapDSConfig.Unmarshal(m, b)
}
func (m *CommonExtensionConfig_TapDSConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_CommonExtensionConfig_TapDSConfig.Marshal(b, m, deterministic)
}
func (m *CommonExtensionConfig_TapDSConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CommonExtensionConfig_TapDSConfig.Merge(m, src)
}
func (m *CommonExtensionConfig_TapDSConfig) XXX_Size() int {
	return xxx_messageInfo_CommonExtensionConfig_TapDSConfig.Size(m)
}
func (m *CommonExtensionConfig_TapDSConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_CommonExtensionConfig_TapDSConfig.DiscardUnknown(m)
}

var xxx_messageInfo_CommonExtensionConfig_TapDSConfig proto.InternalMessageInfo

func (m *CommonExtensionConfig_TapDSConfig) GetConfigSource() *core.ConfigSource {
	if m != nil {
		return m.ConfigSource
	}
	return nil
}

func (m *CommonExtensionConfig_TapDSConfig) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

// Configuration for the admin handler. See :ref:`here <config_http_filters_tap_admin_handler>` for
// more information.
type AdminConfig struct {
	// Opaque configuration ID. When requests are made to the admin handler, the passed opaque ID is
	// matched to the configured filter opaque ID to determine which filter to configure.
	ConfigId             string   `protobuf:"bytes,1,opt,name=config_id,json=configId,proto3" json:"config_id,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *AdminConfig) Reset()         { *m = AdminConfig{} }
func (m *AdminConfig) String() string { return proto.CompactTextString(m) }
func (*AdminConfig) ProtoMessage()    {}
func (*AdminConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_79cf139d98a2fe3f, []int{1}
}

func (m *AdminConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AdminConfig.Unmarshal(m, b)
}
func (m *AdminConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AdminConfig.Marshal(b, m, deterministic)
}
func (m *AdminConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AdminConfig.Merge(m, src)
}
func (m *AdminConfig) XXX_Size() int {
	return xxx_messageInfo_AdminConfig.Size(m)
}
func (m *AdminConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_AdminConfig.DiscardUnknown(m)
}

var xxx_messageInfo_AdminConfig proto.InternalMessageInfo

func (m *AdminConfig) GetConfigId() string {
	if m != nil {
		return m.ConfigId
	}
	return ""
}

func init() {
	proto.RegisterType((*CommonExtensionConfig)(nil), "envoy.config.common.tap.v2alpha.CommonExtensionConfig")
	proto.RegisterType((*CommonExtensionConfig_TapDSConfig)(nil), "envoy.config.common.tap.v2alpha.CommonExtensionConfig.TapDSConfig")
	proto.RegisterType((*AdminConfig)(nil), "envoy.config.common.tap.v2alpha.AdminConfig")
}

func init() {
	proto.RegisterFile("envoy/config/common/tap/v2alpha/common.proto", fileDescriptor_79cf139d98a2fe3f)
}

var fileDescriptor_79cf139d98a2fe3f = []byte{
	// 378 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x51, 0x4b, 0xeb, 0x30,
	0x14, 0xc7, 0x6f, 0xb7, 0xdd, 0x7b, 0xb7, 0xb4, 0x83, 0x4b, 0xe0, 0xa2, 0xd4, 0x87, 0x8d, 0x31,
	0xc5, 0x87, 0x99, 0x42, 0xf7, 0x2e, 0x98, 0x29, 0x28, 0x82, 0xcc, 0xcd, 0xf7, 0x71, 0x6c, 0xe3,
	0x0c, 0xac, 0x4d, 0x68, 0x63, 0xd9, 0xfc, 0x08, 0x7e, 0x1a, 0x3f, 0x9e, 0xec, 0x49, 0x9a, 0x64,
	0xae, 0x03, 0x65, 0x6f, 0xed, 0x39, 0xff, 0xf3, 0xfb, 0x9f, 0xfc, 0x13, 0x34, 0x60, 0x69, 0x21,
	0x56, 0x41, 0x24, 0xd2, 0x27, 0x3e, 0x0f, 0x22, 0x91, 0x24, 0x22, 0x0d, 0x14, 0xc8, 0xa0, 0x08,
	0x61, 0x21, 0x9f, 0xc1, 0x96, 0x88, 0xcc, 0x84, 0x12, 0xb8, 0xa3, 0xd5, 0xc4, 0xa8, 0x89, 0x6d,
	0x29, 0x90, 0xc4, 0xaa, 0xfd, 0x63, 0x83, 0x03, 0xc9, 0x83, 0x22, 0x0c, 0x22, 0x91, 0x31, 0x8b,
	0x9e, 0xe5, 0xe2, 0x25, 0x8b, 0x98, 0xe1, 0xf8, 0x27, 0x46, 0x96, 0xb3, 0xac, 0xe0, 0x11, 0xfb,
	0xd1, 0xcf, 0x3f, 0x28, 0x60, 0xc1, 0x63, 0x50, 0x2c, 0xd8, 0x7c, 0x98, 0x46, 0xef, 0xbd, 0x8e,
	0xfe, 0x8f, 0xb4, 0xf2, 0x6a, 0xa9, 0x58, 0x9a, 0x73, 0x91, 0x8e, 0xb4, 0x0f, 0xbe, 0x47, 0x1e,
	0xc4, 0x09, 0x4f, 0x67, 0xc6, 0xf7, 0xd0, 0xe9, 0x3a, 0xa7, 0x6e, 0x38, 0x20, 0x7b, 0x36, 0x27,
	0x17, 0xe5, 0x90, 0x61, 0x5c, 0xff, 0x9a, 0xb8, 0xb0, 0xfd, 0xc5, 0xb7, 0xa8, 0x9d, 0x2b, 0x50,
	0x3c, 0xda, 0x30, 0x6b, 0x9a, 0xd9, 0xb7, 0x4c, 0x7b, 0x8a, 0x1d, 0xda, 0x03, 0xc8, 0x2f, 0x96,
	0x67, 0x86, 0x2d, 0x6c, 0x8e, 0x3c, 0x05, 0x32, 0xce, 0x37, 0xac, 0xba, 0x66, 0xd1, 0xbd, 0xfb,
	0x7d, 0x7b, 0xda, 0xd2, 0xe7, 0x72, 0xba, 0xdd, 0x5a, 0x93, 0xcd, 0xaf, 0xff, 0x8a, 0xdc, 0x4a,
	0x17, 0xdf, 0xa1, 0xf6, 0xce, 0x4d, 0xd8, 0x60, 0x3a, 0xd6, 0x18, 0x24, 0x27, 0x45, 0x48, 0xca,
	0x1b, 0x23, 0x66, 0x62, 0xaa, 0x65, 0xb4, 0xb9, 0xa6, 0xbf, 0xdf, 0x9c, 0xda, 0x3f, 0x67, 0xe2,
	0x45, 0x95, 0x3a, 0x3e, 0x42, 0x8d, 0x14, 0x12, 0xa6, 0xb3, 0x68, 0xd1, 0xbf, 0x6b, 0xda, 0xc8,
	0x6a, 0x5d, 0x67, 0xa2, 0x8b, 0x14, 0x23, 0xd7, 0x9a, 0xa9, 0x95, 0x64, 0xb8, 0xfe, 0x41, 0x9d,
	0xde, 0x10, 0xb9, 0x95, 0x8c, 0x71, 0x1f, 0xb5, 0xac, 0x84, 0xc7, 0x7a, 0x97, 0x0a, 0xa4, 0x69,
	0x3a, 0x37, 0x31, 0x3d, 0x47, 0x67, 0x5c, 0x98, 0x15, 0x65, 0x26, 0x96, 0xab, 0x7d, 0x31, 0x51,
	0xd7, 0xe4, 0x34, 0x2e, 0x5f, 0xc9, 0xd8, 0x79, 0xfc, 0xa3, 0x9f, 0xcb, 0xf0, 0x33, 0x00, 0x00,
	0xff, 0xff, 0x93, 0xc8, 0x8a, 0x58, 0xe7, 0x02, 0x00, 0x00,
}
  0707010000008D000041ED000003E800000064000000095E17A24700000000000000000000000000000000000000000000002D00000000cilium-proxy-20200109/go/envoy/config/filter  0707010000008E000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003700000000cilium-proxy-20200109/go/envoy/config/filter/accesslog    0707010000008F000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003A00000000cilium-proxy-20200109/go/envoy/config/filter/accesslog/v2 07070100000090000081A4000003E800000064000000015E17A2470000B3E6000000000000000000000000000000000000004A00000000cilium-proxy-20200109/go/envoy/config/filter/accesslog/v2/accesslog.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/accesslog/v2/accesslog.proto

package envoy_config_filter_accesslog_v2

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	route "github.com/cilium/proxy/go/envoy/api/v2/route"
	_type "github.com/cilium/proxy/go/envoy/type"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	_struct "github.com/golang/protobuf/ptypes/struct"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type ComparisonFilter_Op int32

const (
	// =
	ComparisonFilter_EQ ComparisonFilter_Op = 0
	// >=
	ComparisonFilter_GE ComparisonFilter_Op = 1
	// <=
	ComparisonFilter_LE ComparisonFilter_Op = 2
)

var ComparisonFilter_Op_name = map[int32]string{
	0: "EQ",
	1: "GE",
	2: "LE",
}

var ComparisonFilter_Op_value = map[string]int32{
	"EQ": 0,
	"GE": 1,
	"LE": 2,
}

func (x ComparisonFilter_Op) String() string {
	return proto.EnumName(ComparisonFilter_Op_name, int32(x))
}

func (ComparisonFilter_Op) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_67bfd82f8b509e9f, []int{2, 0}
}

type GrpcStatusFilter_Status int32

const (
	GrpcStatusFilter_OK                  GrpcStatusFilter_Status = 0
	GrpcStatusFilter_CANCELED            GrpcStatusFilter_Status = 1
	GrpcStatusFilter_UNKNOWN             GrpcStatusFilter_Status = 2
	GrpcStatusFilter_INVALID_ARGUMENT    GrpcStatusFilter_Status = 3
	GrpcStatusFilter_DEADLINE_EXCEEDED   GrpcStatusFilter_Status = 4
	GrpcStatusFilter_NOT_FOUND           GrpcStatusFilter_Status = 5
	GrpcStatusFilter_ALREADY_EXISTS      GrpcStatusFilter_Status = 6
	GrpcStatusFilter_PERMISSION_DENIED   GrpcStatusFilter_Status = 7
	GrpcStatusFilter_RESOURCE_EXHAUSTED  GrpcStatusFilter_Status = 8
	GrpcStatusFilter_FAILED_PRECONDITION GrpcStatusFilter_Status = 9
	GrpcStatusFilter_ABORTED             GrpcStatusFilter_Status = 10
	GrpcStatusFilter_OUT_OF_RANGE        GrpcStatusFilter_Status = 11
	GrpcStatusFilter_UNIMPLEMENTED       GrpcStatusFilter_Status = 12
	GrpcStatusFilter_INTERNAL            GrpcStatusFilter_Status = 13
	GrpcStatusFilter_UNAVAILABLE         GrpcStatusFilter_Status = 14
	GrpcStatusFilter_DATA_LOSS           GrpcStatusFilter_Status = 15
	GrpcStatusFilter_UNAUTHENTICATED     GrpcStatusFilter_Status = 16
)

var GrpcStatusFilter_Status_name = map[int32]string{
	0:  "OK",
	1:  "CANCELED",
	2:  "UNKNOWN",
	3:  "INVALID_ARGUMENT",
	4:  "DEADLINE_EXCEEDED",
	5:  "NOT_FOUND",
	6:  "ALREADY_EXISTS",
	7:  "PERMISSION_DENIED",
	8:  "RESOURCE_EXHAUSTED",
	9:  "FAILED_PRECONDITION",
	10: "ABORTED",
	11: "OUT_OF_RANGE",
	12: "UNIMPLEMENTED",
	13: "INTERNAL",
	14: "UNAVAILABLE",
	15: "DATA_LOSS",
	16: "UNAUTHENTICATED",
}

var GrpcStatusFilter_Status_value = map[string]int32{
	"OK":                  0,
	"CANCELED":            1,
	"UNKNOWN":             2,
	"INVALID_ARGUMENT":    3,
	"DEADLINE_EXCEEDED":   4,
	"NOT_FOUND":           5,
	"ALREADY_EXISTS":      6,
	"PERMISSION_DENIED":   7,
	"RESOURCE_EXHAUSTED":  8,
	"FAILED_PRECONDITION": 9,
	"ABORTED":             10,
	"OUT_OF_RANGE":        11,
	"UNIMPLEMENTED":       12,
	"INTERNAL":            13,
	"UNAVAILABLE":         14,
	"DATA_LOSS":           15,
	"UNAUTHENTICATED":     16,
}

func (x GrpcStatusFilter_Status) String() string {
	return proto.EnumName(GrpcStatusFilter_Status_name, int32(x))
}

func (GrpcStatusFilter_Status) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_67bfd82f8b509e9f, []int{12, 0}
}

type AccessLog struct {
	// The name of the access log implementation to instantiate. The name must
	// match a statically registered access log. Current built-in loggers include:
	//
	// #. "envoy.file_access_log"
	// #. "envoy.http_grpc_access_log"
	// #. "envoy.tcp_grpc_access_log"
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Filter which is used to determine if the access log needs to be written.
	Filter *AccessLogFilter `protobuf:"bytes,2,opt,name=filter,proto3" json:"filter,omitempty"`
	// Custom configuration that depends on the access log being instantiated. Built-in
	// configurations include:
	//
	// #. "envoy.file_access_log": :ref:`FileAccessLog
	//    <envoy_api_msg_config.accesslog.v2.FileAccessLog>`
	// #. "envoy.http_grpc_access_log": :ref:`HttpGrpcAccessLogConfig
	//    <envoy_api_msg_config.accesslog.v2.HttpGrpcAccessLogConfig>`
	// #. "envoy.tcp_grpc_access_log": :ref:`TcpGrpcAccessLogConfig
	//    <envoy_api_msg_config.accesslog.v2.TcpGrpcAccessLogConfig>`
	//
	// Types that are valid to be assigned to ConfigType:
	//	*AccessLog_Config
	//	*AccessLog_TypedConfig
	ConfigType           isAccessLog_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *AccessLog) Reset()         { *m = AccessLog{} }
func (m *AccessLog) String() string { return proto.CompactTextString(m) }
func (*AccessLog) ProtoMessage()    {}
func (*AccessLog) Descriptor() ([]byte, []int) {
	return fileDescriptor_67bfd82f8b509e9f, []int{0}
}

func (m *AccessLog) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AccessLog.Unmarshal(m, b)
}
func (m *AccessLog) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AccessLog.Marshal(b, m, deterministic)
}
func (m *AccessLog) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AccessLog.Merge(m, src)
}
func (m *AccessLog) XXX_Size() int {
	return xxx_messageInfo_AccessLog.Size(m)
}
func (m *AccessLog) XXX_DiscardUnknown() {
	xxx_messageInfo_AccessLog.DiscardUnknown(m)
}

var xxx_messageInfo_AccessLog proto.InternalMessageInfo

func (m *AccessLog) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *AccessLog) GetFilter() *AccessLogFilter {
	if m != nil {
		return m.Filter
	}
	return nil
}

type isAccessLog_ConfigType interface {
	isAccessLog_ConfigType()
}

type AccessLog_Config struct {
	Config *_struct.Struct `protobuf:"bytes,3,opt,name=config,proto3,oneof"`
}

type AccessLog_TypedConfig struct {
	TypedConfig *any.Any `protobuf:"bytes,4,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*AccessLog_Config) isAccessLog_ConfigType() {}

func (*AccessLog_TypedConfig) isAccessLog_ConfigType() {}

func (m *AccessLog) GetConfigType() isAccessLog_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

// Deprecated: Do not use.
func (m *AccessLog) GetConfig() *_struct.Struct {
	if x, ok := m.GetConfigType().(*AccessLog_Config); ok {
		return x.Config
	}
	return nil
}

func (m *AccessLog) GetTypedConfig() *any.Any {
	if x, ok := m.GetConfigType().(*AccessLog_TypedConfig); ok {
		return x.TypedConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*AccessLog) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*AccessLog_Config)(nil),
		(*AccessLog_TypedConfig)(nil),
	}
}

// [#next-free-field: 12]
type AccessLogFilter struct {
	// Types that are valid to be assigned to FilterSpecifier:
	//	*AccessLogFilter_StatusCodeFilter
	//	*AccessLogFilter_DurationFilter
	//	*AccessLogFilter_NotHealthCheckFilter
	//	*AccessLogFilter_TraceableFilter
	//	*AccessLogFilter_RuntimeFilter
	//	*AccessLogFilter_AndFilter
	//	*AccessLogFilter_OrFilter
	//	*AccessLogFilter_HeaderFilter
	//	*AccessLogFilter_ResponseFlagFilter
	//	*AccessLogFilter_GrpcStatusFilter
	//	*AccessLogFilter_ExtensionFilter
	FilterSpecifier      isAccessLogFilter_FilterSpecifier `protobuf_oneof:"filter_specifier"`
	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
	XXX_unrecognized     []byte                            `json:"-"`
	XXX_sizecache        int32                             `json:"-"`
}

func (m *AccessLogFilter) Reset()         { *m = AccessLogFilter{} }
func (m *AccessLogFilter) String() string { return proto.CompactTextString(m) }
func (*AccessLogFilter) ProtoMessage()    {}
func (*AccessLogFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_67bfd82f8b509e9f, []int{1}
}

func (m *AccessLogFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AccessLogFilter.Unmarshal(m, b)
}
func (m *AccessLogFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AccessLogFilter.Marshal(b, m, deterministic)
}
func (m *AccessLogFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AccessLogFilter.Merge(m, src)
}
func (m *AccessLogFilter) XXX_Size() int {
	return xxx_messageInfo_AccessLogFilter.Size(m)
}
func (m *AccessLogFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_AccessLogFilter.DiscardUnknown(m)
}

var xxx_messageInfo_AccessLogFilter proto.InternalMessageInfo

type isAccessLogFilter_FilterSpecifier interface {
	isAccessLogFilter_FilterSpecifier()
}

type AccessLogFilter_StatusCodeFilter struct {
	StatusCodeFilter *StatusCodeFilter `protobuf:"bytes,1,opt,name=status_code_filter,json=statusCodeFilter,proto3,oneof"`
}

type AccessLogFilter_DurationFilter struct {
	DurationFilter *DurationFilter `protobuf:"bytes,2,opt,name=duration_filter,json=durationFilter,proto3,oneof"`
}

type AccessLogFilter_NotHealthCheckFilter struct {
	NotHealthCheckFilter *NotHealthCheckFilter `protobuf:"bytes,3,opt,name=not_health_check_filter,json=notHealthCheckFilter,proto3,oneof"`
}

type AccessLogFilter_TraceableFilter struct {
	TraceableFilter *TraceableFilter `protobuf:"bytes,4,opt,name=traceable_filter,json=traceableFilter,proto3,oneof"`
}

type AccessLogFilter_RuntimeFilter struct {
	RuntimeFilter *RuntimeFilter `protobuf:"bytes,5,opt,name=runtime_filter,json=runtimeFilter,proto3,oneof"`
}

type AccessLogFilter_AndFilter struct {
	AndFilter *AndFilter `protobuf:"bytes,6,opt,name=and_filter,json=andFilter,proto3,oneof"`
}

type AccessLogFilter_OrFilter struct {
	OrFilter *OrFilter `protobuf:"bytes,7,opt,name=or_filter,json=orFilter,proto3,oneof"`
}

type AccessLogFilter_HeaderFilter struct {
	HeaderFilter *HeaderFilter `protobuf:"bytes,8,opt,name=header_filter,json=headerFilter,proto3,oneof"`
}

type AccessLogFilter_ResponseFlagFilter struct {
	ResponseFlagFilter *ResponseFlagFilter `protobuf:"bytes,9,opt,name=response_flag_filter,json=responseFlagFilter,proto3,oneof"`
}

type AccessLogFilter_GrpcStatusFilter struct {
	GrpcStatusFilter *GrpcStatusFilter `protobuf:"bytes,10,opt,name=grpc_status_filter,json=grpcStatusFilter,proto3,oneof"`
}

type AccessLogFilter_ExtensionFilter struct {
	ExtensionFilter *ExtensionFilter `protobuf:"bytes,11,opt,name=extension_filter,json=extensionFilter,proto3,oneof"`
}

func (*AccessLogFilter_StatusCodeFilter) isAccessLogFilter_FilterSpecifier() {}

func (*AccessLogFilter_DurationFilter) isAccessLogFilter_FilterSpecifier() {}

func (*AccessLogFilter_NotHealthCheckFilter) isAccessLogFilter_FilterSpecifier() {}

func (*AccessLogFilter_TraceableFilter) isAccessLogFilter_FilterSpecifier() {}

func (*AccessLogFilter_RuntimeFilter) isAccessLogFilter_FilterSpecifier() {}

func (*AccessLogFilter_AndFilter) isAccessLogFilter_FilterSpecifier() {}

func (*AccessLogFilter_OrFilter) isAccessLogFilter_FilterSpecifier() {}

func (*AccessLogFilter_HeaderFilter) isAccessLogFilter_FilterSpecifier() {}

func (*AccessLogFilter_ResponseFlagFilter) isAccessLogFilter_FilterSpecifier() {}

func (*AccessLogFilter_GrpcStatusFilter) isAccessLogFilter_FilterSpecifier() {}

func (*AccessLogFilter_ExtensionFilter) isAccessLogFilter_FilterSpecifier() {}

func (m *AccessLogFilter) GetFilterSpecifier() isAccessLogFilter_FilterSpecifier {
	if m != nil {
		return m.FilterSpecifier
	}
	return nil
}

func (m *AccessLogFilter) GetStatusCodeFilter() *StatusCodeFilter {
	if x, ok := m.GetFilterSpecifier().(*AccessLogFilter_StatusCodeFilter); ok {
		return x.StatusCodeFilter
	}
	return nil
}

func (m *AccessLogFilter) GetDurationFilter() *DurationFilter {
	if x, ok := m.GetFilterSpecifier().(*AccessLogFilter_DurationFilter); ok {
		return x.DurationFilter
	}
	return nil
}

func (m *AccessLogFilter) GetNotHealthCheckFilter() *NotHealthCheckFilter {
	if x, ok := m.GetFilterSpecifier().(*AccessLogFilter_NotHealthCheckFilter); ok {
		return x.NotHealthCheckFilter
	}
	return nil
}

func (m *AccessLogFilter) GetTraceableFilter() *TraceableFilter {
	if x, ok := m.GetFilterSpecifier().(*AccessLogFilter_TraceableFilter); ok {
		return x.TraceableFilter
	}
	return nil
}

func (m *AccessLogFilter) GetRuntimeFilter() *RuntimeFilter {
	if x, ok := m.GetFilterSpecifier().(*AccessLogFilter_RuntimeFilter); ok {
		return x.RuntimeFilter
	}
	return nil
}

func (m *AccessLogFilter) GetAndFilter() *AndFilter {
	if x, ok := m.GetFilterSpecifier().(*AccessLogFilter_AndFilter); ok {
		return x.AndFilter
	}
	return nil
}

func (m *AccessLogFilter) GetOrFilter() *OrFilter {
	if x, ok := m.GetFilterSpecifier().(*AccessLogFilter_OrFilter); ok {
		return x.OrFilter
	}
	return nil
}

func (m *AccessLogFilter) GetHeaderFilter() *HeaderFilter {
	if x, ok := m.GetFilterSpecifier().(*AccessLogFilter_HeaderFilter); ok {
		return x.HeaderFilter
	}
	return nil
}

func (m *AccessLogFilter) GetResponseFlagFilter() *ResponseFlagFilter {
	if x, ok := m.GetFilterSpecifier().(*AccessLogFilter_ResponseFlagFilter); ok {
		return x.ResponseFlagFilter
	}
	return nil
}

func (m *AccessLogFilter) GetGrpcStatusFilter() *GrpcStatusFilter {
	if x, ok := m.GetFilterSpecifier().(*AccessLogFilter_GrpcStatusFilter); ok {
		return x.GrpcStatusFilter
	}
	return nil
}

func (m *AccessLogFilter) GetExtensionFilter() *ExtensionFilter {
	if x, ok := m.GetFilterSpecifier().(*AccessLogFilter_ExtensionFilter); ok {
		return x.ExtensionFilter
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*AccessLogFilter) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*AccessLogFilter_StatusCodeFilter)(nil),
		(*AccessLogFilter_DurationFilter)(nil),
		(*AccessLogFilter_NotHealthCheckFilter)(nil),
		(*AccessLogFilter_TraceableFilter)(nil),
		(*AccessLogFilter_RuntimeFilter)(nil),
		(*AccessLogFilter_AndFilter)(nil),
		(*AccessLogFilter_OrFilter)(nil),
		(*AccessLogFilter_HeaderFilter)(nil),
		(*AccessLogFilter_ResponseFlagFilter)(nil),
		(*AccessLogFilter_GrpcStatusFilter)(nil),
		(*AccessLogFilter_ExtensionFilter)(nil),
	}
}

// Filter on an integer comparison.
type ComparisonFilter struct {
	// Comparison operator.
	Op ComparisonFilter_Op `protobuf:"varint,1,opt,name=op,proto3,enum=envoy.config.filter.accesslog.v2.ComparisonFilter_Op" json:"op,omitempty"`
	// Value to compare against.
	Value                *core.RuntimeUInt32 `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *ComparisonFilter) Reset()         { *m = ComparisonFilter{} }
func (m *ComparisonFilter) String() string { return proto.CompactTextString(m) }
func (*ComparisonFilter) ProtoMessage()    {}
func (*ComparisonFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_67bfd82f8b509e9f, []int{2}
}

func (m *ComparisonFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ComparisonFilter.Unmarshal(m, b)
}
func (m *ComparisonFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ComparisonFilter.Marshal(b, m, deterministic)
}
func (m *ComparisonFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ComparisonFilter.Merge(m, src)
}
func (m *ComparisonFilter) XXX_Size() int {
	return xxx_messageInfo_ComparisonFilter.Size(m)
}
func (m *ComparisonFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_ComparisonFilter.DiscardUnknown(m)
}

var xxx_messageInfo_ComparisonFilter proto.InternalMessageInfo

func (m *ComparisonFilter) GetOp() ComparisonFilter_Op {
	if m != nil {
		return m.Op
	}
	return ComparisonFilter_EQ
}

func (m *ComparisonFilter) GetValue() *core.RuntimeUInt32 {
	if m != nil {
		return m.Value
	}
	return nil
}

// Filters on HTTP response/status code.
type StatusCodeFilter struct {
	// Comparison.
	Comparison           *ComparisonFilter `protobuf:"bytes,1,opt,name=comparison,proto3" json:"comparison,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *StatusCodeFilter) Reset()         { *m = StatusCodeFilter{} }
func (m *StatusCodeFilter) String() string { return proto.CompactTextString(m) }
func (*StatusCodeFilter) ProtoMessage()    {}
func (*StatusCodeFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_67bfd82f8b509e9f, []int{3}
}

func (m *StatusCodeFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StatusCodeFilter.Unmarshal(m, b)
}
func (m *StatusCodeFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StatusCodeFilter.Marshal(b, m, deterministic)
}
func (m *StatusCodeFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StatusCodeFilter.Merge(m, src)
}
func (m *StatusCodeFilter) XXX_Size() int {
	return xxx_messageInfo_StatusCodeFilter.Size(m)
}
func (m *StatusCodeFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_StatusCodeFilter.DiscardUnknown(m)
}

var xxx_messageInfo_StatusCodeFilter proto.InternalMessageInfo

func (m *StatusCodeFilter) GetComparison() *ComparisonFilter {
	if m != nil {
		return m.Comparison
	}
	return nil
}

// Filters on total request duration in milliseconds.
type DurationFilter struct {
	// Comparison.
	Comparison           *ComparisonFilter `protobuf:"bytes,1,opt,name=comparison,proto3" json:"comparison,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *DurationFilter) Reset()         { *m = DurationFilter{} }
func (m *DurationFilter) String() string { return proto.CompactTextString(m) }
func (*DurationFilter) ProtoMessage()    {}
func (*DurationFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_67bfd82f8b509e9f, []int{4}
}

func (m *DurationFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DurationFilter.Unmarshal(m, b)
}
func (m *DurationFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DurationFilter.Marshal(b, m, deterministic)
}
func (m *DurationFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DurationFilter.Merge(m, src)
}
func (m *DurationFilter) XXX_Size() int {
	return xxx_messageInfo_DurationFilter.Size(m)
}
func (m *DurationFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_DurationFilter.DiscardUnknown(m)
}

var xxx_messageInfo_DurationFilter proto.InternalMessageInfo

func (m *DurationFilter) GetComparison() *ComparisonFilter {
	if m != nil {
		return m.Comparison
	}
	return nil
}

// Filters for requests that are not health check requests. A health check
// request is marked by the health check filter.
type NotHealthCheckFilter struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *NotHealthCheckFilter) Reset()         { *m = NotHealthCheckFilter{} }
func (m *NotHealthCheckFilter) String() string { return proto.CompactTextString(m) }
func (*NotHealthCheckFilter) ProtoMessage()    {}
func (*NotHealthCheckFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_67bfd82f8b509e9f, []int{5}
}

func (m *NotHealthCheckFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_NotHealthCheckFilter.Unmarshal(m, b)
}
func (m *NotHealthCheckFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_NotHealthCheckFilter.Marshal(b, m, deterministic)
}
func (m *NotHealthCheckFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_NotHealthCheckFilter.Merge(m, src)
}
func (m *NotHealthCheckFilter) XXX_Size() int {
	return xxx_messageInfo_NotHealthCheckFilter.Size(m)
}
func (m *NotHealthCheckFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_NotHealthCheckFilter.DiscardUnknown(m)
}

var xxx_messageInfo_NotHealthCheckFilter proto.InternalMessageInfo

// Filters for requests that are traceable. See the tracing overview for more
// information on how a request becomes traceable.
type TraceableFilter struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *TraceableFilter) Reset()         { *m = TraceableFilter{} }
func (m *TraceableFilter) String() string { return proto.CompactTextString(m) }
func (*TraceableFilter) ProtoMessage()    {}
func (*TraceableFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_67bfd82f8b509e9f, []int{6}
}

func (m *TraceableFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TraceableFilter.Unmarshal(m, b)
}
func (m *TraceableFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TraceableFilter.Marshal(b, m, deterministic)
}
func (m *TraceableFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TraceableFilter.Merge(m, src)
}
func (m *TraceableFilter) XXX_Size() int {
	return xxx_messageInfo_TraceableFilter.Size(m)
}
func (m *TraceableFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_TraceableFilter.DiscardUnknown(m)
}

var xxx_messageInfo_TraceableFilter proto.InternalMessageInfo

// Filters for random sampling of requests.
type RuntimeFilter struct {
	// Runtime key to get an optional overridden numerator for use in the *percent_sampled* field.
	// If found in runtime, this value will replace the default numerator.
	RuntimeKey string `protobuf:"bytes,1,opt,name=runtime_key,json=runtimeKey,proto3" json:"runtime_key,omitempty"`
	// The default sampling percentage. If not specified, defaults to 0% with denominator of 100.
	PercentSampled *_type.FractionalPercent `protobuf:"bytes,2,opt,name=percent_sampled,json=percentSampled,proto3" json:"percent_sampled,omitempty"`
	// By default, sampling pivots on the header
	// :ref:`x-request-id<config_http_conn_man_headers_x-request-id>` being present. If
	// :ref:`x-request-id<config_http_conn_man_headers_x-request-id>` is present, the filter will
	// consistently sample across multiple hosts based on the runtime key value and the value
	// extracted from :ref:`x-request-id<config_http_conn_man_headers_x-request-id>`. If it is
	// missing, or *use_independent_randomness* is set to true, the filter will randomly sample based
	// on the runtime key value alone. *use_independent_randomness* can be used for logging kill
	// switches within complex nested :ref:`AndFilter
	// <envoy_api_msg_config.filter.accesslog.v2.AndFilter>` and :ref:`OrFilter
	// <envoy_api_msg_config.filter.accesslog.v2.OrFilter>` blocks that are easier to reason about
	// from a probability perspective (i.e., setting to true will cause the filter to behave like
	// an independent random variable when composed within logical operator filters).
	UseIndependentRandomness bool     `protobuf:"varint,3,opt,name=use_independent_randomness,json=useIndependentRandomness,proto3" json:"use_independent_randomness,omitempty"`
	XXX_NoUnkeyedLiteral     struct{} `json:"-"`
	XXX_unrecognized         []byte   `json:"-"`
	XXX_sizecache            int32    `json:"-"`
}

func (m *RuntimeFilter) Reset()         { *m = RuntimeFilter{} }
func (m *RuntimeFilter) String() string { return proto.CompactTextString(m) }
func (*RuntimeFilter) ProtoMessage()    {}
func (*RuntimeFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_67bfd82f8b509e9f, []int{7}
}

func (m *RuntimeFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RuntimeFilter.Unmarshal(m, b)
}
func (m *RuntimeFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RuntimeFilter.Marshal(b, m, deterministic)
}
func (m *RuntimeFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RuntimeFilter.Merge(m, src)
}
func (m *RuntimeFilter) XXX_Size() int {
	return xxx_messageInfo_RuntimeFilter.Size(m)
}
func (m *RuntimeFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_RuntimeFilter.DiscardUnknown(m)
}

var xxx_messageInfo_RuntimeFilter proto.InternalMessageInfo

func (m *RuntimeFilter) GetRuntimeKey() string {
	if m != nil {
		return m.RuntimeKey
	}
	return ""
}

func (m *RuntimeFilter) GetPercentSampled() *_type.FractionalPercent {
	if m != nil {
		return m.PercentSampled
	}
	return nil
}

func (m *RuntimeFilter) GetUseIndependentRandomness() bool {
	if m != nil {
		return m.UseIndependentRandomness
	}
	return false
}

// Performs a logical “and” operation on the result of each filter in filters.
// Filters are evaluated sequentially and if one of them returns false, the
// filter returns false immediately.
type AndFilter struct {
	Filters              []*AccessLogFilter `protobuf:"bytes,1,rep,name=filters,proto3" json:"filters,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *AndFilter) Reset()         { *m = AndFilter{} }
func (m *AndFilter) String() string { return proto.CompactTextString(m) }
func (*AndFilter) ProtoMessage()    {}
func (*AndFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_67bfd82f8b509e9f, []int{8}
}

func (m *AndFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AndFilter.Unmarshal(m, b)
}
func (m *AndFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AndFilter.Marshal(b, m, deterministic)
}
func (m *AndFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AndFilter.Merge(m, src)
}
func (m *AndFilter) XXX_Size() int {
	return xxx_messageInfo_AndFilter.Size(m)
}
func (m *AndFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_AndFilter.DiscardUnknown(m)
}

var xxx_messageInfo_AndFilter proto.InternalMessageInfo

func (m *AndFilter) GetFilters() []*AccessLogFilter {
	if m != nil {
		return m.Filters
	}
	return nil
}

// Performs a logical “or” operation on the result of each individual filter.
// Filters are evaluated sequentially and if one of them returns true, the
// filter returns true immediately.
type OrFilter struct {
	Filters              []*AccessLogFilter `protobuf:"bytes,2,rep,name=filters,proto3" json:"filters,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *OrFilter) Reset()         { *m = OrFilter{} }
func (m *OrFilter) String() string { return proto.CompactTextString(m) }
func (*OrFilter) ProtoMessage()    {}
func (*OrFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_67bfd82f8b509e9f, []int{9}
}

func (m *OrFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OrFilter.Unmarshal(m, b)
}
func (m *OrFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OrFilter.Marshal(b, m, deterministic)
}
func (m *OrFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OrFilter.Merge(m, src)
}
func (m *OrFilter) XXX_Size() int {
	return xxx_messageInfo_OrFilter.Size(m)
}
func (m *OrFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_OrFilter.DiscardUnknown(m)
}

var xxx_messageInfo_OrFilter proto.InternalMessageInfo

func (m *OrFilter) GetFilters() []*AccessLogFilter {
	if m != nil {
		return m.Filters
	}
	return nil
}

// Filters requests based on the presence or value of a request header.
type HeaderFilter struct {
	// Only requests with a header which matches the specified HeaderMatcher will pass the filter
	// check.
	Header               *route.HeaderMatcher `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *HeaderFilter) Reset()         { *m = HeaderFilter{} }
func (m *HeaderFilter) String() string { return proto.CompactTextString(m) }
func (*HeaderFilter) ProtoMessage()    {}
func (*HeaderFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_67bfd82f8b509e9f, []int{10}
}

func (m *HeaderFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HeaderFilter.Unmarshal(m, b)
}
func (m *HeaderFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HeaderFilter.Marshal(b, m, deterministic)
}
func (m *HeaderFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HeaderFilter.Merge(m, src)
}
func (m *HeaderFilter) XXX_Size() int {
	return xxx_messageInfo_HeaderFilter.Size(m)
}
func (m *HeaderFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_HeaderFilter.DiscardUnknown(m)
}

var xxx_messageInfo_HeaderFilter proto.InternalMessageInfo

func (m *HeaderFilter) GetHeader() *route.HeaderMatcher {
	if m != nil {
		return m.Header
	}
	return nil
}

// Filters requests that received responses with an Envoy response flag set.
// A list of the response flags can be found
// in the access log formatter :ref:`documentation<config_access_log_format_response_flags>`.
type ResponseFlagFilter struct {
	// Only responses with the any of the flags listed in this field will be logged.
	// This field is optional. If it is not specified, then any response flag will pass
	// the filter check.
	Flags                []string `protobuf:"bytes,1,rep,name=flags,proto3" json:"flags,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ResponseFlagFilter) Reset()         { *m = ResponseFlagFilter{} }
func (m *ResponseFlagFilter) String() string { return proto.CompactTextString(m) }
func (*ResponseFlagFilter) ProtoMessage()    {}
func (*ResponseFlagFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_67bfd82f8b509e9f, []int{11}
}

func (m *ResponseFlagFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ResponseFlagFilter.Unmarshal(m, b)
}
func (m *ResponseFlagFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ResponseFlagFilter.Marshal(b, m, deterministic)
}
func (m *ResponseFlagFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ResponseFlagFilter.Merge(m, src)
}
func (m *ResponseFlagFilter) XXX_Size() int {
	return xxx_messageInfo_ResponseFlagFilter.Size(m)
}
func (m *ResponseFlagFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_ResponseFlagFilter.DiscardUnknown(m)
}

var xxx_messageInfo_ResponseFlagFilter proto.InternalMessageInfo

func (m *ResponseFlagFilter) GetFlags() []string {
	if m != nil {
		return m.Flags
	}
	return nil
}

// Filters gRPC requests based on their response status. If a gRPC status is not provided, the
// filter will infer the status from the HTTP status code.
type GrpcStatusFilter struct {
	// Logs only responses that have any one of the gRPC statuses in this field.
	Statuses []GrpcStatusFilter_Status `protobuf:"varint,1,rep,packed,name=statuses,proto3,enum=envoy.config.filter.accesslog.v2.GrpcStatusFilter_Status" json:"statuses,omitempty"`
	// If included and set to true, the filter will instead block all responses with a gRPC status or
	// inferred gRPC status enumerated in statuses, and allow all other responses.
	Exclude              bool     `protobuf:"varint,2,opt,name=exclude,proto3" json:"exclude,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GrpcStatusFilter) Reset()         { *m = GrpcStatusFilter{} }
func (m *GrpcStatusFilter) String() string { return proto.CompactTextString(m) }
func (*GrpcStatusFilter) ProtoMessage()    {}
func (*GrpcStatusFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_67bfd82f8b509e9f, []int{12}
}

func (m *GrpcStatusFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GrpcStatusFilter.Unmarshal(m, b)
}
func (m *GrpcStatusFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GrpcStatusFilter.Marshal(b, m, deterministic)
}
func (m *GrpcStatusFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GrpcStatusFilter.Merge(m, src)
}
func (m *GrpcStatusFilter) XXX_Size() int {
	return xxx_messageInfo_GrpcStatusFilter.Size(m)
}
func (m *GrpcStatusFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_GrpcStatusFilter.DiscardUnknown(m)
}

var xxx_messageInfo_GrpcStatusFilter proto.InternalMessageInfo

func (m *GrpcStatusFilter) GetStatuses() []GrpcStatusFilter_Status {
	if m != nil {
		return m.Statuses
	}
	return nil
}

func (m *GrpcStatusFilter) GetExclude() bool {
	if m != nil {
		return m.Exclude
	}
	return false
}

// Extension filter is statically registered at runtime.
type ExtensionFilter struct {
	// The name of the filter implementation to instantiate. The name must
	// match a statically registered filter.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Custom configuration that depends on the filter being instantiated.
	//
	// Types that are valid to be assigned to ConfigType:
	//	*ExtensionFilter_Config
	//	*ExtensionFilter_TypedConfig
	ConfigType           isExtensionFilter_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
	XXX_unrecognized     []byte                       `json:"-"`
	XXX_sizecache        int32                        `json:"-"`
}

func (m *ExtensionFilter) Reset()         { *m = ExtensionFilter{} }
func (m *ExtensionFilter) String() string { return proto.CompactTextString(m) }
func (*ExtensionFilter) ProtoMessage()    {}
func (*ExtensionFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_67bfd82f8b509e9f, []int{13}
}

func (m *ExtensionFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ExtensionFilter.Unmarshal(m, b)
}
func (m *ExtensionFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ExtensionFilter.Marshal(b, m, deterministic)
}
func (m *ExtensionFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ExtensionFilter.Merge(m, src)
}
func (m *ExtensionFilter) XXX_Size() int {
	return xxx_messageInfo_ExtensionFilter.Size(m)
}
func (m *ExtensionFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_ExtensionFilter.DiscardUnknown(m)
}

var xxx_messageInfo_ExtensionFilter proto.InternalMessageInfo

func (m *ExtensionFilter) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isExtensionFilter_ConfigType interface {
	isExtensionFilter_ConfigType()
}

type ExtensionFilter_Config struct {
	Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"`
}

type ExtensionFilter_TypedConfig struct {
	TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*ExtensionFilter_Config) isExtensionFilter_ConfigType() {}

func (*ExtensionFilter_TypedConfig) isExtensionFilter_ConfigType() {}

func (m *ExtensionFilter) GetConfigType() isExtensionFilter_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

func (m *ExtensionFilter) GetConfig() *_struct.Struct {
	if x, ok := m.GetConfigType().(*ExtensionFilter_Config); ok {
		return x.Config
	}
	return nil
}

func (m *ExtensionFilter) GetTypedConfig() *any.Any {
	if x, ok := m.GetConfigType().(*ExtensionFilter_TypedConfig); ok {
		return x.TypedConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ExtensionFilter) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*ExtensionFilter_Config)(nil),
		(*ExtensionFilter_TypedConfig)(nil),
	}
}

func init() {
	proto.RegisterEnum("envoy.config.filter.accesslog.v2.ComparisonFilter_Op", ComparisonFilter_Op_name, ComparisonFilter_Op_value)
	proto.RegisterEnum("envoy.config.filter.accesslog.v2.GrpcStatusFilter_Status", GrpcStatusFilter_Status_name, GrpcStatusFilter_Status_value)
	proto.RegisterType((*AccessLog)(nil), "envoy.config.filter.accesslog.v2.AccessLog")
	proto.RegisterType((*AccessLogFilter)(nil), "envoy.config.filter.accesslog.v2.AccessLogFilter")
	proto.RegisterType((*ComparisonFilter)(nil), "envoy.config.filter.accesslog.v2.ComparisonFilter")
	proto.RegisterType((*StatusCodeFilter)(nil), "envoy.config.filter.accesslog.v2.StatusCodeFilter")
	proto.RegisterType((*DurationFilter)(nil), "envoy.config.filter.accesslog.v2.DurationFilter")
	proto.RegisterType((*NotHealthCheckFilter)(nil), "envoy.config.filter.accesslog.v2.NotHealthCheckFilter")
	proto.RegisterType((*TraceableFilter)(nil), "envoy.config.filter.accesslog.v2.TraceableFilter")
	proto.RegisterType((*RuntimeFilter)(nil), "envoy.config.filter.accesslog.v2.RuntimeFilter")
	proto.RegisterType((*AndFilter)(nil), "envoy.config.filter.accesslog.v2.AndFilter")
	proto.RegisterType((*OrFilter)(nil), "envoy.config.filter.accesslog.v2.OrFilter")
	proto.RegisterType((*HeaderFilter)(nil), "envoy.config.filter.accesslog.v2.HeaderFilter")
	proto.RegisterType((*ResponseFlagFilter)(nil), "envoy.config.filter.accesslog.v2.ResponseFlagFilter")
	proto.RegisterType((*GrpcStatusFilter)(nil), "envoy.config.filter.accesslog.v2.GrpcStatusFilter")
	proto.RegisterType((*ExtensionFilter)(nil), "envoy.config.filter.accesslog.v2.ExtensionFilter")
}

func init() {
	proto.RegisterFile("envoy/config/filter/accesslog/v2/accesslog.proto", fileDescriptor_67bfd82f8b509e9f)
}

var fileDescriptor_67bfd82f8b509e9f = []byte{
	// 1351 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xc1, 0x6e, 0xdb, 0x46,
	0x10, 0x35, 0x29, 0x5b, 0x96, 0x46, 0x96, 0xb4, 0xd9, 0xb8, 0xb1, 0x1a, 0xa4, 0x85, 0xcb, 0x53,
	0xd0, 0x02, 0x52, 0xe2, 0x34, 0x01, 0x02, 0xf4, 0x42, 0x8a, 0x2b, 0x8b, 0x08, 0x4d, 0xba, 0x2b,
	0x31, 0x75, 0xd0, 0xa0, 0x04, 0x4d, 0xae, 0x65, 0x21, 0x32, 0x49, 0x90, 0x94, 0x11, 0x5f, 0x7b,
	0x2a, 0x7a, 0xcc, 0x27, 0xf4, 0x1b, 0x7a, 0x68, 0x4f, 0xfd, 0x82, 0x7e, 0x49, 0x7f, 0xa0, 0xf0,
	0xa9, 0x20, 0x97, 0xa4, 0x2d, 0x39, 0x88, 0xdc, 0xa0, 0x3d, 0x50, 0xe4, 0xce, 0xec, 0x7b, 0x33,
	0x3b, 0x9a, 0x7d, 0xbb, 0xf0, 0x88, 0xf9, 0xe7, 0xc1, 0x45, 0xcf, 0x0d, 0xfc, 0x93, 0xe9, 0xa4,
	0x77, 0x32, 0x9d, 0x25, 0x2c, 0xea, 0x39, 0xae, 0xcb, 0xe2, 0x78, 0x16, 0x4c, 0x7a, 0xe7, 0x7b,
	0x57, 0x83, 0x6e, 0x18, 0x05, 0x49, 0x80, 0x77, 0x33, 0x44, 0x97, 0x23, 0xba, 0x1c, 0xd1, 0xbd,
	0x9a, 0x74, 0xbe, 0x77, 0xff, 0x01, 0xe7, 0x74, 0xc2, 0x69, 0x8a, 0x77, 0x83, 0x88, 0xf5, 0x8e,
	0x9d, 0x98, 0x71, 0xfc, 0xfd, 0xcf, 0x17, 0xbc, 0x51, 0x30, 0x4f, 0x18, 0xff, 0xcd, 0xfd, 0x1d,
	0xee, 0x4f, 0x2e, 0x42, 0xd6, 0x0b, 0x59, 0xe4, 0x32, 0x3f, 0xc9, 0x3d, 0x9f, 0x4e, 0x82, 0x60,
	0x32, 0x63, 0xbd, 0x6c, 0x74, 0x3c, 0x3f, 0xe9, 0x39, 0xfe, 0x45, 0xee, 0x7a, 0xb0, 0xec, 0x8a,
	0x93, 0x68, 0xee, 0x16, 0xc0, 0x9d, 0x73, 0x67, 0x36, 0xf5, 0x9c, 0x84, 0xf5, 0x8a, 0x0f, 0xee,
	0x90, 0xfe, 0x12, 0xa0, 0x2e, 0x67, 0xa9, 0xeb, 0xc1, 0x04, 0x63, 0x58, 0xf7, 0x9d, 0x33, 0xd6,
	0x11, 0x76, 0x85, 0x87, 0x75, 0x9a, 0x7d, 0x63, 0x0d, 0xaa, 0x7c, 0x89, 0x1d, 0x71, 0x57, 0x78,
	0xd8, 0xd8, 0x7b, 0xdc, 0x5d, 0xb5, 0xfc, 0x6e, 0x49, 0x38, 0xc8, 0x9c, 0x34, 0x27, 0xc0, 0x4f,
	0xa1, 0xca, 0x51, 0x9d, 0x4a, 0x46, 0xb5, 0xd3, 0xe5, 0x49, 0x77, 0x8b, 0xa4, 0xbb, 0xa3, 0x2c,
	0x69, 0x45, 0xec, 0x08, 0xc3, 0x35, 0x9a, 0x4f, 0xc6, 0xcf, 0x61, 0x2b, 0xad, 0x85, 0x67, 0xe7,
	0xe0, 0xf5, 0x0c, 0xbc, 0x7d, 0x03, 0x2c, 0xfb, 0x17, 0xc3, 0x35, 0xda, 0xc8, 0xe6, 0xf6, 0xb3,
	0xa9, 0x4a, 0x13, 0x1a, 0x1c, 0x64, 0xa7, 0x56, 0xe9, 0xd7, 0x1a, 0xb4, 0x97, 0x92, 0xc3, 0xc7,
	0x80, 0xe3, 0xc4, 0x49, 0xe6, 0xb1, 0xed, 0x06, 0x1e, 0xb3, 0xf3, 0xb5, 0x0a, 0x59, 0x8c, 0xbd,
	0xd5, 0x6b, 0x1d, 0x65, 0xd8, 0x7e, 0xe0, 0x31, 0xce, 0x37, 0x5c, 0xa3, 0x28, 0x5e, 0xb2, 0xe1,
	0xef, 0xa1, 0xed, 0xcd, 0x23, 0x27, 0x99, 0x06, 0xbe, 0xbd, 0x50, 0xcc, 0x47, 0xab, 0x03, 0xa8,
	0x39, 0xb0, 0xa4, 0x6f, 0x79, 0x0b, 0x16, 0x1c, 0xc0, 0x8e, 0x1f, 0x24, 0xf6, 0x29, 0x73, 0x66,
	0xc9, 0xa9, 0xed, 0x9e, 0x32, 0xf7, 0x4d, 0x11, 0x84, 0x97, 0xf9, 0xd9, 0xea, 0x20, 0x46, 0x90,
	0x0c, 0x33, 0x7c, 0x3f, 0x85, 0x97, 0xa1, 0xb6, 0xfd, 0xf7, 0xd8, 0xf1, 0x0f, 0x80, 0x92, 0xc8,
	0x71, 0x99, 0x73, 0x3c, 0x2b, 0xeb, 0xb5, 0x7e, 0xdb, 0xde, 0x18, 0x17, 0xc8, 0x32, 0x48, 0x3b,
	0x59, 0x34, 0xe1, 0x23, 0x68, 0x45, 0x73, 0x3f, 0x99, 0x9e, 0x95, 0xec, 0x1b, 0x19, 0x7b, 0x6f,
	0x35, 0x3b, 0xe5, 0xb8, 0x92, 0xbb, 0x19, 0x5d, 0x37, 0x60, 0x1d, 0xc0, 0xf1, 0xbd, 0x82, 0xb5,
	0x9a, 0xb1, 0x7e, 0x75, 0x8b, 0x7e, 0xf6, 0xbd, 0x92, 0xb1, 0xee, 0x14, 0x03, 0xac, 0x41, 0x3d,
	0x88, 0x0a, 0xb2, 0xcd, 0x8c, 0xec, 0xcb, 0xd5, 0x64, 0x66, 0x54, 0x72, 0xd5, 0x82, 0xfc, 0x1b,
	0x5b, 0xd0, 0x3c, 0x65, 0x8e, 0xc7, 0x4a, 0xba, 0x5a, 0x46, 0xd7, 0x5d, 0x4d, 0x37, 0xcc, 0x60,
	0x25, 0xe5, 0xd6, 0xe9, 0xb5, 0x31, 0x3e, 0x85, 0xed, 0x88, 0xc5, 0x61, 0xe0, 0xc7, 0xcc, 0x3e,
	0x99, 0x39, 0x93, 0x82, 0xbd, 0x9e, 0xb1, 0x7f, 0x7d, 0x8b, 0x7a, 0xe6, 0xe8, 0xc1, 0xcc, 0x99,
	0x94, 0x31, 0x70, 0x74, 0xc3, 0x9a, 0xee, 0xa2, 0x49, 0x14, 0xba, 0x76, 0xbe, 0x95, 0xf2, 0x38,
	0x70, 0xdb, 0x5d, 0xb4, 0x1f, 0x85, 0x2e, 0xdf, 0x49, 0x57, 0xbb, 0x68, 0xb2, 0x64, 0x4b, 0xfb,
	0x8e, 0xbd, 0x4d, 0x98, 0x1f, 0x5f, 0xdb, 0x46, 0x8d, 0xdb, 0xf6, 0x1d, 0x29, 0x90, 0x57, 0x7d,
	0xc7, 0x16, 0x4d, 0xca, 0x0e, 0x20, 0x8e, 0xb4, 0xe3, 0x90, 0xb9, 0xd3, 0x93, 0x29, 0x8b, 0x70,
	0xe5, 0x6f, 0x45, 0x90, 0x7e, 0x17, 0x00, 0xf5, 0x83, 0xb3, 0xd0, 0x89, 0xa6, 0x71, 0xb9, 0xed,
	0x4c, 0x10, 0x83, 0x30, 0xd3, 0x89, 0xd6, 0xde, 0xd3, 0xd5, 0xf1, 0x97, 0xf1, 0x5d, 0x33, 0x54,
	0x6a, 0x97, 0xca, 0xc6, 0x8f, 0x82, 0x88, 0x04, 0x2a, 0x06, 0x21, 0x7e, 0x06, 0x1b, 0xe7, 0xce,
	0x6c, 0xce, 0x72, 0x69, 0xd8, 0xcd, 0x39, 0x9d, 0x70, 0x9a, 0xe2, 0xd3, 0x43, 0xa4, 0x68, 0x6f,
	0x4b, 0xf3, 0x93, 0x27, 0x7b, 0x94, 0x4f, 0x97, 0x1e, 0x80, 0x68, 0x86, 0xb8, 0x0a, 0x22, 0xf9,
	0x16, 0xad, 0xa5, 0xef, 0x7d, 0x82, 0x84, 0xf4, 0xad, 0x13, 0x24, 0x4a, 0x21, 0xa0, 0x65, 0x89,
	0xc2, 0xaf, 0x01, 0xdc, 0x32, 0x9d, 0xdb, 0x4b, 0xdd, 0xf2, 0x12, 0xb2, 0xfc, 0x7f, 0xce, 0xf2,
	0xbf, 0xc6, 0x27, 0xf9, 0xd0, 0x5a, 0xd4, 0xac, 0xff, 0x39, 0xde, 0x3d, 0xd8, 0x7e, 0x9f, 0x7c,
	0x49, 0x77, 0xa0, 0xbd, 0x24, 0x36, 0xd2, 0x1f, 0x02, 0x34, 0x17, 0x24, 0x02, 0x3f, 0x84, 0x46,
	0xa1, 0x35, 0x6f, 0xd8, 0x05, 0x3f, 0xf8, 0x94, 0xcd, 0x4b, 0x65, 0x3d, 0x12, 0x77, 0x05, 0x0a,
	0xb9, 0xef, 0x05, 0xbb, 0xc0, 0x03, 0x68, 0xe7, 0x87, 0xb1, 0x1d, 0x3b, 0x67, 0xe1, 0x8c, 0x79,
	0xf9, 0x1f, 0xf5, 0x59, 0xbe, 0x92, 0xf4, 0x84, 0xe9, 0x0e, 0x22, 0xc7, 0x4d, 0x57, 0xee, 0xcc,
	0x0e, 0xf9, 0x64, 0xda, 0xca, 0x51, 0x23, 0x0e, 0xc2, 0xdf, 0xc0, 0xfd, 0x79, 0xcc, 0xec, 0xa9,
	0xef, 0xb1, 0x90, 0xf9, 0x5e, 0xca, 0x17, 0x39, 0xbe, 0x17, 0x9c, 0xf9, 0x2c, 0x8e, 0x33, 0xc5,
	0xae, 0xd1, 0xce, 0x3c, 0x66, 0xda, 0xd5, 0x04, 0x5a, 0xfa, 0xa5, 0x63, 0xa8, 0x97, 0x6a, 0x84,
	0x2d, 0xd8, 0xe4, 0x75, 0x8b, 0x3b, 0xc2, 0x6e, 0xe5, 0xa3, 0xce, 0xe6, 0xac, 0xa6, 0xef, 0x04,
	0xb1, 0x26, 0xd2, 0x82, 0x4b, 0x72, 0xa0, 0x66, 0x46, 0x37, 0x43, 0x88, 0xff, 0x61, 0x88, 0x11,
	0x6c, 0x5d, 0x17, 0x2e, 0xdc, 0x87, 0x2a, 0x17, 0xae, 0xbc, 0x3b, 0xbe, 0x58, 0x6c, 0x7e, 0x7e,
	0x3b, 0xe2, 0x88, 0x03, 0x27, 0x71, 0x4f, 0x17, 0x9a, 0x21, 0x87, 0x4a, 0x3f, 0x09, 0x80, 0x6f,
	0x0a, 0x16, 0x8e, 0x60, 0x23, 0xd5, 0x3e, 0x5e, 0xa3, 0xba, 0xf2, 0xfa, 0x52, 0x79, 0xf5, 0x4e,
	0x78, 0x29, 0x8d, 0x23, 0x4a, 0x45, 0x7d, 0x48, 0x45, 0x2b, 0x7d, 0xc6, 0x54, 0xd4, 0x29, 0x15,
	0xad, 0xf4, 0x19, 0x50, 0xd1, 0xea, 0x53, 0xd1, 0x32, 0xa9, 0x68, 0x50, 0x2a, 0xaa, 0x1a, 0x15,
	0x07, 0x1a, 0x15, 0xa9, 0x4e, 0xd7, 0x2d, 0x99, 0x1c, 0xd1, 0x75, 0xaa, 0x8f, 0x08, 0x15, 0xd5,
	0x3e, 0xad, 0x58, 0xf4, 0x88, 0x8a, 0x23, 0x8d, 0x8a, 0xda, 0x90, 0x56, 0xd4, 0x43, 0x42, 0x79,
	0x28, 0xe9, 0xcf, 0x0a, 0xa0, 0x65, 0x4d, 0xc3, 0x1e, 0xd4, 0xb8, 0x3c, 0x32, 0x9e, 0x4b, 0x6b,
	0xef, 0xf9, 0xbf, 0x57, 0xc6, 0xfc, 0xc2, 0xa1, 0x34, 0x2f, 0x15, 0x78, 0x27, 0x6c, 0x4a, 0xb9,
	0x80, 0x94, 0xcc, 0xb8, 0x03, 0x9b, 0xec, 0xad, 0x3b, 0x9b, 0x7b, 0x5c, 0x48, 0x6a, 0xb4, 0x18,
	0x4a, 0xbf, 0x89, 0x50, 0xe5, 0xe8, 0x54, 0x1d, 0xcc, 0x17, 0x68, 0x0d, 0x6f, 0x41, 0xad, 0x2f,
	0x1b, 0x7d, 0xa2, 0x13, 0x15, 0x09, 0xb8, 0x01, 0x9b, 0x96, 0xf1, 0xc2, 0x30, 0xbf, 0x33, 0x90,
	0x88, 0xb7, 0x01, 0x69, 0xc6, 0x4b, 0x59, 0xd7, 0x54, 0x5b, 0xa6, 0xfb, 0xd6, 0x01, 0x31, 0xc6,
	0xa8, 0x82, 0x3f, 0x81, 0x3b, 0x2a, 0x91, 0x55, 0x5d, 0x33, 0x88, 0x4d, 0x8e, 0xfa, 0x84, 0xa8,
	0x44, 0x45, 0xeb, 0xb8, 0x09, 0x75, 0xc3, 0x1c, 0xdb, 0x03, 0xd3, 0x32, 0x54, 0xb4, 0x81, 0x31,
	0xb4, 0x64, 0x9d, 0x12, 0x59, 0x7d, 0x65, 0x93, 0x23, 0x6d, 0x34, 0x1e, 0xa1, 0x6a, 0x8a, 0x3c,
	0x24, 0xf4, 0x40, 0x1b, 0x8d, 0x34, 0xd3, 0xb0, 0x55, 0x62, 0x68, 0x44, 0x45, 0x9b, 0xf8, 0x1e,
	0x60, 0x4a, 0x46, 0xa6, 0x45, 0xfb, 0x29, 0xe1, 0x50, 0xb6, 0x46, 0x63, 0xa2, 0xa2, 0x1a, 0xde,
	0x81, 0xbb, 0x03, 0x59, 0xd3, 0x89, 0x6a, 0x1f, 0x52, 0xd2, 0x37, 0x0d, 0x55, 0x1b, 0x6b, 0xa6,
	0x81, 0xea, 0x69, 0x92, 0xb2, 0x62, 0xd2, 0x74, 0x16, 0x60, 0x04, 0x5b, 0xa6, 0x35, 0xb6, 0xcd,
	0x81, 0x4d, 0x65, 0x63, 0x9f, 0xa0, 0x06, 0xbe, 0x03, 0x4d, 0xcb, 0xd0, 0x0e, 0x0e, 0x75, 0x92,
	0x66, 0x4c, 0x54, 0xb4, 0x95, 0x2e, 0x52, 0x33, 0xc6, 0x84, 0x1a, 0xb2, 0x8e, 0x9a, 0xb8, 0x0d,
	0x0d, 0xcb, 0x90, 0x5f, 0xca, 0x9a, 0x2e, 0x2b, 0x3a, 0x41, 0xad, 0x34, 0x77, 0x55, 0x1e, 0xcb,
	0xb6, 0x6e, 0x8e, 0x46, 0xa8, 0x8d, 0xef, 0x42, 0xdb, 0x32, 0x64, 0x6b, 0x3c, 0x24, 0xc6, 0x58,
	0xeb, 0xcb, 0x29, 0x05, 0x92, 0x7e, 0x11, 0xa0, 0xbd, 0x74, 0x82, 0xbc, 0xf7, 0xb2, 0xfc, 0xb8,
	0xbc, 0xe1, 0x8a, 0x1f, 0xbc, 0xe1, 0x7e, 0xe0, 0x76, 0x5b, 0xf9, 0xd8, 0xdb, 0xad, 0xa2, 0x40,
	0x77, 0x1a, 0xf0, 0x8e, 0x0a, 0xa3, 0xe0, 0xed, 0xc5, 0xca, 0xe6, 0x52, 0x5a, 0x72, 0x31, 0x3a,
	0x4c, 0xc3, 0x1c, 0x0a, 0xc7, 0xd5, 0x2c, 0xde, 0x93, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x01,
	0x67, 0x5e, 0xe6, 0x16, 0x0d, 0x00, 0x00,
}
  07070100000091000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003300000000cilium-proxy-20200109/go/envoy/config/filter/dubbo    07070100000092000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003A00000000cilium-proxy-20200109/go/envoy/config/filter/dubbo/router 07070100000093000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004300000000cilium-proxy-20200109/go/envoy/config/filter/dubbo/router/v2alpha1    07070100000094000081A4000003E800000064000000015E17A24700000AC2000000000000000000000000000000000000005000000000cilium-proxy-20200109/go/envoy/config/filter/dubbo/router/v2alpha1/router.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/dubbo/router/v2alpha1/router.proto

package envoy_config_filter_dubbo_router_v2alpha1

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type Router struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Router) Reset()         { *m = Router{} }
func (m *Router) String() string { return proto.CompactTextString(m) }
func (*Router) ProtoMessage()    {}
func (*Router) Descriptor() ([]byte, []int) {
	return fileDescriptor_780c3e41bb913085, []int{0}
}

func (m *Router) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Router.Unmarshal(m, b)
}
func (m *Router) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Router.Marshal(b, m, deterministic)
}
func (m *Router) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Router.Merge(m, src)
}
func (m *Router) XXX_Size() int {
	return xxx_messageInfo_Router.Size(m)
}
func (m *Router) XXX_DiscardUnknown() {
	xxx_messageInfo_Router.DiscardUnknown(m)
}

var xxx_messageInfo_Router proto.InternalMessageInfo

func init() {
	proto.RegisterType((*Router)(nil), "envoy.config.filter.dubbo.router.v2alpha1.Router")
}

func init() {
	proto.RegisterFile("envoy/config/filter/dubbo/router/v2alpha1/router.proto", fileDescriptor_780c3e41bb913085)
}

var fileDescriptor_780c3e41bb913085 = []byte{
	// 129 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4b, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0xcb, 0xcc, 0x29, 0x49, 0x2d, 0xd2,
	0x4f, 0x29, 0x4d, 0x4a, 0xca, 0xd7, 0x2f, 0xca, 0x2f, 0x05, 0x71, 0xca, 0x8c, 0x12, 0x73, 0x0a,
	0x32, 0x12, 0x0d, 0xa1, 0x7c, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x4d, 0xb0, 0x3e, 0x3d,
	0x88, 0x3e, 0x3d, 0x88, 0x3e, 0x3d, 0xb0, 0x3e, 0x3d, 0xa8, 0x3a, 0x98, 0x3e, 0x25, 0x0e, 0x2e,
	0xb6, 0x20, 0xb0, 0x90, 0x93, 0x07, 0x97, 0x79, 0x66, 0xbe, 0x1e, 0x58, 0x67, 0x41, 0x51, 0x7e,
	0x45, 0xa5, 0x1e, 0xd1, 0x86, 0x38, 0x71, 0x43, 0x8c, 0x08, 0x00, 0x59, 0x1e, 0xc0, 0x98, 0xc4,
	0x06, 0x76, 0x85, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x23, 0xe2, 0x28, 0xfc, 0xbf, 0x00, 0x00,
	0x00,
}
  07070100000095000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003300000000cilium-proxy-20200109/go/envoy/config/filter/fault    07070100000096000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003600000000cilium-proxy-20200109/go/envoy/config/filter/fault/v2 07070100000097000081A4000003E800000064000000015E17A24700003DF0000000000000000000000000000000000000004200000000cilium-proxy-20200109/go/envoy/config/filter/fault/v2/fault.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/fault/v2/fault.proto

package envoy_config_filter_fault_v2

import (
	fmt "fmt"
	_type "github.com/cilium/proxy/go/envoy/type"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type FaultDelay_FaultDelayType int32

const (
	// Unused and deprecated.
	FaultDelay_FIXED FaultDelay_FaultDelayType = 0
)

var FaultDelay_FaultDelayType_name = map[int32]string{
	0: "FIXED",
}

var FaultDelay_FaultDelayType_value = map[string]int32{
	"FIXED": 0,
}

func (x FaultDelay_FaultDelayType) String() string {
	return proto.EnumName(FaultDelay_FaultDelayType_name, int32(x))
}

func (FaultDelay_FaultDelayType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d1b308afbc13f85b, []int{0, 0}
}

// Delay specification is used to inject latency into the
// HTTP/gRPC/Mongo/Redis operation or delay proxying of TCP connections.
// [#next-free-field: 6]
type FaultDelay struct {
	// Unused and deprecated. Will be removed in the next release.
	Type FaultDelay_FaultDelayType `protobuf:"varint,1,opt,name=type,proto3,enum=envoy.config.filter.fault.v2.FaultDelay_FaultDelayType" json:"type,omitempty"` // Deprecated: Do not use.
	// Types that are valid to be assigned to FaultDelaySecifier:
	//	*FaultDelay_FixedDelay
	//	*FaultDelay_HeaderDelay_
	FaultDelaySecifier isFaultDelay_FaultDelaySecifier `protobuf_oneof:"fault_delay_secifier"`
	// The percentage of operations/connections/requests on which the delay will be injected.
	Percentage           *_type.FractionalPercent `protobuf:"bytes,4,opt,name=percentage,proto3" json:"percentage,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
	XXX_unrecognized     []byte                   `json:"-"`
	XXX_sizecache        int32                    `json:"-"`
}

func (m *FaultDelay) Reset()         { *m = FaultDelay{} }
func (m *FaultDelay) String() string { return proto.CompactTextString(m) }
func (*FaultDelay) ProtoMessage()    {}
func (*FaultDelay) Descriptor() ([]byte, []int) {
	return fileDescriptor_d1b308afbc13f85b, []int{0}
}

func (m *FaultDelay) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FaultDelay.Unmarshal(m, b)
}
func (m *FaultDelay) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FaultDelay.Marshal(b, m, deterministic)
}
func (m *FaultDelay) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FaultDelay.Merge(m, src)
}
func (m *FaultDelay) XXX_Size() int {
	return xxx_messageInfo_FaultDelay.Size(m)
}
func (m *FaultDelay) XXX_DiscardUnknown() {
	xxx_messageInfo_FaultDelay.DiscardUnknown(m)
}

var xxx_messageInfo_FaultDelay proto.InternalMessageInfo

// Deprecated: Do not use.
func (m *FaultDelay) GetType() FaultDelay_FaultDelayType {
	if m != nil {
		return m.Type
	}
	return FaultDelay_FIXED
}

type isFaultDelay_FaultDelaySecifier interface {
	isFaultDelay_FaultDelaySecifier()
}

type FaultDelay_FixedDelay struct {
	FixedDelay *duration.Duration `protobuf:"bytes,3,opt,name=fixed_delay,json=fixedDelay,proto3,oneof"`
}

type FaultDelay_HeaderDelay_ struct {
	HeaderDelay *FaultDelay_HeaderDelay `protobuf:"bytes,5,opt,name=header_delay,json=headerDelay,proto3,oneof"`
}

func (*FaultDelay_FixedDelay) isFaultDelay_FaultDelaySecifier() {}

func (*FaultDelay_HeaderDelay_) isFaultDelay_FaultDelaySecifier() {}

func (m *FaultDelay) GetFaultDelaySecifier() isFaultDelay_FaultDelaySecifier {
	if m != nil {
		return m.FaultDelaySecifier
	}
	return nil
}

func (m *FaultDelay) GetFixedDelay() *duration.Duration {
	if x, ok := m.GetFaultDelaySecifier().(*FaultDelay_FixedDelay); ok {
		return x.FixedDelay
	}
	return nil
}

func (m *FaultDelay) GetHeaderDelay() *FaultDelay_HeaderDelay {
	if x, ok := m.GetFaultDelaySecifier().(*FaultDelay_HeaderDelay_); ok {
		return x.HeaderDelay
	}
	return nil
}

func (m *FaultDelay) GetPercentage() *_type.FractionalPercent {
	if m != nil {
		return m.Percentage
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*FaultDelay) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*FaultDelay_FixedDelay)(nil),
		(*FaultDelay_HeaderDelay_)(nil),
	}
}

// Fault delays are controlled via an HTTP header (if applicable). See the
// :ref:`http fault filter <config_http_filters_fault_injection_http_header>` documentation for
// more information.
type FaultDelay_HeaderDelay struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *FaultDelay_HeaderDelay) Reset()         { *m = FaultDelay_HeaderDelay{} }
func (m *FaultDelay_HeaderDelay) String() string { return proto.CompactTextString(m) }
func (*FaultDelay_HeaderDelay) ProtoMessage()    {}
func (*FaultDelay_HeaderDelay) Descriptor() ([]byte, []int) {
	return fileDescriptor_d1b308afbc13f85b, []int{0, 0}
}

func (m *FaultDelay_HeaderDelay) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FaultDelay_HeaderDelay.Unmarshal(m, b)
}
func (m *FaultDelay_HeaderDelay) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FaultDelay_HeaderDelay.Marshal(b, m, deterministic)
}
func (m *FaultDelay_HeaderDelay) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FaultDelay_HeaderDelay.Merge(m, src)
}
func (m *FaultDelay_HeaderDelay) XXX_Size() int {
	return xxx_messageInfo_FaultDelay_HeaderDelay.Size(m)
}
func (m *FaultDelay_HeaderDelay) XXX_DiscardUnknown() {
	xxx_messageInfo_FaultDelay_HeaderDelay.DiscardUnknown(m)
}

var xxx_messageInfo_FaultDelay_HeaderDelay proto.InternalMessageInfo

// Describes a rate limit to be applied.
type FaultRateLimit struct {
	// Types that are valid to be assigned to LimitType:
	//	*FaultRateLimit_FixedLimit_
	//	*FaultRateLimit_HeaderLimit_
	LimitType isFaultRateLimit_LimitType `protobuf_oneof:"limit_type"`
	// The percentage of operations/connections/requests on which the rate limit will be injected.
	Percentage           *_type.FractionalPercent `protobuf:"bytes,2,opt,name=percentage,proto3" json:"percentage,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
	XXX_unrecognized     []byte                   `json:"-"`
	XXX_sizecache        int32                    `json:"-"`
}

func (m *FaultRateLimit) Reset()         { *m = FaultRateLimit{} }
func (m *FaultRateLimit) String() string { return proto.CompactTextString(m) }
func (*FaultRateLimit) ProtoMessage()    {}
func (*FaultRateLimit) Descriptor() ([]byte, []int) {
	return fileDescriptor_d1b308afbc13f85b, []int{1}
}

func (m *FaultRateLimit) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FaultRateLimit.Unmarshal(m, b)
}
func (m *FaultRateLimit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FaultRateLimit.Marshal(b, m, deterministic)
}
func (m *FaultRateLimit) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FaultRateLimit.Merge(m, src)
}
func (m *FaultRateLimit) XXX_Size() int {
	return xxx_messageInfo_FaultRateLimit.Size(m)
}
func (m *FaultRateLimit) XXX_DiscardUnknown() {
	xxx_messageInfo_FaultRateLimit.DiscardUnknown(m)
}

var xxx_messageInfo_FaultRateLimit proto.InternalMessageInfo

type isFaultRateLimit_LimitType interface {
	isFaultRateLimit_LimitType()
}

type FaultRateLimit_FixedLimit_ struct {
	FixedLimit *FaultRateLimit_FixedLimit `protobuf:"bytes,1,opt,name=fixed_limit,json=fixedLimit,proto3,oneof"`
}

type FaultRateLimit_HeaderLimit_ struct {
	HeaderLimit *FaultRateLimit_HeaderLimit `protobuf:"bytes,3,opt,name=header_limit,json=headerLimit,proto3,oneof"`
}

func (*FaultRateLimit_FixedLimit_) isFaultRateLimit_LimitType() {}

func (*FaultRateLimit_HeaderLimit_) isFaultRateLimit_LimitType() {}

func (m *FaultRateLimit) GetLimitType() isFaultRateLimit_LimitType {
	if m != nil {
		return m.LimitType
	}
	return nil
}

func (m *FaultRateLimit) GetFixedLimit() *FaultRateLimit_FixedLimit {
	if x, ok := m.GetLimitType().(*FaultRateLimit_FixedLimit_); ok {
		return x.FixedLimit
	}
	return nil
}

func (m *FaultRateLimit) GetHeaderLimit() *FaultRateLimit_HeaderLimit {
	if x, ok := m.GetLimitType().(*FaultRateLimit_HeaderLimit_); ok {
		return x.HeaderLimit
	}
	return nil
}

func (m *FaultRateLimit) GetPercentage() *_type.FractionalPercent {
	if m != nil {
		return m.Percentage
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*FaultRateLimit) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*FaultRateLimit_FixedLimit_)(nil),
		(*FaultRateLimit_HeaderLimit_)(nil),
	}
}

// Describes a fixed/constant rate limit.
type FaultRateLimit_FixedLimit struct {
	// The limit supplied in KiB/s.
	LimitKbps            uint64   `protobuf:"varint,1,opt,name=limit_kbps,json=limitKbps,proto3" json:"limit_kbps,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *FaultRateLimit_FixedLimit) Reset()         { *m = FaultRateLimit_FixedLimit{} }
func (m *FaultRateLimit_FixedLimit) String() string { return proto.CompactTextString(m) }
func (*FaultRateLimit_FixedLimit) ProtoMessage()    {}
func (*FaultRateLimit_FixedLimit) Descriptor() ([]byte, []int) {
	return fileDescriptor_d1b308afbc13f85b, []int{1, 0}
}

func (m *FaultRateLimit_FixedLimit) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FaultRateLimit_FixedLimit.Unmarshal(m, b)
}
func (m *FaultRateLimit_FixedLimit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FaultRateLimit_FixedLimit.Marshal(b, m, deterministic)
}
func (m *FaultRateLimit_FixedLimit) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FaultRateLimit_FixedLimit.Merge(m, src)
}
func (m *FaultRateLimit_FixedLimit) XXX_Size() int {
	return xxx_messageInfo_FaultRateLimit_FixedLimit.Size(m)
}
func (m *FaultRateLimit_FixedLimit) XXX_DiscardUnknown() {
	xxx_messageInfo_FaultRateLimit_FixedLimit.DiscardUnknown(m)
}

var xxx_messageInfo_FaultRateLimit_FixedLimit proto.InternalMessageInfo

func (m *FaultRateLimit_FixedLimit) GetLimitKbps() uint64 {
	if m != nil {
		return m.LimitKbps
	}
	return 0
}

// Rate limits are controlled via an HTTP header (if applicable). See the
// :ref:`http fault filter <config_http_filters_fault_injection_http_header>` documentation for
// more information.
type FaultRateLimit_HeaderLimit struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *FaultRateLimit_HeaderLimit) Reset()         { *m = FaultRateLimit_HeaderLimit{} }
func (m *FaultRateLimit_HeaderLimit) String() string { return proto.CompactTextString(m) }
func (*FaultRateLimit_HeaderLimit) ProtoMessage()    {}
func (*FaultRateLimit_HeaderLimit) Descriptor() ([]byte, []int) {
	return fileDescriptor_d1b308afbc13f85b, []int{1, 1}
}

func (m *FaultRateLimit_HeaderLimit) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FaultRateLimit_HeaderLimit.Unmarshal(m, b)
}
func (m *FaultRateLimit_HeaderLimit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FaultRateLimit_HeaderLimit.Marshal(b, m, deterministic)
}
func (m *FaultRateLimit_HeaderLimit) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FaultRateLimit_HeaderLimit.Merge(m, src)
}
func (m *FaultRateLimit_HeaderLimit) XXX_Size() int {
	return xxx_messageInfo_FaultRateLimit_HeaderLimit.Size(m)
}
func (m *FaultRateLimit_HeaderLimit) XXX_DiscardUnknown() {
	xxx_messageInfo_FaultRateLimit_HeaderLimit.DiscardUnknown(m)
}

var xxx_messageInfo_FaultRateLimit_HeaderLimit proto.InternalMessageInfo

func init() {
	proto.RegisterEnum("envoy.config.filter.fault.v2.FaultDelay_FaultDelayType", FaultDelay_FaultDelayType_name, FaultDelay_FaultDelayType_value)
	proto.RegisterType((*FaultDelay)(nil), "envoy.config.filter.fault.v2.FaultDelay")
	proto.RegisterType((*FaultDelay_HeaderDelay)(nil), "envoy.config.filter.fault.v2.FaultDelay.HeaderDelay")
	proto.RegisterType((*FaultRateLimit)(nil), "envoy.config.filter.fault.v2.FaultRateLimit")
	proto.RegisterType((*FaultRateLimit_FixedLimit)(nil), "envoy.config.filter.fault.v2.FaultRateLimit.FixedLimit")
	proto.RegisterType((*FaultRateLimit_HeaderLimit)(nil), "envoy.config.filter.fault.v2.FaultRateLimit.HeaderLimit")
}

func init() {
	proto.RegisterFile("envoy/config/filter/fault/v2/fault.proto", fileDescriptor_d1b308afbc13f85b)
}

var fileDescriptor_d1b308afbc13f85b = []byte{
	// 469 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0xdf, 0x8a, 0xd3, 0x40,
	0x14, 0xc6, 0x9b, 0x34, 0xd5, 0xdd, 0x13, 0x5d, 0xd6, 0x20, 0x18, 0xbb, 0x2a, 0x4b, 0x2f, 0xa4,
	0xec, 0xc5, 0x04, 0xe2, 0x82, 0x22, 0x78, 0x33, 0xd4, 0x50, 0xff, 0x80, 0x25, 0x78, 0xa1, 0x82,
	0x94, 0x69, 0x33, 0xe9, 0x0e, 0xc6, 0x4e, 0x48, 0xd3, 0xb2, 0x79, 0x09, 0x1f, 0xc4, 0xc7, 0xf2,
	0x29, 0x64, 0xaf, 0x96, 0x39, 0x27, 0x69, 0xba, 0x37, 0xcb, 0xf6, 0xee, 0x84, 0x73, 0xbe, 0x1f,
	0xdf, 0xf9, 0xce, 0x04, 0x86, 0x72, 0xb9, 0xd1, 0x55, 0x30, 0xd7, 0xcb, 0x54, 0x2d, 0x82, 0x54,
	0x65, 0xa5, 0x2c, 0x82, 0x54, 0xac, 0xb3, 0x32, 0xd8, 0x84, 0x54, 0xb0, 0xbc, 0xd0, 0xa5, 0xf6,
	0x9e, 0xe1, 0x24, 0xa3, 0x49, 0x46, 0x93, 0x8c, 0x06, 0x36, 0x61, 0xdf, 0x27, 0x4e, 0x59, 0xe5,
	0x32, 0xc8, 0x65, 0x31, 0x97, 0xcb, 0x5a, 0xd7, 0x7f, 0xb1, 0xd0, 0x7a, 0x91, 0xc9, 0x00, 0xbf,
	0x66, 0xeb, 0x34, 0x48, 0xd6, 0x85, 0x28, 0x95, 0x5e, 0xd6, 0xfd, 0x27, 0x1b, 0x91, 0xa9, 0x44,
	0x94, 0x32, 0x68, 0x0a, 0x6a, 0x0c, 0xfe, 0x74, 0x01, 0x22, 0xc3, 0x1f, 0xc9, 0x4c, 0x54, 0xde,
	0x17, 0x70, 0x0c, 0xdd, 0xb7, 0x4e, 0xad, 0xe1, 0x51, 0xf8, 0x9a, 0xdd, 0x66, 0x87, 0xb5, 0xba,
	0x9d, 0xf2, 0x6b, 0x95, 0x4b, 0x6e, 0xfb, 0x56, 0x8c, 0x20, 0x2f, 0x02, 0x37, 0x55, 0x97, 0x32,
	0x99, 0x26, 0xa6, 0xe9, 0x77, 0x4f, 0xad, 0xa1, 0x1b, 0x3e, 0x65, 0x64, 0x97, 0x35, 0x76, 0xd9,
	0xa8, 0xb6, 0xcb, 0x0f, 0xae, 0x78, 0xef, 0xaf, 0x65, 0x9f, 0x75, 0xc6, 0x9d, 0x18, 0x50, 0x49,
	0xc6, 0xbe, 0xc3, 0x83, 0x0b, 0x29, 0x12, 0x59, 0xd4, 0xa0, 0x1e, 0x82, 0xce, 0xef, 0x6c, 0x70,
	0x8c, 0x62, 0xac, 0xc7, 0x9d, 0xd8, 0xbd, 0x68, 0x3f, 0xbd, 0x77, 0x00, 0x75, 0x98, 0x62, 0x21,
	0x7d, 0x07, 0xc1, 0xcf, 0x6b, 0xb0, 0xd9, 0x81, 0x45, 0x85, 0x98, 0x1b, 0x73, 0x22, 0x9b, 0xd0,
	0x5c, 0xbc, 0x23, 0xe8, 0x3f, 0x04, 0x77, 0x07, 0x3e, 0x38, 0x81, 0xa3, 0x9b, 0x61, 0x78, 0x87,
	0xd0, 0x8b, 0x3e, 0x7c, 0x7b, 0x3f, 0x3a, 0xee, 0xf0, 0x13, 0x78, 0x8c, 0xe6, 0x68, 0x89, 0xe9,
	0x4a, 0xce, 0x55, 0xaa, 0x64, 0xe1, 0x75, 0xff, 0x73, 0xeb, 0xa3, 0x73, 0x60, 0x1f, 0x77, 0x07,
	0xff, 0xec, 0x1a, 0x10, 0x8b, 0x52, 0x7e, 0x56, 0xbf, 0x55, 0xe9, 0xfd, 0x68, 0x32, 0xcc, 0xcc,
	0x27, 0xde, 0xc6, 0xbd, 0xd3, 0x6d, 0xb6, 0x08, 0x16, 0x19, 0x3d, 0x96, 0xdb, 0x5c, 0x89, 0xfd,
	0x73, 0x9b, 0x2b, 0xc1, 0xe9, 0x40, 0x6f, 0xf6, 0x82, 0xd3, 0xfa, 0x0d, 0xbd, 0xce, 0x96, 0xf0,
	0x37, 0xb3, 0xb5, 0xf7, 0xcd, 0xf6, 0x1c, 0xa0, 0x75, 0xee, 0xbd, 0x04, 0x40, 0x93, 0xd3, 0x5f,
	0xb3, 0x7c, 0x85, 0x31, 0x38, 0xfc, 0xfe, 0x15, 0x77, 0x42, 0x7b, 0x68, 0xc5, 0x87, 0xd8, 0xfa,
	0x34, 0xcb, 0x57, 0xed, 0x45, 0x50, 0xc6, 0x1f, 0x35, 0x32, 0x7c, 0x90, 0x26, 0x6a, 0xfe, 0x16,
	0xce, 0x94, 0x26, 0x1b, 0x79, 0xa1, 0x2f, 0xab, 0x5b, 0xd7, 0xe5, 0xf4, 0x83, 0x4c, 0xcc, 0x5b,
	0x9d, 0x58, 0xb3, 0x7b, 0xf8, 0x68, 0x5f, 0x5d, 0x07, 0x00, 0x00, 0xff, 0xff, 0x95, 0xaa, 0xe2,
	0x92, 0xd5, 0x03, 0x00, 0x00,
}
07070100000098000041ED000003E800000064000000175E17A24700000000000000000000000000000000000000000000003200000000cilium-proxy-20200109/go/envoy/config/filter/http 07070100000099000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004700000000cilium-proxy-20200109/go/envoy/config/filter/http/adaptive_concurrency    0707010000009A000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004F00000000cilium-proxy-20200109/go/envoy/config/filter/http/adaptive_concurrency/v2alpha    0707010000009B000081A4000003E800000064000000015E17A2470000473E000000000000000000000000000000000000006A00000000cilium-proxy-20200109/go/envoy/config/filter/http/adaptive_concurrency/v2alpha/adaptive_concurrency.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/adaptive_concurrency/v2alpha/adaptive_concurrency.proto

package envoy_config_filter_http_adaptive_concurrency_v2alpha

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_type "github.com/cilium/proxy/go/envoy/type"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Configuration parameters for the gradient controller.
type GradientControllerConfig struct {
	// The percentile to use when summarizing aggregated samples. Defaults to p50.
	SampleAggregatePercentile *_type.Percent                                              `protobuf:"bytes,1,opt,name=sample_aggregate_percentile,json=sampleAggregatePercentile,proto3" json:"sample_aggregate_percentile,omitempty"`
	ConcurrencyLimitParams    *GradientControllerConfig_ConcurrencyLimitCalculationParams `protobuf:"bytes,2,opt,name=concurrency_limit_params,json=concurrencyLimitParams,proto3" json:"concurrency_limit_params,omitempty"`
	MinRttCalcParams          *GradientControllerConfig_MinimumRTTCalculationParams       `protobuf:"bytes,3,opt,name=min_rtt_calc_params,json=minRttCalcParams,proto3" json:"min_rtt_calc_params,omitempty"`
	XXX_NoUnkeyedLiteral      struct{}                                                    `json:"-"`
	XXX_unrecognized          []byte                                                      `json:"-"`
	XXX_sizecache             int32                                                       `json:"-"`
}

func (m *GradientControllerConfig) Reset()         { *m = GradientControllerConfig{} }
func (m *GradientControllerConfig) String() string { return proto.CompactTextString(m) }
func (*GradientControllerConfig) ProtoMessage()    {}
func (*GradientControllerConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_c58a0beecb0ec580, []int{0}
}

func (m *GradientControllerConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GradientControllerConfig.Unmarshal(m, b)
}
func (m *GradientControllerConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GradientControllerConfig.Marshal(b, m, deterministic)
}
func (m *GradientControllerConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GradientControllerConfig.Merge(m, src)
}
func (m *GradientControllerConfig) XXX_Size() int {
	return xxx_messageInfo_GradientControllerConfig.Size(m)
}
func (m *GradientControllerConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_GradientControllerConfig.DiscardUnknown(m)
}

var xxx_messageInfo_GradientControllerConfig proto.InternalMessageInfo

func (m *GradientControllerConfig) GetSampleAggregatePercentile() *_type.Percent {
	if m != nil {
		return m.SampleAggregatePercentile
	}
	return nil
}

func (m *GradientControllerConfig) GetConcurrencyLimitParams() *GradientControllerConfig_ConcurrencyLimitCalculationParams {
	if m != nil {
		return m.ConcurrencyLimitParams
	}
	return nil
}

func (m *GradientControllerConfig) GetMinRttCalcParams() *GradientControllerConfig_MinimumRTTCalculationParams {
	if m != nil {
		return m.MinRttCalcParams
	}
	return nil
}

// Parameters controlling the periodic recalculation of the concurrency limit from sampled request
// latencies.
type GradientControllerConfig_ConcurrencyLimitCalculationParams struct {
	// The maximum value the gradient is allowed to take. This influences how aggressively the
	// concurrency limit can increase. Defaults to 2.0.
	MaxGradient *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=max_gradient,json=maxGradient,proto3" json:"max_gradient,omitempty"`
	// The allowed upper-bound on the calculated concurrency limit. Defaults to 1000.
	MaxConcurrencyLimit *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=max_concurrency_limit,json=maxConcurrencyLimit,proto3" json:"max_concurrency_limit,omitempty"`
	// The period of time samples are taken to recalculate the concurrency limit.
	ConcurrencyUpdateInterval *duration.Duration `protobuf:"bytes,3,opt,name=concurrency_update_interval,json=concurrencyUpdateInterval,proto3" json:"concurrency_update_interval,omitempty"`
	XXX_NoUnkeyedLiteral      struct{}           `json:"-"`
	XXX_unrecognized          []byte             `json:"-"`
	XXX_sizecache             int32              `json:"-"`
}

func (m *GradientControllerConfig_ConcurrencyLimitCalculationParams) Reset() {
	*m = GradientControllerConfig_ConcurrencyLimitCalculationParams{}
}
func (m *GradientControllerConfig_ConcurrencyLimitCalculationParams) String() string {
	return proto.CompactTextString(m)
}
func (*GradientControllerConfig_ConcurrencyLimitCalculationParams) ProtoMessage() {}
func (*GradientControllerConfig_ConcurrencyLimitCalculationParams) Descriptor() ([]byte, []int) {
	return fileDescriptor_c58a0beecb0ec580, []int{0, 0}
}

func (m *GradientControllerConfig_ConcurrencyLimitCalculationParams) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GradientControllerConfig_ConcurrencyLimitCalculationParams.Unmarshal(m, b)
}
func (m *GradientControllerConfig_ConcurrencyLimitCalculationParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GradientControllerConfig_ConcurrencyLimitCalculationParams.Marshal(b, m, deterministic)
}
func (m *GradientControllerConfig_ConcurrencyLimitCalculationParams) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GradientControllerConfig_ConcurrencyLimitCalculationParams.Merge(m, src)
}
func (m *GradientControllerConfig_ConcurrencyLimitCalculationParams) XXX_Size() int {
	return xxx_messageInfo_GradientControllerConfig_ConcurrencyLimitCalculationParams.Size(m)
}
func (m *GradientControllerConfig_ConcurrencyLimitCalculationParams) XXX_DiscardUnknown() {
	xxx_messageInfo_GradientControllerConfig_ConcurrencyLimitCalculationParams.DiscardUnknown(m)
}

var xxx_messageInfo_GradientControllerConfig_ConcurrencyLimitCalculationParams proto.InternalMessageInfo

func (m *GradientControllerConfig_ConcurrencyLimitCalculationParams) GetMaxGradient() *wrappers.DoubleValue {
	if m != nil {
		return m.MaxGradient
	}
	return nil
}

func (m *GradientControllerConfig_ConcurrencyLimitCalculationParams) GetMaxConcurrencyLimit() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxConcurrencyLimit
	}
	return nil
}

func (m *GradientControllerConfig_ConcurrencyLimitCalculationParams) GetConcurrencyUpdateInterval() *duration.Duration {
	if m != nil {
		return m.ConcurrencyUpdateInterval
	}
	return nil
}

// Parameters controlling the periodic minRTT recalculation.
type GradientControllerConfig_MinimumRTTCalculationParams struct {
	// The time interval between recalculating the minimum request round-trip time.
	Interval *duration.Duration `protobuf:"bytes,1,opt,name=interval,proto3" json:"interval,omitempty"`
	// The number of requests to aggregate/sample during the minRTT recalculation window before
	// updating. Defaults to 50.
	RequestCount *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=request_count,json=requestCount,proto3" json:"request_count,omitempty"`
	// Randomized time delta that will be introduced to the start of the minRTT calculation window.
	// This is represented as a percentage of the interval duration. Defaults to 15%.
	//
	// Example: If the interval is 10s and the jitter is 15%, the next window will begin
	// somewhere in the range (10s - 11.5s).
	Jitter               *_type.Percent `protobuf:"bytes,3,opt,name=jitter,proto3" json:"jitter,omitempty"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

func (m *GradientControllerConfig_MinimumRTTCalculationParams) Reset() {
	*m = GradientControllerConfig_MinimumRTTCalculationParams{}
}
func (m *GradientControllerConfig_MinimumRTTCalculationParams) String() string {
	return proto.CompactTextString(m)
}
func (*GradientControllerConfig_MinimumRTTCalculationParams) ProtoMessage() {}
func (*GradientControllerConfig_MinimumRTTCalculationParams) Descriptor() ([]byte, []int) {
	return fileDescriptor_c58a0beecb0ec580, []int{0, 1}
}

func (m *GradientControllerConfig_MinimumRTTCalculationParams) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GradientControllerConfig_MinimumRTTCalculationParams.Unmarshal(m, b)
}
func (m *GradientControllerConfig_MinimumRTTCalculationParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GradientControllerConfig_MinimumRTTCalculationParams.Marshal(b, m, deterministic)
}
func (m *GradientControllerConfig_MinimumRTTCalculationParams) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GradientControllerConfig_MinimumRTTCalculationParams.Merge(m, src)
}
func (m *GradientControllerConfig_MinimumRTTCalculationParams) XXX_Size() int {
	return xxx_messageInfo_GradientControllerConfig_MinimumRTTCalculationParams.Size(m)
}
func (m *GradientControllerConfig_MinimumRTTCalculationParams) XXX_DiscardUnknown() {
	xxx_messageInfo_GradientControllerConfig_MinimumRTTCalculationParams.DiscardUnknown(m)
}

var xxx_messageInfo_GradientControllerConfig_MinimumRTTCalculationParams proto.InternalMessageInfo

func (m *GradientControllerConfig_MinimumRTTCalculationParams) GetInterval() *duration.Duration {
	if m != nil {
		return m.Interval
	}
	return nil
}

func (m *GradientControllerConfig_MinimumRTTCalculationParams) GetRequestCount() *wrappers.UInt32Value {
	if m != nil {
		return m.RequestCount
	}
	return nil
}

func (m *GradientControllerConfig_MinimumRTTCalculationParams) GetJitter() *_type.Percent {
	if m != nil {
		return m.Jitter
	}
	return nil
}

type AdaptiveConcurrency struct {
	// Types that are valid to be assigned to ConcurrencyControllerConfig:
	//	*AdaptiveConcurrency_GradientControllerConfig
	ConcurrencyControllerConfig isAdaptiveConcurrency_ConcurrencyControllerConfig `protobuf_oneof:"concurrency_controller_config"`
	// If set to false, the adaptive concurrency filter will operate as a pass-through filter. If the
	// message is unspecified, the filter will be enabled.
	Enabled              *core.RuntimeFeatureFlag `protobuf:"bytes,2,opt,name=enabled,proto3" json:"enabled,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
	XXX_unrecognized     []byte                   `json:"-"`
	XXX_sizecache        int32                    `json:"-"`
}

func (m *AdaptiveConcurrency) Reset()         { *m = AdaptiveConcurrency{} }
func (m *AdaptiveConcurrency) String() string { return proto.CompactTextString(m) }
func (*AdaptiveConcurrency) ProtoMessage()    {}
func (*AdaptiveConcurrency) Descriptor() ([]byte, []int) {
	return fileDescriptor_c58a0beecb0ec580, []int{1}
}

func (m *AdaptiveConcurrency) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AdaptiveConcurrency.Unmarshal(m, b)
}
func (m *AdaptiveConcurrency) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AdaptiveConcurrency.Marshal(b, m, deterministic)
}
func (m *AdaptiveConcurrency) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AdaptiveConcurrency.Merge(m, src)
}
func (m *AdaptiveConcurrency) XXX_Size() int {
	return xxx_messageInfo_AdaptiveConcurrency.Size(m)
}
func (m *AdaptiveConcurrency) XXX_DiscardUnknown() {
	xxx_messageInfo_AdaptiveConcurrency.DiscardUnknown(m)
}

var xxx_messageInfo_AdaptiveConcurrency proto.InternalMessageInfo

type isAdaptiveConcurrency_ConcurrencyControllerConfig interface {
	isAdaptiveConcurrency_ConcurrencyControllerConfig()
}

type AdaptiveConcurrency_GradientControllerConfig struct {
	GradientControllerConfig *GradientControllerConfig `protobuf:"bytes,1,opt,name=gradient_controller_config,json=gradientControllerConfig,proto3,oneof"`
}

func (*AdaptiveConcurrency_GradientControllerConfig) isAdaptiveConcurrency_ConcurrencyControllerConfig() {
}

func (m *AdaptiveConcurrency) GetConcurrencyControllerConfig() isAdaptiveConcurrency_ConcurrencyControllerConfig {
	if m != nil {
		return m.ConcurrencyControllerConfig
	}
	return nil
}

func (m *AdaptiveConcurrency) GetGradientControllerConfig() *GradientControllerConfig {
	if x, ok := m.GetConcurrencyControllerConfig().(*AdaptiveConcurrency_GradientControllerConfig); ok {
		return x.GradientControllerConfig
	}
	return nil
}

func (m *AdaptiveConcurrency) GetEnabled() *core.RuntimeFeatureFlag {
	if m != nil {
		return m.Enabled
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*AdaptiveConcurrency) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*AdaptiveConcurrency_GradientControllerConfig)(nil),
	}
}

func init() {
	proto.RegisterType((*GradientControllerConfig)(nil), "envoy.config.filter.http.adaptive_concurrency.v2alpha.GradientControllerConfig")
	proto.RegisterType((*GradientControllerConfig_ConcurrencyLimitCalculationParams)(nil), "envoy.config.filter.http.adaptive_concurrency.v2alpha.GradientControllerConfig.ConcurrencyLimitCalculationParams")
	proto.RegisterType((*GradientControllerConfig_MinimumRTTCalculationParams)(nil), "envoy.config.filter.http.adaptive_concurrency.v2alpha.GradientControllerConfig.MinimumRTTCalculationParams")
	proto.RegisterType((*AdaptiveConcurrency)(nil), "envoy.config.filter.http.adaptive_concurrency.v2alpha.AdaptiveConcurrency")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/adaptive_concurrency/v2alpha/adaptive_concurrency.proto", fileDescriptor_c58a0beecb0ec580)
}

var fileDescriptor_c58a0beecb0ec580 = []byte{
	// 684 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x41, 0x4f, 0xdb, 0x48,
	0x14, 0x8e, 0x03, 0x4b, 0xd8, 0x81, 0x5d, 0x21, 0x47, 0xbb, 0x1b, 0x02, 0xbb, 0x02, 0xb4, 0x95,
	0x2a, 0x2a, 0x8d, 0xa5, 0xa0, 0x9e, 0x11, 0x4e, 0x45, 0x4b, 0xd5, 0x8a, 0xc8, 0x85, 0x4a, 0x3d,
	0x59, 0x2f, 0xce, 0xc3, 0x4c, 0x3b, 0x9e, 0x31, 0x93, 0x71, 0x9a, 0xfc, 0x85, 0xfe, 0x82, 0xf6,
	0xde, 0x53, 0xef, 0xed, 0x7f, 0xe9, 0xb9, 0x7f, 0xa0, 0xc7, 0x2a, 0xa7, 0xca, 0x9e, 0x31, 0x44,
	0x24, 0x50, 0x81, 0xc8, 0x29, 0xd6, 0x7b, 0xdf, 0xf7, 0xbe, 0xf7, 0xbd, 0xcf, 0x26, 0x1d, 0x14,
	0x03, 0x39, 0xf2, 0x22, 0x29, 0x4e, 0x58, 0xec, 0x9d, 0x30, 0xae, 0x51, 0x79, 0xa7, 0x5a, 0xa7,
	0x1e, 0xf4, 0x20, 0xd5, 0x6c, 0x80, 0x61, 0x24, 0x45, 0x94, 0x29, 0x85, 0x22, 0x1a, 0x79, 0x83,
	0x16, 0xf0, 0xf4, 0x14, 0x66, 0x16, 0x69, 0xaa, 0xa4, 0x96, 0xee, 0xc3, 0x82, 0x91, 0x1a, 0x46,
	0x6a, 0x18, 0x69, 0xce, 0x48, 0x67, 0x82, 0x2c, 0x63, 0x73, 0xdd, 0x08, 0x81, 0x94, 0x79, 0x83,
	0x96, 0x17, 0x49, 0x85, 0x5e, 0x17, 0xfa, 0x68, 0x48, 0x9b, 0x0d, 0x53, 0xd5, 0xa3, 0x14, 0xbd,
	0x14, 0x55, 0x84, 0x42, 0xdb, 0xca, 0x7a, 0x2c, 0x65, 0xcc, 0xb1, 0x00, 0x82, 0x10, 0x52, 0x83,
	0x66, 0x52, 0xf4, 0x6d, 0xf5, 0x3f, 0x5b, 0x2d, 0x9e, 0xba, 0xd9, 0x89, 0xd7, 0xcb, 0x54, 0xd1,
	0x70, 0x55, 0xfd, 0xad, 0x82, 0x34, 0x45, 0x55, 0xe2, 0xff, 0x19, 0x00, 0x67, 0x3d, 0xd0, 0xe8,
	0x95, 0x7f, 0x4c, 0x61, 0xeb, 0x5b, 0x8d, 0x34, 0x1e, 0x2b, 0xe8, 0x31, 0x14, 0xba, 0x2d, 0x85,
	0x56, 0x92, 0x73, 0x54, 0xed, 0x62, 0x69, 0xf7, 0x05, 0x59, 0xeb, 0x43, 0x92, 0x72, 0x0c, 0x21,
	0x8e, 0x15, 0xc6, 0xa0, 0x31, 0xb4, 0xaa, 0x19, 0xc7, 0x86, 0xb3, 0xe1, 0xdc, 0x5f, 0x6a, 0xd5,
	0xa9, 0x31, 0x2a, 0xdf, 0x89, 0x76, 0x4c, 0x35, 0x58, 0x35, 0xb8, 0xbd, 0x12, 0xd6, 0x39, 0x47,
	0xb9, 0x9f, 0x1d, 0xd2, 0x98, 0x30, 0x2e, 0xe4, 0x2c, 0x61, 0x3a, 0x4c, 0x41, 0x41, 0xd2, 0x6f,
	0x54, 0x0b, 0xca, 0x33, 0x7a, 0x2b, 0xef, 0xe9, 0x55, 0x8b, 0xd0, 0xf6, 0x45, 0xf3, 0xb3, 0x7c,
	0x5c, 0x1b, 0x78, 0x94, 0xf1, 0xc2, 0xc0, 0x4e, 0x31, 0xd8, 0x5f, 0x1c, 0xfb, 0xbf, 0xbd, 0x73,
	0xaa, 0x2b, 0x4e, 0xf0, 0x77, 0x74, 0xa9, 0xd9, 0x74, 0xb8, 0x1f, 0x1d, 0x52, 0x4f, 0x98, 0x08,
	0x95, 0xd6, 0x61, 0x04, 0x3c, 0x2a, 0x25, 0xcf, 0x15, 0x92, 0xdf, 0xdc, 0xb5, 0xe4, 0xe7, 0x4c,
	0xb0, 0x24, 0x4b, 0x82, 0xa3, 0xa3, 0xeb, 0xc4, 0xae, 0x24, 0x4c, 0x04, 0xba, 0xd8, 0xc7, 0xd4,
	0x9a, 0x5f, 0xaa, 0x64, 0xf3, 0x97, 0xeb, 0xba, 0x87, 0x64, 0x39, 0x81, 0x61, 0x18, 0xdb, 0xe9,
	0xf6, 0x94, 0xeb, 0xd4, 0xc4, 0x88, 0x96, 0x31, 0xa2, 0x8f, 0x64, 0xd6, 0xe5, 0xf8, 0x12, 0x78,
	0x86, 0xfe, 0x9f, 0x63, 0x7f, 0xc9, 0xfd, 0x7d, 0xb3, 0x52, 0xfc, 0xbe, 0xef, 0x06, 0x4b, 0x09,
	0x0c, 0x4b, 0xf9, 0xee, 0x2b, 0xf2, 0x57, 0x4e, 0x38, 0x75, 0x58, 0x7b, 0xd1, 0x69, 0xe6, 0xe3,
	0x03, 0xa1, 0x77, 0x5a, 0x86, 0xb9, 0x36, 0xf6, 0xe7, 0xb7, 0xab, 0x1b, 0x95, 0xa0, 0x9e, 0xc0,
	0xf0, 0xb2, 0x78, 0x17, 0xc9, 0xda, 0x24, 0x6d, 0x96, 0xe6, 0xf1, 0x0d, 0x99, 0xd0, 0xa8, 0x06,
	0xc0, 0xad, 0xff, 0xab, 0xd3, 0xd2, 0xed, 0x1b, 0xe2, 0x93, 0xb1, 0x5f, 0xfb, 0xe4, 0xcc, 0x2f,
	0x3a, 0xdb, 0x95, 0x60, 0x75, 0x82, 0xe9, 0xb8, 0x20, 0x3a, 0xb0, 0x3c, 0xcd, 0xaf, 0x0e, 0x59,
	0xbb, 0xc6, 0x74, 0x77, 0x8f, 0x2c, 0x9e, 0xcf, 0x74, 0x6e, 0x32, 0xf3, 0x1c, 0xe6, 0x3e, 0x25,
	0x7f, 0x28, 0x3c, 0xcb, 0xb0, 0xaf, 0xc3, 0x48, 0x66, 0xe2, 0x86, 0xe6, 0x2c, 0x5b, 0x6c, 0x3b,
	0x87, 0xba, 0x0f, 0xc8, 0xc2, 0x6b, 0xa6, 0x35, 0x2a, 0x6b, 0xc0, 0xcc, 0xd7, 0xd0, 0xb6, 0x6c,
	0xbd, 0xaf, 0x92, 0xfa, 0x9e, 0x8d, 0xe1, 0x84, 0xbf, 0xee, 0x07, 0x87, 0x34, 0xcb, 0x0c, 0xe4,
	0xb7, 0xb3, 0x11, 0x0c, 0x4d, 0x8a, 0xed, 0x9a, 0x87, 0x77, 0x1c, 0xed, 0x8b, 0xf8, 0x3e, 0xa9,
	0x04, 0x8d, 0xf8, 0xaa, 0x8f, 0xcf, 0x2e, 0xa9, 0xa1, 0x80, 0x2e, 0xc7, 0x9e, 0xb5, 0xe9, 0x9e,
	0xd5, 0x01, 0x29, 0xa3, 0x83, 0x16, 0xcd, 0x3f, 0xad, 0x34, 0xc8, 0x84, 0x66, 0x09, 0xee, 0x23,
	0xe8, 0x4c, 0xe1, 0x3e, 0x87, 0x38, 0x28, 0x51, 0xfe, 0xff, 0xe4, 0xdf, 0xc9, 0xdc, 0x4c, 0xad,
	0xe7, 0xce, 0xfd, 0xf0, 0x1d, 0x1f, 0x48, 0x9b, 0x49, 0xc3, 0x9c, 0x2a, 0x39, 0x1c, 0xdd, 0x6e,
	0x59, 0xbf, 0x31, 0xc3, 0xde, 0x4e, 0x7e, 0xce, 0x8e, 0xd3, 0x5d, 0x28, 0xee, 0xba, 0xf3, 0x33,
	0x00, 0x00, 0xff, 0xff, 0x34, 0x9f, 0x15, 0x62, 0xa4, 0x06, 0x00, 0x00,
}
  0707010000009C000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003900000000cilium-proxy-20200109/go/envoy/config/filter/http/buffer  0707010000009D000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003C00000000cilium-proxy-20200109/go/envoy/config/filter/http/buffer/v2   0707010000009E000081A4000003E800000064000000015E17A24700001AB8000000000000000000000000000000000000004900000000cilium-proxy-20200109/go/envoy/config/filter/http/buffer/v2/buffer.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/buffer/v2/buffer.proto

package envoy_config_filter_http_buffer_v2

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type Buffer struct {
	// The maximum request size that the filter will buffer before the connection
	// manager will stop buffering and return a 413 response.
	MaxRequestBytes      *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=max_request_bytes,json=maxRequestBytes,proto3" json:"max_request_bytes,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *Buffer) Reset()         { *m = Buffer{} }
func (m *Buffer) String() string { return proto.CompactTextString(m) }
func (*Buffer) ProtoMessage()    {}
func (*Buffer) Descriptor() ([]byte, []int) {
	return fileDescriptor_e782fc75ce4c789f, []int{0}
}

func (m *Buffer) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Buffer.Unmarshal(m, b)
}
func (m *Buffer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Buffer.Marshal(b, m, deterministic)
}
func (m *Buffer) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Buffer.Merge(m, src)
}
func (m *Buffer) XXX_Size() int {
	return xxx_messageInfo_Buffer.Size(m)
}
func (m *Buffer) XXX_DiscardUnknown() {
	xxx_messageInfo_Buffer.DiscardUnknown(m)
}

var xxx_messageInfo_Buffer proto.InternalMessageInfo

func (m *Buffer) GetMaxRequestBytes() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxRequestBytes
	}
	return nil
}

type BufferPerRoute struct {
	// Types that are valid to be assigned to Override:
	//	*BufferPerRoute_Disabled
	//	*BufferPerRoute_Buffer
	Override             isBufferPerRoute_Override `protobuf_oneof:"override"`
	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
	XXX_unrecognized     []byte                    `json:"-"`
	XXX_sizecache        int32                     `json:"-"`
}

func (m *BufferPerRoute) Reset()         { *m = BufferPerRoute{} }
func (m *BufferPerRoute) String() string { return proto.CompactTextString(m) }
func (*BufferPerRoute) ProtoMessage()    {}
func (*BufferPerRoute) Descriptor() ([]byte, []int) {
	return fileDescriptor_e782fc75ce4c789f, []int{1}
}

func (m *BufferPerRoute) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_BufferPerRoute.Unmarshal(m, b)
}
func (m *BufferPerRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_BufferPerRoute.Marshal(b, m, deterministic)
}
func (m *BufferPerRoute) XXX_Merge(src proto.Message) {
	xxx_messageInfo_BufferPerRoute.Merge(m, src)
}
func (m *BufferPerRoute) XXX_Size() int {
	return xxx_messageInfo_BufferPerRoute.Size(m)
}
func (m *BufferPerRoute) XXX_DiscardUnknown() {
	xxx_messageInfo_BufferPerRoute.DiscardUnknown(m)
}

var xxx_messageInfo_BufferPerRoute proto.InternalMessageInfo

type isBufferPerRoute_Override interface {
	isBufferPerRoute_Override()
}

type BufferPerRoute_Disabled struct {
	Disabled bool `protobuf:"varint,1,opt,name=disabled,proto3,oneof"`
}

type BufferPerRoute_Buffer struct {
	Buffer *Buffer `protobuf:"bytes,2,opt,name=buffer,proto3,oneof"`
}

func (*BufferPerRoute_Disabled) isBufferPerRoute_Override() {}

func (*BufferPerRoute_Buffer) isBufferPerRoute_Override() {}

func (m *BufferPerRoute) GetOverride() isBufferPerRoute_Override {
	if m != nil {
		return m.Override
	}
	return nil
}

func (m *BufferPerRoute) GetDisabled() bool {
	if x, ok := m.GetOverride().(*BufferPerRoute_Disabled); ok {
		return x.Disabled
	}
	return false
}

func (m *BufferPerRoute) GetBuffer() *Buffer {
	if x, ok := m.GetOverride().(*BufferPerRoute_Buffer); ok {
		return x.Buffer
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*BufferPerRoute) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*BufferPerRoute_Disabled)(nil),
		(*BufferPerRoute_Buffer)(nil),
	}
}

func init() {
	proto.RegisterType((*Buffer)(nil), "envoy.config.filter.http.buffer.v2.Buffer")
	proto.RegisterType((*BufferPerRoute)(nil), "envoy.config.filter.http.buffer.v2.BufferPerRoute")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/buffer/v2/buffer.proto", fileDescriptor_e782fc75ce4c789f)
}

var fileDescriptor_e782fc75ce4c789f = []byte{
	// 308 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0xc1, 0x4a, 0xc3, 0x30,
	0x18, 0xc7, 0x97, 0x6e, 0xce, 0x90, 0x81, 0x9b, 0xbd, 0x38, 0x86, 0xc8, 0x18, 0x08, 0xb2, 0x43,
	0x22, 0xdd, 0x13, 0x98, 0x93, 0x7a, 0x90, 0x59, 0xd0, 0xeb, 0x48, 0xed, 0xd7, 0x19, 0xe9, 0x9a,
	0x9a, 0xa6, 0xb5, 0x7d, 0x05, 0x9f, 0xc0, 0x47, 0x95, 0x9d, 0xa4, 0x49, 0xe7, 0x55, 0x6f, 0x1f,
	0x7c, 0xf9, 0xfd, 0xfe, 0xf9, 0xfe, 0x84, 0x41, 0x56, 0xa9, 0x86, 0xbd, 0xa8, 0x2c, 0x91, 0x5b,
	0x96, 0xc8, 0xd4, 0x80, 0x66, 0xaf, 0xc6, 0xe4, 0x2c, 0x2a, 0x93, 0x04, 0x34, 0xab, 0x82, 0x6e,
	0xa2, 0xb9, 0x56, 0x46, 0xf9, 0x0b, 0x0b, 0x50, 0x07, 0x50, 0x07, 0xd0, 0x16, 0xa0, 0xdd, 0xb3,
	0x2a, 0x98, 0x5d, 0x6c, 0x95, 0xda, 0xa6, 0xc0, 0x2c, 0x11, 0x95, 0x09, 0xfb, 0xd0, 0x22, 0xcf,
	0x41, 0x17, 0xce, 0x31, 0x3b, 0xab, 0x44, 0x2a, 0x63, 0x61, 0x80, 0x1d, 0x06, 0xb7, 0x58, 0x08,
	0x32, 0xe4, 0xd6, 0xe2, 0x3f, 0x92, 0xd3, 0x9d, 0xa8, 0x37, 0x1a, 0xde, 0x4b, 0x28, 0xcc, 0x26,
	0x6a, 0x0c, 0x14, 0x53, 0x34, 0x47, 0x57, 0xa3, 0xe0, 0x9c, 0x3a, 0x3d, 0x3d, 0xe8, 0xe9, 0xd3,
	0x5d, 0x66, 0x56, 0xc1, 0xb3, 0x48, 0x4b, 0xe0, 0xc7, 0x7b, 0x3e, 0x58, 0x7a, 0xf3, 0x5e, 0x38,
	0xde, 0x89, 0x3a, 0x74, 0x38, 0x6f, 0xe9, 0xfb, 0x01, 0xf6, 0x26, 0xfd, 0xc5, 0x17, 0x22, 0x27,
	0x2e, 0x63, 0x0d, 0x3a, 0x54, 0xa5, 0x01, 0xff, 0x92, 0xe0, 0x58, 0x16, 0x22, 0x4a, 0x21, 0xb6,
	0x11, 0xd8, 0x4a, 0xde, 0x3c, 0x8c, 0x6e, 0x7b, 0xe1, 0xef, 0xca, 0x7f, 0x20, 0x43, 0x77, 0xe2,
	0xd4, 0xb3, 0xff, 0x58, 0xd2, 0xbf, 0xab, 0xa0, 0x2e, 0x8a, 0xe3, 0x3d, 0x3f, 0xfa, 0x44, 0xde,
	0xa4, 0x35, 0x76, 0x16, 0x3e, 0x26, 0x58, 0x55, 0xa0, 0xb5, 0x8c, 0xc1, 0xef, 0x7f, 0x73, 0xc4,
	0x6f, 0xc8, 0xb5, 0x54, 0x4e, 0x9a, 0x6b, 0x55, 0x37, 0xff, 0xf0, 0xf3, 0x51, 0x77, 0x4b, 0x5b,
	0xc5, 0x1a, 0x45, 0x43, 0xdb, 0xc9, 0xea, 0x27, 0x00, 0x00, 0xff, 0xff, 0xfa, 0x4a, 0x11, 0x8f,
	0xd7, 0x01, 0x00, 0x00,
}
0707010000009F000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003700000000cilium-proxy-20200109/go/envoy/config/filter/http/csrf    070701000000A0000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003A00000000cilium-proxy-20200109/go/envoy/config/filter/http/csrf/v2 070701000000A1000081A4000003E800000064000000015E17A247000017D0000000000000000000000000000000000000004500000000cilium-proxy-20200109/go/envoy/config/filter/http/csrf/v2/csrf.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/csrf/v2/csrf.proto

package envoy_config_filter_http_csrf_v2

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	matcher "github.com/cilium/proxy/go/envoy/type/matcher"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// CSRF filter config.
type CsrfPolicy struct {
	// Specifies the % of requests for which the CSRF filter is enabled.
	//
	// If :ref:`runtime_key <envoy_api_field_core.runtimefractionalpercent.runtime_key>` is specified,
	// Envoy will lookup the runtime key to get the percentage of requests to filter.
	//
	// .. note::
	//
	//   This field defaults to 100/:ref:`HUNDRED
	//   <envoy_api_enum_type.FractionalPercent.DenominatorType>`.
	FilterEnabled *core.RuntimeFractionalPercent `protobuf:"bytes,1,opt,name=filter_enabled,json=filterEnabled,proto3" json:"filter_enabled,omitempty"`
	// Specifies that CSRF policies will be evaluated and tracked, but not enforced.
	//
	// This is intended to be used when ``filter_enabled`` is off and will be ignored otherwise.
	//
	// If :ref:`runtime_key <envoy_api_field_core.runtimefractionalpercent.runtime_key>` is specified,
	// Envoy will lookup the runtime key to get the percentage of requests for which it will evaluate
	// and track the request's *Origin* and *Destination* to determine if it's valid, but will not
	// enforce any policies.
	ShadowEnabled *core.RuntimeFractionalPercent `protobuf:"bytes,2,opt,name=shadow_enabled,json=shadowEnabled,proto3" json:"shadow_enabled,omitempty"`
	// Specifies additional source origins that will be allowed in addition to
	// the destination origin.
	//
	// More information on how this can be configured via runtime can be found
	// :ref:`here <csrf-configuration>`.
	AdditionalOrigins    []*matcher.StringMatcher `protobuf:"bytes,3,rep,name=additional_origins,json=additionalOrigins,proto3" json:"additional_origins,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
	XXX_unrecognized     []byte                   `json:"-"`
	XXX_sizecache        int32                    `json:"-"`
}

func (m *CsrfPolicy) Reset()         { *m = CsrfPolicy{} }
func (m *CsrfPolicy) String() string { return proto.CompactTextString(m) }
func (*CsrfPolicy) ProtoMessage()    {}
func (*CsrfPolicy) Descriptor() ([]byte, []int) {
	return fileDescriptor_a9146cdf92353980, []int{0}
}

func (m *CsrfPolicy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_CsrfPolicy.Unmarshal(m, b)
}
func (m *CsrfPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_CsrfPolicy.Marshal(b, m, deterministic)
}
func (m *CsrfPolicy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CsrfPolicy.Merge(m, src)
}
func (m *CsrfPolicy) XXX_Size() int {
	return xxx_messageInfo_CsrfPolicy.Size(m)
}
func (m *CsrfPolicy) XXX_DiscardUnknown() {
	xxx_messageInfo_CsrfPolicy.DiscardUnknown(m)
}

var xxx_messageInfo_CsrfPolicy proto.InternalMessageInfo

func (m *CsrfPolicy) GetFilterEnabled() *core.RuntimeFractionalPercent {
	if m != nil {
		return m.FilterEnabled
	}
	return nil
}

func (m *CsrfPolicy) GetShadowEnabled() *core.RuntimeFractionalPercent {
	if m != nil {
		return m.ShadowEnabled
	}
	return nil
}

func (m *CsrfPolicy) GetAdditionalOrigins() []*matcher.StringMatcher {
	if m != nil {
		return m.AdditionalOrigins
	}
	return nil
}

func init() {
	proto.RegisterType((*CsrfPolicy)(nil), "envoy.config.filter.http.csrf.v2.CsrfPolicy")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/csrf/v2/csrf.proto", fileDescriptor_a9146cdf92353980)
}

var fileDescriptor_a9146cdf92353980 = []byte{
	// 310 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x91, 0x41, 0x4b, 0xf3, 0x40,
	0x10, 0x86, 0x49, 0xcb, 0xf7, 0xa1, 0x5b, 0x5a, 0x34, 0x17, 0x4b, 0x11, 0xac, 0x9e, 0x0a, 0x85,
	0x59, 0x88, 0x67, 0x2f, 0x11, 0xbd, 0x89, 0x21, 0x5e, 0x85, 0xb2, 0x4d, 0x26, 0xed, 0x40, 0xba,
	0x1b, 0x76, 0xd7, 0x68, 0xfe, 0x82, 0x27, 0x7f, 0xaf, 0x27, 0xc9, 0x4e, 0xab, 0x47, 0xf1, 0x94,
	0x2c, 0xf3, 0xbc, 0xcf, 0x2c, 0xef, 0x8a, 0x25, 0xea, 0xd6, 0x74, 0xb2, 0x30, 0xba, 0xa2, 0x8d,
	0xac, 0xa8, 0xf6, 0x68, 0xe5, 0xd6, 0xfb, 0x46, 0x16, 0xce, 0x56, 0xb2, 0x4d, 0xc2, 0x17, 0x1a,
	0x6b, 0xbc, 0x89, 0xe7, 0x01, 0x06, 0x86, 0x81, 0x61, 0xe8, 0x61, 0x08, 0x50, 0x9b, 0xcc, 0xce,
	0x59, 0xa7, 0x1a, 0x0a, 0x51, 0x63, 0x51, 0xae, 0x95, 0x43, 0xce, 0xcf, 0x2e, 0x78, 0xea, 0xbb,
	0x06, 0xe5, 0x4e, 0xf9, 0x62, 0x8b, 0x56, 0x3a, 0x6f, 0x49, 0x6f, 0xf6, 0xc0, 0x59, 0xab, 0x6a,
	0x2a, 0x95, 0x47, 0x79, 0xf8, 0xe1, 0xc1, 0xd5, 0xc7, 0x40, 0x88, 0x5b, 0x67, 0xab, 0xcc, 0xd4,
	0x54, 0x74, 0xf1, 0xb3, 0x98, 0xf0, 0xf6, 0x15, 0x6a, 0xb5, 0xae, 0xb1, 0x9c, 0x46, 0xf3, 0x68,
	0x31, 0x4a, 0x96, 0xc0, 0x37, 0x54, 0x0d, 0x41, 0x9b, 0x40, 0xbf, 0x1f, 0xf2, 0x17, 0xed, 0x69,
	0x87, 0xf7, 0x56, 0x15, 0x9e, 0x8c, 0x56, 0x75, 0x86, 0xb6, 0x40, 0xed, 0xd3, 0xa3, 0xcf, 0xf4,
	0xdf, 0x7b, 0x34, 0x38, 0x89, 0xf2, 0x31, 0xcb, 0xee, 0xd8, 0x15, 0xe7, 0x62, 0xe2, 0xb6, 0xaa,
	0x34, 0xaf, 0xdf, 0xf6, 0xc1, 0x9f, 0xed, 0xf9, 0x98, 0x15, 0x07, 0x67, 0x26, 0x62, 0x55, 0x96,
	0xc4, 0xcc, 0xca, 0x58, 0xda, 0x90, 0x76, 0xd3, 0xe1, 0x7c, 0xb8, 0x18, 0x25, 0x97, 0x7b, 0x6f,
	0xdf, 0x0b, 0xec, 0x7b, 0x81, 0xa7, 0xd0, 0xcb, 0x03, 0x9f, 0xf2, 0xd3, 0x9f, 0xf0, 0x23, 0x67,
	0xd3, 0x1b, 0x01, 0x64, 0x38, 0xd9, 0x58, 0xf3, 0xd6, 0xc1, 0x6f, 0x8f, 0x93, 0x1e, 0x87, 0x06,
	0xfb, 0x3e, 0xb3, 0x68, 0xfd, 0x3f, 0x14, 0x7b, 0xfd, 0x15, 0x00, 0x00, 0xff, 0xff, 0xa9, 0x08,
	0x1d, 0xa6, 0x01, 0x02, 0x00, 0x00,
}
070701000000A2000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004800000000cilium-proxy-20200109/go/envoy/config/filter/http/dynamic_forward_proxy   070701000000A3000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000005000000000cilium-proxy-20200109/go/envoy/config/filter/http/dynamic_forward_proxy/v2alpha   070701000000A4000081A4000003E800000064000000015E17A24700001903000000000000000000000000000000000000006C00000000cilium-proxy-20200109/go/envoy/config/filter/http/dynamic_forward_proxy/v2alpha/dynamic_forward_proxy.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/dynamic_forward_proxy/v2alpha/dynamic_forward_proxy.proto

package envoy_config_filter_http_dynamic_forward_proxy_v2alpha

import (
	fmt "fmt"
	v2alpha "github.com/cilium/proxy/go/envoy/config/common/dynamic_forward_proxy/v2alpha"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Configuration for the dynamic forward proxy HTTP filter. See the :ref:`architecture overview
// <arch_overview_http_dynamic_forward_proxy>` for more information.
type FilterConfig struct {
	// The DNS cache configuration that the filter will attach to. Note this configuration must
	// match that of associated :ref:`dynamic forward proxy cluster configuration
	// <envoy_api_field_config.cluster.dynamic_forward_proxy.v2alpha.ClusterConfig.dns_cache_config>`.
	DnsCacheConfig       *v2alpha.DnsCacheConfig `protobuf:"bytes,1,opt,name=dns_cache_config,json=dnsCacheConfig,proto3" json:"dns_cache_config,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
	XXX_unrecognized     []byte                  `json:"-"`
	XXX_sizecache        int32                   `json:"-"`
}

func (m *FilterConfig) Reset()         { *m = FilterConfig{} }
func (m *FilterConfig) String() string { return proto.CompactTextString(m) }
func (*FilterConfig) ProtoMessage()    {}
func (*FilterConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_85a2356b260c47da, []int{0}
}

func (m *FilterConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FilterConfig.Unmarshal(m, b)
}
func (m *FilterConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FilterConfig.Marshal(b, m, deterministic)
}
func (m *FilterConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FilterConfig.Merge(m, src)
}
func (m *FilterConfig) XXX_Size() int {
	return xxx_messageInfo_FilterConfig.Size(m)
}
func (m *FilterConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_FilterConfig.DiscardUnknown(m)
}

var xxx_messageInfo_FilterConfig proto.InternalMessageInfo

func (m *FilterConfig) GetDnsCacheConfig() *v2alpha.DnsCacheConfig {
	if m != nil {
		return m.DnsCacheConfig
	}
	return nil
}

// Per route Configuration for the dynamic forward proxy HTTP filter.
type PerRouteConfig struct {
	// Indicates that before DNS lookup, the host header will be swapped with
	// this value. If not set or empty, the original host header value
	// will be used and no rewrite will happen.
	HostRewrite          string   `protobuf:"bytes,1,opt,name=host_rewrite,json=hostRewrite,proto3" json:"host_rewrite,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *PerRouteConfig) Reset()         { *m = PerRouteConfig{} }
func (m *PerRouteConfig) String() string { return proto.CompactTextString(m) }
func (*PerRouteConfig) ProtoMessage()    {}
func (*PerRouteConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_85a2356b260c47da, []int{1}
}

func (m *PerRouteConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_PerRouteConfig.Unmarshal(m, b)
}
func (m *PerRouteConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_PerRouteConfig.Marshal(b, m, deterministic)
}
func (m *PerRouteConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_PerRouteConfig.Merge(m, src)
}
func (m *PerRouteConfig) XXX_Size() int {
	return xxx_messageInfo_PerRouteConfig.Size(m)
}
func (m *PerRouteConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_PerRouteConfig.DiscardUnknown(m)
}

var xxx_messageInfo_PerRouteConfig proto.InternalMessageInfo

func (m *PerRouteConfig) GetHostRewrite() string {
	if m != nil {
		return m.HostRewrite
	}
	return ""
}

func init() {
	proto.RegisterType((*FilterConfig)(nil), "envoy.config.filter.http.dynamic_forward_proxy.v2alpha.FilterConfig")
	proto.RegisterType((*PerRouteConfig)(nil), "envoy.config.filter.http.dynamic_forward_proxy.v2alpha.PerRouteConfig")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/dynamic_forward_proxy/v2alpha/dynamic_forward_proxy.proto", fileDescriptor_85a2356b260c47da)
}

var fileDescriptor_85a2356b260c47da = []byte{
	// 270 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x90, 0x41, 0x4b, 0xc3, 0x30,
	0x14, 0x80, 0x89, 0xa0, 0x68, 0x36, 0xc6, 0xe8, 0xc5, 0xb1, 0x93, 0xee, 0xe4, 0x29, 0x81, 0x0d,
	0xbc, 0xaf, 0x2b, 0x3b, 0x97, 0xfe, 0x81, 0x92, 0xa5, 0xa9, 0x0d, 0xb4, 0x79, 0x25, 0xcd, 0x3a,
	0xfb, 0x03, 0xbc, 0xf8, 0x93, 0x3d, 0x49, 0xf2, 0xa6, 0x50, 0x18, 0x0a, 0xbb, 0x85, 0xf7, 0x91,
	0xef, 0x7d, 0x3c, 0x9a, 0x29, 0xd3, 0xc3, 0xc0, 0x25, 0x98, 0x52, 0xbf, 0xf1, 0x52, 0xd7, 0x4e,
	0x59, 0x5e, 0x39, 0xd7, 0xf2, 0x62, 0x30, 0xa2, 0xd1, 0x32, 0x2f, 0xc1, 0x9e, 0x84, 0x2d, 0xf2,
	0xd6, 0xc2, 0xfb, 0xc0, 0xfb, 0xb5, 0xa8, 0xdb, 0x4a, 0x5c, 0xa6, 0xac, 0xb5, 0xe0, 0x20, 0x7a,
	0x0d, 0x4e, 0x86, 0x4e, 0x86, 0x4e, 0xe6, 0x9d, 0xec, 0xf2, 0xaf, 0xb3, 0x73, 0xb9, 0x1d, 0xb5,
	0x48, 0x68, 0x1a, 0x30, 0xff, 0x65, 0x98, 0x2e, 0x97, 0x42, 0x56, 0x0a, 0x57, 0x2f, 0x1f, 0x7b,
	0x51, 0xeb, 0x42, 0x38, 0xc5, 0x7f, 0x1e, 0x08, 0x56, 0x1f, 0x84, 0x4e, 0xf7, 0xa1, 0x64, 0x17,
	0xf4, 0xd1, 0x91, 0xce, 0x7f, 0x3f, 0xe7, 0xb8, 0x72, 0x41, 0x9e, 0xc8, 0xcb, 0x64, 0xbd, 0x65,
	0xa3, 0x7e, 0xec, 0xf8, 0x3b, 0x9d, 0x25, 0xa6, 0xdb, 0x79, 0x13, 0xca, 0xe3, 0xfb, 0xaf, 0xf8,
	0xf6, 0x93, 0xdc, 0xcc, 0x49, 0x36, 0x2b, 0x46, 0x64, 0xb5, 0xa1, 0xb3, 0x54, 0xd9, 0x0c, 0x8e,
	0xee, 0x3c, 0x89, 0x9e, 0xe9, 0xb4, 0x82, 0xce, 0xe5, 0x56, 0x9d, 0xac, 0x76, 0x2a, 0x44, 0x3c,
	0x64, 0x13, 0x3f, 0xcb, 0x70, 0x14, 0x1f, 0x68, 0xa2, 0x01, 0xab, 0x70, 0xed, 0x75, 0x07, 0x8e,
	0x17, 0x09, 0xe2, 0x3d, 0xd2, 0xd4, 0xc3, 0xd4, 0x9f, 0x27, 0x25, 0x87, 0xbb, 0x70, 0xa7, 0xcd,
	0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe8, 0xe7, 0x30, 0x35, 0x11, 0x02, 0x00, 0x00,
}
 070701000000A5000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003C00000000cilium-proxy-20200109/go/envoy/config/filter/http/ext_authz   070701000000A6000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003F00000000cilium-proxy-20200109/go/envoy/config/filter/http/ext_authz/v2    070701000000A7000081A4000003E800000064000000015E17A24700007993000000000000000000000000000000000000004F00000000cilium-proxy-20200109/go/envoy/config/filter/http/ext_authz/v2/ext_authz.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/ext_authz/v2/ext_authz.proto

package envoy_config_filter_http_ext_authz_v2

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_type "github.com/cilium/proxy/go/envoy/type"
	matcher "github.com/cilium/proxy/go/envoy/type/matcher"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#next-free-field: 10]
type ExtAuthz struct {
	// External authorization service configuration.
	//
	// Types that are valid to be assigned to Services:
	//	*ExtAuthz_GrpcService
	//	*ExtAuthz_HttpService
	Services isExtAuthz_Services `protobuf_oneof:"services"`
	//  Changes filter's behaviour on errors:
	//
	//  1. When set to true, the filter will *accept* client request even if the communication with
	//  the authorization service has failed, or if the authorization service has returned a HTTP 5xx
	//  error.
	//
	//  2. When set to false, ext-authz will *reject* client requests and return a *Forbidden*
	//  response if the communication with the authorization service has failed, or if the
	//  authorization service has returned a HTTP 5xx error.
	//
	// Note that errors can be *always* tracked in the :ref:`stats
	// <config_http_filters_ext_authz_stats>`.
	FailureModeAllow bool `protobuf:"varint,2,opt,name=failure_mode_allow,json=failureModeAllow,proto3" json:"failure_mode_allow,omitempty"`
	// Sets the package version the gRPC service should use. This is particularly
	// useful when transitioning from alpha to release versions assuming that both definitions are
	// semantically compatible. Deprecation note: This field is deprecated and should only be used for
	// version upgrade. See release notes for more details.
	UseAlpha bool `protobuf:"varint,4,opt,name=use_alpha,json=useAlpha,proto3" json:"use_alpha,omitempty"` // Deprecated: Do not use.
	// Enables filter to buffer the client request body and send it within the authorization request.
	// A ``x-envoy-auth-partial-body: false|true`` metadata header will be added to the authorization
	// request message indicating if the body data is partial.
	WithRequestBody *BufferSettings `protobuf:"bytes,5,opt,name=with_request_body,json=withRequestBody,proto3" json:"with_request_body,omitempty"`
	// Clears route cache in order to allow the external authorization service to correctly affect
	// routing decisions. Filter clears all cached routes when:
	//
	// 1. The field is set to *true*.
	//
	// 2. The status returned from the authorization service is a HTTP 200 or gRPC 0.
	//
	// 3. At least one *authorization response header* is added to the client request, or is used for
	// altering another client request header.
	//
	ClearRouteCache bool `protobuf:"varint,6,opt,name=clear_route_cache,json=clearRouteCache,proto3" json:"clear_route_cache,omitempty"`
	// Sets the HTTP status that is returned to the client when there is a network error between the
	// filter and the authorization server. The default status is HTTP 403 Forbidden.
	StatusOnError *_type.HttpStatus `protobuf:"bytes,7,opt,name=status_on_error,json=statusOnError,proto3" json:"status_on_error,omitempty"`
	// Specifies a list of metadata namespaces whose values, if present, will be passed to the
	// ext_authz service as an opaque *protobuf::Struct*.
	//
	// For example, if the *jwt_authn* filter is used and :ref:`payload_in_metadata
	// <envoy_api_field_config.filter.http.jwt_authn.v2alpha.JwtProvider.payload_in_metadata>` is set,
	// then the following will pass the jwt payload to the authorization server.
	//
	// .. code-block:: yaml
	//
	//    metadata_context_namespaces:
	//    - envoy.filters.http.jwt_authn
	//
	MetadataContextNamespaces []string `protobuf:"bytes,8,rep,name=metadata_context_namespaces,json=metadataContextNamespaces,proto3" json:"metadata_context_namespaces,omitempty"`
	// Specifies if the filter is enabled.
	//
	// If :ref:`runtime_key <envoy_api_field_core.runtimefractionalpercent.runtime_key>` is specified,
	// Envoy will lookup the runtime key to get the percentage of requests to filter.
	//
	// If this field is not specified, the filter will be enabled for all requests.
	FilterEnabled        *core.RuntimeFractionalPercent `protobuf:"bytes,9,opt,name=filter_enabled,json=filterEnabled,proto3" json:"filter_enabled,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	XXX_sizecache        int32                          `json:"-"`
}

func (m *ExtAuthz) Reset()         { *m = ExtAuthz{} }
func (m *ExtAuthz) String() string { return proto.CompactTextString(m) }
func (*ExtAuthz) ProtoMessage()    {}
func (*ExtAuthz) Descriptor() ([]byte, []int) {
	return fileDescriptor_861cd76675296973, []int{0}
}

func (m *ExtAuthz) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ExtAuthz.Unmarshal(m, b)
}
func (m *ExtAuthz) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ExtAuthz.Marshal(b, m, deterministic)
}
func (m *ExtAuthz) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ExtAuthz.Merge(m, src)
}
func (m *ExtAuthz) XXX_Size() int {
	return xxx_messageInfo_ExtAuthz.Size(m)
}
func (m *ExtAuthz) XXX_DiscardUnknown() {
	xxx_messageInfo_ExtAuthz.DiscardUnknown(m)
}

var xxx_messageInfo_ExtAuthz proto.InternalMessageInfo

type isExtAuthz_Services interface {
	isExtAuthz_Services()
}

type ExtAuthz_GrpcService struct {
	GrpcService *core.GrpcService `protobuf:"bytes,1,opt,name=grpc_service,json=grpcService,proto3,oneof"`
}

type ExtAuthz_HttpService struct {
	HttpService *HttpService `protobuf:"bytes,3,opt,name=http_service,json=httpService,proto3,oneof"`
}

func (*ExtAuthz_GrpcService) isExtAuthz_Services() {}

func (*ExtAuthz_HttpService) isExtAuthz_Services() {}

func (m *ExtAuthz) GetServices() isExtAuthz_Services {
	if m != nil {
		return m.Services
	}
	return nil
}

func (m *ExtAuthz) GetGrpcService() *core.GrpcService {
	if x, ok := m.GetServices().(*ExtAuthz_GrpcService); ok {
		return x.GrpcService
	}
	return nil
}

func (m *ExtAuthz) GetHttpService() *HttpService {
	if x, ok := m.GetServices().(*ExtAuthz_HttpService); ok {
		return x.HttpService
	}
	return nil
}

func (m *ExtAuthz) GetFailureModeAllow() bool {
	if m != nil {
		return m.FailureModeAllow
	}
	return false
}

// Deprecated: Do not use.
func (m *ExtAuthz) GetUseAlpha() bool {
	if m != nil {
		return m.UseAlpha
	}
	return false
}

func (m *ExtAuthz) GetWithRequestBody() *BufferSettings {
	if m != nil {
		return m.WithRequestBody
	}
	return nil
}

func (m *ExtAuthz) GetClearRouteCache() bool {
	if m != nil {
		return m.ClearRouteCache
	}
	return false
}

func (m *ExtAuthz) GetStatusOnError() *_type.HttpStatus {
	if m != nil {
		return m.StatusOnError
	}
	return nil
}

func (m *ExtAuthz) GetMetadataContextNamespaces() []string {
	if m != nil {
		return m.MetadataContextNamespaces
	}
	return nil
}

func (m *ExtAuthz) GetFilterEnabled() *core.RuntimeFractionalPercent {
	if m != nil {
		return m.FilterEnabled
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ExtAuthz) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*ExtAuthz_GrpcService)(nil),
		(*ExtAuthz_HttpService)(nil),
	}
}

// Configuration for buffering the request data.
type BufferSettings struct {
	// Sets the maximum size of a message body that the filter will hold in memory. Envoy will return
	// *HTTP 413* and will *not* initiate the authorization process when buffer reaches the number
	// set in this field. Note that this setting will have precedence over :ref:`failure_mode_allow
	// <envoy_api_field_config.filter.http.ext_authz.v2.ExtAuthz.failure_mode_allow>`.
	MaxRequestBytes uint32 `protobuf:"varint,1,opt,name=max_request_bytes,json=maxRequestBytes,proto3" json:"max_request_bytes,omitempty"`
	// When this field is true, Envoy will buffer the message until *max_request_bytes* is reached.
	// The authorization request will be dispatched and no 413 HTTP error will be returned by the
	// filter.
	AllowPartialMessage  bool     `protobuf:"varint,2,opt,name=allow_partial_message,json=allowPartialMessage,proto3" json:"allow_partial_message,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *BufferSettings) Reset()         { *m = BufferSettings{} }
func (m *BufferSettings) String() string { return proto.CompactTextString(m) }
func (*BufferSettings) ProtoMessage()    {}
func (*BufferSettings) Descriptor() ([]byte, []int) {
	return fileDescriptor_861cd76675296973, []int{1}
}

func (m *BufferSettings) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_BufferSettings.Unmarshal(m, b)
}
func (m *BufferSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_BufferSettings.Marshal(b, m, deterministic)
}
func (m *BufferSettings) XXX_Merge(src proto.Message) {
	xxx_messageInfo_BufferSettings.Merge(m, src)
}
func (m *BufferSettings) XXX_Size() int {
	return xxx_messageInfo_BufferSettings.Size(m)
}
func (m *BufferSettings) XXX_DiscardUnknown() {
	xxx_messageInfo_BufferSettings.DiscardUnknown(m)
}

var xxx_messageInfo_BufferSettings proto.InternalMessageInfo

func (m *BufferSettings) GetMaxRequestBytes() uint32 {
	if m != nil {
		return m.MaxRequestBytes
	}
	return 0
}

func (m *BufferSettings) GetAllowPartialMessage() bool {
	if m != nil {
		return m.AllowPartialMessage
	}
	return false
}

// HttpService is used for raw HTTP communication between the filter and the authorization service.
// When configured, the filter will parse the client request and use these attributes to call the
// authorization server. Depending on the response, the filter may reject or accept the client
// request. Note that in any of these events, metadata can be added, removed or overridden by the
// filter:
//
// *On authorization request*, a list of allowed request headers may be supplied. See
// :ref:`allowed_headers
// <envoy_api_field_config.filter.http.ext_authz.v2.AuthorizationRequest.allowed_headers>`
// for details. Additional headers metadata may be added to the authorization request. See
// :ref:`headers_to_add
// <envoy_api_field_config.filter.http.ext_authz.v2.AuthorizationRequest.headers_to_add>` for
// details.
//
// On authorization response status HTTP 200 OK, the filter will allow traffic to the upstream and
// additional headers metadata may be added to the original client request. See
// :ref:`allowed_upstream_headers
// <envoy_api_field_config.filter.http.ext_authz.v2.AuthorizationResponse.allowed_upstream_headers>`
// for details.
//
// On other authorization response statuses, the filter will not allow traffic. Additional headers
// metadata as well as body may be added to the client's response. See :ref:`allowed_client_headers
// <envoy_api_field_config.filter.http.ext_authz.v2.AuthorizationResponse.allowed_client_headers>`
// for details.
// [#next-free-field: 9]
type HttpService struct {
	// Sets the HTTP server URI which the authorization requests must be sent to.
	ServerUri *core.HttpUri `protobuf:"bytes,1,opt,name=server_uri,json=serverUri,proto3" json:"server_uri,omitempty"`
	// Sets a prefix to the value of authorization request header *Path*.
	PathPrefix string `protobuf:"bytes,2,opt,name=path_prefix,json=pathPrefix,proto3" json:"path_prefix,omitempty"`
	// Settings used for controlling authorization request metadata.
	AuthorizationRequest *AuthorizationRequest `protobuf:"bytes,7,opt,name=authorization_request,json=authorizationRequest,proto3" json:"authorization_request,omitempty"`
	// Settings used for controlling authorization response metadata.
	AuthorizationResponse *AuthorizationResponse `protobuf:"bytes,8,opt,name=authorization_response,json=authorizationResponse,proto3" json:"authorization_response,omitempty"`
	XXX_NoUnkeyedLiteral  struct{}               `json:"-"`
	XXX_unrecognized      []byte                 `json:"-"`
	XXX_sizecache         int32                  `json:"-"`
}

func (m *HttpService) Reset()         { *m = HttpService{} }
func (m *HttpService) String() string { return proto.CompactTextString(m) }
func (*HttpService) ProtoMessage()    {}
func (*HttpService) Descriptor() ([]byte, []int) {
	return fileDescriptor_861cd76675296973, []int{2}
}

func (m *HttpService) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpService.Unmarshal(m, b)
}
func (m *HttpService) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpService.Marshal(b, m, deterministic)
}
func (m *HttpService) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpService.Merge(m, src)
}
func (m *HttpService) XXX_Size() int {
	return xxx_messageInfo_HttpService.Size(m)
}
func (m *HttpService) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpService.DiscardUnknown(m)
}

var xxx_messageInfo_HttpService proto.InternalMessageInfo

func (m *HttpService) GetServerUri() *core.HttpUri {
	if m != nil {
		return m.ServerUri
	}
	return nil
}

func (m *HttpService) GetPathPrefix() string {
	if m != nil {
		return m.PathPrefix
	}
	return ""
}

func (m *HttpService) GetAuthorizationRequest() *AuthorizationRequest {
	if m != nil {
		return m.AuthorizationRequest
	}
	return nil
}

func (m *HttpService) GetAuthorizationResponse() *AuthorizationResponse {
	if m != nil {
		return m.AuthorizationResponse
	}
	return nil
}

type AuthorizationRequest struct {
	// Authorization request will include the client request headers that have a correspondent match
	// in the :ref:`list <envoy_api_msg_type.matcher.ListStringMatcher>`. Note that in addition to the
	// user's supplied matchers:
	//
	// 1. *Host*, *Method*, *Path* and *Content-Length* are automatically included to the list.
	//
	// 2. *Content-Length* will be set to 0 and the request to the authorization service will not have
	// a message body.
	//
	AllowedHeaders *matcher.ListStringMatcher `protobuf:"bytes,1,opt,name=allowed_headers,json=allowedHeaders,proto3" json:"allowed_headers,omitempty"`
	// Sets a list of headers that will be included to the request to authorization service. Note that
	// client request of the same key will be overridden.
	HeadersToAdd         []*core.HeaderValue `protobuf:"bytes,2,rep,name=headers_to_add,json=headersToAdd,proto3" json:"headers_to_add,omitempty"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *AuthorizationRequest) Reset()         { *m = AuthorizationRequest{} }
func (m *AuthorizationRequest) String() string { return proto.CompactTextString(m) }
func (*AuthorizationRequest) ProtoMessage()    {}
func (*AuthorizationRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_861cd76675296973, []int{3}
}

func (m *AuthorizationRequest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AuthorizationRequest.Unmarshal(m, b)
}
func (m *AuthorizationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AuthorizationRequest.Marshal(b, m, deterministic)
}
func (m *AuthorizationRequest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AuthorizationRequest.Merge(m, src)
}
func (m *AuthorizationRequest) XXX_Size() int {
	return xxx_messageInfo_AuthorizationRequest.Size(m)
}
func (m *AuthorizationRequest) XXX_DiscardUnknown() {
	xxx_messageInfo_AuthorizationRequest.DiscardUnknown(m)
}

var xxx_messageInfo_AuthorizationRequest proto.InternalMessageInfo

func (m *AuthorizationRequest) GetAllowedHeaders() *matcher.ListStringMatcher {
	if m != nil {
		return m.AllowedHeaders
	}
	return nil
}

func (m *AuthorizationRequest) GetHeadersToAdd() []*core.HeaderValue {
	if m != nil {
		return m.HeadersToAdd
	}
	return nil
}

type AuthorizationResponse struct {
	// When this :ref:`list <envoy_api_msg_type.matcher.ListStringMatcher>` is set, authorization
	// response headers that have a correspondent match will be added to the original client request.
	// Note that coexistent headers will be overridden.
	AllowedUpstreamHeaders *matcher.ListStringMatcher `protobuf:"bytes,1,opt,name=allowed_upstream_headers,json=allowedUpstreamHeaders,proto3" json:"allowed_upstream_headers,omitempty"`
	// When this :ref:`list <envoy_api_msg_type.matcher.ListStringMatcher>`. is set, authorization
	// response headers that have a correspondent match will be added to the client's response. Note
	// that when this list is *not* set, all the authorization response headers, except *Authority
	// (Host)* will be in the response to the client. When a header is included in this list, *Path*,
	// *Status*, *Content-Length*, *WWWAuthenticate* and *Location* are automatically added.
	AllowedClientHeaders *matcher.ListStringMatcher `protobuf:"bytes,2,opt,name=allowed_client_headers,json=allowedClientHeaders,proto3" json:"allowed_client_headers,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
	XXX_unrecognized     []byte                     `json:"-"`
	XXX_sizecache        int32                      `json:"-"`
}

func (m *AuthorizationResponse) Reset()         { *m = AuthorizationResponse{} }
func (m *AuthorizationResponse) String() string { return proto.CompactTextString(m) }
func (*AuthorizationResponse) ProtoMessage()    {}
func (*AuthorizationResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_861cd76675296973, []int{4}
}

func (m *AuthorizationResponse) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AuthorizationResponse.Unmarshal(m, b)
}
func (m *AuthorizationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AuthorizationResponse.Marshal(b, m, deterministic)
}
func (m *AuthorizationResponse) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AuthorizationResponse.Merge(m, src)
}
func (m *AuthorizationResponse) XXX_Size() int {
	return xxx_messageInfo_AuthorizationResponse.Size(m)
}
func (m *AuthorizationResponse) XXX_DiscardUnknown() {
	xxx_messageInfo_AuthorizationResponse.DiscardUnknown(m)
}

var xxx_messageInfo_AuthorizationResponse proto.InternalMessageInfo

func (m *AuthorizationResponse) GetAllowedUpstreamHeaders() *matcher.ListStringMatcher {
	if m != nil {
		return m.AllowedUpstreamHeaders
	}
	return nil
}

func (m *AuthorizationResponse) GetAllowedClientHeaders() *matcher.ListStringMatcher {
	if m != nil {
		return m.AllowedClientHeaders
	}
	return nil
}

// Extra settings on a per virtualhost/route/weighted-cluster level.
type ExtAuthzPerRoute struct {
	// Types that are valid to be assigned to Override:
	//	*ExtAuthzPerRoute_Disabled
	//	*ExtAuthzPerRoute_CheckSettings
	Override             isExtAuthzPerRoute_Override `protobuf_oneof:"override"`
	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
	XXX_unrecognized     []byte                      `json:"-"`
	XXX_sizecache        int32                       `json:"-"`
}

func (m *ExtAuthzPerRoute) Reset()         { *m = ExtAuthzPerRoute{} }
func (m *ExtAuthzPerRoute) String() string { return proto.CompactTextString(m) }
func (*ExtAuthzPerRoute) ProtoMessage()    {}
func (*ExtAuthzPerRoute) Descriptor() ([]byte, []int) {
	return fileDescriptor_861cd76675296973, []int{5}
}

func (m *ExtAuthzPerRoute) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ExtAuthzPerRoute.Unmarshal(m, b)
}
func (m *ExtAuthzPerRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ExtAuthzPerRoute.Marshal(b, m, deterministic)
}
func (m *ExtAuthzPerRoute) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ExtAuthzPerRoute.Merge(m, src)
}
func (m *ExtAuthzPerRoute) XXX_Size() int {
	return xxx_messageInfo_ExtAuthzPerRoute.Size(m)
}
func (m *ExtAuthzPerRoute) XXX_DiscardUnknown() {
	xxx_messageInfo_ExtAuthzPerRoute.DiscardUnknown(m)
}

var xxx_messageInfo_ExtAuthzPerRoute proto.InternalMessageInfo

type isExtAuthzPerRoute_Override interface {
	isExtAuthzPerRoute_Override()
}

type ExtAuthzPerRoute_Disabled struct {
	Disabled bool `protobuf:"varint,1,opt,name=disabled,proto3,oneof"`
}

type ExtAuthzPerRoute_CheckSettings struct {
	CheckSettings *CheckSettings `protobuf:"bytes,2,opt,name=check_settings,json=checkSettings,proto3,oneof"`
}

func (*ExtAuthzPerRoute_Disabled) isExtAuthzPerRoute_Override() {}

func (*ExtAuthzPerRoute_CheckSettings) isExtAuthzPerRoute_Override() {}

func (m *ExtAuthzPerRoute) GetOverride() isExtAuthzPerRoute_Override {
	if m != nil {
		return m.Override
	}
	return nil
}

func (m *ExtAuthzPerRoute) GetDisabled() bool {
	if x, ok := m.GetOverride().(*ExtAuthzPerRoute_Disabled); ok {
		return x.Disabled
	}
	return false
}

func (m *ExtAuthzPerRoute) GetCheckSettings() *CheckSettings {
	if x, ok := m.GetOverride().(*ExtAuthzPerRoute_CheckSettings); ok {
		return x.CheckSettings
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ExtAuthzPerRoute) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*ExtAuthzPerRoute_Disabled)(nil),
		(*ExtAuthzPerRoute_CheckSettings)(nil),
	}
}

// Extra settings for the check request. You can use this to provide extra context for the
// external authorization server on specific virtual hosts \ routes. For example, adding a context
// extension on the virtual host level can give the ext-authz server information on what virtual
// host is used without needing to parse the host header. If CheckSettings is specified in multiple
// per-filter-configs, they will be merged in order, and the result will be used.
type CheckSettings struct {
	// Context extensions to set on the CheckRequest's
	// :ref:`AttributeContext.context_extensions<envoy_api_field_service.auth.v2.AttributeContext.context_extensions>`
	//
	// Merge semantics for this field are such that keys from more specific configs override.
	//
	// .. note::
	//
	//   These settings are only applied to a filter configured with a
	//   :ref:`grpc_service<envoy_api_field_config.filter.http.ext_authz.v2.ExtAuthz.grpc_service>`.
	ContextExtensions    map[string]string `protobuf:"bytes,1,rep,name=context_extensions,json=contextExtensions,proto3" json:"context_extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *CheckSettings) Reset()         { *m = CheckSettings{} }
func (m *CheckSettings) String() string { return proto.CompactTextString(m) }
func (*CheckSettings) ProtoMessage()    {}
func (*CheckSettings) Descriptor() ([]byte, []int) {
	return fileDescriptor_861cd76675296973, []int{6}
}

func (m *CheckSettings) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_CheckSettings.Unmarshal(m, b)
}
func (m *CheckSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_CheckSettings.Marshal(b, m, deterministic)
}
func (m *CheckSettings) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CheckSettings.Merge(m, src)
}
func (m *CheckSettings) XXX_Size() int {
	return xxx_messageInfo_CheckSettings.Size(m)
}
func (m *CheckSettings) XXX_DiscardUnknown() {
	xxx_messageInfo_CheckSettings.DiscardUnknown(m)
}

var xxx_messageInfo_CheckSettings proto.InternalMessageInfo

func (m *CheckSettings) GetContextExtensions() map[string]string {
	if m != nil {
		return m.ContextExtensions
	}
	return nil
}

func init() {
	proto.RegisterType((*ExtAuthz)(nil), "envoy.config.filter.http.ext_authz.v2.ExtAuthz")
	proto.RegisterType((*BufferSettings)(nil), "envoy.config.filter.http.ext_authz.v2.BufferSettings")
	proto.RegisterType((*HttpService)(nil), "envoy.config.filter.http.ext_authz.v2.HttpService")
	proto.RegisterType((*AuthorizationRequest)(nil), "envoy.config.filter.http.ext_authz.v2.AuthorizationRequest")
	proto.RegisterType((*AuthorizationResponse)(nil), "envoy.config.filter.http.ext_authz.v2.AuthorizationResponse")
	proto.RegisterType((*ExtAuthzPerRoute)(nil), "envoy.config.filter.http.ext_authz.v2.ExtAuthzPerRoute")
	proto.RegisterType((*CheckSettings)(nil), "envoy.config.filter.http.ext_authz.v2.CheckSettings")
	proto.RegisterMapType((map[string]string)(nil), "envoy.config.filter.http.ext_authz.v2.CheckSettings.ContextExtensionsEntry")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/ext_authz/v2/ext_authz.proto", fileDescriptor_861cd76675296973)
}

var fileDescriptor_861cd76675296973 = []byte{
	// 1004 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x5f, 0x6f, 0x23, 0x35,
	0x10, 0xbf, 0x4d, 0xd2, 0x76, 0xe3, 0x36, 0x4d, 0x6a, 0xda, 0xb2, 0x14, 0x44, 0xa3, 0x88, 0x4a,
	0xd5, 0x81, 0x36, 0x52, 0xca, 0x49, 0xfc, 0xd3, 0x49, 0x4d, 0xaf, 0x47, 0x55, 0xe8, 0x51, 0xb9,
	0x14, 0x1e, 0x78, 0xb0, 0xdc, 0xdd, 0x49, 0x62, 0x6e, 0xb3, 0x5e, 0x6c, 0x6f, 0x2e, 0xe9, 0x47,
	0xe0, 0xb3, 0xf0, 0xc6, 0x27, 0xe1, 0x81, 0xaf, 0x80, 0xf8, 0x08, 0xe8, 0x9e, 0x90, 0xd7, 0xde,
	0x36, 0xbd, 0x0b, 0x52, 0xe9, 0xdb, 0x7a, 0xe6, 0x37, 0xbf, 0xf9, 0x79, 0x66, 0x3c, 0x8b, 0x9e,
	0x40, 0x3a, 0x11, 0xb3, 0x6e, 0x24, 0xd2, 0x01, 0x1f, 0x76, 0x07, 0x3c, 0xd1, 0x20, 0xbb, 0x23,
	0xad, 0xb3, 0x2e, 0x4c, 0x35, 0x65, 0xb9, 0x1e, 0x5d, 0x77, 0x27, 0xbd, 0xdb, 0x43, 0x98, 0x49,
	0xa1, 0x05, 0xde, 0x2b, 0xc2, 0x42, 0x1b, 0x16, 0xda, 0xb0, 0xd0, 0x84, 0x85, 0xb7, 0xc8, 0x49,
	0x6f, 0xe7, 0x03, 0xcb, 0xce, 0x32, 0x6e, 0x48, 0x22, 0x21, 0xa1, 0x7b, 0xc5, 0x14, 0x58, 0x92,
	0x9d, 0x8f, 0xde, 0xf6, 0x0e, 0x65, 0x16, 0x51, 0x05, 0x72, 0xc2, 0xa3, 0x12, 0xd5, 0x7e, 0x1b,
	0x65, 0x12, 0xd1, 0x5c, 0x72, 0x87, 0x70, 0x59, 0xf4, 0x2c, 0x73, 0x2e, 0xa5, 0x99, 0xce, 0x95,
	0xf3, 0xee, 0xce, 0x79, 0xc7, 0x4c, 0x47, 0x23, 0x90, 0x5d, 0xa5, 0x25, 0x4f, 0x87, 0x0e, 0xf0,
	0xee, 0x84, 0x25, 0x3c, 0x66, 0x1a, 0xba, 0xe5, 0x87, 0x75, 0x74, 0xfe, 0xaa, 0x21, 0xff, 0x78,
	0xaa, 0x0f, 0xcd, 0x6d, 0xf0, 0x11, 0x5a, 0x9b, 0x17, 0x17, 0x78, 0x6d, 0x6f, 0x7f, 0xb5, 0xf7,
	0x61, 0x68, 0x0b, 0xc1, 0x32, 0x1e, 0x4e, 0x7a, 0xa1, 0x51, 0x17, 0x7e, 0x2d, 0xb3, 0xe8, 0xc2,
	0xa2, 0x4e, 0x1e, 0x91, 0xd5, 0xe1, 0xed, 0x11, 0xff, 0x88, 0xd6, 0xac, 0x40, 0x47, 0x52, 0x2d,
	0x48, 0x7a, 0xe1, 0xbd, 0xaa, 0x19, 0x9e, 0x68, 0x9d, 0xcd, 0x11, 0x8f, 0x6e, 0x8f, 0xf8, 0x13,
	0x84, 0x07, 0x8c, 0x27, 0xb9, 0x04, 0x3a, 0x16, 0x31, 0x50, 0x96, 0x24, 0xe2, 0x55, 0x50, 0x69,
	0x7b, 0xfb, 0x3e, 0x69, 0x39, 0xcf, 0x99, 0x88, 0xe1, 0xd0, 0xd8, 0xf1, 0x2e, 0xaa, 0xe7, 0xca,
	0x80, 0xb2, 0x11, 0x0b, 0x6a, 0x06, 0xd4, 0xaf, 0x04, 0x1e, 0xf1, 0x73, 0x05, 0x87, 0xc6, 0x86,
	0x19, 0xda, 0x78, 0xc5, 0xf5, 0x88, 0x4a, 0xf8, 0x25, 0x07, 0xa5, 0xe9, 0x95, 0x88, 0x67, 0xc1,
	0x52, 0x21, 0xf6, 0xc9, 0x3d, 0xc5, 0xf6, 0xf3, 0xc1, 0x00, 0xe4, 0x05, 0x68, 0xcd, 0xd3, 0xa1,
	0x22, 0x4d, 0xc3, 0x47, 0x2c, 0x5d, 0x5f, 0xc4, 0x33, 0xfc, 0x18, 0x6d, 0x44, 0x09, 0x30, 0x49,
	0xa5, 0xc8, 0x35, 0xd0, 0x88, 0x45, 0x23, 0x08, 0x96, 0x0b, 0xc1, 0xcd, 0xc2, 0x41, 0x8c, 0xfd,
	0xc8, 0x98, 0xf1, 0x53, 0xd4, 0xb4, 0x2d, 0xa5, 0x22, 0xa5, 0x20, 0xa5, 0x90, 0xc1, 0x4a, 0x21,
	0x66, 0xdb, 0x89, 0x31, 0xcd, 0xb5, 0xe5, 0x29, 0x60, 0xa4, 0x61, 0xe1, 0xdf, 0xa5, 0xc7, 0x06,
	0x8c, 0x9f, 0xa2, 0xf7, 0xc7, 0xa0, 0x59, 0xcc, 0x34, 0xa3, 0x91, 0x48, 0xb5, 0x11, 0x9a, 0xb2,
	0x31, 0xa8, 0x8c, 0x45, 0xa0, 0x02, 0xbf, 0x5d, 0xdd, 0xaf, 0x93, 0xf7, 0x4a, 0xc8, 0x91, 0x45,
	0xbc, 0xb8, 0x01, 0x60, 0x82, 0xd6, 0xed, 0x3d, 0x29, 0xa4, 0xec, 0x2a, 0x81, 0x38, 0xa8, 0x17,
	0xe9, 0x3f, 0x5e, 0xd0, 0x7d, 0x92, 0xa7, 0x9a, 0x8f, 0xe1, 0xb9, 0x64, 0x91, 0xe6, 0x22, 0x65,
	0xc9, 0x39, 0xc8, 0x08, 0x52, 0x4d, 0x1a, 0x96, 0xe2, 0xd8, 0x32, 0xf4, 0x11, 0xf2, 0xdd, 0x14,
	0xa8, 0xce, 0x0c, 0xad, 0xdf, 0x2d, 0x17, 0x3e, 0x40, 0x1b, 0x63, 0x36, 0xbd, 0xad, 0xff, 0x4c,
	0x83, 0x2a, 0x46, 0xae, 0xd1, 0x5f, 0x79, 0xdd, 0xaf, 0x3d, 0xae, 0xb4, 0x1f, 0x91, 0xe6, 0x98,
	0x4d, 0xcb, 0x8a, 0x1a, 0x3f, 0xee, 0xa1, 0xad, 0xa2, 0xef, 0x34, 0x63, 0x52, 0x73, 0x96, 0xd0,
	0x31, 0x28, 0xc5, 0x86, 0xe0, 0xe6, 0xe0, 0x9d, 0xc2, 0x79, 0x6e, 0x7d, 0x67, 0xd6, 0xd5, 0xf9,
	0xbb, 0x82, 0x56, 0xe7, 0xe6, 0x0a, 0x7f, 0x8e, 0x90, 0x91, 0x05, 0xd2, 0xbc, 0x2f, 0x37, 0xe4,
	0x3b, 0x0b, 0xae, 0x69, 0x62, 0x2e, 0x25, 0x27, 0x75, 0x8b, 0xbe, 0x94, 0x1c, 0xef, 0xa2, 0xd5,
	0x8c, 0xe9, 0x11, 0xcd, 0x24, 0x0c, 0xf8, 0xb4, 0x48, 0x5a, 0x27, 0xc8, 0x98, 0xce, 0x0b, 0x0b,
	0xce, 0xd0, 0x96, 0x19, 0x0f, 0x21, 0xf9, 0x35, 0x33, 0xb5, 0x29, 0xaf, 0xe7, 0x9a, 0xf9, 0xe5,
	0x3d, 0x27, 0xeb, 0x70, 0x9e, 0xc3, 0x15, 0x80, 0x6c, 0xb2, 0x05, 0x56, 0xac, 0xd0, 0xf6, 0x9b,
	0x19, 0x55, 0x26, 0x52, 0x05, 0x81, 0x5f, 0xa4, 0xfc, 0xea, 0x61, 0x29, 0x2d, 0x07, 0xd9, 0x62,
	0x8b, 0xcc, 0xa7, 0x35, 0xbf, 0xda, 0xaa, 0x9d, 0xd6, 0xfc, 0x5a, 0x6b, 0xe9, 0xb4, 0xe6, 0x2f,
	0xb5, 0x96, 0x4f, 0x6b, 0xfe, 0x72, 0x6b, 0xa5, 0xf3, 0x9b, 0x87, 0x36, 0x17, 0x69, 0xc7, 0x2f,
	0x50, 0xb3, 0x68, 0x0d, 0xc4, 0x74, 0x04, 0x2c, 0x06, 0xa9, 0x5c, 0xe1, 0xf7, 0xe6, 0xc7, 0xdb,
	0xed, 0xae, 0xf0, 0x5b, 0xae, 0xf4, 0x45, 0xb1, 0xbf, 0xce, 0xac, 0x85, 0xac, 0xbb, 0xe8, 0x13,
	0x1b, 0x8c, 0x9f, 0xa1, 0x75, 0xc7, 0x43, 0xb5, 0xa0, 0x2c, 0x8e, 0x83, 0x4a, 0xbb, 0xfa, 0x1f,
	0xcb, 0xca, 0xc6, 0xfc, 0xc0, 0x92, 0x1c, 0xc8, 0x9a, 0x8b, 0xfa, 0x5e, 0x1c, 0xc6, 0x71, 0xe7,
	0x4f, 0x0f, 0x6d, 0x2d, 0xbc, 0x37, 0xa6, 0x28, 0x28, 0xf5, 0xe6, 0x99, 0xd2, 0x12, 0xd8, 0xf8,
	0x61, 0xc2, 0xb7, 0x1d, 0xcd, 0xa5, 0x63, 0x29, 0x2f, 0xf0, 0x13, 0x2a, 0x3d, 0x34, 0x4a, 0x38,
	0xa4, 0xfa, 0x86, 0xbe, 0xf2, 0x7f, 0xe8, 0x37, 0x1d, 0xc9, 0x51, 0xc1, 0xe1, 0xc8, 0x3b, 0xbf,
	0x7b, 0xa8, 0x55, 0x6e, 0xf5, 0x73, 0xb0, 0x6b, 0x06, 0xef, 0x21, 0x3f, 0xe6, 0xca, 0xbe, 0x6d,
	0xaf, 0x58, 0x88, 0xe6, 0x99, 0xfd, 0x5c, 0xf1, 0xbd, 0x93, 0x47, 0xe4, 0xc6, 0x85, 0x87, 0x68,
	0x3d, 0x1a, 0x41, 0xf4, 0x92, 0x2a, 0xf7, 0x50, 0x9d, 0xa0, 0x4f, 0xef, 0x39, 0x47, 0x47, 0x26,
	0xb8, 0x7c, 0xe4, 0x7d, 0xff, 0x75, 0x7f, 0xe9, 0x57, 0xaf, 0xd2, 0x32, 0x39, 0x1a, 0xd1, 0x1d,
	0x57, 0x13, 0xf9, 0x62, 0x02, 0x52, 0xf2, 0x18, 0x70, 0xf5, 0x9f, 0xbe, 0xd7, 0xf9, 0xc3, 0x43,
	0x8d, 0x3b, 0xd1, 0xf8, 0x1a, 0xe1, 0x72, 0x97, 0xc1, 0x54, 0x43, 0xaa, 0xb8, 0x48, 0x4d, 0xfd,
	0x4d, 0xa7, 0xbf, 0x79, 0x88, 0x9e, 0xd0, 0x2d, 0xbe, 0xe3, 0x1b, 0xb6, 0xe3, 0x54, 0xcb, 0x19,
	0xd9, 0x88, 0xde, 0xb4, 0xef, 0x3c, 0x43, 0xdb, 0x8b, 0xc1, 0xb8, 0x85, 0xaa, 0x2f, 0x61, 0x56,
	0xd4, 0xb0, 0x4e, 0xcc, 0x27, 0xde, 0x44, 0x4b, 0x13, 0x33, 0x5e, 0x6e, 0x21, 0xd8, 0xc3, 0x17,
	0x95, 0xcf, 0xbc, 0xfe, 0x73, 0x74, 0xc0, 0x85, 0x55, 0x9a, 0x49, 0x31, 0x9d, 0xdd, 0x4f, 0x74,
	0xbf, 0x71, 0xd3, 0x3d, 0xf3, 0x97, 0x3e, 0xf7, 0xae, 0x96, 0x8b, 0xdf, 0xf5, 0xc1, 0xbf, 0x01,
	0x00, 0x00, 0xff, 0xff, 0xe7, 0x73, 0x83, 0x63, 0xcc, 0x08, 0x00, 0x00,
}
 070701000000A8000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003800000000cilium-proxy-20200109/go/envoy/config/filter/http/fault   070701000000A9000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003B00000000cilium-proxy-20200109/go/envoy/config/filter/http/fault/v2    070701000000AA000081A4000003E800000064000000015E17A24700003C65000000000000000000000000000000000000004700000000cilium-proxy-20200109/go/envoy/config/filter/http/fault/v2/fault.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/fault/v2/fault.proto

package envoy_config_filter_http_fault_v2

import (
	fmt "fmt"
	route "github.com/cilium/proxy/go/envoy/api/v2/route"
	v2 "github.com/cilium/proxy/go/envoy/config/filter/fault/v2"
	_type "github.com/cilium/proxy/go/envoy/type"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type FaultAbort struct {
	// Types that are valid to be assigned to ErrorType:
	//	*FaultAbort_HttpStatus
	ErrorType isFaultAbort_ErrorType `protobuf_oneof:"error_type"`
	// The percentage of requests/operations/connections that will be aborted with the error code
	// provided.
	Percentage           *_type.FractionalPercent `protobuf:"bytes,3,opt,name=percentage,proto3" json:"percentage,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
	XXX_unrecognized     []byte                   `json:"-"`
	XXX_sizecache        int32                    `json:"-"`
}

func (m *FaultAbort) Reset()         { *m = FaultAbort{} }
func (m *FaultAbort) String() string { return proto.CompactTextString(m) }
func (*FaultAbort) ProtoMessage()    {}
func (*FaultAbort) Descriptor() ([]byte, []int) {
	return fileDescriptor_26070db6b6576d5c, []int{0}
}

func (m *FaultAbort) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FaultAbort.Unmarshal(m, b)
}
func (m *FaultAbort) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FaultAbort.Marshal(b, m, deterministic)
}
func (m *FaultAbort) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FaultAbort.Merge(m, src)
}
func (m *FaultAbort) XXX_Size() int {
	return xxx_messageInfo_FaultAbort.Size(m)
}
func (m *FaultAbort) XXX_DiscardUnknown() {
	xxx_messageInfo_FaultAbort.DiscardUnknown(m)
}

var xxx_messageInfo_FaultAbort proto.InternalMessageInfo

type isFaultAbort_ErrorType interface {
	isFaultAbort_ErrorType()
}

type FaultAbort_HttpStatus struct {
	HttpStatus uint32 `protobuf:"varint,2,opt,name=http_status,json=httpStatus,proto3,oneof"`
}

func (*FaultAbort_HttpStatus) isFaultAbort_ErrorType() {}

func (m *FaultAbort) GetErrorType() isFaultAbort_ErrorType {
	if m != nil {
		return m.ErrorType
	}
	return nil
}

func (m *FaultAbort) GetHttpStatus() uint32 {
	if x, ok := m.GetErrorType().(*FaultAbort_HttpStatus); ok {
		return x.HttpStatus
	}
	return 0
}

func (m *FaultAbort) GetPercentage() *_type.FractionalPercent {
	if m != nil {
		return m.Percentage
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*FaultAbort) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*FaultAbort_HttpStatus)(nil),
	}
}

// [#next-free-field: 14]
type HTTPFault struct {
	// If specified, the filter will inject delays based on the values in the
	// object.
	Delay *v2.FaultDelay `protobuf:"bytes,1,opt,name=delay,proto3" json:"delay,omitempty"`
	// If specified, the filter will abort requests based on the values in
	// the object. At least *abort* or *delay* must be specified.
	Abort *FaultAbort `protobuf:"bytes,2,opt,name=abort,proto3" json:"abort,omitempty"`
	// Specifies the name of the (destination) upstream cluster that the
	// filter should match on. Fault injection will be restricted to requests
	// bound to the specific upstream cluster.
	UpstreamCluster string `protobuf:"bytes,3,opt,name=upstream_cluster,json=upstreamCluster,proto3" json:"upstream_cluster,omitempty"`
	// Specifies a set of headers that the filter should match on. The fault
	// injection filter can be applied selectively to requests that match a set of
	// headers specified in the fault filter config. The chances of actual fault
	// injection further depend on the value of the :ref:`percentage
	// <envoy_api_field_config.filter.http.fault.v2.FaultAbort.percentage>` field.
	// The filter will check the request's headers against all the specified
	// headers in the filter config. A match will happen if all the headers in the
	// config are present in the request with the same values (or based on
	// presence if the *value* field is not in the config).
	Headers []*route.HeaderMatcher `protobuf:"bytes,4,rep,name=headers,proto3" json:"headers,omitempty"`
	// Faults are injected for the specified list of downstream hosts. If this
	// setting is not set, faults are injected for all downstream nodes.
	// Downstream node name is taken from :ref:`the HTTP
	// x-envoy-downstream-service-node
	// <config_http_conn_man_headers_downstream-service-node>` header and compared
	// against downstream_nodes list.
	DownstreamNodes []string `protobuf:"bytes,5,rep,name=downstream_nodes,json=downstreamNodes,proto3" json:"downstream_nodes,omitempty"`
	// The maximum number of faults that can be active at a single time via the configured fault
	// filter. Note that because this setting can be overridden at the route level, it's possible
	// for the number of active faults to be greater than this value (if injected via a different
	// route). If not specified, defaults to unlimited. This setting can be overridden via
	// `runtime <config_http_filters_fault_injection_runtime>` and any faults that are not injected
	// due to overflow will be indicated via the `faults_overflow
	// <config_http_filters_fault_injection_stats>` stat.
	//
	// .. attention::
	//   Like other :ref:`circuit breakers <arch_overview_circuit_break>` in Envoy, this is a fuzzy
	//   limit. It's possible for the number of active faults to rise slightly above the configured
	//   amount due to the implementation details.
	MaxActiveFaults *wrappers.UInt32Value `protobuf:"bytes,6,opt,name=max_active_faults,json=maxActiveFaults,proto3" json:"max_active_faults,omitempty"`
	// The response rate limit to be applied to the response body of the stream. When configured,
	// the percentage can be overridden by the :ref:`fault.http.rate_limit.response_percent
	// <config_http_filters_fault_injection_runtime>` runtime key.
	//
	// .. attention::
	//  This is a per-stream limit versus a connection level limit. This means that concurrent streams
	//  will each get an independent limit.
	ResponseRateLimit *v2.FaultRateLimit `protobuf:"bytes,7,opt,name=response_rate_limit,json=responseRateLimit,proto3" json:"response_rate_limit,omitempty"`
	// The runtime key to override the :ref:`default <config_http_filters_fault_injection_runtime>`
	// runtime. The default is: fault.http.delay.fixed_delay_percent
	DelayPercentRuntime string `protobuf:"bytes,8,opt,name=delay_percent_runtime,json=delayPercentRuntime,proto3" json:"delay_percent_runtime,omitempty"`
	// The runtime key to override the :ref:`default <config_http_filters_fault_injection_runtime>`
	// runtime. The default is: fault.http.abort.abort_percent
	AbortPercentRuntime string `protobuf:"bytes,9,opt,name=abort_percent_runtime,json=abortPercentRuntime,proto3" json:"abort_percent_runtime,omitempty"`
	// The runtime key to override the :ref:`default <config_http_filters_fault_injection_runtime>`
	// runtime. The default is: fault.http.delay.fixed_duration_ms
	DelayDurationRuntime string `protobuf:"bytes,10,opt,name=delay_duration_runtime,json=delayDurationRuntime,proto3" json:"delay_duration_runtime,omitempty"`
	// The runtime key to override the :ref:`default <config_http_filters_fault_injection_runtime>`
	// runtime. The default is: fault.http.abort.http_status
	AbortHttpStatusRuntime string `protobuf:"bytes,11,opt,name=abort_http_status_runtime,json=abortHttpStatusRuntime,proto3" json:"abort_http_status_runtime,omitempty"`
	// The runtime key to override the :ref:`default <config_http_filters_fault_injection_runtime>`
	// runtime. The default is: fault.http.max_active_faults
	MaxActiveFaultsRuntime string `protobuf:"bytes,12,opt,name=max_active_faults_runtime,json=maxActiveFaultsRuntime,proto3" json:"max_active_faults_runtime,omitempty"`
	// The runtime key to override the :ref:`default <config_http_filters_fault_injection_runtime>`
	// runtime. The default is: fault.http.rate_limit.response_percent
	ResponseRateLimitPercentRuntime string   `protobuf:"bytes,13,opt,name=response_rate_limit_percent_runtime,json=responseRateLimitPercentRuntime,proto3" json:"response_rate_limit_percent_runtime,omitempty"`
	XXX_NoUnkeyedLiteral            struct{} `json:"-"`
	XXX_unrecognized                []byte   `json:"-"`
	XXX_sizecache                   int32    `json:"-"`
}

func (m *HTTPFault) Reset()         { *m = HTTPFault{} }
func (m *HTTPFault) String() string { return proto.CompactTextString(m) }
func (*HTTPFault) ProtoMessage()    {}
func (*HTTPFault) Descriptor() ([]byte, []int) {
	return fileDescriptor_26070db6b6576d5c, []int{1}
}

func (m *HTTPFault) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HTTPFault.Unmarshal(m, b)
}
func (m *HTTPFault) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HTTPFault.Marshal(b, m, deterministic)
}
func (m *HTTPFault) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HTTPFault.Merge(m, src)
}
func (m *HTTPFault) XXX_Size() int {
	return xxx_messageInfo_HTTPFault.Size(m)
}
func (m *HTTPFault) XXX_DiscardUnknown() {
	xxx_messageInfo_HTTPFault.DiscardUnknown(m)
}

var xxx_messageInfo_HTTPFault proto.InternalMessageInfo

func (m *HTTPFault) GetDelay() *v2.FaultDelay {
	if m != nil {
		return m.Delay
	}
	return nil
}

func (m *HTTPFault) GetAbort() *FaultAbort {
	if m != nil {
		return m.Abort
	}
	return nil
}

func (m *HTTPFault) GetUpstreamCluster() string {
	if m != nil {
		return m.UpstreamCluster
	}
	return ""
}

func (m *HTTPFault) GetHeaders() []*route.HeaderMatcher {
	if m != nil {
		return m.Headers
	}
	return nil
}

func (m *HTTPFault) GetDownstreamNodes() []string {
	if m != nil {
		return m.DownstreamNodes
	}
	return nil
}

func (m *HTTPFault) GetMaxActiveFaults() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxActiveFaults
	}
	return nil
}

func (m *HTTPFault) GetResponseRateLimit() *v2.FaultRateLimit {
	if m != nil {
		return m.ResponseRateLimit
	}
	return nil
}

func (m *HTTPFault) GetDelayPercentRuntime() string {
	if m != nil {
		return m.DelayPercentRuntime
	}
	return ""
}

func (m *HTTPFault) GetAbortPercentRuntime() string {
	if m != nil {
		return m.AbortPercentRuntime
	}
	return ""
}

func (m *HTTPFault) GetDelayDurationRuntime() string {
	if m != nil {
		return m.DelayDurationRuntime
	}
	return ""
}

func (m *HTTPFault) GetAbortHttpStatusRuntime() string {
	if m != nil {
		return m.AbortHttpStatusRuntime
	}
	return ""
}

func (m *HTTPFault) GetMaxActiveFaultsRuntime() string {
	if m != nil {
		return m.MaxActiveFaultsRuntime
	}
	return ""
}

func (m *HTTPFault) GetResponseRateLimitPercentRuntime() string {
	if m != nil {
		return m.ResponseRateLimitPercentRuntime
	}
	return ""
}

func init() {
	proto.RegisterType((*FaultAbort)(nil), "envoy.config.filter.http.fault.v2.FaultAbort")
	proto.RegisterType((*HTTPFault)(nil), "envoy.config.filter.http.fault.v2.HTTPFault")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/fault/v2/fault.proto", fileDescriptor_26070db6b6576d5c)
}

var fileDescriptor_26070db6b6576d5c = []byte{
	// 624 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x5f, 0x6e, 0xd3, 0x40,
	0x10, 0xc6, 0x71, 0xd3, 0xa6, 0xed, 0x9a, 0xaa, 0x8d, 0x0b, 0xc5, 0x44, 0x50, 0xd2, 0xf2, 0x62,
	0x10, 0x5d, 0x4b, 0x2e, 0x2f, 0x08, 0x01, 0xaa, 0x5b, 0x55, 0x01, 0x15, 0x14, 0x99, 0xc2, 0x13,
	0x92, 0xb5, 0x89, 0x27, 0x89, 0x25, 0xc7, 0x6b, 0xad, 0xd7, 0x69, 0x72, 0x0f, 0xae, 0xc1, 0x3d,
	0x38, 0x02, 0x47, 0x41, 0x3c, 0xa1, 0x9d, 0xb5, 0xd3, 0xd0, 0x44, 0x2a, 0x2f, 0x95, 0xbb, 0xf3,
	0xfd, 0xe6, 0xcf, 0x37, 0x13, 0x72, 0x04, 0xe9, 0x98, 0x4f, 0xdd, 0x1e, 0x4f, 0xfb, 0xf1, 0xc0,
	0xed, 0xc7, 0x89, 0x04, 0xe1, 0x0e, 0xa5, 0xcc, 0xdc, 0x3e, 0x2b, 0x12, 0xe9, 0x8e, 0x3d, 0xfd,
	0x41, 0x33, 0xc1, 0x25, 0xb7, 0x0e, 0x50, 0x4e, 0xb5, 0x9c, 0x6a, 0x39, 0x55, 0x72, 0xaa, 0x55,
	0x63, 0xaf, 0xb9, 0xaf, 0x33, 0xb2, 0x2c, 0x56, 0xb0, 0xe0, 0x85, 0x04, 0xfd, 0x57, 0xa7, 0x68,
	0x3a, 0xcb, 0x2a, 0x2e, 0x2b, 0xd6, 0xb4, 0xb5, 0x52, 0x4e, 0x33, 0x70, 0x33, 0x10, 0x3d, 0x48,
	0xab, 0xc8, 0xfe, 0x80, 0xf3, 0x41, 0x02, 0x2e, 0xfe, 0xd7, 0x2d, 0xfa, 0xee, 0x95, 0x60, 0x59,
	0x06, 0x22, 0x2f, 0xe3, 0x0f, 0xc6, 0x2c, 0x89, 0x23, 0x26, 0xc1, 0xad, 0x3e, 0x74, 0xe0, 0xf0,
	0xbb, 0x41, 0xc8, 0xb9, 0x2a, 0x71, 0xd2, 0xe5, 0x42, 0x5a, 0x94, 0x98, 0xaa, 0xf9, 0x30, 0x97,
	0x4c, 0x16, 0xb9, 0xbd, 0xd2, 0x32, 0x9c, 0x2d, 0xdf, 0xfc, 0xe3, 0x6f, 0x3c, 0xaf, 0xef, 0xfc,
	0x5a, 0x75, 0x7e, 0x1a, 0xed, 0x3b, 0x01, 0x51, 0x8a, 0xcf, 0x28, 0xb0, 0xde, 0x10, 0x52, 0x36,
	0xc2, 0x06, 0x60, 0xd7, 0x5a, 0x86, 0x63, 0x7a, 0x8f, 0xa9, 0xf6, 0x44, 0xb5, 0x49, 0xcf, 0x05,
	0xeb, 0xc9, 0x98, 0xa7, 0x2c, 0xe9, 0x68, 0x5d, 0x30, 0x07, 0xf8, 0x0d, 0x42, 0x40, 0x08, 0x2e,
	0x42, 0xa5, 0xb5, 0x6a, 0xbf, 0x7d, 0xe3, 0xc3, 0xea, 0x86, 0xb1, 0xb3, 0x72, 0xf8, 0xa3, 0x4e,
	0x36, 0xdb, 0x97, 0x97, 0x1d, 0x6c, 0xcd, 0x7a, 0x4b, 0xd6, 0x22, 0x48, 0xd8, 0xd4, 0x36, 0xb0,
	0x80, 0x43, 0x97, 0x99, 0x5e, 0xf9, 0x4d, 0x91, 0x39, 0x53, 0xfa, 0x40, 0x63, 0xd6, 0x29, 0x59,
	0x63, 0x6a, 0x3c, 0x9c, 0xc7, 0xf4, 0x8e, 0xe8, 0xad, 0x4b, 0xa3, 0xd7, 0x9e, 0x04, 0x9a, 0xb5,
	0x9e, 0x91, 0x9d, 0x22, 0xcb, 0xa5, 0x00, 0x36, 0x0a, 0x7b, 0x49, 0x91, 0x4b, 0x10, 0x38, 0xf0,
	0x66, 0xb0, 0x5d, 0xbd, 0x9f, 0xea, 0x67, 0xeb, 0x35, 0x59, 0x1f, 0x02, 0x8b, 0x40, 0xe4, 0xf6,
	0x6a, 0xab, 0xe6, 0x98, 0xde, 0x41, 0x59, 0x91, 0x65, 0xb1, 0x4a, 0xae, 0xb7, 0xdf, 0x46, 0xc9,
	0x47, 0x26, 0x7b, 0x43, 0x10, 0x41, 0x45, 0xa8, 0x3a, 0x11, 0xbf, 0x4a, 0xcb, 0x4a, 0x29, 0x8f,
	0x20, 0xb7, 0xd7, 0x5a, 0x35, 0x55, 0xe7, 0xfa, 0xfd, 0x93, 0x7a, 0xb6, 0xda, 0xa4, 0x31, 0x62,
	0x93, 0x50, 0x39, 0x3c, 0x86, 0x10, 0x7b, 0xcf, 0xed, 0x3a, 0xce, 0xf8, 0x88, 0xea, 0x8b, 0xa0,
	0xd5, 0x45, 0xd0, 0x2f, 0xef, 0x53, 0x79, 0xec, 0x7d, 0x65, 0x49, 0x01, 0xc1, 0xf6, 0x88, 0x4d,
	0x4e, 0x90, 0xc2, 0x39, 0x73, 0xeb, 0x1b, 0xd9, 0x15, 0x90, 0x67, 0x3c, 0xcd, 0x21, 0x14, 0x4c,
	0x42, 0x98, 0xc4, 0xa3, 0x58, 0xda, 0xeb, 0x98, 0xeb, 0xc5, 0x7f, 0xf8, 0x1d, 0x30, 0x09, 0x17,
	0x8a, 0x09, 0x1a, 0x55, 0xa2, 0xd9, 0x93, 0xe5, 0x91, 0xfb, 0xb8, 0x88, 0xb0, 0x5c, 0x7d, 0x28,
	0x8a, 0x54, 0xc6, 0x23, 0xb0, 0x37, 0xd0, 0xbf, 0x5d, 0x0c, 0x56, 0xf7, 0xa1, 0x43, 0x8a, 0x41,
	0xdf, 0x17, 0x98, 0x4d, 0xcd, 0x60, 0xf0, 0x06, 0xf3, 0x92, 0xec, 0xe9, 0x3a, 0x51, 0x21, 0x98,
	0xba, 0xba, 0x19, 0x44, 0x10, 0xba, 0x87, 0xd1, 0xb3, 0x32, 0x58, 0x51, 0xaf, 0xc8, 0x43, 0x5d,
	0x69, 0xee, 0xf2, 0x67, 0xa0, 0x89, 0xe0, 0x1e, 0x0a, 0xda, 0xb3, 0xbb, 0x9f, 0x43, 0x17, 0x16,
	0x30, 0x43, 0xef, 0x6a, 0xf4, 0x86, 0xd5, 0x15, 0x7a, 0x41, 0x9e, 0x2e, 0x71, 0x7c, 0x61, 0xda,
	0x2d, 0x4c, 0xf2, 0x64, 0xc1, 0xd3, 0x7f, 0x27, 0xf7, 0xdf, 0x11, 0x37, 0xe6, 0x7a, 0x4d, 0x99,
	0xe0, 0x93, 0xe9, 0xed, 0x17, 0xee, 0xeb, 0x9f, 0x7d, 0x47, 0x9d, 0x47, 0xc7, 0xe8, 0xd6, 0xf1,
	0x4e, 0x8e, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xb4, 0x42, 0x1b, 0x0e, 0xff, 0x04, 0x00, 0x00,
}
   070701000000AB000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004C00000000cilium-proxy-20200109/go/envoy/config/filter/http/grpc_http1_reverse_bridge   070701000000AC000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000005500000000cilium-proxy-20200109/go/envoy/config/filter/http/grpc_http1_reverse_bridge/v2alpha1  070701000000AD000081A4000003E800000064000000015E17A247000019DF000000000000000000000000000000000000006200000000cilium-proxy-20200109/go/envoy/config/filter/http/grpc_http1_reverse_bridge/v2alpha1/config.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/grpc_http1_reverse_bridge/v2alpha1/config.proto

package envoy_config_filter_http_grpc_http1_reverse_bridge_v2alpha1

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// gRPC reverse bridge filter configuration
type FilterConfig struct {
	// The content-type to pass to the upstream when the gRPC bridge filter is applied.
	// The filter will also validate that the upstream responds with the same content type.
	ContentType string `protobuf:"bytes,1,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"`
	// If true, Envoy will assume that the upstream doesn't understand gRPC frames and
	// strip the gRPC frame from the request, and add it back in to the response. This will
	// hide the gRPC semantics from the upstream, allowing it to receive and respond with a
	// simple binary encoded protobuf.
	WithholdGrpcFrames   bool     `protobuf:"varint,2,opt,name=withhold_grpc_frames,json=withholdGrpcFrames,proto3" json:"withhold_grpc_frames,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *FilterConfig) Reset()         { *m = FilterConfig{} }
func (m *FilterConfig) String() string { return proto.CompactTextString(m) }
func (*FilterConfig) ProtoMessage()    {}
func (*FilterConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_2a86db517160ad0a, []int{0}
}

func (m *FilterConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FilterConfig.Unmarshal(m, b)
}
func (m *FilterConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FilterConfig.Marshal(b, m, deterministic)
}
func (m *FilterConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FilterConfig.Merge(m, src)
}
func (m *FilterConfig) XXX_Size() int {
	return xxx_messageInfo_FilterConfig.Size(m)
}
func (m *FilterConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_FilterConfig.DiscardUnknown(m)
}

var xxx_messageInfo_FilterConfig proto.InternalMessageInfo

func (m *FilterConfig) GetContentType() string {
	if m != nil {
		return m.ContentType
	}
	return ""
}

func (m *FilterConfig) GetWithholdGrpcFrames() bool {
	if m != nil {
		return m.WithholdGrpcFrames
	}
	return false
}

// gRPC reverse bridge filter configuration per virtualhost/route/weighted-cluster level.
type FilterConfigPerRoute struct {
	// If true, disables gRPC reverse bridge filter for this particular vhost or route.
	// If disabled is specified in multiple per-filter-configs, the most specific one will be used.
	Disabled             bool     `protobuf:"varint,1,opt,name=disabled,proto3" json:"disabled,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *FilterConfigPerRoute) Reset()         { *m = FilterConfigPerRoute{} }
func (m *FilterConfigPerRoute) String() string { return proto.CompactTextString(m) }
func (*FilterConfigPerRoute) ProtoMessage()    {}
func (*FilterConfigPerRoute) Descriptor() ([]byte, []int) {
	return fileDescriptor_2a86db517160ad0a, []int{1}
}

func (m *FilterConfigPerRoute) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FilterConfigPerRoute.Unmarshal(m, b)
}
func (m *FilterConfigPerRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FilterConfigPerRoute.Marshal(b, m, deterministic)
}
func (m *FilterConfigPerRoute) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FilterConfigPerRoute.Merge(m, src)
}
func (m *FilterConfigPerRoute) XXX_Size() int {
	return xxx_messageInfo_FilterConfigPerRoute.Size(m)
}
func (m *FilterConfigPerRoute) XXX_DiscardUnknown() {
	xxx_messageInfo_FilterConfigPerRoute.DiscardUnknown(m)
}

var xxx_messageInfo_FilterConfigPerRoute proto.InternalMessageInfo

func (m *FilterConfigPerRoute) GetDisabled() bool {
	if m != nil {
		return m.Disabled
	}
	return false
}

func init() {
	proto.RegisterType((*FilterConfig)(nil), "envoy.config.filter.http.grpc_http1_reverse_bridge.v2alpha1.FilterConfig")
	proto.RegisterType((*FilterConfigPerRoute)(nil), "envoy.config.filter.http.grpc_http1_reverse_bridge.v2alpha1.FilterConfigPerRoute")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/grpc_http1_reverse_bridge/v2alpha1/config.proto", fileDescriptor_2a86db517160ad0a)
}

var fileDescriptor_2a86db517160ad0a = []byte{
	// 264 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x90, 0x31, 0x4f, 0xc3, 0x30,
	0x10, 0x85, 0x95, 0x0a, 0x41, 0x70, 0x3b, 0x45, 0x95, 0xa8, 0x3a, 0x45, 0x9d, 0x2a, 0x06, 0x9b,
	0x96, 0x91, 0x2d, 0x48, 0x05, 0xb6, 0x2a, 0x62, 0x62, 0x89, 0x9c, 0xf8, 0x92, 0x58, 0x32, 0xb1,
	0x75, 0x39, 0x02, 0xf9, 0xeb, 0x4c, 0x28, 0x6e, 0x82, 0x58, 0x98, 0xba, 0x9d, 0xfd, 0x74, 0xdf,
	0xbb, 0xf7, 0xd8, 0x33, 0x34, 0x9d, 0xed, 0x45, 0x61, 0x9b, 0x52, 0x57, 0xa2, 0xd4, 0x86, 0x00,
	0x45, 0x4d, 0xe4, 0x44, 0x85, 0xae, 0xc8, 0x86, 0x69, 0x97, 0x21, 0x74, 0x80, 0x2d, 0x64, 0x39,
	0x6a, 0x55, 0x81, 0xe8, 0xf6, 0xd2, 0xb8, 0x5a, 0xee, 0xc6, 0x2d, 0xee, 0xd0, 0x92, 0x8d, 0x1e,
	0x3c, 0x89, 0x8f, 0x7f, 0x27, 0x12, 0x1f, 0xf6, 0xf9, 0xbf, 0x24, 0x3e, 0x91, 0xd6, 0x37, 0x9d,
	0x34, 0x5a, 0x49, 0x02, 0x31, 0x0d, 0x27, 0xea, 0xc6, 0xb0, 0xc5, 0xc1, 0xa3, 0x1e, 0x3d, 0x37,
	0xba, 0x65, 0x8b, 0xc2, 0x36, 0x04, 0x0d, 0x65, 0xd4, 0x3b, 0x58, 0x05, 0x71, 0xb0, 0xbd, 0x4e,
	0xae, 0xbe, 0x93, 0x0b, 0x9c, 0xc5, 0x41, 0x3a, 0x1f, 0xc5, 0xd7, 0xde, 0x41, 0x74, 0xc7, 0x96,
	0x9f, 0x9a, 0xea, 0xda, 0x1a, 0x95, 0xf9, 0x1b, 0x4a, 0x94, 0xef, 0xd0, 0xae, 0x66, 0x71, 0xb0,
	0x0d, 0xd3, 0x68, 0xd2, 0x9e, 0xd0, 0x15, 0x07, 0xaf, 0x6c, 0xf6, 0x6c, 0xf9, 0xd7, 0xed, 0x08,
	0x98, 0xda, 0x0f, 0x82, 0x68, 0xcd, 0x42, 0xa5, 0x5b, 0x99, 0x1b, 0x50, 0xde, 0x31, 0x4c, 0x7f,
	0xdf, 0xc9, 0x1b, 0x7b, 0xd1, 0x96, 0xfb, 0xf0, 0x0e, 0xed, 0x57, 0xcf, 0xcf, 0xe8, 0x21, 0x99,
	0x8f, 0xc6, 0x43, 0xf6, 0x63, 0x90, 0x5f, 0xfa, 0x12, 0xee, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff,
	0xe0, 0x68, 0x57, 0xf0, 0xa6, 0x01, 0x00, 0x00,
}
 070701000000AE000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003D00000000cilium-proxy-20200109/go/envoy/config/filter/http/grpc_stats  070701000000AF000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004500000000cilium-proxy-20200109/go/envoy/config/filter/http/grpc_stats/v2alpha  070701000000B0000081A4000003E800000064000000015E17A24700000E41000000000000000000000000000000000000005200000000cilium-proxy-20200109/go/envoy/config/filter/http/grpc_stats/v2alpha/config.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/grpc_stats/v2alpha/config.proto

package envoy_config_filter_http_grpc_stats_v2alpha

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// gRPC statistics filter configuration
type FilterConfig struct {
	// If true, the filter maintains a filter state object with the request and response message
	// counts.
	EmitFilterState      bool     `protobuf:"varint,1,opt,name=emit_filter_state,json=emitFilterState,proto3" json:"emit_filter_state,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *FilterConfig) Reset()         { *m = FilterConfig{} }
func (m *FilterConfig) String() string { return proto.CompactTextString(m) }
func (*FilterConfig) ProtoMessage()    {}
func (*FilterConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_1419fab6b23f453d, []int{0}
}

func (m *FilterConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FilterConfig.Unmarshal(m, b)
}
func (m *FilterConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FilterConfig.Marshal(b, m, deterministic)
}
func (m *FilterConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FilterConfig.Merge(m, src)
}
func (m *FilterConfig) XXX_Size() int {
	return xxx_messageInfo_FilterConfig.Size(m)
}
func (m *FilterConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_FilterConfig.DiscardUnknown(m)
}

var xxx_messageInfo_FilterConfig proto.InternalMessageInfo

func (m *FilterConfig) GetEmitFilterState() bool {
	if m != nil {
		return m.EmitFilterState
	}
	return false
}

func init() {
	proto.RegisterType((*FilterConfig)(nil), "envoy.config.filter.http.grpc_stats.v2alpha.FilterConfig")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/grpc_stats/v2alpha/config.proto", fileDescriptor_1419fab6b23f453d)
}

var fileDescriptor_1419fab6b23f453d = []byte{
	// 181 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x48, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0xcb, 0xcc, 0x29, 0x49, 0x2d, 0xd2,
	0xcf, 0x28, 0x29, 0x29, 0xd0, 0x4f, 0x2f, 0x2a, 0x48, 0x8e, 0x2f, 0x2e, 0x49, 0x2c, 0x29, 0xd6,
	0x2f, 0x33, 0x4a, 0xcc, 0x29, 0xc8, 0x48, 0x84, 0xaa, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17,
	0xd2, 0x06, 0xeb, 0xd4, 0x83, 0x8a, 0x41, 0x74, 0xea, 0x81, 0x74, 0xea, 0x21, 0x74, 0xea, 0x41,
	0x75, 0x4a, 0x89, 0x97, 0x25, 0xe6, 0x64, 0xa6, 0x24, 0x96, 0xa4, 0xea, 0xc3, 0x18, 0x10, 0x53,
	0x94, 0xac, 0xb8, 0x78, 0xdc, 0xc0, 0x5a, 0x9d, 0xc1, 0xe6, 0x08, 0x69, 0x71, 0x09, 0xa6, 0xe6,
	0x66, 0x96, 0xc4, 0x43, 0xcc, 0x03, 0x9b, 0x92, 0x2a, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x11, 0xc4,
	0x0f, 0x92, 0x80, 0x28, 0x0e, 0x06, 0x09, 0x3b, 0x79, 0x71, 0x59, 0x66, 0xe6, 0xeb, 0x81, 0x9d,
	0x51, 0x50, 0x94, 0x5f, 0x51, 0xa9, 0x47, 0x82, 0x8b, 0x9c, 0xb8, 0x21, 0x16, 0x06, 0x80, 0x5c,
	0x11, 0xc0, 0x98, 0xc4, 0x06, 0x76, 0x8e, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x85, 0x7c, 0x71,
	0xe9, 0x10, 0x01, 0x00, 0x00,
}
   070701000000B1000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003700000000cilium-proxy-20200109/go/envoy/config/filter/http/gzip    070701000000B2000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003A00000000cilium-proxy-20200109/go/envoy/config/filter/http/gzip/v2 070701000000B3000081A4000003E800000064000000015E17A2470000324A000000000000000000000000000000000000004500000000cilium-proxy-20200109/go/envoy/config/filter/http/gzip/v2/gzip.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/gzip/v2/gzip.proto

package envoy_config_filter_http_gzip_v2

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type Gzip_CompressionStrategy int32

const (
	Gzip_DEFAULT  Gzip_CompressionStrategy = 0
	Gzip_FILTERED Gzip_CompressionStrategy = 1
	Gzip_HUFFMAN  Gzip_CompressionStrategy = 2
	Gzip_RLE      Gzip_CompressionStrategy = 3
)

var Gzip_CompressionStrategy_name = map[int32]string{
	0: "DEFAULT",
	1: "FILTERED",
	2: "HUFFMAN",
	3: "RLE",
}

var Gzip_CompressionStrategy_value = map[string]int32{
	"DEFAULT":  0,
	"FILTERED": 1,
	"HUFFMAN":  2,
	"RLE":      3,
}

func (x Gzip_CompressionStrategy) String() string {
	return proto.EnumName(Gzip_CompressionStrategy_name, int32(x))
}

func (Gzip_CompressionStrategy) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_e2b7bd5745a19167, []int{0, 0}
}

type Gzip_CompressionLevel_Enum int32

const (
	Gzip_CompressionLevel_DEFAULT Gzip_CompressionLevel_Enum = 0
	Gzip_CompressionLevel_BEST    Gzip_CompressionLevel_Enum = 1
	Gzip_CompressionLevel_SPEED   Gzip_CompressionLevel_Enum = 2
)

var Gzip_CompressionLevel_Enum_name = map[int32]string{
	0: "DEFAULT",
	1: "BEST",
	2: "SPEED",
}

var Gzip_CompressionLevel_Enum_value = map[string]int32{
	"DEFAULT": 0,
	"BEST":    1,
	"SPEED":   2,
}

func (x Gzip_CompressionLevel_Enum) String() string {
	return proto.EnumName(Gzip_CompressionLevel_Enum_name, int32(x))
}

func (Gzip_CompressionLevel_Enum) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_e2b7bd5745a19167, []int{0, 0, 0}
}

// [#next-free-field: 10]
type Gzip struct {
	// Value from 1 to 9 that controls the amount of internal memory used by zlib. Higher values
	// use more memory, but are faster and produce better compression results. The default value is 5.
	MemoryLevel *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=memory_level,json=memoryLevel,proto3" json:"memory_level,omitempty"`
	// Minimum response length, in bytes, which will trigger compression. The default value is 30.
	ContentLength *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=content_length,json=contentLength,proto3" json:"content_length,omitempty"`
	// A value used for selecting the zlib compression level. This setting will affect speed and
	// amount of compression applied to the content. "BEST" provides higher compression at the cost of
	// higher latency, "SPEED" provides lower compression with minimum impact on response time.
	// "DEFAULT" provides an optimal result between speed and compression. This field will be set to
	// "DEFAULT" if not specified.
	CompressionLevel Gzip_CompressionLevel_Enum `protobuf:"varint,3,opt,name=compression_level,json=compressionLevel,proto3,enum=envoy.config.filter.http.gzip.v2.Gzip_CompressionLevel_Enum" json:"compression_level,omitempty"`
	// A value used for selecting the zlib compression strategy which is directly related to the
	// characteristics of the content. Most of the time "DEFAULT" will be the best choice, though
	// there are situations which changing this parameter might produce better results. For example,
	// run-length encoding (RLE) is typically used when the content is known for having sequences
	// which same data occurs many consecutive times. For more information about each strategy, please
	// refer to zlib manual.
	CompressionStrategy Gzip_CompressionStrategy `protobuf:"varint,4,opt,name=compression_strategy,json=compressionStrategy,proto3,enum=envoy.config.filter.http.gzip.v2.Gzip_CompressionStrategy" json:"compression_strategy,omitempty"`
	// Set of strings that allows specifying which mime-types yield compression; e.g.,
	// application/json, text/html, etc. When this field is not defined, compression will be applied
	// to the following mime-types: "application/javascript", "application/json",
	// "application/xhtml+xml", "image/svg+xml", "text/css", "text/html", "text/plain", "text/xml".
	ContentType []string `protobuf:"bytes,6,rep,name=content_type,json=contentType,proto3" json:"content_type,omitempty"`
	// If true, disables compression when the response contains an etag header. When it is false, the
	// filter will preserve weak etags and remove the ones that require strong validation.
	DisableOnEtagHeader bool `protobuf:"varint,7,opt,name=disable_on_etag_header,json=disableOnEtagHeader,proto3" json:"disable_on_etag_header,omitempty"`
	// If true, removes accept-encoding from the request headers before dispatching it to the upstream
	// so that responses do not get compressed before reaching the filter.
	RemoveAcceptEncodingHeader bool `protobuf:"varint,8,opt,name=remove_accept_encoding_header,json=removeAcceptEncodingHeader,proto3" json:"remove_accept_encoding_header,omitempty"`
	// Value from 9 to 15 that represents the base two logarithmic of the compressor's window size.
	// Larger window results in better compression at the expense of memory usage. The default is 12
	// which will produce a 4096 bytes window. For more details about this parameter, please refer to
	// zlib manual > deflateInit2.
	WindowBits           *wrappers.UInt32Value `protobuf:"bytes,9,opt,name=window_bits,json=windowBits,proto3" json:"window_bits,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *Gzip) Reset()         { *m = Gzip{} }
func (m *Gzip) String() string { return proto.CompactTextString(m) }
func (*Gzip) ProtoMessage()    {}
func (*Gzip) Descriptor() ([]byte, []int) {
	return fileDescriptor_e2b7bd5745a19167, []int{0}
}

func (m *Gzip) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Gzip.Unmarshal(m, b)
}
func (m *Gzip) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Gzip.Marshal(b, m, deterministic)
}
func (m *Gzip) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Gzip.Merge(m, src)
}
func (m *Gzip) XXX_Size() int {
	return xxx_messageInfo_Gzip.Size(m)
}
func (m *Gzip) XXX_DiscardUnknown() {
	xxx_messageInfo_Gzip.DiscardUnknown(m)
}

var xxx_messageInfo_Gzip proto.InternalMessageInfo

func (m *Gzip) GetMemoryLevel() *wrappers.UInt32Value {
	if m != nil {
		return m.MemoryLevel
	}
	return nil
}

func (m *Gzip) GetContentLength() *wrappers.UInt32Value {
	if m != nil {
		return m.ContentLength
	}
	return nil
}

func (m *Gzip) GetCompressionLevel() Gzip_CompressionLevel_Enum {
	if m != nil {
		return m.CompressionLevel
	}
	return Gzip_CompressionLevel_DEFAULT
}

func (m *Gzip) GetCompressionStrategy() Gzip_CompressionStrategy {
	if m != nil {
		return m.CompressionStrategy
	}
	return Gzip_DEFAULT
}

func (m *Gzip) GetContentType() []string {
	if m != nil {
		return m.ContentType
	}
	return nil
}

func (m *Gzip) GetDisableOnEtagHeader() bool {
	if m != nil {
		return m.DisableOnEtagHeader
	}
	return false
}

func (m *Gzip) GetRemoveAcceptEncodingHeader() bool {
	if m != nil {
		return m.RemoveAcceptEncodingHeader
	}
	return false
}

func (m *Gzip) GetWindowBits() *wrappers.UInt32Value {
	if m != nil {
		return m.WindowBits
	}
	return nil
}

type Gzip_CompressionLevel struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Gzip_CompressionLevel) Reset()         { *m = Gzip_CompressionLevel{} }
func (m *Gzip_CompressionLevel) String() string { return proto.CompactTextString(m) }
func (*Gzip_CompressionLevel) ProtoMessage()    {}
func (*Gzip_CompressionLevel) Descriptor() ([]byte, []int) {
	return fileDescriptor_e2b7bd5745a19167, []int{0, 0}
}

func (m *Gzip_CompressionLevel) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Gzip_CompressionLevel.Unmarshal(m, b)
}
func (m *Gzip_CompressionLevel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Gzip_CompressionLevel.Marshal(b, m, deterministic)
}
func (m *Gzip_CompressionLevel) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Gzip_CompressionLevel.Merge(m, src)
}
func (m *Gzip_CompressionLevel) XXX_Size() int {
	return xxx_messageInfo_Gzip_CompressionLevel.Size(m)
}
func (m *Gzip_CompressionLevel) XXX_DiscardUnknown() {
	xxx_messageInfo_Gzip_CompressionLevel.DiscardUnknown(m)
}

var xxx_messageInfo_Gzip_CompressionLevel proto.InternalMessageInfo

func init() {
	proto.RegisterEnum("envoy.config.filter.http.gzip.v2.Gzip_CompressionStrategy", Gzip_CompressionStrategy_name, Gzip_CompressionStrategy_value)
	proto.RegisterEnum("envoy.config.filter.http.gzip.v2.Gzip_CompressionLevel_Enum", Gzip_CompressionLevel_Enum_name, Gzip_CompressionLevel_Enum_value)
	proto.RegisterType((*Gzip)(nil), "envoy.config.filter.http.gzip.v2.Gzip")
	proto.RegisterType((*Gzip_CompressionLevel)(nil), "envoy.config.filter.http.gzip.v2.Gzip.CompressionLevel")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/gzip/v2/gzip.proto", fileDescriptor_e2b7bd5745a19167)
}

var fileDescriptor_e2b7bd5745a19167 = []byte{
	// 538 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0x41, 0x8f, 0xd2, 0x4e,
	0x18, 0xc6, 0xff, 0x2d, 0x5d, 0xa0, 0xc3, 0xfe, 0xd7, 0x3a, 0x6b, 0xb4, 0x21, 0xba, 0x21, 0x9c,
	0x9a, 0xdd, 0x64, 0x9a, 0x94, 0x9b, 0x59, 0x0f, 0x54, 0x8a, 0xac, 0xa9, 0x4a, 0x0a, 0x78, 0x6d,
	0x4a, 0x19, 0xca, 0x24, 0x65, 0xa6, 0x69, 0x87, 0x62, 0xf7, 0xa8, 0xdf, 0xc0, 0x8f, 0xcb, 0xc9,
	0x74, 0x5a, 0x74, 0x5d, 0x4d, 0x76, 0x3d, 0x41, 0xf2, 0x3c, 0xbf, 0xe7, 0x9d, 0xf7, 0x7d, 0x0a,
	0xae, 0x30, 0xcd, 0x59, 0x61, 0x86, 0x8c, 0xae, 0x49, 0x64, 0xae, 0x49, 0xcc, 0x71, 0x6a, 0x6e,
	0x38, 0x4f, 0xcc, 0xe8, 0x96, 0x24, 0x66, 0x6e, 0x89, 0x5f, 0x94, 0xa4, 0x8c, 0x33, 0xd8, 0x13,
	0x66, 0x54, 0x99, 0x51, 0x65, 0x46, 0xa5, 0x19, 0x09, 0x53, 0x6e, 0x75, 0x2f, 0x22, 0xc6, 0xa2,
	0x18, 0x9b, 0xc2, 0xbf, 0xdc, 0xad, 0xcd, 0x7d, 0x1a, 0x24, 0x09, 0x4e, 0xb3, 0x2a, 0xa1, 0xfb,
	0x22, 0x0f, 0x62, 0xb2, 0x0a, 0x38, 0x36, 0x8f, 0x7f, 0x2a, 0xa1, 0xff, 0xad, 0x09, 0x94, 0x77,
	0xb7, 0x24, 0x81, 0xef, 0xc1, 0xe9, 0x16, 0x6f, 0x59, 0x5a, 0xf8, 0x31, 0xce, 0x71, 0xac, 0x4b,
	0x3d, 0xc9, 0xe8, 0x58, 0x2f, 0x51, 0x15, 0x8c, 0x8e, 0xc1, 0x68, 0x71, 0x43, 0xf9, 0xc0, 0xfa,
	0x1c, 0xc4, 0x3b, 0x6c, 0xab, 0x07, 0xbb, 0x79, 0xa9, 0xe8, 0xaa, 0x21, 0x79, 0x9d, 0x0a, 0x76,
	0x4b, 0x16, 0xba, 0xe0, 0x2c, 0x64, 0x94, 0x63, 0xca, 0xfd, 0x18, 0xd3, 0x88, 0x6f, 0x74, 0xf9,
	0x11, 0x69, 0xad, 0x83, 0xad, 0x5c, 0xca, 0xc6, 0x85, 0xf7, 0x7f, 0x0d, 0xbb, 0x82, 0x85, 0x19,
	0x78, 0x1a, 0xb2, 0x6d, 0x92, 0xe2, 0x2c, 0x23, 0x8c, 0xd6, 0xcf, 0x6b, 0xf4, 0x24, 0xe3, 0xcc,
	0xba, 0x46, 0x0f, 0x5d, 0x06, 0x95, 0xcb, 0xa1, 0xb7, 0xbf, 0x78, 0xf1, 0x42, 0xe4, 0xd0, 0xdd,
	0xd6, 0x6e, 0x1f, 0xec, 0x93, 0xaf, 0x92, 0xac, 0x49, 0x9e, 0x16, 0xde, 0x33, 0xc0, 0x3d, 0x78,
	0x76, 0x77, 0x68, 0xc6, 0xd3, 0x80, 0xe3, 0xa8, 0xd0, 0x15, 0x31, 0xf7, 0xf5, 0xbf, 0xcf, 0x9d,
	0xd5, 0x09, 0x77, 0xa6, 0x9e, 0x87, 0x7f, 0xca, 0xf0, 0x0a, 0x9c, 0x1e, 0x6f, 0xc7, 0x8b, 0x04,
	0xeb, 0xcd, 0x5e, 0xc3, 0x50, 0x05, 0xf4, 0x5d, 0x92, 0x35, 0xcb, 0xeb, 0xd4, 0xea, 0xbc, 0x48,
	0x30, 0x1c, 0x80, 0xe7, 0x2b, 0x92, 0x05, 0xcb, 0x18, 0xfb, 0x8c, 0xfa, 0x98, 0x07, 0x91, 0xbf,
	0xc1, 0xc1, 0x0a, 0xa7, 0x7a, 0xab, 0x27, 0x19, 0x6d, 0xef, 0xbc, 0x56, 0x3f, 0x51, 0x87, 0x07,
	0xd1, 0x44, 0x48, 0x70, 0x08, 0x5e, 0xa5, 0x78, 0xcb, 0x72, 0xec, 0x07, 0x61, 0x88, 0x13, 0xee,
	0x63, 0x1a, 0xb2, 0x15, 0xa1, 0x3f, 0xd9, 0xb6, 0x60, 0xbb, 0x95, 0x69, 0x28, 0x3c, 0x4e, 0x6d,
	0xa9, 0x23, 0x26, 0xa0, 0xb3, 0x27, 0x74, 0xc5, 0xf6, 0xfe, 0x92, 0xf0, 0x4c, 0x57, 0x1f, 0xff,
	0xad, 0x3c, 0x31, 0x54, 0x0f, 0x54, 0xac, 0x4d, 0x78, 0xd6, 0xbd, 0x06, 0xda, 0xfd, 0x72, 0xfa,
	0x06, 0x50, 0xca, 0x7e, 0x60, 0x07, 0xb4, 0x46, 0xce, 0x78, 0xb8, 0x70, 0xe7, 0xda, 0x7f, 0xb0,
	0x0d, 0x14, 0xdb, 0x99, 0xcd, 0x35, 0x09, 0xaa, 0xe0, 0x64, 0x36, 0x75, 0x9c, 0x91, 0x26, 0xf7,
	0xc7, 0xe0, 0xfc, 0x2f, 0x27, 0xfe, 0x1d, 0x3c, 0x05, 0xed, 0xf1, 0x8d, 0x3b, 0x77, 0x3c, 0x67,
	0xa4, 0x49, 0xa5, 0x34, 0x59, 0x8c, 0xc7, 0x1f, 0x86, 0x1f, 0x35, 0x19, 0xb6, 0x40, 0xc3, 0x73,
	0x1d, 0xad, 0x61, 0xbf, 0x01, 0x88, 0xb0, 0xaa, 0xd3, 0x24, 0x65, 0x5f, 0x8a, 0x07, 0xeb, 0xb5,
	0xd5, 0xb2, 0xdf, 0x69, 0xb9, 0xe8, 0x54, 0x5a, 0x36, 0xc5, 0xc6, 0x83, 0x1f, 0x01, 0x00, 0x00,
	0xff, 0xff, 0x42, 0x60, 0xa4, 0x00, 0xd5, 0x03, 0x00, 0x00,
}
  070701000000B4000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004500000000cilium-proxy-20200109/go/envoy/config/filter/http/header_to_metadata  070701000000B5000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004800000000cilium-proxy-20200109/go/envoy/config/filter/http/header_to_metadata/v2   070701000000B6000081A4000003E800000064000000015E17A2470000338A000000000000000000000000000000000000006100000000cilium-proxy-20200109/go/envoy/config/filter/http/header_to_metadata/v2/header_to_metadata.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/header_to_metadata/v2/header_to_metadata.proto

package envoy_config_filter_http_header_to_metadata_v2

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type Config_ValueType int32

const (
	Config_STRING Config_ValueType = 0
	Config_NUMBER Config_ValueType = 1
	// The value is a serialized `protobuf.Value
	// <https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/struct.proto#L62>`_.
	Config_PROTOBUF_VALUE Config_ValueType = 2
)

var Config_ValueType_name = map[int32]string{
	0: "STRING",
	1: "NUMBER",
	2: "PROTOBUF_VALUE",
}

var Config_ValueType_value = map[string]int32{
	"STRING":         0,
	"NUMBER":         1,
	"PROTOBUF_VALUE": 2,
}

func (x Config_ValueType) String() string {
	return proto.EnumName(Config_ValueType_name, int32(x))
}

func (Config_ValueType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_5891b90c2f7c1ebe, []int{0, 0}
}

// ValueEncode defines the encoding algorithm.
type Config_ValueEncode int32

const (
	// The value is not encoded.
	Config_NONE Config_ValueEncode = 0
	// The value is encoded in `Base64 <https://tools.ietf.org/html/rfc4648#section-4>`_.
	// Note: this is mostly used for STRING and PROTOBUF_VALUE to escape the
	// non-ASCII characters in the header.
	Config_BASE64 Config_ValueEncode = 1
)

var Config_ValueEncode_name = map[int32]string{
	0: "NONE",
	1: "BASE64",
}

var Config_ValueEncode_value = map[string]int32{
	"NONE":   0,
	"BASE64": 1,
}

func (x Config_ValueEncode) String() string {
	return proto.EnumName(Config_ValueEncode_name, int32(x))
}

func (Config_ValueEncode) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_5891b90c2f7c1ebe, []int{0, 1}
}

type Config struct {
	// The list of rules to apply to requests.
	RequestRules []*Config_Rule `protobuf:"bytes,1,rep,name=request_rules,json=requestRules,proto3" json:"request_rules,omitempty"`
	// The list of rules to apply to responses.
	ResponseRules        []*Config_Rule `protobuf:"bytes,2,rep,name=response_rules,json=responseRules,proto3" json:"response_rules,omitempty"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

func (m *Config) Reset()         { *m = Config{} }
func (m *Config) String() string { return proto.CompactTextString(m) }
func (*Config) ProtoMessage()    {}
func (*Config) Descriptor() ([]byte, []int) {
	return fileDescriptor_5891b90c2f7c1ebe, []int{0}
}

func (m *Config) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Config.Unmarshal(m, b)
}
func (m *Config) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Config.Marshal(b, m, deterministic)
}
func (m *Config) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Config.Merge(m, src)
}
func (m *Config) XXX_Size() int {
	return xxx_messageInfo_Config.Size(m)
}
func (m *Config) XXX_DiscardUnknown() {
	xxx_messageInfo_Config.DiscardUnknown(m)
}

var xxx_messageInfo_Config proto.InternalMessageInfo

func (m *Config) GetRequestRules() []*Config_Rule {
	if m != nil {
		return m.RequestRules
	}
	return nil
}

func (m *Config) GetResponseRules() []*Config_Rule {
	if m != nil {
		return m.ResponseRules
	}
	return nil
}

// [#next-free-field: 6]
type Config_KeyValuePair struct {
	// The namespace — if this is empty, the filter's namespace will be used.
	MetadataNamespace string `protobuf:"bytes,1,opt,name=metadata_namespace,json=metadataNamespace,proto3" json:"metadata_namespace,omitempty"`
	// The key to use within the namespace.
	Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
	// The value to pair with the given key.
	//
	// When used for a `on_header_present` case, if value is non-empty it'll be used
	// instead of the header value. If both are empty, no metadata is added.
	//
	// When used for a `on_header_missing` case, a non-empty value must be provided
	// otherwise no metadata is added.
	Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"`
	// The value's type — defaults to string.
	Type Config_ValueType `protobuf:"varint,4,opt,name=type,proto3,enum=envoy.config.filter.http.header_to_metadata.v2.Config_ValueType" json:"type,omitempty"`
	// How is the value encoded, default is NONE (not encoded).
	// The value will be decoded accordingly before storing to metadata.
	Encode               Config_ValueEncode `protobuf:"varint,5,opt,name=encode,proto3,enum=envoy.config.filter.http.header_to_metadata.v2.Config_ValueEncode" json:"encode,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *Config_KeyValuePair) Reset()         { *m = Config_KeyValuePair{} }
func (m *Config_KeyValuePair) String() string { return proto.CompactTextString(m) }
func (*Config_KeyValuePair) ProtoMessage()    {}
func (*Config_KeyValuePair) Descriptor() ([]byte, []int) {
	return fileDescriptor_5891b90c2f7c1ebe, []int{0, 0}
}

func (m *Config_KeyValuePair) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Config_KeyValuePair.Unmarshal(m, b)
}
func (m *Config_KeyValuePair) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Config_KeyValuePair.Marshal(b, m, deterministic)
}
func (m *Config_KeyValuePair) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Config_KeyValuePair.Merge(m, src)
}
func (m *Config_KeyValuePair) XXX_Size() int {
	return xxx_messageInfo_Config_KeyValuePair.Size(m)
}
func (m *Config_KeyValuePair) XXX_DiscardUnknown() {
	xxx_messageInfo_Config_KeyValuePair.DiscardUnknown(m)
}

var xxx_messageInfo_Config_KeyValuePair proto.InternalMessageInfo

func (m *Config_KeyValuePair) GetMetadataNamespace() string {
	if m != nil {
		return m.MetadataNamespace
	}
	return ""
}

func (m *Config_KeyValuePair) GetKey() string {
	if m != nil {
		return m.Key
	}
	return ""
}

func (m *Config_KeyValuePair) GetValue() string {
	if m != nil {
		return m.Value
	}
	return ""
}

func (m *Config_KeyValuePair) GetType() Config_ValueType {
	if m != nil {
		return m.Type
	}
	return Config_STRING
}

func (m *Config_KeyValuePair) GetEncode() Config_ValueEncode {
	if m != nil {
		return m.Encode
	}
	return Config_NONE
}

// A Rule defines what metadata to apply when a header is present or missing.
type Config_Rule struct {
	// The header that triggers this rule — required.
	Header string `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
	// If the header is present, apply this metadata KeyValuePair.
	//
	// If the value in the KeyValuePair is non-empty, it'll be used instead
	// of the header value.
	OnHeaderPresent *Config_KeyValuePair `protobuf:"bytes,2,opt,name=on_header_present,json=onHeaderPresent,proto3" json:"on_header_present,omitempty"`
	// If the header is not present, apply this metadata KeyValuePair.
	//
	// The value in the KeyValuePair must be set, since it'll be used in lieu
	// of the missing header value.
	OnHeaderMissing *Config_KeyValuePair `protobuf:"bytes,3,opt,name=on_header_missing,json=onHeaderMissing,proto3" json:"on_header_missing,omitempty"`
	// Whether or not to remove the header after a rule is applied.
	//
	// This prevents headers from leaking.
	Remove               bool     `protobuf:"varint,4,opt,name=remove,proto3" json:"remove,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Config_Rule) Reset()         { *m = Config_Rule{} }
func (m *Config_Rule) String() string { return proto.CompactTextString(m) }
func (*Config_Rule) ProtoMessage()    {}
func (*Config_Rule) Descriptor() ([]byte, []int) {
	return fileDescriptor_5891b90c2f7c1ebe, []int{0, 1}
}

func (m *Config_Rule) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Config_Rule.Unmarshal(m, b)
}
func (m *Config_Rule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Config_Rule.Marshal(b, m, deterministic)
}
func (m *Config_Rule) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Config_Rule.Merge(m, src)
}
func (m *Config_Rule) XXX_Size() int {
	return xxx_messageInfo_Config_Rule.Size(m)
}
func (m *Config_Rule) XXX_DiscardUnknown() {
	xxx_messageInfo_Config_Rule.DiscardUnknown(m)
}

var xxx_messageInfo_Config_Rule proto.InternalMessageInfo

func (m *Config_Rule) GetHeader() string {
	if m != nil {
		return m.Header
	}
	return ""
}

func (m *Config_Rule) GetOnHeaderPresent() *Config_KeyValuePair {
	if m != nil {
		return m.OnHeaderPresent
	}
	return nil
}

func (m *Config_Rule) GetOnHeaderMissing() *Config_KeyValuePair {
	if m != nil {
		return m.OnHeaderMissing
	}
	return nil
}

func (m *Config_Rule) GetRemove() bool {
	if m != nil {
		return m.Remove
	}
	return false
}

func init() {
	proto.RegisterEnum("envoy.config.filter.http.header_to_metadata.v2.Config_ValueType", Config_ValueType_name, Config_ValueType_value)
	proto.RegisterEnum("envoy.config.filter.http.header_to_metadata.v2.Config_ValueEncode", Config_ValueEncode_name, Config_ValueEncode_value)
	proto.RegisterType((*Config)(nil), "envoy.config.filter.http.header_to_metadata.v2.Config")
	proto.RegisterType((*Config_KeyValuePair)(nil), "envoy.config.filter.http.header_to_metadata.v2.Config.KeyValuePair")
	proto.RegisterType((*Config_Rule)(nil), "envoy.config.filter.http.header_to_metadata.v2.Config.Rule")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/header_to_metadata/v2/header_to_metadata.proto", fileDescriptor_5891b90c2f7c1ebe)
}

var fileDescriptor_5891b90c2f7c1ebe = []byte{
	// 486 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0xcf, 0x6e, 0xd3, 0x40,
	0x10, 0xc6, 0xb1, 0x9b, 0x9a, 0x76, 0xd2, 0x86, 0x74, 0xc5, 0x1f, 0x93, 0x0b, 0x51, 0xb8, 0xe4,
	0x82, 0x2d, 0x05, 0x04, 0x07, 0x38, 0x50, 0x57, 0xa6, 0x20, 0x88, 0x63, 0x6d, 0x9d, 0x22, 0x71,
	0x31, 0xdb, 0x64, 0xda, 0x5a, 0x38, 0x5e, 0xb3, 0xde, 0x58, 0xf8, 0x6d, 0xe0, 0x19, 0xb9, 0x71,
	0x42, 0xde, 0xb5, 0xa1, 0x48, 0xbd, 0xb4, 0xe5, 0xb6, 0x33, 0xb3, 0xf3, 0xfb, 0x76, 0xbe, 0xd1,
	0xc2, 0x21, 0x66, 0x25, 0xaf, 0xdc, 0x05, 0xcf, 0x4e, 0x93, 0x33, 0xf7, 0x34, 0x49, 0x25, 0x0a,
	0xf7, 0x5c, 0xca, 0xdc, 0x3d, 0x47, 0xb6, 0x44, 0x11, 0x4b, 0x1e, 0xaf, 0x50, 0xb2, 0x25, 0x93,
	0xcc, 0x2d, 0x27, 0x97, 0x64, 0x9d, 0x5c, 0x70, 0xc9, 0x89, 0xa3, 0x40, 0x8e, 0x06, 0x39, 0x1a,
	0xe4, 0xd4, 0x20, 0xe7, 0x92, 0x96, 0x72, 0x32, 0x78, 0x50, 0xb2, 0x34, 0x59, 0x32, 0x89, 0x6e,
	0x7b, 0xd0, 0xa0, 0xd1, 0x4f, 0x0b, 0xac, 0x03, 0x45, 0x21, 0x9f, 0x61, 0x57, 0xe0, 0xd7, 0x35,
	0x16, 0x32, 0x16, 0xeb, 0x14, 0x0b, 0xdb, 0x18, 0x6e, 0x8c, 0xbb, 0x93, 0x97, 0x57, 0xd4, 0x72,
	0x34, 0xce, 0xa1, 0xeb, 0x14, 0xe9, 0x4e, 0x43, 0xac, 0x83, 0x82, 0x9c, 0x40, 0x4f, 0x60, 0x91,
	0xf3, 0xac, 0xc0, 0x46, 0xc2, 0xbc, 0xb9, 0xc4, 0x6e, 0x8b, 0x54, 0x1a, 0x83, 0xef, 0x26, 0xec,
	0xbc, 0xc7, 0xea, 0x98, 0xa5, 0x6b, 0x0c, 0x59, 0x22, 0xc8, 0x13, 0x20, 0x6d, 0x6b, 0x9c, 0xb1,
	0x15, 0x16, 0x39, 0x5b, 0xa0, 0x6d, 0x0c, 0x8d, 0xf1, 0x36, 0xdd, 0x6b, 0x2b, 0x41, 0x5b, 0x20,
	0x0f, 0x61, 0xe3, 0x0b, 0x56, 0xb6, 0x59, 0xd7, 0xbd, 0xdb, 0xbf, 0xbc, 0x8e, 0x30, 0x87, 0x06,
	0xad, 0x73, 0xe4, 0x2e, 0x6c, 0x96, 0x35, 0xd6, 0xde, 0x50, 0xcd, 0x3a, 0x20, 0x11, 0x74, 0x64,
	0x95, 0xa3, 0xdd, 0x19, 0x1a, 0xe3, 0xde, 0xe4, 0xf5, 0x35, 0x47, 0x51, 0xef, 0x8d, 0xaa, 0x1c,
	0xa9, 0xa2, 0x91, 0x4f, 0x60, 0x61, 0xb6, 0xe0, 0x4b, 0xb4, 0x37, 0x15, 0xd7, 0xbb, 0x09, 0xd7,
	0x57, 0x24, 0xda, 0x10, 0x07, 0x3f, 0x4c, 0xe8, 0xd4, 0x66, 0x91, 0x47, 0x60, 0xe9, 0x66, 0x6d,
	0xc7, 0xdf, 0x71, 0x9b, 0x34, 0xe1, 0xb0, 0xc7, 0xb3, 0xb8, 0x11, 0xc8, 0x05, 0x16, 0x98, 0x49,
	0x65, 0x4d, 0x77, 0x72, 0x70, 0xcd, 0x07, 0x5d, 0xdc, 0x0d, 0xbd, 0xc3, 0xb3, 0xb7, 0xea, 0x72,
	0xa8, 0xd9, 0xff, 0x0a, 0xae, 0x92, 0xa2, 0x48, 0xb2, 0x33, 0x65, 0xf7, 0xff, 0x16, 0x9c, 0x6a,
	0x36, 0xb9, 0x0f, 0x96, 0xc0, 0x15, 0x2f, 0xf5, 0xfe, 0xb6, 0x68, 0x13, 0x8d, 0x5e, 0xc0, 0xf6,
	0x9f, 0x95, 0x10, 0x00, 0xeb, 0x28, 0xa2, 0xef, 0x82, 0xc3, 0xfe, 0xad, 0xfa, 0x1c, 0xcc, 0xa7,
	0x9e, 0x4f, 0xfb, 0x06, 0x21, 0xd0, 0x0b, 0xe9, 0x2c, 0x9a, 0x79, 0xf3, 0x37, 0xf1, 0xf1, 0xfe,
	0x87, 0xb9, 0xdf, 0x37, 0x47, 0x8f, 0xa1, 0x7b, 0xc1, 0x73, 0xb2, 0x05, 0x9d, 0x60, 0x16, 0xf8,
	0xba, 0xd1, 0xdb, 0x3f, 0xf2, 0x9f, 0x3f, 0xeb, 0x1b, 0xde, 0x47, 0x78, 0x95, 0x70, 0x3d, 0x4f,
	0x2e, 0xf8, 0xb7, 0xea, 0x8a, 0xa3, 0x79, 0xf7, 0xf4, 0x10, 0x11, 0x9f, 0x36, 0xc9, 0xb0, 0xfe,
	0xcc, 0xa1, 0x71, 0x62, 0xa9, 0x5f, 0xfd, 0xf4, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd9, 0x72,
	0x8e, 0x2f, 0x69, 0x04, 0x00, 0x00,
}
  070701000000B7000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003F00000000cilium-proxy-20200109/go/envoy/config/filter/http/health_check    070701000000B8000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004200000000cilium-proxy-20200109/go/envoy/config/filter/http/health_check/v2 070701000000B9000081A4000003E800000064000000015E17A24700001BAB000000000000000000000000000000000000005500000000cilium-proxy-20200109/go/envoy/config/filter/http/health_check/v2/health_check.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/health_check/v2/health_check.proto

package envoy_config_filter_http_health_check_v2

import (
	fmt "fmt"
	route "github.com/cilium/proxy/go/envoy/api/v2/route"
	_type "github.com/cilium/proxy/go/envoy/type"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#next-free-field: 6]
type HealthCheck struct {
	// Specifies whether the filter operates in pass through mode or not.
	PassThroughMode *wrappers.BoolValue `protobuf:"bytes,1,opt,name=pass_through_mode,json=passThroughMode,proto3" json:"pass_through_mode,omitempty"`
	// If operating in pass through mode, the amount of time in milliseconds
	// that the filter should cache the upstream response.
	CacheTime *duration.Duration `protobuf:"bytes,3,opt,name=cache_time,json=cacheTime,proto3" json:"cache_time,omitempty"`
	// If operating in non-pass-through mode, specifies a set of upstream cluster
	// names and the minimum percentage of servers in each of those clusters that
	// must be healthy or degraded in order for the filter to return a 200.
	ClusterMinHealthyPercentages map[string]*_type.Percent `protobuf:"bytes,4,rep,name=cluster_min_healthy_percentages,json=clusterMinHealthyPercentages,proto3" json:"cluster_min_healthy_percentages,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Specifies a set of health check request headers to match on. The health check filter will
	// check a request’s headers against all the specified headers. To specify the health check
	// endpoint, set the ``:path`` header to match on.
	Headers              []*route.HeaderMatcher `protobuf:"bytes,5,rep,name=headers,proto3" json:"headers,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *HealthCheck) Reset()         { *m = HealthCheck{} }
func (m *HealthCheck) String() string { return proto.CompactTextString(m) }
func (*HealthCheck) ProtoMessage()    {}
func (*HealthCheck) Descriptor() ([]byte, []int) {
	return fileDescriptor_75439d7b4d98e201, []int{0}
}

func (m *HealthCheck) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HealthCheck.Unmarshal(m, b)
}
func (m *HealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HealthCheck.Marshal(b, m, deterministic)
}
func (m *HealthCheck) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HealthCheck.Merge(m, src)
}
func (m *HealthCheck) XXX_Size() int {
	return xxx_messageInfo_HealthCheck.Size(m)
}
func (m *HealthCheck) XXX_DiscardUnknown() {
	xxx_messageInfo_HealthCheck.DiscardUnknown(m)
}

var xxx_messageInfo_HealthCheck proto.InternalMessageInfo

func (m *HealthCheck) GetPassThroughMode() *wrappers.BoolValue {
	if m != nil {
		return m.PassThroughMode
	}
	return nil
}

func (m *HealthCheck) GetCacheTime() *duration.Duration {
	if m != nil {
		return m.CacheTime
	}
	return nil
}

func (m *HealthCheck) GetClusterMinHealthyPercentages() map[string]*_type.Percent {
	if m != nil {
		return m.ClusterMinHealthyPercentages
	}
	return nil
}

func (m *HealthCheck) GetHeaders() []*route.HeaderMatcher {
	if m != nil {
		return m.Headers
	}
	return nil
}

func init() {
	proto.RegisterType((*HealthCheck)(nil), "envoy.config.filter.http.health_check.v2.HealthCheck")
	proto.RegisterMapType((map[string]*_type.Percent)(nil), "envoy.config.filter.http.health_check.v2.HealthCheck.ClusterMinHealthyPercentagesEntry")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/health_check/v2/health_check.proto", fileDescriptor_75439d7b4d98e201)
}

var fileDescriptor_75439d7b4d98e201 = []byte{
	// 440 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0x4d, 0x6e, 0xd4, 0x30,
	0x14, 0x56, 0x26, 0x1d, 0x68, 0x3d, 0x0b, 0x86, 0xb0, 0x20, 0x44, 0xa8, 0xb4, 0xac, 0x86, 0x8d,
	0x2d, 0x05, 0x09, 0x55, 0x74, 0x97, 0x82, 0x54, 0x21, 0x46, 0x8a, 0xa2, 0x0a, 0x96, 0x91, 0xeb,
	0xbc, 0x89, 0xad, 0x26, 0xb1, 0xe5, 0x38, 0x81, 0x5c, 0x81, 0x43, 0x70, 0x39, 0x6e, 0xc1, 0x0a,
	0xd9, 0xce, 0x88, 0x56, 0x08, 0xe8, 0x66, 0x64, 0xcf, 0xfb, 0x7e, 0x9e, 0xbf, 0x2f, 0xe8, 0x1c,
	0xba, 0x51, 0x4e, 0x84, 0xc9, 0x6e, 0x27, 0x6a, 0xb2, 0x13, 0x8d, 0x01, 0x4d, 0xb8, 0x31, 0x8a,
	0x70, 0xa0, 0x8d, 0xe1, 0x25, 0xe3, 0xc0, 0x6e, 0xc8, 0x98, 0xde, 0xb9, 0x63, 0xa5, 0xa5, 0x91,
	0xd1, 0xc6, 0x91, 0xb1, 0x27, 0x63, 0x4f, 0xc6, 0x96, 0x8c, 0xef, 0x80, 0xc7, 0x34, 0x39, 0xf6,
	0x36, 0x54, 0x09, 0x2b, 0xa5, 0xe5, 0x60, 0xc0, 0xff, 0x7a, 0xa5, 0x24, 0xf6, 0x73, 0x33, 0x29,
	0x20, 0x0a, 0x34, 0x83, 0xce, 0xcc, 0x93, 0xe3, 0x5a, 0xca, 0xba, 0x01, 0xe2, 0x6e, 0xd7, 0xc3,
	0x8e, 0x54, 0x83, 0xa6, 0x46, 0xc8, 0xee, 0x6f, 0xf3, 0x2f, 0x9a, 0x2a, 0x05, 0xba, 0x9f, 0xe7,
	0x4f, 0x47, 0xda, 0x88, 0x8a, 0x1a, 0x20, 0xfb, 0x83, 0x1f, 0xbc, 0xfc, 0x11, 0xa2, 0xd5, 0xa5,
	0x5b, 0xf3, 0xc2, 0x6e, 0x19, 0xe5, 0xe8, 0xb1, 0xa2, 0x7d, 0x5f, 0x1a, 0xae, 0xe5, 0x50, 0xf3,
	0xb2, 0x95, 0x15, 0xc4, 0xc1, 0x49, 0xb0, 0x59, 0xa5, 0x09, 0xf6, 0x26, 0x78, 0x6f, 0x82, 0x33,
	0x29, 0x9b, 0x4f, 0xb4, 0x19, 0x20, 0x3b, 0xfc, 0x99, 0x2d, 0xbf, 0x05, 0x8b, 0x75, 0x50, 0x3c,
	0xb2, 0xf4, 0x2b, 0xcf, 0xde, 0xca, 0x0a, 0xa2, 0x33, 0x84, 0x18, 0x65, 0x1c, 0x4a, 0x23, 0x5a,
	0x88, 0x43, 0x27, 0xf5, 0xec, 0x0f, 0xa9, 0x77, 0xf3, 0x7b, 0x8a, 0x23, 0x07, 0xbe, 0x12, 0x2d,
	0x44, 0xdf, 0x03, 0xf4, 0x82, 0x35, 0x43, 0x6f, 0x40, 0x97, 0xad, 0xe8, 0x4a, 0x1f, 0xe7, 0x54,
	0xce, 0xd1, 0xd0, 0x1a, 0xfa, 0xf8, 0xe0, 0x24, 0xdc, 0xac, 0xd2, 0xcf, 0xf8, 0xbe, 0x1d, 0xe0,
	0x5b, 0x8f, 0xc5, 0x17, 0x5e, 0x7c, 0x2b, 0x3a, 0xff, 0xef, 0x94, 0xff, 0x56, 0x7e, 0xdf, 0x19,
	0x3d, 0x15, 0xcf, 0xd9, 0x3f, 0x20, 0xd1, 0x39, 0x7a, 0xc8, 0x81, 0x56, 0xa0, 0xfb, 0x78, 0xe9,
	0xf6, 0x38, 0x9d, 0xf7, 0xa0, 0x4a, 0x58, 0x2f, 0xdf, 0xed, 0xa5, 0x83, 0x6c, 0xa9, 0x61, 0x1c,
	0x74, 0xb1, 0x67, 0x24, 0x15, 0x3a, 0xfd, 0xaf, 0x7f, 0xb4, 0x46, 0xe1, 0x0d, 0x4c, 0xae, 0x80,
	0xa3, 0xc2, 0x1e, 0xa3, 0x57, 0x68, 0x39, 0xda, 0xc8, 0xe3, 0x85, 0x4b, 0xf2, 0xc9, 0xec, 0x68,
	0xbf, 0x19, 0x3c, 0xd3, 0x0b, 0x8f, 0x78, 0xbb, 0x38, 0x0b, 0x3e, 0x1c, 0x1c, 0x2e, 0xd6, 0x61,
	0xf6, 0x11, 0xbd, 0x11, 0xd2, 0x23, 0x95, 0x96, 0x5f, 0xa7, 0x7b, 0xc7, 0x95, 0xad, 0x6f, 0xe5,
	0x95, 0xdb, 0xb2, 0xf2, 0xe0, 0xfa, 0x81, 0x6b, 0xed, 0xf5, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff,
	0x44, 0x51, 0xe1, 0xde, 0x36, 0x03, 0x00, 0x00,
}
 070701000000BA000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003D00000000cilium-proxy-20200109/go/envoy/config/filter/http/ip_tagging  070701000000BB000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004000000000cilium-proxy-20200109/go/envoy/config/filter/http/ip_tagging/v2   070701000000BC000081A4000003E800000064000000015E17A24700002075000000000000000000000000000000000000005100000000cilium-proxy-20200109/go/envoy/config/filter/http/ip_tagging/v2/ip_tagging.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/ip_tagging/v2/ip_tagging.proto

package envoy_config_filter_http_ip_tagging_v2

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// The type of requests the filter should apply to. The supported types
// are internal, external or both. The
// :ref:`x-forwarded-for<config_http_conn_man_headers_x-forwarded-for_internal_origin>` header is
// used to determine if a request is internal and will result in
// :ref:`x-envoy-internal<config_http_conn_man_headers_x-envoy-internal>`
// being set. The filter defaults to both, and it will apply to all request types.
type IPTagging_RequestType int32

const (
	// Both external and internal requests will be tagged. This is the default value.
	IPTagging_BOTH IPTagging_RequestType = 0
	// Only internal requests will be tagged.
	IPTagging_INTERNAL IPTagging_RequestType = 1
	// Only external requests will be tagged.
	IPTagging_EXTERNAL IPTagging_RequestType = 2
)

var IPTagging_RequestType_name = map[int32]string{
	0: "BOTH",
	1: "INTERNAL",
	2: "EXTERNAL",
}

var IPTagging_RequestType_value = map[string]int32{
	"BOTH":     0,
	"INTERNAL": 1,
	"EXTERNAL": 2,
}

func (x IPTagging_RequestType) String() string {
	return proto.EnumName(IPTagging_RequestType_name, int32(x))
}

func (IPTagging_RequestType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_f4275d0b367744d2, []int{0, 0}
}

type IPTagging struct {
	// The type of request the filter should apply to.
	RequestType IPTagging_RequestType `protobuf:"varint,1,opt,name=request_type,json=requestType,proto3,enum=envoy.config.filter.http.ip_tagging.v2.IPTagging_RequestType" json:"request_type,omitempty"`
	// [#comment:TODO(ccaraman): Extend functionality to load IP tags from file system.
	// Tracked by issue https://github.com/envoyproxy/envoy/issues/2695]
	// The set of IP tags for the filter.
	IpTags               []*IPTagging_IPTag `protobuf:"bytes,4,rep,name=ip_tags,json=ipTags,proto3" json:"ip_tags,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *IPTagging) Reset()         { *m = IPTagging{} }
func (m *IPTagging) String() string { return proto.CompactTextString(m) }
func (*IPTagging) ProtoMessage()    {}
func (*IPTagging) Descriptor() ([]byte, []int) {
	return fileDescriptor_f4275d0b367744d2, []int{0}
}

func (m *IPTagging) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_IPTagging.Unmarshal(m, b)
}
func (m *IPTagging) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_IPTagging.Marshal(b, m, deterministic)
}
func (m *IPTagging) XXX_Merge(src proto.Message) {
	xxx_messageInfo_IPTagging.Merge(m, src)
}
func (m *IPTagging) XXX_Size() int {
	return xxx_messageInfo_IPTagging.Size(m)
}
func (m *IPTagging) XXX_DiscardUnknown() {
	xxx_messageInfo_IPTagging.DiscardUnknown(m)
}

var xxx_messageInfo_IPTagging proto.InternalMessageInfo

func (m *IPTagging) GetRequestType() IPTagging_RequestType {
	if m != nil {
		return m.RequestType
	}
	return IPTagging_BOTH
}

func (m *IPTagging) GetIpTags() []*IPTagging_IPTag {
	if m != nil {
		return m.IpTags
	}
	return nil
}

// Supplies the IP tag name and the IP address subnets.
type IPTagging_IPTag struct {
	// Specifies the IP tag name to apply.
	IpTagName string `protobuf:"bytes,1,opt,name=ip_tag_name,json=ipTagName,proto3" json:"ip_tag_name,omitempty"`
	// A list of IP address subnets that will be tagged with
	// ip_tag_name. Both IPv4 and IPv6 are supported.
	IpList               []*core.CidrRange `protobuf:"bytes,2,rep,name=ip_list,json=ipList,proto3" json:"ip_list,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *IPTagging_IPTag) Reset()         { *m = IPTagging_IPTag{} }
func (m *IPTagging_IPTag) String() string { return proto.CompactTextString(m) }
func (*IPTagging_IPTag) ProtoMessage()    {}
func (*IPTagging_IPTag) Descriptor() ([]byte, []int) {
	return fileDescriptor_f4275d0b367744d2, []int{0, 0}
}

func (m *IPTagging_IPTag) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_IPTagging_IPTag.Unmarshal(m, b)
}
func (m *IPTagging_IPTag) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_IPTagging_IPTag.Marshal(b, m, deterministic)
}
func (m *IPTagging_IPTag) XXX_Merge(src proto.Message) {
	xxx_messageInfo_IPTagging_IPTag.Merge(m, src)
}
func (m *IPTagging_IPTag) XXX_Size() int {
	return xxx_messageInfo_IPTagging_IPTag.Size(m)
}
func (m *IPTagging_IPTag) XXX_DiscardUnknown() {
	xxx_messageInfo_IPTagging_IPTag.DiscardUnknown(m)
}

var xxx_messageInfo_IPTagging_IPTag proto.InternalMessageInfo

func (m *IPTagging_IPTag) GetIpTagName() string {
	if m != nil {
		return m.IpTagName
	}
	return ""
}

func (m *IPTagging_IPTag) GetIpList() []*core.CidrRange {
	if m != nil {
		return m.IpList
	}
	return nil
}

func init() {
	proto.RegisterEnum("envoy.config.filter.http.ip_tagging.v2.IPTagging_RequestType", IPTagging_RequestType_name, IPTagging_RequestType_value)
	proto.RegisterType((*IPTagging)(nil), "envoy.config.filter.http.ip_tagging.v2.IPTagging")
	proto.RegisterType((*IPTagging_IPTag)(nil), "envoy.config.filter.http.ip_tagging.v2.IPTagging.IPTag")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/ip_tagging/v2/ip_tagging.proto", fileDescriptor_f4275d0b367744d2)
}

var fileDescriptor_f4275d0b367744d2 = []byte{
	// 348 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x51, 0x4f, 0x4f, 0xc2, 0x30,
	0x14, 0xb7, 0x13, 0x70, 0x74, 0x84, 0x90, 0x5d, 0x24, 0xc4, 0x28, 0xe1, 0x60, 0x38, 0x75, 0xc9,
	0xd0, 0x70, 0xf2, 0xe0, 0x0c, 0x09, 0x24, 0x04, 0xc9, 0xb2, 0x83, 0xf1, 0x20, 0xa9, 0xac, 0xcc,
	0x1a, 0x58, 0x6b, 0x5b, 0x17, 0x77, 0xf5, 0x23, 0xf8, 0x29, 0xfd, 0x0c, 0x9e, 0x4c, 0x5b, 0x54,
	0x8e, 0x78, 0x7b, 0xaf, 0xef, 0xfd, 0xfe, 0xf5, 0xc1, 0x21, 0xc9, 0x0b, 0x56, 0x06, 0x4b, 0x96,
	0xaf, 0x68, 0x16, 0xac, 0xe8, 0x5a, 0x11, 0x11, 0x3c, 0x29, 0xc5, 0x03, 0xca, 0x17, 0x0a, 0x67,
	0x19, 0xcd, 0xb3, 0xa0, 0x08, 0x77, 0x3a, 0xc4, 0x05, 0x53, 0xcc, 0x3f, 0x37, 0x40, 0x64, 0x81,
	0xc8, 0x02, 0x91, 0x06, 0xa2, 0x9d, 0xd5, 0x22, 0xec, 0x9c, 0x59, 0x01, 0xcc, 0xa9, 0xa6, 0x59,
	0x32, 0x41, 0x02, 0x9c, 0xa6, 0x82, 0x48, 0x69, 0x89, 0x3a, 0xc7, 0x05, 0x5e, 0xd3, 0x14, 0x2b,
	0x12, 0xfc, 0x14, 0x76, 0xd0, 0xfb, 0x74, 0x60, 0x7d, 0x32, 0x4f, 0x2c, 0x95, 0xff, 0x0c, 0x1b,
	0x82, 0xbc, 0xbc, 0x12, 0xa9, 0x16, 0xaa, 0xe4, 0xa4, 0x0d, 0xba, 0xa0, 0xdf, 0x0c, 0xaf, 0xd0,
	0x7e, 0x36, 0xd0, 0x2f, 0x11, 0x8a, 0x2d, 0x4b, 0x52, 0x72, 0x12, 0xb9, 0x5f, 0x51, 0xf5, 0x1d,
	0x38, 0x2d, 0x10, 0x7b, 0xe2, 0xef, 0xd9, 0xbf, 0x87, 0x47, 0x16, 0x2d, 0xdb, 0x95, 0xee, 0x61,
	0xdf, 0x0b, 0x87, 0xff, 0x97, 0x31, 0x95, 0x11, 0xf8, 0x00, 0x8e, 0x0b, 0xe2, 0x1a, 0xe5, 0x09,
	0xce, 0x64, 0xe7, 0x01, 0x56, 0xcd, 0xc8, 0x3f, 0x85, 0x9e, 0xc5, 0x2e, 0x72, 0xbc, 0xb1, 0x79,
	0xea, 0x71, 0xdd, 0x6c, 0xcd, 0xf0, 0x86, 0xf8, 0x97, 0xc6, 0xc4, 0x9a, 0x4a, 0xd5, 0x76, 0x8c,
	0x89, 0x93, 0xad, 0x09, 0xcc, 0xa9, 0x96, 0xd2, 0x5f, 0x89, 0x6e, 0x68, 0x2a, 0x62, 0x9c, 0x67,
	0x44, 0xf3, 0x4f, 0xa9, 0x54, 0xbd, 0x01, 0xf4, 0x76, 0x12, 0xfa, 0x2e, 0xac, 0x44, 0xb7, 0xc9,
	0xb8, 0x75, 0xe0, 0x37, 0xa0, 0x3b, 0x99, 0x25, 0xa3, 0x78, 0x76, 0x3d, 0x6d, 0x01, 0xdd, 0x8d,
	0xee, 0xb6, 0x9d, 0x13, 0x8d, 0xe1, 0x05, 0x65, 0x96, 0x9e, 0x0b, 0xf6, 0x56, 0xee, 0x19, 0x37,
	0x6a, 0x4e, 0xf8, 0x36, 0xef, 0x5c, 0x9f, 0x6c, 0x0e, 0x1e, 0x6b, 0xe6, 0x76, 0x83, 0xef, 0x00,
	0x00, 0x00, 0xff, 0xff, 0xf9, 0xde, 0xf2, 0x64, 0x58, 0x02, 0x00, 0x00,
}
   070701000000BD000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003C00000000cilium-proxy-20200109/go/envoy/config/filter/http/jwt_authn   070701000000BE000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004400000000cilium-proxy-20200109/go/envoy/config/filter/http/jwt_authn/v2alpha   070701000000BF000081A4000003E800000064000000015E17A24700009D6B000000000000000000000000000000000000005100000000cilium-proxy-20200109/go/envoy/config/filter/http/jwt_authn/v2alpha/config.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/jwt_authn/v2alpha/config.proto

package envoy_config_filter_http_jwt_authn_v2alpha

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	route "github.com/cilium/proxy/go/envoy/api/v2/route"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	empty "github.com/golang/protobuf/ptypes/empty"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Please see following for JWT authentication flow:
//
// * `JSON Web Token (JWT) <https://tools.ietf.org/html/rfc7519>`_
// * `The OAuth 2.0 Authorization Framework <https://tools.ietf.org/html/rfc6749>`_
// * `OpenID Connect <http://openid.net/connect>`_
//
// A JwtProvider message specifies how a JSON Web Token (JWT) can be verified. It specifies:
//
// * issuer: the principal that issues the JWT. It has to match the one from the token.
// * allowed audiences: the ones in the token have to be listed here.
// * how to fetch public key JWKS to verify the token signature.
// * how to extract JWT token in the request.
// * how to pass successfully verified token payload.
//
// Example:
//
// .. code-block:: yaml
//
//     issuer: https://example.com
//     audiences:
//     - bookstore_android.apps.googleusercontent.com
//     - bookstore_web.apps.googleusercontent.com
//     remote_jwks:
//       http_uri:
//         uri: https://example.com/.well-known/jwks.json
//         cluster: example_jwks_cluster
//       cache_duration:
//         seconds: 300
//
// [#next-free-field: 10]
type JwtProvider struct {
	// Specify the `principal <https://tools.ietf.org/html/rfc7519#section-4.1.1>`_ that issued
	// the JWT, usually a URL or an email address.
	//
	// Example: https://securetoken.google.com
	// Example: 1234567-compute@developer.gserviceaccount.com
	//
	Issuer string `protobuf:"bytes,1,opt,name=issuer,proto3" json:"issuer,omitempty"`
	// The list of JWT `audiences <https://tools.ietf.org/html/rfc7519#section-4.1.3>`_ are
	// allowed to access. A JWT containing any of these audiences will be accepted. If not specified,
	// will not check audiences in the token.
	//
	// Example:
	//
	// .. code-block:: yaml
	//
	//     audiences:
	//     - bookstore_android.apps.googleusercontent.com
	//     - bookstore_web.apps.googleusercontent.com
	//
	Audiences []string `protobuf:"bytes,2,rep,name=audiences,proto3" json:"audiences,omitempty"`
	// `JSON Web Key Set (JWKS) <https://tools.ietf.org/html/rfc7517#appendix-A>`_ is needed to
	// validate signature of a JWT. This field specifies where to fetch JWKS.
	//
	// Types that are valid to be assigned to JwksSourceSpecifier:
	//	*JwtProvider_RemoteJwks
	//	*JwtProvider_LocalJwks
	JwksSourceSpecifier isJwtProvider_JwksSourceSpecifier `protobuf_oneof:"jwks_source_specifier"`
	// If false, the JWT is removed in the request after a success verification. If true, the JWT is
	// not removed in the request. Default value is false.
	Forward bool `protobuf:"varint,5,opt,name=forward,proto3" json:"forward,omitempty"`
	// Two fields below define where to extract the JWT from an HTTP request.
	//
	// If no explicit location is specified, the following default locations are tried in order:
	//
	// 1. The Authorization header using the `Bearer schema
	// <https://tools.ietf.org/html/rfc6750#section-2.1>`_. Example::
	//
	//    Authorization: Bearer <token>.
	//
	// 2. `access_token <https://tools.ietf.org/html/rfc6750#section-2.3>`_ query parameter.
	//
	// Multiple JWTs can be verified for a request. Each JWT has to be extracted from the locations
	// its provider specified or from the default locations.
	//
	// Specify the HTTP headers to extract JWT token. For examples, following config:
	//
	// .. code-block:: yaml
	//
	//   from_headers:
	//   - name: x-goog-iap-jwt-assertion
	//
	// can be used to extract token from header::
	//
	//   x-goog-iap-jwt-assertion: <JWT>.
	//
	FromHeaders []*JwtHeader `protobuf:"bytes,6,rep,name=from_headers,json=fromHeaders,proto3" json:"from_headers,omitempty"`
	// JWT is sent in a query parameter. `jwt_params` represents the query parameter names.
	//
	// For example, if config is:
	//
	// .. code-block:: yaml
	//
	//   from_params:
	//   - jwt_token
	//
	// The JWT format in query parameter is::
	//
	//    /path?jwt_token=<JWT>
	//
	FromParams []string `protobuf:"bytes,7,rep,name=from_params,json=fromParams,proto3" json:"from_params,omitempty"`
	// This field specifies the header name to forward a successfully verified JWT payload to the
	// backend. The forwarded data is::
	//
	//    base64_encoded(jwt_payload_in_JSON)
	//
	// If it is not specified, the payload will not be forwarded.
	ForwardPayloadHeader string `protobuf:"bytes,8,opt,name=forward_payload_header,json=forwardPayloadHeader,proto3" json:"forward_payload_header,omitempty"`
	// If non empty, successfully verified JWT payloads will be written to StreamInfo DynamicMetadata
	// in the format as: *namespace* is the jwt_authn filter name as **envoy.filters.http.jwt_authn**
	// The value is the *protobuf::Struct*. The value of this field will be the key for its *fields*
	// and the value is the *protobuf::Struct* converted from JWT JSON payload.
	//
	// For example, if payload_in_metadata is *my_payload*:
	//
	// .. code-block:: yaml
	//
	//   envoy.filters.http.jwt_authn:
	//     my_payload:
	//       iss: https://example.com
	//       sub: test@example.com
	//       aud: https://example.com
	//       exp: 1501281058
	//
	PayloadInMetadata    string   `protobuf:"bytes,9,opt,name=payload_in_metadata,json=payloadInMetadata,proto3" json:"payload_in_metadata,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *JwtProvider) Reset()         { *m = JwtProvider{} }
func (m *JwtProvider) String() string { return proto.CompactTextString(m) }
func (*JwtProvider) ProtoMessage()    {}
func (*JwtProvider) Descriptor() ([]byte, []int) {
	return fileDescriptor_3d4e20dc3096b50e, []int{0}
}

func (m *JwtProvider) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_JwtProvider.Unmarshal(m, b)
}
func (m *JwtProvider) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_JwtProvider.Marshal(b, m, deterministic)
}
func (m *JwtProvider) XXX_Merge(src proto.Message) {
	xxx_messageInfo_JwtProvider.Merge(m, src)
}
func (m *JwtProvider) XXX_Size() int {
	return xxx_messageInfo_JwtProvider.Size(m)
}
func (m *JwtProvider) XXX_DiscardUnknown() {
	xxx_messageInfo_JwtProvider.DiscardUnknown(m)
}

var xxx_messageInfo_JwtProvider proto.InternalMessageInfo

func (m *JwtProvider) GetIssuer() string {
	if m != nil {
		return m.Issuer
	}
	return ""
}

func (m *JwtProvider) GetAudiences() []string {
	if m != nil {
		return m.Audiences
	}
	return nil
}

type isJwtProvider_JwksSourceSpecifier interface {
	isJwtProvider_JwksSourceSpecifier()
}

type JwtProvider_RemoteJwks struct {
	RemoteJwks *RemoteJwks `protobuf:"bytes,3,opt,name=remote_jwks,json=remoteJwks,proto3,oneof"`
}

type JwtProvider_LocalJwks struct {
	LocalJwks *core.DataSource `protobuf:"bytes,4,opt,name=local_jwks,json=localJwks,proto3,oneof"`
}

func (*JwtProvider_RemoteJwks) isJwtProvider_JwksSourceSpecifier() {}

func (*JwtProvider_LocalJwks) isJwtProvider_JwksSourceSpecifier() {}

func (m *JwtProvider) GetJwksSourceSpecifier() isJwtProvider_JwksSourceSpecifier {
	if m != nil {
		return m.JwksSourceSpecifier
	}
	return nil
}

func (m *JwtProvider) GetRemoteJwks() *RemoteJwks {
	if x, ok := m.GetJwksSourceSpecifier().(*JwtProvider_RemoteJwks); ok {
		return x.RemoteJwks
	}
	return nil
}

func (m *JwtProvider) GetLocalJwks() *core.DataSource {
	if x, ok := m.GetJwksSourceSpecifier().(*JwtProvider_LocalJwks); ok {
		return x.LocalJwks
	}
	return nil
}

func (m *JwtProvider) GetForward() bool {
	if m != nil {
		return m.Forward
	}
	return false
}

func (m *JwtProvider) GetFromHeaders() []*JwtHeader {
	if m != nil {
		return m.FromHeaders
	}
	return nil
}

func (m *JwtProvider) GetFromParams() []string {
	if m != nil {
		return m.FromParams
	}
	return nil
}

func (m *JwtProvider) GetForwardPayloadHeader() string {
	if m != nil {
		return m.ForwardPayloadHeader
	}
	return ""
}

func (m *JwtProvider) GetPayloadInMetadata() string {
	if m != nil {
		return m.PayloadInMetadata
	}
	return ""
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*JwtProvider) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*JwtProvider_RemoteJwks)(nil),
		(*JwtProvider_LocalJwks)(nil),
	}
}

// This message specifies how to fetch JWKS from remote and how to cache it.
type RemoteJwks struct {
	// The HTTP URI to fetch the JWKS. For example:
	//
	// .. code-block:: yaml
	//
	//    http_uri:
	//      uri: https://www.googleapis.com/oauth2/v1/certs
	//      cluster: jwt.www.googleapis.com|443
	//
	HttpUri *core.HttpUri `protobuf:"bytes,1,opt,name=http_uri,json=httpUri,proto3" json:"http_uri,omitempty"`
	// Duration after which the cached JWKS should be expired. If not specified, default cache
	// duration is 5 minutes.
	CacheDuration        *duration.Duration `protobuf:"bytes,2,opt,name=cache_duration,json=cacheDuration,proto3" json:"cache_duration,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *RemoteJwks) Reset()         { *m = RemoteJwks{} }
func (m *RemoteJwks) String() string { return proto.CompactTextString(m) }
func (*RemoteJwks) ProtoMessage()    {}
func (*RemoteJwks) Descriptor() ([]byte, []int) {
	return fileDescriptor_3d4e20dc3096b50e, []int{1}
}

func (m *RemoteJwks) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RemoteJwks.Unmarshal(m, b)
}
func (m *RemoteJwks) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RemoteJwks.Marshal(b, m, deterministic)
}
func (m *RemoteJwks) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RemoteJwks.Merge(m, src)
}
func (m *RemoteJwks) XXX_Size() int {
	return xxx_messageInfo_RemoteJwks.Size(m)
}
func (m *RemoteJwks) XXX_DiscardUnknown() {
	xxx_messageInfo_RemoteJwks.DiscardUnknown(m)
}

var xxx_messageInfo_RemoteJwks proto.InternalMessageInfo

func (m *RemoteJwks) GetHttpUri() *core.HttpUri {
	if m != nil {
		return m.HttpUri
	}
	return nil
}

func (m *RemoteJwks) GetCacheDuration() *duration.Duration {
	if m != nil {
		return m.CacheDuration
	}
	return nil
}

// This message specifies a header location to extract JWT token.
type JwtHeader struct {
	// The HTTP header name.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The value prefix. The value format is "value_prefix<token>"
	// For example, for "Authorization: Bearer <token>", value_prefix="Bearer " with a space at the
	// end.
	ValuePrefix          string   `protobuf:"bytes,2,opt,name=value_prefix,json=valuePrefix,proto3" json:"value_prefix,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *JwtHeader) Reset()         { *m = JwtHeader{} }
func (m *JwtHeader) String() string { return proto.CompactTextString(m) }
func (*JwtHeader) ProtoMessage()    {}
func (*JwtHeader) Descriptor() ([]byte, []int) {
	return fileDescriptor_3d4e20dc3096b50e, []int{2}
}

func (m *JwtHeader) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_JwtHeader.Unmarshal(m, b)
}
func (m *JwtHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_JwtHeader.Marshal(b, m, deterministic)
}
func (m *JwtHeader) XXX_Merge(src proto.Message) {
	xxx_messageInfo_JwtHeader.Merge(m, src)
}
func (m *JwtHeader) XXX_Size() int {
	return xxx_messageInfo_JwtHeader.Size(m)
}
func (m *JwtHeader) XXX_DiscardUnknown() {
	xxx_messageInfo_JwtHeader.DiscardUnknown(m)
}

var xxx_messageInfo_JwtHeader proto.InternalMessageInfo

func (m *JwtHeader) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *JwtHeader) GetValuePrefix() string {
	if m != nil {
		return m.ValuePrefix
	}
	return ""
}

// Specify a required provider with audiences.
type ProviderWithAudiences struct {
	// Specify a required provider name.
	ProviderName string `protobuf:"bytes,1,opt,name=provider_name,json=providerName,proto3" json:"provider_name,omitempty"`
	// This field overrides the one specified in the JwtProvider.
	Audiences            []string `protobuf:"bytes,2,rep,name=audiences,proto3" json:"audiences,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ProviderWithAudiences) Reset()         { *m = ProviderWithAudiences{} }
func (m *ProviderWithAudiences) String() string { return proto.CompactTextString(m) }
func (*ProviderWithAudiences) ProtoMessage()    {}
func (*ProviderWithAudiences) Descriptor() ([]byte, []int) {
	return fileDescriptor_3d4e20dc3096b50e, []int{3}
}

func (m *ProviderWithAudiences) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ProviderWithAudiences.Unmarshal(m, b)
}
func (m *ProviderWithAudiences) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ProviderWithAudiences.Marshal(b, m, deterministic)
}
func (m *ProviderWithAudiences) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ProviderWithAudiences.Merge(m, src)
}
func (m *ProviderWithAudiences) XXX_Size() int {
	return xxx_messageInfo_ProviderWithAudiences.Size(m)
}
func (m *ProviderWithAudiences) XXX_DiscardUnknown() {
	xxx_messageInfo_ProviderWithAudiences.DiscardUnknown(m)
}

var xxx_messageInfo_ProviderWithAudiences proto.InternalMessageInfo

func (m *ProviderWithAudiences) GetProviderName() string {
	if m != nil {
		return m.ProviderName
	}
	return ""
}

func (m *ProviderWithAudiences) GetAudiences() []string {
	if m != nil {
		return m.Audiences
	}
	return nil
}

// This message specifies a Jwt requirement. An empty message means JWT verification is not
// required. Here are some config examples:
//
// .. code-block:: yaml
//
//  # Example 1: not required with an empty message
//
//  # Example 2: require A
//  provider_name: provider-A
//
//  # Example 3: require A or B
//  requires_any:
//    requirements:
//      - provider_name: provider-A
//      - provider_name: provider-B
//
//  # Example 4: require A and B
//  requires_all:
//    requirements:
//      - provider_name: provider-A
//      - provider_name: provider-B
//
//  # Example 5: require A and (B or C)
//  requires_all:
//    requirements:
//      - provider_name: provider-A
//      - requires_any:
//        requirements:
//          - provider_name: provider-B
//          - provider_name: provider-C
//
//  # Example 6: require A or (B and C)
//  requires_any:
//    requirements:
//      - provider_name: provider-A
//      - requires_all:
//        requirements:
//          - provider_name: provider-B
//          - provider_name: provider-C
//
// [#next-free-field: 6]
type JwtRequirement struct {
	// Types that are valid to be assigned to RequiresType:
	//	*JwtRequirement_ProviderName
	//	*JwtRequirement_ProviderAndAudiences
	//	*JwtRequirement_RequiresAny
	//	*JwtRequirement_RequiresAll
	//	*JwtRequirement_AllowMissingOrFailed
	RequiresType         isJwtRequirement_RequiresType `protobuf_oneof:"requires_type"`
	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
	XXX_unrecognized     []byte                        `json:"-"`
	XXX_sizecache        int32                         `json:"-"`
}

func (m *JwtRequirement) Reset()         { *m = JwtRequirement{} }
func (m *JwtRequirement) String() string { return proto.CompactTextString(m) }
func (*JwtRequirement) ProtoMessage()    {}
func (*JwtRequirement) Descriptor() ([]byte, []int) {
	return fileDescriptor_3d4e20dc3096b50e, []int{4}
}

func (m *JwtRequirement) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_JwtRequirement.Unmarshal(m, b)
}
func (m *JwtRequirement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_JwtRequirement.Marshal(b, m, deterministic)
}
func (m *JwtRequirement) XXX_Merge(src proto.Message) {
	xxx_messageInfo_JwtRequirement.Merge(m, src)
}
func (m *JwtRequirement) XXX_Size() int {
	return xxx_messageInfo_JwtRequirement.Size(m)
}
func (m *JwtRequirement) XXX_DiscardUnknown() {
	xxx_messageInfo_JwtRequirement.DiscardUnknown(m)
}

var xxx_messageInfo_JwtRequirement proto.InternalMessageInfo

type isJwtRequirement_RequiresType interface {
	isJwtRequirement_RequiresType()
}

type JwtRequirement_ProviderName struct {
	ProviderName string `protobuf:"bytes,1,opt,name=provider_name,json=providerName,proto3,oneof"`
}

type JwtRequirement_ProviderAndAudiences struct {
	ProviderAndAudiences *ProviderWithAudiences `protobuf:"bytes,2,opt,name=provider_and_audiences,json=providerAndAudiences,proto3,oneof"`
}

type JwtRequirement_RequiresAny struct {
	RequiresAny *JwtRequirementOrList `protobuf:"bytes,3,opt,name=requires_any,json=requiresAny,proto3,oneof"`
}

type JwtRequirement_RequiresAll struct {
	RequiresAll *JwtRequirementAndList `protobuf:"bytes,4,opt,name=requires_all,json=requiresAll,proto3,oneof"`
}

type JwtRequirement_AllowMissingOrFailed struct {
	AllowMissingOrFailed *empty.Empty `protobuf:"bytes,5,opt,name=allow_missing_or_failed,json=allowMissingOrFailed,proto3,oneof"`
}

func (*JwtRequirement_ProviderName) isJwtRequirement_RequiresType() {}

func (*JwtRequirement_ProviderAndAudiences) isJwtRequirement_RequiresType() {}

func (*JwtRequirement_RequiresAny) isJwtRequirement_RequiresType() {}

func (*JwtRequirement_RequiresAll) isJwtRequirement_RequiresType() {}

func (*JwtRequirement_AllowMissingOrFailed) isJwtRequirement_RequiresType() {}

func (m *JwtRequirement) GetRequiresType() isJwtRequirement_RequiresType {
	if m != nil {
		return m.RequiresType
	}
	return nil
}

func (m *JwtRequirement) GetProviderName() string {
	if x, ok := m.GetRequiresType().(*JwtRequirement_ProviderName); ok {
		return x.ProviderName
	}
	return ""
}

func (m *JwtRequirement) GetProviderAndAudiences() *ProviderWithAudiences {
	if x, ok := m.GetRequiresType().(*JwtRequirement_ProviderAndAudiences); ok {
		return x.ProviderAndAudiences
	}
	return nil
}

func (m *JwtRequirement) GetRequiresAny() *JwtRequirementOrList {
	if x, ok := m.GetRequiresType().(*JwtRequirement_RequiresAny); ok {
		return x.RequiresAny
	}
	return nil
}

func (m *JwtRequirement) GetRequiresAll() *JwtRequirementAndList {
	if x, ok := m.GetRequiresType().(*JwtRequirement_RequiresAll); ok {
		return x.RequiresAll
	}
	return nil
}

func (m *JwtRequirement) GetAllowMissingOrFailed() *empty.Empty {
	if x, ok := m.GetRequiresType().(*JwtRequirement_AllowMissingOrFailed); ok {
		return x.AllowMissingOrFailed
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*JwtRequirement) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*JwtRequirement_ProviderName)(nil),
		(*JwtRequirement_ProviderAndAudiences)(nil),
		(*JwtRequirement_RequiresAny)(nil),
		(*JwtRequirement_RequiresAll)(nil),
		(*JwtRequirement_AllowMissingOrFailed)(nil),
	}
}

// This message specifies a list of RequiredProvider.
// Their results are OR-ed; if any one of them passes, the result is passed
type JwtRequirementOrList struct {
	// Specify a list of JwtRequirement.
	Requirements         []*JwtRequirement `protobuf:"bytes,1,rep,name=requirements,proto3" json:"requirements,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *JwtRequirementOrList) Reset()         { *m = JwtRequirementOrList{} }
func (m *JwtRequirementOrList) String() string { return proto.CompactTextString(m) }
func (*JwtRequirementOrList) ProtoMessage()    {}
func (*JwtRequirementOrList) Descriptor() ([]byte, []int) {
	return fileDescriptor_3d4e20dc3096b50e, []int{5}
}

func (m *JwtRequirementOrList) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_JwtRequirementOrList.Unmarshal(m, b)
}
func (m *JwtRequirementOrList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_JwtRequirementOrList.Marshal(b, m, deterministic)
}
func (m *JwtRequirementOrList) XXX_Merge(src proto.Message) {
	xxx_messageInfo_JwtRequirementOrList.Merge(m, src)
}
func (m *JwtRequirementOrList) XXX_Size() int {
	return xxx_messageInfo_JwtRequirementOrList.Size(m)
}
func (m *JwtRequirementOrList) XXX_DiscardUnknown() {
	xxx_messageInfo_JwtRequirementOrList.DiscardUnknown(m)
}

var xxx_messageInfo_JwtRequirementOrList proto.InternalMessageInfo

func (m *JwtRequirementOrList) GetRequirements() []*JwtRequirement {
	if m != nil {
		return m.Requirements
	}
	return nil
}

// This message specifies a list of RequiredProvider.
// Their results are AND-ed; all of them must pass, if one of them fails or missing, it fails.
type JwtRequirementAndList struct {
	// Specify a list of JwtRequirement.
	Requirements         []*JwtRequirement `protobuf:"bytes,1,rep,name=requirements,proto3" json:"requirements,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *JwtRequirementAndList) Reset()         { *m = JwtRequirementAndList{} }
func (m *JwtRequirementAndList) String() string { return proto.CompactTextString(m) }
func (*JwtRequirementAndList) ProtoMessage()    {}
func (*JwtRequirementAndList) Descriptor() ([]byte, []int) {
	return fileDescriptor_3d4e20dc3096b50e, []int{6}
}

func (m *JwtRequirementAndList) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_JwtRequirementAndList.Unmarshal(m, b)
}
func (m *JwtRequirementAndList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_JwtRequirementAndList.Marshal(b, m, deterministic)
}
func (m *JwtRequirementAndList) XXX_Merge(src proto.Message) {
	xxx_messageInfo_JwtRequirementAndList.Merge(m, src)
}
func (m *JwtRequirementAndList) XXX_Size() int {
	return xxx_messageInfo_JwtRequirementAndList.Size(m)
}
func (m *JwtRequirementAndList) XXX_DiscardUnknown() {
	xxx_messageInfo_JwtRequirementAndList.DiscardUnknown(m)
}

var xxx_messageInfo_JwtRequirementAndList proto.InternalMessageInfo

func (m *JwtRequirementAndList) GetRequirements() []*JwtRequirement {
	if m != nil {
		return m.Requirements
	}
	return nil
}

// This message specifies a Jwt requirement for a specific Route condition.
// Example 1:
//
// .. code-block:: yaml
//
//    - match:
//        prefix: /healthz
//
// In above example, "requires" field is empty for /healthz prefix match,
// it means that requests matching the path prefix don't require JWT authentication.
//
// Example 2:
//
// .. code-block:: yaml
//
//    - match:
//        prefix: /
//      requires: { provider_name: provider-A }
//
// In above example, all requests matched the path prefix require jwt authentication
// from "provider-A".
type RequirementRule struct {
	// The route matching parameter. Only when the match is satisfied, the "requires" field will
	// apply.
	//
	// For example: following match will match all requests.
	//
	// .. code-block:: yaml
	//
	//    match:
	//      prefix: /
	//
	Match *route.RouteMatch `protobuf:"bytes,1,opt,name=match,proto3" json:"match,omitempty"`
	// Specify a Jwt Requirement. Please detail comment in message JwtRequirement.
	Requires             *JwtRequirement `protobuf:"bytes,2,opt,name=requires,proto3" json:"requires,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *RequirementRule) Reset()         { *m = RequirementRule{} }
func (m *RequirementRule) String() string { return proto.CompactTextString(m) }
func (*RequirementRule) ProtoMessage()    {}
func (*RequirementRule) Descriptor() ([]byte, []int) {
	return fileDescriptor_3d4e20dc3096b50e, []int{7}
}

func (m *RequirementRule) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RequirementRule.Unmarshal(m, b)
}
func (m *RequirementRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RequirementRule.Marshal(b, m, deterministic)
}
func (m *RequirementRule) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RequirementRule.Merge(m, src)
}
func (m *RequirementRule) XXX_Size() int {
	return xxx_messageInfo_RequirementRule.Size(m)
}
func (m *RequirementRule) XXX_DiscardUnknown() {
	xxx_messageInfo_RequirementRule.DiscardUnknown(m)
}

var xxx_messageInfo_RequirementRule proto.InternalMessageInfo

func (m *RequirementRule) GetMatch() *route.RouteMatch {
	if m != nil {
		return m.Match
	}
	return nil
}

func (m *RequirementRule) GetRequires() *JwtRequirement {
	if m != nil {
		return m.Requires
	}
	return nil
}

// This message specifies Jwt requirements based on stream_info.filterState.
// This FilterState should use `Router::StringAccessor` object to set a string value.
// Other HTTP filters can use it to specify Jwt requirements dynamically.
//
// Example:
//
// .. code-block:: yaml
//
//    name: jwt_selector
//    requires:
//      issuer_1:
//        provider_name: issuer1
//      issuer_2:
//        provider_name: issuer2
//
// If a filter set "jwt_selector" with "issuer_1" to FilterState for a request,
// jwt_authn filter will use JwtRequirement{"provider_name": "issuer1"} to verify.
type FilterStateRule struct {
	// The filter state name to retrieve the `Router::StringAccessor` object.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// A map of string keys to requirements. The string key is the string value
	// in the FilterState with the name specified in the *name* field above.
	Requires             map[string]*JwtRequirement `protobuf:"bytes,3,rep,name=requires,proto3" json:"requires,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
	XXX_unrecognized     []byte                     `json:"-"`
	XXX_sizecache        int32                      `json:"-"`
}

func (m *FilterStateRule) Reset()         { *m = FilterStateRule{} }
func (m *FilterStateRule) String() string { return proto.CompactTextString(m) }
func (*FilterStateRule) ProtoMessage()    {}
func (*FilterStateRule) Descriptor() ([]byte, []int) {
	return fileDescriptor_3d4e20dc3096b50e, []int{8}
}

func (m *FilterStateRule) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FilterStateRule.Unmarshal(m, b)
}
func (m *FilterStateRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FilterStateRule.Marshal(b, m, deterministic)
}
func (m *FilterStateRule) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FilterStateRule.Merge(m, src)
}
func (m *FilterStateRule) XXX_Size() int {
	return xxx_messageInfo_FilterStateRule.Size(m)
}
func (m *FilterStateRule) XXX_DiscardUnknown() {
	xxx_messageInfo_FilterStateRule.DiscardUnknown(m)
}

var xxx_messageInfo_FilterStateRule proto.InternalMessageInfo

func (m *FilterStateRule) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *FilterStateRule) GetRequires() map[string]*JwtRequirement {
	if m != nil {
		return m.Requires
	}
	return nil
}

// This is the Envoy HTTP filter config for JWT authentication.
//
// For example:
//
// .. code-block:: yaml
//
//   providers:
//      provider1:
//        issuer: issuer1
//        audiences:
//        - audience1
//        - audience2
//        remote_jwks:
//          http_uri:
//            uri: https://example.com/.well-known/jwks.json
//            cluster: example_jwks_cluster
//      provider2:
//        issuer: issuer2
//        local_jwks:
//          inline_string: jwks_string
//
//   rules:
//      # Not jwt verification is required for /health path
//      - match:
//          prefix: /health
//
//      # Jwt verification for provider1 is required for path prefixed with "prefix"
//      - match:
//          prefix: /prefix
//        requires:
//          provider_name: provider1
//
//      # Jwt verification for either provider1 or provider2 is required for all other requests.
//      - match:
//          prefix: /
//        requires:
//          requires_any:
//            requirements:
//              - provider_name: provider1
//              - provider_name: provider2
//
type JwtAuthentication struct {
	// Map of provider names to JwtProviders.
	//
	// .. code-block:: yaml
	//
	//   providers:
	//     provider1:
	//        issuer: issuer1
	//        audiences:
	//        - audience1
	//        - audience2
	//        remote_jwks:
	//          http_uri:
	//            uri: https://example.com/.well-known/jwks.json
	//            cluster: example_jwks_cluster
	//      provider2:
	//        issuer: provider2
	//        local_jwks:
	//          inline_string: jwks_string
	//
	Providers map[string]*JwtProvider `protobuf:"bytes,1,rep,name=providers,proto3" json:"providers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Specifies requirements based on the route matches. The first matched requirement will be
	// applied. If there are overlapped match conditions, please put the most specific match first.
	//
	// Examples
	//
	// .. code-block:: yaml
	//
	// rules:
	//   - match:
	//       prefix: /healthz
	//   - match:
	//       prefix: /baz
	//     requires:
	//       provider_name: provider1
	//   - match:
	//       prefix: /foo
	//     requires:
	//       requires_any:
	//         requirements:
	//           - provider_name: provider1
	//           - provider_name: provider2
	//   - match:
	//       prefix: /bar
	//     requires:
	//       requires_all:
	//         requirements:
	//           - provider_name: provider1
	//           - provider_name: provider2
	//
	Rules []*RequirementRule `protobuf:"bytes,2,rep,name=rules,proto3" json:"rules,omitempty"`
	// This message specifies Jwt requirements based on stream_info.filterState.
	// Other HTTP filters can use it to specify Jwt requirements dynamically.
	// The *rules* field above is checked first, if it could not find any matches,
	// check this one.
	FilterStateRules     *FilterStateRule `protobuf:"bytes,3,opt,name=filter_state_rules,json=filterStateRules,proto3" json:"filter_state_rules,omitempty"`
	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
	XXX_unrecognized     []byte           `json:"-"`
	XXX_sizecache        int32            `json:"-"`
}

func (m *JwtAuthentication) Reset()         { *m = JwtAuthentication{} }
func (m *JwtAuthentication) String() string { return proto.CompactTextString(m) }
func (*JwtAuthentication) ProtoMessage()    {}
func (*JwtAuthentication) Descriptor() ([]byte, []int) {
	return fileDescriptor_3d4e20dc3096b50e, []int{9}
}

func (m *JwtAuthentication) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_JwtAuthentication.Unmarshal(m, b)
}
func (m *JwtAuthentication) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_JwtAuthentication.Marshal(b, m, deterministic)
}
func (m *JwtAuthentication) XXX_Merge(src proto.Message) {
	xxx_messageInfo_JwtAuthentication.Merge(m, src)
}
func (m *JwtAuthentication) XXX_Size() int {
	return xxx_messageInfo_JwtAuthentication.Size(m)
}
func (m *JwtAuthentication) XXX_DiscardUnknown() {
	xxx_messageInfo_JwtAuthentication.DiscardUnknown(m)
}

var xxx_messageInfo_JwtAuthentication proto.InternalMessageInfo

func (m *JwtAuthentication) GetProviders() map[string]*JwtProvider {
	if m != nil {
		return m.Providers
	}
	return nil
}

func (m *JwtAuthentication) GetRules() []*RequirementRule {
	if m != nil {
		return m.Rules
	}
	return nil
}

func (m *JwtAuthentication) GetFilterStateRules() *FilterStateRule {
	if m != nil {
		return m.FilterStateRules
	}
	return nil
}

func init() {
	proto.RegisterType((*JwtProvider)(nil), "envoy.config.filter.http.jwt_authn.v2alpha.JwtProvider")
	proto.RegisterType((*RemoteJwks)(nil), "envoy.config.filter.http.jwt_authn.v2alpha.RemoteJwks")
	proto.RegisterType((*JwtHeader)(nil), "envoy.config.filter.http.jwt_authn.v2alpha.JwtHeader")
	proto.RegisterType((*ProviderWithAudiences)(nil), "envoy.config.filter.http.jwt_authn.v2alpha.ProviderWithAudiences")
	proto.RegisterType((*JwtRequirement)(nil), "envoy.config.filter.http.jwt_authn.v2alpha.JwtRequirement")
	proto.RegisterType((*JwtRequirementOrList)(nil), "envoy.config.filter.http.jwt_authn.v2alpha.JwtRequirementOrList")
	proto.RegisterType((*JwtRequirementAndList)(nil), "envoy.config.filter.http.jwt_authn.v2alpha.JwtRequirementAndList")
	proto.RegisterType((*RequirementRule)(nil), "envoy.config.filter.http.jwt_authn.v2alpha.RequirementRule")
	proto.RegisterType((*FilterStateRule)(nil), "envoy.config.filter.http.jwt_authn.v2alpha.FilterStateRule")
	proto.RegisterMapType((map[string]*JwtRequirement)(nil), "envoy.config.filter.http.jwt_authn.v2alpha.FilterStateRule.RequiresEntry")
	proto.RegisterType((*JwtAuthentication)(nil), "envoy.config.filter.http.jwt_authn.v2alpha.JwtAuthentication")
	proto.RegisterMapType((map[string]*JwtProvider)(nil), "envoy.config.filter.http.jwt_authn.v2alpha.JwtAuthentication.ProvidersEntry")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/jwt_authn/v2alpha/config.proto", fileDescriptor_3d4e20dc3096b50e)
}

var fileDescriptor_3d4e20dc3096b50e = []byte{
	// 1034 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0x4b, 0x6f, 0xdb, 0x46,
	0x10, 0x36, 0x25, 0x3f, 0xa4, 0xa1, 0x5f, 0xd9, 0xda, 0x0e, 0xeb, 0xb8, 0x89, 0xaa, 0xa2, 0x80,
	0xd1, 0x03, 0x09, 0xa8, 0x4d, 0x13, 0x24, 0x40, 0x10, 0xa9, 0x49, 0x20, 0xbb, 0x71, 0xad, 0x6e,
	0xd0, 0xe7, 0x85, 0x58, 0x8b, 0x2b, 0x6b, 0x6d, 0x8a, 0xcb, 0x2e, 0x97, 0x52, 0x78, 0x4b, 0x0f,
	0xbd, 0xf4, 0xd0, 0x43, 0xff, 0x45, 0xef, 0xfd, 0x47, 0xfd, 0x13, 0x45, 0x4e, 0x05, 0x77, 0x97,
	0x7a, 0xd8, 0x42, 0x50, 0x25, 0x45, 0x2f, 0xc2, 0xee, 0xcc, 0x7c, 0xdf, 0xcc, 0x7c, 0x3b, 0x1c,
	0x1b, 0xee, 0xd1, 0x68, 0xc8, 0x33, 0xaf, 0xcb, 0xa3, 0x1e, 0x3b, 0xf7, 0x7a, 0x2c, 0x94, 0x54,
	0x78, 0x7d, 0x29, 0x63, 0xef, 0x62, 0x24, 0x7d, 0x92, 0xca, 0x7e, 0xe4, 0x0d, 0x1b, 0x24, 0x8c,
	0xfb, 0xc4, 0x04, 0xb9, 0xb1, 0xe0, 0x92, 0xa3, 0x4f, 0x14, 0xd0, 0x35, 0x36, 0x0d, 0x74, 0x73,
	0xa0, 0x3b, 0x06, 0xba, 0x06, 0xb8, 0x7f, 0xa0, 0x93, 0x90, 0x98, 0x79, 0xc3, 0x86, 0xd7, 0xe5,
	0x82, 0x7a, 0x67, 0x24, 0xa1, 0x9a, 0x69, 0xbf, 0x76, 0xdd, 0x9b, 0xf3, 0xf8, 0xa9, 0x60, 0x26,
	0xe2, 0xf6, 0x4c, 0x84, 0xe0, 0xa9, 0xa4, 0xfa, 0xb7, 0xf0, 0x9f, 0x73, 0x7e, 0x1e, 0x52, 0x4f,
	0xdd, 0xce, 0xd2, 0x9e, 0x17, 0xa4, 0x82, 0x48, 0xc6, 0x23, 0xe3, 0xbf, 0x75, 0xd5, 0x4f, 0x07,
	0xb1, 0xcc, 0x8c, 0xf3, 0xe6, 0x90, 0x84, 0x2c, 0x20, 0x92, 0x7a, 0xc5, 0x41, 0x3b, 0xea, 0xaf,
	0x96, 0xc1, 0x3e, 0x1e, 0xc9, 0x8e, 0xe0, 0x43, 0x16, 0x50, 0x81, 0xee, 0xc0, 0x2a, 0x4b, 0x92,
	0x94, 0x0a, 0xc7, 0xaa, 0x59, 0x87, 0xd5, 0xd6, 0xda, 0xeb, 0xd6, 0xb2, 0x28, 0xd5, 0x2c, 0x6c,
	0xcc, 0xe8, 0x00, 0xaa, 0x24, 0x0d, 0x18, 0x8d, 0xba, 0x34, 0x71, 0x4a, 0xb5, 0xf2, 0x61, 0x15,
	0x4f, 0x0c, 0xe8, 0x07, 0xb0, 0x05, 0x1d, 0x70, 0x49, 0xfd, 0x8b, 0xd1, 0x65, 0xe2, 0x94, 0x6b,
	0xd6, 0xa1, 0xdd, 0xf8, 0xdc, 0xfd, 0xf7, 0x32, 0xba, 0x58, 0xc1, 0x8f, 0x47, 0x97, 0x49, 0x7b,
	0x09, 0x83, 0x18, 0xdf, 0xd0, 0x23, 0x80, 0x90, 0x77, 0x49, 0xa8, 0x99, 0x97, 0x15, 0xf3, 0x07,
	0x86, 0x99, 0xc4, 0xcc, 0x1d, 0x36, 0xdc, 0x5c, 0x56, 0xf7, 0x09, 0x91, 0xe4, 0x05, 0x4f, 0x45,
	0x97, 0xb6, 0x97, 0x70, 0x55, 0x41, 0x14, 0xde, 0x81, 0xb5, 0x1e, 0x17, 0x23, 0x22, 0x02, 0x67,
	0xa5, 0x66, 0x1d, 0x56, 0x70, 0x71, 0x45, 0xdf, 0xc3, 0x7a, 0x4f, 0xf0, 0x81, 0xdf, 0xa7, 0x24,
	0xa0, 0x22, 0x71, 0x56, 0x6b, 0xe5, 0x43, 0xbb, 0x71, 0x77, 0x91, 0xaa, 0x8f, 0x47, 0xb2, 0xad,
	0xd0, 0xd8, 0xce, 0xa9, 0xf4, 0x39, 0x41, 0x77, 0x40, 0x5d, 0xfd, 0x98, 0x08, 0x32, 0x48, 0x9c,
	0x35, 0x25, 0x17, 0xe4, 0xa6, 0x8e, 0xb2, 0xa0, 0xcf, 0x60, 0xcf, 0x54, 0xe1, 0xc7, 0x24, 0x0b,
	0x39, 0x09, 0x4c, 0x15, 0x4e, 0x25, 0x97, 0x1f, 0xef, 0x18, 0x6f, 0x47, 0x3b, 0x35, 0x2f, 0x72,
	0xe1, 0xbd, 0x22, 0x9a, 0x45, 0xfe, 0x80, 0x4a, 0x12, 0x10, 0x49, 0x9c, 0xaa, 0x82, 0xdc, 0x30,
	0xae, 0xa3, 0xe8, 0xc4, 0x38, 0x5a, 0x07, 0xb0, 0x9b, 0x8b, 0xe6, 0x27, 0x4a, 0x16, 0x3f, 0x89,
	0x69, 0x97, 0xf5, 0x18, 0x15, 0xa8, 0xfc, 0x77, 0xcb, 0xaa, 0xff, 0x62, 0x01, 0x4c, 0x54, 0x47,
	0x77, 0xa1, 0x52, 0x4c, 0xa6, 0x9a, 0x01, 0xbb, 0xb1, 0x3f, 0x47, 0xe5, 0xb6, 0x94, 0xf1, 0x37,
	0x82, 0xe1, 0xb5, 0xbe, 0x3e, 0xa0, 0xc7, 0xb0, 0xd9, 0x25, 0xdd, 0x3e, 0xf5, 0x8b, 0xb1, 0x74,
	0x4a, 0x0a, 0xfc, 0xbe, 0xab, 0xe7, 0xd2, 0x2d, 0xe6, 0xd2, 0x7d, 0x62, 0x02, 0xf0, 0x86, 0x02,
	0x14, 0xd7, 0xfa, 0x97, 0x50, 0x1d, 0xcb, 0x88, 0x6e, 0xc1, 0x72, 0x44, 0x06, 0xf4, 0xea, 0x14,
	0x2a, 0x23, 0xfa, 0x10, 0xd6, 0x87, 0x24, 0x4c, 0xa9, 0x1f, 0x0b, 0xda, 0x63, 0x2f, 0x55, 0xa6,
	0x2a, 0xb6, 0x95, 0xad, 0xa3, 0x4c, 0xf5, 0x1f, 0x61, 0xb7, 0x98, 0xe9, 0xef, 0x98, 0xec, 0x37,
	0xc7, 0x13, 0xfa, 0x11, 0x6c, 0xc4, 0xc6, 0xe1, 0x4f, 0x32, 0xe0, 0xf5, 0xc2, 0xf8, 0x55, 0x9e,
	0xe0, 0x8d, 0x43, 0x5e, 0xff, 0xab, 0x0c, 0x9b, 0xc7, 0x23, 0x89, 0xe9, 0x4f, 0x29, 0x13, 0x74,
	0x40, 0x23, 0x89, 0x3e, 0x9e, 0xcb, 0xda, 0x5e, 0xba, 0xc2, 0x9b, 0xc1, 0xde, 0x38, 0x8c, 0x44,
	0x81, 0x3f, 0x9d, 0x24, 0x17, 0xab, 0xb9, 0xc8, 0xcc, 0xcd, 0xed, 0xaf, 0xbd, 0x84, 0x77, 0x8a,
	0x14, 0xcd, 0x28, 0x98, 0xf4, 0x4d, 0x61, 0x5d, 0xe8, 0x82, 0x13, 0x9f, 0x44, 0x99, 0xf9, 0x34,
	0x1f, 0x2f, 0x38, 0xe4, 0x53, 0x3d, 0x9f, 0x8a, 0xe7, 0x2c, 0x91, 0xed, 0x25, 0x6c, 0x17, 0xbc,
	0xcd, 0x28, 0x43, 0xbd, 0xe9, 0x34, 0x61, 0x68, 0xbe, 0xd3, 0xe6, 0xdb, 0xa7, 0x69, 0x46, 0xc1,
	0xb5, 0x3c, 0x61, 0x88, 0x4e, 0xe1, 0x26, 0x09, 0x43, 0x3e, 0xf2, 0x07, 0x2c, 0x49, 0x58, 0x74,
	0xee, 0x73, 0xe1, 0xf7, 0x08, 0x0b, 0xa9, 0xfe, 0xba, 0xed, 0xc6, 0xde, 0xb5, 0xb9, 0x7b, 0x9a,
	0xef, 0xc3, 0x5c, 0x1f, 0x05, 0x3c, 0xd1, 0xb8, 0x53, 0xf1, 0x4c, 0xa1, 0x5a, 0x5b, 0xb0, 0x31,
	0x2e, 0x5c, 0x66, 0x31, 0xad, 0xbf, 0xb2, 0x60, 0x67, 0x5e, 0xc7, 0xa8, 0x3f, 0x6e, 0x31, 0x37,
	0x26, 0x8e, 0xa5, 0xd6, 0xc5, 0x83, 0xb7, 0x6f, 0xb1, 0x55, 0x79, 0xdd, 0x5a, 0xf9, 0xdd, 0x2a,
	0x55, 0x4a, 0x78, 0x86, 0xb9, 0xfe, 0xb3, 0x05, 0xbb, 0x73, 0xd5, 0xf8, 0x1f, 0x6b, 0xf8, 0xc3,
	0x82, 0xad, 0xa9, 0x38, 0x9c, 0x86, 0x14, 0x3d, 0x82, 0x95, 0x01, 0x91, 0xdd, 0xbe, 0xd9, 0x0f,
	0xb7, 0x67, 0xf7, 0x83, 0xfe, 0xa3, 0x85, 0xf3, 0xdf, 0x93, 0x3c, 0x4a, 0x51, 0xff, 0x6a, 0x95,
	0xb6, 0x2d, 0xac, 0x61, 0xe8, 0x5b, 0xa8, 0x14, 0x5a, 0x9b, 0xc1, 0x7f, 0x87, 0xca, 0xf1, 0x98,
	0xab, 0xfe, 0x5b, 0x09, 0xb6, 0x9e, 0x29, 0xe8, 0x0b, 0x49, 0x24, 0x55, 0xb5, 0xbe, 0x71, 0x91,
	0xd0, 0xa9, 0x42, 0xca, 0x4a, 0xc2, 0xa3, 0x45, 0x0a, 0xb9, 0x92, 0xcb, 0x35, 0x55, 0x25, 0x4f,
	0x23, 0x29, 0xb2, 0x49, 0x5d, 0xfb, 0x23, 0xd8, 0x98, 0x71, 0xa1, 0x6d, 0x28, 0x5f, 0xd2, 0xcc,
	0xac, 0x9e, 0xfc, 0x88, 0x3a, 0xb0, 0xa2, 0xd6, 0xd7, 0x7f, 0xa0, 0x87, 0x26, 0x7a, 0x50, 0xba,
	0x6f, 0xd5, 0xff, 0x2c, 0xc3, 0x8d, 0xe3, 0x91, 0x6c, 0xa6, 0xb2, 0x4f, 0x23, 0xc9, 0xba, 0x6a,
	0xd1, 0xa2, 0x0b, 0xa8, 0x16, 0x2b, 0xa2, 0x98, 0x9c, 0xe7, 0x0b, 0xe6, 0x9b, 0x65, 0x1c, 0xaf,
	0x22, 0xd3, 0xf9, 0x84, 0x1e, 0x7d, 0x0d, 0x2b, 0x22, 0x0d, 0xcd, 0x16, 0xb5, 0x1b, 0x0f, 0x17,
	0xfb, 0x57, 0x60, 0x66, 0xec, 0xb0, 0x66, 0x42, 0x0c, 0x90, 0xc6, 0xf9, 0x49, 0xae, 0xbc, 0xaf,
	0xf9, 0xf5, 0x3e, 0x7b, 0xf8, 0x0e, 0xcf, 0x87, 0xb7, 0x7b, 0xb3, 0x86, 0x64, 0x3f, 0x85, 0xcd,
	0xd9, 0xd6, 0xe6, 0xbc, 0xdc, 0xc9, 0xec, 0xcb, 0xdd, 0x5b, 0x50, 0xc9, 0x82, 0x7f, 0xea, 0xd9,
	0x5a, 0x47, 0x70, 0x9f, 0x71, 0xcd, 0x13, 0x0b, 0xfe, 0x32, 0x5b, 0x80, 0xb2, 0x65, 0x7f, 0xa1,
	0xa2, 0x3a, 0xf9, 0xd6, 0xeb, 0x58, 0x67, 0xab, 0x6a, 0xfd, 0x7d, 0xfa, 0x4f, 0x00, 0x00, 0x00,
	0xff, 0xff, 0x82, 0x7d, 0x49, 0xd7, 0x03, 0x0b, 0x00, 0x00,
}
 070701000000C0000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003600000000cilium-proxy-20200109/go/envoy/config/filter/http/lua 070701000000C1000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003900000000cilium-proxy-20200109/go/envoy/config/filter/http/lua/v2  070701000000C2000081A4000003E800000064000000015E17A24700000DEB000000000000000000000000000000000000004300000000cilium-proxy-20200109/go/envoy/config/filter/http/lua/v2/lua.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/lua/v2/lua.proto

package envoy_config_filter_http_lua_v2

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type Lua struct {
	// The Lua code that Envoy will execute. This can be a very small script that
	// further loads code from disk if desired. Note that if JSON configuration is used, the code must
	// be properly escaped. YAML configuration may be easier to read since YAML supports multi-line
	// strings so complex scripts can be easily expressed inline in the configuration.
	InlineCode           string   `protobuf:"bytes,1,opt,name=inline_code,json=inlineCode,proto3" json:"inline_code,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Lua) Reset()         { *m = Lua{} }
func (m *Lua) String() string { return proto.CompactTextString(m) }
func (*Lua) ProtoMessage()    {}
func (*Lua) Descriptor() ([]byte, []int) {
	return fileDescriptor_f59dca3e63e33613, []int{0}
}

func (m *Lua) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Lua.Unmarshal(m, b)
}
func (m *Lua) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Lua.Marshal(b, m, deterministic)
}
func (m *Lua) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Lua.Merge(m, src)
}
func (m *Lua) XXX_Size() int {
	return xxx_messageInfo_Lua.Size(m)
}
func (m *Lua) XXX_DiscardUnknown() {
	xxx_messageInfo_Lua.DiscardUnknown(m)
}

var xxx_messageInfo_Lua proto.InternalMessageInfo

func (m *Lua) GetInlineCode() string {
	if m != nil {
		return m.InlineCode
	}
	return ""
}

func init() {
	proto.RegisterType((*Lua)(nil), "envoy.config.filter.http.lua.v2.Lua")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/lua/v2/lua.proto", fileDescriptor_f59dca3e63e33613)
}

var fileDescriptor_f59dca3e63e33613 = []byte{
	// 175 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4c, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0xcb, 0xcc, 0x29, 0x49, 0x2d, 0xd2,
	0xcf, 0x28, 0x29, 0x29, 0xd0, 0xcf, 0x29, 0x4d, 0xd4, 0x2f, 0x33, 0x02, 0x51, 0x7a, 0x05, 0x45,
	0xf9, 0x25, 0xf9, 0x42, 0xf2, 0x60, 0xa5, 0x7a, 0x10, 0xa5, 0x7a, 0x10, 0xa5, 0x7a, 0x20, 0xa5,
	0x7a, 0x20, 0x35, 0x65, 0x46, 0x52, 0xe2, 0x65, 0x89, 0x39, 0x99, 0x29, 0x89, 0x25, 0xa9, 0xfa,
	0x30, 0x06, 0x44, 0xa7, 0x92, 0x3e, 0x17, 0xb3, 0x4f, 0x69, 0xa2, 0x90, 0x06, 0x17, 0x77, 0x66,
	0x5e, 0x4e, 0x66, 0x5e, 0x6a, 0x7c, 0x72, 0x7e, 0x4a, 0xaa, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0xa7,
	0x13, 0xfb, 0x2f, 0x27, 0x96, 0x22, 0x26, 0x05, 0xc6, 0x20, 0x2e, 0x88, 0x9c, 0x73, 0x7e, 0x4a,
	0xaa, 0x93, 0x35, 0x97, 0x6e, 0x66, 0xbe, 0x1e, 0xd8, 0xbe, 0x82, 0xa2, 0xfc, 0x8a, 0x4a, 0x3d,
	0x02, 0x56, 0x3b, 0x71, 0xf8, 0x94, 0x26, 0x06, 0x80, 0xec, 0x0a, 0x60, 0x4c, 0x62, 0x03, 0x5b,
	0x6a, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x2e, 0x29, 0x57, 0x20, 0xdb, 0x00, 0x00, 0x00,
}
 070701000000C3000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003F00000000cilium-proxy-20200109/go/envoy/config/filter/http/original_src    070701000000C4000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004800000000cilium-proxy-20200109/go/envoy/config/filter/http/original_src/v2alpha1   070701000000C5000081A4000003E800000064000000015E17A24700000F1F000000000000000000000000000000000000005B00000000cilium-proxy-20200109/go/envoy/config/filter/http/original_src/v2alpha1/original_src.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/original_src/v2alpha1/original_src.proto

package envoy_config_filter_http_original_src_v2alpha1

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// The Original Src filter binds upstream connections to the original source address determined
// for the request. This address could come from something like the Proxy Protocol filter, or it
// could come from trusted http headers.
type OriginalSrc struct {
	// Sets the SO_MARK option on the upstream connection's socket to the provided value. Used to
	// ensure that non-local addresses may be routed back through envoy when binding to the original
	// source address. The option will not be applied if the mark is 0.
	Mark                 uint32   `protobuf:"varint,1,opt,name=mark,proto3" json:"mark,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *OriginalSrc) Reset()         { *m = OriginalSrc{} }
func (m *OriginalSrc) String() string { return proto.CompactTextString(m) }
func (*OriginalSrc) ProtoMessage()    {}
func (*OriginalSrc) Descriptor() ([]byte, []int) {
	return fileDescriptor_898a61b697cc0660, []int{0}
}

func (m *OriginalSrc) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OriginalSrc.Unmarshal(m, b)
}
func (m *OriginalSrc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OriginalSrc.Marshal(b, m, deterministic)
}
func (m *OriginalSrc) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OriginalSrc.Merge(m, src)
}
func (m *OriginalSrc) XXX_Size() int {
	return xxx_messageInfo_OriginalSrc.Size(m)
}
func (m *OriginalSrc) XXX_DiscardUnknown() {
	xxx_messageInfo_OriginalSrc.DiscardUnknown(m)
}

var xxx_messageInfo_OriginalSrc proto.InternalMessageInfo

func (m *OriginalSrc) GetMark() uint32 {
	if m != nil {
		return m.Mark
	}
	return 0
}

func init() {
	proto.RegisterType((*OriginalSrc)(nil), "envoy.config.filter.http.original_src.v2alpha1.OriginalSrc")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/original_src/v2alpha1/original_src.proto", fileDescriptor_898a61b697cc0660)
}

var fileDescriptor_898a61b697cc0660 = []byte{
	// 171 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x72, 0x4c, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0xcb, 0xcc, 0x29, 0x49, 0x2d, 0xd2,
	0xcf, 0x28, 0x29, 0x29, 0xd0, 0xcf, 0x2f, 0xca, 0x4c, 0xcf, 0xcc, 0x4b, 0xcc, 0x89, 0x2f, 0x2e,
	0x4a, 0xd6, 0x2f, 0x33, 0x4a, 0xcc, 0x29, 0xc8, 0x48, 0x34, 0x44, 0x11, 0xd5, 0x2b, 0x28, 0xca,
	0x2f, 0xc9, 0x17, 0xd2, 0x03, 0x1b, 0xa1, 0x07, 0x31, 0x42, 0x0f, 0x62, 0x84, 0x1e, 0xc8, 0x08,
	0x3d, 0x14, 0xc5, 0x30, 0x23, 0xa4, 0xc4, 0xcb, 0x12, 0x73, 0x32, 0x53, 0x12, 0x4b, 0x52, 0xf5,
	0x61, 0x0c, 0x88, 0x41, 0x4a, 0x8a, 0x5c, 0xdc, 0xfe, 0x50, 0x1d, 0xc1, 0x45, 0xc9, 0x42, 0x42,
	0x5c, 0x2c, 0xb9, 0x89, 0x45, 0xd9, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xbc, 0x41, 0x60, 0xb6, 0x53,
	0x10, 0x97, 0x4d, 0x66, 0x3e, 0xc4, 0xc2, 0x82, 0xa2, 0xfc, 0x8a, 0x4a, 0x12, 0xed, 0x76, 0x12,
	0x40, 0xb2, 0x20, 0x00, 0x64, 0x69, 0x00, 0x63, 0x12, 0x1b, 0xd8, 0x76, 0x63, 0x40, 0x00, 0x00,
	0x00, 0xff, 0xff, 0xde, 0x8f, 0xd2, 0xb1, 0x0b, 0x01, 0x00, 0x00,
}
 070701000000C6000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003D00000000cilium-proxy-20200109/go/envoy/config/filter/http/rate_limit  070701000000C7000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004000000000cilium-proxy-20200109/go/envoy/config/filter/http/rate_limit/v2   070701000000C8000081A4000003E800000064000000015E17A24700001E95000000000000000000000000000000000000005100000000cilium-proxy-20200109/go/envoy/config/filter/http/rate_limit/v2/rate_limit.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/rate_limit/v2/rate_limit.proto

package envoy_config_filter_http_rate_limit_v2

import (
	fmt "fmt"
	v2 "github.com/cilium/proxy/go/envoy/config/ratelimit/v2"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#next-free-field: 8]
type RateLimit struct {
	// The rate limit domain to use when calling the rate limit service.
	Domain string `protobuf:"bytes,1,opt,name=domain,proto3" json:"domain,omitempty"`
	// Specifies the rate limit configurations to be applied with the same
	// stage number. If not set, the default stage number is 0.
	//
	// .. note::
	//
	//  The filter supports a range of 0 - 10 inclusively for stage numbers.
	Stage uint32 `protobuf:"varint,2,opt,name=stage,proto3" json:"stage,omitempty"`
	// The type of requests the filter should apply to. The supported
	// types are *internal*, *external* or *both*. A request is considered internal if
	// :ref:`x-envoy-internal<config_http_conn_man_headers_x-envoy-internal>` is set to true. If
	// :ref:`x-envoy-internal<config_http_conn_man_headers_x-envoy-internal>` is not set or false, a
	// request is considered external. The filter defaults to *both*, and it will apply to all request
	// types.
	RequestType string `protobuf:"bytes,3,opt,name=request_type,json=requestType,proto3" json:"request_type,omitempty"`
	// The timeout in milliseconds for the rate limit service RPC. If not
	// set, this defaults to 20ms.
	Timeout *duration.Duration `protobuf:"bytes,4,opt,name=timeout,proto3" json:"timeout,omitempty"`
	// The filter's behaviour in case the rate limiting service does
	// not respond back. When it is set to true, Envoy will not allow traffic in case of
	// communication failure between rate limiting service and the proxy.
	// Defaults to false.
	FailureModeDeny bool `protobuf:"varint,5,opt,name=failure_mode_deny,json=failureModeDeny,proto3" json:"failure_mode_deny,omitempty"`
	// Specifies whether a `RESOURCE_EXHAUSTED` gRPC code must be returned instead
	// of the default `UNAVAILABLE` gRPC code for a rate limited gRPC call. The
	// HTTP code will be 200 for a gRPC response.
	RateLimitedAsResourceExhausted bool `protobuf:"varint,6,opt,name=rate_limited_as_resource_exhausted,json=rateLimitedAsResourceExhausted,proto3" json:"rate_limited_as_resource_exhausted,omitempty"`
	// Configuration for an external rate limit service provider. If not
	// specified, any calls to the rate limit service will immediately return
	// success.
	RateLimitService     *v2.RateLimitServiceConfig `protobuf:"bytes,7,opt,name=rate_limit_service,json=rateLimitService,proto3" json:"rate_limit_service,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
	XXX_unrecognized     []byte                     `json:"-"`
	XXX_sizecache        int32                      `json:"-"`
}

func (m *RateLimit) Reset()         { *m = RateLimit{} }
func (m *RateLimit) String() string { return proto.CompactTextString(m) }
func (*RateLimit) ProtoMessage()    {}
func (*RateLimit) Descriptor() ([]byte, []int) {
	return fileDescriptor_af348a51c982d3a6, []int{0}
}

func (m *RateLimit) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimit.Unmarshal(m, b)
}
func (m *RateLimit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimit.Marshal(b, m, deterministic)
}
func (m *RateLimit) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimit.Merge(m, src)
}
func (m *RateLimit) XXX_Size() int {
	return xxx_messageInfo_RateLimit.Size(m)
}
func (m *RateLimit) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimit.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimit proto.InternalMessageInfo

func (m *RateLimit) GetDomain() string {
	if m != nil {
		return m.Domain
	}
	return ""
}

func (m *RateLimit) GetStage() uint32 {
	if m != nil {
		return m.Stage
	}
	return 0
}

func (m *RateLimit) GetRequestType() string {
	if m != nil {
		return m.RequestType
	}
	return ""
}

func (m *RateLimit) GetTimeout() *duration.Duration {
	if m != nil {
		return m.Timeout
	}
	return nil
}

func (m *RateLimit) GetFailureModeDeny() bool {
	if m != nil {
		return m.FailureModeDeny
	}
	return false
}

func (m *RateLimit) GetRateLimitedAsResourceExhausted() bool {
	if m != nil {
		return m.RateLimitedAsResourceExhausted
	}
	return false
}

func (m *RateLimit) GetRateLimitService() *v2.RateLimitServiceConfig {
	if m != nil {
		return m.RateLimitService
	}
	return nil
}

func init() {
	proto.RegisterType((*RateLimit)(nil), "envoy.config.filter.http.rate_limit.v2.RateLimit")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/rate_limit/v2/rate_limit.proto", fileDescriptor_af348a51c982d3a6)
}

var fileDescriptor_af348a51c982d3a6 = []byte{
	// 404 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xcb, 0x6e, 0xd4, 0x30,
	0x14, 0x95, 0xa7, 0x9d, 0x99, 0xd6, 0xe5, 0x51, 0xbc, 0xc1, 0x54, 0xa2, 0x84, 0x22, 0xa1, 0x51,
	0x17, 0xb6, 0x98, 0x22, 0xb1, 0x26, 0x14, 0x09, 0x21, 0x90, 0x2a, 0xc3, 0xde, 0x72, 0xc7, 0x37,
	0xa9, 0xa5, 0x24, 0x0e, 0xb6, 0x13, 0x35, 0x3f, 0xc0, 0x82, 0x4f, 0xee, 0x0a, 0x25, 0x4e, 0x66,
	0x5a, 0x56, 0xec, 0xe2, 0x7b, 0x1e, 0x3e, 0x39, 0xd7, 0xf8, 0x03, 0x54, 0xad, 0xed, 0xf8, 0xc6,
	0x56, 0x99, 0xc9, 0x79, 0x66, 0x8a, 0x00, 0x8e, 0xdf, 0x84, 0x50, 0x73, 0xa7, 0x02, 0xc8, 0xc2,
	0x94, 0x26, 0xf0, 0x76, 0x7d, 0xef, 0xc4, 0x6a, 0x67, 0x83, 0x25, 0x6f, 0x07, 0x21, 0x8b, 0x42,
	0x16, 0x85, 0xac, 0x17, 0xb2, 0x7b, 0xd4, 0x76, 0x7d, 0xf2, 0xe6, 0xc1, 0x05, 0x3d, 0xb6, 0xf3,
	0x2c, 0x7c, 0x34, 0x3b, 0x39, 0xcd, 0xad, 0xcd, 0x0b, 0xe0, 0xc3, 0xe9, 0xba, 0xc9, 0xb8, 0x6e,
	0x9c, 0x0a, 0xc6, 0x56, 0x23, 0xfe, 0xbc, 0x55, 0x85, 0xd1, 0x2a, 0x00, 0x9f, 0x3e, 0x22, 0x70,
	0xf6, 0x7b, 0x0f, 0x1f, 0x0a, 0x15, 0xe0, 0x5b, 0xef, 0x49, 0x5e, 0xe1, 0x85, 0xb6, 0xa5, 0x32,
	0x15, 0x45, 0x09, 0x5a, 0x1d, 0xa6, 0xcb, 0xbb, 0x74, 0xdf, 0xcd, 0x12, 0x24, 0xc6, 0x31, 0x79,
	0x89, 0xe7, 0x3e, 0xa8, 0x1c, 0xe8, 0x2c, 0x41, 0xab, 0xc7, 0x03, 0x7e, 0x3e, 0xa3, 0x58, 0xc4,
	0x29, 0x79, 0x8d, 0x1f, 0x39, 0xf8, 0xd5, 0x80, 0x0f, 0x32, 0x74, 0x35, 0xd0, 0xbd, 0xde, 0x45,
	0x1c, 0x8d, 0xb3, 0x9f, 0x5d, 0x0d, 0xe4, 0x02, 0x2f, 0x83, 0x29, 0xc1, 0x36, 0x81, 0xee, 0x27,
	0x68, 0x75, 0xb4, 0x7e, 0xc1, 0x62, 0x76, 0x36, 0x65, 0x67, 0x97, 0x63, 0x76, 0x31, 0x31, 0xc9,
	0x39, 0x7e, 0x96, 0x29, 0x53, 0x34, 0x0e, 0x64, 0x69, 0x35, 0x48, 0x0d, 0x55, 0x47, 0xe7, 0x09,
	0x5a, 0x1d, 0x88, 0xa7, 0x23, 0xf0, 0xdd, 0x6a, 0xb8, 0x84, 0xaa, 0x23, 0x5f, 0xf1, 0xd9, 0xae,
	0x40, 0xd0, 0x52, 0x79, 0xe9, 0xc0, 0xdb, 0xc6, 0x6d, 0x40, 0xc2, 0xed, 0x8d, 0x6a, 0x7c, 0x00,
	0x4d, 0x17, 0x83, 0xf8, 0xd4, 0x4d, 0xbf, 0x0e, 0xfa, 0xa3, 0x17, 0x23, 0xed, 0xf3, 0xc4, 0x22,
	0x06, 0x93, 0x9d, 0x97, 0xf4, 0xe0, 0x5a, 0xb3, 0x01, 0xba, 0x1c, 0x72, 0xbf, 0x63, 0x0f, 0x16,
	0xb8, 0x5d, 0x0c, 0x6b, 0xd7, 0x6c, 0xdb, 0xe8, 0x8f, 0x28, 0xf9, 0x34, 0x70, 0xd2, 0x83, 0xbb,
	0x74, 0xfe, 0x07, 0xcd, 0x8e, 0x91, 0x38, 0x76, 0xff, 0x30, 0xd2, 0x2f, 0xf8, 0xbd, 0xb1, 0xd1,
	0xb2, 0x76, 0xf6, 0xb6, 0x63, 0xff, 0xf7, 0x3c, 0xd2, 0x27, 0xdb, 0xbb, 0xae, 0xfa, 0xfe, 0xae,
	0xd0, 0xf5, 0x62, 0x28, 0xf2, 0xe2, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x79, 0x1f, 0x21, 0x57,
	0x9a, 0x02, 0x00, 0x00,
}
   070701000000C9000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003700000000cilium-proxy-20200109/go/envoy/config/filter/http/rbac    070701000000CA000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003A00000000cilium-proxy-20200109/go/envoy/config/filter/http/rbac/v2 070701000000CB000081A4000003E800000064000000015E17A247000015DF000000000000000000000000000000000000004500000000cilium-proxy-20200109/go/envoy/config/filter/http/rbac/v2/rbac.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/rbac/v2/rbac.proto

package envoy_config_filter_http_rbac_v2

import (
	fmt "fmt"
	v2 "github.com/cilium/proxy/go/envoy/config/rbac/v2"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// RBAC filter config.
type RBAC struct {
	// Specify the RBAC rules to be applied globally.
	// If absent, no enforcing RBAC policy will be applied.
	Rules *v2.RBAC `protobuf:"bytes,1,opt,name=rules,proto3" json:"rules,omitempty"`
	// Shadow rules are not enforced by the filter (i.e., returning a 403)
	// but will emit stats and logs and can be used for rule testing.
	// If absent, no shadow RBAC policy will be applied.
	ShadowRules          *v2.RBAC `protobuf:"bytes,2,opt,name=shadow_rules,json=shadowRules,proto3" json:"shadow_rules,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RBAC) Reset()         { *m = RBAC{} }
func (m *RBAC) String() string { return proto.CompactTextString(m) }
func (*RBAC) ProtoMessage()    {}
func (*RBAC) Descriptor() ([]byte, []int) {
	return fileDescriptor_15d628c6558085a7, []int{0}
}

func (m *RBAC) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RBAC.Unmarshal(m, b)
}
func (m *RBAC) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RBAC.Marshal(b, m, deterministic)
}
func (m *RBAC) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RBAC.Merge(m, src)
}
func (m *RBAC) XXX_Size() int {
	return xxx_messageInfo_RBAC.Size(m)
}
func (m *RBAC) XXX_DiscardUnknown() {
	xxx_messageInfo_RBAC.DiscardUnknown(m)
}

var xxx_messageInfo_RBAC proto.InternalMessageInfo

func (m *RBAC) GetRules() *v2.RBAC {
	if m != nil {
		return m.Rules
	}
	return nil
}

func (m *RBAC) GetShadowRules() *v2.RBAC {
	if m != nil {
		return m.ShadowRules
	}
	return nil
}

type RBACPerRoute struct {
	// Override the global configuration of the filter with this new config.
	// If absent, the global RBAC policy will be disabled for this route.
	Rbac                 *RBAC    `protobuf:"bytes,2,opt,name=rbac,proto3" json:"rbac,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RBACPerRoute) Reset()         { *m = RBACPerRoute{} }
func (m *RBACPerRoute) String() string { return proto.CompactTextString(m) }
func (*RBACPerRoute) ProtoMessage()    {}
func (*RBACPerRoute) Descriptor() ([]byte, []int) {
	return fileDescriptor_15d628c6558085a7, []int{1}
}

func (m *RBACPerRoute) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RBACPerRoute.Unmarshal(m, b)
}
func (m *RBACPerRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RBACPerRoute.Marshal(b, m, deterministic)
}
func (m *RBACPerRoute) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RBACPerRoute.Merge(m, src)
}
func (m *RBACPerRoute) XXX_Size() int {
	return xxx_messageInfo_RBACPerRoute.Size(m)
}
func (m *RBACPerRoute) XXX_DiscardUnknown() {
	xxx_messageInfo_RBACPerRoute.DiscardUnknown(m)
}

var xxx_messageInfo_RBACPerRoute proto.InternalMessageInfo

func (m *RBACPerRoute) GetRbac() *RBAC {
	if m != nil {
		return m.Rbac
	}
	return nil
}

func init() {
	proto.RegisterType((*RBAC)(nil), "envoy.config.filter.http.rbac.v2.RBAC")
	proto.RegisterType((*RBACPerRoute)(nil), "envoy.config.filter.http.rbac.v2.RBACPerRoute")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/rbac/v2/rbac.proto", fileDescriptor_15d628c6558085a7)
}

var fileDescriptor_15d628c6558085a7 = []byte{
	// 232 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4e, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0xcb, 0xcc, 0x29, 0x49, 0x2d, 0xd2,
	0xcf, 0x28, 0x29, 0x29, 0xd0, 0x2f, 0x4a, 0x4a, 0x4c, 0xd6, 0x2f, 0x33, 0x02, 0xd3, 0x7a, 0x05,
	0x45, 0xf9, 0x25, 0xf9, 0x42, 0x0a, 0x60, 0xc5, 0x7a, 0x10, 0xc5, 0x7a, 0x10, 0xc5, 0x7a, 0x20,
	0xc5, 0x7a, 0x60, 0x45, 0x65, 0x46, 0x52, 0xf2, 0x28, 0xc6, 0x61, 0x1a, 0x21, 0x25, 0x5e, 0x96,
	0x98, 0x93, 0x99, 0x92, 0x58, 0x92, 0xaa, 0x0f, 0x63, 0x40, 0x24, 0x94, 0xca, 0xb9, 0x58, 0x82,
	0x9c, 0x1c, 0x9d, 0x85, 0x0c, 0xb8, 0x58, 0x8b, 0x4a, 0x73, 0x52, 0x8b, 0x25, 0x18, 0x15, 0x18,
	0x35, 0xb8, 0x8d, 0xa4, 0xf4, 0x50, 0xec, 0x84, 0xda, 0xa3, 0x07, 0x52, 0x1a, 0x04, 0x51, 0x28,
	0x64, 0xcb, 0xc5, 0x53, 0x9c, 0x91, 0x98, 0x92, 0x5f, 0x1e, 0x0f, 0xd1, 0xc8, 0x44, 0x50, 0x23,
	0x37, 0x44, 0x7d, 0x10, 0x48, 0xb9, 0x52, 0x00, 0x17, 0x0f, 0x48, 0x30, 0x20, 0xb5, 0x28, 0x28,
	0xbf, 0xb4, 0x24, 0x55, 0xc8, 0x8a, 0x8b, 0x05, 0xa4, 0x18, 0x6a, 0x8c, 0x9a, 0x1e, 0x21, 0x3f,
	0x43, 0x8c, 0x04, 0xeb, 0xf1, 0x62, 0xe1, 0x60, 0x14, 0x60, 0x72, 0xb2, 0xe5, 0xd2, 0xcb, 0xcc,
	0x87, 0xe8, 0x2b, 0x28, 0xca, 0xaf, 0xa8, 0x24, 0x68, 0x84, 0x13, 0x67, 0x50, 0x52, 0x62, 0x72,
	0x00, 0x28, 0x1c, 0x02, 0x18, 0x93, 0xd8, 0xc0, 0x01, 0x62, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff,
	0xbd, 0x80, 0x14, 0x69, 0x9b, 0x01, 0x00, 0x00,
}
 070701000000CC000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003900000000cilium-proxy-20200109/go/envoy/config/filter/http/router  070701000000CD000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003C00000000cilium-proxy-20200109/go/envoy/config/filter/http/router/v2   070701000000CE000081A4000003E800000064000000015E17A24700002108000000000000000000000000000000000000004900000000cilium-proxy-20200109/go/envoy/config/filter/http/router/v2/router.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/router/v2/router.proto

package envoy_config_filter_http_router_v2

import (
	fmt "fmt"
	v2 "github.com/cilium/proxy/go/envoy/config/filter/accesslog/v2"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#next-free-field: 7]
type Router struct {
	// Whether the router generates dynamic cluster statistics. Defaults to
	// true. Can be disabled in high performance scenarios.
	DynamicStats *wrappers.BoolValue `protobuf:"bytes,1,opt,name=dynamic_stats,json=dynamicStats,proto3" json:"dynamic_stats,omitempty"`
	// Whether to start a child span for egress routed calls. This can be
	// useful in scenarios where other filters (auth, ratelimit, etc.) make
	// outbound calls and have child spans rooted at the same ingress
	// parent. Defaults to false.
	StartChildSpan bool `protobuf:"varint,2,opt,name=start_child_span,json=startChildSpan,proto3" json:"start_child_span,omitempty"`
	// Configuration for HTTP upstream logs emitted by the router. Upstream logs
	// are configured in the same way as access logs, but each log entry represents
	// an upstream request. Presuming retries are configured, multiple upstream
	// requests may be made for each downstream (inbound) request.
	UpstreamLog []*v2.AccessLog `protobuf:"bytes,3,rep,name=upstream_log,json=upstreamLog,proto3" json:"upstream_log,omitempty"`
	// Do not add any additional *x-envoy-* headers to requests or responses. This
	// only affects the :ref:`router filter generated *x-envoy-* headers
	// <config_http_filters_router_headers_set>`, other Envoy filters and the HTTP
	// connection manager may continue to set *x-envoy-* headers.
	SuppressEnvoyHeaders bool `protobuf:"varint,4,opt,name=suppress_envoy_headers,json=suppressEnvoyHeaders,proto3" json:"suppress_envoy_headers,omitempty"`
	// Specifies a list of HTTP headers to strictly validate. Envoy will reject a
	// request and respond with HTTP status 400 if the request contains an invalid
	// value for any of the headers listed in this field. Strict header checking
	// is only supported for the following headers:
	//
	// Value must be a ','-delimited list (i.e. no spaces) of supported retry
	// policy values:
	//
	// * :ref:`config_http_filters_router_x-envoy-retry-grpc-on`
	// * :ref:`config_http_filters_router_x-envoy-retry-on`
	//
	// Value must be an integer:
	//
	// * :ref:`config_http_filters_router_x-envoy-max-retries`
	// * :ref:`config_http_filters_router_x-envoy-upstream-rq-timeout-ms`
	// * :ref:`config_http_filters_router_x-envoy-upstream-rq-per-try-timeout-ms`
	StrictCheckHeaders []string `protobuf:"bytes,5,rep,name=strict_check_headers,json=strictCheckHeaders,proto3" json:"strict_check_headers,omitempty"`
	// If not set, ingress Envoy will ignore
	// :ref:`config_http_filters_router_x-envoy-expected-rq-timeout-ms` header, populated by egress
	// Envoy, when deriving timeout for upstream cluster.
	RespectExpectedRqTimeout bool     `protobuf:"varint,6,opt,name=respect_expected_rq_timeout,json=respectExpectedRqTimeout,proto3" json:"respect_expected_rq_timeout,omitempty"`
	XXX_NoUnkeyedLiteral     struct{} `json:"-"`
	XXX_unrecognized         []byte   `json:"-"`
	XXX_sizecache            int32    `json:"-"`
}

func (m *Router) Reset()         { *m = Router{} }
func (m *Router) String() string { return proto.CompactTextString(m) }
func (*Router) ProtoMessage()    {}
func (*Router) Descriptor() ([]byte, []int) {
	return fileDescriptor_cc1f525510d06eb8, []int{0}
}

func (m *Router) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Router.Unmarshal(m, b)
}
func (m *Router) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Router.Marshal(b, m, deterministic)
}
func (m *Router) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Router.Merge(m, src)
}
func (m *Router) XXX_Size() int {
	return xxx_messageInfo_Router.Size(m)
}
func (m *Router) XXX_DiscardUnknown() {
	xxx_messageInfo_Router.DiscardUnknown(m)
}

var xxx_messageInfo_Router proto.InternalMessageInfo

func (m *Router) GetDynamicStats() *wrappers.BoolValue {
	if m != nil {
		return m.DynamicStats
	}
	return nil
}

func (m *Router) GetStartChildSpan() bool {
	if m != nil {
		return m.StartChildSpan
	}
	return false
}

func (m *Router) GetUpstreamLog() []*v2.AccessLog {
	if m != nil {
		return m.UpstreamLog
	}
	return nil
}

func (m *Router) GetSuppressEnvoyHeaders() bool {
	if m != nil {
		return m.SuppressEnvoyHeaders
	}
	return false
}

func (m *Router) GetStrictCheckHeaders() []string {
	if m != nil {
		return m.StrictCheckHeaders
	}
	return nil
}

func (m *Router) GetRespectExpectedRqTimeout() bool {
	if m != nil {
		return m.RespectExpectedRqTimeout
	}
	return false
}

func init() {
	proto.RegisterType((*Router)(nil), "envoy.config.filter.http.router.v2.Router")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/router/v2/router.proto", fileDescriptor_cc1f525510d06eb8)
}

var fileDescriptor_cc1f525510d06eb8 = []byte{
	// 467 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xcf, 0x8a, 0xd4, 0x4c,
	0x10, 0xa7, 0xbf, 0xd9, 0x6f, 0xd0, 0xcc, 0x2a, 0x4b, 0x5c, 0x35, 0x8c, 0xb0, 0x0c, 0x73, 0x90,
	0x01, 0x49, 0x67, 0x89, 0x5e, 0x45, 0x36, 0xcb, 0x82, 0x87, 0x45, 0x96, 0x5e, 0xf1, 0x1a, 0x7a,
	0x93, 0x9a, 0x4c, 0x30, 0x49, 0xf7, 0x54, 0x77, 0xe2, 0xe4, 0xea, 0x41, 0x10, 0x3c, 0x88, 0xf8,
	0x4e, 0xbe, 0x93, 0x27, 0xe9, 0xee, 0x64, 0x55, 0x18, 0xf0, 0xd4, 0x55, 0xf5, 0xfb, 0x53, 0xd5,
	0x45, 0x79, 0x11, 0x34, 0x9d, 0xe8, 0xa3, 0x4c, 0x34, 0xeb, 0xb2, 0x88, 0xd6, 0x65, 0xa5, 0x01,
	0xa3, 0x8d, 0xd6, 0x32, 0x42, 0xd1, 0x9a, 0xb8, 0x8b, 0x87, 0x88, 0x4a, 0x14, 0x5a, 0xf8, 0x4b,
	0x2b, 0xa0, 0x4e, 0x40, 0x9d, 0x80, 0x1a, 0x01, 0x1d, 0x68, 0x5d, 0x3c, 0x3f, 0xdd, 0x67, 0xca,
	0xb3, 0x0c, 0x94, 0xaa, 0x44, 0x61, 0x2c, 0x6f, 0x13, 0xe7, 0x3a, 0x3f, 0x29, 0x84, 0x28, 0x2a,
	0x88, 0x6c, 0x76, 0xd3, 0xae, 0xa3, 0x0f, 0xc8, 0xa5, 0x04, 0x54, 0x03, 0xfe, 0xb8, 0xe3, 0x55,
	0x99, 0x73, 0x0d, 0xd1, 0x18, 0x38, 0x60, 0xf9, 0xf1, 0xc0, 0x9b, 0x32, 0xdb, 0xd8, 0x7f, 0xe5,
	0xdd, 0xcb, 0xfb, 0x86, 0xd7, 0x65, 0x96, 0x2a, 0xcd, 0xb5, 0x0a, 0xc8, 0x82, 0xac, 0x66, 0xf1,
	0x9c, 0x3a, 0x6f, 0x3a, 0x7a, 0xd3, 0x44, 0x88, 0xea, 0x1d, 0xaf, 0x5a, 0x60, 0x87, 0x83, 0xe0,
	0xda, 0xf0, 0xfd, 0x95, 0x77, 0xa4, 0x34, 0x47, 0x9d, 0x66, 0x9b, 0xb2, 0xca, 0x53, 0x25, 0x79,
	0x13, 0xfc, 0xb7, 0x20, 0xab, 0x3b, 0xec, 0xbe, 0xad, 0x9f, 0x9b, 0xf2, 0xb5, 0xe4, 0x8d, 0xff,
	0xc6, 0x3b, 0x6c, 0xa5, 0xd2, 0x08, 0xbc, 0x4e, 0x2b, 0x51, 0x04, 0x93, 0xc5, 0x64, 0x35, 0x8b,
	0x9f, 0xd1, 0x7d, 0xbb, 0xf9, 0xfd, 0xd5, 0x2e, 0xa6, 0x67, 0x36, 0xb9, 0x14, 0x05, 0x9b, 0x8d,
	0x06, 0x97, 0xa2, 0xf0, 0x5f, 0x78, 0x8f, 0x54, 0x2b, 0x25, 0x82, 0x52, 0xa9, 0xf5, 0x48, 0x37,
	0xc0, 0x73, 0x40, 0x15, 0x1c, 0xd8, 0xfe, 0xc7, 0x23, 0x7a, 0x61, 0xc0, 0xd7, 0x0e, 0xf3, 0x7f,
	0x10, 0xef, 0x58, 0x69, 0x2c, 0x33, 0x33, 0x31, 0x64, 0xef, 0x6f, 0x45, 0xff, 0x2f, 0x26, 0xab,
	0xbb, 0xc9, 0x77, 0xf2, 0x33, 0xf9, 0x4a, 0xbe, 0x91, 0x2f, 0x64, 0xf9, 0x99, 0xe0, 0x27, 0xc2,
	0x4e, 0x76, 0xa1, 0x35, 0x0f, 0xc7, 0xd6, 0x21, 0x6e, 0x43, 0x5d, 0xd6, 0x20, 0x5a, 0x1d, 0xd6,
	0x8a, 0x3d, 0xdd, 0x87, 0x4b, 0xc0, 0x50, 0x63, 0xff, 0x27, 0xef, 0xc1, 0xc8, 0xab, 0xf9, 0x2e,
	0x44, 0xd0, 0x58, 0x82, 0x62, 0x0f, 0xc7, 0xa2, 0x29, 0xf4, 0x61, 0x81, 0x32, 0x0b, 0x45, 0xc3,
	0x8e, 0xfe, 0x2e, 0x8b, 0x86, 0xf9, 0x6e, 0xe4, 0x73, 0x33, 0xf1, 0xf8, 0x93, 0x97, 0xde, 0x13,
	0x04, 0x25, 0x21, 0xd3, 0x29, 0xec, 0xcc, 0x03, 0x79, 0x8a, 0xdb, 0x74, 0xe8, 0x19, 0x4c, 0xed,
	0x12, 0x82, 0x81, 0x72, 0x31, 0x30, 0xd8, 0xf6, 0xad, 0xc3, 0x93, 0x33, 0xef, 0xb4, 0x14, 0x6e,
	0xf9, 0x12, 0xc5, 0xae, 0xa7, 0xff, 0xbe, 0xd1, 0x64, 0xe6, 0xae, 0xe6, 0xca, 0x1c, 0xc5, 0x15,
	0xb9, 0x99, 0xda, 0xeb, 0x78, 0xfe, 0x2b, 0x00, 0x00, 0xff, 0xff, 0xe0, 0xf5, 0x32, 0x8b, 0x10,
	0x03, 0x00, 0x00,
}
070701000000CF000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003900000000cilium-proxy-20200109/go/envoy/config/filter/http/squash  070701000000D0000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003C00000000cilium-proxy-20200109/go/envoy/config/filter/http/squash/v2   070701000000D1000081A4000003E800000064000000015E17A24700001978000000000000000000000000000000000000004900000000cilium-proxy-20200109/go/envoy/config/filter/http/squash/v2/squash.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/squash/v2/squash.proto

package envoy_config_filter_http_squash_v2

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	_struct "github.com/golang/protobuf/ptypes/struct"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#next-free-field: 6]
type Squash struct {
	// The name of the cluster that hosts the Squash server.
	Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"`
	// When the filter requests the Squash server to create a DebugAttachment, it will use this
	// structure as template for the body of the request. It can contain reference to environment
	// variables in the form of '{{ ENV_VAR_NAME }}'. These can be used to provide the Squash server
	// with more information to find the process to attach the debugger to. For example, in a
	// Istio/k8s environment, this will contain information on the pod:
	//
	// .. code-block:: json
	//
	//  {
	//    "spec": {
	//      "attachment": {
	//        "pod": "{{ POD_NAME }}",
	//        "namespace": "{{ POD_NAMESPACE }}"
	//      },
	//      "match_request": true
	//    }
	//  }
	//
	// (where POD_NAME, POD_NAMESPACE are configured in the pod via the Downward API)
	AttachmentTemplate *_struct.Struct `protobuf:"bytes,2,opt,name=attachment_template,json=attachmentTemplate,proto3" json:"attachment_template,omitempty"`
	// The timeout for individual requests sent to the Squash cluster. Defaults to 1 second.
	RequestTimeout *duration.Duration `protobuf:"bytes,3,opt,name=request_timeout,json=requestTimeout,proto3" json:"request_timeout,omitempty"`
	// The total timeout Squash will delay a request and wait for it to be attached. Defaults to 60
	// seconds.
	AttachmentTimeout *duration.Duration `protobuf:"bytes,4,opt,name=attachment_timeout,json=attachmentTimeout,proto3" json:"attachment_timeout,omitempty"`
	// Amount of time to poll for the status of the attachment object in the Squash server
	// (to check if has been attached). Defaults to 1 second.
	AttachmentPollPeriod *duration.Duration `protobuf:"bytes,5,opt,name=attachment_poll_period,json=attachmentPollPeriod,proto3" json:"attachment_poll_period,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *Squash) Reset()         { *m = Squash{} }
func (m *Squash) String() string { return proto.CompactTextString(m) }
func (*Squash) ProtoMessage()    {}
func (*Squash) Descriptor() ([]byte, []int) {
	return fileDescriptor_63fc8434388b1e13, []int{0}
}

func (m *Squash) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Squash.Unmarshal(m, b)
}
func (m *Squash) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Squash.Marshal(b, m, deterministic)
}
func (m *Squash) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Squash.Merge(m, src)
}
func (m *Squash) XXX_Size() int {
	return xxx_messageInfo_Squash.Size(m)
}
func (m *Squash) XXX_DiscardUnknown() {
	xxx_messageInfo_Squash.DiscardUnknown(m)
}

var xxx_messageInfo_Squash proto.InternalMessageInfo

func (m *Squash) GetCluster() string {
	if m != nil {
		return m.Cluster
	}
	return ""
}

func (m *Squash) GetAttachmentTemplate() *_struct.Struct {
	if m != nil {
		return m.AttachmentTemplate
	}
	return nil
}

func (m *Squash) GetRequestTimeout() *duration.Duration {
	if m != nil {
		return m.RequestTimeout
	}
	return nil
}

func (m *Squash) GetAttachmentTimeout() *duration.Duration {
	if m != nil {
		return m.AttachmentTimeout
	}
	return nil
}

func (m *Squash) GetAttachmentPollPeriod() *duration.Duration {
	if m != nil {
		return m.AttachmentPollPeriod
	}
	return nil
}

func init() {
	proto.RegisterType((*Squash)(nil), "envoy.config.filter.http.squash.v2.Squash")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/squash/v2/squash.proto", fileDescriptor_63fc8434388b1e13)
}

var fileDescriptor_63fc8434388b1e13 = []byte{
	// 316 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0x41, 0x4f, 0xc2, 0x30,
	0x14, 0xc7, 0x33, 0x44, 0x88, 0x25, 0xd1, 0x58, 0x8d, 0x4c, 0x62, 0x0c, 0x72, 0xe2, 0xd4, 0x1a,
	0xfc, 0x04, 0x2e, 0x1e, 0xb8, 0xb9, 0x00, 0x77, 0x52, 0x46, 0x81, 0x26, 0x65, 0x6f, 0x74, 0xaf,
	0x8b, 0x7c, 0x4f, 0x3f, 0x8d, 0x27, 0x43, 0x5b, 0x02, 0xd1, 0xc3, 0x6e, 0x2f, 0x7b, 0xfb, 0xfd,
	0xde, 0xbf, 0xf9, 0x13, 0x2e, 0xf3, 0x0a, 0xf6, 0x3c, 0x83, 0x7c, 0xa5, 0xd6, 0x7c, 0xa5, 0x34,
	0x4a, 0xc3, 0x37, 0x88, 0x05, 0x2f, 0x77, 0x56, 0x94, 0x1b, 0x5e, 0x8d, 0xc2, 0xc4, 0x0a, 0x03,
	0x08, 0x74, 0xe0, 0x00, 0xe6, 0x01, 0xe6, 0x01, 0x76, 0x00, 0x58, 0xf8, 0xad, 0x1a, 0xf5, 0x9e,
	0xd7, 0x00, 0x6b, 0x2d, 0xb9, 0x23, 0x16, 0x76, 0xc5, 0x97, 0xd6, 0x08, 0x54, 0x90, 0x7b, 0x47,
	0xef, 0xe9, 0xef, 0xbe, 0x44, 0x63, 0x33, 0x0c, 0xdb, 0x6e, 0x25, 0xb4, 0x5a, 0x0a, 0x94, 0xfc,
	0x38, 0xf8, 0xc5, 0xe0, 0xbb, 0x41, 0x5a, 0x53, 0x77, 0x84, 0xbe, 0x90, 0x76, 0xa6, 0x6d, 0x89,
	0xd2, 0xc4, 0x51, 0x3f, 0x1a, 0x5e, 0x25, 0xed, 0x9f, 0xa4, 0x69, 0x1a, 0xfd, 0x68, 0x72, 0xfc,
	0x4e, 0xc7, 0xe4, 0x4e, 0x20, 0x8a, 0x6c, 0xb3, 0x95, 0x39, 0xce, 0x51, 0x6e, 0x0b, 0x2d, 0x50,
	0xc6, 0x8d, 0x7e, 0x34, 0xec, 0x8c, 0xba, 0xcc, 0x47, 0x60, 0xc7, 0x08, 0x6c, 0xea, 0x22, 0x4c,
	0xe8, 0x89, 0x99, 0x05, 0x84, 0x26, 0xe4, 0xc6, 0xc8, 0x9d, 0x95, 0x25, 0xce, 0x51, 0x6d, 0x25,
	0x58, 0x8c, 0x2f, 0x9c, 0xe5, 0xf1, 0x9f, 0xe5, 0x23, 0x3c, 0x74, 0x72, 0x1d, 0x88, 0x99, 0x07,
	0xe8, 0x98, 0xd0, 0xf3, 0x34, 0x41, 0xd3, 0xac, 0xd3, 0xdc, 0x9e, 0xc5, 0x09, 0xa6, 0x4f, 0xf2,
	0x70, 0x66, 0x2a, 0x40, 0xeb, 0x79, 0x21, 0x8d, 0x82, 0x65, 0x7c, 0x59, 0x67, 0xbb, 0x3f, 0x81,
	0x29, 0x68, 0x9d, 0x3a, 0x2c, 0x79, 0x27, 0xaf, 0x0a, 0x98, 0xab, 0xb5, 0x30, 0xf0, 0xb5, 0x67,
	0xf5, 0x0d, 0x27, 0x1d, 0xdf, 0x43, 0x7a, 0x38, 0x91, 0x46, 0x8b, 0x96, 0xbb, 0xf5, 0xf6, 0x1b,
	0x00, 0x00, 0xff, 0xff, 0x57, 0xd9, 0x42, 0x27, 0x4e, 0x02, 0x00, 0x00,
}
070701000000D2000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003600000000cilium-proxy-20200109/go/envoy/config/filter/http/tap 070701000000D3000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003E00000000cilium-proxy-20200109/go/envoy/config/filter/http/tap/v2alpha 070701000000D4000081A4000003E800000064000000015E17A24700000EA6000000000000000000000000000000000000004800000000cilium-proxy-20200109/go/envoy/config/filter/http/tap/v2alpha/tap.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/tap/v2alpha/tap.proto

package envoy_config_filter_http_tap_v2alpha

import (
	fmt "fmt"
	v2alpha "github.com/cilium/proxy/go/envoy/config/common/tap/v2alpha"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Top level configuration for the tap filter.
type Tap struct {
	// Common configuration for the HTTP tap filter.
	CommonConfig         *v2alpha.CommonExtensionConfig `protobuf:"bytes,1,opt,name=common_config,json=commonConfig,proto3" json:"common_config,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	XXX_sizecache        int32                          `json:"-"`
}

func (m *Tap) Reset()         { *m = Tap{} }
func (m *Tap) String() string { return proto.CompactTextString(m) }
func (*Tap) ProtoMessage()    {}
func (*Tap) Descriptor() ([]byte, []int) {
	return fileDescriptor_ee77d938a401b876, []int{0}
}

func (m *Tap) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Tap.Unmarshal(m, b)
}
func (m *Tap) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Tap.Marshal(b, m, deterministic)
}
func (m *Tap) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Tap.Merge(m, src)
}
func (m *Tap) XXX_Size() int {
	return xxx_messageInfo_Tap.Size(m)
}
func (m *Tap) XXX_DiscardUnknown() {
	xxx_messageInfo_Tap.DiscardUnknown(m)
}

var xxx_messageInfo_Tap proto.InternalMessageInfo

func (m *Tap) GetCommonConfig() *v2alpha.CommonExtensionConfig {
	if m != nil {
		return m.CommonConfig
	}
	return nil
}

func init() {
	proto.RegisterType((*Tap)(nil), "envoy.config.filter.http.tap.v2alpha.Tap")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/tap/v2alpha/tap.proto", fileDescriptor_ee77d938a401b876)
}

var fileDescriptor_ee77d938a401b876 = []byte{
	// 214 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4b, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0xcb, 0xcc, 0x29, 0x49, 0x2d, 0xd2,
	0xcf, 0x28, 0x29, 0x29, 0xd0, 0x2f, 0x49, 0x2c, 0xd0, 0x2f, 0x33, 0x4a, 0xcc, 0x29, 0xc8, 0x48,
	0x04, 0xb1, 0xf5, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0x54, 0xc0, 0xea, 0xf5, 0x20, 0xea, 0xf5,
	0x20, 0xea, 0xf5, 0x40, 0xea, 0xf5, 0x40, 0x6a, 0xa0, 0xea, 0xa5, 0x74, 0x50, 0x4c, 0x4d, 0xce,
	0xcf, 0xcd, 0xcd, 0xcf, 0x43, 0x31, 0x10, 0x22, 0x04, 0x31, 0x53, 0x4a, 0xbc, 0x2c, 0x31, 0x27,
	0x33, 0x25, 0xb1, 0x24, 0x55, 0x1f, 0xc6, 0x80, 0x48, 0x28, 0xe5, 0x70, 0x31, 0x87, 0x24, 0x16,
	0x08, 0xa5, 0x72, 0xf1, 0x42, 0xd4, 0xc7, 0x43, 0x0c, 0x94, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x36,
	0x32, 0xd3, 0x43, 0x71, 0x0b, 0xd4, 0x48, 0x24, 0x67, 0xe8, 0x39, 0x83, 0x85, 0x5c, 0x2b, 0x4a,
	0x52, 0xf3, 0x8a, 0x33, 0xf3, 0xf3, 0x9c, 0xc1, 0x0a, 0x9d, 0x38, 0x7e, 0x39, 0xb1, 0x76, 0x31,
	0x32, 0x09, 0x30, 0x06, 0xf1, 0x40, 0xf4, 0x40, 0xc5, 0x1d, 0xb8, 0x8c, 0x32, 0xf3, 0x21, 0x66,
	0x16, 0x14, 0xe5, 0x57, 0x54, 0xea, 0x11, 0xe3, 0x55, 0x27, 0x8e, 0x90, 0xc4, 0x82, 0x00, 0x90,
	0x6b, 0x03, 0x18, 0x93, 0xd8, 0xc0, 0xce, 0x36, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x5b,
	0x3d, 0x01, 0x55, 0x01, 0x00, 0x00,
}
  070701000000D5000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003D00000000cilium-proxy-20200109/go/envoy/config/filter/http/transcoder  070701000000D6000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004000000000cilium-proxy-20200109/go/envoy/config/filter/http/transcoder/v2   070701000000D7000081A4000003E800000064000000015E17A24700004034000000000000000000000000000000000000005100000000cilium-proxy-20200109/go/envoy/config/filter/http/transcoder/v2/transcoder.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/http/transcoder/v2/transcoder.proto

package envoy_config_filter_http_transcoder_v2

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#next-free-field: 10]
type GrpcJsonTranscoder struct {
	// Types that are valid to be assigned to DescriptorSet:
	//	*GrpcJsonTranscoder_ProtoDescriptor
	//	*GrpcJsonTranscoder_ProtoDescriptorBin
	DescriptorSet isGrpcJsonTranscoder_DescriptorSet `protobuf_oneof:"descriptor_set"`
	// A list of strings that
	// supplies the fully qualified service names (i.e. "package_name.service_name") that
	// the transcoder will translate. If the service name doesn't exist in ``proto_descriptor``,
	// Envoy will fail at startup. The ``proto_descriptor`` may contain more services than
	// the service names specified here, but they won't be translated.
	Services []string `protobuf:"bytes,2,rep,name=services,proto3" json:"services,omitempty"`
	// Control options for response JSON. These options are passed directly to
	// `JsonPrintOptions <https://developers.google.com/protocol-buffers/docs/reference/cpp/
	// google.protobuf.util.json_util#JsonPrintOptions>`_.
	PrintOptions *GrpcJsonTranscoder_PrintOptions `protobuf:"bytes,3,opt,name=print_options,json=printOptions,proto3" json:"print_options,omitempty"`
	// Whether to keep the incoming request route after the outgoing headers have been transformed to
	// the match the upstream gRPC service. Note: This means that routes for gRPC services that are
	// not transcoded cannot be used in combination with *match_incoming_request_route*.
	MatchIncomingRequestRoute bool `protobuf:"varint,5,opt,name=match_incoming_request_route,json=matchIncomingRequestRoute,proto3" json:"match_incoming_request_route,omitempty"`
	// A list of query parameters to be ignored for transcoding method mapping.
	// By default, the transcoder filter will not transcode a request if there are any
	// unknown/invalid query parameters.
	//
	// Example :
	//
	// .. code-block:: proto
	//
	//     service Bookstore {
	//       rpc GetShelf(GetShelfRequest) returns (Shelf) {
	//         option (google.api.http) = {
	//           get: "/shelves/{shelf}"
	//         };
	//       }
	//     }
	//
	//     message GetShelfRequest {
	//       int64 shelf = 1;
	//     }
	//
	//     message Shelf {}
	//
	// The request ``/shelves/100?foo=bar`` will not be mapped to ``GetShelf``` because variable
	// binding for ``foo`` is not defined. Adding ``foo`` to ``ignored_query_parameters`` will allow
	// the same request to be mapped to ``GetShelf``.
	IgnoredQueryParameters []string `protobuf:"bytes,6,rep,name=ignored_query_parameters,json=ignoredQueryParameters,proto3" json:"ignored_query_parameters,omitempty"`
	// Whether to route methods without the ``google.api.http`` option.
	//
	// Example :
	//
	// .. code-block:: proto
	//
	//     package bookstore;
	//
	//     service Bookstore {
	//       rpc GetShelf(GetShelfRequest) returns (Shelf) {}
	//     }
	//
	//     message GetShelfRequest {
	//       int64 shelf = 1;
	//     }
	//
	//     message Shelf {}
	//
	// The client could ``post`` a json body ``{"shelf": 1234}`` with the path of
	// ``/bookstore.Bookstore/GetShelfRequest`` to call ``GetShelfRequest``.
	AutoMapping bool `protobuf:"varint,7,opt,name=auto_mapping,json=autoMapping,proto3" json:"auto_mapping,omitempty"`
	// Whether to ignore query parameters that cannot be mapped to a corresponding
	// protobuf field. Use this if you cannot control the query parameters and do
	// not know them beforehand. Otherwise use ``ignored_query_parameters``.
	// Defaults to false.
	IgnoreUnknownQueryParameters bool `protobuf:"varint,8,opt,name=ignore_unknown_query_parameters,json=ignoreUnknownQueryParameters,proto3" json:"ignore_unknown_query_parameters,omitempty"`
	// Whether to convert gRPC status headers to JSON.
	// When trailer indicates a gRPC error and there was no HTTP body, take ``google.rpc.Status``
	// from the ``grpc-status-details-bin`` header and use it as JSON body.
	// If there was no such header, make ``google.rpc.Status`` out of the ``grpc-status`` and
	// ``grpc-message`` headers.
	// The error details types must be present in the ``proto_descriptor``.
	//
	// For example, if an upstream server replies with headers:
	//
	// .. code-block:: none
	//
	//     grpc-status: 5
	//     grpc-status-details-bin:
	//         CAUaMwoqdHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucnBjLlJlcXVlc3RJbmZvEgUKA3ItMQ
	//
	// The ``grpc-status-details-bin`` header contains a base64-encoded protobuf message
	// ``google.rpc.Status``. It will be transcoded into:
	//
	// .. code-block:: none
	//
	//     HTTP/1.1 404 Not Found
	//     content-type: application/json
	//
	//     {"code":5,"details":[{"@type":"type.googleapis.com/google.rpc.RequestInfo","requestId":"r-1"}]}
	//
	//  In order to transcode the message, the ``google.rpc.RequestInfo`` type from
	//  the ``google/rpc/error_details.proto`` should be included in the configured
	//  :ref:`proto descriptor set <config_grpc_json_generate_proto_descriptor_set>`.
	ConvertGrpcStatus    bool     `protobuf:"varint,9,opt,name=convert_grpc_status,json=convertGrpcStatus,proto3" json:"convert_grpc_status,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GrpcJsonTranscoder) Reset()         { *m = GrpcJsonTranscoder{} }
func (m *GrpcJsonTranscoder) String() string { return proto.CompactTextString(m) }
func (*GrpcJsonTranscoder) ProtoMessage()    {}
func (*GrpcJsonTranscoder) Descriptor() ([]byte, []int) {
	return fileDescriptor_540f2f6de8b0585c, []int{0}
}

func (m *GrpcJsonTranscoder) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GrpcJsonTranscoder.Unmarshal(m, b)
}
func (m *GrpcJsonTranscoder) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GrpcJsonTranscoder.Marshal(b, m, deterministic)
}
func (m *GrpcJsonTranscoder) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GrpcJsonTranscoder.Merge(m, src)
}
func (m *GrpcJsonTranscoder) XXX_Size() int {
	return xxx_messageInfo_GrpcJsonTranscoder.Size(m)
}
func (m *GrpcJsonTranscoder) XXX_DiscardUnknown() {
	xxx_messageInfo_GrpcJsonTranscoder.DiscardUnknown(m)
}

var xxx_messageInfo_GrpcJsonTranscoder proto.InternalMessageInfo

type isGrpcJsonTranscoder_DescriptorSet interface {
	isGrpcJsonTranscoder_DescriptorSet()
}

type GrpcJsonTranscoder_ProtoDescriptor struct {
	ProtoDescriptor string `protobuf:"bytes,1,opt,name=proto_descriptor,json=protoDescriptor,proto3,oneof"`
}

type GrpcJsonTranscoder_ProtoDescriptorBin struct {
	ProtoDescriptorBin []byte `protobuf:"bytes,4,opt,name=proto_descriptor_bin,json=protoDescriptorBin,proto3,oneof"`
}

func (*GrpcJsonTranscoder_ProtoDescriptor) isGrpcJsonTranscoder_DescriptorSet() {}

func (*GrpcJsonTranscoder_ProtoDescriptorBin) isGrpcJsonTranscoder_DescriptorSet() {}

func (m *GrpcJsonTranscoder) GetDescriptorSet() isGrpcJsonTranscoder_DescriptorSet {
	if m != nil {
		return m.DescriptorSet
	}
	return nil
}

func (m *GrpcJsonTranscoder) GetProtoDescriptor() string {
	if x, ok := m.GetDescriptorSet().(*GrpcJsonTranscoder_ProtoDescriptor); ok {
		return x.ProtoDescriptor
	}
	return ""
}

func (m *GrpcJsonTranscoder) GetProtoDescriptorBin() []byte {
	if x, ok := m.GetDescriptorSet().(*GrpcJsonTranscoder_ProtoDescriptorBin); ok {
		return x.ProtoDescriptorBin
	}
	return nil
}

func (m *GrpcJsonTranscoder) GetServices() []string {
	if m != nil {
		return m.Services
	}
	return nil
}

func (m *GrpcJsonTranscoder) GetPrintOptions() *GrpcJsonTranscoder_PrintOptions {
	if m != nil {
		return m.PrintOptions
	}
	return nil
}

func (m *GrpcJsonTranscoder) GetMatchIncomingRequestRoute() bool {
	if m != nil {
		return m.MatchIncomingRequestRoute
	}
	return false
}

func (m *GrpcJsonTranscoder) GetIgnoredQueryParameters() []string {
	if m != nil {
		return m.IgnoredQueryParameters
	}
	return nil
}

func (m *GrpcJsonTranscoder) GetAutoMapping() bool {
	if m != nil {
		return m.AutoMapping
	}
	return false
}

func (m *GrpcJsonTranscoder) GetIgnoreUnknownQueryParameters() bool {
	if m != nil {
		return m.IgnoreUnknownQueryParameters
	}
	return false
}

func (m *GrpcJsonTranscoder) GetConvertGrpcStatus() bool {
	if m != nil {
		return m.ConvertGrpcStatus
	}
	return false
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*GrpcJsonTranscoder) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*GrpcJsonTranscoder_ProtoDescriptor)(nil),
		(*GrpcJsonTranscoder_ProtoDescriptorBin)(nil),
	}
}

type GrpcJsonTranscoder_PrintOptions struct {
	// Whether to add spaces, line breaks and indentation to make the JSON
	// output easy to read. Defaults to false.
	AddWhitespace bool `protobuf:"varint,1,opt,name=add_whitespace,json=addWhitespace,proto3" json:"add_whitespace,omitempty"`
	// Whether to always print primitive fields. By default primitive
	// fields with default values will be omitted in JSON output. For
	// example, an int32 field set to 0 will be omitted. Setting this flag to
	// true will override the default behavior and print primitive fields
	// regardless of their values. Defaults to false.
	AlwaysPrintPrimitiveFields bool `protobuf:"varint,2,opt,name=always_print_primitive_fields,json=alwaysPrintPrimitiveFields,proto3" json:"always_print_primitive_fields,omitempty"`
	// Whether to always print enums as ints. By default they are rendered
	// as strings. Defaults to false.
	AlwaysPrintEnumsAsInts bool `protobuf:"varint,3,opt,name=always_print_enums_as_ints,json=alwaysPrintEnumsAsInts,proto3" json:"always_print_enums_as_ints,omitempty"`
	// Whether to preserve proto field names. By default protobuf will
	// generate JSON field names using the ``json_name`` option, or lower camel case,
	// in that order. Setting this flag will preserve the original field names. Defaults to false.
	PreserveProtoFieldNames bool     `protobuf:"varint,4,opt,name=preserve_proto_field_names,json=preserveProtoFieldNames,proto3" json:"preserve_proto_field_names,omitempty"`
	XXX_NoUnkeyedLiteral    struct{} `json:"-"`
	XXX_unrecognized        []byte   `json:"-"`
	XXX_sizecache           int32    `json:"-"`
}

func (m *GrpcJsonTranscoder_PrintOptions) Reset()         { *m = GrpcJsonTranscoder_PrintOptions{} }
func (m *GrpcJsonTranscoder_PrintOptions) String() string { return proto.CompactTextString(m) }
func (*GrpcJsonTranscoder_PrintOptions) ProtoMessage()    {}
func (*GrpcJsonTranscoder_PrintOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_540f2f6de8b0585c, []int{0, 0}
}

func (m *GrpcJsonTranscoder_PrintOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_GrpcJsonTranscoder_PrintOptions.Unmarshal(m, b)
}
func (m *GrpcJsonTranscoder_PrintOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_GrpcJsonTranscoder_PrintOptions.Marshal(b, m, deterministic)
}
func (m *GrpcJsonTranscoder_PrintOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_GrpcJsonTranscoder_PrintOptions.Merge(m, src)
}
func (m *GrpcJsonTranscoder_PrintOptions) XXX_Size() int {
	return xxx_messageInfo_GrpcJsonTranscoder_PrintOptions.Size(m)
}
func (m *GrpcJsonTranscoder_PrintOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_GrpcJsonTranscoder_PrintOptions.DiscardUnknown(m)
}

var xxx_messageInfo_GrpcJsonTranscoder_PrintOptions proto.InternalMessageInfo

func (m *GrpcJsonTranscoder_PrintOptions) GetAddWhitespace() bool {
	if m != nil {
		return m.AddWhitespace
	}
	return false
}

func (m *GrpcJsonTranscoder_PrintOptions) GetAlwaysPrintPrimitiveFields() bool {
	if m != nil {
		return m.AlwaysPrintPrimitiveFields
	}
	return false
}

func (m *GrpcJsonTranscoder_PrintOptions) GetAlwaysPrintEnumsAsInts() bool {
	if m != nil {
		return m.AlwaysPrintEnumsAsInts
	}
	return false
}

func (m *GrpcJsonTranscoder_PrintOptions) GetPreserveProtoFieldNames() bool {
	if m != nil {
		return m.PreserveProtoFieldNames
	}
	return false
}

func init() {
	proto.RegisterType((*GrpcJsonTranscoder)(nil), "envoy.config.filter.http.transcoder.v2.GrpcJsonTranscoder")
	proto.RegisterType((*GrpcJsonTranscoder_PrintOptions)(nil), "envoy.config.filter.http.transcoder.v2.GrpcJsonTranscoder.PrintOptions")
}

func init() {
	proto.RegisterFile("envoy/config/filter/http/transcoder/v2/transcoder.proto", fileDescriptor_540f2f6de8b0585c)
}

var fileDescriptor_540f2f6de8b0585c = []byte{
	// 562 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x41, 0x6f, 0xd3, 0x30,
	0x1c, 0xc5, 0x97, 0x8d, 0x8d, 0xcc, 0xeb, 0x36, 0x30, 0xb0, 0x85, 0x6a, 0x88, 0x82, 0x00, 0x55,
	0x42, 0x4a, 0xa4, 0x82, 0x04, 0x82, 0x03, 0x5a, 0xc4, 0xd8, 0x86, 0x04, 0x94, 0x00, 0xe2, 0x68,
	0x79, 0xc9, 0xbf, 0xad, 0x45, 0x63, 0x7b, 0xb6, 0x93, 0xd2, 0xaf, 0xc1, 0xb7, 0xe0, 0xe3, 0x71,
	0x43, 0x9c, 0x90, 0xed, 0xb6, 0x84, 0xee, 0xb2, 0x5b, 0xec, 0xf7, 0x7b, 0xff, 0x17, 0xdb, 0x0f,
	0x3d, 0x03, 0x5e, 0x8b, 0x69, 0x92, 0x0b, 0x3e, 0x60, 0xc3, 0x64, 0xc0, 0xc6, 0x06, 0x54, 0x32,
	0x32, 0x46, 0x26, 0x46, 0x51, 0xae, 0x73, 0x51, 0x80, 0x4a, 0xea, 0x5e, 0x63, 0x15, 0x4b, 0x25,
	0x8c, 0xc0, 0x8f, 0x9c, 0x31, 0xf6, 0xc6, 0xd8, 0x1b, 0x63, 0x6b, 0x8c, 0x1b, 0x68, 0xdd, 0x6b,
	0xef, 0xd7, 0x74, 0xcc, 0x0a, 0x6a, 0x20, 0x99, 0x7f, 0xf8, 0x01, 0xf7, 0x7f, 0x6e, 0x20, 0x7c,
	0xac, 0x64, 0xfe, 0x56, 0x0b, 0xfe, 0x79, 0x61, 0xc1, 0x8f, 0xd1, 0x35, 0xa7, 0x93, 0x02, 0x74,
	0xae, 0x98, 0x34, 0x42, 0x45, 0x41, 0x27, 0xe8, 0x6e, 0x9e, 0xac, 0x64, 0xbb, 0x4e, 0x79, 0xbd,
	0x10, 0x70, 0x0f, 0xdd, 0x5c, 0x86, 0xc9, 0x19, 0xe3, 0xd1, 0x95, 0x4e, 0xd0, 0x6d, 0x9d, 0xac,
	0x64, 0x78, 0xc9, 0x90, 0x32, 0x8e, 0x1f, 0xa0, 0x50, 0x83, 0xaa, 0x59, 0x0e, 0x3a, 0x5a, 0xed,
	0xac, 0x75, 0x37, 0xd3, 0xf0, 0x4f, 0xba, 0xfe, 0x23, 0x58, 0x0d, 0x83, 0x6c, 0xa1, 0xe0, 0x31,
	0xda, 0x96, 0x8a, 0x71, 0x43, 0x84, 0x34, 0x4c, 0x70, 0x1d, 0xad, 0x75, 0x82, 0xee, 0x56, 0xef,
	0x38, 0xbe, 0xdc, 0xb1, 0xe3, 0x8b, 0x27, 0x8b, 0xfb, 0x76, 0xde, 0x07, 0x3f, 0x2e, 0x6b, 0xc9,
	0xc6, 0x0a, 0xbf, 0x42, 0x07, 0x25, 0x35, 0xf9, 0x88, 0x30, 0x9e, 0x8b, 0x92, 0xf1, 0x21, 0x51,
	0x70, 0x5e, 0x81, 0x36, 0x44, 0x89, 0xca, 0x40, 0xb4, 0xde, 0x09, 0xba, 0x61, 0x76, 0xdb, 0x31,
	0xa7, 0x33, 0x24, 0xf3, 0x44, 0x66, 0x01, 0xfc, 0x1c, 0x45, 0x6c, 0xc8, 0x85, 0x82, 0x82, 0x9c,
	0x57, 0xa0, 0xa6, 0x44, 0x52, 0x45, 0x4b, 0x30, 0xa0, 0x74, 0xb4, 0x61, 0x0f, 0x99, 0xed, 0xcd,
	0xf4, 0x8f, 0x56, 0xee, 0x2f, 0x54, 0x7c, 0x0f, 0xb5, 0x68, 0x65, 0x04, 0x29, 0xa9, 0x94, 0x8c,
	0x0f, 0xa3, 0xab, 0x2e, 0x6a, 0xcb, 0xee, 0xbd, 0xf3, 0x5b, 0xf8, 0x08, 0xdd, 0xf5, 0x66, 0x52,
	0xf1, 0x6f, 0x5c, 0x4c, 0xf8, 0xc5, 0x8c, 0xd0, 0xb9, 0x0e, 0x3c, 0xf6, 0xc5, 0x53, 0xcb, 0x49,
	0x31, 0xba, 0x91, 0x0b, 0x5e, 0x83, 0x32, 0x64, 0xa8, 0x64, 0x4e, 0xb4, 0xa1, 0xa6, 0xd2, 0xd1,
	0xa6, 0xb3, 0x5e, 0x9f, 0x49, 0xf6, 0xde, 0x3e, 0x39, 0xa1, 0xfd, 0x2b, 0x40, 0xad, 0xe6, 0x9d,
	0xe1, 0x87, 0x68, 0x87, 0x16, 0x05, 0x99, 0x8c, 0x98, 0x01, 0x2d, 0x69, 0x0e, 0xae, 0x18, 0x61,
	0xb6, 0x4d, 0x8b, 0xe2, 0xeb, 0x62, 0x13, 0x1f, 0xa2, 0x3b, 0x74, 0x3c, 0xa1, 0x53, 0x4d, 0xfc,
	0x0b, 0x4a, 0xc5, 0x4a, 0x66, 0x58, 0x0d, 0x64, 0xc0, 0x60, 0x5c, 0xd8, 0x57, 0xb7, 0xae, 0xb6,
	0x87, 0x5c, 0x42, 0x7f, 0x8e, 0xbc, 0x71, 0x04, 0x7e, 0x81, 0xda, 0xff, 0x8d, 0x00, 0x5e, 0x95,
	0x9a, 0x50, 0x4d, 0x18, 0x37, 0xbe, 0x0a, 0x61, 0xb6, 0xd7, 0xf0, 0x1f, 0x59, 0xfd, 0x50, 0x9f,
	0x72, 0xa3, 0xf1, 0x4b, 0xd4, 0x96, 0x0a, 0x6c, 0x91, 0x80, 0xf8, 0x72, 0xba, 0x58, 0xc2, 0x69,
	0x09, 0xda, 0x35, 0x33, 0xcc, 0xf6, 0xe7, 0x44, 0xdf, 0x02, 0x2e, 0xf4, 0xbd, 0x95, 0xd3, 0x5b,
	0x68, 0xa7, 0x51, 0x65, 0x0d, 0x06, 0xaf, 0xfd, 0x4e, 0x83, 0xf4, 0x14, 0x3d, 0x65, 0xc2, 0x57,
	0x4f, 0x2a, 0xf1, 0x7d, 0x7a, 0xc9, 0x16, 0xa6, 0xbb, 0xff, 0xea, 0xe7, 0x92, 0xfa, 0xc1, 0xd9,
	0x86, 0xfb, 0xa7, 0x27, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x14, 0x4c, 0x05, 0x21, 0xf9, 0x03,
	0x00, 0x00,
}
070701000000D8000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003600000000cilium-proxy-20200109/go/envoy/config/filter/listener 070701000000D9000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004300000000cilium-proxy-20200109/go/envoy/config/filter/listener/original_src    070701000000DA000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004C00000000cilium-proxy-20200109/go/envoy/config/filter/listener/original_src/v2alpha1   070701000000DB000081A4000003E800000064000000015E17A24700001123000000000000000000000000000000000000005F00000000cilium-proxy-20200109/go/envoy/config/filter/listener/original_src/v2alpha1/original_src.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/listener/original_src/v2alpha1/original_src.proto

package envoy_config_filter_listener_original_src_v2alpha1

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// The Original Src filter binds upstream connections to the original source address determined
// for the connection. This address could come from something like the Proxy Protocol filter, or it
// could come from trusted http headers.
type OriginalSrc struct {
	// Whether to bind the port to the one used in the original downstream connection.
	// [#not-implemented-hide:]
	BindPort bool `protobuf:"varint,1,opt,name=bind_port,json=bindPort,proto3" json:"bind_port,omitempty"`
	// Sets the SO_MARK option on the upstream connection's socket to the provided value. Used to
	// ensure that non-local addresses may be routed back through envoy when binding to the original
	// source address. The option will not be applied if the mark is 0.
	Mark                 uint32   `protobuf:"varint,2,opt,name=mark,proto3" json:"mark,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *OriginalSrc) Reset()         { *m = OriginalSrc{} }
func (m *OriginalSrc) String() string { return proto.CompactTextString(m) }
func (*OriginalSrc) ProtoMessage()    {}
func (*OriginalSrc) Descriptor() ([]byte, []int) {
	return fileDescriptor_19e4bd40556a6972, []int{0}
}

func (m *OriginalSrc) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OriginalSrc.Unmarshal(m, b)
}
func (m *OriginalSrc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OriginalSrc.Marshal(b, m, deterministic)
}
func (m *OriginalSrc) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OriginalSrc.Merge(m, src)
}
func (m *OriginalSrc) XXX_Size() int {
	return xxx_messageInfo_OriginalSrc.Size(m)
}
func (m *OriginalSrc) XXX_DiscardUnknown() {
	xxx_messageInfo_OriginalSrc.DiscardUnknown(m)
}

var xxx_messageInfo_OriginalSrc proto.InternalMessageInfo

func (m *OriginalSrc) GetBindPort() bool {
	if m != nil {
		return m.BindPort
	}
	return false
}

func (m *OriginalSrc) GetMark() uint32 {
	if m != nil {
		return m.Mark
	}
	return 0
}

func init() {
	proto.RegisterType((*OriginalSrc)(nil), "envoy.config.filter.listener.original_src.v2alpha1.OriginalSrc")
}

func init() {
	proto.RegisterFile("envoy/config/filter/listener/original_src/v2alpha1/original_src.proto", fileDescriptor_19e4bd40556a6972)
}

var fileDescriptor_19e4bd40556a6972 = []byte{
	// 201 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0xce, 0x41, 0x4b, 0x87, 0x30,
	0x18, 0xc7, 0x71, 0x16, 0x11, 0xb6, 0x08, 0x62, 0x97, 0xa4, 0x2e, 0xd2, 0xc9, 0xd3, 0x46, 0x76,
	0x8f, 0x10, 0x3a, 0x27, 0x06, 0x5d, 0x65, 0xea, 0xb4, 0x87, 0xd6, 0x9e, 0xf1, 0x38, 0x24, 0xdf,
	0x7d, 0x38, 0x13, 0xf2, 0xf8, 0xbf, 0x3d, 0x3c, 0xf0, 0xfb, 0xf0, 0xe5, 0xaf, 0xc6, 0xcd, 0xb8,
	0xa8, 0x0e, 0xdd, 0x00, 0xa3, 0x1a, 0xc0, 0x06, 0x43, 0xca, 0xc2, 0x14, 0x8c, 0x33, 0xa4, 0x90,
	0x60, 0x04, 0xa7, 0x6d, 0x33, 0x51, 0xa7, 0xe6, 0x42, 0x5b, 0xff, 0xa9, 0x1f, 0x0f, 0x5f, 0xe9,
	0x09, 0x03, 0x8a, 0x22, 0x32, 0x72, 0x63, 0xe4, 0xc6, 0xc8, 0x9d, 0x91, 0x87, 0xc1, 0xce, 0xdc,
	0xdd, 0xce, 0xda, 0x42, 0xaf, 0x83, 0x51, 0xfb, 0xb1, 0x61, 0x0f, 0xcf, 0xfc, 0xea, 0xed, 0x6f,
	0xf1, 0x4e, 0x9d, 0xb8, 0xe7, 0x97, 0x2d, 0xb8, 0xbe, 0xf1, 0x48, 0x21, 0x65, 0x19, 0xcb, 0x93,
	0x3a, 0x59, 0x1f, 0x15, 0x52, 0x10, 0x82, 0x9f, 0x7f, 0x6b, 0xfa, 0x4a, 0xcf, 0x32, 0x96, 0x5f,
	0xd7, 0xf1, 0x2e, 0x3f, 0xf8, 0x0b, 0xa0, 0x8c, 0x45, 0x9e, 0xf0, 0x67, 0x91, 0xa7, 0xc7, 0x95,
	0x37, 0xff, 0x0a, 0xaa, 0xb5, 0xaa, 0x62, 0xed, 0x45, 0xcc, 0x7b, 0xfa, 0x0d, 0x00, 0x00, 0xff,
	0xff, 0xd4, 0x1c, 0x5e, 0x8b, 0x34, 0x01, 0x00, 0x00,
}
 070701000000DC000041ED000003E8000000640000000E5E17A24700000000000000000000000000000000000000000000003500000000cilium-proxy-20200109/go/envoy/config/filter/network  070701000000DD000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004500000000cilium-proxy-20200109/go/envoy/config/filter/network/client_ssl_auth  070701000000DE000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004800000000cilium-proxy-20200109/go/envoy/config/filter/network/client_ssl_auth/v2   070701000000DF000081A4000003E800000064000000015E17A24700001848000000000000000000000000000000000000005E00000000cilium-proxy-20200109/go/envoy/config/filter/network/client_ssl_auth/v2/client_ssl_auth.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/network/client_ssl_auth/v2/client_ssl_auth.proto

package envoy_config_filter_network_client_ssl_auth_v2

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type ClientSSLAuth struct {
	// The :ref:`cluster manager <arch_overview_cluster_manager>` cluster that runs
	// the authentication service. The filter will connect to the service every 60s to fetch the list
	// of principals. The service must support the expected :ref:`REST API
	// <config_network_filters_client_ssl_auth_rest_api>`.
	AuthApiCluster string `protobuf:"bytes,1,opt,name=auth_api_cluster,json=authApiCluster,proto3" json:"auth_api_cluster,omitempty"`
	// The prefix to use when emitting :ref:`statistics
	// <config_network_filters_client_ssl_auth_stats>`.
	StatPrefix string `protobuf:"bytes,2,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"`
	// Time in milliseconds between principal refreshes from the
	// authentication service. Default is 60000 (60s). The actual fetch time
	// will be this value plus a random jittered value between
	// 0-refresh_delay_ms milliseconds.
	RefreshDelay *duration.Duration `protobuf:"bytes,3,opt,name=refresh_delay,json=refreshDelay,proto3" json:"refresh_delay,omitempty"`
	// An optional list of IP address and subnet masks that should be white
	// listed for access by the filter. If no list is provided, there is no
	// IP white list.
	IpWhiteList          []*core.CidrRange `protobuf:"bytes,4,rep,name=ip_white_list,json=ipWhiteList,proto3" json:"ip_white_list,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *ClientSSLAuth) Reset()         { *m = ClientSSLAuth{} }
func (m *ClientSSLAuth) String() string { return proto.CompactTextString(m) }
func (*ClientSSLAuth) ProtoMessage()    {}
func (*ClientSSLAuth) Descriptor() ([]byte, []int) {
	return fileDescriptor_2c05e9c9b57da130, []int{0}
}

func (m *ClientSSLAuth) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClientSSLAuth.Unmarshal(m, b)
}
func (m *ClientSSLAuth) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClientSSLAuth.Marshal(b, m, deterministic)
}
func (m *ClientSSLAuth) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClientSSLAuth.Merge(m, src)
}
func (m *ClientSSLAuth) XXX_Size() int {
	return xxx_messageInfo_ClientSSLAuth.Size(m)
}
func (m *ClientSSLAuth) XXX_DiscardUnknown() {
	xxx_messageInfo_ClientSSLAuth.DiscardUnknown(m)
}

var xxx_messageInfo_ClientSSLAuth proto.InternalMessageInfo

func (m *ClientSSLAuth) GetAuthApiCluster() string {
	if m != nil {
		return m.AuthApiCluster
	}
	return ""
}

func (m *ClientSSLAuth) GetStatPrefix() string {
	if m != nil {
		return m.StatPrefix
	}
	return ""
}

func (m *ClientSSLAuth) GetRefreshDelay() *duration.Duration {
	if m != nil {
		return m.RefreshDelay
	}
	return nil
}

func (m *ClientSSLAuth) GetIpWhiteList() []*core.CidrRange {
	if m != nil {
		return m.IpWhiteList
	}
	return nil
}

func init() {
	proto.RegisterType((*ClientSSLAuth)(nil), "envoy.config.filter.network.client_ssl_auth.v2.ClientSSLAuth")
}

func init() {
	proto.RegisterFile("envoy/config/filter/network/client_ssl_auth/v2/client_ssl_auth.proto", fileDescriptor_2c05e9c9b57da130)
}

var fileDescriptor_2c05e9c9b57da130 = []byte{
	// 347 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x91, 0xb1, 0x6b, 0xe3, 0x30,
	0x18, 0xc5, 0x71, 0x12, 0xee, 0x38, 0xf9, 0x72, 0x1c, 0x5e, 0xce, 0x17, 0x8e, 0xab, 0xe9, 0xe4,
	0x49, 0xa2, 0xee, 0x5a, 0x4a, 0xe3, 0x64, 0xcc, 0x10, 0x9c, 0x42, 0x47, 0xa1, 0xc4, 0xb2, 0xfd,
	0x51, 0x61, 0x09, 0x49, 0x76, 0x92, 0x7f, 0xba, 0x7f, 0x40, 0xa7, 0x22, 0xcb, 0x19, 0x9a, 0xad,
	0x9b, 0xa4, 0xf7, 0xbe, 0xdf, 0xf7, 0x78, 0x42, 0x6b, 0xde, 0xf6, 0xf2, 0x4c, 0x0e, 0xb2, 0xad,
	0xa0, 0x26, 0x15, 0x08, 0xcb, 0x35, 0x69, 0xb9, 0x3d, 0x4a, 0xfd, 0x4a, 0x0e, 0x02, 0x78, 0x6b,
	0xa9, 0x31, 0x82, 0xb2, 0xce, 0x36, 0xa4, 0xcf, 0xae, 0x9f, 0xb0, 0xd2, 0xd2, 0xca, 0x08, 0x0f,
	0x14, 0xec, 0x29, 0xd8, 0x53, 0xf0, 0x48, 0xc1, 0xd7, 0x23, 0x7d, 0xb6, 0xb8, 0xf1, 0x5b, 0x99,
	0x82, 0x81, 0x29, 0x35, 0x27, 0xac, 0x2c, 0x35, 0x37, 0xc6, 0x03, 0x17, 0xff, 0x6b, 0x29, 0x6b,
	0xc1, 0xc9, 0x70, 0xdb, 0x77, 0x15, 0x29, 0x3b, 0xcd, 0x2c, 0xc8, 0x76, 0xd4, 0xff, 0xf4, 0x4c,
	0x40, 0xc9, 0x2c, 0x27, 0x97, 0x83, 0x17, 0x6e, 0xdf, 0x02, 0x34, 0x5f, 0x0d, 0x0b, 0x77, 0xbb,
	0xcd, 0xb2, 0xb3, 0x4d, 0x74, 0x87, 0x7e, 0xbb, 0xb5, 0x94, 0x29, 0xa0, 0x07, 0xd1, 0x19, 0xcb,
	0x75, 0x1c, 0x24, 0x41, 0xfa, 0x23, 0xff, 0xfe, 0x9e, 0xcf, 0xf4, 0x24, 0x09, 0x8a, 0x5f, 0xce,
	0xb0, 0x54, 0xb0, 0xf2, 0x72, 0x94, 0xa2, 0xd0, 0x58, 0x66, 0xa9, 0xd2, 0xbc, 0x82, 0x53, 0x3c,
	0xf9, 0xec, 0x46, 0x4e, 0xdb, 0x0e, 0x52, 0xf4, 0x88, 0xe6, 0x9a, 0x57, 0x9a, 0x9b, 0x86, 0x96,
	0x5c, 0xb0, 0x73, 0x3c, 0x4d, 0x82, 0x34, 0xcc, 0xfe, 0x62, 0x9f, 0x1f, 0x5f, 0xf2, 0xe3, 0xf5,
	0x98, 0xbf, 0xf8, 0x39, 0xfa, 0xd7, 0xce, 0x1e, 0x3d, 0xa1, 0x39, 0x28, 0x7a, 0x6c, 0xc0, 0x72,
	0x2a, 0xc0, 0xd8, 0x78, 0x96, 0x4c, 0xd3, 0x30, 0xfb, 0x37, 0x16, 0xca, 0x14, 0xe0, 0x3e, 0xc3,
	0xae, 0x20, 0xbc, 0x82, 0x52, 0x17, 0xac, 0xad, 0x79, 0x11, 0x82, 0x7a, 0x71, 0x13, 0x1b, 0x30,
	0x36, 0x7f, 0x46, 0x0f, 0x20, 0xbd, 0x5d, 0x69, 0x79, 0x3a, 0x7f, 0xf1, 0x2b, 0xf2, 0x68, 0x6c,
	0xcb, 0x08, 0xd7, 0xd6, 0xd6, 0xe5, 0xdd, 0x06, 0xfb, 0x6f, 0x43, 0xf0, 0xfb, 0x8f, 0x00, 0x00,
	0x00, 0xff, 0xff, 0xaf, 0x45, 0x93, 0xbe, 0x1f, 0x02, 0x00, 0x00,
}
070701000000E0000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004100000000cilium-proxy-20200109/go/envoy/config/filter/network/dubbo_proxy  070701000000E1000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004A00000000cilium-proxy-20200109/go/envoy/config/filter/network/dubbo_proxy/v2alpha1 070701000000E2000081A4000003E800000064000000015E17A2470000261D000000000000000000000000000000000000005C00000000cilium-proxy-20200109/go/envoy/config/filter/network/dubbo_proxy/v2alpha1/dubbo_proxy.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/network/dubbo_proxy/v2alpha1/dubbo_proxy.proto

package envoy_config_filter_network_dubbo_proxy_v2alpha1

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Dubbo Protocol types supported by Envoy.
type ProtocolType int32

const (
	// the default protocol.
	ProtocolType_Dubbo ProtocolType = 0
)

var ProtocolType_name = map[int32]string{
	0: "Dubbo",
}

var ProtocolType_value = map[string]int32{
	"Dubbo": 0,
}

func (x ProtocolType) String() string {
	return proto.EnumName(ProtocolType_name, int32(x))
}

func (ProtocolType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8ee9c82d7d1be64c, []int{0}
}

// Dubbo Serialization types supported by Envoy.
type SerializationType int32

const (
	// the default serialization protocol.
	SerializationType_Hessian2 SerializationType = 0
)

var SerializationType_name = map[int32]string{
	0: "Hessian2",
}

var SerializationType_value = map[string]int32{
	"Hessian2": 0,
}

func (x SerializationType) String() string {
	return proto.EnumName(SerializationType_name, int32(x))
}

func (SerializationType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8ee9c82d7d1be64c, []int{1}
}

// [#next-free-field: 6]
type DubboProxy struct {
	// The human readable prefix to use when emitting statistics.
	StatPrefix string `protobuf:"bytes,1,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"`
	// Configure the protocol used.
	ProtocolType ProtocolType `protobuf:"varint,2,opt,name=protocol_type,json=protocolType,proto3,enum=envoy.config.filter.network.dubbo_proxy.v2alpha1.ProtocolType" json:"protocol_type,omitempty"`
	// Configure the serialization protocol used.
	SerializationType SerializationType `protobuf:"varint,3,opt,name=serialization_type,json=serializationType,proto3,enum=envoy.config.filter.network.dubbo_proxy.v2alpha1.SerializationType" json:"serialization_type,omitempty"`
	// The route table for the connection manager is static and is specified in this property.
	RouteConfig []*RouteConfiguration `protobuf:"bytes,4,rep,name=route_config,json=routeConfig,proto3" json:"route_config,omitempty"`
	// A list of individual Dubbo filters that make up the filter chain for requests made to the
	// Dubbo proxy. Order matters as the filters are processed sequentially. For backwards
	// compatibility, if no dubbo_filters are specified, a default Dubbo router filter
	// (`envoy.filters.dubbo.router`) is used.
	DubboFilters         []*DubboFilter `protobuf:"bytes,5,rep,name=dubbo_filters,json=dubboFilters,proto3" json:"dubbo_filters,omitempty"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

func (m *DubboProxy) Reset()         { *m = DubboProxy{} }
func (m *DubboProxy) String() string { return proto.CompactTextString(m) }
func (*DubboProxy) ProtoMessage()    {}
func (*DubboProxy) Descriptor() ([]byte, []int) {
	return fileDescriptor_8ee9c82d7d1be64c, []int{0}
}

func (m *DubboProxy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DubboProxy.Unmarshal(m, b)
}
func (m *DubboProxy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DubboProxy.Marshal(b, m, deterministic)
}
func (m *DubboProxy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DubboProxy.Merge(m, src)
}
func (m *DubboProxy) XXX_Size() int {
	return xxx_messageInfo_DubboProxy.Size(m)
}
func (m *DubboProxy) XXX_DiscardUnknown() {
	xxx_messageInfo_DubboProxy.DiscardUnknown(m)
}

var xxx_messageInfo_DubboProxy proto.InternalMessageInfo

func (m *DubboProxy) GetStatPrefix() string {
	if m != nil {
		return m.StatPrefix
	}
	return ""
}

func (m *DubboProxy) GetProtocolType() ProtocolType {
	if m != nil {
		return m.ProtocolType
	}
	return ProtocolType_Dubbo
}

func (m *DubboProxy) GetSerializationType() SerializationType {
	if m != nil {
		return m.SerializationType
	}
	return SerializationType_Hessian2
}

func (m *DubboProxy) GetRouteConfig() []*RouteConfiguration {
	if m != nil {
		return m.RouteConfig
	}
	return nil
}

func (m *DubboProxy) GetDubboFilters() []*DubboFilter {
	if m != nil {
		return m.DubboFilters
	}
	return nil
}

// DubboFilter configures a Dubbo filter.
type DubboFilter struct {
	// The name of the filter to instantiate. The name must match a supported
	// filter.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Filter specific configuration which depends on the filter being
	// instantiated. See the supported filters for further documentation.
	Config               *any.Any `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *DubboFilter) Reset()         { *m = DubboFilter{} }
func (m *DubboFilter) String() string { return proto.CompactTextString(m) }
func (*DubboFilter) ProtoMessage()    {}
func (*DubboFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_8ee9c82d7d1be64c, []int{1}
}

func (m *DubboFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DubboFilter.Unmarshal(m, b)
}
func (m *DubboFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DubboFilter.Marshal(b, m, deterministic)
}
func (m *DubboFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DubboFilter.Merge(m, src)
}
func (m *DubboFilter) XXX_Size() int {
	return xxx_messageInfo_DubboFilter.Size(m)
}
func (m *DubboFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_DubboFilter.DiscardUnknown(m)
}

var xxx_messageInfo_DubboFilter proto.InternalMessageInfo

func (m *DubboFilter) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *DubboFilter) GetConfig() *any.Any {
	if m != nil {
		return m.Config
	}
	return nil
}

func init() {
	proto.RegisterEnum("envoy.config.filter.network.dubbo_proxy.v2alpha1.ProtocolType", ProtocolType_name, ProtocolType_value)
	proto.RegisterEnum("envoy.config.filter.network.dubbo_proxy.v2alpha1.SerializationType", SerializationType_name, SerializationType_value)
	proto.RegisterType((*DubboProxy)(nil), "envoy.config.filter.network.dubbo_proxy.v2alpha1.DubboProxy")
	proto.RegisterType((*DubboFilter)(nil), "envoy.config.filter.network.dubbo_proxy.v2alpha1.DubboFilter")
}

func init() {
	proto.RegisterFile("envoy/config/filter/network/dubbo_proxy/v2alpha1/dubbo_proxy.proto", fileDescriptor_8ee9c82d7d1be64c)
}

var fileDescriptor_8ee9c82d7d1be64c = []byte{
	// 421 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xbf, 0x6f, 0xd4, 0x30,
	0x14, 0x80, 0x9b, 0xfb, 0x51, 0xda, 0x97, 0x14, 0xae, 0x16, 0x12, 0xd7, 0x63, 0x09, 0x9d, 0xa2,
	0x0a, 0xd9, 0x10, 0x56, 0xa8, 0x44, 0x5a, 0x21, 0xc6, 0x28, 0x65, 0x60, 0x8b, 0x9c, 0x9e, 0x13,
	0x2c, 0x52, 0x3b, 0x72, 0x9c, 0xa3, 0x41, 0x4c, 0xfc, 0xc5, 0xcc, 0x37, 0xa1, 0xd8, 0x39, 0x5d,
	0x74, 0x9d, 0xb2, 0xc5, 0xef, 0xbd, 0x7c, 0x9f, 0x9f, 0xdf, 0x83, 0x88, 0x89, 0x8d, 0x6c, 0xc9,
	0xbd, 0x14, 0x39, 0x2f, 0x48, 0xce, 0x4b, 0xcd, 0x14, 0x11, 0x4c, 0xff, 0x92, 0xea, 0x27, 0x59,
	0x37, 0x59, 0x26, 0xd3, 0x4a, 0xc9, 0xc7, 0x96, 0x6c, 0x42, 0x5a, 0x56, 0x3f, 0xe8, 0xfb, 0x61,
	0x10, 0x57, 0x4a, 0x6a, 0x89, 0xde, 0x19, 0x06, 0xb6, 0x0c, 0x6c, 0x19, 0xb8, 0x67, 0xe0, 0x61,
	0xf9, 0x8e, 0xb1, 0xfa, 0x38, 0xda, 0xaa, 0x64, 0xa3, 0x99, 0xf5, 0xad, 0x2e, 0x0a, 0x29, 0x8b,
	0x92, 0x11, 0x73, 0xca, 0x9a, 0x9c, 0x50, 0xd1, 0x5f, 0x65, 0xf5, 0x6a, 0x43, 0x4b, 0xbe, 0xa6,
	0x9a, 0x91, 0xdd, 0x87, 0x4d, 0x5c, 0xfe, 0x9b, 0x02, 0xdc, 0x76, 0xe0, 0xb8, 0xe3, 0xa2, 0x00,
	0xdc, 0x5a, 0x53, 0x9d, 0x56, 0x8a, 0xe5, 0xfc, 0x71, 0xe9, 0xf8, 0x4e, 0x70, 0x1a, 0x3d, 0xdb,
	0x46, 0x33, 0x35, 0xf1, 0x9d, 0x04, 0xba, 0x5c, 0x6c, 0x52, 0xe8, 0x01, 0xce, 0x0c, 0xe1, 0x5e,
	0x96, 0xa9, 0x6e, 0x2b, 0xb6, 0x9c, 0xf8, 0x4e, 0xf0, 0x3c, 0xbc, 0xc6, 0x63, 0x9b, 0xc6, 0x71,
	0x8f, 0xf9, 0xd6, 0x56, 0x2c, 0x3a, 0xd9, 0x46, 0xf3, 0xbf, 0xce, 0x64, 0xe1, 0x24, 0x5e, 0x35,
	0x88, 0xa3, 0x3f, 0x80, 0x6a, 0xa6, 0x38, 0x2d, 0xf9, 0x6f, 0xaa, 0xb9, 0x14, 0xd6, 0x39, 0x35,
	0xce, 0x9b, 0xf1, 0xce, 0xbb, 0x21, 0xeb, 0x40, 0x7c, 0x5e, 0x1f, 0x26, 0x51, 0x01, 0x9e, 0x79,
	0xe8, 0xd4, 0x2a, 0x96, 0x33, 0x7f, 0x1a, 0xb8, 0xe1, 0xed, 0x78, 0x6f, 0xd2, 0x51, 0x6e, 0x4c,
	0x7d, 0xa3, 0x0c, 0x3f, 0x71, 0xd5, 0x3e, 0x86, 0x32, 0x38, 0xb3, 0xff, 0x59, 0x58, 0xbd, 0x9c,
	0x1b, 0xd3, 0xa7, 0xf1, 0x26, 0x33, 0xd4, 0x2f, 0xa6, 0x30, 0xf1, 0xd6, 0xfb, 0x43, 0x7d, 0xf9,
	0x1d, 0xdc, 0x41, 0x12, 0xbd, 0x86, 0x99, 0xa0, 0x0f, 0xec, 0x70, 0xd6, 0x26, 0x88, 0xde, 0xc2,
	0x71, 0xdf, 0x72, 0x37, 0x5e, 0x37, 0x7c, 0x89, 0xed, 0x8e, 0xe1, 0xdd, 0x8e, 0xe1, 0xcf, 0xa2,
	0x4d, 0xfa, 0x9a, 0xab, 0x0b, 0xf0, 0x86, 0xc3, 0x44, 0xa7, 0x30, 0x37, 0xa6, 0xc5, 0xd1, 0xd5,
	0x1b, 0x38, 0x7f, 0xf2, 0xe6, 0xc8, 0x83, 0x93, 0xaf, 0xac, 0xae, 0x39, 0x15, 0xe1, 0xe2, 0x28,
	0xba, 0x83, 0x6b, 0x2e, 0x6d, 0xa3, 0xb6, 0x97, 0xb1, 0x3d, 0x47, 0x2f, 0xf6, 0x9b, 0x6c, 0xee,
	0x11, 0x3b, 0xd9, 0xb1, 0xb9, 0xe8, 0x87, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x88, 0xb6, 0x87,
	0x39, 0xd0, 0x03, 0x00, 0x00,
}
   070701000000E3000081A4000003E800000064000000015E17A24700004C83000000000000000000000000000000000000005600000000cilium-proxy-20200109/go/envoy/config/filter/network/dubbo_proxy/v2alpha1/route.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/network/dubbo_proxy/v2alpha1/route.proto

package envoy_config_filter_network_dubbo_proxy_v2alpha1

import (
	fmt "fmt"
	route "github.com/cilium/proxy/go/envoy/api/v2/route"
	_type "github.com/cilium/proxy/go/envoy/type"
	matcher "github.com/cilium/proxy/go/envoy/type/matcher"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#next-free-field: 6]
type RouteConfiguration struct {
	// The name of the route configuration. Reserved for future use in asynchronous route discovery.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The interface name of the service.
	Interface string `protobuf:"bytes,2,opt,name=interface,proto3" json:"interface,omitempty"`
	// Which group does the interface belong to.
	Group string `protobuf:"bytes,3,opt,name=group,proto3" json:"group,omitempty"`
	// The version number of the interface.
	Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"`
	// The list of routes that will be matched, in order, against incoming requests. The first route
	// that matches will be used.
	Routes               []*Route `protobuf:"bytes,5,rep,name=routes,proto3" json:"routes,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RouteConfiguration) Reset()         { *m = RouteConfiguration{} }
func (m *RouteConfiguration) String() string { return proto.CompactTextString(m) }
func (*RouteConfiguration) ProtoMessage()    {}
func (*RouteConfiguration) Descriptor() ([]byte, []int) {
	return fileDescriptor_74a572433a3292e0, []int{0}
}

func (m *RouteConfiguration) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteConfiguration.Unmarshal(m, b)
}
func (m *RouteConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteConfiguration.Marshal(b, m, deterministic)
}
func (m *RouteConfiguration) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteConfiguration.Merge(m, src)
}
func (m *RouteConfiguration) XXX_Size() int {
	return xxx_messageInfo_RouteConfiguration.Size(m)
}
func (m *RouteConfiguration) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteConfiguration.DiscardUnknown(m)
}

var xxx_messageInfo_RouteConfiguration proto.InternalMessageInfo

func (m *RouteConfiguration) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *RouteConfiguration) GetInterface() string {
	if m != nil {
		return m.Interface
	}
	return ""
}

func (m *RouteConfiguration) GetGroup() string {
	if m != nil {
		return m.Group
	}
	return ""
}

func (m *RouteConfiguration) GetVersion() string {
	if m != nil {
		return m.Version
	}
	return ""
}

func (m *RouteConfiguration) GetRoutes() []*Route {
	if m != nil {
		return m.Routes
	}
	return nil
}

type Route struct {
	// Route matching parameters.
	Match *RouteMatch `protobuf:"bytes,1,opt,name=match,proto3" json:"match,omitempty"`
	// Route request to some upstream cluster.
	Route                *RouteAction `protobuf:"bytes,2,opt,name=route,proto3" json:"route,omitempty"`
	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
	XXX_unrecognized     []byte       `json:"-"`
	XXX_sizecache        int32        `json:"-"`
}

func (m *Route) Reset()         { *m = Route{} }
func (m *Route) String() string { return proto.CompactTextString(m) }
func (*Route) ProtoMessage()    {}
func (*Route) Descriptor() ([]byte, []int) {
	return fileDescriptor_74a572433a3292e0, []int{1}
}

func (m *Route) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Route.Unmarshal(m, b)
}
func (m *Route) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Route.Marshal(b, m, deterministic)
}
func (m *Route) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Route.Merge(m, src)
}
func (m *Route) XXX_Size() int {
	return xxx_messageInfo_Route.Size(m)
}
func (m *Route) XXX_DiscardUnknown() {
	xxx_messageInfo_Route.DiscardUnknown(m)
}

var xxx_messageInfo_Route proto.InternalMessageInfo

func (m *Route) GetMatch() *RouteMatch {
	if m != nil {
		return m.Match
	}
	return nil
}

func (m *Route) GetRoute() *RouteAction {
	if m != nil {
		return m.Route
	}
	return nil
}

type RouteMatch struct {
	// Method level routing matching.
	Method *MethodMatch `protobuf:"bytes,1,opt,name=method,proto3" json:"method,omitempty"`
	// Specifies a set of headers that the route should match on. The router will check the request’s
	// headers against all the specified headers in the route config. A match will happen if all the
	// headers in the route are present in the request with the same values (or based on presence if
	// the value field is not in the config).
	Headers              []*route.HeaderMatcher `protobuf:"bytes,2,rep,name=headers,proto3" json:"headers,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *RouteMatch) Reset()         { *m = RouteMatch{} }
func (m *RouteMatch) String() string { return proto.CompactTextString(m) }
func (*RouteMatch) ProtoMessage()    {}
func (*RouteMatch) Descriptor() ([]byte, []int) {
	return fileDescriptor_74a572433a3292e0, []int{2}
}

func (m *RouteMatch) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteMatch.Unmarshal(m, b)
}
func (m *RouteMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteMatch.Marshal(b, m, deterministic)
}
func (m *RouteMatch) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteMatch.Merge(m, src)
}
func (m *RouteMatch) XXX_Size() int {
	return xxx_messageInfo_RouteMatch.Size(m)
}
func (m *RouteMatch) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteMatch.DiscardUnknown(m)
}

var xxx_messageInfo_RouteMatch proto.InternalMessageInfo

func (m *RouteMatch) GetMethod() *MethodMatch {
	if m != nil {
		return m.Method
	}
	return nil
}

func (m *RouteMatch) GetHeaders() []*route.HeaderMatcher {
	if m != nil {
		return m.Headers
	}
	return nil
}

type RouteAction struct {
	// Types that are valid to be assigned to ClusterSpecifier:
	//	*RouteAction_Cluster
	//	*RouteAction_WeightedClusters
	ClusterSpecifier     isRouteAction_ClusterSpecifier `protobuf_oneof:"cluster_specifier"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	XXX_sizecache        int32                          `json:"-"`
}

func (m *RouteAction) Reset()         { *m = RouteAction{} }
func (m *RouteAction) String() string { return proto.CompactTextString(m) }
func (*RouteAction) ProtoMessage()    {}
func (*RouteAction) Descriptor() ([]byte, []int) {
	return fileDescriptor_74a572433a3292e0, []int{3}
}

func (m *RouteAction) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteAction.Unmarshal(m, b)
}
func (m *RouteAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteAction.Marshal(b, m, deterministic)
}
func (m *RouteAction) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteAction.Merge(m, src)
}
func (m *RouteAction) XXX_Size() int {
	return xxx_messageInfo_RouteAction.Size(m)
}
func (m *RouteAction) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteAction.DiscardUnknown(m)
}

var xxx_messageInfo_RouteAction proto.InternalMessageInfo

type isRouteAction_ClusterSpecifier interface {
	isRouteAction_ClusterSpecifier()
}

type RouteAction_Cluster struct {
	Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3,oneof"`
}

type RouteAction_WeightedClusters struct {
	WeightedClusters *route.WeightedCluster `protobuf:"bytes,2,opt,name=weighted_clusters,json=weightedClusters,proto3,oneof"`
}

func (*RouteAction_Cluster) isRouteAction_ClusterSpecifier() {}

func (*RouteAction_WeightedClusters) isRouteAction_ClusterSpecifier() {}

func (m *RouteAction) GetClusterSpecifier() isRouteAction_ClusterSpecifier {
	if m != nil {
		return m.ClusterSpecifier
	}
	return nil
}

func (m *RouteAction) GetCluster() string {
	if x, ok := m.GetClusterSpecifier().(*RouteAction_Cluster); ok {
		return x.Cluster
	}
	return ""
}

func (m *RouteAction) GetWeightedClusters() *route.WeightedCluster {
	if x, ok := m.GetClusterSpecifier().(*RouteAction_WeightedClusters); ok {
		return x.WeightedClusters
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*RouteAction) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*RouteAction_Cluster)(nil),
		(*RouteAction_WeightedClusters)(nil),
	}
}

type MethodMatch struct {
	// The name of the method.
	Name *matcher.StringMatcher `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Method parameter definition.
	// The key is the parameter index, starting from 0.
	// The value is the parameter matching type.
	ParamsMatch          map[uint32]*MethodMatch_ParameterMatchSpecifier `protobuf:"bytes,2,rep,name=params_match,json=paramsMatch,proto3" json:"params_match,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	XXX_NoUnkeyedLiteral struct{}                                        `json:"-"`
	XXX_unrecognized     []byte                                          `json:"-"`
	XXX_sizecache        int32                                           `json:"-"`
}

func (m *MethodMatch) Reset()         { *m = MethodMatch{} }
func (m *MethodMatch) String() string { return proto.CompactTextString(m) }
func (*MethodMatch) ProtoMessage()    {}
func (*MethodMatch) Descriptor() ([]byte, []int) {
	return fileDescriptor_74a572433a3292e0, []int{4}
}

func (m *MethodMatch) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MethodMatch.Unmarshal(m, b)
}
func (m *MethodMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MethodMatch.Marshal(b, m, deterministic)
}
func (m *MethodMatch) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MethodMatch.Merge(m, src)
}
func (m *MethodMatch) XXX_Size() int {
	return xxx_messageInfo_MethodMatch.Size(m)
}
func (m *MethodMatch) XXX_DiscardUnknown() {
	xxx_messageInfo_MethodMatch.DiscardUnknown(m)
}

var xxx_messageInfo_MethodMatch proto.InternalMessageInfo

func (m *MethodMatch) GetName() *matcher.StringMatcher {
	if m != nil {
		return m.Name
	}
	return nil
}

func (m *MethodMatch) GetParamsMatch() map[uint32]*MethodMatch_ParameterMatchSpecifier {
	if m != nil {
		return m.ParamsMatch
	}
	return nil
}

// The parameter matching type.
type MethodMatch_ParameterMatchSpecifier struct {
	// Types that are valid to be assigned to ParameterMatchSpecifier:
	//	*MethodMatch_ParameterMatchSpecifier_ExactMatch
	//	*MethodMatch_ParameterMatchSpecifier_RangeMatch
	ParameterMatchSpecifier isMethodMatch_ParameterMatchSpecifier_ParameterMatchSpecifier `protobuf_oneof:"parameter_match_specifier"`
	XXX_NoUnkeyedLiteral    struct{}                                                      `json:"-"`
	XXX_unrecognized        []byte                                                        `json:"-"`
	XXX_sizecache           int32                                                         `json:"-"`
}

func (m *MethodMatch_ParameterMatchSpecifier) Reset()         { *m = MethodMatch_ParameterMatchSpecifier{} }
func (m *MethodMatch_ParameterMatchSpecifier) String() string { return proto.CompactTextString(m) }
func (*MethodMatch_ParameterMatchSpecifier) ProtoMessage()    {}
func (*MethodMatch_ParameterMatchSpecifier) Descriptor() ([]byte, []int) {
	return fileDescriptor_74a572433a3292e0, []int{4, 0}
}

func (m *MethodMatch_ParameterMatchSpecifier) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MethodMatch_ParameterMatchSpecifier.Unmarshal(m, b)
}
func (m *MethodMatch_ParameterMatchSpecifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MethodMatch_ParameterMatchSpecifier.Marshal(b, m, deterministic)
}
func (m *MethodMatch_ParameterMatchSpecifier) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MethodMatch_ParameterMatchSpecifier.Merge(m, src)
}
func (m *MethodMatch_ParameterMatchSpecifier) XXX_Size() int {
	return xxx_messageInfo_MethodMatch_ParameterMatchSpecifier.Size(m)
}
func (m *MethodMatch_ParameterMatchSpecifier) XXX_DiscardUnknown() {
	xxx_messageInfo_MethodMatch_ParameterMatchSpecifier.DiscardUnknown(m)
}

var xxx_messageInfo_MethodMatch_ParameterMatchSpecifier proto.InternalMessageInfo

type isMethodMatch_ParameterMatchSpecifier_ParameterMatchSpecifier interface {
	isMethodMatch_ParameterMatchSpecifier_ParameterMatchSpecifier()
}

type MethodMatch_ParameterMatchSpecifier_ExactMatch struct {
	ExactMatch string `protobuf:"bytes,3,opt,name=exact_match,json=exactMatch,proto3,oneof"`
}

type MethodMatch_ParameterMatchSpecifier_RangeMatch struct {
	RangeMatch *_type.Int64Range `protobuf:"bytes,4,opt,name=range_match,json=rangeMatch,proto3,oneof"`
}

func (*MethodMatch_ParameterMatchSpecifier_ExactMatch) isMethodMatch_ParameterMatchSpecifier_ParameterMatchSpecifier() {
}

func (*MethodMatch_ParameterMatchSpecifier_RangeMatch) isMethodMatch_ParameterMatchSpecifier_ParameterMatchSpecifier() {
}

func (m *MethodMatch_ParameterMatchSpecifier) GetParameterMatchSpecifier() isMethodMatch_ParameterMatchSpecifier_ParameterMatchSpecifier {
	if m != nil {
		return m.ParameterMatchSpecifier
	}
	return nil
}

func (m *MethodMatch_ParameterMatchSpecifier) GetExactMatch() string {
	if x, ok := m.GetParameterMatchSpecifier().(*MethodMatch_ParameterMatchSpecifier_ExactMatch); ok {
		return x.ExactMatch
	}
	return ""
}

func (m *MethodMatch_ParameterMatchSpecifier) GetRangeMatch() *_type.Int64Range {
	if x, ok := m.GetParameterMatchSpecifier().(*MethodMatch_ParameterMatchSpecifier_RangeMatch); ok {
		return x.RangeMatch
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*MethodMatch_ParameterMatchSpecifier) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*MethodMatch_ParameterMatchSpecifier_ExactMatch)(nil),
		(*MethodMatch_ParameterMatchSpecifier_RangeMatch)(nil),
	}
}

func init() {
	proto.RegisterType((*RouteConfiguration)(nil), "envoy.config.filter.network.dubbo_proxy.v2alpha1.RouteConfiguration")
	proto.RegisterType((*Route)(nil), "envoy.config.filter.network.dubbo_proxy.v2alpha1.Route")
	proto.RegisterType((*RouteMatch)(nil), "envoy.config.filter.network.dubbo_proxy.v2alpha1.RouteMatch")
	proto.RegisterType((*RouteAction)(nil), "envoy.config.filter.network.dubbo_proxy.v2alpha1.RouteAction")
	proto.RegisterType((*MethodMatch)(nil), "envoy.config.filter.network.dubbo_proxy.v2alpha1.MethodMatch")
	proto.RegisterMapType((map[uint32]*MethodMatch_ParameterMatchSpecifier)(nil), "envoy.config.filter.network.dubbo_proxy.v2alpha1.MethodMatch.ParamsMatchEntry")
	proto.RegisterType((*MethodMatch_ParameterMatchSpecifier)(nil), "envoy.config.filter.network.dubbo_proxy.v2alpha1.MethodMatch.ParameterMatchSpecifier")
}

func init() {
	proto.RegisterFile("envoy/config/filter/network/dubbo_proxy/v2alpha1/route.proto", fileDescriptor_74a572433a3292e0)
}

var fileDescriptor_74a572433a3292e0 = []byte{
	// 640 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xcd, 0x6e, 0xd3, 0x4c,
	0x14, 0xad, 0x93, 0xba, 0xfd, 0x7a, 0xfd, 0x21, 0xa5, 0x23, 0xd4, 0x9a, 0x80, 0xa0, 0x0d, 0x9b,
	0xae, 0xc6, 0x10, 0xfe, 0xa1, 0x20, 0x91, 0x0a, 0xa9, 0x2c, 0x5a, 0xaa, 0xa9, 0x2a, 0x36, 0xa0,
	0x68, 0xea, 0x4c, 0x92, 0x51, 0x13, 0x8f, 0x19, 0x4f, 0xdc, 0xe6, 0x15, 0x58, 0x83, 0xd8, 0xf2,
	0x30, 0x48, 0xbc, 0x09, 0xcf, 0x80, 0x58, 0x21, 0xdf, 0x19, 0x13, 0xf3, 0xb3, 0x69, 0x60, 0x37,
	0xbe, 0x73, 0xcf, 0x39, 0x73, 0x8e, 0xee, 0x35, 0x6c, 0x8b, 0x24, 0x57, 0xd3, 0x28, 0x56, 0x49,
	0x5f, 0x0e, 0xa2, 0xbe, 0x1c, 0x19, 0xa1, 0xa3, 0x44, 0x98, 0x53, 0xa5, 0x4f, 0xa2, 0xde, 0xe4,
	0xf8, 0x58, 0x75, 0x53, 0xad, 0xce, 0xa6, 0x51, 0xde, 0xe6, 0xa3, 0x74, 0xc8, 0x6f, 0x46, 0x5a,
	0x4d, 0x8c, 0xa0, 0xa9, 0x56, 0x46, 0x91, 0x1b, 0x88, 0xa6, 0x16, 0x4d, 0x2d, 0x9a, 0x3a, 0x34,
	0xad, 0xa0, 0x69, 0x89, 0x6e, 0x5e, 0xb5, 0x7a, 0x3c, 0x95, 0x51, 0xde, 0xb6, 0x5c, 0x55, 0xc6,
	0xe6, 0x35, 0x7b, 0x6f, 0xa6, 0xa9, 0x88, 0xc6, 0xdc, 0xc4, 0x43, 0xa1, 0xa3, 0xcc, 0x68, 0x99,
	0x0c, 0x5c, 0xc3, 0x5a, 0xa5, 0x41, 0xf3, 0x64, 0x50, 0x02, 0xd7, 0x73, 0x3e, 0x92, 0x3d, 0x6e,
	0x44, 0x54, 0x1e, 0xec, 0x45, 0xeb, 0xb3, 0x07, 0x84, 0x15, 0x0a, 0x3b, 0xf8, 0xca, 0x89, 0xe6,
	0x46, 0xaa, 0x84, 0x10, 0x58, 0x4c, 0xf8, 0x58, 0x84, 0xde, 0x86, 0xb7, 0xb5, 0xc2, 0xf0, 0x4c,
	0xae, 0xc0, 0x8a, 0x4c, 0x8c, 0xd0, 0x7d, 0x1e, 0x8b, 0xb0, 0x86, 0x17, 0xb3, 0x02, 0xb9, 0x08,
	0xfe, 0x40, 0xab, 0x49, 0x1a, 0xd6, 0xf1, 0xc6, 0x7e, 0x90, 0x10, 0x96, 0x73, 0xa1, 0x33, 0xa9,
	0x92, 0x70, 0x11, 0xeb, 0xe5, 0x27, 0x79, 0x01, 0x4b, 0xe8, 0x2c, 0x0b, 0xfd, 0x8d, 0xfa, 0x56,
	0xd0, 0xbe, 0x47, 0xcf, 0x9b, 0x16, 0xc5, 0x77, 0x33, 0x47, 0xd3, 0xfa, 0xe4, 0x81, 0x8f, 0x15,
	0xf2, 0x0a, 0x7c, 0x0c, 0x07, 0x5f, 0x1f, 0xb4, 0xb7, 0xe7, 0x64, 0xde, 0x2b, 0x38, 0x3a, 0xff,
	0x7d, 0xeb, 0xf8, 0x6f, 0xbd, 0x5a, 0xc3, 0x63, 0x96, 0x94, 0xbc, 0x06, 0x1f, 0x15, 0x31, 0x82,
	0xa0, 0xfd, 0x78, 0x4e, 0xf6, 0xa7, 0x71, 0x11, 0x74, 0x95, 0x1e, 0x59, 0x5b, 0x1f, 0x3d, 0x80,
	0x99, 0x3c, 0x39, 0x82, 0xa5, 0xb1, 0x30, 0x43, 0xd5, 0x73, 0x66, 0xe6, 0x90, 0xdb, 0x43, 0x3c,
	0xd2, 0x31, 0x47, 0x46, 0x1e, 0xc1, 0xf2, 0x50, 0xf0, 0x9e, 0xd0, 0x59, 0x58, 0xc3, 0xf8, 0x37,
	0x1d, 0x2f, 0x4f, 0x25, 0xcd, 0xdb, 0xd4, 0x0e, 0xdd, 0x2e, 0xb6, 0xec, 0xd9, 0x41, 0x63, 0x25,
	0xa2, 0xf5, 0xc1, 0x83, 0xa0, 0xe2, 0x81, 0x34, 0x61, 0x39, 0x1e, 0x4d, 0x32, 0x23, 0xb4, 0x9d,
	0x97, 0xdd, 0x05, 0x56, 0x16, 0x08, 0x83, 0xd5, 0x53, 0x21, 0x07, 0x43, 0x23, 0x7a, 0x5d, 0x57,
	0xcb, 0x5c, 0x72, 0xd7, 0xff, 0x24, 0xf9, 0xd2, 0x35, 0xef, 0xd8, 0xde, 0xdd, 0x05, 0xd6, 0x38,
	0xfd, 0xb9, 0x94, 0x75, 0x42, 0x58, 0x75, 0x54, 0xdd, 0x2c, 0x15, 0xb1, 0xec, 0x4b, 0xa1, 0x49,
	0xfd, 0x6b, 0xc7, 0x6b, 0x7d, 0xa9, 0x43, 0x50, 0xb1, 0x4b, 0xee, 0x54, 0xc6, 0x78, 0xe6, 0xb1,
	0xd8, 0x0e, 0xea, 0xd6, 0x87, 0x1e, 0xe2, 0xfa, 0x94, 0x1e, 0xed, 0xa4, 0xbf, 0x81, 0xff, 0x53,
	0xae, 0xf9, 0x38, 0xeb, 0xda, 0x39, 0xb2, 0x11, 0xed, 0xff, 0x55, 0xf4, 0xf4, 0x00, 0x19, 0xf1,
	0xfc, 0x2c, 0x31, 0x7a, 0xca, 0x82, 0x74, 0x56, 0x69, 0xbe, 0xf3, 0x60, 0x1d, 0x3b, 0x84, 0x71,
	0x89, 0x1f, 0xfe, 0xb0, 0xb6, 0x09, 0x81, 0x38, 0xe3, 0xb1, 0x71, 0xaf, 0xa9, 0xbb, 0x8c, 0x01,
	0x8b, 0xd6, 0xe8, 0x03, 0x08, 0x70, 0xdd, 0x5d, 0xcb, 0x22, 0xfa, 0x5d, 0xab, 0xfa, 0x7d, 0x9e,
	0x98, 0xbb, 0xb7, 0x59, 0xd1, 0x53, 0x40, 0xb1, 0xd9, 0x0e, 0xf8, 0x65, 0xb8, 0x94, 0x96, 0xc2,
	0x16, 0x3e, 0x4b, 0xb5, 0xf9, 0xde, 0x83, 0xc6, 0xaf, 0x0f, 0x27, 0x0d, 0xa8, 0x9f, 0x88, 0x29,
	0x86, 0x7a, 0x81, 0x15, 0x47, 0x72, 0x02, 0x7e, 0xce, 0x47, 0x93, 0x72, 0x27, 0x8e, 0xfe, 0x41,
	0x52, 0xbf, 0xe7, 0xc0, 0xac, 0xc6, 0xc3, 0xda, 0x7d, 0xaf, 0xb3, 0x0f, 0x4f, 0xa4, 0xb2, 0x2a,
	0x96, 0xe8, 0xbc, 0x82, 0x1d, 0xbb, 0x64, 0x07, 0xc5, 0x4f, 0xf0, 0xc0, 0x3b, 0x5e, 0xc2, 0xbf,
	0xe1, 0xad, 0xef, 0x01, 0x00, 0x00, 0xff, 0xff, 0x6a, 0x4c, 0xcf, 0x0d, 0xf1, 0x05, 0x00, 0x00,
}
 070701000000E4000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003F00000000cilium-proxy-20200109/go/envoy/config/filter/network/ext_authz    070701000000E5000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004200000000cilium-proxy-20200109/go/envoy/config/filter/network/ext_authz/v2 070701000000E6000081A4000003E800000064000000015E17A24700001458000000000000000000000000000000000000005200000000cilium-proxy-20200109/go/envoy/config/filter/network/ext_authz/v2/ext_authz.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/network/ext_authz/v2/ext_authz.proto

package envoy_config_filter_network_ext_authz_v2

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// External Authorization filter calls out to an external service over the
// gRPC Authorization API defined by
// :ref:`CheckRequest <envoy_api_msg_service.auth.v2.CheckRequest>`.
// A failed check will cause this filter to close the TCP connection.
type ExtAuthz struct {
	// The prefix to use when emitting statistics.
	StatPrefix string `protobuf:"bytes,1,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"`
	// The external authorization gRPC service configuration.
	// The default timeout is set to 200ms by this filter.
	GrpcService *core.GrpcService `protobuf:"bytes,2,opt,name=grpc_service,json=grpcService,proto3" json:"grpc_service,omitempty"`
	// The filter's behaviour in case the external authorization service does
	// not respond back. When it is set to true, Envoy will also allow traffic in case of
	// communication failure between authorization service and the proxy.
	// Defaults to false.
	FailureModeAllow     bool     `protobuf:"varint,3,opt,name=failure_mode_allow,json=failureModeAllow,proto3" json:"failure_mode_allow,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ExtAuthz) Reset()         { *m = ExtAuthz{} }
func (m *ExtAuthz) String() string { return proto.CompactTextString(m) }
func (*ExtAuthz) ProtoMessage()    {}
func (*ExtAuthz) Descriptor() ([]byte, []int) {
	return fileDescriptor_3ec2615c2696024a, []int{0}
}

func (m *ExtAuthz) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ExtAuthz.Unmarshal(m, b)
}
func (m *ExtAuthz) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ExtAuthz.Marshal(b, m, deterministic)
}
func (m *ExtAuthz) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ExtAuthz.Merge(m, src)
}
func (m *ExtAuthz) XXX_Size() int {
	return xxx_messageInfo_ExtAuthz.Size(m)
}
func (m *ExtAuthz) XXX_DiscardUnknown() {
	xxx_messageInfo_ExtAuthz.DiscardUnknown(m)
}

var xxx_messageInfo_ExtAuthz proto.InternalMessageInfo

func (m *ExtAuthz) GetStatPrefix() string {
	if m != nil {
		return m.StatPrefix
	}
	return ""
}

func (m *ExtAuthz) GetGrpcService() *core.GrpcService {
	if m != nil {
		return m.GrpcService
	}
	return nil
}

func (m *ExtAuthz) GetFailureModeAllow() bool {
	if m != nil {
		return m.FailureModeAllow
	}
	return false
}

func init() {
	proto.RegisterType((*ExtAuthz)(nil), "envoy.config.filter.network.ext_authz.v2.ExtAuthz")
}

func init() {
	proto.RegisterFile("envoy/config/filter/network/ext_authz/v2/ext_authz.proto", fileDescriptor_3ec2615c2696024a)
}

var fileDescriptor_3ec2615c2696024a = []byte{
	// 282 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0xc1, 0x4a, 0xfc, 0x30,
	0x10, 0xc6, 0xc9, 0xfe, 0xff, 0xe8, 0x9a, 0x2a, 0x48, 0x2f, 0x96, 0x3d, 0x48, 0x11, 0x0f, 0x3d,
	0x48, 0x02, 0x15, 0xc4, 0x6b, 0x0b, 0x22, 0x1e, 0x84, 0x52, 0x1f, 0xa0, 0xc4, 0x76, 0x5a, 0x83,
	0xb5, 0x09, 0xb3, 0xd9, 0x6c, 0xd7, 0xf7, 0xf1, 0x25, 0x3d, 0x49, 0x9a, 0x5d, 0xea, 0xd1, 0x5b,
	0x26, 0xdf, 0x7c, 0xbf, 0x99, 0x6f, 0xe8, 0x3d, 0x0c, 0x56, 0xed, 0x78, 0xad, 0x86, 0x56, 0x76,
	0xbc, 0x95, 0xbd, 0x01, 0xe4, 0x03, 0x98, 0xad, 0xc2, 0x77, 0x0e, 0xa3, 0xa9, 0xc4, 0xc6, 0xbc,
	0x7d, 0x72, 0x9b, 0xce, 0x05, 0xd3, 0xa8, 0x8c, 0x0a, 0x93, 0xc9, 0xc9, 0xbc, 0x93, 0x79, 0x27,
	0xdb, 0x3b, 0xd9, 0xdc, 0x6c, 0xd3, 0xd5, 0xb5, 0x9f, 0x21, 0xb4, 0x74, 0x9c, 0x5a, 0x21, 0xf0,
	0x0e, 0x75, 0x5d, 0xad, 0x01, 0xad, 0xac, 0xc1, 0xf3, 0x56, 0x17, 0x56, 0xf4, 0xb2, 0x11, 0x06,
	0xf8, 0xe1, 0xe1, 0x85, 0xab, 0x2f, 0x42, 0x97, 0x0f, 0xa3, 0xc9, 0x1c, 0x2e, 0x4c, 0x68, 0xb0,
	0x36, 0xc2, 0x54, 0x1a, 0xa1, 0x95, 0x63, 0x44, 0x62, 0x92, 0x9c, 0xe4, 0xc7, 0xdf, 0xf9, 0x7f,
	0x5c, 0xc4, 0xa4, 0xa4, 0x4e, 0x2b, 0x26, 0x29, 0xcc, 0xe8, 0xe9, 0xef, 0x29, 0xd1, 0x22, 0x26,
	0x49, 0x90, 0x5e, 0x32, 0xbf, 0xb6, 0xd0, 0x92, 0xd9, 0x94, 0xb9, 0x65, 0xd8, 0x23, 0xea, 0xfa,
	0xc5, 0x77, 0x95, 0x41, 0x37, 0x17, 0xe1, 0x0d, 0x0d, 0x5b, 0x21, 0xfb, 0x0d, 0x42, 0xf5, 0xa1,
	0x1a, 0xa8, 0x44, 0xdf, 0xab, 0x6d, 0xf4, 0x2f, 0x26, 0xc9, 0xb2, 0x3c, 0xdf, 0x2b, 0xcf, 0xaa,
	0x81, 0xcc, 0xfd, 0xe7, 0x4f, 0xf4, 0x4e, 0x2a, 0x8f, 0xd7, 0xa8, 0xc6, 0x1d, 0xfb, 0xeb, 0x81,
	0xf2, 0xb3, 0x43, 0xbc, 0xc2, 0x05, 0x2e, 0xc8, 0xeb, 0xd1, 0x94, 0xfc, 0xf6, 0x27, 0x00, 0x00,
	0xff, 0xff, 0x4c, 0xa3, 0x73, 0x55, 0x9e, 0x01, 0x00, 0x00,
}
070701000000E7000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004D00000000cilium-proxy-20200109/go/envoy/config/filter/network/http_connection_manager  070701000000E8000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000005000000000cilium-proxy-20200109/go/envoy/config/filter/network/http_connection_manager/v2   070701000000E9000081A4000003E800000064000000015E17A247000162B1000000000000000000000000000000000000006E00000000cilium-proxy-20200109/go/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.proto

package envoy_config_filter_network_http_connection_manager_v2

import (
	fmt "fmt"
	v2 "github.com/cilium/proxy/go/envoy/api/v2"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	v21 "github.com/cilium/proxy/go/envoy/config/filter/accesslog/v2"
	_type "github.com/cilium/proxy/go/envoy/type"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	duration "github.com/golang/protobuf/ptypes/duration"
	_struct "github.com/golang/protobuf/ptypes/struct"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type HttpConnectionManager_CodecType int32

const (
	// For every new connection, the connection manager will determine which
	// codec to use. This mode supports both ALPN for TLS listeners as well as
	// protocol inference for plaintext listeners. If ALPN data is available, it
	// is preferred, otherwise protocol inference is used. In almost all cases,
	// this is the right option to choose for this setting.
	HttpConnectionManager_AUTO HttpConnectionManager_CodecType = 0
	// The connection manager will assume that the client is speaking HTTP/1.1.
	HttpConnectionManager_HTTP1 HttpConnectionManager_CodecType = 1
	// The connection manager will assume that the client is speaking HTTP/2
	// (Envoy does not require HTTP/2 to take place over TLS or to use ALPN.
	// Prior knowledge is allowed).
	HttpConnectionManager_HTTP2 HttpConnectionManager_CodecType = 2
	// [#not-implemented-hide:] QUIC implementation is not production ready yet. Use this enum with
	// caution to prevent accidental execution of QUIC code. I.e. `!= HTTP2` is no longer sufficient
	// to distinguish HTTP1 and HTTP2 traffic.
	HttpConnectionManager_HTTP3 HttpConnectionManager_CodecType = 3
)

var HttpConnectionManager_CodecType_name = map[int32]string{
	0: "AUTO",
	1: "HTTP1",
	2: "HTTP2",
	3: "HTTP3",
}

var HttpConnectionManager_CodecType_value = map[string]int32{
	"AUTO":  0,
	"HTTP1": 1,
	"HTTP2": 2,
	"HTTP3": 3,
}

func (x HttpConnectionManager_CodecType) String() string {
	return proto.EnumName(HttpConnectionManager_CodecType_name, int32(x))
}

func (HttpConnectionManager_CodecType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{0, 0}
}

type HttpConnectionManager_ServerHeaderTransformation int32

const (
	// Overwrite any Server header with the contents of server_name.
	HttpConnectionManager_OVERWRITE HttpConnectionManager_ServerHeaderTransformation = 0
	// If no Server header is present, append Server server_name
	// If a Server header is present, pass it through.
	HttpConnectionManager_APPEND_IF_ABSENT HttpConnectionManager_ServerHeaderTransformation = 1
	// Pass through the value of the server header, and do not append a header
	// if none is present.
	HttpConnectionManager_PASS_THROUGH HttpConnectionManager_ServerHeaderTransformation = 2
)

var HttpConnectionManager_ServerHeaderTransformation_name = map[int32]string{
	0: "OVERWRITE",
	1: "APPEND_IF_ABSENT",
	2: "PASS_THROUGH",
}

var HttpConnectionManager_ServerHeaderTransformation_value = map[string]int32{
	"OVERWRITE":        0,
	"APPEND_IF_ABSENT": 1,
	"PASS_THROUGH":     2,
}

func (x HttpConnectionManager_ServerHeaderTransformation) String() string {
	return proto.EnumName(HttpConnectionManager_ServerHeaderTransformation_name, int32(x))
}

func (HttpConnectionManager_ServerHeaderTransformation) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{0, 1}
}

// How to handle the :ref:`config_http_conn_man_headers_x-forwarded-client-cert` (XFCC) HTTP
// header.
type HttpConnectionManager_ForwardClientCertDetails int32

const (
	// Do not send the XFCC header to the next hop. This is the default value.
	HttpConnectionManager_SANITIZE HttpConnectionManager_ForwardClientCertDetails = 0
	// When the client connection is mTLS (Mutual TLS), forward the XFCC header
	// in the request.
	HttpConnectionManager_FORWARD_ONLY HttpConnectionManager_ForwardClientCertDetails = 1
	// When the client connection is mTLS, append the client certificate
	// information to the request’s XFCC header and forward it.
	HttpConnectionManager_APPEND_FORWARD HttpConnectionManager_ForwardClientCertDetails = 2
	// When the client connection is mTLS, reset the XFCC header with the client
	// certificate information and send it to the next hop.
	HttpConnectionManager_SANITIZE_SET HttpConnectionManager_ForwardClientCertDetails = 3
	// Always forward the XFCC header in the request, regardless of whether the
	// client connection is mTLS.
	HttpConnectionManager_ALWAYS_FORWARD_ONLY HttpConnectionManager_ForwardClientCertDetails = 4
)

var HttpConnectionManager_ForwardClientCertDetails_name = map[int32]string{
	0: "SANITIZE",
	1: "FORWARD_ONLY",
	2: "APPEND_FORWARD",
	3: "SANITIZE_SET",
	4: "ALWAYS_FORWARD_ONLY",
}

var HttpConnectionManager_ForwardClientCertDetails_value = map[string]int32{
	"SANITIZE":            0,
	"FORWARD_ONLY":        1,
	"APPEND_FORWARD":      2,
	"SANITIZE_SET":        3,
	"ALWAYS_FORWARD_ONLY": 4,
}

func (x HttpConnectionManager_ForwardClientCertDetails) String() string {
	return proto.EnumName(HttpConnectionManager_ForwardClientCertDetails_name, int32(x))
}

func (HttpConnectionManager_ForwardClientCertDetails) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{0, 2}
}

type HttpConnectionManager_Tracing_OperationName int32

const (
	// The HTTP listener is used for ingress/incoming requests.
	HttpConnectionManager_Tracing_INGRESS HttpConnectionManager_Tracing_OperationName = 0
	// The HTTP listener is used for egress/outgoing requests.
	HttpConnectionManager_Tracing_EGRESS HttpConnectionManager_Tracing_OperationName = 1
)

var HttpConnectionManager_Tracing_OperationName_name = map[int32]string{
	0: "INGRESS",
	1: "EGRESS",
}

var HttpConnectionManager_Tracing_OperationName_value = map[string]int32{
	"INGRESS": 0,
	"EGRESS":  1,
}

func (x HttpConnectionManager_Tracing_OperationName) String() string {
	return proto.EnumName(HttpConnectionManager_Tracing_OperationName_name, int32(x))
}

func (HttpConnectionManager_Tracing_OperationName) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{0, 0, 0}
}

// [#next-free-field: 36]
type HttpConnectionManager struct {
	// Supplies the type of codec that the connection manager should use.
	CodecType HttpConnectionManager_CodecType `protobuf:"varint,1,opt,name=codec_type,json=codecType,proto3,enum=envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_CodecType" json:"codec_type,omitempty"`
	// The human readable prefix to use when emitting statistics for the
	// connection manager. See the :ref:`statistics documentation <config_http_conn_man_stats>` for
	// more information.
	StatPrefix string `protobuf:"bytes,2,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"`
	// Types that are valid to be assigned to RouteSpecifier:
	//	*HttpConnectionManager_Rds
	//	*HttpConnectionManager_RouteConfig
	//	*HttpConnectionManager_ScopedRoutes
	RouteSpecifier isHttpConnectionManager_RouteSpecifier `protobuf_oneof:"route_specifier"`
	// A list of individual HTTP filters that make up the filter chain for
	// requests made to the connection manager. Order matters as the filters are
	// processed sequentially as request events happen.
	HttpFilters []*HttpFilter `protobuf:"bytes,5,rep,name=http_filters,json=httpFilters,proto3" json:"http_filters,omitempty"`
	// Whether the connection manager manipulates the :ref:`config_http_conn_man_headers_user-agent`
	// and :ref:`config_http_conn_man_headers_downstream-service-cluster` headers. See the linked
	// documentation for more information. Defaults to false.
	AddUserAgent *wrappers.BoolValue `protobuf:"bytes,6,opt,name=add_user_agent,json=addUserAgent,proto3" json:"add_user_agent,omitempty"`
	// Presence of the object defines whether the connection manager
	// emits :ref:`tracing <arch_overview_tracing>` data to the :ref:`configured tracing provider
	// <envoy_api_msg_config.trace.v2.Tracing>`.
	Tracing *HttpConnectionManager_Tracing `protobuf:"bytes,7,opt,name=tracing,proto3" json:"tracing,omitempty"`
	// Additional settings for HTTP requests handled by the connection manager. These will be
	// applicable to both HTTP1 and HTTP2 requests.
	CommonHttpProtocolOptions *core.HttpProtocolOptions `protobuf:"bytes,35,opt,name=common_http_protocol_options,json=commonHttpProtocolOptions,proto3" json:"common_http_protocol_options,omitempty"`
	// Additional HTTP/1 settings that are passed to the HTTP/1 codec.
	HttpProtocolOptions *core.Http1ProtocolOptions `protobuf:"bytes,8,opt,name=http_protocol_options,json=httpProtocolOptions,proto3" json:"http_protocol_options,omitempty"`
	// Additional HTTP/2 settings that are passed directly to the HTTP/2 codec.
	Http2ProtocolOptions *core.Http2ProtocolOptions `protobuf:"bytes,9,opt,name=http2_protocol_options,json=http2ProtocolOptions,proto3" json:"http2_protocol_options,omitempty"`
	// An optional override that the connection manager will write to the server
	// header in responses. If not set, the default is *envoy*.
	ServerName string `protobuf:"bytes,10,opt,name=server_name,json=serverName,proto3" json:"server_name,omitempty"`
	// Defines the action to be applied to the Server header on the response path.
	// By default, Envoy will overwrite the header with the value specified in
	// server_name.
	ServerHeaderTransformation HttpConnectionManager_ServerHeaderTransformation `protobuf:"varint,34,opt,name=server_header_transformation,json=serverHeaderTransformation,proto3,enum=envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_ServerHeaderTransformation" json:"server_header_transformation,omitempty"`
	// The maximum request headers size for incoming connections.
	// If unconfigured, the default max request headers allowed is 60 KiB.
	// Requests that exceed this limit will receive a 431 response.
	// The max configurable limit is 96 KiB, based on current implementation
	// constraints.
	MaxRequestHeadersKb *wrappers.UInt32Value `protobuf:"bytes,29,opt,name=max_request_headers_kb,json=maxRequestHeadersKb,proto3" json:"max_request_headers_kb,omitempty"`
	// The idle timeout for connections managed by the connection manager. The
	// idle timeout is defined as the period in which there are no active
	// requests. If not set, there is no idle timeout. When the idle timeout is
	// reached the connection will be closed. If the connection is an HTTP/2
	// connection a drain sequence will occur prior to closing the connection.
	// This field is deprecated. Use :ref:`idle_timeout
	// <envoy_api_field_config.filter.network.http_connection_manager.v2.HttpConnectionManager.common_http_protocol_options>`
	// instead.
	IdleTimeout *duration.Duration `protobuf:"bytes,11,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"` // Deprecated: Do not use.
	// The stream idle timeout for connections managed by the connection manager.
	// If not specified, this defaults to 5 minutes. The default value was selected
	// so as not to interfere with any smaller configured timeouts that may have
	// existed in configurations prior to the introduction of this feature, while
	// introducing robustness to TCP connections that terminate without a FIN.
	//
	// This idle timeout applies to new streams and is overridable by the
	// :ref:`route-level idle_timeout
	// <envoy_api_field_route.RouteAction.idle_timeout>`. Even on a stream in
	// which the override applies, prior to receipt of the initial request
	// headers, the :ref:`stream_idle_timeout
	// <envoy_api_field_config.filter.network.http_connection_manager.v2.HttpConnectionManager.stream_idle_timeout>`
	// applies. Each time an encode/decode event for headers or data is processed
	// for the stream, the timer will be reset. If the timeout fires, the stream
	// is terminated with a 408 Request Timeout error code if no upstream response
	// header has been received, otherwise a stream reset occurs.
	//
	// Note that it is possible to idle timeout even if the wire traffic for a stream is non-idle, due
	// to the granularity of events presented to the connection manager. For example, while receiving
	// very large request headers, it may be the case that there is traffic regularly arriving on the
	// wire while the connection manage is only able to observe the end-of-headers event, hence the
	// stream may still idle timeout.
	//
	// A value of 0 will completely disable the connection manager stream idle
	// timeout, although per-route idle timeout overrides will continue to apply.
	StreamIdleTimeout *duration.Duration `protobuf:"bytes,24,opt,name=stream_idle_timeout,json=streamIdleTimeout,proto3" json:"stream_idle_timeout,omitempty"`
	// A timeout for idle requests managed by the connection manager.
	// The timer is activated when the request is initiated, and is disarmed when the last byte of the
	// request is sent upstream (i.e. all decoding filters have processed the request), OR when the
	// response is initiated. If not specified or set to 0, this timeout is disabled.
	RequestTimeout *duration.Duration `protobuf:"bytes,28,opt,name=request_timeout,json=requestTimeout,proto3" json:"request_timeout,omitempty"`
	// The time that Envoy will wait between sending an HTTP/2 “shutdown
	// notification” (GOAWAY frame with max stream ID) and a final GOAWAY frame.
	// This is used so that Envoy provides a grace period for new streams that
	// race with the final GOAWAY frame. During this grace period, Envoy will
	// continue to accept new streams. After the grace period, a final GOAWAY
	// frame is sent and Envoy will start refusing new streams. Draining occurs
	// both when a connection hits the idle timeout or during general server
	// draining. The default grace period is 5000 milliseconds (5 seconds) if this
	// option is not specified.
	DrainTimeout *duration.Duration `protobuf:"bytes,12,opt,name=drain_timeout,json=drainTimeout,proto3" json:"drain_timeout,omitempty"`
	// The delayed close timeout is for downstream connections managed by the HTTP connection manager.
	// It is defined as a grace period after connection close processing has been locally initiated
	// during which Envoy will wait for the peer to close (i.e., a TCP FIN/RST is received by Envoy
	// from the downstream connection) prior to Envoy closing the socket associated with that
	// connection.
	// NOTE: This timeout is enforced even when the socket associated with the downstream connection
	// is pending a flush of the write buffer. However, any progress made writing data to the socket
	// will restart the timer associated with this timeout. This means that the total grace period for
	// a socket in this state will be
	// <total_time_waiting_for_write_buffer_flushes>+<delayed_close_timeout>.
	//
	// Delaying Envoy's connection close and giving the peer the opportunity to initiate the close
	// sequence mitigates a race condition that exists when downstream clients do not drain/process
	// data in a connection's receive buffer after a remote close has been detected via a socket
	// write(). This race leads to such clients failing to process the response code sent by Envoy,
	// which could result in erroneous downstream processing.
	//
	// If the timeout triggers, Envoy will close the connection's socket.
	//
	// The default timeout is 1000 ms if this option is not specified.
	//
	// .. NOTE::
	//    To be useful in avoiding the race condition described above, this timeout must be set
	//    to *at least* <max round trip time expected between clients and Envoy>+<100ms to account for
	//    a reasonable "worst" case processing time for a full iteration of Envoy's event loop>.
	//
	// .. WARNING::
	//    A value of 0 will completely disable delayed close processing. When disabled, the downstream
	//    connection's socket will be closed immediately after the write flush is completed or will
	//    never close if the write flush does not complete.
	DelayedCloseTimeout *duration.Duration `protobuf:"bytes,26,opt,name=delayed_close_timeout,json=delayedCloseTimeout,proto3" json:"delayed_close_timeout,omitempty"`
	// Configuration for :ref:`HTTP access logs <arch_overview_access_logs>`
	// emitted by the connection manager.
	AccessLog []*v21.AccessLog `protobuf:"bytes,13,rep,name=access_log,json=accessLog,proto3" json:"access_log,omitempty"`
	// If set to true, the connection manager will use the real remote address
	// of the client connection when determining internal versus external origin and manipulating
	// various headers. If set to false or absent, the connection manager will use the
	// :ref:`config_http_conn_man_headers_x-forwarded-for` HTTP header. See the documentation for
	// :ref:`config_http_conn_man_headers_x-forwarded-for`,
	// :ref:`config_http_conn_man_headers_x-envoy-internal`, and
	// :ref:`config_http_conn_man_headers_x-envoy-external-address` for more information.
	UseRemoteAddress *wrappers.BoolValue `protobuf:"bytes,14,opt,name=use_remote_address,json=useRemoteAddress,proto3" json:"use_remote_address,omitempty"`
	// The number of additional ingress proxy hops from the right side of the
	// :ref:`config_http_conn_man_headers_x-forwarded-for` HTTP header to trust when
	// determining the origin client's IP address. The default is zero if this option
	// is not specified. See the documentation for
	// :ref:`config_http_conn_man_headers_x-forwarded-for` for more information.
	XffNumTrustedHops uint32 `protobuf:"varint,19,opt,name=xff_num_trusted_hops,json=xffNumTrustedHops,proto3" json:"xff_num_trusted_hops,omitempty"`
	// Configures what network addresses are considered internal for stats and header sanitation
	// purposes. If unspecified, only RFC1918 IP addresses will be considered internal.
	// See the documentation for :ref:`config_http_conn_man_headers_x-envoy-internal` for more
	// information about internal/external addresses.
	InternalAddressConfig *HttpConnectionManager_InternalAddressConfig `protobuf:"bytes,25,opt,name=internal_address_config,json=internalAddressConfig,proto3" json:"internal_address_config,omitempty"`
	// If set, Envoy will not append the remote address to the
	// :ref:`config_http_conn_man_headers_x-forwarded-for` HTTP header. This may be used in
	// conjunction with HTTP filters that explicitly manipulate XFF after the HTTP connection manager
	// has mutated the request headers. While :ref:`use_remote_address
	// <envoy_api_field_config.filter.network.http_connection_manager.v2.HttpConnectionManager.use_remote_address>`
	// will also suppress XFF addition, it has consequences for logging and other
	// Envoy uses of the remote address, so *skip_xff_append* should be used
	// when only an elision of XFF addition is intended.
	SkipXffAppend bool `protobuf:"varint,21,opt,name=skip_xff_append,json=skipXffAppend,proto3" json:"skip_xff_append,omitempty"`
	// Via header value to append to request and response headers. If this is
	// empty, no via header will be appended.
	Via string `protobuf:"bytes,22,opt,name=via,proto3" json:"via,omitempty"`
	// Whether the connection manager will generate the :ref:`x-request-id
	// <config_http_conn_man_headers_x-request-id>` header if it does not exist. This defaults to
	// true. Generating a random UUID4 is expensive so in high throughput scenarios where this feature
	// is not desired it can be disabled.
	GenerateRequestId *wrappers.BoolValue `protobuf:"bytes,15,opt,name=generate_request_id,json=generateRequestId,proto3" json:"generate_request_id,omitempty"`
	// Whether the connection manager will keep the :ref:`x-request-id
	// <config_http_conn_man_headers_x-request-id>` header if passed for a request that is edge
	// (Edge request is the request from external clients to front Envoy) and not reset it, which
	// is the current Envoy behaviour. This defaults to false.
	PreserveExternalRequestId bool `protobuf:"varint,32,opt,name=preserve_external_request_id,json=preserveExternalRequestId,proto3" json:"preserve_external_request_id,omitempty"`
	// How to handle the :ref:`config_http_conn_man_headers_x-forwarded-client-cert` (XFCC) HTTP
	// header.
	ForwardClientCertDetails HttpConnectionManager_ForwardClientCertDetails `protobuf:"varint,16,opt,name=forward_client_cert_details,json=forwardClientCertDetails,proto3,enum=envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_ForwardClientCertDetails" json:"forward_client_cert_details,omitempty"`
	// This field is valid only when :ref:`forward_client_cert_details
	// <envoy_api_field_config.filter.network.http_connection_manager.v2.HttpConnectionManager.forward_client_cert_details>`
	// is APPEND_FORWARD or SANITIZE_SET and the client connection is mTLS. It specifies the fields in
	// the client certificate to be forwarded. Note that in the
	// :ref:`config_http_conn_man_headers_x-forwarded-client-cert` header, *Hash* is always set, and
	// *By* is always set when the client certificate presents the URI type Subject Alternative Name
	// value.
	SetCurrentClientCertDetails *HttpConnectionManager_SetCurrentClientCertDetails `protobuf:"bytes,17,opt,name=set_current_client_cert_details,json=setCurrentClientCertDetails,proto3" json:"set_current_client_cert_details,omitempty"`
	// If proxy_100_continue is true, Envoy will proxy incoming "Expect:
	// 100-continue" headers upstream, and forward "100 Continue" responses
	// downstream. If this is false or not set, Envoy will instead strip the
	// "Expect: 100-continue" header, and send a "100 Continue" response itself.
	Proxy_100Continue bool `protobuf:"varint,18,opt,name=proxy_100_continue,json=proxy100Continue,proto3" json:"proxy_100_continue,omitempty"`
	// If
	// :ref:`use_remote_address
	// <envoy_api_field_config.filter.network.http_connection_manager.v2.HttpConnectionManager.use_remote_address>`
	// is true and represent_ipv4_remote_address_as_ipv4_mapped_ipv6 is true and the remote address is
	// an IPv4 address, the address will be mapped to IPv6 before it is appended to *x-forwarded-for*.
	// This is useful for testing compatibility of upstream services that parse the header value. For
	// example, 50.0.0.1 is represented as ::FFFF:50.0.0.1. See `IPv4-Mapped IPv6 Addresses
	// <https://tools.ietf.org/html/rfc4291#section-2.5.5.2>`_ for details. This will also affect the
	// :ref:`config_http_conn_man_headers_x-envoy-external-address` header. See
	// :ref:`http_connection_manager.represent_ipv4_remote_address_as_ipv4_mapped_ipv6
	// <config_http_conn_man_runtime_represent_ipv4_remote_address_as_ipv4_mapped_ipv6>` for runtime
	// control.
	// [#not-implemented-hide:]
	RepresentIpv4RemoteAddressAsIpv4MappedIpv6 bool                                   `protobuf:"varint,20,opt,name=represent_ipv4_remote_address_as_ipv4_mapped_ipv6,json=representIpv4RemoteAddressAsIpv4MappedIpv6,proto3" json:"represent_ipv4_remote_address_as_ipv4_mapped_ipv6,omitempty"`
	UpgradeConfigs                             []*HttpConnectionManager_UpgradeConfig `protobuf:"bytes,23,rep,name=upgrade_configs,json=upgradeConfigs,proto3" json:"upgrade_configs,omitempty"`
	// Should paths be normalized according to RFC 3986 before any processing of
	// requests by HTTP filters or routing? This affects the upstream *:path* header
	// as well. For paths that fail this check, Envoy will respond with 400 to
	// paths that are malformed. This defaults to false currently but will default
	// true in the future. When not specified, this value may be overridden by the
	// runtime variable
	// :ref:`http_connection_manager.normalize_path<config_http_conn_man_runtime_normalize_path>`.
	// See `Normalization and Comparison <https://tools.ietf.org/html/rfc3986#section-6>`
	// for details of normalization.
	// Note that Envoy does not perform
	// `case normalization <https://tools.ietf.org/html/rfc3986#section-6.2.2.1>`
	NormalizePath *wrappers.BoolValue `protobuf:"bytes,30,opt,name=normalize_path,json=normalizePath,proto3" json:"normalize_path,omitempty"`
	// Determines if adjacent slashes in the path are merged into one before any processing of
	// requests by HTTP filters or routing. This affects the upstream *:path* header as well. Without
	// setting this option, incoming requests with path `//dir///file` will not match against route
	// with `prefix` match set to `/dir`. Defaults to `false`. Note that slash merging is not part of
	// `HTTP spec <https://tools.ietf.org/html/rfc3986>` and is provided for convenience.
	MergeSlashes         bool     `protobuf:"varint,33,opt,name=merge_slashes,json=mergeSlashes,proto3" json:"merge_slashes,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *HttpConnectionManager) Reset()         { *m = HttpConnectionManager{} }
func (m *HttpConnectionManager) String() string { return proto.CompactTextString(m) }
func (*HttpConnectionManager) ProtoMessage()    {}
func (*HttpConnectionManager) Descriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{0}
}

func (m *HttpConnectionManager) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpConnectionManager.Unmarshal(m, b)
}
func (m *HttpConnectionManager) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpConnectionManager.Marshal(b, m, deterministic)
}
func (m *HttpConnectionManager) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpConnectionManager.Merge(m, src)
}
func (m *HttpConnectionManager) XXX_Size() int {
	return xxx_messageInfo_HttpConnectionManager.Size(m)
}
func (m *HttpConnectionManager) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpConnectionManager.DiscardUnknown(m)
}

var xxx_messageInfo_HttpConnectionManager proto.InternalMessageInfo

func (m *HttpConnectionManager) GetCodecType() HttpConnectionManager_CodecType {
	if m != nil {
		return m.CodecType
	}
	return HttpConnectionManager_AUTO
}

func (m *HttpConnectionManager) GetStatPrefix() string {
	if m != nil {
		return m.StatPrefix
	}
	return ""
}

type isHttpConnectionManager_RouteSpecifier interface {
	isHttpConnectionManager_RouteSpecifier()
}

type HttpConnectionManager_Rds struct {
	Rds *Rds `protobuf:"bytes,3,opt,name=rds,proto3,oneof"`
}

type HttpConnectionManager_RouteConfig struct {
	RouteConfig *v2.RouteConfiguration `protobuf:"bytes,4,opt,name=route_config,json=routeConfig,proto3,oneof"`
}

type HttpConnectionManager_ScopedRoutes struct {
	ScopedRoutes *ScopedRoutes `protobuf:"bytes,31,opt,name=scoped_routes,json=scopedRoutes,proto3,oneof"`
}

func (*HttpConnectionManager_Rds) isHttpConnectionManager_RouteSpecifier() {}

func (*HttpConnectionManager_RouteConfig) isHttpConnectionManager_RouteSpecifier() {}

func (*HttpConnectionManager_ScopedRoutes) isHttpConnectionManager_RouteSpecifier() {}

func (m *HttpConnectionManager) GetRouteSpecifier() isHttpConnectionManager_RouteSpecifier {
	if m != nil {
		return m.RouteSpecifier
	}
	return nil
}

func (m *HttpConnectionManager) GetRds() *Rds {
	if x, ok := m.GetRouteSpecifier().(*HttpConnectionManager_Rds); ok {
		return x.Rds
	}
	return nil
}

func (m *HttpConnectionManager) GetRouteConfig() *v2.RouteConfiguration {
	if x, ok := m.GetRouteSpecifier().(*HttpConnectionManager_RouteConfig); ok {
		return x.RouteConfig
	}
	return nil
}

func (m *HttpConnectionManager) GetScopedRoutes() *ScopedRoutes {
	if x, ok := m.GetRouteSpecifier().(*HttpConnectionManager_ScopedRoutes); ok {
		return x.ScopedRoutes
	}
	return nil
}

func (m *HttpConnectionManager) GetHttpFilters() []*HttpFilter {
	if m != nil {
		return m.HttpFilters
	}
	return nil
}

func (m *HttpConnectionManager) GetAddUserAgent() *wrappers.BoolValue {
	if m != nil {
		return m.AddUserAgent
	}
	return nil
}

func (m *HttpConnectionManager) GetTracing() *HttpConnectionManager_Tracing {
	if m != nil {
		return m.Tracing
	}
	return nil
}

func (m *HttpConnectionManager) GetCommonHttpProtocolOptions() *core.HttpProtocolOptions {
	if m != nil {
		return m.CommonHttpProtocolOptions
	}
	return nil
}

func (m *HttpConnectionManager) GetHttpProtocolOptions() *core.Http1ProtocolOptions {
	if m != nil {
		return m.HttpProtocolOptions
	}
	return nil
}

func (m *HttpConnectionManager) GetHttp2ProtocolOptions() *core.Http2ProtocolOptions {
	if m != nil {
		return m.Http2ProtocolOptions
	}
	return nil
}

func (m *HttpConnectionManager) GetServerName() string {
	if m != nil {
		return m.ServerName
	}
	return ""
}

func (m *HttpConnectionManager) GetServerHeaderTransformation() HttpConnectionManager_ServerHeaderTransformation {
	if m != nil {
		return m.ServerHeaderTransformation
	}
	return HttpConnectionManager_OVERWRITE
}

func (m *HttpConnectionManager) GetMaxRequestHeadersKb() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxRequestHeadersKb
	}
	return nil
}

// Deprecated: Do not use.
func (m *HttpConnectionManager) GetIdleTimeout() *duration.Duration {
	if m != nil {
		return m.IdleTimeout
	}
	return nil
}

func (m *HttpConnectionManager) GetStreamIdleTimeout() *duration.Duration {
	if m != nil {
		return m.StreamIdleTimeout
	}
	return nil
}

func (m *HttpConnectionManager) GetRequestTimeout() *duration.Duration {
	if m != nil {
		return m.RequestTimeout
	}
	return nil
}

func (m *HttpConnectionManager) GetDrainTimeout() *duration.Duration {
	if m != nil {
		return m.DrainTimeout
	}
	return nil
}

func (m *HttpConnectionManager) GetDelayedCloseTimeout() *duration.Duration {
	if m != nil {
		return m.DelayedCloseTimeout
	}
	return nil
}

func (m *HttpConnectionManager) GetAccessLog() []*v21.AccessLog {
	if m != nil {
		return m.AccessLog
	}
	return nil
}

func (m *HttpConnectionManager) GetUseRemoteAddress() *wrappers.BoolValue {
	if m != nil {
		return m.UseRemoteAddress
	}
	return nil
}

func (m *HttpConnectionManager) GetXffNumTrustedHops() uint32 {
	if m != nil {
		return m.XffNumTrustedHops
	}
	return 0
}

func (m *HttpConnectionManager) GetInternalAddressConfig() *HttpConnectionManager_InternalAddressConfig {
	if m != nil {
		return m.InternalAddressConfig
	}
	return nil
}

func (m *HttpConnectionManager) GetSkipXffAppend() bool {
	if m != nil {
		return m.SkipXffAppend
	}
	return false
}

func (m *HttpConnectionManager) GetVia() string {
	if m != nil {
		return m.Via
	}
	return ""
}

func (m *HttpConnectionManager) GetGenerateRequestId() *wrappers.BoolValue {
	if m != nil {
		return m.GenerateRequestId
	}
	return nil
}

func (m *HttpConnectionManager) GetPreserveExternalRequestId() bool {
	if m != nil {
		return m.PreserveExternalRequestId
	}
	return false
}

func (m *HttpConnectionManager) GetForwardClientCertDetails() HttpConnectionManager_ForwardClientCertDetails {
	if m != nil {
		return m.ForwardClientCertDetails
	}
	return HttpConnectionManager_SANITIZE
}

func (m *HttpConnectionManager) GetSetCurrentClientCertDetails() *HttpConnectionManager_SetCurrentClientCertDetails {
	if m != nil {
		return m.SetCurrentClientCertDetails
	}
	return nil
}

func (m *HttpConnectionManager) GetProxy_100Continue() bool {
	if m != nil {
		return m.Proxy_100Continue
	}
	return false
}

func (m *HttpConnectionManager) GetRepresentIpv4RemoteAddressAsIpv4MappedIpv6() bool {
	if m != nil {
		return m.RepresentIpv4RemoteAddressAsIpv4MappedIpv6
	}
	return false
}

func (m *HttpConnectionManager) GetUpgradeConfigs() []*HttpConnectionManager_UpgradeConfig {
	if m != nil {
		return m.UpgradeConfigs
	}
	return nil
}

func (m *HttpConnectionManager) GetNormalizePath() *wrappers.BoolValue {
	if m != nil {
		return m.NormalizePath
	}
	return nil
}

func (m *HttpConnectionManager) GetMergeSlashes() bool {
	if m != nil {
		return m.MergeSlashes
	}
	return false
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*HttpConnectionManager) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*HttpConnectionManager_Rds)(nil),
		(*HttpConnectionManager_RouteConfig)(nil),
		(*HttpConnectionManager_ScopedRoutes)(nil),
	}
}

// [#next-free-field: 8]
type HttpConnectionManager_Tracing struct {
	// The span name will be derived from this field. If
	// :ref:`traffic_direction <envoy_api_field_Listener.traffic_direction>` is
	// specified on the parent listener, then it is used instead of this field.
	//
	// .. attention::
	//  This field has been deprecated in favor of `traffic_direction`.
	OperationName HttpConnectionManager_Tracing_OperationName `protobuf:"varint,1,opt,name=operation_name,json=operationName,proto3,enum=envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_Tracing_OperationName" json:"operation_name,omitempty"` // Deprecated: Do not use.
	// A list of header names used to create tags for the active span. The header name is used to
	// populate the tag name, and the header value is used to populate the tag value. The tag is
	// created if the specified header name is present in the request's headers.
	RequestHeadersForTags []string `protobuf:"bytes,2,rep,name=request_headers_for_tags,json=requestHeadersForTags,proto3" json:"request_headers_for_tags,omitempty"`
	// Target percentage of requests managed by this HTTP connection manager that will be force
	// traced if the :ref:`x-client-trace-id <config_http_conn_man_headers_x-client-trace-id>`
	// header is set. This field is a direct analog for the runtime variable
	// 'tracing.client_sampling' in the :ref:`HTTP Connection Manager
	// <config_http_conn_man_runtime>`.
	// Default: 100%
	ClientSampling *_type.Percent `protobuf:"bytes,3,opt,name=client_sampling,json=clientSampling,proto3" json:"client_sampling,omitempty"`
	// Target percentage of requests managed by this HTTP connection manager that will be randomly
	// selected for trace generation, if not requested by the client or not forced. This field is
	// a direct analog for the runtime variable 'tracing.random_sampling' in the
	// :ref:`HTTP Connection Manager <config_http_conn_man_runtime>`.
	// Default: 100%
	RandomSampling *_type.Percent `protobuf:"bytes,4,opt,name=random_sampling,json=randomSampling,proto3" json:"random_sampling,omitempty"`
	// Target percentage of requests managed by this HTTP connection manager that will be traced
	// after all other sampling checks have been applied (client-directed, force tracing, random
	// sampling). This field functions as an upper limit on the total configured sampling rate. For
	// instance, setting client_sampling to 100% but overall_sampling to 1% will result in only 1%
	// of client requests with the appropriate headers to be force traced. This field is a direct
	// analog for the runtime variable 'tracing.global_enabled' in the
	// :ref:`HTTP Connection Manager <config_http_conn_man_runtime>`.
	// Default: 100%
	OverallSampling *_type.Percent `protobuf:"bytes,5,opt,name=overall_sampling,json=overallSampling,proto3" json:"overall_sampling,omitempty"`
	// Whether to annotate spans with additional data. If true, spans will include logs for stream
	// events.
	Verbose bool `protobuf:"varint,6,opt,name=verbose,proto3" json:"verbose,omitempty"`
	// Maximum length of the request path to extract and include in the HttpUrl tag. Used to
	// truncate lengthy request paths to meet the needs of a tracing backend.
	// Default: 256
	MaxPathTagLength     *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=max_path_tag_length,json=maxPathTagLength,proto3" json:"max_path_tag_length,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *HttpConnectionManager_Tracing) Reset()         { *m = HttpConnectionManager_Tracing{} }
func (m *HttpConnectionManager_Tracing) String() string { return proto.CompactTextString(m) }
func (*HttpConnectionManager_Tracing) ProtoMessage()    {}
func (*HttpConnectionManager_Tracing) Descriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{0, 0}
}

func (m *HttpConnectionManager_Tracing) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpConnectionManager_Tracing.Unmarshal(m, b)
}
func (m *HttpConnectionManager_Tracing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpConnectionManager_Tracing.Marshal(b, m, deterministic)
}
func (m *HttpConnectionManager_Tracing) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpConnectionManager_Tracing.Merge(m, src)
}
func (m *HttpConnectionManager_Tracing) XXX_Size() int {
	return xxx_messageInfo_HttpConnectionManager_Tracing.Size(m)
}
func (m *HttpConnectionManager_Tracing) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpConnectionManager_Tracing.DiscardUnknown(m)
}

var xxx_messageInfo_HttpConnectionManager_Tracing proto.InternalMessageInfo

// Deprecated: Do not use.
func (m *HttpConnectionManager_Tracing) GetOperationName() HttpConnectionManager_Tracing_OperationName {
	if m != nil {
		return m.OperationName
	}
	return HttpConnectionManager_Tracing_INGRESS
}

func (m *HttpConnectionManager_Tracing) GetRequestHeadersForTags() []string {
	if m != nil {
		return m.RequestHeadersForTags
	}
	return nil
}

func (m *HttpConnectionManager_Tracing) GetClientSampling() *_type.Percent {
	if m != nil {
		return m.ClientSampling
	}
	return nil
}

func (m *HttpConnectionManager_Tracing) GetRandomSampling() *_type.Percent {
	if m != nil {
		return m.RandomSampling
	}
	return nil
}

func (m *HttpConnectionManager_Tracing) GetOverallSampling() *_type.Percent {
	if m != nil {
		return m.OverallSampling
	}
	return nil
}

func (m *HttpConnectionManager_Tracing) GetVerbose() bool {
	if m != nil {
		return m.Verbose
	}
	return false
}

func (m *HttpConnectionManager_Tracing) GetMaxPathTagLength() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxPathTagLength
	}
	return nil
}

type HttpConnectionManager_InternalAddressConfig struct {
	// Whether unix socket addresses should be considered internal.
	UnixSockets          bool     `protobuf:"varint,1,opt,name=unix_sockets,json=unixSockets,proto3" json:"unix_sockets,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *HttpConnectionManager_InternalAddressConfig) Reset() {
	*m = HttpConnectionManager_InternalAddressConfig{}
}
func (m *HttpConnectionManager_InternalAddressConfig) String() string {
	return proto.CompactTextString(m)
}
func (*HttpConnectionManager_InternalAddressConfig) ProtoMessage() {}
func (*HttpConnectionManager_InternalAddressConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{0, 1}
}

func (m *HttpConnectionManager_InternalAddressConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpConnectionManager_InternalAddressConfig.Unmarshal(m, b)
}
func (m *HttpConnectionManager_InternalAddressConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpConnectionManager_InternalAddressConfig.Marshal(b, m, deterministic)
}
func (m *HttpConnectionManager_InternalAddressConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpConnectionManager_InternalAddressConfig.Merge(m, src)
}
func (m *HttpConnectionManager_InternalAddressConfig) XXX_Size() int {
	return xxx_messageInfo_HttpConnectionManager_InternalAddressConfig.Size(m)
}
func (m *HttpConnectionManager_InternalAddressConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpConnectionManager_InternalAddressConfig.DiscardUnknown(m)
}

var xxx_messageInfo_HttpConnectionManager_InternalAddressConfig proto.InternalMessageInfo

func (m *HttpConnectionManager_InternalAddressConfig) GetUnixSockets() bool {
	if m != nil {
		return m.UnixSockets
	}
	return false
}

// [#next-free-field: 7]
type HttpConnectionManager_SetCurrentClientCertDetails struct {
	// Whether to forward the subject of the client cert. Defaults to false.
	Subject *wrappers.BoolValue `protobuf:"bytes,1,opt,name=subject,proto3" json:"subject,omitempty"`
	// Whether to forward the entire client cert in URL encoded PEM format. This will appear in the
	// XFCC header comma separated from other values with the value Cert="PEM".
	// Defaults to false.
	Cert bool `protobuf:"varint,3,opt,name=cert,proto3" json:"cert,omitempty"`
	// Whether to forward the entire client cert chain (including the leaf cert) in URL encoded PEM
	// format. This will appear in the XFCC header comma separated from other values with the value
	// Chain="PEM".
	// Defaults to false.
	Chain bool `protobuf:"varint,6,opt,name=chain,proto3" json:"chain,omitempty"`
	// Whether to forward the DNS type Subject Alternative Names of the client cert.
	// Defaults to false.
	Dns bool `protobuf:"varint,4,opt,name=dns,proto3" json:"dns,omitempty"`
	// Whether to forward the URI type Subject Alternative Name of the client cert. Defaults to
	// false.
	Uri                  bool     `protobuf:"varint,5,opt,name=uri,proto3" json:"uri,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *HttpConnectionManager_SetCurrentClientCertDetails) Reset() {
	*m = HttpConnectionManager_SetCurrentClientCertDetails{}
}
func (m *HttpConnectionManager_SetCurrentClientCertDetails) String() string {
	return proto.CompactTextString(m)
}
func (*HttpConnectionManager_SetCurrentClientCertDetails) ProtoMessage() {}
func (*HttpConnectionManager_SetCurrentClientCertDetails) Descriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{0, 2}
}

func (m *HttpConnectionManager_SetCurrentClientCertDetails) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpConnectionManager_SetCurrentClientCertDetails.Unmarshal(m, b)
}
func (m *HttpConnectionManager_SetCurrentClientCertDetails) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpConnectionManager_SetCurrentClientCertDetails.Marshal(b, m, deterministic)
}
func (m *HttpConnectionManager_SetCurrentClientCertDetails) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpConnectionManager_SetCurrentClientCertDetails.Merge(m, src)
}
func (m *HttpConnectionManager_SetCurrentClientCertDetails) XXX_Size() int {
	return xxx_messageInfo_HttpConnectionManager_SetCurrentClientCertDetails.Size(m)
}
func (m *HttpConnectionManager_SetCurrentClientCertDetails) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpConnectionManager_SetCurrentClientCertDetails.DiscardUnknown(m)
}

var xxx_messageInfo_HttpConnectionManager_SetCurrentClientCertDetails proto.InternalMessageInfo

func (m *HttpConnectionManager_SetCurrentClientCertDetails) GetSubject() *wrappers.BoolValue {
	if m != nil {
		return m.Subject
	}
	return nil
}

func (m *HttpConnectionManager_SetCurrentClientCertDetails) GetCert() bool {
	if m != nil {
		return m.Cert
	}
	return false
}

func (m *HttpConnectionManager_SetCurrentClientCertDetails) GetChain() bool {
	if m != nil {
		return m.Chain
	}
	return false
}

func (m *HttpConnectionManager_SetCurrentClientCertDetails) GetDns() bool {
	if m != nil {
		return m.Dns
	}
	return false
}

func (m *HttpConnectionManager_SetCurrentClientCertDetails) GetUri() bool {
	if m != nil {
		return m.Uri
	}
	return false
}

// The configuration for HTTP upgrades.
// For each upgrade type desired, an UpgradeConfig must be added.
//
// .. warning::
//
//    The current implementation of upgrade headers does not handle
//    multi-valued upgrade headers. Support for multi-valued headers may be
//    added in the future if needed.
//
// .. warning::
//    The current implementation of upgrade headers does not work with HTTP/2
//    upstreams.
type HttpConnectionManager_UpgradeConfig struct {
	// The case-insensitive name of this upgrade, e.g. "websocket".
	// For each upgrade type present in upgrade_configs, requests with
	// Upgrade: [upgrade_type]
	// will be proxied upstream.
	UpgradeType string `protobuf:"bytes,1,opt,name=upgrade_type,json=upgradeType,proto3" json:"upgrade_type,omitempty"`
	// If present, this represents the filter chain which will be created for
	// this type of upgrade. If no filters are present, the filter chain for
	// HTTP connections will be used for this upgrade type.
	Filters []*HttpFilter `protobuf:"bytes,2,rep,name=filters,proto3" json:"filters,omitempty"`
	// Determines if upgrades are enabled or disabled by default. Defaults to true.
	// This can be overridden on a per-route basis with :ref:`cluster
	// <envoy_api_field_route.RouteAction.upgrade_configs>` as documented in the
	// :ref:`upgrade documentation <arch_overview_websocket>`.
	Enabled              *wrappers.BoolValue `protobuf:"bytes,3,opt,name=enabled,proto3" json:"enabled,omitempty"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *HttpConnectionManager_UpgradeConfig) Reset()         { *m = HttpConnectionManager_UpgradeConfig{} }
func (m *HttpConnectionManager_UpgradeConfig) String() string { return proto.CompactTextString(m) }
func (*HttpConnectionManager_UpgradeConfig) ProtoMessage()    {}
func (*HttpConnectionManager_UpgradeConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{0, 3}
}

func (m *HttpConnectionManager_UpgradeConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpConnectionManager_UpgradeConfig.Unmarshal(m, b)
}
func (m *HttpConnectionManager_UpgradeConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpConnectionManager_UpgradeConfig.Marshal(b, m, deterministic)
}
func (m *HttpConnectionManager_UpgradeConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpConnectionManager_UpgradeConfig.Merge(m, src)
}
func (m *HttpConnectionManager_UpgradeConfig) XXX_Size() int {
	return xxx_messageInfo_HttpConnectionManager_UpgradeConfig.Size(m)
}
func (m *HttpConnectionManager_UpgradeConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpConnectionManager_UpgradeConfig.DiscardUnknown(m)
}

var xxx_messageInfo_HttpConnectionManager_UpgradeConfig proto.InternalMessageInfo

func (m *HttpConnectionManager_UpgradeConfig) GetUpgradeType() string {
	if m != nil {
		return m.UpgradeType
	}
	return ""
}

func (m *HttpConnectionManager_UpgradeConfig) GetFilters() []*HttpFilter {
	if m != nil {
		return m.Filters
	}
	return nil
}

func (m *HttpConnectionManager_UpgradeConfig) GetEnabled() *wrappers.BoolValue {
	if m != nil {
		return m.Enabled
	}
	return nil
}

type Rds struct {
	// Configuration source specifier for RDS.
	ConfigSource *core.ConfigSource `protobuf:"bytes,1,opt,name=config_source,json=configSource,proto3" json:"config_source,omitempty"`
	// The name of the route configuration. This name will be passed to the RDS
	// API. This allows an Envoy configuration with multiple HTTP listeners (and
	// associated HTTP connection manager filters) to use different route
	// configurations.
	RouteConfigName      string   `protobuf:"bytes,2,opt,name=route_config_name,json=routeConfigName,proto3" json:"route_config_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Rds) Reset()         { *m = Rds{} }
func (m *Rds) String() string { return proto.CompactTextString(m) }
func (*Rds) ProtoMessage()    {}
func (*Rds) Descriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{1}
}

func (m *Rds) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Rds.Unmarshal(m, b)
}
func (m *Rds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Rds.Marshal(b, m, deterministic)
}
func (m *Rds) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Rds.Merge(m, src)
}
func (m *Rds) XXX_Size() int {
	return xxx_messageInfo_Rds.Size(m)
}
func (m *Rds) XXX_DiscardUnknown() {
	xxx_messageInfo_Rds.DiscardUnknown(m)
}

var xxx_messageInfo_Rds proto.InternalMessageInfo

func (m *Rds) GetConfigSource() *core.ConfigSource {
	if m != nil {
		return m.ConfigSource
	}
	return nil
}

func (m *Rds) GetRouteConfigName() string {
	if m != nil {
		return m.RouteConfigName
	}
	return ""
}

// This message is used to work around the limitations with 'oneof' and repeated fields.
type ScopedRouteConfigurationsList struct {
	ScopedRouteConfigurations []*v2.ScopedRouteConfiguration `protobuf:"bytes,1,rep,name=scoped_route_configurations,json=scopedRouteConfigurations,proto3" json:"scoped_route_configurations,omitempty"`
	XXX_NoUnkeyedLiteral      struct{}                       `json:"-"`
	XXX_unrecognized          []byte                         `json:"-"`
	XXX_sizecache             int32                          `json:"-"`
}

func (m *ScopedRouteConfigurationsList) Reset()         { *m = ScopedRouteConfigurationsList{} }
func (m *ScopedRouteConfigurationsList) String() string { return proto.CompactTextString(m) }
func (*ScopedRouteConfigurationsList) ProtoMessage()    {}
func (*ScopedRouteConfigurationsList) Descriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{2}
}

func (m *ScopedRouteConfigurationsList) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ScopedRouteConfigurationsList.Unmarshal(m, b)
}
func (m *ScopedRouteConfigurationsList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ScopedRouteConfigurationsList.Marshal(b, m, deterministic)
}
func (m *ScopedRouteConfigurationsList) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ScopedRouteConfigurationsList.Merge(m, src)
}
func (m *ScopedRouteConfigurationsList) XXX_Size() int {
	return xxx_messageInfo_ScopedRouteConfigurationsList.Size(m)
}
func (m *ScopedRouteConfigurationsList) XXX_DiscardUnknown() {
	xxx_messageInfo_ScopedRouteConfigurationsList.DiscardUnknown(m)
}

var xxx_messageInfo_ScopedRouteConfigurationsList proto.InternalMessageInfo

func (m *ScopedRouteConfigurationsList) GetScopedRouteConfigurations() []*v2.ScopedRouteConfiguration {
	if m != nil {
		return m.ScopedRouteConfigurations
	}
	return nil
}

// [#next-free-field: 6]
type ScopedRoutes struct {
	// The name assigned to the scoped routing configuration.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The algorithm to use for constructing a scope key for each request.
	ScopeKeyBuilder *ScopedRoutes_ScopeKeyBuilder `protobuf:"bytes,2,opt,name=scope_key_builder,json=scopeKeyBuilder,proto3" json:"scope_key_builder,omitempty"`
	// Configuration source specifier for RDS.
	// This config source is used to subscribe to RouteConfiguration resources specified in
	// ScopedRouteConfiguration messages.
	RdsConfigSource *core.ConfigSource `protobuf:"bytes,3,opt,name=rds_config_source,json=rdsConfigSource,proto3" json:"rds_config_source,omitempty"`
	// Types that are valid to be assigned to ConfigSpecifier:
	//	*ScopedRoutes_ScopedRouteConfigurationsList
	//	*ScopedRoutes_ScopedRds
	ConfigSpecifier      isScopedRoutes_ConfigSpecifier `protobuf_oneof:"config_specifier"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	XXX_sizecache        int32                          `json:"-"`
}

func (m *ScopedRoutes) Reset()         { *m = ScopedRoutes{} }
func (m *ScopedRoutes) String() string { return proto.CompactTextString(m) }
func (*ScopedRoutes) ProtoMessage()    {}
func (*ScopedRoutes) Descriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{3}
}

func (m *ScopedRoutes) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ScopedRoutes.Unmarshal(m, b)
}
func (m *ScopedRoutes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ScopedRoutes.Marshal(b, m, deterministic)
}
func (m *ScopedRoutes) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ScopedRoutes.Merge(m, src)
}
func (m *ScopedRoutes) XXX_Size() int {
	return xxx_messageInfo_ScopedRoutes.Size(m)
}
func (m *ScopedRoutes) XXX_DiscardUnknown() {
	xxx_messageInfo_ScopedRoutes.DiscardUnknown(m)
}

var xxx_messageInfo_ScopedRoutes proto.InternalMessageInfo

func (m *ScopedRoutes) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *ScopedRoutes) GetScopeKeyBuilder() *ScopedRoutes_ScopeKeyBuilder {
	if m != nil {
		return m.ScopeKeyBuilder
	}
	return nil
}

func (m *ScopedRoutes) GetRdsConfigSource() *core.ConfigSource {
	if m != nil {
		return m.RdsConfigSource
	}
	return nil
}

type isScopedRoutes_ConfigSpecifier interface {
	isScopedRoutes_ConfigSpecifier()
}

type ScopedRoutes_ScopedRouteConfigurationsList struct {
	ScopedRouteConfigurationsList *ScopedRouteConfigurationsList `protobuf:"bytes,4,opt,name=scoped_route_configurations_list,json=scopedRouteConfigurationsList,proto3,oneof"`
}

type ScopedRoutes_ScopedRds struct {
	ScopedRds *ScopedRds `protobuf:"bytes,5,opt,name=scoped_rds,json=scopedRds,proto3,oneof"`
}

func (*ScopedRoutes_ScopedRouteConfigurationsList) isScopedRoutes_ConfigSpecifier() {}

func (*ScopedRoutes_ScopedRds) isScopedRoutes_ConfigSpecifier() {}

func (m *ScopedRoutes) GetConfigSpecifier() isScopedRoutes_ConfigSpecifier {
	if m != nil {
		return m.ConfigSpecifier
	}
	return nil
}

func (m *ScopedRoutes) GetScopedRouteConfigurationsList() *ScopedRouteConfigurationsList {
	if x, ok := m.GetConfigSpecifier().(*ScopedRoutes_ScopedRouteConfigurationsList); ok {
		return x.ScopedRouteConfigurationsList
	}
	return nil
}

func (m *ScopedRoutes) GetScopedRds() *ScopedRds {
	if x, ok := m.GetConfigSpecifier().(*ScopedRoutes_ScopedRds); ok {
		return x.ScopedRds
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ScopedRoutes) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*ScopedRoutes_ScopedRouteConfigurationsList)(nil),
		(*ScopedRoutes_ScopedRds)(nil),
	}
}

// Specifies the mechanism for constructing "scope keys" based on HTTP request attributes. These
// keys are matched against a set of :ref:`Key<envoy_api_msg_ScopedRouteConfiguration.Key>`
// objects assembled from :ref:`ScopedRouteConfiguration<envoy_api_msg_ScopedRouteConfiguration>`
// messages distributed via SRDS (the Scoped Route Discovery Service) or assigned statically via
// :ref:`scoped_route_configurations_list<envoy_api_field_config.filter.network.http_connection_manager.v2.ScopedRoutes.scoped_route_configurations_list>`.
//
// Upon receiving a request's headers, the Router will build a key using the algorithm specified
// by this message. This key will be used to look up the routing table (i.e., the
// :ref:`RouteConfiguration<envoy_api_msg_RouteConfiguration>`) to use for the request.
type ScopedRoutes_ScopeKeyBuilder struct {
	// The final scope key consists of the ordered union of these fragments.
	Fragments            []*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder `protobuf:"bytes,1,rep,name=fragments,proto3" json:"fragments,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                                        `json:"-"`
	XXX_unrecognized     []byte                                          `json:"-"`
	XXX_sizecache        int32                                           `json:"-"`
}

func (m *ScopedRoutes_ScopeKeyBuilder) Reset()         { *m = ScopedRoutes_ScopeKeyBuilder{} }
func (m *ScopedRoutes_ScopeKeyBuilder) String() string { return proto.CompactTextString(m) }
func (*ScopedRoutes_ScopeKeyBuilder) ProtoMessage()    {}
func (*ScopedRoutes_ScopeKeyBuilder) Descriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{3, 0}
}

func (m *ScopedRoutes_ScopeKeyBuilder) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder.Unmarshal(m, b)
}
func (m *ScopedRoutes_ScopeKeyBuilder) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder.Marshal(b, m, deterministic)
}
func (m *ScopedRoutes_ScopeKeyBuilder) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder.Merge(m, src)
}
func (m *ScopedRoutes_ScopeKeyBuilder) XXX_Size() int {
	return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder.Size(m)
}
func (m *ScopedRoutes_ScopeKeyBuilder) XXX_DiscardUnknown() {
	xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder.DiscardUnknown(m)
}

var xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder proto.InternalMessageInfo

func (m *ScopedRoutes_ScopeKeyBuilder) GetFragments() []*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder {
	if m != nil {
		return m.Fragments
	}
	return nil
}

// Specifies the mechanism for constructing key fragments which are composed into scope keys.
type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder struct {
	// Types that are valid to be assigned to Type:
	//	*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_
	Type                 isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_Type `protobuf_oneof:"type"`
	XXX_NoUnkeyedLiteral struct{}                                            `json:"-"`
	XXX_unrecognized     []byte                                              `json:"-"`
	XXX_sizecache        int32                                               `json:"-"`
}

func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) Reset() {
	*m = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder{}
}
func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) String() string {
	return proto.CompactTextString(m)
}
func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) ProtoMessage() {}
func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) Descriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{3, 0, 0}
}

func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder.Unmarshal(m, b)
}
func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder.Marshal(b, m, deterministic)
}
func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder.Merge(m, src)
}
func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) XXX_Size() int {
	return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder.Size(m)
}
func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) XXX_DiscardUnknown() {
	xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder.DiscardUnknown(m)
}

var xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder proto.InternalMessageInfo

type isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_Type interface {
	isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_Type()
}

type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_ struct {
	HeaderValueExtractor *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor `protobuf:"bytes,1,opt,name=header_value_extractor,json=headerValueExtractor,proto3,oneof"`
}

func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_) isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_Type() {
}

func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) GetType() isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_Type {
	if m != nil {
		return m.Type
	}
	return nil
}

func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) GetHeaderValueExtractor() *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor {
	if x, ok := m.GetType().(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_); ok {
		return x.HeaderValueExtractor
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_)(nil),
	}
}

// Specifies how the value of a header should be extracted.
// The following example maps the structure of a header to the fields in this message.
//
// .. code::
//
//              <0> <1>   <-- index
//    X-Header: a=b;c=d
//    |         || |
//    |         || \----> <element_separator>
//    |         ||
//    |         |\----> <element.separator>
//    |         |
//    |         \----> <element.key>
//    |
//    \----> <name>
//
//    Each 'a=b' key-value pair constitutes an 'element' of the header field.
type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor struct {
	// The name of the header field to extract the value from.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The element separator (e.g., ';' separates 'a;b;c;d').
	// Default: empty string. This causes the entirety of the header field to be extracted.
	// If this field is set to an empty string and 'index' is used in the oneof below, 'index'
	// must be set to 0.
	ElementSeparator string `protobuf:"bytes,2,opt,name=element_separator,json=elementSeparator,proto3" json:"element_separator,omitempty"`
	// Types that are valid to be assigned to ExtractType:
	//	*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Index
	//	*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Element
	ExtractType          isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_ExtractType `protobuf_oneof:"extract_type"`
	XXX_NoUnkeyedLiteral struct{}                                                                        `json:"-"`
	XXX_unrecognized     []byte                                                                          `json:"-"`
	XXX_sizecache        int32                                                                           `json:"-"`
}

func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) Reset() {
	*m = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor{}
}
func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) String() string {
	return proto.CompactTextString(m)
}
func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) ProtoMessage() {}
func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) Descriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{3, 0, 0, 0}
}

func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor.Unmarshal(m, b)
}
func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor.Marshal(b, m, deterministic)
}
func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor.Merge(m, src)
}
func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) XXX_Size() int {
	return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor.Size(m)
}
func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) XXX_DiscardUnknown() {
	xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor.DiscardUnknown(m)
}

var xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor proto.InternalMessageInfo

func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) GetElementSeparator() string {
	if m != nil {
		return m.ElementSeparator
	}
	return ""
}

type isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_ExtractType interface {
	isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_ExtractType()
}

type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Index struct {
	Index uint32 `protobuf:"varint,3,opt,name=index,proto3,oneof"`
}

type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Element struct {
	Element *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement `protobuf:"bytes,4,opt,name=element,proto3,oneof"`
}

func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Index) isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_ExtractType() {
}

func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Element) isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_ExtractType() {
}

func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) GetExtractType() isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_ExtractType {
	if m != nil {
		return m.ExtractType
	}
	return nil
}

func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) GetIndex() uint32 {
	if x, ok := m.GetExtractType().(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Index); ok {
		return x.Index
	}
	return 0
}

func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) GetElement() *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement {
	if x, ok := m.GetExtractType().(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Element); ok {
		return x.Element
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Index)(nil),
		(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Element)(nil),
	}
}

// Specifies a header field's key value pair to match on.
type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement struct {
	// The separator between key and value (e.g., '=' separates 'k=v;...').
	// If an element is an empty string, the element is ignored.
	// If an element contains no separator, the whole element is parsed as key and the
	// fragment value is an empty string.
	// If there are multiple values for a matched key, the first value is returned.
	Separator string `protobuf:"bytes,1,opt,name=separator,proto3" json:"separator,omitempty"`
	// The key to match on.
	Key                  string   `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) Reset() {
	*m = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement{}
}
func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) String() string {
	return proto.CompactTextString(m)
}
func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) ProtoMessage() {}
func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) Descriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{3, 0, 0, 0, 0}
}

func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement.Unmarshal(m, b)
}
func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement.Marshal(b, m, deterministic)
}
func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement.Merge(m, src)
}
func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) XXX_Size() int {
	return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement.Size(m)
}
func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) XXX_DiscardUnknown() {
	xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement.DiscardUnknown(m)
}

var xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement proto.InternalMessageInfo

func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) GetSeparator() string {
	if m != nil {
		return m.Separator
	}
	return ""
}

func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) GetKey() string {
	if m != nil {
		return m.Key
	}
	return ""
}

type ScopedRds struct {
	// Configuration source specifier for scoped RDS.
	ScopedRdsConfigSource *core.ConfigSource `protobuf:"bytes,1,opt,name=scoped_rds_config_source,json=scopedRdsConfigSource,proto3" json:"scoped_rds_config_source,omitempty"`
	XXX_NoUnkeyedLiteral  struct{}           `json:"-"`
	XXX_unrecognized      []byte             `json:"-"`
	XXX_sizecache         int32              `json:"-"`
}

func (m *ScopedRds) Reset()         { *m = ScopedRds{} }
func (m *ScopedRds) String() string { return proto.CompactTextString(m) }
func (*ScopedRds) ProtoMessage()    {}
func (*ScopedRds) Descriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{4}
}

func (m *ScopedRds) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ScopedRds.Unmarshal(m, b)
}
func (m *ScopedRds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ScopedRds.Marshal(b, m, deterministic)
}
func (m *ScopedRds) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ScopedRds.Merge(m, src)
}
func (m *ScopedRds) XXX_Size() int {
	return xxx_messageInfo_ScopedRds.Size(m)
}
func (m *ScopedRds) XXX_DiscardUnknown() {
	xxx_messageInfo_ScopedRds.DiscardUnknown(m)
}

var xxx_messageInfo_ScopedRds proto.InternalMessageInfo

func (m *ScopedRds) GetScopedRdsConfigSource() *core.ConfigSource {
	if m != nil {
		return m.ScopedRdsConfigSource
	}
	return nil
}

type HttpFilter struct {
	// The name of the filter to instantiate. The name must match a
	// :ref:`supported filter <config_http_filters>`.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Filter specific configuration which depends on the filter being instantiated. See the supported
	// filters for further documentation.
	//
	// Types that are valid to be assigned to ConfigType:
	//	*HttpFilter_Config
	//	*HttpFilter_TypedConfig
	ConfigType           isHttpFilter_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
	XXX_unrecognized     []byte                  `json:"-"`
	XXX_sizecache        int32                   `json:"-"`
}

func (m *HttpFilter) Reset()         { *m = HttpFilter{} }
func (m *HttpFilter) String() string { return proto.CompactTextString(m) }
func (*HttpFilter) ProtoMessage()    {}
func (*HttpFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_8fe65268985a88f7, []int{5}
}

func (m *HttpFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpFilter.Unmarshal(m, b)
}
func (m *HttpFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpFilter.Marshal(b, m, deterministic)
}
func (m *HttpFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpFilter.Merge(m, src)
}
func (m *HttpFilter) XXX_Size() int {
	return xxx_messageInfo_HttpFilter.Size(m)
}
func (m *HttpFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpFilter.DiscardUnknown(m)
}

var xxx_messageInfo_HttpFilter proto.InternalMessageInfo

func (m *HttpFilter) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isHttpFilter_ConfigType interface {
	isHttpFilter_ConfigType()
}

type HttpFilter_Config struct {
	Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"`
}

type HttpFilter_TypedConfig struct {
	TypedConfig *any.Any `protobuf:"bytes,4,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*HttpFilter_Config) isHttpFilter_ConfigType() {}

func (*HttpFilter_TypedConfig) isHttpFilter_ConfigType() {}

func (m *HttpFilter) GetConfigType() isHttpFilter_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

// Deprecated: Do not use.
func (m *HttpFilter) GetConfig() *_struct.Struct {
	if x, ok := m.GetConfigType().(*HttpFilter_Config); ok {
		return x.Config
	}
	return nil
}

func (m *HttpFilter) GetTypedConfig() *any.Any {
	if x, ok := m.GetConfigType().(*HttpFilter_TypedConfig); ok {
		return x.TypedConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*HttpFilter) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*HttpFilter_Config)(nil),
		(*HttpFilter_TypedConfig)(nil),
	}
}

func init() {
	proto.RegisterEnum("envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_CodecType", HttpConnectionManager_CodecType_name, HttpConnectionManager_CodecType_value)
	proto.RegisterEnum("envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_ServerHeaderTransformation", HttpConnectionManager_ServerHeaderTransformation_name, HttpConnectionManager_ServerHeaderTransformation_value)
	proto.RegisterEnum("envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_ForwardClientCertDetails", HttpConnectionManager_ForwardClientCertDetails_name, HttpConnectionManager_ForwardClientCertDetails_value)
	proto.RegisterEnum("envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_Tracing_OperationName", HttpConnectionManager_Tracing_OperationName_name, HttpConnectionManager_Tracing_OperationName_value)
	proto.RegisterType((*HttpConnectionManager)(nil), "envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager")
	proto.RegisterType((*HttpConnectionManager_Tracing)(nil), "envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager.Tracing")
	proto.RegisterType((*HttpConnectionManager_InternalAddressConfig)(nil), "envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager.InternalAddressConfig")
	proto.RegisterType((*HttpConnectionManager_SetCurrentClientCertDetails)(nil), "envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager.SetCurrentClientCertDetails")
	proto.RegisterType((*HttpConnectionManager_UpgradeConfig)(nil), "envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager.UpgradeConfig")
	proto.RegisterType((*Rds)(nil), "envoy.config.filter.network.http_connection_manager.v2.Rds")
	proto.RegisterType((*ScopedRouteConfigurationsList)(nil), "envoy.config.filter.network.http_connection_manager.v2.ScopedRouteConfigurationsList")
	proto.RegisterType((*ScopedRoutes)(nil), "envoy.config.filter.network.http_connection_manager.v2.ScopedRoutes")
	proto.RegisterType((*ScopedRoutes_ScopeKeyBuilder)(nil), "envoy.config.filter.network.http_connection_manager.v2.ScopedRoutes.ScopeKeyBuilder")
	proto.RegisterType((*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder)(nil), "envoy.config.filter.network.http_connection_manager.v2.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder")
	proto.RegisterType((*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor)(nil), "envoy.config.filter.network.http_connection_manager.v2.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.HeaderValueExtractor")
	proto.RegisterType((*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement)(nil), "envoy.config.filter.network.http_connection_manager.v2.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.HeaderValueExtractor.KvElement")
	proto.RegisterType((*ScopedRds)(nil), "envoy.config.filter.network.http_connection_manager.v2.ScopedRds")
	proto.RegisterType((*HttpFilter)(nil), "envoy.config.filter.network.http_connection_manager.v2.HttpFilter")
}

func init() {
	proto.RegisterFile("envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.proto", fileDescriptor_8fe65268985a88f7)
}

var fileDescriptor_8fe65268985a88f7 = []byte{
	// 2317 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xcb, 0x73, 0x23, 0x47,
	0x19, 0xd7, 0x48, 0xf2, 0x5a, 0xfa, 0x24, 0x59, 0xe3, 0xf6, 0x6b, 0x2c, 0x3b, 0x59, 0xc5, 0xa9,
	0x04, 0x57, 0x42, 0xc9, 0xbb, 0xde, 0xb0, 0x14, 0x8f, 0x0a, 0x91, 0xfc, 0x88, 0xb4, 0x0f, 0xdb,
	0x35, 0x92, 0xb3, 0x84, 0x84, 0x1a, 0xda, 0x33, 0x2d, 0x69, 0xb0, 0x34, 0x33, 0x74, 0x8f, 0x14,
	0x8b, 0x13, 0x05, 0x9c, 0x52, 0x5c, 0xe0, 0xc0, 0x85, 0x0b, 0x07, 0xaa, 0xe0, 0xc6, 0xa3, 0xf8,
	0x1b, 0xb8, 0xf2, 0xbf, 0x70, 0xa2, 0xf6, 0x44, 0xf5, 0x63, 0xf4, 0xb2, 0x64, 0x17, 0xbb, 0x0e,
	0x9c, 0xd4, 0xf3, 0x3d, 0x7e, 0xdf, 0xd7, 0xdd, 0xdf, 0xa3, 0xbb, 0x05, 0x0d, 0xe2, 0xf5, 0xfd,
	0xc1, 0x9e, 0xed, 0x7b, 0x4d, 0xb7, 0xb5, 0xd7, 0x74, 0x3b, 0x21, 0xa1, 0x7b, 0x1e, 0x09, 0xbf,
	0xf0, 0xe9, 0xe5, 0x5e, 0x3b, 0x0c, 0x03, 0xcb, 0xf6, 0x3d, 0x8f, 0xd8, 0xa1, 0xeb, 0x7b, 0x56,
	0x17, 0x7b, 0xb8, 0x45, 0xe8, 0x5e, 0x7f, 0x7f, 0x1e, 0xab, 0x14, 0x50, 0x3f, 0xf4, 0xd1, 0x63,
	0x81, 0x5a, 0x92, 0xa8, 0x25, 0x89, 0x5a, 0x52, 0xa8, 0xa5, 0x79, 0xaa, 0xfd, 0xfd, 0xc2, 0x3b,
	0xd2, 0x1b, 0x1c, 0xb8, 0xdc, 0x86, 0xed, 0x53, 0xa2, 0x3c, 0xb3, 0x98, 0xdf, 0xa3, 0x36, 0x91,
	0xf0, 0x85, 0xe2, 0x75, 0x31, 0xc1, 0xb0, 0xfd, 0x8e, 0x92, 0x58, 0x9f, 0x90, 0xa0, 0x0e, 0x53,
	0xf4, 0x8d, 0x09, 0x3a, 0x1b, 0x31, 0x1e, 0xcc, 0x5a, 0x07, 0x6c, 0xdb, 0x84, 0xb1, 0x8e, 0xdf,
	0xe2, 0xc2, 0xc3, 0x0f, 0xa5, 0x61, 0x48, 0x8d, 0x70, 0x10, 0x90, 0xbd, 0x80, 0x50, 0x9b, 0x78,
	0xa1, 0xe2, 0x6c, 0xb6, 0x7c, 0xbf, 0xd5, 0x51, 0x3e, 0x5d, 0xf4, 0x9a, 0x7b, 0xd8, 0x1b, 0x28,
	0xd6, 0x9b, 0xd3, 0x2c, 0xa7, 0x47, 0x31, 0x5f, 0x05, 0xc5, 0xdf, 0x9e, 0xe6, 0xb3, 0x90, 0xf6,
	0xec, 0x70, 0x9e, 0xf6, 0x17, 0x14, 0x07, 0x01, 0xa1, 0xc3, 0xd9, 0xf5, 0x71, 0xc7, 0x75, 0x70,
	0x48, 0xf6, 0xa2, 0x81, 0x64, 0xec, 0xfc, 0xed, 0x2d, 0x58, 0xab, 0x86, 0x61, 0x70, 0x30, 0x5c,
	0xf5, 0xe7, 0x72, 0xd1, 0xd1, 0xcf, 0x34, 0x00, 0xdb, 0x77, 0x88, 0x6d, 0xf1, 0x89, 0x18, 0x5a,
	0x51, 0xdb, 0x5d, 0xda, 0x7f, 0x51, 0x7a, 0xb5, 0xfd, 0x2b, 0xcd, 0xb4, 0x51, 0x3a, 0xe0, 0xf8,
	0x8d, 0x41, 0x40, 0x2a, 0xa9, 0x97, 0x95, 0x85, 0x9f, 0x6b, 0x71, 0x5d, 0x33, 0xd3, 0x76, 0x44,
	0x44, 0xbb, 0x90, 0x61, 0x21, 0x0e, 0xad, 0x80, 0x92, 0xa6, 0x7b, 0x65, 0xc4, 0x8b, 0xda, 0x6e,
	0xba, 0xb2, 0xf8, 0xb2, 0x92, 0xa4, 0xf1, 0xa2, 0x66, 0x02, 0xe7, 0x9d, 0x09, 0x16, 0x3a, 0x85,
	0x04, 0x75, 0x98, 0x91, 0x28, 0x6a, 0xbb, 0x99, 0xfd, 0xef, 0xbc, 0xaa, 0x93, 0xa6, 0xc3, 0xaa,
	0x31, 0x93, 0x23, 0xa1, 0x23, 0xc8, 0x52, 0xbf, 0x17, 0x12, 0x4b, 0x82, 0x18, 0x49, 0x81, 0x5c,
	0x54, 0xc8, 0x38, 0x70, 0x85, 0x3c, 0x97, 0x38, 0x10, 0x02, 0x6a, 0xb3, 0xaa, 0x31, 0x33, 0x43,
	0x47, 0x54, 0x74, 0x09, 0x39, 0x66, 0xfb, 0x01, 0x71, 0x2c, 0x41, 0x65, 0xc6, 0x7d, 0x81, 0x73,
	0xf8, 0xaa, 0x1e, 0xd6, 0x05, 0x98, 0xb0, 0xcb, 0x5d, 0xcd, 0xb2, 0xb1, 0x6f, 0x44, 0x20, 0x2b,
	0x54, 0x25, 0x1c, 0x33, 0x16, 0x8a, 0x89, 0xdd, 0xcc, 0x7e, 0xe5, 0x75, 0xb6, 0xec, 0x58, 0x48,
	0x9b, 0x99, 0xf6, 0x70, 0xcc, 0xd0, 0x47, 0xb0, 0x84, 0x1d, 0xc7, 0xea, 0x31, 0x42, 0x2d, 0xdc,
	0x22, 0x5e, 0x68, 0xdc, 0x13, 0x93, 0x2a, 0x94, 0x64, 0x10, 0x96, 0xa2, 0x20, 0x2c, 0x55, 0x7c,
	0xbf, 0xf3, 0x09, 0xee, 0xf4, 0x88, 0x99, 0xc5, 0x8e, 0x73, 0xce, 0x08, 0x2d, 0x73, 0x79, 0xe4,
	0xc3, 0x62, 0x48, 0xb1, 0xed, 0x7a, 0x2d, 0x63, 0x51, 0xa8, 0x9e, 0xdf, 0x6d, 0x58, 0x35, 0x24,
	0xb8, 0x19, 0x59, 0x41, 0x2d, 0xd8, 0xb6, 0xfd, 0x6e, 0xd7, 0xf7, 0x2c, 0x81, 0x15, 0x95, 0x04,
	0xcb, 0x0f, 0xb8, 0x1a, 0x33, 0xde, 0x16, 0x5e, 0xbc, 0x3b, 0xb9, 0xbb, 0xbc, 0x7a, 0x08, 0x03,
	0x67, 0x4a, 0xfc, 0x54, 0x4a, 0x9b, 0x9b, 0x12, 0x6b, 0x06, 0x0b, 0x7d, 0x06, 0x6b, 0xb3, 0x2d,
	0xa4, 0x84, 0x85, 0xaf, 0xcd, 0xb1, 0xf0, 0x70, 0xda, 0xc4, 0x4a, 0x7b, 0x06, 0xf8, 0x0f, 0x61,
	0x9d, 0x93, 0xf7, 0xaf, 0xa3, 0xa7, 0x6f, 0x44, 0xdf, 0x9f, 0x46, 0x5f, 0x6d, 0xcf, 0xa0, 0xa2,
	0xfb, 0x90, 0x61, 0x84, 0xf6, 0x09, 0xb5, 0x3c, 0xdc, 0x25, 0x06, 0xf0, 0x6c, 0x33, 0x41, 0x92,
	0x4e, 0x70, 0x97, 0xa0, 0xbf, 0x6b, 0xb0, 0xad, 0x24, 0xda, 0x04, 0x3b, 0x84, 0x5a, 0x21, 0xc5,
	0x1e, 0x6b, 0xfa, 0xb4, 0x2b, 0x82, 0xdf, 0xd8, 0x11, 0x35, 0xa2, 0x7d, 0xb7, 0x9b, 0x59, 0x17,
	0x16, 0xab, 0xc2, 0x60, 0x63, 0xc2, 0xde, 0x58, 0xd1, 0x28, 0xb0, 0xb9, 0x52, 0xe8, 0x73, 0x58,
	0xef, 0xe2, 0x2b, 0x8b, 0x92, 0x9f, 0xf4, 0x08, 0x0b, 0x95, 0xeb, 0xcc, 0xba, 0xbc, 0x30, 0xde,
	0x10, 0xcb, 0xb6, 0x7d, 0x2d, 0x6e, 0xcf, 0x6b, 0x5e, 0xf8, 0x68, 0x5f, 0x44, 0x6e, 0x25, 0xfd,
	0xb2, 0x72, 0xef, 0xbd, 0xa4, 0xf1, 0xa3, 0x62, 0xcc, 0x5c, 0xe9, 0xe2, 0x2b, 0x53, 0xa2, 0x48,
	0x43, 0xec, 0xe9, 0x05, 0xfa, 0x08, 0xb2, 0xae, 0xd3, 0x21, 0x56, 0xe8, 0x76, 0x89, 0xdf, 0x0b,
	0x8d, 0x8c, 0xc0, 0xdc, 0xbc, 0x86, 0x79, 0xa8, 0x2a, 0x44, 0x25, 0x6e, 0x68, 0x66, 0x86, 0xab,
	0x34, 0xa4, 0x06, 0xaa, 0xc1, 0x0a, 0x0b, 0x29, 0xc1, 0x5d, 0x6b, 0x02, 0xc8, 0xb8, 0x05, 0xc8,
	0x5c, 0x96, 0x5a, 0xb5, 0x31, 0xa8, 0x0a, 0xe4, 0xa3, 0x69, 0x46, 0x30, 0xdb, 0xb7, 0xc1, 0x2c,
	0x29, 0x8d, 0x08, 0xe3, 0x43, 0xc8, 0x39, 0x14, 0xbb, 0xde, 0x10, 0x21, 0x7b, 0x1b, 0x42, 0x56,
	0xc8, 0x47, 0xfa, 0xcf, 0x61, 0xcd, 0x21, 0x1d, 0x3c, 0x20, 0x8e, 0x65, 0x77, 0x7c, 0x36, 0x9a,
	0x50, 0xe1, 0x36, 0x9c, 0x15, 0xa5, 0x77, 0xc0, 0xd5, 0x22, 0xb8, 0x27, 0x00, 0xb2, 0xbf, 0x5a,
	0x1d, 0xbf, 0x65, 0xe4, 0x44, 0x49, 0x7b, 0x7f, 0x66, 0x84, 0x8d, 0xda, 0x70, 0x7f, 0xbf, 0x54,
	0x16, 0x1f, 0xcf, 0xfc, 0x96, 0x99, 0xc6, 0xd1, 0x10, 0x55, 0x01, 0xf5, 0x18, 0xb1, 0x28, 0xe9,
	0xfa, 0x21, 0xb1, 0xb0, 0xe3, 0x50, 0xc2, 0x98, 0xb1, 0x74, 0x6b, 0xf5, 0xd2, 0x7b, 0x8c, 0x98,
	0x42, 0xa9, 0x2c, 0x75, 0xd0, 0x1e, 0xac, 0x5e, 0x35, 0x9b, 0x96, 0xd7, 0xeb, 0x5a, 0x21, 0xed,
	0xb1, 0x90, 0x38, 0x56, 0xdb, 0x0f, 0x98, 0xb1, 0x52, 0xd4, 0x76, 0x73, 0xe6, 0xf2, 0x55, 0xb3,
	0x79, 0xd2, 0xeb, 0x36, 0x24, 0xa7, 0xea, 0x07, 0x0c, 0xfd, 0x4e, 0x83, 0x0d, 0xd7, 0x0b, 0x09,
	0xf5, 0x70, 0x27, 0xb2, 0x1c, 0xf5, 0x96, 0x4d, 0xe1, 0x80, 0x7d, 0xb7, 0x69, 0x53, 0x53, 0xc6,
	0x94, 0xc7, 0xb2, 0x1f, 0x99, 0x6b, 0xee, 0x2c, 0x32, 0x7a, 0x17, 0xf2, 0xec, 0xd2, 0x0d, 0x2c,
	0x3e, 0x27, 0x7e, 0x6e, 0xf0, 0x1c, 0x63, 0xad, 0xa8, 0xed, 0xa6, 0xcc, 0x1c, 0x27, 0x7f, 0xbf,
	0xd9, 0x2c, 0x0b, 0x22, 0xd2, 0x21, 0xd1, 0x77, 0xb1, 0xb1, 0x2e, 0x4a, 0x03, 0x1f, 0xa2, 0x27,
	0xb0, 0xd2, 0x22, 0x1e, 0xa1, 0x38, 0x24, 0xc3, 0x0c, 0x73, 0x1d, 0x23, 0x7f, 0xeb, 0x9a, 0x2e,
	0x47, 0x6a, 0x2a, 0xa3, 0x6a, 0x0e, 0xfa, 0x1e, 0x6c, 0x07, 0x94, 0x88, 0x4c, 0xb6, 0xc8, 0x95,
	0x5a, 0xab, 0x31, 0xd0, 0xa2, 0x70, 0x69, 0x33, 0x92, 0x39, 0x52, 0x22, 0x23, 0x80, 0x3f, 0x6b,
	0xb0, 0xd5, 0xf4, 0xe9, 0x17, 0x98, 0xf2, 0xd8, 0x73, 0x89, 0x17, 0x5a, 0x36, 0xa1, 0xa1, 0xe5,
	0x90, 0x10, 0xbb, 0x1d, 0x66, 0xe8, 0xa2, 0x3e, 0x35, 0xef, 0x76, 0xa1, 0x8f, 0xa5, 0xc1, 0x03,
	0x61, 0xef, 0x80, 0xd0, 0xf0, 0x50, 0x5a, 0x1b, 0xab, 0x4e, 0x46, 0x73, 0x8e, 0x0c, 0xf7, 0xf8,
	0x3e, 0x23, 0xa1, 0x65, 0xf7, 0x28, 0x15, 0xee, 0xce, 0xf0, 0x7a, 0x59, 0xac, 0xa5, 0x7b, 0xd7,
	0x55, 0x35, 0x3c, 0x90, 0x36, 0xaf, 0x39, 0x65, 0x6e, 0xb1, 0xf9, 0x4c, 0xf4, 0x75, 0x40, 0x01,
	0xf5, 0xaf, 0x06, 0xd6, 0xc3, 0x07, 0x0f, 0xb8, 0xc5, 0xd0, 0xf5, 0x7a, 0xc4, 0x40, 0x62, 0x6b,
	0x74, 0xc1, 0x79, 0xf8, 0xe0, 0xc1, 0x81, 0xa2, 0x23, 0x02, 0x0f, 0x29, 0x11, 0x1b, 0xe6, 0x85,
	0x96, 0x1b, 0xf4, 0x3f, 0x98, 0x4a, 0x3e, 0x0b, 0x33, 0x49, 0xee, 0xf2, 0xb0, 0x73, 0xf8, 0xf8,
	0xb1, 0xb1, 0x2a, 0xc0, 0xde, 0x1b, 0x2a, 0xd6, 0x82, 0xfe, 0x07, 0x13, 0xe9, 0x57, 0x66, 0x9c,
	0xf4, 0x5c, 0xa8, 0xd4, 0x82, 0xfe, 0x63, 0xf4, 0x4b, 0x0d, 0xf2, 0xbd, 0xa0, 0x45, 0xb1, 0x13,
	0x1d, 0xd8, 0x98, 0xb1, 0x21, 0x4a, 0xc5, 0x67, 0x77, 0xbb, 0x6c, 0xe7, 0xd2, 0x88, 0xca, 0xa6,
	0xa5, 0xde, 0xf8, 0x27, 0x43, 0x65, 0x58, 0xf2, 0x78, 0xdb, 0xe9, 0xb8, 0x3f, 0x25, 0x56, 0x80,
	0xc3, 0xb6, 0xf1, 0xe6, 0xad, 0x79, 0x90, 0x1b, 0x6a, 0x9c, 0xe1, 0xb0, 0x8d, 0xde, 0x86, 0x5c,
	0x97, 0xd0, 0x16, 0xb1, 0x58, 0x07, 0xb3, 0x36, 0x61, 0xc6, 0x5b, 0x62, 0x31, 0xb2, 0x82, 0x58,
	0x97, 0xb4, 0xc2, 0x9f, 0x92, 0xb0, 0xa8, 0xce, 0x38, 0xe8, 0xb7, 0x1a, 0x2c, 0xf9, 0x01, 0x91,
	0x25, 0x54, 0x76, 0x6e, 0x79, 0x54, 0xb7, 0xbf, 0x92, 0x33, 0x55, 0xe9, 0x34, 0xb2, 0xc5, 0x8f,
	0x04, 0x15, 0x88, 0x62, 0xdc, 0xd0, 0xcc, 0x9c, 0x3f, 0xce, 0x42, 0xdf, 0x04, 0x63, 0xba, 0xe5,
	0x36, 0x7d, 0x6a, 0x85, 0xb8, 0xc5, 0x8c, 0x78, 0x31, 0xb1, 0x9b, 0x36, 0xd7, 0xe8, 0x44, 0x33,
	0x3d, 0xf6, 0x69, 0x03, 0xb7, 0x18, 0xfa, 0x2e, 0xe4, 0x55, 0x1a, 0x30, 0xdc, 0x0d, 0x3a, 0xfc,
	0x94, 0x28, 0xcf, 0xf5, 0x2b, 0x6a, 0x46, 0xfc, 0x3e, 0x52, 0x3a, 0x93, 0x17, 0x2b, 0x73, 0x49,
	0xca, 0xd6, 0x95, 0x28, 0xd7, 0xa6, 0xd8, 0x73, 0xfc, 0xee, 0x48, 0x3b, 0x79, 0x83, 0xb6, 0x94,
	0x1d, 0x6a, 0x7f, 0x08, 0xba, 0xdf, 0x27, 0x14, 0x77, 0x3a, 0x23, 0xf5, 0x85, 0xf9, 0xea, 0x79,
	0x25, 0x3c, 0xd4, 0x37, 0x60, 0xb1, 0x4f, 0xe8, 0x85, 0xcf, 0x88, 0x38, 0x14, 0xa7, 0xcc, 0xe8,
	0x13, 0x3d, 0x05, 0x7e, 0x7c, 0x10, 0x51, 0xc1, 0xd7, 0xc0, 0xea, 0x10, 0xaf, 0x15, 0xb6, 0xd5,
	0xf9, 0xf7, 0xc6, 0x23, 0x88, 0xa9, 0x77, 0xf1, 0x15, 0x0f, 0x8e, 0x06, 0x6e, 0x3d, 0x13, 0x5a,
	0x3b, 0xbb, 0x90, 0x9b, 0xd8, 0x07, 0x94, 0x81, 0xc5, 0xda, 0xc9, 0xc7, 0xe6, 0x51, 0xbd, 0xae,
	0xc7, 0x10, 0xc0, 0xbd, 0x23, 0x39, 0xd6, 0x0a, 0xdf, 0x86, 0xb5, 0x99, 0x9d, 0x00, 0xbd, 0x05,
	0xd9, 0x9e, 0xe7, 0x5e, 0x59, 0xcc, 0xb7, 0x2f, 0x49, 0xc8, 0x44, 0xd0, 0xa4, 0xcc, 0x0c, 0xa7,
	0xd5, 0x25, 0xa9, 0xf0, 0x47, 0x0d, 0xb6, 0x6e, 0xa8, 0x13, 0xe8, 0x03, 0x58, 0x64, 0xbd, 0x8b,
	0x1f, 0x13, 0x3b, 0x14, 0xda, 0x37, 0xc7, 0x79, 0x24, 0x8a, 0x10, 0x24, 0x79, 0x79, 0x13, 0x7b,
	0x9a, 0x32, 0xc5, 0x18, 0xad, 0xc2, 0x82, 0xdd, 0xc6, 0xae, 0xa7, 0x16, 0x4d, 0x7e, 0xf0, 0x6e,
	0xe3, 0x78, 0x4c, 0x6c, 0x5f, 0xca, 0xe4, 0x43, 0x4e, 0xe9, 0x51, 0x57, 0xec, 0x48, 0xca, 0xe4,
	0xc3, 0x27, 0xc9, 0x54, 0x5c, 0x4f, 0x14, 0xfe, 0xa1, 0x41, 0x6e, 0x22, 0x35, 0xc5, 0xf4, 0x54,
	0x41, 0x18, 0x5e, 0x5f, 0xd3, 0x66, 0x46, 0xd1, 0xc4, 0xed, 0xf2, 0x73, 0x58, 0x8c, 0x6e, 0x4a,
	0xf1, 0x3b, 0xbb, 0x29, 0x45, 0x90, 0x7c, 0x71, 0x88, 0x87, 0x2f, 0x3a, 0xc4, 0x51, 0xd1, 0x7b,
	0xe3, 0xe2, 0x28, 0xd1, 0x9d, 0xc7, 0x90, 0x1e, 0xde, 0x89, 0x51, 0x0a, 0x92, 0xe5, 0xf3, 0xc6,
	0xa9, 0x1e, 0x43, 0x69, 0x58, 0xa8, 0x36, 0x1a, 0x67, 0x0f, 0x75, 0x2d, 0x1a, 0xee, 0xeb, 0xf1,
	0x68, 0xf8, 0x48, 0x4f, 0xec, 0xd4, 0xa1, 0x30, 0xff, 0x9c, 0x8c, 0x72, 0x90, 0x3e, 0xfd, 0xe4,
	0xc8, 0x7c, 0x61, 0xd6, 0x1a, 0x47, 0x7a, 0x0c, 0xad, 0x82, 0x5e, 0x3e, 0x3b, 0x3b, 0x3a, 0x39,
	0xb4, 0x6a, 0xc7, 0x56, 0xb9, 0x52, 0x3f, 0x3a, 0x69, 0xe8, 0x1a, 0xd2, 0x21, 0x7b, 0x56, 0xae,
	0xd7, 0xad, 0x46, 0xd5, 0x3c, 0x3d, 0xff, 0xb8, 0xaa, 0xc7, 0x77, 0x06, 0x60, 0xcc, 0x6b, 0x6e,
	0x28, 0x0b, 0xa9, 0x7a, 0xf9, 0xa4, 0xd6, 0xa8, 0xfd, 0x80, 0x23, 0xea, 0x90, 0x3d, 0x3e, 0x35,
	0x5f, 0x94, 0xcd, 0x43, 0xeb, 0xf4, 0xe4, 0xd9, 0xa7, 0xba, 0x86, 0x10, 0x2c, 0x29, 0x1b, 0x8a,
	0xa1, 0xc7, 0xb9, 0x54, 0xa4, 0x63, 0xd5, 0x8f, 0x1a, 0x7a, 0x02, 0x6d, 0xc0, 0x4a, 0xf9, 0xd9,
	0x8b, 0xf2, 0xa7, 0x75, 0x6b, 0x42, 0x3d, 0x59, 0x59, 0x87, 0xbc, 0xbc, 0x7e, 0xb3, 0x80, 0xd8,
	0x6e, 0xd3, 0x25, 0x14, 0x25, 0xfe, 0x5d, 0xd1, 0x9e, 0x24, 0x53, 0x5b, 0xfa, 0xf6, 0xce, 0x97,
	0x1a, 0x24, 0x4c, 0x87, 0xa1, 0x13, 0xc8, 0x4d, 0x3c, 0x02, 0xa9, 0x30, 0xbc, 0x3f, 0xe3, 0x1e,
	0x24, 0xc3, 0xa2, 0x2e, 0xc4, 0x44, 0x67, 0xfe, 0x52, 0x74, 0xe6, 0xac, 0x3d, 0x46, 0x47, 0x8f,
	0x60, 0x79, 0xfc, 0xd2, 0x2f, 0xab, 0xe9, 0xd4, 0xab, 0x43, 0x7e, 0xec, 0x7a, 0xcf, 0x53, 0x6f,
	0xe7, 0xd7, 0x1a, 0xbc, 0x31, 0x76, 0x2d, 0x9f, 0x78, 0x0e, 0x60, 0xcf, 0x5c, 0x16, 0xa2, 0x00,
	0xb6, 0xc6, 0x1f, 0x01, 0x14, 0x7a, 0x24, 0x62, 0x68, 0x22, 0xf8, 0xa6, 0x2e, 0x9f, 0xf3, 0x10,
	0x85, 0xef, 0xbf, 0xd1, 0xe2, 0x29, 0xcd, 0xdc, 0x64, 0xf3, 0xac, 0xee, 0xfc, 0x01, 0x20, 0x3b,
	0xfe, 0x54, 0x80, 0xb6, 0x20, 0x39, 0x6c, 0x0d, 0x63, 0x93, 0x11, 0x44, 0xf4, 0xa5, 0x06, 0xcb,
	0x02, 0xcb, 0xba, 0x24, 0x03, 0xeb, 0xa2, 0xe7, 0x76, 0x1c, 0x42, 0xc5, 0xbc, 0x33, 0xfb, 0x8d,
	0xbb, 0x78, 0xa9, 0x90, 0x1f, 0x4f, 0xc9, 0xa0, 0x22, 0xb1, 0xc7, 0x36, 0x20, 0xcf, 0x26, 0x59,
	0xe8, 0x1c, 0x96, 0xa9, 0x13, 0x1d, 0x8d, 0xa3, 0x7d, 0x4d, 0xfc, 0xb7, 0xfb, 0x9a, 0xa7, 0x0e,
	0x1b, 0x67, 0xa1, 0xdf, 0x6b, 0x50, 0xbc, 0x61, 0x13, 0xac, 0x8e, 0xcb, 0x42, 0xd5, 0x28, 0xce,
	0xef, 0x60, 0xca, 0xd7, 0xa3, 0xa0, 0x1a, 0x33, 0xdf, 0x60, 0x37, 0x86, 0xc9, 0x05, 0x40, 0xe4,
	0xa1, 0xc3, 0x54, 0xd7, 0x29, 0xbf, 0xa6, 0x2f, 0xe2, 0x41, 0x2b, 0xcd, 0xa2, 0x8f, 0xc2, 0xbf,
	0x16, 0x20, 0x3f, 0xb5, 0x19, 0xe8, 0x57, 0x1a, 0xa4, 0x9b, 0x14, 0xb7, 0xba, 0xc4, 0x0b, 0xa3,
	0x68, 0x74, 0xbe, 0x8a, 0x6d, 0x2f, 0x1d, 0x2b, 0x2b, 0xe3, 0x61, 0x20, 0x63, 0x79, 0xe4, 0x40,
	0xe1, 0x9f, 0x49, 0xc8, 0x4f, 0x09, 0xa2, 0xbf, 0x6a, 0xb0, 0xae, 0x9e, 0x1c, 0xfa, 0xbc, 0x60,
	0xf2, 0xeb, 0x01, 0xc5, 0x76, 0xe8, 0x53, 0x95, 0xf2, 0x83, 0xff, 0x85, 0xbf, 0x25, 0x59, 0x5c,
	0x45, 0xc9, 0x3e, 0x8a, 0x1c, 0xa8, 0xc6, 0xcc, 0xd5, 0xf6, 0x0c, 0x7a, 0xe1, 0x65, 0x1c, 0x56,
	0x67, 0x29, 0xdc, 0x9c, 0x8b, 0xef, 0xc3, 0x32, 0xe9, 0x90, 0xae, 0x38, 0xfd, 0x90, 0x00, 0x53,
	0xcc, 0xe7, 0x28, 0x4a, 0x90, 0xa9, 0x2b, 0x46, 0x3d, 0xa2, 0xa3, 0x75, 0x58, 0x70, 0x3d, 0x87,
	0x5c, 0x89, 0xfc, 0xc8, 0x55, 0x63, 0xa6, 0xfc, 0xe4, 0xc1, 0xbe, 0xa8, 0x84, 0x55, 0x4c, 0xff,
	0x42, 0xfb, 0xbf, 0x2d, 0x50, 0xe9, 0x69, 0xff, 0x48, 0xfa, 0x52, 0x8d, 0x99, 0x91, 0x5b, 0x85,
	0xe7, 0x90, 0x1e, 0xd2, 0xd1, 0x3b, 0x90, 0x1e, 0x4d, 0x76, 0x6a, 0x59, 0x46, 0x1c, 0xb4, 0x09,
	0x89, 0x4b, 0x32, 0x98, 0x2e, 0xc8, 0x9c, 0x56, 0x59, 0x82, 0xac, 0x0a, 0x09, 0xd1, 0xee, 0x2b,
	0x19, 0x48, 0xf2, 0x5f, 0xd1, 0x34, 0x2a, 0x1b, 0xa0, 0x47, 0xe5, 0x64, 0xa2, 0x9b, 0xec, 0xf8,
	0x90, 0x1e, 0xe6, 0x09, 0xba, 0x00, 0x63, 0x94, 0x7e, 0xd6, 0x6b, 0xf6, 0x95, 0xb5, 0x61, 0xca,
	0x8d, 0x0b, 0xec, 0xfc, 0x45, 0x03, 0x18, 0x1d, 0x16, 0x6e, 0x8e, 0x84, 0x6f, 0xc0, 0x3d, 0xf5,
	0x3e, 0x20, 0x2b, 0xf1, 0xc6, 0xb5, 0xf3, 0x43, 0x5d, 0xfc, 0x03, 0x50, 0x89, 0x1b, 0x5a, 0x35,
	0x66, 0x2a, 0x61, 0xf4, 0x2d, 0xc8, 0xf2, 0x99, 0x3b, 0x93, 0x0f, 0xd7, 0xab, 0xd7, 0x94, 0xcb,
	0xde, 0xa0, 0x1a, 0x33, 0x33, 0x42, 0x56, 0xfa, 0x58, 0xc9, 0x41, 0x46, 0x4d, 0x9b, 0x53, 0x9f,
	0x24, 0x53, 0x09, 0x3d, 0x59, 0x71, 0xe0, 0xd0, 0xf5, 0xe5, 0xc4, 0xc5, 0xed, 0xee, 0x15, 0xe3,
	0xa8, 0x52, 0x98, 0x79, 0xad, 0x10, 0x6f, 0x90, 0x67, 0xda, 0xc5, 0x3d, 0xe1, 0xd7, 0xa3, 0xff,
	0x04, 0x00, 0x00, 0xff, 0xff, 0x63, 0xb0, 0xfb, 0x20, 0x75, 0x1a, 0x00, 0x00,
}
   070701000000EA000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004100000000cilium-proxy-20200109/go/envoy/config/filter/network/mongo_proxy  070701000000EB000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004400000000cilium-proxy-20200109/go/envoy/config/filter/network/mongo_proxy/v2   070701000000EC000081A4000003E800000064000000015E17A247000015DA000000000000000000000000000000000000005600000000cilium-proxy-20200109/go/envoy/config/filter/network/mongo_proxy/v2/mongo_proxy.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/network/mongo_proxy/v2/mongo_proxy.proto

package envoy_config_filter_network_mongo_proxy_v2

import (
	fmt "fmt"
	v2 "github.com/cilium/proxy/go/envoy/config/filter/fault/v2"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type MongoProxy struct {
	// The human readable prefix to use when emitting :ref:`statistics
	// <config_network_filters_mongo_proxy_stats>`.
	StatPrefix string `protobuf:"bytes,1,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"`
	// The optional path to use for writing Mongo access logs. If not access log
	// path is specified no access logs will be written. Note that access log is
	// also gated :ref:`runtime <config_network_filters_mongo_proxy_runtime>`.
	AccessLog string `protobuf:"bytes,2,opt,name=access_log,json=accessLog,proto3" json:"access_log,omitempty"`
	// Inject a fixed delay before proxying a Mongo operation. Delays are
	// applied to the following MongoDB operations: Query, Insert, GetMore,
	// and KillCursors. Once an active delay is in progress, all incoming
	// data up until the timer event fires will be a part of the delay.
	Delay *v2.FaultDelay `protobuf:"bytes,3,opt,name=delay,proto3" json:"delay,omitempty"`
	// Flag to specify whether :ref:`dynamic metadata
	// <config_network_filters_mongo_proxy_dynamic_metadata>` should be emitted. Defaults to false.
	EmitDynamicMetadata  bool     `protobuf:"varint,4,opt,name=emit_dynamic_metadata,json=emitDynamicMetadata,proto3" json:"emit_dynamic_metadata,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *MongoProxy) Reset()         { *m = MongoProxy{} }
func (m *MongoProxy) String() string { return proto.CompactTextString(m) }
func (*MongoProxy) ProtoMessage()    {}
func (*MongoProxy) Descriptor() ([]byte, []int) {
	return fileDescriptor_4d590dd12f767c61, []int{0}
}

func (m *MongoProxy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MongoProxy.Unmarshal(m, b)
}
func (m *MongoProxy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MongoProxy.Marshal(b, m, deterministic)
}
func (m *MongoProxy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MongoProxy.Merge(m, src)
}
func (m *MongoProxy) XXX_Size() int {
	return xxx_messageInfo_MongoProxy.Size(m)
}
func (m *MongoProxy) XXX_DiscardUnknown() {
	xxx_messageInfo_MongoProxy.DiscardUnknown(m)
}

var xxx_messageInfo_MongoProxy proto.InternalMessageInfo

func (m *MongoProxy) GetStatPrefix() string {
	if m != nil {
		return m.StatPrefix
	}
	return ""
}

func (m *MongoProxy) GetAccessLog() string {
	if m != nil {
		return m.AccessLog
	}
	return ""
}

func (m *MongoProxy) GetDelay() *v2.FaultDelay {
	if m != nil {
		return m.Delay
	}
	return nil
}

func (m *MongoProxy) GetEmitDynamicMetadata() bool {
	if m != nil {
		return m.EmitDynamicMetadata
	}
	return false
}

func init() {
	proto.RegisterType((*MongoProxy)(nil), "envoy.config.filter.network.mongo_proxy.v2.MongoProxy")
}

func init() {
	proto.RegisterFile("envoy/config/filter/network/mongo_proxy/v2/mongo_proxy.proto", fileDescriptor_4d590dd12f767c61)
}

var fileDescriptor_4d590dd12f767c61 = []byte{
	// 289 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0xcd, 0x4a, 0xc4, 0x30,
	0x14, 0x85, 0xc9, 0x38, 0xfe, 0x4c, 0x66, 0x21, 0x54, 0xc4, 0x32, 0x20, 0x14, 0x57, 0xc1, 0x45,
	0x02, 0x75, 0xe3, 0x42, 0x5c, 0x94, 0xc1, 0x95, 0x85, 0xd2, 0x17, 0x28, 0xb1, 0x4d, 0x4b, 0xb0,
	0xed, 0x2d, 0x69, 0x8c, 0xd3, 0x47, 0xf4, 0x95, 0x5c, 0x49, 0x7a, 0x47, 0x9c, 0xc5, 0x2c, 0xdc,
	0xdd, 0xe4, 0x3b, 0xe7, 0xdc, 0xe4, 0xd0, 0x27, 0xd5, 0x3b, 0x98, 0x44, 0x09, 0x7d, 0xad, 0x1b,
	0x51, 0xeb, 0xd6, 0x2a, 0x23, 0x7a, 0x65, 0x3f, 0xc1, 0xbc, 0x8b, 0x0e, 0xfa, 0x06, 0x8a, 0xc1,
	0xc0, 0x6e, 0x12, 0x2e, 0x3e, 0x3c, 0xf2, 0xc1, 0x80, 0x85, 0xe0, 0x7e, 0x76, 0x73, 0x74, 0x73,
	0x74, 0xf3, 0xbd, 0x9b, 0x1f, 0xca, 0x5d, 0xbc, 0x61, 0xc7, 0x36, 0xd5, 0xf2, 0xa3, 0xb5, 0x3e,
	0x7b, 0x1e, 0x30, 0x75, 0x73, 0xe3, 0x64, 0xab, 0x2b, 0x69, 0x95, 0xf8, 0x1d, 0x10, 0xdc, 0x7d,
	0x11, 0x4a, 0x53, 0x9f, 0x9a, 0xf9, 0xd0, 0x80, 0xd1, 0xf5, 0x68, 0xa5, 0x2d, 0x06, 0xa3, 0x6a,
	0xbd, 0x0b, 0x49, 0x44, 0xd8, 0x2a, 0x39, 0xff, 0x4e, 0x96, 0x66, 0x11, 0x91, 0x9c, 0x7a, 0x96,
	0xcd, 0x28, 0xb8, 0xa5, 0x54, 0x96, 0xa5, 0x1a, 0xc7, 0xa2, 0x85, 0x26, 0x5c, 0x78, 0x61, 0xbe,
	0xc2, 0x9b, 0x57, 0x68, 0x82, 0x67, 0x7a, 0x5a, 0xa9, 0x56, 0x4e, 0xe1, 0x49, 0x44, 0xd8, 0x3a,
	0x66, 0xfc, 0xd8, 0xb7, 0xf0, 0x85, 0x2e, 0xe6, 0x2f, 0x7e, 0xd8, 0x7a, 0x7d, 0x8e, 0xb6, 0x20,
	0xa6, 0xd7, 0xaa, 0xd3, 0xb6, 0xa8, 0xa6, 0x5e, 0x76, 0xba, 0x2c, 0x3a, 0x65, 0x65, 0x25, 0xad,
	0x0c, 0x97, 0x11, 0x61, 0x17, 0xf9, 0x95, 0x87, 0x5b, 0x64, 0xe9, 0x1e, 0x25, 0x29, 0x7d, 0xd4,
	0x80, 0x8b, 0xb0, 0xa2, 0xff, 0x57, 0x99, 0x5c, 0xfe, 0x95, 0x90, 0xf9, 0x62, 0x32, 0xf2, 0x76,
	0x36, 0x37, 0xf4, 0xf0, 0x13, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x52, 0x62, 0x06, 0xd0, 0x01, 0x00,
	0x00,
}
  070701000000ED000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004100000000cilium-proxy-20200109/go/envoy/config/filter/network/mysql_proxy  070701000000EE000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004A00000000cilium-proxy-20200109/go/envoy/config/filter/network/mysql_proxy/v1alpha1 070701000000EF000081A4000003E800000064000000015E17A247000010BE000000000000000000000000000000000000005C00000000cilium-proxy-20200109/go/envoy/config/filter/network/mysql_proxy/v1alpha1/mysql_proxy.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/network/mysql_proxy/v1alpha1/mysql_proxy.proto

package envoy_config_filter_network_mysql_proxy_v1alpha1

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#protodoc-title: MySQL proxy]
// MySQL Proxy :ref:`configuration overview <config_network_filters_mysql_proxy>`.
type MySQLProxy struct {
	// The human readable prefix to use when emitting :ref:`statistics
	// <config_network_filters_mysql_proxy_stats>`.
	StatPrefix string `protobuf:"bytes,1,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"`
	// [#not-implemented-hide:] The optional path to use for writing MySQL access logs.
	// If the access log field is empty, access logs will not be written.
	AccessLog            string   `protobuf:"bytes,2,opt,name=access_log,json=accessLog,proto3" json:"access_log,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *MySQLProxy) Reset()         { *m = MySQLProxy{} }
func (m *MySQLProxy) String() string { return proto.CompactTextString(m) }
func (*MySQLProxy) ProtoMessage()    {}
func (*MySQLProxy) Descriptor() ([]byte, []int) {
	return fileDescriptor_c4bac5cccef760ed, []int{0}
}

func (m *MySQLProxy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MySQLProxy.Unmarshal(m, b)
}
func (m *MySQLProxy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MySQLProxy.Marshal(b, m, deterministic)
}
func (m *MySQLProxy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MySQLProxy.Merge(m, src)
}
func (m *MySQLProxy) XXX_Size() int {
	return xxx_messageInfo_MySQLProxy.Size(m)
}
func (m *MySQLProxy) XXX_DiscardUnknown() {
	xxx_messageInfo_MySQLProxy.DiscardUnknown(m)
}

var xxx_messageInfo_MySQLProxy proto.InternalMessageInfo

func (m *MySQLProxy) GetStatPrefix() string {
	if m != nil {
		return m.StatPrefix
	}
	return ""
}

func (m *MySQLProxy) GetAccessLog() string {
	if m != nil {
		return m.AccessLog
	}
	return ""
}

func init() {
	proto.RegisterType((*MySQLProxy)(nil), "envoy.config.filter.network.mysql_proxy.v1alpha1.MySQLProxy")
}

func init() {
	proto.RegisterFile("envoy/config/filter/network/mysql_proxy/v1alpha1/mysql_proxy.proto", fileDescriptor_c4bac5cccef760ed)
}

var fileDescriptor_c4bac5cccef760ed = []byte{
	// 218 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x8e, 0xb1, 0x4b, 0xc4, 0x30,
	0x14, 0x87, 0xc9, 0x21, 0xca, 0x3d, 0x07, 0xa1, 0x8b, 0x87, 0x20, 0x1c, 0x4e, 0x37, 0x25, 0x1e,
	0xee, 0x0e, 0x99, 0xef, 0x20, 0x5e, 0x71, 0x2e, 0xb1, 0xa6, 0x35, 0x18, 0xfb, 0x62, 0x12, 0x6a,
	0xf3, 0xaf, 0x3b, 0x49, 0x12, 0x0b, 0x5d, 0x6f, 0x7b, 0xfc, 0xde, 0xc7, 0xc7, 0x07, 0x5c, 0x0d,
	0x23, 0x46, 0xd6, 0xe2, 0xd0, 0xe9, 0x9e, 0x75, 0xda, 0x04, 0xe5, 0xd8, 0xa0, 0xc2, 0x0f, 0xba,
	0x4f, 0xf6, 0x15, 0xfd, 0xb7, 0x69, 0xac, 0xc3, 0x29, 0xb2, 0x71, 0x2f, 0x8d, 0xfd, 0x90, 0xfb,
	0xe5, 0x48, 0xad, 0xc3, 0x80, 0xd5, 0x63, 0x76, 0xd0, 0xe2, 0xa0, 0xc5, 0x41, 0xff, 0x1d, 0x74,
	0x89, 0xcf, 0x8e, 0xbb, 0xdb, 0x51, 0x1a, 0xfd, 0x2e, 0x83, 0x62, 0xf3, 0x51, 0x54, 0x0f, 0xaf,
	0x00, 0xc7, 0x58, 0xbf, 0x1c, 0x44, 0xe2, 0xab, 0x1d, 0x5c, 0xfb, 0x20, 0x43, 0x63, 0x9d, 0xea,
	0xf4, 0xb4, 0x21, 0x5b, 0xb2, 0x5b, 0xf3, 0xab, 0x5f, 0x7e, 0xe1, 0x56, 0x5b, 0x72, 0x82, 0xf4,
	0x13, 0xf9, 0x55, 0xdd, 0x03, 0xc8, 0xb6, 0x55, 0xde, 0x37, 0x06, 0xfb, 0xcd, 0x2a, 0x81, 0xa7,
	0x75, 0x59, 0x0e, 0xd8, 0xf3, 0x1a, 0x9e, 0x35, 0xd2, 0x9c, 0x59, 0x4a, 0xce, 0x2d, 0xe6, 0x37,
	0xc7, 0xb4, 0xe6, 0x2c, 0x91, 0x4a, 0x05, 0x79, 0xbb, 0xcc, 0xc9, 0x4f, 0x7f, 0x01, 0x00, 0x00,
	0xff, 0xff, 0xd0, 0x90, 0xc8, 0x37, 0x43, 0x01, 0x00, 0x00,
}
  070701000000F0000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004000000000cilium-proxy-20200109/go/envoy/config/filter/network/rate_limit   070701000000F1000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004300000000cilium-proxy-20200109/go/envoy/config/filter/network/rate_limit/v2    070701000000F2000081A4000003E800000064000000015E17A24700001ADF000000000000000000000000000000000000005400000000cilium-proxy-20200109/go/envoy/config/filter/network/rate_limit/v2/rate_limit.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/network/rate_limit/v2/rate_limit.proto

package envoy_config_filter_network_rate_limit_v2

import (
	fmt "fmt"
	ratelimit "github.com/cilium/proxy/go/envoy/api/v2/ratelimit"
	v2 "github.com/cilium/proxy/go/envoy/config/ratelimit/v2"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#next-free-field: 7]
type RateLimit struct {
	// The prefix to use when emitting :ref:`statistics <config_network_filters_rate_limit_stats>`.
	StatPrefix string `protobuf:"bytes,1,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"`
	// The rate limit domain to use in the rate limit service request.
	Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"`
	// The rate limit descriptor list to use in the rate limit service request.
	Descriptors []*ratelimit.RateLimitDescriptor `protobuf:"bytes,3,rep,name=descriptors,proto3" json:"descriptors,omitempty"`
	// The timeout in milliseconds for the rate limit service RPC. If not
	// set, this defaults to 20ms.
	Timeout *duration.Duration `protobuf:"bytes,4,opt,name=timeout,proto3" json:"timeout,omitempty"`
	// The filter's behaviour in case the rate limiting service does
	// not respond back. When it is set to true, Envoy will not allow traffic in case of
	// communication failure between rate limiting service and the proxy.
	// Defaults to false.
	FailureModeDeny bool `protobuf:"varint,5,opt,name=failure_mode_deny,json=failureModeDeny,proto3" json:"failure_mode_deny,omitempty"`
	// Configuration for an external rate limit service provider. If not
	// specified, any calls to the rate limit service will immediately return
	// success.
	RateLimitService     *v2.RateLimitServiceConfig `protobuf:"bytes,6,opt,name=rate_limit_service,json=rateLimitService,proto3" json:"rate_limit_service,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
	XXX_unrecognized     []byte                     `json:"-"`
	XXX_sizecache        int32                      `json:"-"`
}

func (m *RateLimit) Reset()         { *m = RateLimit{} }
func (m *RateLimit) String() string { return proto.CompactTextString(m) }
func (*RateLimit) ProtoMessage()    {}
func (*RateLimit) Descriptor() ([]byte, []int) {
	return fileDescriptor_34e9a222968daa71, []int{0}
}

func (m *RateLimit) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimit.Unmarshal(m, b)
}
func (m *RateLimit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimit.Marshal(b, m, deterministic)
}
func (m *RateLimit) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimit.Merge(m, src)
}
func (m *RateLimit) XXX_Size() int {
	return xxx_messageInfo_RateLimit.Size(m)
}
func (m *RateLimit) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimit.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimit proto.InternalMessageInfo

func (m *RateLimit) GetStatPrefix() string {
	if m != nil {
		return m.StatPrefix
	}
	return ""
}

func (m *RateLimit) GetDomain() string {
	if m != nil {
		return m.Domain
	}
	return ""
}

func (m *RateLimit) GetDescriptors() []*ratelimit.RateLimitDescriptor {
	if m != nil {
		return m.Descriptors
	}
	return nil
}

func (m *RateLimit) GetTimeout() *duration.Duration {
	if m != nil {
		return m.Timeout
	}
	return nil
}

func (m *RateLimit) GetFailureModeDeny() bool {
	if m != nil {
		return m.FailureModeDeny
	}
	return false
}

func (m *RateLimit) GetRateLimitService() *v2.RateLimitServiceConfig {
	if m != nil {
		return m.RateLimitService
	}
	return nil
}

func init() {
	proto.RegisterType((*RateLimit)(nil), "envoy.config.filter.network.rate_limit.v2.RateLimit")
}

func init() {
	proto.RegisterFile("envoy/config/filter/network/rate_limit/v2/rate_limit.proto", fileDescriptor_34e9a222968daa71)
}

var fileDescriptor_34e9a222968daa71 = []byte{
	// 396 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x4d, 0x8f, 0x94, 0x30,
	0x18, 0xc7, 0x53, 0x76, 0x77, 0x76, 0xb6, 0x24, 0xba, 0xf6, 0x22, 0xee, 0x41, 0x89, 0x26, 0x06,
	0x35, 0x69, 0x23, 0x7b, 0x30, 0xf1, 0x88, 0x73, 0x53, 0x93, 0x09, 0x1e, 0x3c, 0x92, 0xee, 0xf0,
	0x30, 0x79, 0x22, 0x50, 0x52, 0x0a, 0x0e, 0x5f, 0xc1, 0xa3, 0x1f, 0x77, 0xbc, 0x18, 0x28, 0x2f,
	0x33, 0x9e, 0xbc, 0xb5, 0xfc, 0x5f, 0x9e, 0xfe, 0x68, 0xe9, 0x47, 0x28, 0x5b, 0xd5, 0x89, 0x9d,
	0x2a, 0x33, 0xdc, 0x8b, 0x0c, 0x73, 0x03, 0x5a, 0x94, 0x60, 0x7e, 0x2a, 0xfd, 0x43, 0x68, 0x69,
	0x20, 0xc9, 0xb1, 0x40, 0x23, 0xda, 0xf0, 0x64, 0xc7, 0x2b, 0xad, 0x8c, 0x62, 0x6f, 0x86, 0x2c,
	0xb7, 0x59, 0x6e, 0xb3, 0x7c, 0xcc, 0xf2, 0x13, 0x77, 0x1b, 0xde, 0xbd, 0xb6, 0x63, 0x64, 0x85,
	0x53, 0x93, 0xad, 0x9d, 0x57, 0xb6, 0xf2, 0xee, 0xd5, 0xd9, 0x71, 0x16, 0x5f, 0x1f, 0xca, 0xeb,
	0xd1, 0xf4, 0x7c, 0xaf, 0xd4, 0x3e, 0x07, 0x31, 0xec, 0x1e, 0x9a, 0x4c, 0xa4, 0x8d, 0x96, 0x06,
	0x55, 0x39, 0xea, 0x4f, 0x5b, 0x99, 0x63, 0x2a, 0x0d, 0x88, 0x69, 0x61, 0x85, 0x97, 0x7f, 0x1c,
	0x7a, 0x13, 0x4b, 0x03, 0x5f, 0xfa, 0x4e, 0x16, 0x50, 0xb7, 0x36, 0xd2, 0x24, 0x95, 0x86, 0x0c,
	0x0f, 0x1e, 0xf1, 0x49, 0x70, 0x13, 0x5d, 0x1f, 0xa3, 0x4b, 0xed, 0xf8, 0x24, 0xa6, 0xbd, 0xb6,
	0x1d, 0x24, 0xf6, 0x82, 0xae, 0x52, 0x55, 0x48, 0x2c, 0x3d, 0xe7, 0xdc, 0x34, 0x7e, 0x66, 0xdf,
	0xa9, 0x9b, 0x42, 0xbd, 0xd3, 0x58, 0x19, 0xa5, 0x6b, 0xef, 0xc2, 0xbf, 0x08, 0xdc, 0xf0, 0x1d,
	0xb7, 0xff, 0x47, 0x56, 0xc8, 0xdb, 0x90, 0x2f, 0xa8, 0xf3, 0x11, 0x36, 0x73, 0x26, 0x5a, 0x1f,
	0xa3, 0xab, 0xdf, 0xc4, 0x59, 0x93, 0xf8, 0xb4, 0x89, 0xdd, 0xd3, 0x6b, 0x83, 0x05, 0xa8, 0xc6,
	0x78, 0x97, 0x3e, 0x09, 0xdc, 0xf0, 0x19, 0xb7, 0xf0, 0x7c, 0x82, 0xe7, 0x9b, 0x11, 0x3e, 0x9e,
	0x9c, 0xec, 0x2d, 0x7d, 0x92, 0x49, 0xcc, 0x1b, 0x0d, 0x49, 0xa1, 0x52, 0x48, 0x52, 0x28, 0x3b,
	0xef, 0xca, 0x27, 0xc1, 0x3a, 0x7e, 0x3c, 0x0a, 0x5f, 0x55, 0x0a, 0x1b, 0x28, 0x3b, 0x86, 0x94,
	0x2d, 0x37, 0x95, 0xd4, 0xa0, 0x5b, 0xdc, 0x81, 0xb7, 0x1a, 0x66, 0xbd, 0xe7, 0x67, 0x17, 0xbc,
	0x00, 0xb4, 0xe1, 0xc2, 0xf0, 0xcd, 0x46, 0x3e, 0x0d, 0x9e, 0x01, 0xe3, 0x17, 0x71, 0x6e, 0x49,
	0x7c, 0xab, 0xff, 0x71, 0x44, 0x9f, 0xe9, 0x07, 0x54, 0xb6, 0xb2, 0xd2, 0xea, 0xd0, 0xf1, 0xff,
	0x7e, 0x3e, 0xd1, 0xa3, 0x79, 0xdc, 0xb6, 0xc7, 0xde, 0x92, 0x87, 0xd5, 0xc0, 0x7f, 0xff, 0x37,
	0x00, 0x00, 0xff, 0xff, 0x97, 0x7d, 0x01, 0x48, 0xc0, 0x02, 0x00, 0x00,
}
 070701000000F3000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003A00000000cilium-proxy-20200109/go/envoy/config/filter/network/rbac 070701000000F4000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003D00000000cilium-proxy-20200109/go/envoy/config/filter/network/rbac/v2  070701000000F5000081A4000003E800000064000000015E17A24700001B1D000000000000000000000000000000000000004800000000cilium-proxy-20200109/go/envoy/config/filter/network/rbac/v2/rbac.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/network/rbac/v2/rbac.proto

package envoy_config_filter_network_rbac_v2

import (
	fmt "fmt"
	v2 "github.com/cilium/proxy/go/envoy/config/rbac/v2"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type RBAC_EnforcementType int32

const (
	// Apply RBAC policies when the first byte of data arrives on the connection.
	RBAC_ONE_TIME_ON_FIRST_BYTE RBAC_EnforcementType = 0
	// Continuously apply RBAC policies as data arrives. Use this mode when
	// using RBAC with message oriented protocols such as Mongo, MySQL, Kafka,
	// etc. when the protocol decoders emit dynamic metadata such as the
	// resources being accessed and the operations on the resources.
	RBAC_CONTINUOUS RBAC_EnforcementType = 1
)

var RBAC_EnforcementType_name = map[int32]string{
	0: "ONE_TIME_ON_FIRST_BYTE",
	1: "CONTINUOUS",
}

var RBAC_EnforcementType_value = map[string]int32{
	"ONE_TIME_ON_FIRST_BYTE": 0,
	"CONTINUOUS":             1,
}

func (x RBAC_EnforcementType) String() string {
	return proto.EnumName(RBAC_EnforcementType_name, int32(x))
}

func (RBAC_EnforcementType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_8ec60cc393c44598, []int{0, 0}
}

// RBAC network filter config.
//
// Header should not be used in rules/shadow_rules in RBAC network filter as
// this information is only available in :ref:`RBAC http filter <config_http_filters_rbac>`.
type RBAC struct {
	// Specify the RBAC rules to be applied globally.
	// If absent, no enforcing RBAC policy will be applied.
	Rules *v2.RBAC `protobuf:"bytes,1,opt,name=rules,proto3" json:"rules,omitempty"`
	// Shadow rules are not enforced by the filter but will emit stats and logs
	// and can be used for rule testing.
	// If absent, no shadow RBAC policy will be applied.
	ShadowRules *v2.RBAC `protobuf:"bytes,2,opt,name=shadow_rules,json=shadowRules,proto3" json:"shadow_rules,omitempty"`
	// The prefix to use when emitting statistics.
	StatPrefix string `protobuf:"bytes,3,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"`
	// RBAC enforcement strategy. By default RBAC will be enforced only once
	// when the first byte of data arrives from the downstream. When used in
	// conjunction with filters that emit dynamic metadata after decoding
	// every payload (e.g., Mongo, MySQL, Kafka) set the enforcement type to
	// CONTINUOUS to enforce RBAC policies on every message boundary.
	EnforcementType      RBAC_EnforcementType `protobuf:"varint,4,opt,name=enforcement_type,json=enforcementType,proto3,enum=envoy.config.filter.network.rbac.v2.RBAC_EnforcementType" json:"enforcement_type,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *RBAC) Reset()         { *m = RBAC{} }
func (m *RBAC) String() string { return proto.CompactTextString(m) }
func (*RBAC) ProtoMessage()    {}
func (*RBAC) Descriptor() ([]byte, []int) {
	return fileDescriptor_8ec60cc393c44598, []int{0}
}

func (m *RBAC) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RBAC.Unmarshal(m, b)
}
func (m *RBAC) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RBAC.Marshal(b, m, deterministic)
}
func (m *RBAC) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RBAC.Merge(m, src)
}
func (m *RBAC) XXX_Size() int {
	return xxx_messageInfo_RBAC.Size(m)
}
func (m *RBAC) XXX_DiscardUnknown() {
	xxx_messageInfo_RBAC.DiscardUnknown(m)
}

var xxx_messageInfo_RBAC proto.InternalMessageInfo

func (m *RBAC) GetRules() *v2.RBAC {
	if m != nil {
		return m.Rules
	}
	return nil
}

func (m *RBAC) GetShadowRules() *v2.RBAC {
	if m != nil {
		return m.ShadowRules
	}
	return nil
}

func (m *RBAC) GetStatPrefix() string {
	if m != nil {
		return m.StatPrefix
	}
	return ""
}

func (m *RBAC) GetEnforcementType() RBAC_EnforcementType {
	if m != nil {
		return m.EnforcementType
	}
	return RBAC_ONE_TIME_ON_FIRST_BYTE
}

func init() {
	proto.RegisterEnum("envoy.config.filter.network.rbac.v2.RBAC_EnforcementType", RBAC_EnforcementType_name, RBAC_EnforcementType_value)
	proto.RegisterType((*RBAC)(nil), "envoy.config.filter.network.rbac.v2.RBAC")
}

func init() {
	proto.RegisterFile("envoy/config/filter/network/rbac/v2/rbac.proto", fileDescriptor_8ec60cc393c44598)
}

var fileDescriptor_8ec60cc393c44598 = []byte{
	// 324 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xc1, 0x4f, 0xc2, 0x30,
	0x18, 0xc5, 0x2d, 0xa2, 0x86, 0x62, 0x80, 0xec, 0xa0, 0x64, 0x17, 0x17, 0xbc, 0xec, 0xd4, 0xe9,
	0x3c, 0x79, 0x20, 0xd1, 0x91, 0x99, 0x70, 0x70, 0x23, 0x65, 0x1c, 0x3c, 0x35, 0x63, 0x7c, 0xd3,
	0x45, 0x5c, 0x97, 0x52, 0x07, 0xfb, 0x07, 0xfd, 0xa3, 0x3c, 0x19, 0x5a, 0x8c, 0x99, 0x1e, 0xe4,
	0xd4, 0xa6, 0xef, 0xf7, 0xde, 0xfb, 0xd2, 0x0f, 0x13, 0xc8, 0x4b, 0x5e, 0x39, 0x09, 0xcf, 0xd3,
	0xec, 0xd9, 0x49, 0xb3, 0xa5, 0x04, 0xe1, 0xe4, 0x20, 0xd7, 0x5c, 0xbc, 0x3a, 0x62, 0x1e, 0x27,
	0x4e, 0xe9, 0xaa, 0x93, 0x14, 0x82, 0x4b, 0x6e, 0x5c, 0x2a, 0x9e, 0x68, 0x9e, 0x68, 0x9e, 0xec,
	0x78, 0xa2, 0xb8, 0xd2, 0x35, 0x2f, 0x6a, 0xa1, 0x7f, 0x53, 0xcc, 0xf3, 0x32, 0x5e, 0x66, 0x8b,
	0x58, 0x82, 0xf3, 0x7d, 0xd1, 0xc2, 0xe0, 0xa3, 0x81, 0x9b, 0xd4, 0xbb, 0x1f, 0x19, 0x57, 0xf8,
	0x48, 0xbc, 0x2f, 0x61, 0xd5, 0x47, 0x16, 0xb2, 0xdb, 0xae, 0x49, 0x6a, 0xbd, 0xbb, 0x22, 0xb2,
	0x45, 0xa9, 0x06, 0x8d, 0x21, 0x3e, 0x5d, 0xbd, 0xc4, 0x0b, 0xbe, 0x66, 0xda, 0xd8, 0xf8, 0xd7,
	0xd8, 0xd6, 0x3c, 0x55, 0x76, 0x1b, 0xb7, 0x57, 0x32, 0x96, 0xac, 0x10, 0x90, 0x66, 0x9b, 0xfe,
	0xa1, 0x85, 0xec, 0x96, 0x77, 0xf2, 0xe9, 0x35, 0x45, 0xc3, 0x42, 0x14, 0x6f, 0xb5, 0x89, 0x92,
	0x8c, 0x05, 0xee, 0x41, 0x9e, 0x72, 0x91, 0xc0, 0x1b, 0xe4, 0x92, 0xc9, 0xaa, 0x80, 0x7e, 0xd3,
	0x42, 0x76, 0xc7, 0xbd, 0x25, 0x7b, 0xfc, 0x8e, 0xea, 0x26, 0xfe, 0x4f, 0x42, 0x54, 0x15, 0x40,
	0xbb, 0x50, 0x7f, 0x18, 0x0c, 0x71, 0xf7, 0x17, 0x63, 0x98, 0xf8, 0x2c, 0x0c, 0x7c, 0x16, 0x8d,
	0x1f, 0x7d, 0x16, 0x06, 0xec, 0x61, 0x4c, 0xa7, 0x11, 0xf3, 0x9e, 0x22, 0xbf, 0x77, 0x60, 0x74,
	0x30, 0x1e, 0x85, 0x41, 0x34, 0x0e, 0x66, 0xe1, 0x6c, 0xda, 0x43, 0xde, 0x1d, 0xbe, 0xce, 0xb8,
	0x1e, 0xa7, 0x10, 0x7c, 0x53, 0xed, 0x33, 0x99, 0xd7, 0xa2, 0xf3, 0x38, 0x99, 0x6c, 0x17, 0x31,
	0x41, 0xf3, 0x63, 0xb5, 0x91, 0x9b, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x68, 0xe6, 0x5c, 0x12,
	0x22, 0x02, 0x00, 0x00,
}
   070701000000F6000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004100000000cilium-proxy-20200109/go/envoy/config/filter/network/redis_proxy  070701000000F7000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004400000000cilium-proxy-20200109/go/envoy/config/filter/network/redis_proxy/v2   070701000000F8000081A4000003E800000064000000015E17A24700008408000000000000000000000000000000000000005600000000cilium-proxy-20200109/go/envoy/config/filter/network/redis_proxy/v2/redis_proxy.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/network/redis_proxy/v2/redis_proxy.proto

package envoy_config_filter_network_redis_proxy_v2

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// ReadPolicy controls how Envoy routes read commands to Redis nodes. This is currently
// supported for Redis Cluster. All ReadPolicy settings except MASTER may return stale data
// because replication is asynchronous and requires some delay. You need to ensure that your
// application can tolerate stale data.
type RedisProxy_ConnPoolSettings_ReadPolicy int32

const (
	// Default mode. Read from the current master node.
	RedisProxy_ConnPoolSettings_MASTER RedisProxy_ConnPoolSettings_ReadPolicy = 0
	// Read from the master, but if it is unavailable, read from replica nodes.
	RedisProxy_ConnPoolSettings_PREFER_MASTER RedisProxy_ConnPoolSettings_ReadPolicy = 1
	// Read from replica nodes. If multiple replica nodes are present within a shard, a random
	// node is selected. Healthy nodes have precedent over unhealthy nodes.
	RedisProxy_ConnPoolSettings_REPLICA RedisProxy_ConnPoolSettings_ReadPolicy = 2
	// Read from the replica nodes (similar to REPLICA), but if all replicas are unavailable (not
	// present or unhealthy), read from the master.
	RedisProxy_ConnPoolSettings_PREFER_REPLICA RedisProxy_ConnPoolSettings_ReadPolicy = 3
	// Read from any node of the cluster. A random node is selected among the master and replicas,
	// healthy nodes have precedent over unhealthy nodes.
	RedisProxy_ConnPoolSettings_ANY RedisProxy_ConnPoolSettings_ReadPolicy = 4
)

var RedisProxy_ConnPoolSettings_ReadPolicy_name = map[int32]string{
	0: "MASTER",
	1: "PREFER_MASTER",
	2: "REPLICA",
	3: "PREFER_REPLICA",
	4: "ANY",
}

var RedisProxy_ConnPoolSettings_ReadPolicy_value = map[string]int32{
	"MASTER":         0,
	"PREFER_MASTER":  1,
	"REPLICA":        2,
	"PREFER_REPLICA": 3,
	"ANY":            4,
}

func (x RedisProxy_ConnPoolSettings_ReadPolicy) String() string {
	return proto.EnumName(RedisProxy_ConnPoolSettings_ReadPolicy_name, int32(x))
}

func (RedisProxy_ConnPoolSettings_ReadPolicy) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_67e7179f1292d5ae, []int{0, 0, 0}
}

// [#next-free-field: 7]
type RedisProxy struct {
	// The prefix to use when emitting :ref:`statistics <config_network_filters_redis_proxy_stats>`.
	StatPrefix string `protobuf:"bytes,1,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"`
	// Name of cluster from cluster manager. See the :ref:`configuration section
	// <arch_overview_redis_configuration>` of the architecture overview for recommendations on
	// configuring the backing cluster.
	//
	// .. attention::
	//
	//   This field is deprecated. Use a :ref:`catch_all
	//   route<envoy_api_field_config.filter.network.redis_proxy.v2.RedisProxy.PrefixRoutes.catch_all_route>`
	//   instead.
	Cluster string `protobuf:"bytes,2,opt,name=cluster,proto3" json:"cluster,omitempty"` // Deprecated: Do not use.
	// Network settings for the connection pool to the upstream clusters.
	Settings *RedisProxy_ConnPoolSettings `protobuf:"bytes,3,opt,name=settings,proto3" json:"settings,omitempty"`
	// Indicates that latency stat should be computed in microseconds. By default it is computed in
	// milliseconds.
	LatencyInMicros bool `protobuf:"varint,4,opt,name=latency_in_micros,json=latencyInMicros,proto3" json:"latency_in_micros,omitempty"`
	// List of **unique** prefixes used to separate keys from different workloads to different
	// clusters. Envoy will always favor the longest match first in case of overlap. A catch-all
	// cluster can be used to forward commands when there is no match. Time complexity of the
	// lookups are in O(min(longest key prefix, key length)).
	//
	// Example:
	//
	// .. code-block:: yaml
	//
	//    prefix_routes:
	//      routes:
	//        - prefix: "ab"
	//          cluster: "cluster_a"
	//        - prefix: "abc"
	//          cluster: "cluster_b"
	//
	// When using the above routes, the following prefixes would be sent to:
	//
	// * 'get abc:users' would retrieve the key 'abc:users' from cluster_b.
	// * 'get ab:users' would retrieve the key 'ab:users' from cluster_a.
	// * 'get z:users' would return a NoUpstreamHost error. A :ref:`catch-all
	//   route<envoy_api_field_config.filter.network.redis_proxy.v2.RedisProxy.PrefixRoutes.catch_all_route>`
	//   would have retrieved the key from that cluster instead.
	//
	// See the :ref:`configuration section
	// <arch_overview_redis_configuration>` of the architecture overview for recommendations on
	// configuring the backing clusters.
	PrefixRoutes *RedisProxy_PrefixRoutes `protobuf:"bytes,5,opt,name=prefix_routes,json=prefixRoutes,proto3" json:"prefix_routes,omitempty"`
	// Authenticate Redis client connections locally by forcing downstream clients to issue a `Redis
	// AUTH command <https://redis.io/commands/auth>`_ with this password before enabling any other
	// command. If an AUTH command's password matches this password, an "OK" response will be returned
	// to the client. If the AUTH command password does not match this password, then an "ERR invalid
	// password" error will be returned. If any other command is received before AUTH when this
	// password is set, then a "NOAUTH Authentication required." error response will be sent to the
	// client. If an AUTH command is received when the password is not set, then an "ERR Client sent
	// AUTH, but no password is set" error will be returned.
	DownstreamAuthPassword *core.DataSource `protobuf:"bytes,6,opt,name=downstream_auth_password,json=downstreamAuthPassword,proto3" json:"downstream_auth_password,omitempty"`
	XXX_NoUnkeyedLiteral   struct{}         `json:"-"`
	XXX_unrecognized       []byte           `json:"-"`
	XXX_sizecache          int32            `json:"-"`
}

func (m *RedisProxy) Reset()         { *m = RedisProxy{} }
func (m *RedisProxy) String() string { return proto.CompactTextString(m) }
func (*RedisProxy) ProtoMessage()    {}
func (*RedisProxy) Descriptor() ([]byte, []int) {
	return fileDescriptor_67e7179f1292d5ae, []int{0}
}

func (m *RedisProxy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RedisProxy.Unmarshal(m, b)
}
func (m *RedisProxy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RedisProxy.Marshal(b, m, deterministic)
}
func (m *RedisProxy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RedisProxy.Merge(m, src)
}
func (m *RedisProxy) XXX_Size() int {
	return xxx_messageInfo_RedisProxy.Size(m)
}
func (m *RedisProxy) XXX_DiscardUnknown() {
	xxx_messageInfo_RedisProxy.DiscardUnknown(m)
}

var xxx_messageInfo_RedisProxy proto.InternalMessageInfo

func (m *RedisProxy) GetStatPrefix() string {
	if m != nil {
		return m.StatPrefix
	}
	return ""
}

// Deprecated: Do not use.
func (m *RedisProxy) GetCluster() string {
	if m != nil {
		return m.Cluster
	}
	return ""
}

func (m *RedisProxy) GetSettings() *RedisProxy_ConnPoolSettings {
	if m != nil {
		return m.Settings
	}
	return nil
}

func (m *RedisProxy) GetLatencyInMicros() bool {
	if m != nil {
		return m.LatencyInMicros
	}
	return false
}

func (m *RedisProxy) GetPrefixRoutes() *RedisProxy_PrefixRoutes {
	if m != nil {
		return m.PrefixRoutes
	}
	return nil
}

func (m *RedisProxy) GetDownstreamAuthPassword() *core.DataSource {
	if m != nil {
		return m.DownstreamAuthPassword
	}
	return nil
}

// Redis connection pool settings.
// [#next-free-field: 9]
type RedisProxy_ConnPoolSettings struct {
	// Per-operation timeout in milliseconds. The timer starts when the first
	// command of a pipeline is written to the backend connection. Each response received from Redis
	// resets the timer since it signifies that the next command is being processed by the backend.
	// The only exception to this behavior is when a connection to a backend is not yet established.
	// In that case, the connect timeout on the cluster will govern the timeout until the connection
	// is ready.
	OpTimeout *duration.Duration `protobuf:"bytes,1,opt,name=op_timeout,json=opTimeout,proto3" json:"op_timeout,omitempty"`
	// Use hash tagging on every redis key to guarantee that keys with the same hash tag will be
	// forwarded to the same upstream. The hash key used for determining the upstream in a
	// consistent hash ring configuration will be computed from the hash tagged key instead of the
	// whole key. The algorithm used to compute the hash tag is identical to the `redis-cluster
	// implementation <https://redis.io/topics/cluster-spec#keys-hash-tags>`_.
	//
	// Examples:
	//
	// * '{user1000}.following' and '{user1000}.followers' **will** be sent to the same upstream
	// * '{user1000}.following' and '{user1001}.following' **might** be sent to the same upstream
	EnableHashtagging bool `protobuf:"varint,2,opt,name=enable_hashtagging,json=enableHashtagging,proto3" json:"enable_hashtagging,omitempty"`
	// Accept `moved and ask redirection
	// <https://redis.io/topics/cluster-spec#redirection-and-resharding>`_ errors from upstream
	// redis servers, and retry commands to the specified target server. The target server does not
	// need to be known to the cluster manager. If the command cannot be redirected, then the
	// original error is passed downstream unchanged. By default, this support is not enabled.
	EnableRedirection bool `protobuf:"varint,3,opt,name=enable_redirection,json=enableRedirection,proto3" json:"enable_redirection,omitempty"`
	// Maximum size of encoded request buffer before flush is triggered and encoded requests
	// are sent upstream. If this is unset, the buffer flushes whenever it receives data
	// and performs no batching.
	// This feature makes it possible for multiple clients to send requests to Envoy and have
	// them batched- for example if one is running several worker processes, each with its own
	// Redis connection. There is no benefit to using this with a single downstream process.
	// Recommended size (if enabled) is 1024 bytes.
	MaxBufferSizeBeforeFlush uint32 `protobuf:"varint,4,opt,name=max_buffer_size_before_flush,json=maxBufferSizeBeforeFlush,proto3" json:"max_buffer_size_before_flush,omitempty"`
	// The encoded request buffer is flushed N milliseconds after the first request has been
	// encoded, unless the buffer size has already exceeded `max_buffer_size_before_flush`.
	// If `max_buffer_size_before_flush` is not set, this flush timer is not used. Otherwise,
	// the timer should be set according to the number of clients, overall request rate and
	// desired maximum latency for a single command. For example, if there are many requests
	// being batched together at a high rate, the buffer will likely be filled before the timer
	// fires. Alternatively, if the request rate is lower the buffer will not be filled as often
	// before the timer fires.
	// If `max_buffer_size_before_flush` is set, but `buffer_flush_timeout` is not, the latter
	// defaults to 3ms.
	BufferFlushTimeout *duration.Duration `protobuf:"bytes,5,opt,name=buffer_flush_timeout,json=bufferFlushTimeout,proto3" json:"buffer_flush_timeout,omitempty"`
	// `max_upstream_unknown_connections` controls how many upstream connections to unknown hosts
	// can be created at any given time by any given worker thread (see `enable_redirection` for
	// more details). If the host is unknown and a connection cannot be created due to enforcing
	// this limit, then redirection will fail and the original redirection error will be passed
	// downstream unchanged. This limit defaults to 100.
	MaxUpstreamUnknownConnections *wrappers.UInt32Value `protobuf:"bytes,6,opt,name=max_upstream_unknown_connections,json=maxUpstreamUnknownConnections,proto3" json:"max_upstream_unknown_connections,omitempty"`
	// Enable per-command statistics per upstream cluster, in addition to the filter level aggregate
	// count.
	EnableCommandStats bool `protobuf:"varint,8,opt,name=enable_command_stats,json=enableCommandStats,proto3" json:"enable_command_stats,omitempty"`
	// Read policy. The default is to read from the master.
	ReadPolicy           RedisProxy_ConnPoolSettings_ReadPolicy `protobuf:"varint,7,opt,name=read_policy,json=readPolicy,proto3,enum=envoy.config.filter.network.redis_proxy.v2.RedisProxy_ConnPoolSettings_ReadPolicy" json:"read_policy,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
	XXX_unrecognized     []byte                                 `json:"-"`
	XXX_sizecache        int32                                  `json:"-"`
}

func (m *RedisProxy_ConnPoolSettings) Reset()         { *m = RedisProxy_ConnPoolSettings{} }
func (m *RedisProxy_ConnPoolSettings) String() string { return proto.CompactTextString(m) }
func (*RedisProxy_ConnPoolSettings) ProtoMessage()    {}
func (*RedisProxy_ConnPoolSettings) Descriptor() ([]byte, []int) {
	return fileDescriptor_67e7179f1292d5ae, []int{0, 0}
}

func (m *RedisProxy_ConnPoolSettings) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RedisProxy_ConnPoolSettings.Unmarshal(m, b)
}
func (m *RedisProxy_ConnPoolSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RedisProxy_ConnPoolSettings.Marshal(b, m, deterministic)
}
func (m *RedisProxy_ConnPoolSettings) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RedisProxy_ConnPoolSettings.Merge(m, src)
}
func (m *RedisProxy_ConnPoolSettings) XXX_Size() int {
	return xxx_messageInfo_RedisProxy_ConnPoolSettings.Size(m)
}
func (m *RedisProxy_ConnPoolSettings) XXX_DiscardUnknown() {
	xxx_messageInfo_RedisProxy_ConnPoolSettings.DiscardUnknown(m)
}

var xxx_messageInfo_RedisProxy_ConnPoolSettings proto.InternalMessageInfo

func (m *RedisProxy_ConnPoolSettings) GetOpTimeout() *duration.Duration {
	if m != nil {
		return m.OpTimeout
	}
	return nil
}

func (m *RedisProxy_ConnPoolSettings) GetEnableHashtagging() bool {
	if m != nil {
		return m.EnableHashtagging
	}
	return false
}

func (m *RedisProxy_ConnPoolSettings) GetEnableRedirection() bool {
	if m != nil {
		return m.EnableRedirection
	}
	return false
}

func (m *RedisProxy_ConnPoolSettings) GetMaxBufferSizeBeforeFlush() uint32 {
	if m != nil {
		return m.MaxBufferSizeBeforeFlush
	}
	return 0
}

func (m *RedisProxy_ConnPoolSettings) GetBufferFlushTimeout() *duration.Duration {
	if m != nil {
		return m.BufferFlushTimeout
	}
	return nil
}

func (m *RedisProxy_ConnPoolSettings) GetMaxUpstreamUnknownConnections() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxUpstreamUnknownConnections
	}
	return nil
}

func (m *RedisProxy_ConnPoolSettings) GetEnableCommandStats() bool {
	if m != nil {
		return m.EnableCommandStats
	}
	return false
}

func (m *RedisProxy_ConnPoolSettings) GetReadPolicy() RedisProxy_ConnPoolSettings_ReadPolicy {
	if m != nil {
		return m.ReadPolicy
	}
	return RedisProxy_ConnPoolSettings_MASTER
}

type RedisProxy_PrefixRoutes struct {
	// List of prefix routes.
	Routes []*RedisProxy_PrefixRoutes_Route `protobuf:"bytes,1,rep,name=routes,proto3" json:"routes,omitempty"`
	// Indicates that prefix matching should be case insensitive.
	CaseInsensitive bool `protobuf:"varint,2,opt,name=case_insensitive,json=caseInsensitive,proto3" json:"case_insensitive,omitempty"`
	// Optional catch-all route to forward commands that doesn't match any of the routes. The
	// catch-all route becomes required when no routes are specified.
	// .. attention::
	//
	//   This field is deprecated. Use a :ref:`catch_all
	//   route<envoy_api_field_config.filter.network.redis_proxy.v2.RedisProxy.PrefixRoutes.catch_all_route>`
	//   instead.
	CatchAllCluster string `protobuf:"bytes,3,opt,name=catch_all_cluster,json=catchAllCluster,proto3" json:"catch_all_cluster,omitempty"` // Deprecated: Do not use.
	// Optional catch-all route to forward commands that doesn't match any of the routes. The
	// catch-all route becomes required when no routes are specified.
	CatchAllRoute        *RedisProxy_PrefixRoutes_Route `protobuf:"bytes,4,opt,name=catch_all_route,json=catchAllRoute,proto3" json:"catch_all_route,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	XXX_sizecache        int32                          `json:"-"`
}

func (m *RedisProxy_PrefixRoutes) Reset()         { *m = RedisProxy_PrefixRoutes{} }
func (m *RedisProxy_PrefixRoutes) String() string { return proto.CompactTextString(m) }
func (*RedisProxy_PrefixRoutes) ProtoMessage()    {}
func (*RedisProxy_PrefixRoutes) Descriptor() ([]byte, []int) {
	return fileDescriptor_67e7179f1292d5ae, []int{0, 1}
}

func (m *RedisProxy_PrefixRoutes) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RedisProxy_PrefixRoutes.Unmarshal(m, b)
}
func (m *RedisProxy_PrefixRoutes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RedisProxy_PrefixRoutes.Marshal(b, m, deterministic)
}
func (m *RedisProxy_PrefixRoutes) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RedisProxy_PrefixRoutes.Merge(m, src)
}
func (m *RedisProxy_PrefixRoutes) XXX_Size() int {
	return xxx_messageInfo_RedisProxy_PrefixRoutes.Size(m)
}
func (m *RedisProxy_PrefixRoutes) XXX_DiscardUnknown() {
	xxx_messageInfo_RedisProxy_PrefixRoutes.DiscardUnknown(m)
}

var xxx_messageInfo_RedisProxy_PrefixRoutes proto.InternalMessageInfo

func (m *RedisProxy_PrefixRoutes) GetRoutes() []*RedisProxy_PrefixRoutes_Route {
	if m != nil {
		return m.Routes
	}
	return nil
}

func (m *RedisProxy_PrefixRoutes) GetCaseInsensitive() bool {
	if m != nil {
		return m.CaseInsensitive
	}
	return false
}

// Deprecated: Do not use.
func (m *RedisProxy_PrefixRoutes) GetCatchAllCluster() string {
	if m != nil {
		return m.CatchAllCluster
	}
	return ""
}

func (m *RedisProxy_PrefixRoutes) GetCatchAllRoute() *RedisProxy_PrefixRoutes_Route {
	if m != nil {
		return m.CatchAllRoute
	}
	return nil
}

type RedisProxy_PrefixRoutes_Route struct {
	// String prefix that must match the beginning of the keys. Envoy will always favor the
	// longest match.
	Prefix string `protobuf:"bytes,1,opt,name=prefix,proto3" json:"prefix,omitempty"`
	// Indicates if the prefix needs to be removed from the key when forwarded.
	RemovePrefix bool `protobuf:"varint,2,opt,name=remove_prefix,json=removePrefix,proto3" json:"remove_prefix,omitempty"`
	// Upstream cluster to forward the command to.
	Cluster string `protobuf:"bytes,3,opt,name=cluster,proto3" json:"cluster,omitempty"`
	// Indicates that the route has a request mirroring policy.
	RequestMirrorPolicy  []*RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy `protobuf:"bytes,4,rep,name=request_mirror_policy,json=requestMirrorPolicy,proto3" json:"request_mirror_policy,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                                             `json:"-"`
	XXX_unrecognized     []byte                                               `json:"-"`
	XXX_sizecache        int32                                                `json:"-"`
}

func (m *RedisProxy_PrefixRoutes_Route) Reset()         { *m = RedisProxy_PrefixRoutes_Route{} }
func (m *RedisProxy_PrefixRoutes_Route) String() string { return proto.CompactTextString(m) }
func (*RedisProxy_PrefixRoutes_Route) ProtoMessage()    {}
func (*RedisProxy_PrefixRoutes_Route) Descriptor() ([]byte, []int) {
	return fileDescriptor_67e7179f1292d5ae, []int{0, 1, 0}
}

func (m *RedisProxy_PrefixRoutes_Route) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RedisProxy_PrefixRoutes_Route.Unmarshal(m, b)
}
func (m *RedisProxy_PrefixRoutes_Route) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RedisProxy_PrefixRoutes_Route.Marshal(b, m, deterministic)
}
func (m *RedisProxy_PrefixRoutes_Route) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RedisProxy_PrefixRoutes_Route.Merge(m, src)
}
func (m *RedisProxy_PrefixRoutes_Route) XXX_Size() int {
	return xxx_messageInfo_RedisProxy_PrefixRoutes_Route.Size(m)
}
func (m *RedisProxy_PrefixRoutes_Route) XXX_DiscardUnknown() {
	xxx_messageInfo_RedisProxy_PrefixRoutes_Route.DiscardUnknown(m)
}

var xxx_messageInfo_RedisProxy_PrefixRoutes_Route proto.InternalMessageInfo

func (m *RedisProxy_PrefixRoutes_Route) GetPrefix() string {
	if m != nil {
		return m.Prefix
	}
	return ""
}

func (m *RedisProxy_PrefixRoutes_Route) GetRemovePrefix() bool {
	if m != nil {
		return m.RemovePrefix
	}
	return false
}

func (m *RedisProxy_PrefixRoutes_Route) GetCluster() string {
	if m != nil {
		return m.Cluster
	}
	return ""
}

func (m *RedisProxy_PrefixRoutes_Route) GetRequestMirrorPolicy() []*RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy {
	if m != nil {
		return m.RequestMirrorPolicy
	}
	return nil
}

// The router is capable of shadowing traffic from one cluster to another. The current
// implementation is "fire and forget," meaning Envoy will not wait for the shadow cluster to
// respond before returning the response from the primary cluster. All normal statistics are
// collected for the shadow cluster making this feature useful for testing.
type RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy struct {
	// Specifies the cluster that requests will be mirrored to. The cluster must
	// exist in the cluster manager configuration.
	Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"`
	// If not specified or the runtime key is not present, all requests to the target cluster
	// will be mirrored.
	//
	// If specified, Envoy will lookup the runtime key to get the percentage of requests to the
	// mirror.
	RuntimeFraction *core.RuntimeFractionalPercent `protobuf:"bytes,2,opt,name=runtime_fraction,json=runtimeFraction,proto3" json:"runtime_fraction,omitempty"`
	// Set this to TRUE to only mirror write commands, this is effectively replicating the
	// writes in a "fire and forget" manner.
	ExcludeReadCommands  bool     `protobuf:"varint,3,opt,name=exclude_read_commands,json=excludeReadCommands,proto3" json:"exclude_read_commands,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy) Reset() {
	*m = RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy{}
}
func (m *RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy) String() string {
	return proto.CompactTextString(m)
}
func (*RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy) ProtoMessage() {}
func (*RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy) Descriptor() ([]byte, []int) {
	return fileDescriptor_67e7179f1292d5ae, []int{0, 1, 0, 0}
}

func (m *RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy.Unmarshal(m, b)
}
func (m *RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy.Marshal(b, m, deterministic)
}
func (m *RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy.Merge(m, src)
}
func (m *RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy) XXX_Size() int {
	return xxx_messageInfo_RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy.Size(m)
}
func (m *RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy) XXX_DiscardUnknown() {
	xxx_messageInfo_RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy.DiscardUnknown(m)
}

var xxx_messageInfo_RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy proto.InternalMessageInfo

func (m *RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy) GetCluster() string {
	if m != nil {
		return m.Cluster
	}
	return ""
}

func (m *RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy) GetRuntimeFraction() *core.RuntimeFractionalPercent {
	if m != nil {
		return m.RuntimeFraction
	}
	return nil
}

func (m *RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy) GetExcludeReadCommands() bool {
	if m != nil {
		return m.ExcludeReadCommands
	}
	return false
}

// RedisProtocolOptions specifies Redis upstream protocol options. This object is used in
// :ref:`extension_protocol_options<envoy_api_field_Cluster.extension_protocol_options>`, keyed
// by the name `envoy.redis_proxy`.
type RedisProtocolOptions struct {
	// Upstream server password as defined by the `requirepass` directive
	// <https://redis.io/topics/config>`_ in the server's configuration file.
	AuthPassword         *core.DataSource `protobuf:"bytes,1,opt,name=auth_password,json=authPassword,proto3" json:"auth_password,omitempty"`
	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
	XXX_unrecognized     []byte           `json:"-"`
	XXX_sizecache        int32            `json:"-"`
}

func (m *RedisProtocolOptions) Reset()         { *m = RedisProtocolOptions{} }
func (m *RedisProtocolOptions) String() string { return proto.CompactTextString(m) }
func (*RedisProtocolOptions) ProtoMessage()    {}
func (*RedisProtocolOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_67e7179f1292d5ae, []int{1}
}

func (m *RedisProtocolOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RedisProtocolOptions.Unmarshal(m, b)
}
func (m *RedisProtocolOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RedisProtocolOptions.Marshal(b, m, deterministic)
}
func (m *RedisProtocolOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RedisProtocolOptions.Merge(m, src)
}
func (m *RedisProtocolOptions) XXX_Size() int {
	return xxx_messageInfo_RedisProtocolOptions.Size(m)
}
func (m *RedisProtocolOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_RedisProtocolOptions.DiscardUnknown(m)
}

var xxx_messageInfo_RedisProtocolOptions proto.InternalMessageInfo

func (m *RedisProtocolOptions) GetAuthPassword() *core.DataSource {
	if m != nil {
		return m.AuthPassword
	}
	return nil
}

func init() {
	proto.RegisterEnum("envoy.config.filter.network.redis_proxy.v2.RedisProxy_ConnPoolSettings_ReadPolicy", RedisProxy_ConnPoolSettings_ReadPolicy_name, RedisProxy_ConnPoolSettings_ReadPolicy_value)
	proto.RegisterType((*RedisProxy)(nil), "envoy.config.filter.network.redis_proxy.v2.RedisProxy")
	proto.RegisterType((*RedisProxy_ConnPoolSettings)(nil), "envoy.config.filter.network.redis_proxy.v2.RedisProxy.ConnPoolSettings")
	proto.RegisterType((*RedisProxy_PrefixRoutes)(nil), "envoy.config.filter.network.redis_proxy.v2.RedisProxy.PrefixRoutes")
	proto.RegisterType((*RedisProxy_PrefixRoutes_Route)(nil), "envoy.config.filter.network.redis_proxy.v2.RedisProxy.PrefixRoutes.Route")
	proto.RegisterType((*RedisProxy_PrefixRoutes_Route_RequestMirrorPolicy)(nil), "envoy.config.filter.network.redis_proxy.v2.RedisProxy.PrefixRoutes.Route.RequestMirrorPolicy")
	proto.RegisterType((*RedisProtocolOptions)(nil), "envoy.config.filter.network.redis_proxy.v2.RedisProtocolOptions")
}

func init() {
	proto.RegisterFile("envoy/config/filter/network/redis_proxy/v2/redis_proxy.proto", fileDescriptor_67e7179f1292d5ae)
}

var fileDescriptor_67e7179f1292d5ae = []byte{
	// 998 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x4d, 0x6f, 0x1b, 0xc5,
	0x1b, 0xff, 0xaf, 0x9d, 0x38, 0xee, 0xe3, 0x38, 0x76, 0x26, 0x69, 0xff, 0x8b, 0x95, 0x22, 0x13,
	0x2e, 0xa6, 0x88, 0x35, 0x72, 0x2f, 0x1c, 0x10, 0x52, 0xec, 0x26, 0x10, 0x41, 0xc0, 0x9a, 0x34,
	0x45, 0x20, 0xa1, 0xd1, 0x78, 0x3d, 0xb6, 0x57, 0xdd, 0x9d, 0xd9, 0xce, 0xcc, 0xda, 0x4e, 0x25,
	0x2e, 0x88, 0x13, 0x37, 0xbe, 0x06, 0x27, 0x3e, 0x03, 0xe2, 0xe3, 0xf0, 0x09, 0x7a, 0x42, 0x3b,
	0x33, 0x6b, 0x3b, 0xb4, 0x15, 0x11, 0xca, 0xc9, 0x9e, 0xe7, 0xf7, 0xbc, 0xbf, 0xfc, 0x16, 0x3e,
	0x65, 0x7c, 0x2e, 0xae, 0xbb, 0xa1, 0xe0, 0x93, 0x68, 0xda, 0x9d, 0x44, 0xb1, 0x66, 0xb2, 0xcb,
	0x99, 0x5e, 0x08, 0xf9, 0xbc, 0x2b, 0xd9, 0x38, 0x52, 0x24, 0x95, 0x62, 0x79, 0xdd, 0x9d, 0xf7,
	0x36, 0x9f, 0x41, 0x2a, 0x85, 0x16, 0xe8, 0x91, 0xb1, 0x0e, 0xac, 0x75, 0x60, 0xad, 0x03, 0x67,
	0x1d, 0x6c, 0xaa, 0xcf, 0x7b, 0xad, 0x23, 0x1b, 0x89, 0xa6, 0x51, 0xee, 0x2b, 0x14, 0x92, 0x75,
	0x47, 0x54, 0x31, 0xeb, 0xa9, 0xf5, 0xee, 0x54, 0x88, 0x69, 0xcc, 0xba, 0xe6, 0x35, 0xca, 0x26,
	0xdd, 0x71, 0x26, 0xa9, 0x8e, 0x04, 0x7f, 0x1b, 0xbe, 0x90, 0x34, 0x4d, 0x99, 0x54, 0x0e, 0xff,
	0xff, 0x9c, 0xc6, 0xd1, 0x98, 0x6a, 0xd6, 0x2d, 0xfe, 0x58, 0xe0, 0xf8, 0xaf, 0x3d, 0x00, 0x9c,
	0x67, 0x32, 0xcc, 0x13, 0x41, 0x1d, 0xa8, 0x29, 0x4d, 0x35, 0x49, 0x25, 0x9b, 0x44, 0x4b, 0xdf,
	0x6b, 0x7b, 0x9d, 0x7b, 0xfd, 0x9d, 0x57, 0xfd, 0x2d, 0x59, 0x6a, 0x7b, 0x18, 0x72, 0x6c, 0x68,
	0x20, 0x74, 0x04, 0x3b, 0x61, 0x9c, 0x29, 0xcd, 0xa4, 0x5f, 0x32, 0x5a, 0x25, 0xdf, 0xc3, 0x85,
	0x08, 0x25, 0x50, 0x55, 0x4c, 0xeb, 0x88, 0x4f, 0x95, 0x5f, 0x6e, 0x7b, 0x9d, 0x5a, 0xef, 0xf3,
	0xe0, 0xf6, 0xcd, 0x08, 0xd6, 0x19, 0x05, 0x03, 0xc1, 0xf9, 0x50, 0x88, 0xf8, 0xd2, 0xb9, 0xeb,
	0x57, 0x5f, 0xf5, 0xb7, 0x7f, 0xf1, 0x4a, 0x4d, 0x0f, 0xaf, 0x42, 0xa0, 0x47, 0xb0, 0x1f, 0x53,
	0xcd, 0x78, 0x78, 0x4d, 0x22, 0x4e, 0x92, 0x28, 0x94, 0x42, 0xf9, 0x5b, 0x6d, 0xaf, 0x53, 0xc5,
	0x0d, 0x07, 0x9c, 0xf3, 0x0b, 0x23, 0x46, 0x33, 0xa8, 0xdb, 0xea, 0x88, 0x14, 0x99, 0x66, 0xca,
	0xdf, 0x36, 0xf9, 0x0d, 0xfe, 0x63, 0x7e, 0xb6, 0x1d, 0xd8, 0xb8, 0xc2, 0xbb, 0xe9, 0xc6, 0x0b,
	0x7d, 0x0b, 0xfe, 0x58, 0x2c, 0xb8, 0xd2, 0x92, 0xd1, 0x84, 0xd0, 0x4c, 0xcf, 0x48, 0x4a, 0x95,
	0x5a, 0x08, 0x39, 0xf6, 0x2b, 0x26, 0xe8, 0x43, 0x17, 0x94, 0xa6, 0x51, 0xee, 0x36, 0x9f, 0x7a,
	0xf0, 0x84, 0x6a, 0x7a, 0x29, 0x32, 0x19, 0x32, 0xfc, 0x60, 0x6d, 0x7e, 0x92, 0xe9, 0xd9, 0xd0,
	0x19, 0xb7, 0x7e, 0xdf, 0x86, 0xe6, 0x3f, 0xfb, 0x82, 0xfa, 0x00, 0x22, 0x25, 0x3a, 0x4a, 0x98,
	0xc8, 0xb4, 0x99, 0x5c, 0xad, 0xf7, 0x4e, 0x60, 0xf7, 0x22, 0x28, 0xf6, 0x22, 0x78, 0xe2, 0xf6,
	0xc6, 0xb4, 0xf1, 0x37, 0xaf, 0x54, 0xf5, 0xf0, 0x3d, 0x91, 0x3e, 0xb5, 0x56, 0xe8, 0x23, 0x40,
	0x8c, 0xd3, 0x51, 0xcc, 0xc8, 0x8c, 0xaa, 0x99, 0xa6, 0xd3, 0x69, 0xc4, 0xa7, 0x66, 0xbe, 0x55,
	0xbc, 0x6f, 0x91, 0x2f, 0xd6, 0xc0, 0x86, 0x7a, 0xde, 0x1f, 0xc9, 0xc2, 0xdc, 0xb3, 0x99, 0xf7,
	0x4a, 0x1d, 0xaf, 0x01, 0xf4, 0x19, 0x1c, 0x25, 0x74, 0x49, 0x46, 0xd9, 0x64, 0xc2, 0x24, 0x51,
	0xd1, 0x4b, 0x46, 0x46, 0x6c, 0x22, 0x24, 0x23, 0x93, 0x38, 0x53, 0x33, 0x33, 0xb0, 0x3a, 0xf6,
	0x13, 0xba, 0xec, 0x1b, 0x95, 0xcb, 0xe8, 0x25, 0xeb, 0x1b, 0x85, 0xb3, 0x1c, 0x47, 0x5f, 0xc2,
	0xa1, 0xb3, 0x35, 0xfa, 0xab, 0x5a, 0xb7, 0xff, 0xa5, 0x56, 0x8c, 0xac, 0x99, 0xf1, 0x52, 0x94,
	0xca, 0xa0, 0x9d, 0x27, 0x93, 0xa5, 0x6e, 0x3c, 0x19, 0x7f, 0xce, 0xc5, 0x82, 0x93, 0x50, 0x70,
	0x6e, 0xf3, 0x55, 0x6e, 0x48, 0x47, 0xaf, 0x39, 0xbe, 0x3a, 0xe7, 0xfa, 0x71, 0xef, 0x19, 0x8d,
	0x33, 0x86, 0x1f, 0x26, 0x74, 0x79, 0xe5, 0x9c, 0x5c, 0x59, 0x1f, 0x83, 0xb5, 0x0b, 0xf4, 0x31,
	0x1c, 0xba, 0x16, 0x85, 0x22, 0x49, 0x28, 0x1f, 0x93, 0xfc, 0x86, 0x94, 0x5f, 0x35, 0x4d, 0x72,
	0xed, 0x1b, 0x58, 0xe8, 0x32, 0x47, 0xd0, 0x8f, 0x50, 0x93, 0x8c, 0x8e, 0x49, 0x2a, 0xe2, 0x28,
	0xbc, 0xf6, 0x77, 0xda, 0x5e, 0x67, 0xaf, 0x87, 0xef, 0xe8, 0x7a, 0x02, 0xcc, 0xe8, 0x78, 0x68,
	0x3c, 0x9b, 0x0d, 0xf8, 0xc9, 0x1c, 0x12, 0xc8, 0x95, 0xf4, 0xf8, 0x2a, 0xe7, 0x83, 0xe2, 0x85,
	0x00, 0x2a, 0x17, 0x27, 0x97, 0x4f, 0x4f, 0x71, 0xf3, 0x7f, 0x68, 0x1f, 0xea, 0x43, 0x7c, 0x7a,
	0x76, 0x8a, 0x89, 0x13, 0x79, 0xa8, 0x06, 0x3b, 0xf8, 0x74, 0xf8, 0xd5, 0xf9, 0xe0, 0xa4, 0x59,
	0x42, 0x08, 0xf6, 0x1c, 0x5e, 0xc8, 0xca, 0x68, 0x07, 0xca, 0x27, 0x5f, 0x7f, 0xd7, 0xdc, 0x6a,
	0xfd, 0x5c, 0x81, 0xdd, 0xcd, 0x53, 0x41, 0x14, 0x2a, 0xee, 0xfe, 0xbc, 0x76, 0xb9, 0x53, 0xeb,
	0x9d, 0xdf, 0xc1, 0xfd, 0x05, 0xe6, 0x07, 0x3b, 0xc7, 0xe8, 0x03, 0x68, 0x86, 0x54, 0x31, 0x12,
	0x71, 0xc5, 0xb8, 0x8a, 0x74, 0x34, 0x67, 0x6e, 0x97, 0x1b, 0xb9, 0xfc, 0x7c, 0x2d, 0x46, 0x01,
	0xec, 0x87, 0x54, 0x87, 0x33, 0x42, 0xe3, 0x98, 0x14, 0xbc, 0x56, 0x5e, 0xf1, 0x5a, 0xc3, 0x80,
	0x27, 0x71, 0x3c, 0x70, 0xfc, 0xf6, 0x02, 0x1a, 0x6b, 0x7d, 0x13, 0xce, 0x6c, 0xef, 0x9d, 0x96,
	0x51, 0x2f, 0x82, 0x9a, 0x67, 0xeb, 0x8f, 0x32, 0x6c, 0x9b, 0x7f, 0xe8, 0x01, 0x54, 0x36, 0xf9,
	0x19, 0xbb, 0x17, 0x7a, 0x1f, 0xea, 0x92, 0x25, 0x62, 0xce, 0x0a, 0xfa, 0xb6, 0xc5, 0xee, 0x5a,
	0xa1, 0xe3, 0xed, 0xf7, 0xd6, 0xbc, 0x5d, 0xbe, 0xc9, 0xee, 0x2b, 0xf2, 0xfe, 0xd5, 0x83, 0xfb,
	0x92, 0xbd, 0xc8, 0x98, 0xd2, 0x24, 0x89, 0xa4, 0x14, 0xb2, 0x58, 0xc6, 0x2d, 0x33, 0xaa, 0x1f,
	0xee, 0xac, 0xc6, 0x00, 0xdb, 0x30, 0x17, 0x26, 0x8a, 0xdd, 0x39, 0x7c, 0x20, 0x5f, 0x17, 0xb6,
	0xfe, 0xf4, 0xe0, 0xe0, 0x0d, 0xca, 0x9b, 0xe5, 0x78, 0x6f, 0x29, 0xe7, 0x19, 0x34, 0x65, 0xc6,
	0x73, 0xb2, 0x20, 0x13, 0x49, 0x2d, 0x47, 0x95, 0xcc, 0xb0, 0x3e, 0x7c, 0x03, 0xfd, 0x62, 0xab,
	0x7a, 0xe6, 0x34, 0x69, 0x3c, 0x64, 0x32, 0x64, 0x5c, 0xe3, 0x86, 0xbc, 0x89, 0xa0, 0x1e, 0xdc,
	0x67, 0xcb, 0x30, 0xce, 0xc6, 0x39, 0xfd, 0xd1, 0x71, 0x71, 0xe0, 0xca, 0x11, 0xe0, 0x81, 0x03,
	0xf3, 0x6b, 0x72, 0x07, 0xae, 0x8e, 0xbf, 0x87, 0xc3, 0xa2, 0x21, 0x5a, 0x84, 0x22, 0xfe, 0x26,
	0xb5, 0x34, 0xd1, 0x87, 0xfa, 0xcd, 0xef, 0x83, 0x77, 0x9b, 0xef, 0xc3, 0x2e, 0xdd, 0xf8, 0x2a,
	0xf4, 0x2f, 0xe0, 0x93, 0x48, 0x58, 0x03, 0xdb, 0xfd, 0xdb, 0x4f, 0xa9, 0xdf, 0x58, 0x8f, 0xc9,
	0xa4, 0x36, 0xf4, 0x46, 0x15, 0x43, 0x77, 0x8f, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x31, 0x9f,
	0x83, 0x9e, 0x03, 0x09, 0x00, 0x00,
}
070701000000F9000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003F00000000cilium-proxy-20200109/go/envoy/config/filter/network/tcp_proxy    070701000000FA000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004200000000cilium-proxy-20200109/go/envoy/config/filter/network/tcp_proxy/v2 070701000000FB000081A4000003E800000064000000015E17A24700005A7F000000000000000000000000000000000000005200000000cilium-proxy-20200109/go/envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.proto

package envoy_config_filter_network_tcp_proxy_v2

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	v2 "github.com/cilium/proxy/go/envoy/config/filter/accesslog/v2"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#next-free-field: 11]
type TcpProxy struct {
	// The prefix to use when emitting :ref:`statistics
	// <config_network_filters_tcp_proxy_stats>`.
	StatPrefix string `protobuf:"bytes,1,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"`
	// Types that are valid to be assigned to ClusterSpecifier:
	//	*TcpProxy_Cluster
	//	*TcpProxy_WeightedClusters
	ClusterSpecifier isTcpProxy_ClusterSpecifier `protobuf_oneof:"cluster_specifier"`
	// Optional endpoint metadata match criteria. Only endpoints in the upstream
	// cluster with metadata matching that set in metadata_match will be
	// considered. The filter name should be specified as *envoy.lb*.
	MetadataMatch *core.Metadata `protobuf:"bytes,9,opt,name=metadata_match,json=metadataMatch,proto3" json:"metadata_match,omitempty"`
	// The idle timeout for connections managed by the TCP proxy filter. The idle timeout
	// is defined as the period in which there are no bytes sent or received on either
	// the upstream or downstream connection. If not set, the default idle timeout is 1 hour. If set
	// to 0s, the timeout will be disabled.
	//
	// .. warning::
	//   Disabling this timeout has a highly likelihood of yielding connection leaks due to lost TCP
	//   FIN packets, etc.
	IdleTimeout *duration.Duration `protobuf:"bytes,8,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"`
	// [#not-implemented-hide:] The idle timeout for connections managed by the TCP proxy
	// filter. The idle timeout is defined as the period in which there is no
	// active traffic. If not set, there is no idle timeout. When the idle timeout
	// is reached the connection will be closed. The distinction between
	// downstream_idle_timeout/upstream_idle_timeout provides a means to set
	// timeout based on the last byte sent on the downstream/upstream connection.
	DownstreamIdleTimeout *duration.Duration `protobuf:"bytes,3,opt,name=downstream_idle_timeout,json=downstreamIdleTimeout,proto3" json:"downstream_idle_timeout,omitempty"`
	// [#not-implemented-hide:]
	UpstreamIdleTimeout *duration.Duration `protobuf:"bytes,4,opt,name=upstream_idle_timeout,json=upstreamIdleTimeout,proto3" json:"upstream_idle_timeout,omitempty"`
	// Configuration for :ref:`access logs <arch_overview_access_logs>`
	// emitted by the this tcp_proxy.
	AccessLog []*v2.AccessLog `protobuf:"bytes,5,rep,name=access_log,json=accessLog,proto3" json:"access_log,omitempty"`
	// [#not-implemented-hide:] Deprecated.
	DeprecatedV1 *TcpProxy_DeprecatedV1 `protobuf:"bytes,6,opt,name=deprecated_v1,json=deprecatedV1,proto3" json:"deprecated_v1,omitempty"` // Deprecated: Do not use.
	// The maximum number of unsuccessful connection attempts that will be made before
	// giving up. If the parameter is not specified, 1 connection attempt will be made.
	MaxConnectAttempts   *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=max_connect_attempts,json=maxConnectAttempts,proto3" json:"max_connect_attempts,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *TcpProxy) Reset()         { *m = TcpProxy{} }
func (m *TcpProxy) String() string { return proto.CompactTextString(m) }
func (*TcpProxy) ProtoMessage()    {}
func (*TcpProxy) Descriptor() ([]byte, []int) {
	return fileDescriptor_1f6b35dbcbad27ba, []int{0}
}

func (m *TcpProxy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TcpProxy.Unmarshal(m, b)
}
func (m *TcpProxy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TcpProxy.Marshal(b, m, deterministic)
}
func (m *TcpProxy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TcpProxy.Merge(m, src)
}
func (m *TcpProxy) XXX_Size() int {
	return xxx_messageInfo_TcpProxy.Size(m)
}
func (m *TcpProxy) XXX_DiscardUnknown() {
	xxx_messageInfo_TcpProxy.DiscardUnknown(m)
}

var xxx_messageInfo_TcpProxy proto.InternalMessageInfo

func (m *TcpProxy) GetStatPrefix() string {
	if m != nil {
		return m.StatPrefix
	}
	return ""
}

type isTcpProxy_ClusterSpecifier interface {
	isTcpProxy_ClusterSpecifier()
}

type TcpProxy_Cluster struct {
	Cluster string `protobuf:"bytes,2,opt,name=cluster,proto3,oneof"`
}

type TcpProxy_WeightedClusters struct {
	WeightedClusters *TcpProxy_WeightedCluster `protobuf:"bytes,10,opt,name=weighted_clusters,json=weightedClusters,proto3,oneof"`
}

func (*TcpProxy_Cluster) isTcpProxy_ClusterSpecifier() {}

func (*TcpProxy_WeightedClusters) isTcpProxy_ClusterSpecifier() {}

func (m *TcpProxy) GetClusterSpecifier() isTcpProxy_ClusterSpecifier {
	if m != nil {
		return m.ClusterSpecifier
	}
	return nil
}

func (m *TcpProxy) GetCluster() string {
	if x, ok := m.GetClusterSpecifier().(*TcpProxy_Cluster); ok {
		return x.Cluster
	}
	return ""
}

func (m *TcpProxy) GetWeightedClusters() *TcpProxy_WeightedCluster {
	if x, ok := m.GetClusterSpecifier().(*TcpProxy_WeightedClusters); ok {
		return x.WeightedClusters
	}
	return nil
}

func (m *TcpProxy) GetMetadataMatch() *core.Metadata {
	if m != nil {
		return m.MetadataMatch
	}
	return nil
}

func (m *TcpProxy) GetIdleTimeout() *duration.Duration {
	if m != nil {
		return m.IdleTimeout
	}
	return nil
}

func (m *TcpProxy) GetDownstreamIdleTimeout() *duration.Duration {
	if m != nil {
		return m.DownstreamIdleTimeout
	}
	return nil
}

func (m *TcpProxy) GetUpstreamIdleTimeout() *duration.Duration {
	if m != nil {
		return m.UpstreamIdleTimeout
	}
	return nil
}

func (m *TcpProxy) GetAccessLog() []*v2.AccessLog {
	if m != nil {
		return m.AccessLog
	}
	return nil
}

// Deprecated: Do not use.
func (m *TcpProxy) GetDeprecatedV1() *TcpProxy_DeprecatedV1 {
	if m != nil {
		return m.DeprecatedV1
	}
	return nil
}

func (m *TcpProxy) GetMaxConnectAttempts() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxConnectAttempts
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*TcpProxy) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*TcpProxy_Cluster)(nil),
		(*TcpProxy_WeightedClusters)(nil),
	}
}

// [#not-implemented-hide:] Deprecated.
// TCP Proxy filter configuration using V1 format.
//
// Deprecated: Do not use.
type TcpProxy_DeprecatedV1 struct {
	// The route table for the filter. All filter instances must have a route
	// table, even if it is empty.
	Routes               []*TcpProxy_DeprecatedV1_TCPRoute `protobuf:"bytes,1,rep,name=routes,proto3" json:"routes,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
	XXX_unrecognized     []byte                            `json:"-"`
	XXX_sizecache        int32                             `json:"-"`
}

func (m *TcpProxy_DeprecatedV1) Reset()         { *m = TcpProxy_DeprecatedV1{} }
func (m *TcpProxy_DeprecatedV1) String() string { return proto.CompactTextString(m) }
func (*TcpProxy_DeprecatedV1) ProtoMessage()    {}
func (*TcpProxy_DeprecatedV1) Descriptor() ([]byte, []int) {
	return fileDescriptor_1f6b35dbcbad27ba, []int{0, 0}
}

func (m *TcpProxy_DeprecatedV1) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TcpProxy_DeprecatedV1.Unmarshal(m, b)
}
func (m *TcpProxy_DeprecatedV1) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TcpProxy_DeprecatedV1.Marshal(b, m, deterministic)
}
func (m *TcpProxy_DeprecatedV1) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TcpProxy_DeprecatedV1.Merge(m, src)
}
func (m *TcpProxy_DeprecatedV1) XXX_Size() int {
	return xxx_messageInfo_TcpProxy_DeprecatedV1.Size(m)
}
func (m *TcpProxy_DeprecatedV1) XXX_DiscardUnknown() {
	xxx_messageInfo_TcpProxy_DeprecatedV1.DiscardUnknown(m)
}

var xxx_messageInfo_TcpProxy_DeprecatedV1 proto.InternalMessageInfo

func (m *TcpProxy_DeprecatedV1) GetRoutes() []*TcpProxy_DeprecatedV1_TCPRoute {
	if m != nil {
		return m.Routes
	}
	return nil
}

// A TCP proxy route consists of a set of optional L4 criteria and the
// name of a cluster. If a downstream connection matches all the
// specified criteria, the cluster in the route is used for the
// corresponding upstream connection. Routes are tried in the order
// specified until a match is found. If no match is found, the connection
// is closed. A route with no criteria is valid and always produces a
// match.
// [#next-free-field: 6]
type TcpProxy_DeprecatedV1_TCPRoute struct {
	// The cluster to connect to when a the downstream network connection
	// matches the specified criteria.
	Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"`
	// An optional list of IP address subnets in the form
	// “ip_address/xx”. The criteria is satisfied if the destination IP
	// address of the downstream connection is contained in at least one of
	// the specified subnets. If the parameter is not specified or the list
	// is empty, the destination IP address is ignored. The destination IP
	// address of the downstream connection might be different from the
	// addresses on which the proxy is listening if the connection has been
	// redirected.
	DestinationIpList []*core.CidrRange `protobuf:"bytes,2,rep,name=destination_ip_list,json=destinationIpList,proto3" json:"destination_ip_list,omitempty"`
	// An optional string containing a comma-separated list of port numbers
	// or ranges. The criteria is satisfied if the destination port of the
	// downstream connection is contained in at least one of the specified
	// ranges. If the parameter is not specified, the destination port is
	// ignored. The destination port address of the downstream connection
	// might be different from the port on which the proxy is listening if
	// the connection has been redirected.
	DestinationPorts string `protobuf:"bytes,3,opt,name=destination_ports,json=destinationPorts,proto3" json:"destination_ports,omitempty"`
	// An optional list of IP address subnets in the form
	// “ip_address/xx”. The criteria is satisfied if the source IP address
	// of the downstream connection is contained in at least one of the
	// specified subnets. If the parameter is not specified or the list is
	// empty, the source IP address is ignored.
	SourceIpList []*core.CidrRange `protobuf:"bytes,4,rep,name=source_ip_list,json=sourceIpList,proto3" json:"source_ip_list,omitempty"`
	// An optional string containing a comma-separated list of port numbers
	// or ranges. The criteria is satisfied if the source port of the
	// downstream connection is contained in at least one of the specified
	// ranges. If the parameter is not specified, the source port is
	// ignored.
	SourcePorts          string   `protobuf:"bytes,5,opt,name=source_ports,json=sourcePorts,proto3" json:"source_ports,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *TcpProxy_DeprecatedV1_TCPRoute) Reset()         { *m = TcpProxy_DeprecatedV1_TCPRoute{} }
func (m *TcpProxy_DeprecatedV1_TCPRoute) String() string { return proto.CompactTextString(m) }
func (*TcpProxy_DeprecatedV1_TCPRoute) ProtoMessage()    {}
func (*TcpProxy_DeprecatedV1_TCPRoute) Descriptor() ([]byte, []int) {
	return fileDescriptor_1f6b35dbcbad27ba, []int{0, 0, 0}
}

func (m *TcpProxy_DeprecatedV1_TCPRoute) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TcpProxy_DeprecatedV1_TCPRoute.Unmarshal(m, b)
}
func (m *TcpProxy_DeprecatedV1_TCPRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TcpProxy_DeprecatedV1_TCPRoute.Marshal(b, m, deterministic)
}
func (m *TcpProxy_DeprecatedV1_TCPRoute) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TcpProxy_DeprecatedV1_TCPRoute.Merge(m, src)
}
func (m *TcpProxy_DeprecatedV1_TCPRoute) XXX_Size() int {
	return xxx_messageInfo_TcpProxy_DeprecatedV1_TCPRoute.Size(m)
}
func (m *TcpProxy_DeprecatedV1_TCPRoute) XXX_DiscardUnknown() {
	xxx_messageInfo_TcpProxy_DeprecatedV1_TCPRoute.DiscardUnknown(m)
}

var xxx_messageInfo_TcpProxy_DeprecatedV1_TCPRoute proto.InternalMessageInfo

func (m *TcpProxy_DeprecatedV1_TCPRoute) GetCluster() string {
	if m != nil {
		return m.Cluster
	}
	return ""
}

func (m *TcpProxy_DeprecatedV1_TCPRoute) GetDestinationIpList() []*core.CidrRange {
	if m != nil {
		return m.DestinationIpList
	}
	return nil
}

func (m *TcpProxy_DeprecatedV1_TCPRoute) GetDestinationPorts() string {
	if m != nil {
		return m.DestinationPorts
	}
	return ""
}

func (m *TcpProxy_DeprecatedV1_TCPRoute) GetSourceIpList() []*core.CidrRange {
	if m != nil {
		return m.SourceIpList
	}
	return nil
}

func (m *TcpProxy_DeprecatedV1_TCPRoute) GetSourcePorts() string {
	if m != nil {
		return m.SourcePorts
	}
	return ""
}

// Allows for specification of multiple upstream clusters along with weights
// that indicate the percentage of traffic to be forwarded to each cluster.
// The router selects an upstream cluster based on these weights.
type TcpProxy_WeightedCluster struct {
	// Specifies one or more upstream clusters associated with the route.
	Clusters             []*TcpProxy_WeightedCluster_ClusterWeight `protobuf:"bytes,1,rep,name=clusters,proto3" json:"clusters,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                                  `json:"-"`
	XXX_unrecognized     []byte                                    `json:"-"`
	XXX_sizecache        int32                                     `json:"-"`
}

func (m *TcpProxy_WeightedCluster) Reset()         { *m = TcpProxy_WeightedCluster{} }
func (m *TcpProxy_WeightedCluster) String() string { return proto.CompactTextString(m) }
func (*TcpProxy_WeightedCluster) ProtoMessage()    {}
func (*TcpProxy_WeightedCluster) Descriptor() ([]byte, []int) {
	return fileDescriptor_1f6b35dbcbad27ba, []int{0, 1}
}

func (m *TcpProxy_WeightedCluster) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TcpProxy_WeightedCluster.Unmarshal(m, b)
}
func (m *TcpProxy_WeightedCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TcpProxy_WeightedCluster.Marshal(b, m, deterministic)
}
func (m *TcpProxy_WeightedCluster) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TcpProxy_WeightedCluster.Merge(m, src)
}
func (m *TcpProxy_WeightedCluster) XXX_Size() int {
	return xxx_messageInfo_TcpProxy_WeightedCluster.Size(m)
}
func (m *TcpProxy_WeightedCluster) XXX_DiscardUnknown() {
	xxx_messageInfo_TcpProxy_WeightedCluster.DiscardUnknown(m)
}

var xxx_messageInfo_TcpProxy_WeightedCluster proto.InternalMessageInfo

func (m *TcpProxy_WeightedCluster) GetClusters() []*TcpProxy_WeightedCluster_ClusterWeight {
	if m != nil {
		return m.Clusters
	}
	return nil
}

type TcpProxy_WeightedCluster_ClusterWeight struct {
	// Name of the upstream cluster.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// When a request matches the route, the choice of an upstream cluster is
	// determined by its weight. The sum of weights across all entries in the
	// clusters array determines the total weight.
	Weight               uint32   `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *TcpProxy_WeightedCluster_ClusterWeight) Reset() {
	*m = TcpProxy_WeightedCluster_ClusterWeight{}
}
func (m *TcpProxy_WeightedCluster_ClusterWeight) String() string { return proto.CompactTextString(m) }
func (*TcpProxy_WeightedCluster_ClusterWeight) ProtoMessage()    {}
func (*TcpProxy_WeightedCluster_ClusterWeight) Descriptor() ([]byte, []int) {
	return fileDescriptor_1f6b35dbcbad27ba, []int{0, 1, 0}
}

func (m *TcpProxy_WeightedCluster_ClusterWeight) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TcpProxy_WeightedCluster_ClusterWeight.Unmarshal(m, b)
}
func (m *TcpProxy_WeightedCluster_ClusterWeight) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TcpProxy_WeightedCluster_ClusterWeight.Marshal(b, m, deterministic)
}
func (m *TcpProxy_WeightedCluster_ClusterWeight) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TcpProxy_WeightedCluster_ClusterWeight.Merge(m, src)
}
func (m *TcpProxy_WeightedCluster_ClusterWeight) XXX_Size() int {
	return xxx_messageInfo_TcpProxy_WeightedCluster_ClusterWeight.Size(m)
}
func (m *TcpProxy_WeightedCluster_ClusterWeight) XXX_DiscardUnknown() {
	xxx_messageInfo_TcpProxy_WeightedCluster_ClusterWeight.DiscardUnknown(m)
}

var xxx_messageInfo_TcpProxy_WeightedCluster_ClusterWeight proto.InternalMessageInfo

func (m *TcpProxy_WeightedCluster_ClusterWeight) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *TcpProxy_WeightedCluster_ClusterWeight) GetWeight() uint32 {
	if m != nil {
		return m.Weight
	}
	return 0
}

func init() {
	proto.RegisterType((*TcpProxy)(nil), "envoy.config.filter.network.tcp_proxy.v2.TcpProxy")
	proto.RegisterType((*TcpProxy_DeprecatedV1)(nil), "envoy.config.filter.network.tcp_proxy.v2.TcpProxy.DeprecatedV1")
	proto.RegisterType((*TcpProxy_DeprecatedV1_TCPRoute)(nil), "envoy.config.filter.network.tcp_proxy.v2.TcpProxy.DeprecatedV1.TCPRoute")
	proto.RegisterType((*TcpProxy_WeightedCluster)(nil), "envoy.config.filter.network.tcp_proxy.v2.TcpProxy.WeightedCluster")
	proto.RegisterType((*TcpProxy_WeightedCluster_ClusterWeight)(nil), "envoy.config.filter.network.tcp_proxy.v2.TcpProxy.WeightedCluster.ClusterWeight")
}

func init() {
	proto.RegisterFile("envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.proto", fileDescriptor_1f6b35dbcbad27ba)
}

var fileDescriptor_1f6b35dbcbad27ba = []byte{
	// 763 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0xdd, 0x6e, 0xe3, 0x44,
	0x14, 0x5e, 0x3b, 0x69, 0x9a, 0x4c, 0x12, 0xd8, 0xce, 0xb2, 0x5a, 0x93, 0xad, 0xd8, 0x2c, 0x57,
	0x11, 0x2b, 0xd9, 0x6c, 0x2a, 0x21, 0x84, 0x90, 0x50, 0x9d, 0x5e, 0x34, 0xa8, 0x91, 0x82, 0x55,
	0xda, 0x4b, 0x6b, 0x6a, 0x4f, 0xdc, 0x01, 0xdb, 0x33, 0xcc, 0x8c, 0x93, 0xf4, 0x29, 0x40, 0x3c,
	0x1d, 0x8f, 0x82, 0x7a, 0x81, 0x90, 0x67, 0xc6, 0x89, 0xdb, 0x06, 0xb5, 0xa2, 0x57, 0xf6, 0x9c,
	0x73, 0xbe, 0xef, 0x3b, 0x73, 0x7e, 0x06, 0x7c, 0x8b, 0xf3, 0x25, 0xbd, 0xf1, 0x22, 0x9a, 0x2f,
	0x48, 0xe2, 0x2d, 0x48, 0x2a, 0x31, 0xf7, 0x72, 0x2c, 0x57, 0x94, 0xff, 0xea, 0xc9, 0x88, 0x85,
	0x8c, 0xd3, 0xf5, 0x8d, 0xb7, 0x1c, 0x6f, 0x0f, 0x2e, 0xe3, 0x54, 0x52, 0x38, 0x52, 0x48, 0x57,
	0x23, 0x5d, 0x8d, 0x74, 0x0d, 0xd2, 0xdd, 0x06, 0x2f, 0xc7, 0x83, 0x77, 0x5a, 0x03, 0x31, 0x52,
	0xf2, 0x44, 0x94, 0x63, 0x0f, 0xc5, 0x31, 0xc7, 0x42, 0x68, 0xaa, 0xc1, 0xe1, 0xc3, 0x80, 0x2b,
	0x24, 0xb0, 0xf1, 0x7e, 0xbd, 0x2b, 0x45, 0x14, 0x45, 0x58, 0x88, 0x94, 0x26, 0x25, 0x62, 0x73,
	0x30, 0x88, 0x2f, 0x12, 0x4a, 0x93, 0x14, 0x7b, 0xea, 0x74, 0x55, 0x2c, 0xbc, 0xb8, 0xe0, 0x48,
	0x12, 0x9a, 0xff, 0x97, 0x7f, 0xc5, 0x11, 0x63, 0x98, 0x57, 0xf9, 0xbc, 0x59, 0xa2, 0x94, 0xc4,
	0x48, 0x62, 0xaf, 0xfa, 0xd1, 0x8e, 0x2f, 0xff, 0x01, 0xa0, 0x7d, 0x1e, 0xb1, 0x79, 0x79, 0x33,
	0x38, 0x02, 0x5d, 0x21, 0x91, 0x0c, 0x19, 0xc7, 0x0b, 0xb2, 0x76, 0xac, 0xa1, 0x35, 0xea, 0xf8,
	0xfb, 0xb7, 0x7e, 0x93, 0xdb, 0x43, 0x2b, 0x00, 0xa5, 0x6f, 0xae, 0x5c, 0x70, 0x00, 0xf6, 0xa3,
	0xb4, 0x10, 0x12, 0x73, 0xc7, 0x2e, 0xa3, 0x4e, 0x5f, 0x04, 0x95, 0x01, 0xfe, 0x06, 0x0e, 0x56,
	0x98, 0x24, 0xd7, 0x12, 0xc7, 0xa1, 0xb1, 0x09, 0x07, 0x0c, 0xad, 0x51, 0x77, 0xec, 0xbb, 0x4f,
	0x2d, 0xb1, 0x5b, 0x25, 0xe5, 0x5e, 0x1a, 0xae, 0x89, 0xa6, 0x3a, 0x7d, 0x11, 0xbc, 0x5c, 0xdd,
	0x35, 0x09, 0xe8, 0x83, 0x4f, 0x32, 0x2c, 0x51, 0x8c, 0x24, 0x0a, 0x33, 0x24, 0xa3, 0x6b, 0xa7,
	0xa3, 0xf4, 0xde, 0x1a, 0x3d, 0xc4, 0x48, 0xc9, 0x59, 0xf6, 0xc1, 0x9d, 0x99, 0xc0, 0xa0, 0x5f,
	0x41, 0x66, 0x25, 0x02, 0x7e, 0x0f, 0x7a, 0x24, 0x4e, 0x71, 0x28, 0x49, 0x86, 0x69, 0x21, 0x9d,
	0xb6, 0x62, 0xf8, 0xdc, 0xd5, 0x95, 0x75, 0xab, 0xca, 0xba, 0x27, 0xa6, 0xf2, 0x41, 0xb7, 0x0c,
	0x3f, 0xd7, 0xd1, 0xf0, 0x27, 0xf0, 0x26, 0xa6, 0xab, 0x5c, 0x48, 0x8e, 0x51, 0x16, 0xde, 0x21,
	0x6a, 0x3c, 0x46, 0xf4, 0x7a, 0x8b, 0x9c, 0xd6, 0x28, 0x67, 0xe0, 0x75, 0xc1, 0x76, 0x11, 0x36,
	0x1f, 0x23, 0x7c, 0x55, 0xe1, 0xea, 0x74, 0x3f, 0x02, 0xa0, 0xa7, 0x2a, 0x4c, 0x69, 0xe2, 0xec,
	0x0d, 0x1b, 0xa3, 0xee, 0xf8, 0xc3, 0xce, 0x7e, 0x6c, 0x87, 0x6f, 0x39, 0x76, 0x8f, 0xd5, 0xe1,
	0x8c, 0x26, 0x41, 0x07, 0x55, 0xbf, 0xf0, 0x1a, 0xf4, 0x63, 0xcc, 0x38, 0x8e, 0x50, 0xd9, 0xe4,
	0xe5, 0x47, 0xa7, 0xa5, 0x52, 0xfa, 0xe1, 0x7f, 0xb4, 0xf7, 0x64, 0xc3, 0x73, 0xf1, 0xd1, 0xb7,
	0x1d, 0x2b, 0xe8, 0xc5, 0x35, 0x0b, 0xbc, 0x04, 0x9f, 0x65, 0x68, 0x1d, 0x46, 0x34, 0xcf, 0x71,
	0x24, 0x43, 0x24, 0x25, 0xce, 0x98, 0x14, 0xce, 0xbe, 0x12, 0x3c, 0x7c, 0x50, 0x83, 0x9f, 0xa7,
	0xb9, 0x3c, 0x1a, 0x5f, 0xa0, 0xb4, 0xc0, 0x6a, 0x72, 0xbf, 0xb2, 0x47, 0x56, 0x00, 0x33, 0xb4,
	0x9e, 0x68, 0x86, 0x63, 0x43, 0x30, 0xf8, 0xa3, 0x01, 0x7a, 0x75, 0x6d, 0xf8, 0x0b, 0x68, 0x71,
	0x5a, 0x48, 0x2c, 0x1c, 0x4b, 0xd5, 0xe6, 0xf4, 0x99, 0x97, 0x71, 0xcf, 0x27, 0xf3, 0xa0, 0x24,
	0xf4, 0xdb, 0xb7, 0xfe, 0xde, 0x9f, 0x96, 0xdd, 0xb6, 0x02, 0xa3, 0x30, 0xf8, 0xdd, 0x06, 0xed,
	0xca, 0x0d, 0xdf, 0x6f, 0x77, 0xe9, 0xde, 0xc6, 0x6d, 0x56, 0xea, 0x0c, 0xbc, 0x8a, 0xb1, 0x90,
	0x24, 0x57, 0xfd, 0x0d, 0x09, 0x0b, 0x53, 0x22, 0xa4, 0x63, 0xab, 0x44, 0x0f, 0x77, 0x0c, 0xf9,
	0x84, 0xc4, 0x3c, 0x40, 0x79, 0x82, 0x83, 0x83, 0x1a, 0x70, 0xca, 0xce, 0x88, 0x90, 0xf0, 0x03,
	0xa8, 0x1b, 0x43, 0x46, 0xb9, 0x14, 0x6a, 0x4a, 0x3b, 0xc1, 0xcb, 0x9a, 0x63, 0x5e, 0xda, 0xcb,
	0xd5, 0x12, 0xb4, 0xe0, 0x11, 0xde, 0xa8, 0x36, 0x9f, 0xa0, 0xda, 0xd3, 0x18, 0x23, 0xf8, 0x1e,
	0x98, 0xb3, 0xd1, 0xda, 0x53, 0x5a, 0x5d, 0x6d, 0x53, 0x32, 0xdf, 0xd9, 0x8e, 0x35, 0xf8, 0xcb,
	0x02, 0x9f, 0xde, 0xdb, 0x76, 0xb8, 0x04, 0xed, 0xcd, 0x1b, 0xa2, 0xfb, 0x32, 0x7f, 0xfe, 0x1b,
	0xe2, 0x9a, 0xaf, 0x36, 0xd7, 0xfa, 0xb3, 0xd1, 0x1a, 0xcc, 0x40, 0xff, 0x4e, 0x10, 0x7c, 0x0b,
	0x9a, 0x39, 0xca, 0xf0, 0xfd, 0x16, 0x29, 0x23, 0x7c, 0x07, 0x5a, 0xfa, 0x4d, 0x52, 0xaf, 0x61,
	0x7f, 0x3b, 0x79, 0xc6, 0xec, 0x3b, 0xe0, 0xc0, 0x50, 0x87, 0x82, 0xe1, 0x88, 0x2c, 0x08, 0xe6,
	0xb0, 0xf1, 0xb7, 0x6f, 0xf9, 0x53, 0xf0, 0x0d, 0xa1, 0xfa, 0x4a, 0x3a, 0xef, 0xa7, 0xde, 0xce,
	0xef, 0x57, 0xd7, 0x9b, 0x97, 0xc3, 0x3f, 0xb7, 0xae, 0x5a, 0x6a, 0x0b, 0x8e, 0xfe, 0x0d, 0x00,
	0x00, 0xff, 0xff, 0xae, 0x4a, 0xeb, 0x75, 0x02, 0x07, 0x00, 0x00,
}
 070701000000FC000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004200000000cilium-proxy-20200109/go/envoy/config/filter/network/thrift_proxy 070701000000FD000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004B00000000cilium-proxy-20200109/go/envoy/config/filter/network/thrift_proxy/v2alpha1    070701000000FE000081A4000003E800000064000000015E17A24700005392000000000000000000000000000000000000005700000000cilium-proxy-20200109/go/envoy/config/filter/network/thrift_proxy/v2alpha1/route.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/network/thrift_proxy/v2alpha1/route.proto

package envoy_config_filter_network_thrift_proxy_v2alpha1

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	route "github.com/cilium/proxy/go/envoy/api/v2/route"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type RouteConfiguration struct {
	// The name of the route configuration. Reserved for future use in asynchronous route discovery.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The list of routes that will be matched, in order, against incoming requests. The first route
	// that matches will be used.
	Routes               []*Route `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RouteConfiguration) Reset()         { *m = RouteConfiguration{} }
func (m *RouteConfiguration) String() string { return proto.CompactTextString(m) }
func (*RouteConfiguration) ProtoMessage()    {}
func (*RouteConfiguration) Descriptor() ([]byte, []int) {
	return fileDescriptor_3de6ac0eae6369f5, []int{0}
}

func (m *RouteConfiguration) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteConfiguration.Unmarshal(m, b)
}
func (m *RouteConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteConfiguration.Marshal(b, m, deterministic)
}
func (m *RouteConfiguration) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteConfiguration.Merge(m, src)
}
func (m *RouteConfiguration) XXX_Size() int {
	return xxx_messageInfo_RouteConfiguration.Size(m)
}
func (m *RouteConfiguration) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteConfiguration.DiscardUnknown(m)
}

var xxx_messageInfo_RouteConfiguration proto.InternalMessageInfo

func (m *RouteConfiguration) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *RouteConfiguration) GetRoutes() []*Route {
	if m != nil {
		return m.Routes
	}
	return nil
}

type Route struct {
	// Route matching parameters.
	Match *RouteMatch `protobuf:"bytes,1,opt,name=match,proto3" json:"match,omitempty"`
	// Route request to some upstream cluster.
	Route                *RouteAction `protobuf:"bytes,2,opt,name=route,proto3" json:"route,omitempty"`
	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
	XXX_unrecognized     []byte       `json:"-"`
	XXX_sizecache        int32        `json:"-"`
}

func (m *Route) Reset()         { *m = Route{} }
func (m *Route) String() string { return proto.CompactTextString(m) }
func (*Route) ProtoMessage()    {}
func (*Route) Descriptor() ([]byte, []int) {
	return fileDescriptor_3de6ac0eae6369f5, []int{1}
}

func (m *Route) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Route.Unmarshal(m, b)
}
func (m *Route) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Route.Marshal(b, m, deterministic)
}
func (m *Route) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Route.Merge(m, src)
}
func (m *Route) XXX_Size() int {
	return xxx_messageInfo_Route.Size(m)
}
func (m *Route) XXX_DiscardUnknown() {
	xxx_messageInfo_Route.DiscardUnknown(m)
}

var xxx_messageInfo_Route proto.InternalMessageInfo

func (m *Route) GetMatch() *RouteMatch {
	if m != nil {
		return m.Match
	}
	return nil
}

func (m *Route) GetRoute() *RouteAction {
	if m != nil {
		return m.Route
	}
	return nil
}

type RouteMatch struct {
	// Types that are valid to be assigned to MatchSpecifier:
	//	*RouteMatch_MethodName
	//	*RouteMatch_ServiceName
	MatchSpecifier isRouteMatch_MatchSpecifier `protobuf_oneof:"match_specifier"`
	// Inverts whatever matching is done in the :ref:`method_name
	// <envoy_api_field_config.filter.network.thrift_proxy.v2alpha1.RouteMatch.method_name>` or
	// :ref:`service_name
	// <envoy_api_field_config.filter.network.thrift_proxy.v2alpha1.RouteMatch.service_name>` fields.
	// Cannot be combined with wildcard matching as that would result in routes never being matched.
	//
	// .. note::
	//
	//   This does not invert matching done as part of the :ref:`headers field
	//   <envoy_api_field_config.filter.network.thrift_proxy.v2alpha1.RouteMatch.headers>` field. To
	//   invert header matching, see :ref:`invert_match
	//   <envoy_api_field_route.HeaderMatcher.invert_match>`.
	Invert bool `protobuf:"varint,3,opt,name=invert,proto3" json:"invert,omitempty"`
	// Specifies a set of headers that the route should match on. The router will check the request’s
	// headers against all the specified headers in the route config. A match will happen if all the
	// headers in the route are present in the request with the same values (or based on presence if
	// the value field is not in the config). Note that this only applies for Thrift transports and/or
	// protocols that support headers.
	Headers              []*route.HeaderMatcher `protobuf:"bytes,4,rep,name=headers,proto3" json:"headers,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *RouteMatch) Reset()         { *m = RouteMatch{} }
func (m *RouteMatch) String() string { return proto.CompactTextString(m) }
func (*RouteMatch) ProtoMessage()    {}
func (*RouteMatch) Descriptor() ([]byte, []int) {
	return fileDescriptor_3de6ac0eae6369f5, []int{2}
}

func (m *RouteMatch) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteMatch.Unmarshal(m, b)
}
func (m *RouteMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteMatch.Marshal(b, m, deterministic)
}
func (m *RouteMatch) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteMatch.Merge(m, src)
}
func (m *RouteMatch) XXX_Size() int {
	return xxx_messageInfo_RouteMatch.Size(m)
}
func (m *RouteMatch) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteMatch.DiscardUnknown(m)
}

var xxx_messageInfo_RouteMatch proto.InternalMessageInfo

type isRouteMatch_MatchSpecifier interface {
	isRouteMatch_MatchSpecifier()
}

type RouteMatch_MethodName struct {
	MethodName string `protobuf:"bytes,1,opt,name=method_name,json=methodName,proto3,oneof"`
}

type RouteMatch_ServiceName struct {
	ServiceName string `protobuf:"bytes,2,opt,name=service_name,json=serviceName,proto3,oneof"`
}

func (*RouteMatch_MethodName) isRouteMatch_MatchSpecifier() {}

func (*RouteMatch_ServiceName) isRouteMatch_MatchSpecifier() {}

func (m *RouteMatch) GetMatchSpecifier() isRouteMatch_MatchSpecifier {
	if m != nil {
		return m.MatchSpecifier
	}
	return nil
}

func (m *RouteMatch) GetMethodName() string {
	if x, ok := m.GetMatchSpecifier().(*RouteMatch_MethodName); ok {
		return x.MethodName
	}
	return ""
}

func (m *RouteMatch) GetServiceName() string {
	if x, ok := m.GetMatchSpecifier().(*RouteMatch_ServiceName); ok {
		return x.ServiceName
	}
	return ""
}

func (m *RouteMatch) GetInvert() bool {
	if m != nil {
		return m.Invert
	}
	return false
}

func (m *RouteMatch) GetHeaders() []*route.HeaderMatcher {
	if m != nil {
		return m.Headers
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*RouteMatch) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*RouteMatch_MethodName)(nil),
		(*RouteMatch_ServiceName)(nil),
	}
}

// [#next-free-field: 6]
type RouteAction struct {
	// Types that are valid to be assigned to ClusterSpecifier:
	//	*RouteAction_Cluster
	//	*RouteAction_WeightedClusters
	ClusterSpecifier isRouteAction_ClusterSpecifier `protobuf_oneof:"cluster_specifier"`
	// Optional endpoint metadata match criteria used by the subset load balancer. Only endpoints in
	// the upstream cluster with metadata matching what is set in this field will be considered.
	// Note that this will be merged with what's provided in :ref: `WeightedCluster.MetadataMatch
	// <envoy_api_field_config.filter.network.thrift_proxy.v2alpha1.WeightedCluster.ClusterWeight.metadata_match>`,
	// with values there taking precedence. Keys and values should be provided under the "envoy.lb"
	// metadata key.
	MetadataMatch *core.Metadata `protobuf:"bytes,3,opt,name=metadata_match,json=metadataMatch,proto3" json:"metadata_match,omitempty"`
	// Specifies a set of rate limit configurations that could be applied to the route.
	// N.B. Thrift service or method name matching can be achieved by specifying a RequestHeaders
	// action with the header name ":method-name".
	RateLimits []*route.RateLimit `protobuf:"bytes,4,rep,name=rate_limits,json=rateLimits,proto3" json:"rate_limits,omitempty"`
	// Strip the service prefix from the method name, if there's a prefix. For
	// example, the method call Service:method would end up being just method.
	StripServiceName     bool     `protobuf:"varint,5,opt,name=strip_service_name,json=stripServiceName,proto3" json:"strip_service_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RouteAction) Reset()         { *m = RouteAction{} }
func (m *RouteAction) String() string { return proto.CompactTextString(m) }
func (*RouteAction) ProtoMessage()    {}
func (*RouteAction) Descriptor() ([]byte, []int) {
	return fileDescriptor_3de6ac0eae6369f5, []int{3}
}

func (m *RouteAction) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RouteAction.Unmarshal(m, b)
}
func (m *RouteAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RouteAction.Marshal(b, m, deterministic)
}
func (m *RouteAction) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RouteAction.Merge(m, src)
}
func (m *RouteAction) XXX_Size() int {
	return xxx_messageInfo_RouteAction.Size(m)
}
func (m *RouteAction) XXX_DiscardUnknown() {
	xxx_messageInfo_RouteAction.DiscardUnknown(m)
}

var xxx_messageInfo_RouteAction proto.InternalMessageInfo

type isRouteAction_ClusterSpecifier interface {
	isRouteAction_ClusterSpecifier()
}

type RouteAction_Cluster struct {
	Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3,oneof"`
}

type RouteAction_WeightedClusters struct {
	WeightedClusters *WeightedCluster `protobuf:"bytes,2,opt,name=weighted_clusters,json=weightedClusters,proto3,oneof"`
}

func (*RouteAction_Cluster) isRouteAction_ClusterSpecifier() {}

func (*RouteAction_WeightedClusters) isRouteAction_ClusterSpecifier() {}

func (m *RouteAction) GetClusterSpecifier() isRouteAction_ClusterSpecifier {
	if m != nil {
		return m.ClusterSpecifier
	}
	return nil
}

func (m *RouteAction) GetCluster() string {
	if x, ok := m.GetClusterSpecifier().(*RouteAction_Cluster); ok {
		return x.Cluster
	}
	return ""
}

func (m *RouteAction) GetWeightedClusters() *WeightedCluster {
	if x, ok := m.GetClusterSpecifier().(*RouteAction_WeightedClusters); ok {
		return x.WeightedClusters
	}
	return nil
}

func (m *RouteAction) GetMetadataMatch() *core.Metadata {
	if m != nil {
		return m.MetadataMatch
	}
	return nil
}

func (m *RouteAction) GetRateLimits() []*route.RateLimit {
	if m != nil {
		return m.RateLimits
	}
	return nil
}

func (m *RouteAction) GetStripServiceName() bool {
	if m != nil {
		return m.StripServiceName
	}
	return false
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*RouteAction) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*RouteAction_Cluster)(nil),
		(*RouteAction_WeightedClusters)(nil),
	}
}

// Allows for specification of multiple upstream clusters along with weights that indicate the
// percentage of traffic to be forwarded to each cluster. The router selects an upstream cluster
// based on these weights.
type WeightedCluster struct {
	// Specifies one or more upstream clusters associated with the route.
	Clusters             []*WeightedCluster_ClusterWeight `protobuf:"bytes,1,rep,name=clusters,proto3" json:"clusters,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
	XXX_unrecognized     []byte                           `json:"-"`
	XXX_sizecache        int32                            `json:"-"`
}

func (m *WeightedCluster) Reset()         { *m = WeightedCluster{} }
func (m *WeightedCluster) String() string { return proto.CompactTextString(m) }
func (*WeightedCluster) ProtoMessage()    {}
func (*WeightedCluster) Descriptor() ([]byte, []int) {
	return fileDescriptor_3de6ac0eae6369f5, []int{4}
}

func (m *WeightedCluster) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_WeightedCluster.Unmarshal(m, b)
}
func (m *WeightedCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_WeightedCluster.Marshal(b, m, deterministic)
}
func (m *WeightedCluster) XXX_Merge(src proto.Message) {
	xxx_messageInfo_WeightedCluster.Merge(m, src)
}
func (m *WeightedCluster) XXX_Size() int {
	return xxx_messageInfo_WeightedCluster.Size(m)
}
func (m *WeightedCluster) XXX_DiscardUnknown() {
	xxx_messageInfo_WeightedCluster.DiscardUnknown(m)
}

var xxx_messageInfo_WeightedCluster proto.InternalMessageInfo

func (m *WeightedCluster) GetClusters() []*WeightedCluster_ClusterWeight {
	if m != nil {
		return m.Clusters
	}
	return nil
}

type WeightedCluster_ClusterWeight struct {
	// Name of the upstream cluster.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// When a request matches the route, the choice of an upstream cluster is determined by its
	// weight. The sum of weights across all entries in the clusters array determines the total
	// weight.
	Weight *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=weight,proto3" json:"weight,omitempty"`
	// Optional endpoint metadata match criteria used by the subset load balancer. Only endpoints in
	// the upstream cluster with metadata matching what is set in this field, combined with what's
	// provided in :ref: `RouteAction's metadata_match
	// <envoy_api_field_config.filter.network.thrift_proxy.v2alpha1.RouteAction.metadata_match>`,
	// will be considered. Values here will take precedence. Keys and values should be provided
	// under the "envoy.lb" metadata key.
	MetadataMatch        *core.Metadata `protobuf:"bytes,3,opt,name=metadata_match,json=metadataMatch,proto3" json:"metadata_match,omitempty"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

func (m *WeightedCluster_ClusterWeight) Reset()         { *m = WeightedCluster_ClusterWeight{} }
func (m *WeightedCluster_ClusterWeight) String() string { return proto.CompactTextString(m) }
func (*WeightedCluster_ClusterWeight) ProtoMessage()    {}
func (*WeightedCluster_ClusterWeight) Descriptor() ([]byte, []int) {
	return fileDescriptor_3de6ac0eae6369f5, []int{4, 0}
}

func (m *WeightedCluster_ClusterWeight) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_WeightedCluster_ClusterWeight.Unmarshal(m, b)
}
func (m *WeightedCluster_ClusterWeight) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_WeightedCluster_ClusterWeight.Marshal(b, m, deterministic)
}
func (m *WeightedCluster_ClusterWeight) XXX_Merge(src proto.Message) {
	xxx_messageInfo_WeightedCluster_ClusterWeight.Merge(m, src)
}
func (m *WeightedCluster_ClusterWeight) XXX_Size() int {
	return xxx_messageInfo_WeightedCluster_ClusterWeight.Size(m)
}
func (m *WeightedCluster_ClusterWeight) XXX_DiscardUnknown() {
	xxx_messageInfo_WeightedCluster_ClusterWeight.DiscardUnknown(m)
}

var xxx_messageInfo_WeightedCluster_ClusterWeight proto.InternalMessageInfo

func (m *WeightedCluster_ClusterWeight) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *WeightedCluster_ClusterWeight) GetWeight() *wrappers.UInt32Value {
	if m != nil {
		return m.Weight
	}
	return nil
}

func (m *WeightedCluster_ClusterWeight) GetMetadataMatch() *core.Metadata {
	if m != nil {
		return m.MetadataMatch
	}
	return nil
}

func init() {
	proto.RegisterType((*RouteConfiguration)(nil), "envoy.config.filter.network.thrift_proxy.v2alpha1.RouteConfiguration")
	proto.RegisterType((*Route)(nil), "envoy.config.filter.network.thrift_proxy.v2alpha1.Route")
	proto.RegisterType((*RouteMatch)(nil), "envoy.config.filter.network.thrift_proxy.v2alpha1.RouteMatch")
	proto.RegisterType((*RouteAction)(nil), "envoy.config.filter.network.thrift_proxy.v2alpha1.RouteAction")
	proto.RegisterType((*WeightedCluster)(nil), "envoy.config.filter.network.thrift_proxy.v2alpha1.WeightedCluster")
	proto.RegisterType((*WeightedCluster_ClusterWeight)(nil), "envoy.config.filter.network.thrift_proxy.v2alpha1.WeightedCluster.ClusterWeight")
}

func init() {
	proto.RegisterFile("envoy/config/filter/network/thrift_proxy/v2alpha1/route.proto", fileDescriptor_3de6ac0eae6369f5)
}

var fileDescriptor_3de6ac0eae6369f5 = []byte{
	// 653 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xc1, 0x6e, 0x13, 0x3b,
	0x14, 0xad, 0x27, 0x4d, 0x9a, 0x77, 0xf3, 0xfa, 0xda, 0x7a, 0xd1, 0x17, 0xa5, 0x7d, 0x55, 0x9a,
	0x6e, 0xa2, 0x27, 0xe4, 0x51, 0xd3, 0x0d, 0x12, 0x6a, 0x11, 0xd3, 0x4d, 0x90, 0x28, 0x44, 0x46,
	0xc0, 0x0a, 0x46, 0xee, 0xc4, 0x49, 0x2c, 0x26, 0xe3, 0xc1, 0xe3, 0x4c, 0x28, 0x9f, 0xc0, 0x92,
	0x1f, 0xe1, 0x03, 0x58, 0xb1, 0xe1, 0x7f, 0xd8, 0xa1, 0xae, 0xd0, 0xd8, 0x9e, 0x36, 0xa9, 0xd8,
	0xb4, 0xb0, 0x8a, 0x73, 0xef, 0x3d, 0xe7, 0xdc, 0x7b, 0xae, 0xc7, 0x70, 0xcc, 0x93, 0x5c, 0x5e,
	0xf8, 0x91, 0x4c, 0x46, 0x62, 0xec, 0x8f, 0x44, 0xac, 0xb9, 0xf2, 0x13, 0xae, 0xe7, 0x52, 0xbd,
	0xf5, 0xf5, 0x44, 0x89, 0x91, 0x0e, 0x53, 0x25, 0xdf, 0x5f, 0xf8, 0x79, 0x8f, 0xc5, 0xe9, 0x84,
	0x1d, 0xfa, 0x4a, 0xce, 0x34, 0x27, 0xa9, 0x92, 0x5a, 0xe2, 0x43, 0x03, 0x27, 0x16, 0x4e, 0x2c,
	0x9c, 0x38, 0x38, 0x59, 0x84, 0x93, 0x12, 0xde, 0xda, 0xb5, 0x8a, 0x2c, 0x15, 0x7e, 0xde, 0xf3,
	0x23, 0xa9, 0xb8, 0x7f, 0xce, 0x32, 0x47, 0xd8, 0xda, 0x5b, 0xca, 0x1a, 0xa9, 0x45, 0xc1, 0xd6,
	0xde, 0x58, 0xca, 0x71, 0xcc, 0x7d, 0xf3, 0xef, 0x7c, 0x36, 0xf2, 0xe7, 0x8a, 0xa5, 0x29, 0x57,
	0x99, 0xcb, 0xff, 0x9b, 0xb3, 0x58, 0x0c, 0x99, 0xe6, 0x7e, 0x79, 0xb0, 0x89, 0xce, 0x07, 0xc0,
	0xb4, 0xe0, 0x39, 0x35, 0xad, 0xce, 0x14, 0xd3, 0x42, 0x26, 0x18, 0xc3, 0x6a, 0xc2, 0xa6, 0xbc,
	0x89, 0xda, 0xa8, 0xfb, 0x17, 0x35, 0x67, 0x3c, 0x80, 0x9a, 0x51, 0xcc, 0x9a, 0x5e, 0xbb, 0xd2,
	0x6d, 0xf4, 0xee, 0x93, 0x5b, 0x0f, 0x49, 0x8c, 0x14, 0x75, 0x3c, 0x9d, 0x6f, 0x08, 0xaa, 0x26,
	0x82, 0x5f, 0x43, 0x75, 0xca, 0x74, 0x34, 0x31, 0x82, 0x8d, 0xde, 0xf1, 0x5d, 0xa9, 0xcf, 0x0a,
	0x92, 0xa0, 0x7e, 0x19, 0x54, 0x3f, 0x22, 0x6f, 0x13, 0x51, 0xcb, 0x8a, 0xdf, 0x40, 0xd5, 0x48,
	0x36, 0x3d, 0x43, 0x7f, 0x72, 0x57, 0xfa, 0x47, 0x51, 0xe1, 0xce, 0x22, 0xbf, 0xa1, 0xed, 0x7c,
	0x45, 0x00, 0xd7, 0xfa, 0x78, 0x1f, 0x1a, 0x53, 0xae, 0x27, 0x72, 0x18, 0x5e, 0x9b, 0xd8, 0x5f,
	0xa1, 0x60, 0x83, 0x4f, 0x0b, 0x33, 0x0f, 0xe0, 0xef, 0x8c, 0xab, 0x5c, 0x44, 0xdc, 0xd6, 0x78,
	0xae, 0xa6, 0xe1, 0xa2, 0xa6, 0x68, 0x1b, 0x6a, 0x22, 0xc9, 0xb9, 0xd2, 0xcd, 0x4a, 0x1b, 0x75,
	0xeb, 0xd4, 0xfd, 0xc3, 0x0f, 0x60, 0x6d, 0xc2, 0xd9, 0x90, 0xab, 0xac, 0xb9, 0x6a, 0x56, 0xb1,
	0xef, 0x06, 0x62, 0xa9, 0x20, 0x79, 0x8f, 0xd8, 0x8b, 0xd1, 0x37, 0x25, 0xa6, 0x23, 0xae, 0x68,
	0x89, 0x08, 0xb6, 0x61, 0xc3, 0x98, 0x12, 0x66, 0x29, 0x8f, 0xc4, 0x48, 0x70, 0x85, 0x2b, 0x3f,
	0x02, 0xd4, 0xf9, 0xee, 0x41, 0x63, 0x61, 0x48, 0x7c, 0x00, 0x6b, 0x51, 0x3c, 0xcb, 0x34, 0x57,
	0x76, 0x80, 0x60, 0xed, 0x32, 0x58, 0x55, 0x5e, 0x1b, 0xf5, 0x57, 0x68, 0x99, 0xc1, 0xef, 0x60,
	0x6b, 0xce, 0xc5, 0x78, 0xa2, 0xf9, 0x30, 0x74, 0xb1, 0xcc, 0x99, 0x1c, 0xdc, 0xc1, 0xe4, 0x57,
	0x8e, 0xeb, 0xd4, 0x52, 0xf5, 0x57, 0xe8, 0xe6, 0x7c, 0x39, 0x94, 0xe1, 0x00, 0xfe, 0x99, 0x72,
	0xcd, 0x86, 0x4c, 0xb3, 0xd0, 0xde, 0x99, 0x8a, 0xd1, 0xdb, 0x59, 0xf6, 0xa0, 0xf8, 0x80, 0xc8,
	0x99, 0x2b, 0xa4, 0xeb, 0x25, 0xc4, 0x2e, 0xe8, 0x04, 0x1a, 0x8a, 0x69, 0x1e, 0xc6, 0x62, 0x2a,
	0x74, 0x69, 0xe2, 0x7f, 0xbf, 0x32, 0x91, 0x32, 0xcd, 0x9f, 0x14, 0x55, 0x14, 0x54, 0x79, 0xcc,
	0xf0, 0x3d, 0xc0, 0x99, 0x56, 0x22, 0x0d, 0x97, 0x76, 0x58, 0x35, 0x4b, 0xda, 0x34, 0x99, 0xe7,
	0xd7, 0x6b, 0x0c, 0x9a, 0xb0, 0xe5, 0xbc, 0xb9, 0xe9, 0xf9, 0x17, 0x0f, 0x36, 0x6e, 0xcc, 0x8c,
	0x73, 0xa8, 0x5f, 0x39, 0x89, 0x4c, 0x63, 0x83, 0xdf, 0x77, 0x92, 0xb8, 0x5f, 0x1b, 0x36, 0x17,
	0xf8, 0x13, 0xf2, 0xea, 0x88, 0x5e, 0x69, 0xb5, 0x3e, 0x23, 0x58, 0x5f, 0xaa, 0xc2, 0x3b, 0x8b,
	0x8f, 0xc0, 0xd5, 0xfa, 0xdd, 0x6b, 0x70, 0x0c, 0x35, 0xbb, 0x1a, 0xb7, 0xee, 0x5d, 0x62, 0x5f,
	0x20, 0x52, 0xbe, 0x40, 0xe4, 0xc5, 0xe3, 0x44, 0x1f, 0xf5, 0x5e, 0xb2, 0x78, 0xc6, 0x0d, 0xf8,
	0x7f, 0xaf, 0x8b, 0xa8, 0x03, 0xfd, 0x89, 0x2d, 0x06, 0xcf, 0xe0, 0xa1, 0x90, 0xb6, 0xde, 0x4e,
	0x7f, 0x6b, 0x9b, 0x02, 0xfb, 0xd5, 0x0e, 0x8a, 0x96, 0x07, 0xe8, 0xbc, 0x66, 0x7a, 0x3f, 0xfa,
	0x19, 0x00, 0x00, 0xff, 0xff, 0x0e, 0xf1, 0xd1, 0xea, 0xfd, 0x05, 0x00, 0x00,
}
  070701000000FF000081A4000003E800000064000000015E17A24700004145000000000000000000000000000000000000005E00000000cilium-proxy-20200109/go/envoy/config/filter/network/thrift_proxy/v2alpha1/thrift_proxy.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/network/thrift_proxy/v2alpha1/thrift_proxy.proto

package envoy_config_filter_network_thrift_proxy_v2alpha1

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	_struct "github.com/golang/protobuf/ptypes/struct"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Thrift transport types supported by Envoy.
type TransportType int32

const (
	// For downstream connections, the Thrift proxy will attempt to determine which transport to use.
	// For upstream connections, the Thrift proxy will use same transport as the downstream
	// connection.
	TransportType_AUTO_TRANSPORT TransportType = 0
	// The Thrift proxy will use the Thrift framed transport.
	TransportType_FRAMED TransportType = 1
	// The Thrift proxy will use the Thrift unframed transport.
	TransportType_UNFRAMED TransportType = 2
	// The Thrift proxy will assume the client is using the Thrift header transport.
	TransportType_HEADER TransportType = 3
)

var TransportType_name = map[int32]string{
	0: "AUTO_TRANSPORT",
	1: "FRAMED",
	2: "UNFRAMED",
	3: "HEADER",
}

var TransportType_value = map[string]int32{
	"AUTO_TRANSPORT": 0,
	"FRAMED":         1,
	"UNFRAMED":       2,
	"HEADER":         3,
}

func (x TransportType) String() string {
	return proto.EnumName(TransportType_name, int32(x))
}

func (TransportType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_e8fab7646d88fc90, []int{0}
}

// Thrift Protocol types supported by Envoy.
type ProtocolType int32

const (
	// For downstream connections, the Thrift proxy will attempt to determine which protocol to use.
	// Note that the older, non-strict (or lax) binary protocol is not included in automatic protocol
	// detection. For upstream connections, the Thrift proxy will use the same protocol as the
	// downstream connection.
	ProtocolType_AUTO_PROTOCOL ProtocolType = 0
	// The Thrift proxy will use the Thrift binary protocol.
	ProtocolType_BINARY ProtocolType = 1
	// The Thrift proxy will use Thrift non-strict binary protocol.
	ProtocolType_LAX_BINARY ProtocolType = 2
	// The Thrift proxy will use the Thrift compact protocol.
	ProtocolType_COMPACT ProtocolType = 3
	// The Thrift proxy will use the Thrift "Twitter" protocol implemented by the finagle library.
	ProtocolType_TWITTER ProtocolType = 4
)

var ProtocolType_name = map[int32]string{
	0: "AUTO_PROTOCOL",
	1: "BINARY",
	2: "LAX_BINARY",
	3: "COMPACT",
	4: "TWITTER",
}

var ProtocolType_value = map[string]int32{
	"AUTO_PROTOCOL": 0,
	"BINARY":        1,
	"LAX_BINARY":    2,
	"COMPACT":       3,
	"TWITTER":       4,
}

func (x ProtocolType) String() string {
	return proto.EnumName(ProtocolType_name, int32(x))
}

func (ProtocolType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_e8fab7646d88fc90, []int{1}
}

// [#next-free-field: 6]
type ThriftProxy struct {
	// Supplies the type of transport that the Thrift proxy should use. Defaults to
	// :ref:`AUTO_TRANSPORT<envoy_api_enum_value_config.filter.network.thrift_proxy.v2alpha1.TransportType.AUTO_TRANSPORT>`.
	Transport TransportType `protobuf:"varint,2,opt,name=transport,proto3,enum=envoy.config.filter.network.thrift_proxy.v2alpha1.TransportType" json:"transport,omitempty"`
	// Supplies the type of protocol that the Thrift proxy should use. Defaults to
	// :ref:`AUTO_PROTOCOL<envoy_api_enum_value_config.filter.network.thrift_proxy.v2alpha1.ProtocolType.AUTO_PROTOCOL>`.
	Protocol ProtocolType `protobuf:"varint,3,opt,name=protocol,proto3,enum=envoy.config.filter.network.thrift_proxy.v2alpha1.ProtocolType" json:"protocol,omitempty"`
	// The human readable prefix to use when emitting statistics.
	StatPrefix string `protobuf:"bytes,1,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"`
	// The route table for the connection manager is static and is specified in this property.
	RouteConfig *RouteConfiguration `protobuf:"bytes,4,opt,name=route_config,json=routeConfig,proto3" json:"route_config,omitempty"`
	// A list of individual Thrift filters that make up the filter chain for requests made to the
	// Thrift proxy. Order matters as the filters are processed sequentially. For backwards
	// compatibility, if no thrift_filters are specified, a default Thrift router filter
	// (`envoy.filters.thrift.router`) is used.
	ThriftFilters        []*ThriftFilter `protobuf:"bytes,5,rep,name=thrift_filters,json=thriftFilters,proto3" json:"thrift_filters,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *ThriftProxy) Reset()         { *m = ThriftProxy{} }
func (m *ThriftProxy) String() string { return proto.CompactTextString(m) }
func (*ThriftProxy) ProtoMessage()    {}
func (*ThriftProxy) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8fab7646d88fc90, []int{0}
}

func (m *ThriftProxy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ThriftProxy.Unmarshal(m, b)
}
func (m *ThriftProxy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ThriftProxy.Marshal(b, m, deterministic)
}
func (m *ThriftProxy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ThriftProxy.Merge(m, src)
}
func (m *ThriftProxy) XXX_Size() int {
	return xxx_messageInfo_ThriftProxy.Size(m)
}
func (m *ThriftProxy) XXX_DiscardUnknown() {
	xxx_messageInfo_ThriftProxy.DiscardUnknown(m)
}

var xxx_messageInfo_ThriftProxy proto.InternalMessageInfo

func (m *ThriftProxy) GetTransport() TransportType {
	if m != nil {
		return m.Transport
	}
	return TransportType_AUTO_TRANSPORT
}

func (m *ThriftProxy) GetProtocol() ProtocolType {
	if m != nil {
		return m.Protocol
	}
	return ProtocolType_AUTO_PROTOCOL
}

func (m *ThriftProxy) GetStatPrefix() string {
	if m != nil {
		return m.StatPrefix
	}
	return ""
}

func (m *ThriftProxy) GetRouteConfig() *RouteConfiguration {
	if m != nil {
		return m.RouteConfig
	}
	return nil
}

func (m *ThriftProxy) GetThriftFilters() []*ThriftFilter {
	if m != nil {
		return m.ThriftFilters
	}
	return nil
}

// ThriftFilter configures a Thrift filter.
type ThriftFilter struct {
	// The name of the filter to instantiate. The name must match a supported
	// filter. The built-in filters are:
	//
	// [#comment:TODO(zuercher): Auto generate the following list]
	// * :ref:`envoy.filters.thrift.router <config_thrift_filters_router>`
	// * :ref:`envoy.filters.thrift.rate_limit <config_thrift_filters_rate_limit>`
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Filter specific configuration which depends on the filter being instantiated. See the supported
	// filters for further documentation.
	//
	// Types that are valid to be assigned to ConfigType:
	//	*ThriftFilter_Config
	//	*ThriftFilter_TypedConfig
	ConfigType           isThriftFilter_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
	XXX_unrecognized     []byte                    `json:"-"`
	XXX_sizecache        int32                     `json:"-"`
}

func (m *ThriftFilter) Reset()         { *m = ThriftFilter{} }
func (m *ThriftFilter) String() string { return proto.CompactTextString(m) }
func (*ThriftFilter) ProtoMessage()    {}
func (*ThriftFilter) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8fab7646d88fc90, []int{1}
}

func (m *ThriftFilter) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ThriftFilter.Unmarshal(m, b)
}
func (m *ThriftFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ThriftFilter.Marshal(b, m, deterministic)
}
func (m *ThriftFilter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ThriftFilter.Merge(m, src)
}
func (m *ThriftFilter) XXX_Size() int {
	return xxx_messageInfo_ThriftFilter.Size(m)
}
func (m *ThriftFilter) XXX_DiscardUnknown() {
	xxx_messageInfo_ThriftFilter.DiscardUnknown(m)
}

var xxx_messageInfo_ThriftFilter proto.InternalMessageInfo

func (m *ThriftFilter) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isThriftFilter_ConfigType interface {
	isThriftFilter_ConfigType()
}

type ThriftFilter_Config struct {
	Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"`
}

type ThriftFilter_TypedConfig struct {
	TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*ThriftFilter_Config) isThriftFilter_ConfigType() {}

func (*ThriftFilter_TypedConfig) isThriftFilter_ConfigType() {}

func (m *ThriftFilter) GetConfigType() isThriftFilter_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

// Deprecated: Do not use.
func (m *ThriftFilter) GetConfig() *_struct.Struct {
	if x, ok := m.GetConfigType().(*ThriftFilter_Config); ok {
		return x.Config
	}
	return nil
}

func (m *ThriftFilter) GetTypedConfig() *any.Any {
	if x, ok := m.GetConfigType().(*ThriftFilter_TypedConfig); ok {
		return x.TypedConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ThriftFilter) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*ThriftFilter_Config)(nil),
		(*ThriftFilter_TypedConfig)(nil),
	}
}

// ThriftProtocolOptions specifies Thrift upstream protocol options. This object is used in
// in :ref:`extension_protocol_options<envoy_api_field_Cluster.extension_protocol_options>`, keyed
// by the name `envoy.filters.network.thrift_proxy`.
type ThriftProtocolOptions struct {
	// Supplies the type of transport that the Thrift proxy should use for upstream connections.
	// Selecting
	// :ref:`AUTO_TRANSPORT<envoy_api_enum_value_config.filter.network.thrift_proxy.v2alpha1.TransportType.AUTO_TRANSPORT>`,
	// which is the default, causes the proxy to use the same transport as the downstream connection.
	Transport TransportType `protobuf:"varint,1,opt,name=transport,proto3,enum=envoy.config.filter.network.thrift_proxy.v2alpha1.TransportType" json:"transport,omitempty"`
	// Supplies the type of protocol that the Thrift proxy should use for upstream connections.
	// Selecting
	// :ref:`AUTO_PROTOCOL<envoy_api_enum_value_config.filter.network.thrift_proxy.v2alpha1.ProtocolType.AUTO_PROTOCOL>`,
	// which is the default, causes the proxy to use the same protocol as the downstream connection.
	Protocol             ProtocolType `protobuf:"varint,2,opt,name=protocol,proto3,enum=envoy.config.filter.network.thrift_proxy.v2alpha1.ProtocolType" json:"protocol,omitempty"`
	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
	XXX_unrecognized     []byte       `json:"-"`
	XXX_sizecache        int32        `json:"-"`
}

func (m *ThriftProtocolOptions) Reset()         { *m = ThriftProtocolOptions{} }
func (m *ThriftProtocolOptions) String() string { return proto.CompactTextString(m) }
func (*ThriftProtocolOptions) ProtoMessage()    {}
func (*ThriftProtocolOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8fab7646d88fc90, []int{2}
}

func (m *ThriftProtocolOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ThriftProtocolOptions.Unmarshal(m, b)
}
func (m *ThriftProtocolOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ThriftProtocolOptions.Marshal(b, m, deterministic)
}
func (m *ThriftProtocolOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ThriftProtocolOptions.Merge(m, src)
}
func (m *ThriftProtocolOptions) XXX_Size() int {
	return xxx_messageInfo_ThriftProtocolOptions.Size(m)
}
func (m *ThriftProtocolOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_ThriftProtocolOptions.DiscardUnknown(m)
}

var xxx_messageInfo_ThriftProtocolOptions proto.InternalMessageInfo

func (m *ThriftProtocolOptions) GetTransport() TransportType {
	if m != nil {
		return m.Transport
	}
	return TransportType_AUTO_TRANSPORT
}

func (m *ThriftProtocolOptions) GetProtocol() ProtocolType {
	if m != nil {
		return m.Protocol
	}
	return ProtocolType_AUTO_PROTOCOL
}

func init() {
	proto.RegisterEnum("envoy.config.filter.network.thrift_proxy.v2alpha1.TransportType", TransportType_name, TransportType_value)
	proto.RegisterEnum("envoy.config.filter.network.thrift_proxy.v2alpha1.ProtocolType", ProtocolType_name, ProtocolType_value)
	proto.RegisterType((*ThriftProxy)(nil), "envoy.config.filter.network.thrift_proxy.v2alpha1.ThriftProxy")
	proto.RegisterType((*ThriftFilter)(nil), "envoy.config.filter.network.thrift_proxy.v2alpha1.ThriftFilter")
	proto.RegisterType((*ThriftProtocolOptions)(nil), "envoy.config.filter.network.thrift_proxy.v2alpha1.ThriftProtocolOptions")
}

func init() {
	proto.RegisterFile("envoy/config/filter/network/thrift_proxy/v2alpha1/thrift_proxy.proto", fileDescriptor_e8fab7646d88fc90)
}

var fileDescriptor_e8fab7646d88fc90 = []byte{
	// 565 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xcb, 0x6e, 0xda, 0x40,
	0x14, 0xcd, 0xd8, 0xe4, 0x75, 0x0d, 0xc8, 0x1d, 0xb5, 0x8a, 0x9b, 0x76, 0x81, 0x58, 0xa1, 0x2c,
	0x6c, 0x85, 0xaa, 0x8b, 0x2e, 0xaa, 0xd4, 0x06, 0x22, 0x90, 0x12, 0x6c, 0x4d, 0x8c, 0xd2, 0xae,
	0x90, 0x43, 0x6c, 0xb0, 0x4a, 0x3d, 0xd6, 0x78, 0xa0, 0x61, 0xdb, 0xef, 0xe9, 0x17, 0xf5, 0x0b,
	0xfa, 0x0d, 0x59, 0x55, 0x9e, 0x31, 0x09, 0xd0, 0x15, 0x48, 0xed, 0xce, 0xf7, 0x75, 0xce, 0xbd,
	0x67, 0x8e, 0x0c, 0xed, 0x30, 0x99, 0xd3, 0x85, 0x35, 0xa2, 0x49, 0x14, 0x8f, 0xad, 0x28, 0x9e,
	0xf2, 0x90, 0x59, 0x49, 0xc8, 0xbf, 0x53, 0xf6, 0xd5, 0xe2, 0x13, 0x16, 0x47, 0x7c, 0x98, 0x32,
	0xfa, 0xb0, 0xb0, 0xe6, 0xcd, 0x60, 0x9a, 0x4e, 0x82, 0xf3, 0xb5, 0xac, 0x99, 0x32, 0xca, 0x29,
	0x3e, 0x17, 0x28, 0xa6, 0x44, 0x31, 0x25, 0x8a, 0x59, 0xa0, 0x98, 0x6b, 0xfd, 0x4b, 0x94, 0xd3,
	0x8f, 0xdb, 0x13, 0x33, 0x3a, 0xe3, 0xa1, 0x64, 0x3c, 0x7d, 0x3d, 0xa6, 0x74, 0x3c, 0x0d, 0x2d,
	0x11, 0xdd, 0xcd, 0x22, 0x2b, 0x48, 0x8a, 0x65, 0x4e, 0xdf, 0x6e, 0x96, 0x32, 0xce, 0x66, 0x23,
	0x5e, 0x54, 0x4f, 0xe6, 0xc1, 0x34, 0xbe, 0x0f, 0x78, 0x68, 0x2d, 0x3f, 0x64, 0xa1, 0xfe, 0x4b,
	0x05, 0xcd, 0x17, 0xbc, 0x5e, 0x4e, 0x8b, 0x27, 0x70, 0xcc, 0x59, 0x90, 0x64, 0x29, 0x65, 0xdc,
	0x50, 0x6a, 0xa8, 0x51, 0x6d, 0x7e, 0x32, 0xb7, 0xbe, 0xd3, 0xf4, 0x97, 0x18, 0xfe, 0x22, 0x0d,
	0x9d, 0xa3, 0x47, 0x67, 0xff, 0x07, 0x52, 0x74, 0x44, 0x9e, 0xc1, 0x71, 0x08, 0x47, 0x62, 0x85,
	0x11, 0x9d, 0x1a, 0xaa, 0x20, 0xba, 0xd8, 0x81, 0xc8, 0x2b, 0x20, 0x36, 0x78, 0x9e, 0xa0, 0x71,
	0x03, 0xb4, 0x8c, 0x07, 0xf9, 0x5c, 0x18, 0xc5, 0x0f, 0x06, 0xaa, 0xa1, 0xc6, 0xb1, 0x73, 0xf8,
	0xe8, 0x94, 0x98, 0x52, 0x43, 0x04, 0xf2, 0x9a, 0x27, 0x4a, 0x78, 0x02, 0x65, 0xa1, 0xf5, 0x50,
	0xf2, 0x1b, 0xa5, 0x1a, 0x6a, 0x68, 0xcd, 0xce, 0x0e, 0x4b, 0x91, 0x1c, 0xa6, 0x25, 0x06, 0x66,
	0x2c, 0xe0, 0x31, 0x4d, 0x88, 0xc6, 0x9e, 0x73, 0x38, 0x82, 0x6a, 0x31, 0x28, 0xe1, 0x32, 0x63,
	0xbf, 0xa6, 0x36, 0xb4, 0x9d, 0x04, 0x90, 0x8f, 0x77, 0x29, 0x5a, 0x49, 0x85, 0xaf, 0x44, 0x59,
	0xfd, 0x27, 0x82, 0xf2, 0x6a, 0x1d, 0xbf, 0x81, 0x52, 0x12, 0x7c, 0x0b, 0x37, 0x55, 0x10, 0x49,
	0xfc, 0x1e, 0x0e, 0x8a, 0xcb, 0x15, 0x71, 0xf9, 0x89, 0x29, 0x2d, 0x65, 0x2e, 0x2d, 0x65, 0xde,
	0x08, 0x4b, 0x39, 0x8a, 0x81, 0xba, 0x7b, 0xa4, 0x68, 0xc6, 0x1f, 0xa0, 0xcc, 0x17, 0x69, 0x78,
	0xbf, 0x94, 0x4d, 0x15, 0xc3, 0x2f, 0xff, 0x1a, 0xb6, 0x93, 0x45, 0x77, 0x8f, 0x68, 0xa2, 0x57,
	0xea, 0xe0, 0x54, 0x40, 0x93, 0x43, 0xc3, 0x3c, 0x5b, 0xff, 0x8d, 0xe0, 0xd5, 0x93, 0x17, 0xc5,
	0xeb, 0xb9, 0x69, 0x2e, 0x5e, 0xb6, 0xee, 0x4a, 0xf4, 0xbf, 0x5c, 0xa9, 0xfc, 0x33, 0x57, 0x9e,
	0xf5, 0xa0, 0xb2, 0xb6, 0x0c, 0xc6, 0x50, 0xb5, 0x07, 0xbe, 0x3b, 0xf4, 0x89, 0xdd, 0xbf, 0xf1,
	0x5c, 0xe2, 0xeb, 0x7b, 0x18, 0xe0, 0xe0, 0x92, 0xd8, 0xd7, 0x9d, 0xb6, 0x8e, 0x70, 0x19, 0x8e,
	0x06, 0xfd, 0x22, 0x52, 0xf2, 0x4a, 0xb7, 0x63, 0xb7, 0x3b, 0x44, 0x57, 0xcf, 0x6e, 0xa1, 0xbc,
	0x4a, 0x87, 0x5f, 0x40, 0x45, 0x20, 0x79, 0xc4, 0xf5, 0xdd, 0x96, 0x7b, 0x25, 0x81, 0x9c, 0x5e,
	0xdf, 0x26, 0x5f, 0x74, 0x84, 0xab, 0x00, 0x57, 0xf6, 0xe7, 0x61, 0x11, 0x2b, 0x58, 0x83, 0xc3,
	0x96, 0x7b, 0xed, 0xd9, 0x2d, 0x5f, 0x57, 0xf3, 0xc0, 0xbf, 0xed, 0xf9, 0x7e, 0x87, 0xe8, 0x25,
	0x67, 0x00, 0x17, 0x31, 0x95, 0xc7, 0xcb, 0xf3, 0xb6, 0xd6, 0xc1, 0xd1, 0x57, 0x7e, 0x2d, 0x62,
	0x49, 0x0f, 0xdd, 0x1d, 0x08, 0x11, 0xde, 0xfd, 0x09, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x21, 0x03,
	0x61, 0x84, 0x05, 0x00, 0x00,
}
   07070100000100000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004500000000cilium-proxy-20200109/go/envoy/config/filter/network/zookeeper_proxy  07070100000101000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004E00000000cilium-proxy-20200109/go/envoy/config/filter/network/zookeeper_proxy/v1alpha1 07070100000102000081A4000003E800000064000000015E17A24700001602000000000000000000000000000000000000006400000000cilium-proxy-20200109/go/envoy/config/filter/network/zookeeper_proxy/v1alpha1/zookeeper_proxy.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/network/zookeeper_proxy/v1alpha1/zookeeper_proxy.proto

package envoy_config_filter_network_zookeeper_proxy_v1alpha1

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#protodoc-title: ZooKeeper proxy]
// ZooKeeper Proxy :ref:`configuration overview <config_network_filters_zookeeper_proxy>`.
type ZooKeeperProxy struct {
	// The human readable prefix to use when emitting :ref:`statistics
	// <config_network_filters_zookeeper_proxy_stats>`.
	StatPrefix string `protobuf:"bytes,1,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"`
	// [#not-implemented-hide:] The optional path to use for writing ZooKeeper access logs.
	// If the access log field is empty, access logs will not be written.
	AccessLog string `protobuf:"bytes,2,opt,name=access_log,json=accessLog,proto3" json:"access_log,omitempty"`
	// Messages — requests, responses and events — that are bigger than this value will
	// be ignored. If it is not set, the default value is 1Mb.
	//
	// The value here should match the jute.maxbuffer property in your cluster configuration:
	//
	// https://zookeeper.apache.org/doc/r3.4.10/zookeeperAdmin.html#Unsafe+Options
	//
	// if that is set. If it isn't, ZooKeeper's default is also 1Mb.
	MaxPacketBytes       *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=max_packet_bytes,json=maxPacketBytes,proto3" json:"max_packet_bytes,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *ZooKeeperProxy) Reset()         { *m = ZooKeeperProxy{} }
func (m *ZooKeeperProxy) String() string { return proto.CompactTextString(m) }
func (*ZooKeeperProxy) ProtoMessage()    {}
func (*ZooKeeperProxy) Descriptor() ([]byte, []int) {
	return fileDescriptor_05247350458709ad, []int{0}
}

func (m *ZooKeeperProxy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ZooKeeperProxy.Unmarshal(m, b)
}
func (m *ZooKeeperProxy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ZooKeeperProxy.Marshal(b, m, deterministic)
}
func (m *ZooKeeperProxy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ZooKeeperProxy.Merge(m, src)
}
func (m *ZooKeeperProxy) XXX_Size() int {
	return xxx_messageInfo_ZooKeeperProxy.Size(m)
}
func (m *ZooKeeperProxy) XXX_DiscardUnknown() {
	xxx_messageInfo_ZooKeeperProxy.DiscardUnknown(m)
}

var xxx_messageInfo_ZooKeeperProxy proto.InternalMessageInfo

func (m *ZooKeeperProxy) GetStatPrefix() string {
	if m != nil {
		return m.StatPrefix
	}
	return ""
}

func (m *ZooKeeperProxy) GetAccessLog() string {
	if m != nil {
		return m.AccessLog
	}
	return ""
}

func (m *ZooKeeperProxy) GetMaxPacketBytes() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxPacketBytes
	}
	return nil
}

func init() {
	proto.RegisterType((*ZooKeeperProxy)(nil), "envoy.config.filter.network.zookeeper_proxy.v1alpha1.ZooKeeperProxy")
}

func init() {
	proto.RegisterFile("envoy/config/filter/network/zookeeper_proxy/v1alpha1/zookeeper_proxy.proto", fileDescriptor_05247350458709ad)
}

var fileDescriptor_05247350458709ad = []byte{
	// 294 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x90, 0xbd, 0x4e, 0xc3, 0x30,
	0x14, 0x85, 0xe5, 0x82, 0x40, 0x75, 0xa5, 0x0a, 0x85, 0x81, 0xaa, 0x02, 0x54, 0x31, 0x75, 0xb2,
	0xd5, 0x96, 0x27, 0xf0, 0x80, 0xc4, 0xcf, 0x10, 0x45, 0x82, 0xa1, 0x0c, 0x91, 0x13, 0x6e, 0x42,
	0x14, 0x37, 0xd7, 0x72, 0xdc, 0x34, 0xe1, 0x6d, 0x78, 0x4d, 0x26, 0x14, 0x9b, 0x2c, 0x1d, 0xd9,
	0x12, 0x7f, 0x3e, 0x9f, 0xcf, 0xbd, 0xf4, 0x09, 0xaa, 0x06, 0x3b, 0x9e, 0x62, 0x95, 0x15, 0x39,
	0xcf, 0x0a, 0x65, 0xc1, 0xf0, 0x0a, 0xec, 0x01, 0x4d, 0xc9, 0xbf, 0x10, 0x4b, 0x00, 0x0d, 0x26,
	0xd6, 0x06, 0xdb, 0x8e, 0x37, 0x2b, 0xa9, 0xf4, 0xa7, 0x5c, 0x1d, 0x03, 0xa6, 0x0d, 0x5a, 0x0c,
	0xee, 0x9d, 0x8b, 0x79, 0x17, 0xf3, 0x2e, 0xf6, 0xe7, 0x62, 0xc7, 0x91, 0xc1, 0x35, 0xbf, 0x6a,
	0xa4, 0x2a, 0x3e, 0xa4, 0x05, 0x3e, 0x7c, 0x78, 0xdd, 0xfc, 0x36, 0x47, 0xcc, 0x15, 0x70, 0xf7,
	0x97, 0xec, 0x33, 0x7e, 0x30, 0x52, 0x6b, 0x30, 0xb5, 0xe7, 0x77, 0xdf, 0x84, 0x4e, 0xb7, 0x88,
	0xcf, 0xce, 0x1a, 0xf6, 0xd2, 0x60, 0x49, 0x27, 0xb5, 0x95, 0x36, 0xd6, 0x06, 0xb2, 0xa2, 0x9d,
	0x91, 0x05, 0x59, 0x8e, 0xc5, 0xf9, 0x8f, 0x38, 0x35, 0xa3, 0x05, 0x89, 0x68, 0xcf, 0x42, 0x87,
	0x82, 0x1b, 0x4a, 0x65, 0x9a, 0x42, 0x5d, 0xc7, 0x0a, 0xf3, 0xd9, 0xa8, 0xbf, 0x18, 0x8d, 0xfd,
	0xc9, 0x0b, 0xe6, 0xc1, 0x03, 0xbd, 0xd8, 0xc9, 0x36, 0xd6, 0x32, 0x2d, 0xc1, 0xc6, 0x49, 0x67,
	0xa1, 0x9e, 0x9d, 0x2c, 0xc8, 0x72, 0xb2, 0xbe, 0x66, 0xbe, 0x16, 0x1b, 0x6a, 0xb1, 0xd7, 0xc7,
	0xca, 0x6e, 0xd6, 0x6f, 0x52, 0xed, 0x21, 0x9a, 0xee, 0x64, 0x1b, 0xba, 0x90, 0xe8, 0x33, 0xe2,
	0x9d, 0x8a, 0x02, 0x99, 0xdb, 0x8b, 0x1f, 0xfb, 0x3f, 0x2b, 0x12, 0x97, 0xdb, 0x81, 0xb8, 0x31,
	0xc3, 0xfe, 0xe5, 0x90, 0x24, 0x67, 0xae, 0xc2, 0xe6, 0x37, 0x00, 0x00, 0xff, 0xff, 0x18, 0x47,
	0x70, 0x65, 0xc4, 0x01, 0x00, 0x00,
}
  07070100000103000041ED000003E800000064000000045E17A24700000000000000000000000000000000000000000000003400000000cilium-proxy-20200109/go/envoy/config/filter/thrift   07070100000104000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003F00000000cilium-proxy-20200109/go/envoy/config/filter/thrift/rate_limit    07070100000105000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004800000000cilium-proxy-20200109/go/envoy/config/filter/thrift/rate_limit/v2alpha1   07070100000106000081A4000003E800000064000000015E17A24700001996000000000000000000000000000000000000005900000000cilium-proxy-20200109/go/envoy/config/filter/thrift/rate_limit/v2alpha1/rate_limit.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/thrift/rate_limit/v2alpha1/rate_limit.proto

package envoy_config_filter_thrift_rate_limit_v2alpha1

import (
	fmt "fmt"
	v2 "github.com/cilium/proxy/go/envoy/config/ratelimit/v2"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#next-free-field: 6]
type RateLimit struct {
	// The rate limit domain to use in the rate limit service request.
	Domain string `protobuf:"bytes,1,opt,name=domain,proto3" json:"domain,omitempty"`
	// Specifies the rate limit configuration stage. Each configured rate limit filter performs a
	// rate limit check using descriptors configured in the
	// :ref:`envoy_api_msg_config.filter.network.thrift_proxy.v2alpha1.RouteAction` for the request.
	// Only those entries with a matching stage number are used for a given filter. If not set, the
	// default stage number is 0.
	//
	// .. note::
	//
	//  The filter supports a range of 0 - 10 inclusively for stage numbers.
	Stage uint32 `protobuf:"varint,2,opt,name=stage,proto3" json:"stage,omitempty"`
	// The timeout in milliseconds for the rate limit service RPC. If not
	// set, this defaults to 20ms.
	Timeout *duration.Duration `protobuf:"bytes,3,opt,name=timeout,proto3" json:"timeout,omitempty"`
	// The filter's behaviour in case the rate limiting service does
	// not respond back. When it is set to true, Envoy will not allow traffic in case of
	// communication failure between rate limiting service and the proxy.
	// Defaults to false.
	FailureModeDeny bool `protobuf:"varint,4,opt,name=failure_mode_deny,json=failureModeDeny,proto3" json:"failure_mode_deny,omitempty"`
	// Configuration for an external rate limit service provider. If not
	// specified, any calls to the rate limit service will immediately return
	// success.
	RateLimitService     *v2.RateLimitServiceConfig `protobuf:"bytes,5,opt,name=rate_limit_service,json=rateLimitService,proto3" json:"rate_limit_service,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
	XXX_unrecognized     []byte                     `json:"-"`
	XXX_sizecache        int32                      `json:"-"`
}

func (m *RateLimit) Reset()         { *m = RateLimit{} }
func (m *RateLimit) String() string { return proto.CompactTextString(m) }
func (*RateLimit) ProtoMessage()    {}
func (*RateLimit) Descriptor() ([]byte, []int) {
	return fileDescriptor_961acdee13c1bd42, []int{0}
}

func (m *RateLimit) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimit.Unmarshal(m, b)
}
func (m *RateLimit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimit.Marshal(b, m, deterministic)
}
func (m *RateLimit) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimit.Merge(m, src)
}
func (m *RateLimit) XXX_Size() int {
	return xxx_messageInfo_RateLimit.Size(m)
}
func (m *RateLimit) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimit.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimit proto.InternalMessageInfo

func (m *RateLimit) GetDomain() string {
	if m != nil {
		return m.Domain
	}
	return ""
}

func (m *RateLimit) GetStage() uint32 {
	if m != nil {
		return m.Stage
	}
	return 0
}

func (m *RateLimit) GetTimeout() *duration.Duration {
	if m != nil {
		return m.Timeout
	}
	return nil
}

func (m *RateLimit) GetFailureModeDeny() bool {
	if m != nil {
		return m.FailureModeDeny
	}
	return false
}

func (m *RateLimit) GetRateLimitService() *v2.RateLimitServiceConfig {
	if m != nil {
		return m.RateLimitService
	}
	return nil
}

func init() {
	proto.RegisterType((*RateLimit)(nil), "envoy.config.filter.thrift.rate_limit.v2alpha1.RateLimit")
}

func init() {
	proto.RegisterFile("envoy/config/filter/thrift/rate_limit/v2alpha1/rate_limit.proto", fileDescriptor_961acdee13c1bd42)
}

var fileDescriptor_961acdee13c1bd42 = []byte{
	// 348 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x91, 0xcf, 0x4e, 0xab, 0x40,
	0x14, 0xc6, 0x33, 0xdc, 0xfe, 0x9d, 0x9b, 0x7b, 0xad, 0xb3, 0x11, 0x9b, 0xa8, 0x44, 0x37, 0xa4,
	0x8b, 0x99, 0xb4, 0xdd, 0x9a, 0x98, 0x60, 0x97, 0x9a, 0x34, 0xf8, 0x00, 0x64, 0x5a, 0x0e, 0x74,
	0x92, 0x81, 0x69, 0xa6, 0x03, 0x91, 0x57, 0xf0, 0x05, 0x7c, 0xd7, 0xae, 0x4c, 0x19, 0xa8, 0xad,
	0x3b, 0x77, 0x70, 0xbe, 0x8f, 0xdf, 0x77, 0xce, 0x07, 0x7e, 0x82, 0xbc, 0x54, 0x15, 0x5b, 0xab,
	0x3c, 0x11, 0x29, 0x4b, 0x84, 0x34, 0xa0, 0x99, 0xd9, 0x68, 0x91, 0x18, 0xa6, 0xb9, 0x81, 0x48,
	0x8a, 0x4c, 0x18, 0x56, 0xce, 0xb8, 0xdc, 0x6e, 0xf8, 0xf4, 0x64, 0x46, 0xb7, 0x5a, 0x19, 0x45,
	0x68, 0x0d, 0xa0, 0x16, 0x40, 0x2d, 0x80, 0x5a, 0x00, 0x3d, 0x31, 0xb7, 0x80, 0xf1, 0xc3, 0x59,
	0xe0, 0xc1, 0xd1, 0x26, 0x30, 0x2d, 0x77, 0x16, 0x3a, 0xbe, 0x4d, 0x95, 0x4a, 0x25, 0xb0, 0xfa,
	0x6d, 0x55, 0x24, 0x2c, 0x2e, 0x34, 0x37, 0x42, 0xe5, 0x8d, 0x7e, 0x55, 0x72, 0x29, 0x62, 0x6e,
	0x80, 0xb5, 0x0f, 0x56, 0xb8, 0xff, 0x74, 0xf0, 0x30, 0xe4, 0x06, 0x5e, 0x0e, 0x4c, 0x72, 0x87,
	0x7b, 0xb1, 0xca, 0xb8, 0xc8, 0x5d, 0xe4, 0x21, 0x7f, 0x18, 0xf4, 0xf7, 0x41, 0x47, 0x3b, 0x1e,
	0x0a, 0x9b, 0x31, 0xb9, 0xc1, 0xdd, 0x9d, 0xe1, 0x29, 0xb8, 0x8e, 0x87, 0xfc, 0x7f, 0xb5, 0x3e,
	0x71, 0x5c, 0x1c, 0xda, 0x29, 0x99, 0xe3, 0xbe, 0x11, 0x19, 0xa8, 0xc2, 0xb8, 0x7f, 0x3c, 0xe4,
	0xff, 0x9d, 0x5d, 0x53, 0xbb, 0x18, 0x6d, 0x17, 0xa3, 0x8b, 0x66, 0xb1, 0xb0, 0x75, 0x92, 0x09,
	0xbe, 0x4c, 0xb8, 0x90, 0x85, 0x86, 0x28, 0x53, 0x31, 0x44, 0x31, 0xe4, 0x95, 0xdb, 0xf1, 0x90,
	0x3f, 0x08, 0x2f, 0x1a, 0xe1, 0x55, 0xc5, 0xb0, 0x80, 0xbc, 0x22, 0x02, 0x93, 0xef, 0x8e, 0xa2,
	0x1d, 0xe8, 0x52, 0xac, 0xc1, 0xed, 0xd6, 0x59, 0xd3, 0xf3, 0x66, 0x8f, 0x4d, 0xd1, 0x72, 0x46,
	0x8f, 0x27, 0xbe, 0xd9, 0x4f, 0x9e, 0x6b, 0x4f, 0x30, 0xd8, 0x07, 0xdd, 0x0f, 0xe4, 0x8c, 0x50,
	0x38, 0xd2, 0x3f, 0x1c, 0xc1, 0x12, 0x3f, 0x0a, 0x65, 0x91, 0x5b, 0xad, 0xde, 0xab, 0x5f, 0xfe,
	0xb7, 0xe0, 0xff, 0x31, 0x73, 0x79, 0xb8, 0x7d, 0x89, 0x56, 0xbd, 0xba, 0x84, 0xf9, 0x57, 0x00,
	0x00, 0x00, 0xff, 0xff, 0xdf, 0x5d, 0xa9, 0x2e, 0x43, 0x02, 0x00, 0x00,
}
  07070100000107000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003B00000000cilium-proxy-20200109/go/envoy/config/filter/thrift/router    07070100000108000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004400000000cilium-proxy-20200109/go/envoy/config/filter/thrift/router/v2alpha1   07070100000109000081A4000003E800000064000000015E17A24700000ACC000000000000000000000000000000000000005100000000cilium-proxy-20200109/go/envoy/config/filter/thrift/router/v2alpha1/router.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/filter/thrift/router/v2alpha1/router.proto

package envoy_config_filter_thrift_router_v2alpha1

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type Router struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Router) Reset()         { *m = Router{} }
func (m *Router) String() string { return proto.CompactTextString(m) }
func (*Router) ProtoMessage()    {}
func (*Router) Descriptor() ([]byte, []int) {
	return fileDescriptor_9621417e977323f2, []int{0}
}

func (m *Router) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Router.Unmarshal(m, b)
}
func (m *Router) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Router.Marshal(b, m, deterministic)
}
func (m *Router) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Router.Merge(m, src)
}
func (m *Router) XXX_Size() int {
	return xxx_messageInfo_Router.Size(m)
}
func (m *Router) XXX_DiscardUnknown() {
	xxx_messageInfo_Router.DiscardUnknown(m)
}

var xxx_messageInfo_Router proto.InternalMessageInfo

func init() {
	proto.RegisterType((*Router)(nil), "envoy.config.filter.thrift.router.v2alpha1.Router")
}

func init() {
	proto.RegisterFile("envoy/config/filter/thrift/router/v2alpha1/router.proto", fileDescriptor_9621417e977323f2)
}

var fileDescriptor_9621417e977323f2 = []byte{
	// 130 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4f, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0xcb, 0xcc, 0x29, 0x49, 0x2d, 0xd2,
	0x2f, 0xc9, 0x28, 0xca, 0x4c, 0x2b, 0xd1, 0x2f, 0xca, 0x2f, 0x05, 0xf1, 0xca, 0x8c, 0x12, 0x73,
	0x0a, 0x32, 0x12, 0x0d, 0xa1, 0x7c, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x2d, 0xb0, 0x46,
	0x3d, 0x88, 0x46, 0x3d, 0x88, 0x46, 0x3d, 0x88, 0x46, 0x3d, 0xa8, 0x42, 0x98, 0x46, 0x25, 0x0e,
	0x2e, 0xb6, 0x20, 0xb0, 0x90, 0x93, 0x27, 0x97, 0x45, 0x66, 0xbe, 0x1e, 0x58, 0x6b, 0x41, 0x51,
	0x7e, 0x45, 0xa5, 0x1e, 0xf1, 0xa6, 0x38, 0x71, 0x43, 0xcc, 0x08, 0x00, 0x59, 0x1f, 0xc0, 0x98,
	0xc4, 0x06, 0x76, 0x87, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x72, 0xa0, 0xf4, 0x3d, 0xc2, 0x00,
	0x00, 0x00,
}
0707010000010A000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003600000000cilium-proxy-20200109/go/envoy/config/grpc_credential 0707010000010B000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003E00000000cilium-proxy-20200109/go/envoy/config/grpc_credential/v2alpha 0707010000010C000081A4000003E800000064000000015E17A24700001065000000000000000000000000000000000000004C00000000cilium-proxy-20200109/go/envoy/config/grpc_credential/v2alpha/aws_iam.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/grpc_credential/v2alpha/aws_iam.proto

package envoy_config_grpc_credential_v2alpha

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type AwsIamConfig struct {
	// The `service namespace
	// <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-aws-service-namespaces>`_
	// of the Grpc endpoint.
	//
	// Example: appmesh
	ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"`
	// The `region <https://docs.aws.amazon.com/general/latest/gr/rande.html>`_ hosting the Grpc
	// endpoint. If unspecified, the extension will use the value in the ``AWS_REGION`` environment
	// variable.
	//
	// Example: us-west-2
	Region               string   `protobuf:"bytes,2,opt,name=region,proto3" json:"region,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *AwsIamConfig) Reset()         { *m = AwsIamConfig{} }
func (m *AwsIamConfig) String() string { return proto.CompactTextString(m) }
func (*AwsIamConfig) ProtoMessage()    {}
func (*AwsIamConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_fb99e742622a8430, []int{0}
}

func (m *AwsIamConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AwsIamConfig.Unmarshal(m, b)
}
func (m *AwsIamConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AwsIamConfig.Marshal(b, m, deterministic)
}
func (m *AwsIamConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AwsIamConfig.Merge(m, src)
}
func (m *AwsIamConfig) XXX_Size() int {
	return xxx_messageInfo_AwsIamConfig.Size(m)
}
func (m *AwsIamConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_AwsIamConfig.DiscardUnknown(m)
}

var xxx_messageInfo_AwsIamConfig proto.InternalMessageInfo

func (m *AwsIamConfig) GetServiceName() string {
	if m != nil {
		return m.ServiceName
	}
	return ""
}

func (m *AwsIamConfig) GetRegion() string {
	if m != nil {
		return m.Region
	}
	return ""
}

func init() {
	proto.RegisterType((*AwsIamConfig)(nil), "envoy.config.grpc_credential.v2alpha.AwsIamConfig")
}

func init() {
	proto.RegisterFile("envoy/config/grpc_credential/v2alpha/aws_iam.proto", fileDescriptor_fb99e742622a8430)
}

var fileDescriptor_fb99e742622a8430 = []byte{
	// 204 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0xce, 0xbf, 0x4e, 0x87, 0x30,
	0x10, 0xc0, 0xf1, 0x94, 0x18, 0x8c, 0x85, 0x89, 0x41, 0x89, 0x13, 0x31, 0x0e, 0xc6, 0xa1, 0x4d,
	0xf0, 0x09, 0x2c, 0x93, 0x8b, 0x21, 0xbc, 0x00, 0x39, 0xcb, 0x89, 0x4d, 0xe8, 0x9f, 0x14, 0x52,
	0xe4, 0xd5, 0x9d, 0x0c, 0x05, 0x17, 0xa7, 0xdf, 0xd6, 0xe6, 0xee, 0x7b, 0xf9, 0xd0, 0x1a, 0x4d,
	0xb0, 0x1b, 0x97, 0xd6, 0x7c, 0xaa, 0x91, 0x8f, 0xde, 0xc9, 0x5e, 0x7a, 0x1c, 0xd0, 0x2c, 0x0a,
	0x26, 0x1e, 0x6a, 0x98, 0xdc, 0x17, 0x70, 0x58, 0xe7, 0x5e, 0x81, 0x66, 0xce, 0xdb, 0xc5, 0x16,
	0x8f, 0xb1, 0x61, 0x47, 0xc3, 0xfe, 0x35, 0xec, 0x6c, 0xee, 0xef, 0x02, 0x4c, 0x6a, 0x80, 0x05,
	0xf9, 0xdf, 0xe3, 0xc8, 0x1f, 0x3a, 0x9a, 0xbf, 0xae, 0xf3, 0x1b, 0xe8, 0x26, 0x1e, 0x28, 0x9e,
	0x69, 0x3e, 0xa3, 0x0f, 0x4a, 0x62, 0x6f, 0x40, 0x63, 0x49, 0x2a, 0xf2, 0x74, 0x23, 0xae, 0x7f,
	0xc4, 0x95, 0x4f, 0x2a, 0xd2, 0x65, 0xe7, 0xf0, 0x1d, 0x34, 0x16, 0xb7, 0x34, 0xf5, 0x38, 0x2a,
	0x6b, 0xca, 0x64, 0xdf, 0xea, 0xce, 0x9f, 0x68, 0x68, 0xad, 0x2c, 0x8b, 0x2e, 0xe7, 0xed, 0xf7,
	0xc6, 0x2e, 0x21, 0x8a, 0xec, 0x70, 0xb4, 0x3b, 0xab, 0x25, 0x1f, 0x69, 0xf4, 0xbd, 0xfc, 0x06,
	0x00, 0x00, 0xff, 0xff, 0x3a, 0xda, 0xe6, 0x69, 0x14, 0x01, 0x00, 0x00,
}
   0707010000010D000081A4000003E800000064000000015E17A24700001398000000000000000000000000000000000000005800000000cilium-proxy-20200109/go/envoy/config/grpc_credential/v2alpha/file_based_metadata.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/grpc_credential/v2alpha/file_based_metadata.proto

package envoy_config_grpc_credential_v2alpha

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type FileBasedMetadataConfig struct {
	// Location or inline data of secret to use for authentication of the Google gRPC connection
	// this secret will be attached to a header of the gRPC connection
	SecretData *core.DataSource `protobuf:"bytes,1,opt,name=secret_data,json=secretData,proto3" json:"secret_data,omitempty"`
	// Metadata header key to use for sending the secret data
	// if no header key is set, "authorization" header will be used
	HeaderKey string `protobuf:"bytes,2,opt,name=header_key,json=headerKey,proto3" json:"header_key,omitempty"`
	// Prefix to prepend to the secret in the metadata header
	// if no prefix is set, the default is to use no prefix
	HeaderPrefix         string   `protobuf:"bytes,3,opt,name=header_prefix,json=headerPrefix,proto3" json:"header_prefix,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *FileBasedMetadataConfig) Reset()         { *m = FileBasedMetadataConfig{} }
func (m *FileBasedMetadataConfig) String() string { return proto.CompactTextString(m) }
func (*FileBasedMetadataConfig) ProtoMessage()    {}
func (*FileBasedMetadataConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_0f2b21de9d357383, []int{0}
}

func (m *FileBasedMetadataConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FileBasedMetadataConfig.Unmarshal(m, b)
}
func (m *FileBasedMetadataConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FileBasedMetadataConfig.Marshal(b, m, deterministic)
}
func (m *FileBasedMetadataConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FileBasedMetadataConfig.Merge(m, src)
}
func (m *FileBasedMetadataConfig) XXX_Size() int {
	return xxx_messageInfo_FileBasedMetadataConfig.Size(m)
}
func (m *FileBasedMetadataConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_FileBasedMetadataConfig.DiscardUnknown(m)
}

var xxx_messageInfo_FileBasedMetadataConfig proto.InternalMessageInfo

func (m *FileBasedMetadataConfig) GetSecretData() *core.DataSource {
	if m != nil {
		return m.SecretData
	}
	return nil
}

func (m *FileBasedMetadataConfig) GetHeaderKey() string {
	if m != nil {
		return m.HeaderKey
	}
	return ""
}

func (m *FileBasedMetadataConfig) GetHeaderPrefix() string {
	if m != nil {
		return m.HeaderPrefix
	}
	return ""
}

func init() {
	proto.RegisterType((*FileBasedMetadataConfig)(nil), "envoy.config.grpc_credential.v2alpha.FileBasedMetadataConfig")
}

func init() {
	proto.RegisterFile("envoy/config/grpc_credential/v2alpha/file_based_metadata.proto", fileDescriptor_0f2b21de9d357383)
}

var fileDescriptor_0f2b21de9d357383 = []byte{
	// 255 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x8f, 0xc1, 0x4a, 0x03, 0x31,
	0x10, 0x86, 0x89, 0x82, 0xd0, 0x54, 0x2f, 0x7b, 0xd0, 0x45, 0x2c, 0x14, 0xf5, 0xd0, 0x53, 0x02,
	0xf1, 0xde, 0xc3, 0x2a, 0x5e, 0x44, 0x59, 0xea, 0x03, 0x84, 0x69, 0x76, 0xb6, 0x0d, 0xae, 0x9b,
	0x30, 0x8d, 0x4b, 0xf7, 0x61, 0x7c, 0x57, 0x49, 0xb2, 0x27, 0xbd, 0x78, 0xfd, 0x67, 0xbe, 0xef,
	0xe7, 0xe7, 0x6b, 0xec, 0x07, 0x37, 0x4a, 0xe3, 0xfa, 0xd6, 0xee, 0xe4, 0x8e, 0xbc, 0xd1, 0x86,
	0xb0, 0xc1, 0x3e, 0x58, 0xe8, 0xe4, 0xa0, 0xa0, 0xf3, 0x7b, 0x90, 0xad, 0xed, 0x50, 0x6f, 0xe1,
	0x80, 0x8d, 0xfe, 0xc4, 0x00, 0x0d, 0x04, 0x10, 0x9e, 0x5c, 0x70, 0xc5, 0x7d, 0xe2, 0x45, 0xe6,
	0xc5, 0x2f, 0x5e, 0x4c, 0xfc, 0xf5, 0x4d, 0x6e, 0x01, 0x6f, 0xe5, 0xa0, 0xa4, 0x71, 0x84, 0x32,
	0xda, 0xb2, 0xe3, 0xf6, 0x9b, 0xf1, 0xab, 0x67, 0xdb, 0x61, 0x15, 0x0b, 0x5e, 0x27, 0xff, 0x63,
	0x32, 0x16, 0x6b, 0x3e, 0x3f, 0xa0, 0x21, 0x0c, 0x3a, 0x86, 0x25, 0x5b, 0xb2, 0xd5, 0x5c, 0x2d,
	0x44, 0x6e, 0x05, 0x6f, 0xc5, 0xa0, 0x44, 0xf4, 0x89, 0x27, 0x08, 0xf0, 0xee, 0xbe, 0xc8, 0xe0,
	0x86, 0x67, 0x22, 0x26, 0xc5, 0x82, 0xf3, 0x3d, 0x42, 0x83, 0xa4, 0x3f, 0x70, 0x2c, 0x4f, 0x96,
	0x6c, 0x35, 0xdb, 0xcc, 0x72, 0xf2, 0x82, 0x63, 0x71, 0xc7, 0x2f, 0xa6, 0xb3, 0x27, 0x6c, 0xed,
	0xb1, 0x3c, 0x4d, 0x1f, 0xe7, 0x39, 0xac, 0x53, 0x56, 0xbd, 0x71, 0x65, 0x5d, 0xae, 0xf4, 0xe4,
	0x8e, 0xa3, 0xf8, 0xcf, 0xe6, 0xea, 0xf2, 0xcf, 0xa4, 0x3a, 0xae, 0xad, 0xd9, 0xf6, 0x2c, 0xcd,
	0x7e, 0xf8, 0x09, 0x00, 0x00, 0xff, 0xff, 0x37, 0xa8, 0x3d, 0xb3, 0x7c, 0x01, 0x00, 0x00,
}
0707010000010E000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003500000000cilium-proxy-20200109/go/envoy/config/health_checker  0707010000010F000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003B00000000cilium-proxy-20200109/go/envoy/config/health_checker/redis    07070100000110000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003E00000000cilium-proxy-20200109/go/envoy/config/health_checker/redis/v2 07070100000111000081A4000003E800000064000000015E17A24700000CEE000000000000000000000000000000000000004A00000000cilium-proxy-20200109/go/envoy/config/health_checker/redis/v2/redis.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/health_checker/redis/v2/redis.proto

package envoy_config_health_checker_redis_v2

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type Redis struct {
	// If set, optionally perform ``EXISTS <key>`` instead of ``PING``. A return value
	// from Redis of 0 (does not exist) is considered a passing healthcheck. A return value other
	// than 0 is considered a failure. This allows the user to mark a Redis instance for maintenance
	// by setting the specified key to any value and waiting for traffic to drain.
	Key                  string   `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Redis) Reset()         { *m = Redis{} }
func (m *Redis) String() string { return proto.CompactTextString(m) }
func (*Redis) ProtoMessage()    {}
func (*Redis) Descriptor() ([]byte, []int) {
	return fileDescriptor_055a998fcb839d64, []int{0}
}

func (m *Redis) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Redis.Unmarshal(m, b)
}
func (m *Redis) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Redis.Marshal(b, m, deterministic)
}
func (m *Redis) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Redis.Merge(m, src)
}
func (m *Redis) XXX_Size() int {
	return xxx_messageInfo_Redis.Size(m)
}
func (m *Redis) XXX_DiscardUnknown() {
	xxx_messageInfo_Redis.DiscardUnknown(m)
}

var xxx_messageInfo_Redis proto.InternalMessageInfo

func (m *Redis) GetKey() string {
	if m != nil {
		return m.Key
	}
	return ""
}

func init() {
	proto.RegisterType((*Redis)(nil), "envoy.config.health_checker.redis.v2.Redis")
}

func init() {
	proto.RegisterFile("envoy/config/health_checker/redis/v2/redis.proto", fileDescriptor_055a998fcb839d64)
}

var fileDescriptor_055a998fcb839d64 = []byte{
	// 140 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x48, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0xcf, 0x48, 0x4d, 0xcc, 0x29, 0xc9, 0x88,
	0x4f, 0xce, 0x48, 0x4d, 0xce, 0x4e, 0x2d, 0xd2, 0x2f, 0x4a, 0x4d, 0xc9, 0x2c, 0xd6, 0x2f, 0x33,
	0x82, 0x30, 0xf4, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0x54, 0xc0, 0x3a, 0xf4, 0x20, 0x3a, 0xf4,
	0x50, 0x75, 0xe8, 0x41, 0x14, 0x96, 0x19, 0x29, 0x49, 0x72, 0xb1, 0x06, 0x81, 0xd8, 0x42, 0x02,
	0x5c, 0xcc, 0xd9, 0xa9, 0x95, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x20, 0xa6, 0x93, 0x13,
	0x97, 0x51, 0x66, 0xbe, 0x1e, 0xd8, 0x94, 0x82, 0xa2, 0xfc, 0x8a, 0x4a, 0x3d, 0x62, 0x0c, 0x74,
	0xe2, 0x02, 0x1b, 0x17, 0x00, 0x72, 0x42, 0x00, 0x63, 0x12, 0x1b, 0xd8, 0x2d, 0xc6, 0x80, 0x00,
	0x00, 0x00, 0xff, 0xff, 0xff, 0x59, 0x26, 0xf5, 0xbf, 0x00, 0x00, 0x00,
}
  07070100000112000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000002F00000000cilium-proxy-20200109/go/envoy/config/listener    07070100000113000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003200000000cilium-proxy-20200109/go/envoy/config/listener/v2 07070100000114000081A4000003E800000064000000015E17A2470000101E000000000000000000000000000000000000004500000000cilium-proxy-20200109/go/envoy/config/listener/v2/api_listener.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/listener/v2/api_listener.proto

package envoy_config_listener_v2

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#not-implemented-hide:]
// Describes a type of API listener, which is used in non-proxy clients. The type of API
// exposed to the non-proxy application depends on the type of API listener.
type ApiListener struct {
	// The type in this field determines the type of API listener. At present, the following
	// types are supported:
	//   envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager (HTTP)
	// [#next-major-version: In the v3 API, replace this Any field with a oneof containing the
	// specific config message for each type of API listener. We could not do this in v2 because
	// it would have caused circular dependencies for go protos: lds.proto depends on this file,
	// and http_connection_manager.proto depends on rds.proto, which is in the same directory as
	// lds.proto, so lds.proto cannot depend on this file.]
	ApiListener          *any.Any `protobuf:"bytes,1,opt,name=api_listener,json=apiListener,proto3" json:"api_listener,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ApiListener) Reset()         { *m = ApiListener{} }
func (m *ApiListener) String() string { return proto.CompactTextString(m) }
func (*ApiListener) ProtoMessage()    {}
func (*ApiListener) Descriptor() ([]byte, []int) {
	return fileDescriptor_c474ffebb332e36e, []int{0}
}

func (m *ApiListener) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ApiListener.Unmarshal(m, b)
}
func (m *ApiListener) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ApiListener.Marshal(b, m, deterministic)
}
func (m *ApiListener) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ApiListener.Merge(m, src)
}
func (m *ApiListener) XXX_Size() int {
	return xxx_messageInfo_ApiListener.Size(m)
}
func (m *ApiListener) XXX_DiscardUnknown() {
	xxx_messageInfo_ApiListener.DiscardUnknown(m)
}

var xxx_messageInfo_ApiListener proto.InternalMessageInfo

func (m *ApiListener) GetApiListener() *any.Any {
	if m != nil {
		return m.ApiListener
	}
	return nil
}

func init() {
	proto.RegisterType((*ApiListener)(nil), "envoy.config.listener.v2.ApiListener")
}

func init() {
	proto.RegisterFile("envoy/config/listener/v2/api_listener.proto", fileDescriptor_c474ffebb332e36e)
}

var fileDescriptor_c474ffebb332e36e = []byte{
	// 166 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4e, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0xcf, 0xc9, 0x2c, 0x2e, 0x49, 0xcd, 0x4b,
	0x2d, 0xd2, 0x2f, 0x33, 0xd2, 0x4f, 0x2c, 0xc8, 0x8c, 0x87, 0xf1, 0xf5, 0x0a, 0x8a, 0xf2, 0x4b,
	0xf2, 0x85, 0x24, 0xc0, 0x8a, 0xf5, 0x20, 0x8a, 0xf5, 0xe0, 0x92, 0x65, 0x46, 0x52, 0x92, 0xe9,
	0xf9, 0xf9, 0xe9, 0x39, 0xa9, 0xfa, 0x60, 0x75, 0x49, 0xa5, 0x69, 0xfa, 0x89, 0x79, 0x95, 0x10,
	0x4d, 0x4a, 0x6e, 0x5c, 0xdc, 0x8e, 0x05, 0x99, 0x3e, 0x50, 0xc5, 0x42, 0xe6, 0x5c, 0x3c, 0xc8,
	0x26, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x1b, 0x89, 0xe8, 0x41, 0x0c, 0xd0, 0x83, 0x19, 0xa0,
	0xe7, 0x98, 0x57, 0x19, 0xc4, 0x9d, 0x88, 0xd0, 0xe8, 0x64, 0xc3, 0xa5, 0x96, 0x99, 0xaf, 0x07,
	0x76, 0x41, 0x41, 0x51, 0x7e, 0x45, 0xa5, 0x1e, 0x2e, 0xc7, 0x38, 0x09, 0x20, 0xd9, 0x17, 0x00,
	0x32, 0x2f, 0x80, 0x31, 0x89, 0x0d, 0x6c, 0xb0, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x1c, 0x22,
	0xb8, 0x88, 0xf0, 0x00, 0x00, 0x00,
}
  07070100000115000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000002E00000000cilium-proxy-20200109/go/envoy/config/metrics 07070100000116000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003100000000cilium-proxy-20200109/go/envoy/config/metrics/v2  07070100000117000081A4000003E800000064000000015E17A24700000FFA000000000000000000000000000000000000004700000000cilium-proxy-20200109/go/envoy/config/metrics/v2/metrics_service.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/metrics/v2/metrics_service.proto

package envoy_config_metrics_v2

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Metrics Service is configured as a built-in *envoy.metrics_service* :ref:`StatsSink
// <envoy_api_msg_config.metrics.v2.StatsSink>`. This opaque configuration will be used to create
// Metrics Service.
type MetricsServiceConfig struct {
	// The upstream gRPC cluster that hosts the metrics service.
	GrpcService          *core.GrpcService `protobuf:"bytes,1,opt,name=grpc_service,json=grpcService,proto3" json:"grpc_service,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *MetricsServiceConfig) Reset()         { *m = MetricsServiceConfig{} }
func (m *MetricsServiceConfig) String() string { return proto.CompactTextString(m) }
func (*MetricsServiceConfig) ProtoMessage()    {}
func (*MetricsServiceConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_81ac893a597f6d53, []int{0}
}

func (m *MetricsServiceConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MetricsServiceConfig.Unmarshal(m, b)
}
func (m *MetricsServiceConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MetricsServiceConfig.Marshal(b, m, deterministic)
}
func (m *MetricsServiceConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MetricsServiceConfig.Merge(m, src)
}
func (m *MetricsServiceConfig) XXX_Size() int {
	return xxx_messageInfo_MetricsServiceConfig.Size(m)
}
func (m *MetricsServiceConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_MetricsServiceConfig.DiscardUnknown(m)
}

var xxx_messageInfo_MetricsServiceConfig proto.InternalMessageInfo

func (m *MetricsServiceConfig) GetGrpcService() *core.GrpcService {
	if m != nil {
		return m.GrpcService
	}
	return nil
}

func init() {
	proto.RegisterType((*MetricsServiceConfig)(nil), "envoy.config.metrics.v2.MetricsServiceConfig")
}

func init() {
	proto.RegisterFile("envoy/config/metrics/v2/metrics_service.proto", fileDescriptor_81ac893a597f6d53)
}

var fileDescriptor_81ac893a597f6d53 = []byte{
	// 205 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4d, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0xcf, 0x4d, 0x2d, 0x29, 0xca, 0x4c, 0x2e,
	0xd6, 0x2f, 0x33, 0x82, 0x31, 0xe3, 0x8b, 0x53, 0x8b, 0xca, 0x32, 0x93, 0x53, 0xf5, 0x0a, 0x8a,
	0xf2, 0x4b, 0xf2, 0x85, 0xc4, 0xc1, 0xca, 0xf5, 0x20, 0xca, 0xf5, 0xa0, 0x6a, 0xf4, 0xca, 0x8c,
	0xa4, 0x54, 0x20, 0xe6, 0x24, 0x16, 0x64, 0x82, 0x34, 0x27, 0xe7, 0x17, 0xa5, 0xea, 0xa7, 0x17,
	0x15, 0x24, 0xa3, 0x6a, 0x97, 0x12, 0x2f, 0x4b, 0xcc, 0xc9, 0x4c, 0x49, 0x2c, 0x49, 0xd5, 0x87,
	0x31, 0x20, 0x12, 0x4a, 0xc9, 0x5c, 0x22, 0xbe, 0x10, 0xc3, 0x82, 0x21, 0x1a, 0x9c, 0xc1, 0x36,
	0x08, 0x79, 0x73, 0xf1, 0x20, 0x1b, 0x23, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x6d, 0x24, 0xa7, 0x07,
	0x71, 0x46, 0x62, 0x41, 0xa6, 0x5e, 0x99, 0x91, 0x1e, 0xc8, 0x36, 0x3d, 0xf7, 0xa2, 0x82, 0x64,
	0xa8, 0x5e, 0x27, 0x8e, 0x5f, 0x4e, 0xac, 0x5d, 0x8c, 0x4c, 0x02, 0x8c, 0x41, 0xdc, 0xe9, 0x48,
	0xc2, 0x76, 0x5c, 0xaa, 0x99, 0xf9, 0x10, 0xad, 0x05, 0x45, 0xf9, 0x15, 0x95, 0x7a, 0x38, 0x3c,
	0xe3, 0x24, 0x8c, 0xea, 0x96, 0x00, 0x90, 0x13, 0x03, 0x18, 0x93, 0xd8, 0xc0, 0x6e, 0x35, 0x06,
	0x04, 0x00, 0x00, 0xff, 0xff, 0xd7, 0x82, 0xce, 0xf6, 0x34, 0x01, 0x00, 0x00,
}
  07070100000118000081A4000003E800000064000000015E17A247000068FE000000000000000000000000000000000000003D00000000cilium-proxy-20200109/go/envoy/config/metrics/v2/stats.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/metrics/v2/stats.proto

package envoy_config_metrics_v2

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	matcher "github.com/cilium/proxy/go/envoy/type/matcher"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	_struct "github.com/golang/protobuf/ptypes/struct"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Configuration for pluggable stats sinks.
type StatsSink struct {
	// The name of the stats sink to instantiate. The name must match a supported
	// stats sink. The built-in stats sinks are:
	//
	// * :ref:`envoy.statsd <envoy_api_msg_config.metrics.v2.StatsdSink>`
	// * :ref:`envoy.dog_statsd <envoy_api_msg_config.metrics.v2.DogStatsdSink>`
	// * :ref:`envoy.metrics_service <envoy_api_msg_config.metrics.v2.MetricsServiceConfig>`
	// * :ref:`envoy.stat_sinks.hystrix <envoy_api_msg_config.metrics.v2.HystrixSink>`
	//
	// Sinks optionally support tagged/multiple dimensional metrics.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Stats sink specific configuration which depends on the sink being instantiated. See
	// :ref:`StatsdSink <envoy_api_msg_config.metrics.v2.StatsdSink>` for an example.
	//
	// Types that are valid to be assigned to ConfigType:
	//	*StatsSink_Config
	//	*StatsSink_TypedConfig
	ConfigType           isStatsSink_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *StatsSink) Reset()         { *m = StatsSink{} }
func (m *StatsSink) String() string { return proto.CompactTextString(m) }
func (*StatsSink) ProtoMessage()    {}
func (*StatsSink) Descriptor() ([]byte, []int) {
	return fileDescriptor_51e6d6532209c486, []int{0}
}

func (m *StatsSink) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StatsSink.Unmarshal(m, b)
}
func (m *StatsSink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StatsSink.Marshal(b, m, deterministic)
}
func (m *StatsSink) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StatsSink.Merge(m, src)
}
func (m *StatsSink) XXX_Size() int {
	return xxx_messageInfo_StatsSink.Size(m)
}
func (m *StatsSink) XXX_DiscardUnknown() {
	xxx_messageInfo_StatsSink.DiscardUnknown(m)
}

var xxx_messageInfo_StatsSink proto.InternalMessageInfo

func (m *StatsSink) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isStatsSink_ConfigType interface {
	isStatsSink_ConfigType()
}

type StatsSink_Config struct {
	Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"`
}

type StatsSink_TypedConfig struct {
	TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*StatsSink_Config) isStatsSink_ConfigType() {}

func (*StatsSink_TypedConfig) isStatsSink_ConfigType() {}

func (m *StatsSink) GetConfigType() isStatsSink_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

// Deprecated: Do not use.
func (m *StatsSink) GetConfig() *_struct.Struct {
	if x, ok := m.GetConfigType().(*StatsSink_Config); ok {
		return x.Config
	}
	return nil
}

func (m *StatsSink) GetTypedConfig() *any.Any {
	if x, ok := m.GetConfigType().(*StatsSink_TypedConfig); ok {
		return x.TypedConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*StatsSink) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*StatsSink_Config)(nil),
		(*StatsSink_TypedConfig)(nil),
	}
}

// Statistics configuration such as tagging.
type StatsConfig struct {
	// Each stat name is iteratively processed through these tag specifiers.
	// When a tag is matched, the first capture group is removed from the name so
	// later :ref:`TagSpecifiers <envoy_api_msg_config.metrics.v2.TagSpecifier>` cannot match that
	// same portion of the match.
	StatsTags []*TagSpecifier `protobuf:"bytes,1,rep,name=stats_tags,json=statsTags,proto3" json:"stats_tags,omitempty"`
	// Use all default tag regexes specified in Envoy. These can be combined with
	// custom tags specified in :ref:`stats_tags
	// <envoy_api_field_config.metrics.v2.StatsConfig.stats_tags>`. They will be processed before
	// the custom tags.
	//
	// .. note::
	//
	//   If any default tags are specified twice, the config will be considered
	//   invalid.
	//
	// See :repo:`well_known_names.h <source/common/config/well_known_names.h>` for a list of the
	// default tags in Envoy.
	//
	// If not provided, the value is assumed to be true.
	UseAllDefaultTags *wrappers.BoolValue `protobuf:"bytes,2,opt,name=use_all_default_tags,json=useAllDefaultTags,proto3" json:"use_all_default_tags,omitempty"`
	// Inclusion/exclusion matcher for stat name creation. If not provided, all stats are instantiated
	// as normal. Preventing the instantiation of certain families of stats can improve memory
	// performance for Envoys running especially large configs.
	StatsMatcher         *StatsMatcher `protobuf:"bytes,3,opt,name=stats_matcher,json=statsMatcher,proto3" json:"stats_matcher,omitempty"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

func (m *StatsConfig) Reset()         { *m = StatsConfig{} }
func (m *StatsConfig) String() string { return proto.CompactTextString(m) }
func (*StatsConfig) ProtoMessage()    {}
func (*StatsConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_51e6d6532209c486, []int{1}
}

func (m *StatsConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StatsConfig.Unmarshal(m, b)
}
func (m *StatsConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StatsConfig.Marshal(b, m, deterministic)
}
func (m *StatsConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StatsConfig.Merge(m, src)
}
func (m *StatsConfig) XXX_Size() int {
	return xxx_messageInfo_StatsConfig.Size(m)
}
func (m *StatsConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_StatsConfig.DiscardUnknown(m)
}

var xxx_messageInfo_StatsConfig proto.InternalMessageInfo

func (m *StatsConfig) GetStatsTags() []*TagSpecifier {
	if m != nil {
		return m.StatsTags
	}
	return nil
}

func (m *StatsConfig) GetUseAllDefaultTags() *wrappers.BoolValue {
	if m != nil {
		return m.UseAllDefaultTags
	}
	return nil
}

func (m *StatsConfig) GetStatsMatcher() *StatsMatcher {
	if m != nil {
		return m.StatsMatcher
	}
	return nil
}

// Configuration for disabling stat instantiation.
type StatsMatcher struct {
	// Types that are valid to be assigned to StatsMatcher:
	//	*StatsMatcher_RejectAll
	//	*StatsMatcher_ExclusionList
	//	*StatsMatcher_InclusionList
	StatsMatcher         isStatsMatcher_StatsMatcher `protobuf_oneof:"stats_matcher"`
	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
	XXX_unrecognized     []byte                      `json:"-"`
	XXX_sizecache        int32                       `json:"-"`
}

func (m *StatsMatcher) Reset()         { *m = StatsMatcher{} }
func (m *StatsMatcher) String() string { return proto.CompactTextString(m) }
func (*StatsMatcher) ProtoMessage()    {}
func (*StatsMatcher) Descriptor() ([]byte, []int) {
	return fileDescriptor_51e6d6532209c486, []int{2}
}

func (m *StatsMatcher) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StatsMatcher.Unmarshal(m, b)
}
func (m *StatsMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StatsMatcher.Marshal(b, m, deterministic)
}
func (m *StatsMatcher) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StatsMatcher.Merge(m, src)
}
func (m *StatsMatcher) XXX_Size() int {
	return xxx_messageInfo_StatsMatcher.Size(m)
}
func (m *StatsMatcher) XXX_DiscardUnknown() {
	xxx_messageInfo_StatsMatcher.DiscardUnknown(m)
}

var xxx_messageInfo_StatsMatcher proto.InternalMessageInfo

type isStatsMatcher_StatsMatcher interface {
	isStatsMatcher_StatsMatcher()
}

type StatsMatcher_RejectAll struct {
	RejectAll bool `protobuf:"varint,1,opt,name=reject_all,json=rejectAll,proto3,oneof"`
}

type StatsMatcher_ExclusionList struct {
	ExclusionList *matcher.ListStringMatcher `protobuf:"bytes,2,opt,name=exclusion_list,json=exclusionList,proto3,oneof"`
}

type StatsMatcher_InclusionList struct {
	InclusionList *matcher.ListStringMatcher `protobuf:"bytes,3,opt,name=inclusion_list,json=inclusionList,proto3,oneof"`
}

func (*StatsMatcher_RejectAll) isStatsMatcher_StatsMatcher() {}

func (*StatsMatcher_ExclusionList) isStatsMatcher_StatsMatcher() {}

func (*StatsMatcher_InclusionList) isStatsMatcher_StatsMatcher() {}

func (m *StatsMatcher) GetStatsMatcher() isStatsMatcher_StatsMatcher {
	if m != nil {
		return m.StatsMatcher
	}
	return nil
}

func (m *StatsMatcher) GetRejectAll() bool {
	if x, ok := m.GetStatsMatcher().(*StatsMatcher_RejectAll); ok {
		return x.RejectAll
	}
	return false
}

func (m *StatsMatcher) GetExclusionList() *matcher.ListStringMatcher {
	if x, ok := m.GetStatsMatcher().(*StatsMatcher_ExclusionList); ok {
		return x.ExclusionList
	}
	return nil
}

func (m *StatsMatcher) GetInclusionList() *matcher.ListStringMatcher {
	if x, ok := m.GetStatsMatcher().(*StatsMatcher_InclusionList); ok {
		return x.InclusionList
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*StatsMatcher) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*StatsMatcher_RejectAll)(nil),
		(*StatsMatcher_ExclusionList)(nil),
		(*StatsMatcher_InclusionList)(nil),
	}
}

// Designates a tag name and value pair. The value may be either a fixed value
// or a regex providing the value via capture groups. The specified tag will be
// unconditionally set if a fixed value, otherwise it will only be set if one
// or more capture groups in the regex match.
type TagSpecifier struct {
	// Attaches an identifier to the tag values to identify the tag being in the
	// sink. Envoy has a set of default names and regexes to extract dynamic
	// portions of existing stats, which can be found in :repo:`well_known_names.h
	// <source/common/config/well_known_names.h>` in the Envoy repository. If a :ref:`tag_name
	// <envoy_api_field_config.metrics.v2.TagSpecifier.tag_name>` is provided in the config and
	// neither :ref:`regex <envoy_api_field_config.metrics.v2.TagSpecifier.regex>` or
	// :ref:`fixed_value <envoy_api_field_config.metrics.v2.TagSpecifier.fixed_value>` were specified,
	// Envoy will attempt to find that name in its set of defaults and use the accompanying regex.
	//
	// .. note::
	//
	//   It is invalid to specify the same tag name twice in a config.
	TagName string `protobuf:"bytes,1,opt,name=tag_name,json=tagName,proto3" json:"tag_name,omitempty"`
	// Types that are valid to be assigned to TagValue:
	//	*TagSpecifier_Regex
	//	*TagSpecifier_FixedValue
	TagValue             isTagSpecifier_TagValue `protobuf_oneof:"tag_value"`
	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
	XXX_unrecognized     []byte                  `json:"-"`
	XXX_sizecache        int32                   `json:"-"`
}

func (m *TagSpecifier) Reset()         { *m = TagSpecifier{} }
func (m *TagSpecifier) String() string { return proto.CompactTextString(m) }
func (*TagSpecifier) ProtoMessage()    {}
func (*TagSpecifier) Descriptor() ([]byte, []int) {
	return fileDescriptor_51e6d6532209c486, []int{3}
}

func (m *TagSpecifier) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TagSpecifier.Unmarshal(m, b)
}
func (m *TagSpecifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TagSpecifier.Marshal(b, m, deterministic)
}
func (m *TagSpecifier) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TagSpecifier.Merge(m, src)
}
func (m *TagSpecifier) XXX_Size() int {
	return xxx_messageInfo_TagSpecifier.Size(m)
}
func (m *TagSpecifier) XXX_DiscardUnknown() {
	xxx_messageInfo_TagSpecifier.DiscardUnknown(m)
}

var xxx_messageInfo_TagSpecifier proto.InternalMessageInfo

func (m *TagSpecifier) GetTagName() string {
	if m != nil {
		return m.TagName
	}
	return ""
}

type isTagSpecifier_TagValue interface {
	isTagSpecifier_TagValue()
}

type TagSpecifier_Regex struct {
	Regex string `protobuf:"bytes,2,opt,name=regex,proto3,oneof"`
}

type TagSpecifier_FixedValue struct {
	FixedValue string `protobuf:"bytes,3,opt,name=fixed_value,json=fixedValue,proto3,oneof"`
}

func (*TagSpecifier_Regex) isTagSpecifier_TagValue() {}

func (*TagSpecifier_FixedValue) isTagSpecifier_TagValue() {}

func (m *TagSpecifier) GetTagValue() isTagSpecifier_TagValue {
	if m != nil {
		return m.TagValue
	}
	return nil
}

func (m *TagSpecifier) GetRegex() string {
	if x, ok := m.GetTagValue().(*TagSpecifier_Regex); ok {
		return x.Regex
	}
	return ""
}

func (m *TagSpecifier) GetFixedValue() string {
	if x, ok := m.GetTagValue().(*TagSpecifier_FixedValue); ok {
		return x.FixedValue
	}
	return ""
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*TagSpecifier) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*TagSpecifier_Regex)(nil),
		(*TagSpecifier_FixedValue)(nil),
	}
}

// Stats configuration proto schema for built-in *envoy.statsd* sink. This sink does not support
// tagged metrics.
type StatsdSink struct {
	// Types that are valid to be assigned to StatsdSpecifier:
	//	*StatsdSink_Address
	//	*StatsdSink_TcpClusterName
	StatsdSpecifier isStatsdSink_StatsdSpecifier `protobuf_oneof:"statsd_specifier"`
	// Optional custom prefix for StatsdSink. If
	// specified, this will override the default prefix.
	// For example:
	//
	// .. code-block:: json
	//
	//   {
	//     "prefix" : "envoy-prod"
	//   }
	//
	// will change emitted stats to
	//
	// .. code-block:: cpp
	//
	//   envoy-prod.test_counter:1|c
	//   envoy-prod.test_timer:5|ms
	//
	// Note that the default prefix, "envoy", will be used if a prefix is not
	// specified.
	//
	// Stats with default prefix:
	//
	// .. code-block:: cpp
	//
	//   envoy.test_counter:1|c
	//   envoy.test_timer:5|ms
	Prefix               string   `protobuf:"bytes,3,opt,name=prefix,proto3" json:"prefix,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *StatsdSink) Reset()         { *m = StatsdSink{} }
func (m *StatsdSink) String() string { return proto.CompactTextString(m) }
func (*StatsdSink) ProtoMessage()    {}
func (*StatsdSink) Descriptor() ([]byte, []int) {
	return fileDescriptor_51e6d6532209c486, []int{4}
}

func (m *StatsdSink) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StatsdSink.Unmarshal(m, b)
}
func (m *StatsdSink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StatsdSink.Marshal(b, m, deterministic)
}
func (m *StatsdSink) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StatsdSink.Merge(m, src)
}
func (m *StatsdSink) XXX_Size() int {
	return xxx_messageInfo_StatsdSink.Size(m)
}
func (m *StatsdSink) XXX_DiscardUnknown() {
	xxx_messageInfo_StatsdSink.DiscardUnknown(m)
}

var xxx_messageInfo_StatsdSink proto.InternalMessageInfo

type isStatsdSink_StatsdSpecifier interface {
	isStatsdSink_StatsdSpecifier()
}

type StatsdSink_Address struct {
	Address *core.Address `protobuf:"bytes,1,opt,name=address,proto3,oneof"`
}

type StatsdSink_TcpClusterName struct {
	TcpClusterName string `protobuf:"bytes,2,opt,name=tcp_cluster_name,json=tcpClusterName,proto3,oneof"`
}

func (*StatsdSink_Address) isStatsdSink_StatsdSpecifier() {}

func (*StatsdSink_TcpClusterName) isStatsdSink_StatsdSpecifier() {}

func (m *StatsdSink) GetStatsdSpecifier() isStatsdSink_StatsdSpecifier {
	if m != nil {
		return m.StatsdSpecifier
	}
	return nil
}

func (m *StatsdSink) GetAddress() *core.Address {
	if x, ok := m.GetStatsdSpecifier().(*StatsdSink_Address); ok {
		return x.Address
	}
	return nil
}

func (m *StatsdSink) GetTcpClusterName() string {
	if x, ok := m.GetStatsdSpecifier().(*StatsdSink_TcpClusterName); ok {
		return x.TcpClusterName
	}
	return ""
}

func (m *StatsdSink) GetPrefix() string {
	if m != nil {
		return m.Prefix
	}
	return ""
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*StatsdSink) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*StatsdSink_Address)(nil),
		(*StatsdSink_TcpClusterName)(nil),
	}
}

// Stats configuration proto schema for built-in *envoy.dog_statsd* sink.
// The sink emits stats with `DogStatsD <https://docs.datadoghq.com/guides/dogstatsd/>`_
// compatible tags. Tags are configurable via :ref:`StatsConfig
// <envoy_api_msg_config.metrics.v2.StatsConfig>`.
type DogStatsdSink struct {
	// Types that are valid to be assigned to DogStatsdSpecifier:
	//	*DogStatsdSink_Address
	DogStatsdSpecifier isDogStatsdSink_DogStatsdSpecifier `protobuf_oneof:"dog_statsd_specifier"`
	// Optional custom metric name prefix. See :ref:`StatsdSink's prefix field
	// <envoy_api_field_config.metrics.v2.StatsdSink.prefix>` for more details.
	Prefix               string   `protobuf:"bytes,3,opt,name=prefix,proto3" json:"prefix,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *DogStatsdSink) Reset()         { *m = DogStatsdSink{} }
func (m *DogStatsdSink) String() string { return proto.CompactTextString(m) }
func (*DogStatsdSink) ProtoMessage()    {}
func (*DogStatsdSink) Descriptor() ([]byte, []int) {
	return fileDescriptor_51e6d6532209c486, []int{5}
}

func (m *DogStatsdSink) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DogStatsdSink.Unmarshal(m, b)
}
func (m *DogStatsdSink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DogStatsdSink.Marshal(b, m, deterministic)
}
func (m *DogStatsdSink) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DogStatsdSink.Merge(m, src)
}
func (m *DogStatsdSink) XXX_Size() int {
	return xxx_messageInfo_DogStatsdSink.Size(m)
}
func (m *DogStatsdSink) XXX_DiscardUnknown() {
	xxx_messageInfo_DogStatsdSink.DiscardUnknown(m)
}

var xxx_messageInfo_DogStatsdSink proto.InternalMessageInfo

type isDogStatsdSink_DogStatsdSpecifier interface {
	isDogStatsdSink_DogStatsdSpecifier()
}

type DogStatsdSink_Address struct {
	Address *core.Address `protobuf:"bytes,1,opt,name=address,proto3,oneof"`
}

func (*DogStatsdSink_Address) isDogStatsdSink_DogStatsdSpecifier() {}

func (m *DogStatsdSink) GetDogStatsdSpecifier() isDogStatsdSink_DogStatsdSpecifier {
	if m != nil {
		return m.DogStatsdSpecifier
	}
	return nil
}

func (m *DogStatsdSink) GetAddress() *core.Address {
	if x, ok := m.GetDogStatsdSpecifier().(*DogStatsdSink_Address); ok {
		return x.Address
	}
	return nil
}

func (m *DogStatsdSink) GetPrefix() string {
	if m != nil {
		return m.Prefix
	}
	return ""
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*DogStatsdSink) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*DogStatsdSink_Address)(nil),
	}
}

// Stats configuration proto schema for built-in *envoy.stat_sinks.hystrix* sink.
// The sink emits stats in `text/event-stream
// <https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events>`_
// formatted stream for use by `Hystrix dashboard
// <https://github.com/Netflix-Skunkworks/hystrix-dashboard/wiki>`_.
//
// Note that only a single HystrixSink should be configured.
//
// Streaming is started through an admin endpoint :http:get:`/hystrix_event_stream`.
type HystrixSink struct {
	// The number of buckets the rolling statistical window is divided into.
	//
	// Each time the sink is flushed, all relevant Envoy statistics are sampled and
	// added to the rolling window (removing the oldest samples in the window
	// in the process). The sink then outputs the aggregate statistics across the
	// current rolling window to the event stream(s).
	//
	// rolling_window(ms) = stats_flush_interval(ms) * num_of_buckets
	//
	// More detailed explanation can be found in `Hystrix wiki
	// <https://github.com/Netflix/Hystrix/wiki/Metrics-and-Monitoring#hystrixrollingnumber>`_.
	NumBuckets           int64    `protobuf:"varint,1,opt,name=num_buckets,json=numBuckets,proto3" json:"num_buckets,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *HystrixSink) Reset()         { *m = HystrixSink{} }
func (m *HystrixSink) String() string { return proto.CompactTextString(m) }
func (*HystrixSink) ProtoMessage()    {}
func (*HystrixSink) Descriptor() ([]byte, []int) {
	return fileDescriptor_51e6d6532209c486, []int{6}
}

func (m *HystrixSink) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HystrixSink.Unmarshal(m, b)
}
func (m *HystrixSink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HystrixSink.Marshal(b, m, deterministic)
}
func (m *HystrixSink) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HystrixSink.Merge(m, src)
}
func (m *HystrixSink) XXX_Size() int {
	return xxx_messageInfo_HystrixSink.Size(m)
}
func (m *HystrixSink) XXX_DiscardUnknown() {
	xxx_messageInfo_HystrixSink.DiscardUnknown(m)
}

var xxx_messageInfo_HystrixSink proto.InternalMessageInfo

func (m *HystrixSink) GetNumBuckets() int64 {
	if m != nil {
		return m.NumBuckets
	}
	return 0
}

func init() {
	proto.RegisterType((*StatsSink)(nil), "envoy.config.metrics.v2.StatsSink")
	proto.RegisterType((*StatsConfig)(nil), "envoy.config.metrics.v2.StatsConfig")
	proto.RegisterType((*StatsMatcher)(nil), "envoy.config.metrics.v2.StatsMatcher")
	proto.RegisterType((*TagSpecifier)(nil), "envoy.config.metrics.v2.TagSpecifier")
	proto.RegisterType((*StatsdSink)(nil), "envoy.config.metrics.v2.StatsdSink")
	proto.RegisterType((*DogStatsdSink)(nil), "envoy.config.metrics.v2.DogStatsdSink")
	proto.RegisterType((*HystrixSink)(nil), "envoy.config.metrics.v2.HystrixSink")
}

func init() {
	proto.RegisterFile("envoy/config/metrics/v2/stats.proto", fileDescriptor_51e6d6532209c486)
}

var fileDescriptor_51e6d6532209c486 = []byte{
	// 691 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x4d, 0x6f, 0xd3, 0x40,
	0x10, 0x8d, 0x93, 0x7e, 0xc4, 0xe3, 0xa4, 0x2a, 0x56, 0x44, 0xd2, 0x82, 0x68, 0x08, 0xaa, 0x14,
	0x71, 0xb0, 0xa5, 0xa0, 0x22, 0x71, 0x8c, 0xdb, 0x83, 0x55, 0xa0, 0xaa, 0x9c, 0x8a, 0xab, 0xb5,
	0xb5, 0x37, 0x66, 0xa9, 0xe3, 0xb5, 0x76, 0xd7, 0x21, 0x11, 0x17, 0xc4, 0x2f, 0x81, 0x1f, 0xc7,
	0x8d, 0x1f, 0x80, 0x38, 0xa1, 0xfd, 0x48, 0x15, 0x5a, 0x72, 0x40, 0xe2, 0x16, 0xef, 0x7b, 0x6f,
	0xe6, 0xbd, 0x99, 0xdd, 0xc0, 0x33, 0x5c, 0xcc, 0xe9, 0xd2, 0x4f, 0x68, 0x31, 0x25, 0x99, 0x3f,
	0xc3, 0x82, 0x91, 0x84, 0xfb, 0xf3, 0x91, 0xcf, 0x05, 0x12, 0xdc, 0x2b, 0x19, 0x15, 0xd4, 0xed,
	0x2a, 0x92, 0xa7, 0x49, 0x9e, 0x21, 0x79, 0xf3, 0xd1, 0xe1, 0x91, 0x56, 0xa3, 0x92, 0x48, 0x49,
	0x42, 0x19, 0xf6, 0x51, 0x9a, 0x32, 0xcc, 0x8d, 0x72, 0x45, 0x10, 0xcb, 0x12, 0xfb, 0x33, 0x24,
	0x92, 0xf7, 0x98, 0xf9, 0x5c, 0x30, 0x52, 0x64, 0x86, 0x70, 0x90, 0x51, 0x9a, 0xe5, 0xd8, 0x57,
	0x5f, 0xd7, 0xd5, 0xd4, 0x47, 0xc5, 0xd2, 0x40, 0x8f, 0xef, 0x42, 0x5c, 0xb0, 0x2a, 0x11, 0x06,
	0x7d, 0x72, 0x17, 0xfd, 0xc8, 0x50, 0x59, 0x62, 0xb6, 0xea, 0xdc, 0x9d, 0xa3, 0x9c, 0xa4, 0x48,
	0x60, 0x7f, 0xf5, 0x43, 0x03, 0x83, 0xaf, 0x16, 0xd8, 0x13, 0x19, 0x6e, 0x42, 0x8a, 0x1b, 0xd7,
	0x85, 0xad, 0x02, 0xcd, 0x70, 0xcf, 0xea, 0x5b, 0x43, 0x3b, 0x52, 0xbf, 0xdd, 0x13, 0xd8, 0xd1,
	0x51, 0x7b, 0xf5, 0xbe, 0x35, 0x74, 0x46, 0x5d, 0x4f, 0xf7, 0xf2, 0x56, 0xbd, 0xbc, 0x89, 0x72,
	0x12, 0xd4, 0x7b, 0x56, 0x58, 0x8b, 0x0c, 0xd9, 0x7d, 0x05, 0x2d, 0x99, 0x33, 0x8d, 0x8d, 0xb8,
	0xa1, 0xc4, 0x9d, 0x7b, 0xe2, 0x71, 0xb1, 0x0c, 0x6b, 0x91, 0xa3, 0xb8, 0xa7, 0x8a, 0x1a, 0xb4,
	0xc1, 0xd1, 0xa2, 0x58, 0x9e, 0x0e, 0x7e, 0x58, 0xe0, 0x28, 0x8b, 0x1a, 0x76, 0xcf, 0x00, 0xd4,
	0x3a, 0x62, 0x81, 0x32, 0xde, 0xb3, 0xfa, 0x8d, 0xa1, 0x33, 0x3a, 0xf6, 0x36, 0x2c, 0xc5, 0xbb,
	0x42, 0xd9, 0xa4, 0xc4, 0x09, 0x99, 0x12, 0xcc, 0x22, 0x5b, 0x09, 0xaf, 0x50, 0xc6, 0xdd, 0xd7,
	0xd0, 0xa9, 0x38, 0x8e, 0x51, 0x9e, 0xc7, 0x29, 0x9e, 0xa2, 0x2a, 0x17, 0xba, 0x9e, 0x0e, 0x79,
	0x78, 0xcf, 0x67, 0x40, 0x69, 0xfe, 0x0e, 0xe5, 0x15, 0x8e, 0x1e, 0x54, 0x1c, 0x8f, 0xf3, 0xfc,
	0x4c, 0xab, 0x54, 0xb1, 0x73, 0x68, 0x6b, 0x4b, 0x66, 0xab, 0x26, 0xed, 0x66, 0x57, 0x2a, 0xcf,
	0x5b, 0x4d, 0x8e, 0x5a, 0x7c, 0xed, 0x6b, 0xf0, 0xdd, 0x82, 0xd6, 0x3a, 0xec, 0x1e, 0x01, 0x30,
	0xfc, 0x01, 0x27, 0x42, 0x9a, 0x55, 0xab, 0x69, 0x86, 0xb5, 0xc8, 0xd6, 0x67, 0xe3, 0x3c, 0x77,
	0x2f, 0x60, 0x0f, 0x2f, 0x92, 0xbc, 0xe2, 0x84, 0x16, 0x71, 0x4e, 0xb8, 0x30, 0x21, 0x56, 0xed,
	0xe5, 0x14, 0x3d, 0xe3, 0xcc, 0x7b, 0x43, 0xb8, 0x98, 0xa8, 0x3b, 0x67, 0xea, 0x87, 0xb5, 0xa8,
	0x7d, 0x2b, 0x97, 0xa8, 0xac, 0x47, 0x8a, 0x3f, 0xea, 0x35, 0xfe, 0xb1, 0xde, 0xad, 0x5c, 0xa2,
	0x41, 0xe7, 0xce, 0x74, 0xdc, 0xc6, 0xcf, 0xc0, 0x1a, 0x7c, 0x82, 0xd6, 0xfa, 0x6e, 0xdc, 0x03,
	0x68, 0x0a, 0x94, 0xc5, 0x6b, 0xf7, 0x6f, 0x57, 0xa0, 0xec, 0x42, 0x5e, 0xc1, 0x3e, 0x6c, 0x33,
	0x9c, 0xe1, 0x85, 0xca, 0x65, 0x07, 0xcd, 0x5f, 0xc1, 0x36, 0x6b, 0x0c, 0x3f, 0xcb, 0x31, 0x68,
	0xc0, 0x7d, 0x0a, 0xce, 0x94, 0x2c, 0x70, 0x1a, 0xcf, 0xe5, 0x8a, 0x94, 0x5f, 0x3b, 0xac, 0x45,
	0xa0, 0x0e, 0xd5, 0xda, 0x02, 0x07, 0x6c, 0x59, 0x5f, 0x11, 0x06, 0xdf, 0x2c, 0x00, 0x35, 0xe4,
	0x54, 0xdd, 0xfb, 0x97, 0xb0, 0x6b, 0x5e, 0xaa, 0x6a, 0x2d, 0xf7, 0xaf, 0xa3, 0xa2, 0x92, 0xc8,
	0x75, 0xc9, 0xb7, 0xec, 0x8d, 0x35, 0x23, 0xac, 0x45, 0x2b, 0xb2, 0xfb, 0x1c, 0xf6, 0x45, 0x52,
	0xc6, 0x32, 0xac, 0xc0, 0x4c, 0x7b, 0xaf, 0x9b, 0xde, 0x7b, 0x22, 0x29, 0x4f, 0x35, 0xa0, 0x42,
	0x3c, 0x84, 0x9d, 0x92, 0xe1, 0x29, 0x59, 0x68, 0x77, 0x91, 0xf9, 0x0a, 0xba, 0xb0, 0xaf, 0xa6,
	0x93, 0xc6, 0xfc, 0x76, 0x16, 0x6a, 0x40, 0x5f, 0x2c, 0x68, 0x9f, 0xd1, 0xec, 0x3f, 0xd8, 0xdc,
	0xd4, 0xfa, 0x11, 0x74, 0x52, 0x9a, 0xc5, 0x7f, 0x6d, 0x7f, 0xbe, 0xd5, 0xac, 0xef, 0x37, 0x06,
	0x1e, 0x38, 0xe1, 0x52, 0xfe, 0x47, 0x2d, 0x94, 0x83, 0x23, 0x70, 0x8a, 0x6a, 0x16, 0x5f, 0x57,
	0xc9, 0x0d, 0x16, 0xda, 0x45, 0x23, 0x82, 0xa2, 0x9a, 0x05, 0xfa, 0x24, 0x38, 0x81, 0x63, 0x42,
	0xb5, 0xab, 0x92, 0xd1, 0xc5, 0x72, 0xd3, 0x0b, 0x08, 0xf4, 0xf8, 0x2f, 0xe5, 0xf3, 0xba, 0xb4,
	0xae, 0x77, 0xd4, 0x3b, 0x7b, 0xf1, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x7e, 0x61, 0xb7, 0xd0, 0x81,
	0x05, 0x00, 0x00,
}
  07070100000119000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000002F00000000cilium-proxy-20200109/go/envoy/config/overload    0707010000011A000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003700000000cilium-proxy-20200109/go/envoy/config/overload/v2alpha    0707010000011B000081A4000003E800000064000000015E17A24700003B24000000000000000000000000000000000000004600000000cilium-proxy-20200109/go/envoy/config/overload/v2alpha/overload.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/overload/v2alpha/overload.proto

package envoy_config_overload_v2alpha

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	duration "github.com/golang/protobuf/ptypes/duration"
	_struct "github.com/golang/protobuf/ptypes/struct"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type ResourceMonitor struct {
	// The name of the resource monitor to instantiate. Must match a registered
	// resource monitor type. The built-in resource monitors are:
	//
	// * :ref:`envoy.resource_monitors.fixed_heap
	//   <envoy_api_msg_config.resource_monitor.fixed_heap.v2alpha.FixedHeapConfig>`
	// * :ref:`envoy.resource_monitors.injected_resource
	//   <envoy_api_msg_config.resource_monitor.injected_resource.v2alpha.InjectedResourceConfig>`
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Configuration for the resource monitor being instantiated.
	//
	// Types that are valid to be assigned to ConfigType:
	//	*ResourceMonitor_Config
	//	*ResourceMonitor_TypedConfig
	ConfigType           isResourceMonitor_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
	XXX_unrecognized     []byte                       `json:"-"`
	XXX_sizecache        int32                        `json:"-"`
}

func (m *ResourceMonitor) Reset()         { *m = ResourceMonitor{} }
func (m *ResourceMonitor) String() string { return proto.CompactTextString(m) }
func (*ResourceMonitor) ProtoMessage()    {}
func (*ResourceMonitor) Descriptor() ([]byte, []int) {
	return fileDescriptor_c3380c1aa89ddd52, []int{0}
}

func (m *ResourceMonitor) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ResourceMonitor.Unmarshal(m, b)
}
func (m *ResourceMonitor) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ResourceMonitor.Marshal(b, m, deterministic)
}
func (m *ResourceMonitor) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ResourceMonitor.Merge(m, src)
}
func (m *ResourceMonitor) XXX_Size() int {
	return xxx_messageInfo_ResourceMonitor.Size(m)
}
func (m *ResourceMonitor) XXX_DiscardUnknown() {
	xxx_messageInfo_ResourceMonitor.DiscardUnknown(m)
}

var xxx_messageInfo_ResourceMonitor proto.InternalMessageInfo

func (m *ResourceMonitor) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isResourceMonitor_ConfigType interface {
	isResourceMonitor_ConfigType()
}

type ResourceMonitor_Config struct {
	Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"`
}

type ResourceMonitor_TypedConfig struct {
	TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*ResourceMonitor_Config) isResourceMonitor_ConfigType() {}

func (*ResourceMonitor_TypedConfig) isResourceMonitor_ConfigType() {}

func (m *ResourceMonitor) GetConfigType() isResourceMonitor_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

// Deprecated: Do not use.
func (m *ResourceMonitor) GetConfig() *_struct.Struct {
	if x, ok := m.GetConfigType().(*ResourceMonitor_Config); ok {
		return x.Config
	}
	return nil
}

func (m *ResourceMonitor) GetTypedConfig() *any.Any {
	if x, ok := m.GetConfigType().(*ResourceMonitor_TypedConfig); ok {
		return x.TypedConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ResourceMonitor) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*ResourceMonitor_Config)(nil),
		(*ResourceMonitor_TypedConfig)(nil),
	}
}

type ThresholdTrigger struct {
	// If the resource pressure is greater than or equal to this value, the trigger
	// will fire.
	Value                float64  `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ThresholdTrigger) Reset()         { *m = ThresholdTrigger{} }
func (m *ThresholdTrigger) String() string { return proto.CompactTextString(m) }
func (*ThresholdTrigger) ProtoMessage()    {}
func (*ThresholdTrigger) Descriptor() ([]byte, []int) {
	return fileDescriptor_c3380c1aa89ddd52, []int{1}
}

func (m *ThresholdTrigger) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ThresholdTrigger.Unmarshal(m, b)
}
func (m *ThresholdTrigger) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ThresholdTrigger.Marshal(b, m, deterministic)
}
func (m *ThresholdTrigger) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ThresholdTrigger.Merge(m, src)
}
func (m *ThresholdTrigger) XXX_Size() int {
	return xxx_messageInfo_ThresholdTrigger.Size(m)
}
func (m *ThresholdTrigger) XXX_DiscardUnknown() {
	xxx_messageInfo_ThresholdTrigger.DiscardUnknown(m)
}

var xxx_messageInfo_ThresholdTrigger proto.InternalMessageInfo

func (m *ThresholdTrigger) GetValue() float64 {
	if m != nil {
		return m.Value
	}
	return 0
}

type Trigger struct {
	// The name of the resource this is a trigger for.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Types that are valid to be assigned to TriggerOneof:
	//	*Trigger_Threshold
	TriggerOneof         isTrigger_TriggerOneof `protobuf_oneof:"trigger_oneof"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *Trigger) Reset()         { *m = Trigger{} }
func (m *Trigger) String() string { return proto.CompactTextString(m) }
func (*Trigger) ProtoMessage()    {}
func (*Trigger) Descriptor() ([]byte, []int) {
	return fileDescriptor_c3380c1aa89ddd52, []int{2}
}

func (m *Trigger) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Trigger.Unmarshal(m, b)
}
func (m *Trigger) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Trigger.Marshal(b, m, deterministic)
}
func (m *Trigger) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Trigger.Merge(m, src)
}
func (m *Trigger) XXX_Size() int {
	return xxx_messageInfo_Trigger.Size(m)
}
func (m *Trigger) XXX_DiscardUnknown() {
	xxx_messageInfo_Trigger.DiscardUnknown(m)
}

var xxx_messageInfo_Trigger proto.InternalMessageInfo

func (m *Trigger) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isTrigger_TriggerOneof interface {
	isTrigger_TriggerOneof()
}

type Trigger_Threshold struct {
	Threshold *ThresholdTrigger `protobuf:"bytes,2,opt,name=threshold,proto3,oneof"`
}

func (*Trigger_Threshold) isTrigger_TriggerOneof() {}

func (m *Trigger) GetTriggerOneof() isTrigger_TriggerOneof {
	if m != nil {
		return m.TriggerOneof
	}
	return nil
}

func (m *Trigger) GetThreshold() *ThresholdTrigger {
	if x, ok := m.GetTriggerOneof().(*Trigger_Threshold); ok {
		return x.Threshold
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Trigger) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Trigger_Threshold)(nil),
	}
}

type OverloadAction struct {
	// The name of the overload action. This is just a well-known string that listeners can
	// use for registering callbacks. Custom overload actions should be named using reverse
	// DNS to ensure uniqueness.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// A set of triggers for this action. If any of these triggers fire the overload action
	// is activated. Listeners are notified when the overload action transitions from
	// inactivated to activated, or vice versa.
	Triggers             []*Trigger `protobuf:"bytes,2,rep,name=triggers,proto3" json:"triggers,omitempty"`
	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
	XXX_unrecognized     []byte     `json:"-"`
	XXX_sizecache        int32      `json:"-"`
}

func (m *OverloadAction) Reset()         { *m = OverloadAction{} }
func (m *OverloadAction) String() string { return proto.CompactTextString(m) }
func (*OverloadAction) ProtoMessage()    {}
func (*OverloadAction) Descriptor() ([]byte, []int) {
	return fileDescriptor_c3380c1aa89ddd52, []int{3}
}

func (m *OverloadAction) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OverloadAction.Unmarshal(m, b)
}
func (m *OverloadAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OverloadAction.Marshal(b, m, deterministic)
}
func (m *OverloadAction) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OverloadAction.Merge(m, src)
}
func (m *OverloadAction) XXX_Size() int {
	return xxx_messageInfo_OverloadAction.Size(m)
}
func (m *OverloadAction) XXX_DiscardUnknown() {
	xxx_messageInfo_OverloadAction.DiscardUnknown(m)
}

var xxx_messageInfo_OverloadAction proto.InternalMessageInfo

func (m *OverloadAction) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *OverloadAction) GetTriggers() []*Trigger {
	if m != nil {
		return m.Triggers
	}
	return nil
}

type OverloadManager struct {
	// The interval for refreshing resource usage.
	RefreshInterval *duration.Duration `protobuf:"bytes,1,opt,name=refresh_interval,json=refreshInterval,proto3" json:"refresh_interval,omitempty"`
	// The set of resources to monitor.
	ResourceMonitors []*ResourceMonitor `protobuf:"bytes,2,rep,name=resource_monitors,json=resourceMonitors,proto3" json:"resource_monitors,omitempty"`
	// The set of overload actions.
	Actions              []*OverloadAction `protobuf:"bytes,3,rep,name=actions,proto3" json:"actions,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *OverloadManager) Reset()         { *m = OverloadManager{} }
func (m *OverloadManager) String() string { return proto.CompactTextString(m) }
func (*OverloadManager) ProtoMessage()    {}
func (*OverloadManager) Descriptor() ([]byte, []int) {
	return fileDescriptor_c3380c1aa89ddd52, []int{4}
}

func (m *OverloadManager) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OverloadManager.Unmarshal(m, b)
}
func (m *OverloadManager) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OverloadManager.Marshal(b, m, deterministic)
}
func (m *OverloadManager) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OverloadManager.Merge(m, src)
}
func (m *OverloadManager) XXX_Size() int {
	return xxx_messageInfo_OverloadManager.Size(m)
}
func (m *OverloadManager) XXX_DiscardUnknown() {
	xxx_messageInfo_OverloadManager.DiscardUnknown(m)
}

var xxx_messageInfo_OverloadManager proto.InternalMessageInfo

func (m *OverloadManager) GetRefreshInterval() *duration.Duration {
	if m != nil {
		return m.RefreshInterval
	}
	return nil
}

func (m *OverloadManager) GetResourceMonitors() []*ResourceMonitor {
	if m != nil {
		return m.ResourceMonitors
	}
	return nil
}

func (m *OverloadManager) GetActions() []*OverloadAction {
	if m != nil {
		return m.Actions
	}
	return nil
}

func init() {
	proto.RegisterType((*ResourceMonitor)(nil), "envoy.config.overload.v2alpha.ResourceMonitor")
	proto.RegisterType((*ThresholdTrigger)(nil), "envoy.config.overload.v2alpha.ThresholdTrigger")
	proto.RegisterType((*Trigger)(nil), "envoy.config.overload.v2alpha.Trigger")
	proto.RegisterType((*OverloadAction)(nil), "envoy.config.overload.v2alpha.OverloadAction")
	proto.RegisterType((*OverloadManager)(nil), "envoy.config.overload.v2alpha.OverloadManager")
}

func init() {
	proto.RegisterFile("envoy/config/overload/v2alpha/overload.proto", fileDescriptor_c3380c1aa89ddd52)
}

var fileDescriptor_c3380c1aa89ddd52 = []byte{
	// 495 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x4f, 0x8b, 0xd3, 0x40,
	0x14, 0xcf, 0xa4, 0xfb, 0xa7, 0x3b, 0xb1, 0xb6, 0x0e, 0x85, 0xa6, 0xeb, 0x1f, 0x4a, 0x0e, 0x52,
	0xd1, 0x4d, 0xa0, 0xe2, 0xc1, 0x8b, 0xd2, 0x71, 0xc1, 0x0a, 0x2e, 0xbb, 0xc4, 0xbd, 0x87, 0xd9,
	0x66, 0x9a, 0x06, 0xb2, 0x33, 0x65, 0x32, 0x09, 0x06, 0x3f, 0x80, 0x27, 0x2f, 0x7e, 0x11, 0xbf,
	0x9a, 0x47, 0xe9, 0x49, 0x32, 0x33, 0xa9, 0x6e, 0x17, 0xda, 0x9c, 0xc2, 0xfb, 0xfd, 0x79, 0xbf,
	0x79, 0xef, 0xc1, 0x57, 0x94, 0x95, 0xbc, 0x0a, 0xe6, 0x9c, 0x2d, 0xd2, 0x24, 0xe0, 0x25, 0x15,
	0x19, 0x27, 0x71, 0x50, 0x4e, 0x48, 0xb6, 0x5a, 0x92, 0x4d, 0xc1, 0x5f, 0x09, 0x2e, 0x39, 0x7a,
	0xaa, 0xd8, 0xbe, 0x66, 0xfb, 0x1b, 0xd0, 0xb0, 0x4f, 0x87, 0x09, 0xe7, 0x49, 0x46, 0x03, 0x45,
	0xbe, 0x29, 0x16, 0x01, 0x61, 0x95, 0x56, 0x9e, 0x3e, 0xdb, 0x86, 0xe2, 0x42, 0x10, 0x99, 0x72,
	0x66, 0xf0, 0x27, 0xdb, 0x78, 0x2e, 0x45, 0x31, 0x97, 0x06, 0x1d, 0x94, 0x24, 0x4b, 0x63, 0x22,
	0x69, 0xd0, 0xfc, 0x68, 0xc0, 0xfb, 0x05, 0x60, 0x37, 0xa4, 0x39, 0x2f, 0xc4, 0x9c, 0x5e, 0x70,
	0x96, 0x4a, 0x2e, 0xd0, 0x63, 0x78, 0xc0, 0xc8, 0x2d, 0x75, 0xc1, 0x08, 0x8c, 0x4f, 0xf0, 0xf1,
	0x1a, 0x1f, 0x08, 0x7b, 0x04, 0x42, 0x55, 0x44, 0x6f, 0xe0, 0x91, 0x4e, 0xef, 0xda, 0x23, 0x30,
	0x76, 0x26, 0x03, 0x5f, 0x37, 0xf6, 0x9b, 0xc6, 0xfe, 0x17, 0xd5, 0x18, 0xdb, 0x2e, 0x98, 0x59,
	0xa1, 0x21, 0xa3, 0xb7, 0xf0, 0x81, 0xac, 0x56, 0x34, 0x8e, 0x8c, 0xb8, 0xa5, 0xc4, 0xfd, 0x7b,
	0xe2, 0x29, 0xab, 0x66, 0x56, 0xe8, 0x28, 0xee, 0x07, 0x45, 0xc5, 0x1d, 0xe8, 0x68, 0x51, 0x54,
	0x57, 0xbd, 0x29, 0xec, 0x5d, 0x2f, 0x05, 0xcd, 0x97, 0x3c, 0x8b, 0xaf, 0x45, 0x9a, 0x24, 0x54,
	0xa0, 0x33, 0x78, 0x58, 0x92, 0xac, 0xd0, 0x91, 0x01, 0x1e, 0xac, 0x71, 0x1f, 0xa1, 0xa1, 0xa5,
	0xbe, 0xdf, 0xef, 0x5f, 0x58, 0xe6, 0x0b, 0x35, 0xcb, 0xfb, 0x01, 0xe0, 0x71, 0x23, 0xdd, 0xf9,
	0xd8, 0x4b, 0x78, 0x22, 0x9b, 0x5e, 0xe6, 0xbd, 0x81, 0xbf, 0x73, 0x85, 0xfe, 0x76, 0xb6, 0x99,
	0x15, 0xfe, 0xf3, 0xc0, 0x7d, 0xd8, 0x91, 0xba, 0x1e, 0x71, 0x46, 0xf9, 0x02, 0xb5, 0xfe, 0x60,
	0xe0, 0x7d, 0x83, 0x0f, 0x2f, 0x8d, 0xcf, 0x74, 0x5e, 0xef, 0x74, 0x77, 0xaa, 0xcf, 0xb0, 0x6d,
	0x4c, 0x72, 0xd7, 0x1e, 0xb5, 0xc6, 0xce, 0xe4, 0xf9, 0xbe, 0x50, 0x9a, 0x8e, 0xdb, 0x6b, 0x7c,
	0xf8, 0x13, 0xd8, 0x6d, 0x10, 0x6e, 0x1c, 0xbc, 0xef, 0x36, 0xec, 0x36, 0xdd, 0x2f, 0x08, 0x23,
	0xf5, 0x50, 0xce, 0x61, 0x4f, 0xd0, 0x45, 0x1d, 0x3a, 0x4a, 0x99, 0xa4, 0xa2, 0x24, 0x99, 0x8a,
	0xe2, 0x4c, 0x86, 0xf7, 0x36, 0x76, 0x6e, 0xee, 0x30, 0xec, 0x1a, 0xc9, 0x27, 0xa3, 0x40, 0x14,
	0x3e, 0x12, 0xe6, 0xb4, 0xa2, 0x5b, 0x7d, 0x5b, 0x4d, 0x60, 0x7f, 0x4f, 0xe0, 0xad, 0x93, 0xfc,
	0x2f, 0x78, 0x4f, 0xdc, 0x85, 0x72, 0xf4, 0x11, 0x1e, 0x13, 0x35, 0xb5, 0xdc, 0x6d, 0x29, 0xf3,
	0xb3, 0x3d, 0xe6, 0x77, 0x67, 0x1d, 0x36, 0x6a, 0xfc, 0x0e, 0xbe, 0x4c, 0xb9, 0xd6, 0xae, 0x04,
	0xff, 0x5a, 0xed, 0xb6, 0xc1, 0x9d, 0xc6, 0xe7, 0xaa, 0x1e, 0xc5, 0x15, 0xb8, 0x39, 0x52, 0x33,
	0x79, 0xfd, 0x37, 0x00, 0x00, 0xff, 0xff, 0x17, 0xd8, 0x65, 0x49, 0x13, 0x04, 0x00, 0x00,
}
0707010000011C000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003000000000cilium-proxy-20200109/go/envoy/config/ratelimit   0707010000011D000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003300000000cilium-proxy-20200109/go/envoy/config/ratelimit/v2    0707010000011E000081A4000003E800000064000000015E17A2470000107B000000000000000000000000000000000000003D00000000cilium-proxy-20200109/go/envoy/config/ratelimit/v2/rls.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/ratelimit/v2/rls.proto

package envoy_config_ratelimit_v2

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Rate limit :ref:`configuration overview <config_rate_limit_service>`.
type RateLimitServiceConfig struct {
	// Specifies the gRPC service that hosts the rate limit service. The client
	// will connect to this cluster when it needs to make rate limit service
	// requests.
	GrpcService          *core.GrpcService `protobuf:"bytes,2,opt,name=grpc_service,json=grpcService,proto3" json:"grpc_service,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *RateLimitServiceConfig) Reset()         { *m = RateLimitServiceConfig{} }
func (m *RateLimitServiceConfig) String() string { return proto.CompactTextString(m) }
func (*RateLimitServiceConfig) ProtoMessage()    {}
func (*RateLimitServiceConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_3154ecf621be8917, []int{0}
}

func (m *RateLimitServiceConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimitServiceConfig.Unmarshal(m, b)
}
func (m *RateLimitServiceConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimitServiceConfig.Marshal(b, m, deterministic)
}
func (m *RateLimitServiceConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimitServiceConfig.Merge(m, src)
}
func (m *RateLimitServiceConfig) XXX_Size() int {
	return xxx_messageInfo_RateLimitServiceConfig.Size(m)
}
func (m *RateLimitServiceConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimitServiceConfig.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimitServiceConfig proto.InternalMessageInfo

func (m *RateLimitServiceConfig) GetGrpcService() *core.GrpcService {
	if m != nil {
		return m.GrpcService
	}
	return nil
}

func init() {
	proto.RegisterType((*RateLimitServiceConfig)(nil), "envoy.config.ratelimit.v2.RateLimitServiceConfig")
}

func init() {
	proto.RegisterFile("envoy/config/ratelimit/v2/rls.proto", fileDescriptor_3154ecf621be8917)
}

var fileDescriptor_3154ecf621be8917 = []byte{
	// 227 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4e, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x2f, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc,
	0xcd, 0x2c, 0xd1, 0x2f, 0x33, 0xd2, 0x2f, 0xca, 0x29, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17,
	0x92, 0x04, 0x2b, 0xd2, 0x83, 0x28, 0xd2, 0x83, 0x2b, 0xd2, 0x2b, 0x33, 0x92, 0x52, 0x81, 0xe8,
	0x4f, 0x2c, 0xc8, 0x04, 0x69, 0x49, 0xce, 0x2f, 0x4a, 0xd5, 0x4f, 0x2f, 0x2a, 0x48, 0x8e, 0x2f,
	0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0x85, 0x18, 0x20, 0x25, 0x5e, 0x96, 0x98, 0x93, 0x99, 0x92,
	0x58, 0x92, 0xaa, 0x0f, 0x63, 0x40, 0x24, 0x94, 0x0a, 0xb9, 0xc4, 0x82, 0x12, 0x4b, 0x52, 0x7d,
	0x40, 0xc6, 0x05, 0x43, 0xb4, 0x38, 0x83, 0x6d, 0x11, 0xf2, 0xe6, 0xe2, 0x41, 0x36, 0x48, 0x82,
	0x49, 0x81, 0x51, 0x83, 0xdb, 0x48, 0x4e, 0x0f, 0xe2, 0x94, 0xc4, 0x82, 0x4c, 0xbd, 0x32, 0x23,
	0x3d, 0x90, 0x7d, 0x7a, 0xee, 0x45, 0x05, 0xc9, 0x50, 0xbd, 0x4e, 0x1c, 0xbf, 0x9c, 0x58, 0xbb,
	0x18, 0x99, 0x04, 0x18, 0x83, 0xb8, 0xd3, 0x11, 0xc2, 0x5e, 0x2c, 0x1c, 0x8c, 0x02, 0x4c, 0x5e,
	0x2c, 0x1c, 0xcc, 0x02, 0x2c, 0x4e, 0xa6, 0x5c, 0xea, 0x99, 0xf9, 0x10, 0x63, 0x0a, 0x8a, 0xf2,
	0x2b, 0x2a, 0xf5, 0x70, 0x7a, 0xce, 0x89, 0x23, 0x28, 0xa7, 0x38, 0x00, 0xe4, 0xce, 0x00, 0xc6,
	0x24, 0x36, 0xb0, 0x83, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x92, 0x63, 0x0d, 0x64, 0x31,
	0x01, 0x00, 0x00,
}
 0707010000011F000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000002B00000000cilium-proxy-20200109/go/envoy/config/rbac    07070100000120000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000002E00000000cilium-proxy-20200109/go/envoy/config/rbac/v2 07070100000121000081A4000003E800000064000000015E17A24700006E09000000000000000000000000000000000000003900000000cilium-proxy-20200109/go/envoy/config/rbac/v2/rbac.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/rbac/v2/rbac.proto

package envoy_config_rbac_v2

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	route "github.com/cilium/proxy/go/envoy/api/v2/route"
	matcher "github.com/cilium/proxy/go/envoy/type/matcher"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	v1alpha1 "google.golang.org/genproto/googleapis/api/expr/v1alpha1"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Should we do safe-list or block-list style access control?
type RBAC_Action int32

const (
	// The policies grant access to principals. The rest is denied. This is safe-list style
	// access control. This is the default type.
	RBAC_ALLOW RBAC_Action = 0
	// The policies deny access to principals. The rest is allowed. This is block-list style
	// access control.
	RBAC_DENY RBAC_Action = 1
)

var RBAC_Action_name = map[int32]string{
	0: "ALLOW",
	1: "DENY",
}

var RBAC_Action_value = map[string]int32{
	"ALLOW": 0,
	"DENY":  1,
}

func (x RBAC_Action) String() string {
	return proto.EnumName(RBAC_Action_name, int32(x))
}

func (RBAC_Action) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_e8a2b527e1e731e1, []int{0, 0}
}

// Role Based Access Control (RBAC) provides service-level and method-level access control for a
// service. RBAC policies are additive. The policies are examined in order. A request is allowed
// once a matching policy is found (suppose the `action` is ALLOW).
//
// Here is an example of RBAC configuration. It has two policies:
//
// * Service account "cluster.local/ns/default/sa/admin" has full access to the service, and so
//   does "cluster.local/ns/default/sa/superuser".
//
// * Any user can read ("GET") the service at paths with prefix "/products", so long as the
//   destination port is either 80 or 443.
//
//  .. code-block:: yaml
//
//   action: ALLOW
//   policies:
//     "service-admin":
//       permissions:
//         - any: true
//       principals:
//         - authenticated:
//             principal_name:
//               exact: "cluster.local/ns/default/sa/admin"
//         - authenticated:
//             principal_name:
//               exact: "cluster.local/ns/default/sa/superuser"
//     "product-viewer":
//       permissions:
//           - and_rules:
//               rules:
//                 - header: { name: ":method", exact_match: "GET" }
//                 - header: { name: ":path", regex_match: "/products(/.*)?" }
//                 - or_rules:
//                     rules:
//                       - destination_port: 80
//                       - destination_port: 443
//       principals:
//         - any: true
//
type RBAC struct {
	// The action to take if a policy matches. The request is allowed if and only if:
	//
	//   * `action` is "ALLOWED" and at least one policy matches
	//   * `action` is "DENY" and none of the policies match
	Action RBAC_Action `protobuf:"varint,1,opt,name=action,proto3,enum=envoy.config.rbac.v2.RBAC_Action" json:"action,omitempty"`
	// Maps from policy name to policy. A match occurs when at least one policy matches the request.
	Policies             map[string]*Policy `protobuf:"bytes,2,rep,name=policies,proto3" json:"policies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *RBAC) Reset()         { *m = RBAC{} }
func (m *RBAC) String() string { return proto.CompactTextString(m) }
func (*RBAC) ProtoMessage()    {}
func (*RBAC) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8a2b527e1e731e1, []int{0}
}

func (m *RBAC) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RBAC.Unmarshal(m, b)
}
func (m *RBAC) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RBAC.Marshal(b, m, deterministic)
}
func (m *RBAC) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RBAC.Merge(m, src)
}
func (m *RBAC) XXX_Size() int {
	return xxx_messageInfo_RBAC.Size(m)
}
func (m *RBAC) XXX_DiscardUnknown() {
	xxx_messageInfo_RBAC.DiscardUnknown(m)
}

var xxx_messageInfo_RBAC proto.InternalMessageInfo

func (m *RBAC) GetAction() RBAC_Action {
	if m != nil {
		return m.Action
	}
	return RBAC_ALLOW
}

func (m *RBAC) GetPolicies() map[string]*Policy {
	if m != nil {
		return m.Policies
	}
	return nil
}

// Policy specifies a role and the principals that are assigned/denied the role. A policy matches if
// and only if at least one of its permissions match the action taking place AND at least one of its
// principals match the downstream AND the condition is true if specified.
type Policy struct {
	// Required. The set of permissions that define a role. Each permission is matched with OR
	// semantics. To match all actions for this policy, a single Permission with the `any` field set
	// to true should be used.
	Permissions []*Permission `protobuf:"bytes,1,rep,name=permissions,proto3" json:"permissions,omitempty"`
	// Required. The set of principals that are assigned/denied the role based on “action”. Each
	// principal is matched with OR semantics. To match all downstreams for this policy, a single
	// Principal with the `any` field set to true should be used.
	Principals []*Principal `protobuf:"bytes,2,rep,name=principals,proto3" json:"principals,omitempty"`
	// An optional symbolic expression specifying an access control
	// :ref:`condition <arch_overview_condition>`. The condition is combined
	// with the permissions and the principals as a clause with AND semantics.
	Condition            *v1alpha1.Expr `protobuf:"bytes,3,opt,name=condition,proto3" json:"condition,omitempty"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

func (m *Policy) Reset()         { *m = Policy{} }
func (m *Policy) String() string { return proto.CompactTextString(m) }
func (*Policy) ProtoMessage()    {}
func (*Policy) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8a2b527e1e731e1, []int{1}
}

func (m *Policy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Policy.Unmarshal(m, b)
}
func (m *Policy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Policy.Marshal(b, m, deterministic)
}
func (m *Policy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Policy.Merge(m, src)
}
func (m *Policy) XXX_Size() int {
	return xxx_messageInfo_Policy.Size(m)
}
func (m *Policy) XXX_DiscardUnknown() {
	xxx_messageInfo_Policy.DiscardUnknown(m)
}

var xxx_messageInfo_Policy proto.InternalMessageInfo

func (m *Policy) GetPermissions() []*Permission {
	if m != nil {
		return m.Permissions
	}
	return nil
}

func (m *Policy) GetPrincipals() []*Principal {
	if m != nil {
		return m.Principals
	}
	return nil
}

func (m *Policy) GetCondition() *v1alpha1.Expr {
	if m != nil {
		return m.Condition
	}
	return nil
}

// Permission defines an action (or actions) that a principal can take.
// [#next-free-field: 10]
type Permission struct {
	// Types that are valid to be assigned to Rule:
	//	*Permission_AndRules
	//	*Permission_OrRules
	//	*Permission_Any
	//	*Permission_Header
	//	*Permission_DestinationIp
	//	*Permission_DestinationPort
	//	*Permission_Metadata
	//	*Permission_NotRule
	//	*Permission_RequestedServerName
	Rule                 isPermission_Rule `protobuf_oneof:"rule"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *Permission) Reset()         { *m = Permission{} }
func (m *Permission) String() string { return proto.CompactTextString(m) }
func (*Permission) ProtoMessage()    {}
func (*Permission) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8a2b527e1e731e1, []int{2}
}

func (m *Permission) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Permission.Unmarshal(m, b)
}
func (m *Permission) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Permission.Marshal(b, m, deterministic)
}
func (m *Permission) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Permission.Merge(m, src)
}
func (m *Permission) XXX_Size() int {
	return xxx_messageInfo_Permission.Size(m)
}
func (m *Permission) XXX_DiscardUnknown() {
	xxx_messageInfo_Permission.DiscardUnknown(m)
}

var xxx_messageInfo_Permission proto.InternalMessageInfo

type isPermission_Rule interface {
	isPermission_Rule()
}

type Permission_AndRules struct {
	AndRules *Permission_Set `protobuf:"bytes,1,opt,name=and_rules,json=andRules,proto3,oneof"`
}

type Permission_OrRules struct {
	OrRules *Permission_Set `protobuf:"bytes,2,opt,name=or_rules,json=orRules,proto3,oneof"`
}

type Permission_Any struct {
	Any bool `protobuf:"varint,3,opt,name=any,proto3,oneof"`
}

type Permission_Header struct {
	Header *route.HeaderMatcher `protobuf:"bytes,4,opt,name=header,proto3,oneof"`
}

type Permission_DestinationIp struct {
	DestinationIp *core.CidrRange `protobuf:"bytes,5,opt,name=destination_ip,json=destinationIp,proto3,oneof"`
}

type Permission_DestinationPort struct {
	DestinationPort uint32 `protobuf:"varint,6,opt,name=destination_port,json=destinationPort,proto3,oneof"`
}

type Permission_Metadata struct {
	Metadata *matcher.MetadataMatcher `protobuf:"bytes,7,opt,name=metadata,proto3,oneof"`
}

type Permission_NotRule struct {
	NotRule *Permission `protobuf:"bytes,8,opt,name=not_rule,json=notRule,proto3,oneof"`
}

type Permission_RequestedServerName struct {
	RequestedServerName *matcher.StringMatcher `protobuf:"bytes,9,opt,name=requested_server_name,json=requestedServerName,proto3,oneof"`
}

func (*Permission_AndRules) isPermission_Rule() {}

func (*Permission_OrRules) isPermission_Rule() {}

func (*Permission_Any) isPermission_Rule() {}

func (*Permission_Header) isPermission_Rule() {}

func (*Permission_DestinationIp) isPermission_Rule() {}

func (*Permission_DestinationPort) isPermission_Rule() {}

func (*Permission_Metadata) isPermission_Rule() {}

func (*Permission_NotRule) isPermission_Rule() {}

func (*Permission_RequestedServerName) isPermission_Rule() {}

func (m *Permission) GetRule() isPermission_Rule {
	if m != nil {
		return m.Rule
	}
	return nil
}

func (m *Permission) GetAndRules() *Permission_Set {
	if x, ok := m.GetRule().(*Permission_AndRules); ok {
		return x.AndRules
	}
	return nil
}

func (m *Permission) GetOrRules() *Permission_Set {
	if x, ok := m.GetRule().(*Permission_OrRules); ok {
		return x.OrRules
	}
	return nil
}

func (m *Permission) GetAny() bool {
	if x, ok := m.GetRule().(*Permission_Any); ok {
		return x.Any
	}
	return false
}

func (m *Permission) GetHeader() *route.HeaderMatcher {
	if x, ok := m.GetRule().(*Permission_Header); ok {
		return x.Header
	}
	return nil
}

func (m *Permission) GetDestinationIp() *core.CidrRange {
	if x, ok := m.GetRule().(*Permission_DestinationIp); ok {
		return x.DestinationIp
	}
	return nil
}

func (m *Permission) GetDestinationPort() uint32 {
	if x, ok := m.GetRule().(*Permission_DestinationPort); ok {
		return x.DestinationPort
	}
	return 0
}

func (m *Permission) GetMetadata() *matcher.MetadataMatcher {
	if x, ok := m.GetRule().(*Permission_Metadata); ok {
		return x.Metadata
	}
	return nil
}

func (m *Permission) GetNotRule() *Permission {
	if x, ok := m.GetRule().(*Permission_NotRule); ok {
		return x.NotRule
	}
	return nil
}

func (m *Permission) GetRequestedServerName() *matcher.StringMatcher {
	if x, ok := m.GetRule().(*Permission_RequestedServerName); ok {
		return x.RequestedServerName
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Permission) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Permission_AndRules)(nil),
		(*Permission_OrRules)(nil),
		(*Permission_Any)(nil),
		(*Permission_Header)(nil),
		(*Permission_DestinationIp)(nil),
		(*Permission_DestinationPort)(nil),
		(*Permission_Metadata)(nil),
		(*Permission_NotRule)(nil),
		(*Permission_RequestedServerName)(nil),
	}
}

// Used in the `and_rules` and `or_rules` fields in the `rule` oneof. Depending on the context,
// each are applied with the associated behavior.
type Permission_Set struct {
	Rules                []*Permission `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

func (m *Permission_Set) Reset()         { *m = Permission_Set{} }
func (m *Permission_Set) String() string { return proto.CompactTextString(m) }
func (*Permission_Set) ProtoMessage()    {}
func (*Permission_Set) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8a2b527e1e731e1, []int{2, 0}
}

func (m *Permission_Set) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Permission_Set.Unmarshal(m, b)
}
func (m *Permission_Set) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Permission_Set.Marshal(b, m, deterministic)
}
func (m *Permission_Set) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Permission_Set.Merge(m, src)
}
func (m *Permission_Set) XXX_Size() int {
	return xxx_messageInfo_Permission_Set.Size(m)
}
func (m *Permission_Set) XXX_DiscardUnknown() {
	xxx_messageInfo_Permission_Set.DiscardUnknown(m)
}

var xxx_messageInfo_Permission_Set proto.InternalMessageInfo

func (m *Permission_Set) GetRules() []*Permission {
	if m != nil {
		return m.Rules
	}
	return nil
}

// Principal defines an identity or a group of identities for a downstream subject.
// [#next-free-field: 9]
type Principal struct {
	// Types that are valid to be assigned to Identifier:
	//	*Principal_AndIds
	//	*Principal_OrIds
	//	*Principal_Any
	//	*Principal_Authenticated_
	//	*Principal_SourceIp
	//	*Principal_Header
	//	*Principal_Metadata
	//	*Principal_NotId
	Identifier           isPrincipal_Identifier `protobuf_oneof:"identifier"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *Principal) Reset()         { *m = Principal{} }
func (m *Principal) String() string { return proto.CompactTextString(m) }
func (*Principal) ProtoMessage()    {}
func (*Principal) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8a2b527e1e731e1, []int{3}
}

func (m *Principal) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Principal.Unmarshal(m, b)
}
func (m *Principal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Principal.Marshal(b, m, deterministic)
}
func (m *Principal) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Principal.Merge(m, src)
}
func (m *Principal) XXX_Size() int {
	return xxx_messageInfo_Principal.Size(m)
}
func (m *Principal) XXX_DiscardUnknown() {
	xxx_messageInfo_Principal.DiscardUnknown(m)
}

var xxx_messageInfo_Principal proto.InternalMessageInfo

type isPrincipal_Identifier interface {
	isPrincipal_Identifier()
}

type Principal_AndIds struct {
	AndIds *Principal_Set `protobuf:"bytes,1,opt,name=and_ids,json=andIds,proto3,oneof"`
}

type Principal_OrIds struct {
	OrIds *Principal_Set `protobuf:"bytes,2,opt,name=or_ids,json=orIds,proto3,oneof"`
}

type Principal_Any struct {
	Any bool `protobuf:"varint,3,opt,name=any,proto3,oneof"`
}

type Principal_Authenticated_ struct {
	Authenticated *Principal_Authenticated `protobuf:"bytes,4,opt,name=authenticated,proto3,oneof"`
}

type Principal_SourceIp struct {
	SourceIp *core.CidrRange `protobuf:"bytes,5,opt,name=source_ip,json=sourceIp,proto3,oneof"`
}

type Principal_Header struct {
	Header *route.HeaderMatcher `protobuf:"bytes,6,opt,name=header,proto3,oneof"`
}

type Principal_Metadata struct {
	Metadata *matcher.MetadataMatcher `protobuf:"bytes,7,opt,name=metadata,proto3,oneof"`
}

type Principal_NotId struct {
	NotId *Principal `protobuf:"bytes,8,opt,name=not_id,json=notId,proto3,oneof"`
}

func (*Principal_AndIds) isPrincipal_Identifier() {}

func (*Principal_OrIds) isPrincipal_Identifier() {}

func (*Principal_Any) isPrincipal_Identifier() {}

func (*Principal_Authenticated_) isPrincipal_Identifier() {}

func (*Principal_SourceIp) isPrincipal_Identifier() {}

func (*Principal_Header) isPrincipal_Identifier() {}

func (*Principal_Metadata) isPrincipal_Identifier() {}

func (*Principal_NotId) isPrincipal_Identifier() {}

func (m *Principal) GetIdentifier() isPrincipal_Identifier {
	if m != nil {
		return m.Identifier
	}
	return nil
}

func (m *Principal) GetAndIds() *Principal_Set {
	if x, ok := m.GetIdentifier().(*Principal_AndIds); ok {
		return x.AndIds
	}
	return nil
}

func (m *Principal) GetOrIds() *Principal_Set {
	if x, ok := m.GetIdentifier().(*Principal_OrIds); ok {
		return x.OrIds
	}
	return nil
}

func (m *Principal) GetAny() bool {
	if x, ok := m.GetIdentifier().(*Principal_Any); ok {
		return x.Any
	}
	return false
}

func (m *Principal) GetAuthenticated() *Principal_Authenticated {
	if x, ok := m.GetIdentifier().(*Principal_Authenticated_); ok {
		return x.Authenticated
	}
	return nil
}

func (m *Principal) GetSourceIp() *core.CidrRange {
	if x, ok := m.GetIdentifier().(*Principal_SourceIp); ok {
		return x.SourceIp
	}
	return nil
}

func (m *Principal) GetHeader() *route.HeaderMatcher {
	if x, ok := m.GetIdentifier().(*Principal_Header); ok {
		return x.Header
	}
	return nil
}

func (m *Principal) GetMetadata() *matcher.MetadataMatcher {
	if x, ok := m.GetIdentifier().(*Principal_Metadata); ok {
		return x.Metadata
	}
	return nil
}

func (m *Principal) GetNotId() *Principal {
	if x, ok := m.GetIdentifier().(*Principal_NotId); ok {
		return x.NotId
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Principal) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Principal_AndIds)(nil),
		(*Principal_OrIds)(nil),
		(*Principal_Any)(nil),
		(*Principal_Authenticated_)(nil),
		(*Principal_SourceIp)(nil),
		(*Principal_Header)(nil),
		(*Principal_Metadata)(nil),
		(*Principal_NotId)(nil),
	}
}

// Used in the `and_ids` and `or_ids` fields in the `identifier` oneof. Depending on the context,
// each are applied with the associated behavior.
type Principal_Set struct {
	Ids                  []*Principal `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"`
	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
	XXX_unrecognized     []byte       `json:"-"`
	XXX_sizecache        int32        `json:"-"`
}

func (m *Principal_Set) Reset()         { *m = Principal_Set{} }
func (m *Principal_Set) String() string { return proto.CompactTextString(m) }
func (*Principal_Set) ProtoMessage()    {}
func (*Principal_Set) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8a2b527e1e731e1, []int{3, 0}
}

func (m *Principal_Set) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Principal_Set.Unmarshal(m, b)
}
func (m *Principal_Set) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Principal_Set.Marshal(b, m, deterministic)
}
func (m *Principal_Set) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Principal_Set.Merge(m, src)
}
func (m *Principal_Set) XXX_Size() int {
	return xxx_messageInfo_Principal_Set.Size(m)
}
func (m *Principal_Set) XXX_DiscardUnknown() {
	xxx_messageInfo_Principal_Set.DiscardUnknown(m)
}

var xxx_messageInfo_Principal_Set proto.InternalMessageInfo

func (m *Principal_Set) GetIds() []*Principal {
	if m != nil {
		return m.Ids
	}
	return nil
}

// Authentication attributes for a downstream.
type Principal_Authenticated struct {
	// The name of the principal. If set, The URI SAN or DNS SAN in that order is used from the
	// certificate, otherwise the subject field is used. If unset, it applies to any user that is
	// authenticated.
	PrincipalName        *matcher.StringMatcher `protobuf:"bytes,2,opt,name=principal_name,json=principalName,proto3" json:"principal_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *Principal_Authenticated) Reset()         { *m = Principal_Authenticated{} }
func (m *Principal_Authenticated) String() string { return proto.CompactTextString(m) }
func (*Principal_Authenticated) ProtoMessage()    {}
func (*Principal_Authenticated) Descriptor() ([]byte, []int) {
	return fileDescriptor_e8a2b527e1e731e1, []int{3, 1}
}

func (m *Principal_Authenticated) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Principal_Authenticated.Unmarshal(m, b)
}
func (m *Principal_Authenticated) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Principal_Authenticated.Marshal(b, m, deterministic)
}
func (m *Principal_Authenticated) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Principal_Authenticated.Merge(m, src)
}
func (m *Principal_Authenticated) XXX_Size() int {
	return xxx_messageInfo_Principal_Authenticated.Size(m)
}
func (m *Principal_Authenticated) XXX_DiscardUnknown() {
	xxx_messageInfo_Principal_Authenticated.DiscardUnknown(m)
}

var xxx_messageInfo_Principal_Authenticated proto.InternalMessageInfo

func (m *Principal_Authenticated) GetPrincipalName() *matcher.StringMatcher {
	if m != nil {
		return m.PrincipalName
	}
	return nil
}

func init() {
	proto.RegisterEnum("envoy.config.rbac.v2.RBAC_Action", RBAC_Action_name, RBAC_Action_value)
	proto.RegisterType((*RBAC)(nil), "envoy.config.rbac.v2.RBAC")
	proto.RegisterMapType((map[string]*Policy)(nil), "envoy.config.rbac.v2.RBAC.PoliciesEntry")
	proto.RegisterType((*Policy)(nil), "envoy.config.rbac.v2.Policy")
	proto.RegisterType((*Permission)(nil), "envoy.config.rbac.v2.Permission")
	proto.RegisterType((*Permission_Set)(nil), "envoy.config.rbac.v2.Permission.Set")
	proto.RegisterType((*Principal)(nil), "envoy.config.rbac.v2.Principal")
	proto.RegisterType((*Principal_Set)(nil), "envoy.config.rbac.v2.Principal.Set")
	proto.RegisterType((*Principal_Authenticated)(nil), "envoy.config.rbac.v2.Principal.Authenticated")
}

func init() { proto.RegisterFile("envoy/config/rbac/v2/rbac.proto", fileDescriptor_e8a2b527e1e731e1) }

var fileDescriptor_e8a2b527e1e731e1 = []byte{
	// 885 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xd1, 0x6e, 0x23, 0x35,
	0x14, 0xcd, 0x4c, 0x92, 0xe9, 0xcc, 0x8d, 0x52, 0x82, 0x01, 0x31, 0x0a, 0xb0, 0xcd, 0x66, 0x41,
	0x8a, 0x90, 0x98, 0x51, 0x83, 0x84, 0x16, 0x0a, 0x88, 0x4c, 0xb7, 0x22, 0x41, 0xdd, 0xa5, 0x9a,
	0x0a, 0xad, 0xf6, 0x29, 0x72, 0xc7, 0xde, 0xd4, 0x90, 0xd8, 0x83, 0xc7, 0x89, 0x9a, 0x47, 0x7e,
	0x81, 0x0f, 0xe0, 0x0b, 0xf8, 0x27, 0x7e, 0x03, 0xf5, 0x65, 0x91, 0xed, 0x49, 0x9a, 0x48, 0xdd,
	0xcd, 0x46, 0xe2, 0xa5, 0xb5, 0xe2, 0x73, 0x8e, 0xef, 0xbd, 0x3e, 0xc7, 0x03, 0x47, 0x94, 0x2f,
	0xc4, 0x32, 0xce, 0x04, 0x7f, 0xc9, 0x26, 0xb1, 0xbc, 0xc2, 0x59, 0xbc, 0xe8, 0x9b, 0xff, 0x51,
	0x2e, 0x85, 0x12, 0xe8, 0x7d, 0x03, 0x88, 0x2c, 0x20, 0x32, 0x1b, 0x8b, 0x7e, 0xbb, 0xa4, 0xe1,
	0x9c, 0x69, 0x78, 0x26, 0x24, 0x8d, 0x31, 0x21, 0x92, 0x16, 0x85, 0xa5, 0xb5, 0x1f, 0x6c, 0x01,
	0xa4, 0x98, 0x2b, 0x6a, 0xff, 0x96, 0xfb, 0x0f, 0xed, 0xbe, 0x5a, 0xe6, 0x34, 0x9e, 0x61, 0x95,
	0x5d, 0x53, 0x19, 0xcf, 0xa8, 0xc2, 0x04, 0x2b, 0x5c, 0x42, 0x8e, 0xee, 0x81, 0x14, 0x4a, 0x32,
	0x3e, 0x29, 0x01, 0x9f, 0x4d, 0x84, 0x98, 0x4c, 0xa9, 0x39, 0x84, 0xde, 0xe4, 0x32, 0x5e, 0x1c,
	0xe3, 0x69, 0x7e, 0x8d, 0x8f, 0xe3, 0x62, 0xc9, 0x15, 0xbe, 0x29, 0x61, 0x1f, 0x2e, 0xf0, 0x94,
	0x11, 0xac, 0x68, 0xbc, 0x5a, 0xd8, 0x8d, 0xee, 0x1f, 0x2e, 0xd4, 0xd2, 0x64, 0x70, 0x8a, 0xbe,
	0x06, 0x0f, 0x67, 0x8a, 0x09, 0x1e, 0x3a, 0x1d, 0xa7, 0x77, 0xd8, 0x7f, 0x18, 0xdd, 0xd7, 0x74,
	0xa4, 0xb1, 0xd1, 0xc0, 0x00, 0xd3, 0x92, 0x80, 0x9e, 0x80, 0x9f, 0x8b, 0x29, 0xcb, 0x18, 0x2d,
	0x42, 0xb7, 0x53, 0xed, 0x35, 0xfa, 0xbd, 0x37, 0x90, 0x2f, 0x4a, 0xe8, 0x19, 0x57, 0x72, 0x99,
	0xae, 0x99, 0xed, 0x17, 0xd0, 0xdc, 0xda, 0x42, 0x2d, 0xa8, 0xfe, 0x46, 0x97, 0xa6, 0x9c, 0x20,
	0xd5, 0x4b, 0xd4, 0x87, 0xfa, 0x02, 0x4f, 0xe7, 0x34, 0x74, 0x3b, 0x4e, 0xaf, 0xd1, 0xff, 0xf8,
	0xfe, 0x53, 0x8c, 0xca, 0x32, 0xb5, 0xd0, 0x6f, 0xdc, 0xc7, 0x4e, 0xf7, 0x13, 0xf0, 0x6c, 0xc9,
	0x28, 0x80, 0xfa, 0xe0, 0xfc, 0xfc, 0xe7, 0xe7, 0xad, 0x0a, 0xf2, 0xa1, 0xf6, 0xe4, 0xec, 0xd9,
	0x8b, 0x96, 0xd3, 0xfd, 0xc7, 0x01, 0xcf, 0x92, 0xd0, 0x39, 0x34, 0x72, 0x2a, 0x67, 0xac, 0x28,
	0x98, 0xe0, 0x45, 0xe8, 0x98, 0x6e, 0x3a, 0xaf, 0x39, 0x67, 0x0d, 0x4c, 0xfc, 0xdb, 0xa4, 0xfe,
	0xa7, 0xe3, 0xfa, 0x4e, 0xba, 0x49, 0x47, 0x23, 0x80, 0x5c, 0x32, 0x9e, 0xb1, 0x1c, 0x4f, 0x57,
	0xa3, 0x39, 0x7a, 0x8d, 0xd8, 0x0a, 0xb7, 0xa1, 0xb5, 0x41, 0x46, 0xdf, 0x42, 0x90, 0x09, 0x4e,
	0x98, 0xb9, 0xa1, 0xaa, 0x69, 0xff, 0x41, 0x64, 0xef, 0x3e, 0xc2, 0x39, 0x8b, 0xf4, 0xdd, 0x47,
	0xab, 0xbb, 0x8f, 0xce, 0x6e, 0x72, 0x99, 0xde, 0x11, 0xba, 0x7f, 0xd5, 0x01, 0xee, 0xca, 0x45,
	0xa7, 0x10, 0x60, 0x4e, 0xc6, 0x72, 0x3e, 0xa5, 0x85, 0x99, 0x6f, 0xa3, 0xff, 0xe9, 0xae, 0x1e,
	0xa3, 0x4b, 0xaa, 0x86, 0x95, 0xd4, 0xc7, 0x9c, 0xa4, 0x9a, 0x87, 0x06, 0xe0, 0x0b, 0x59, 0x6a,
	0xb8, 0x7b, 0x69, 0x1c, 0x08, 0x69, 0x25, 0x3e, 0x82, 0x2a, 0xe6, 0x4b, 0xd3, 0x8e, 0x9f, 0x1c,
	0xdc, 0x26, 0xb5, 0x5f, 0x5d, 0xdf, 0x19, 0x56, 0x52, 0xfd, 0x2b, 0x3a, 0x01, 0xef, 0x9a, 0x62,
	0x42, 0x65, 0x58, 0x33, 0xea, 0x2b, 0x43, 0xea, 0x6e, 0x17, 0xfd, 0xc8, 0x06, 0x69, 0x68, 0x10,
	0x4f, 0x6d, 0x32, 0x86, 0x95, 0xb4, 0xa4, 0xa0, 0x33, 0x38, 0x24, 0xb4, 0x50, 0x8c, 0x63, 0xdd,
	0xff, 0x98, 0xe5, 0x61, 0x7d, 0xcb, 0x32, 0xa5, 0x88, 0x0e, 0x6d, 0x74, 0xca, 0x88, 0x4c, 0x31,
	0x9f, 0xd0, 0x61, 0x25, 0x6d, 0x6e, 0xb0, 0x46, 0x39, 0xfa, 0x0a, 0x5a, 0x9b, 0x32, 0xb9, 0x90,
	0x2a, 0xf4, 0x3a, 0x4e, 0xaf, 0x99, 0x04, 0xb7, 0x89, 0xf7, 0x79, 0x2d, 0x7c, 0xf5, 0xaa, 0x3a,
	0xac, 0xa4, 0xef, 0x6c, 0x80, 0x2e, 0x84, 0x54, 0x7a, 0x36, 0xab, 0x20, 0x87, 0x07, 0xe6, 0xe0,
	0x47, 0xe5, 0xc1, 0x3a, 0xc9, 0x51, 0x99, 0xe4, 0xe8, 0x69, 0x89, 0xb9, 0xab, 0x7f, 0x4d, 0x43,
	0xdf, 0x81, 0xcf, 0x85, 0x32, 0xf3, 0x0d, 0x7d, 0x23, 0xb1, 0xd3, 0x86, 0x7a, 0xb4, 0x5c, 0x28,
	0x3d, 0x5b, 0xf4, 0x1c, 0x3e, 0x90, 0xf4, 0xf7, 0x39, 0x2d, 0x14, 0x25, 0xe3, 0x82, 0xca, 0x05,
	0x95, 0x63, 0x8e, 0x67, 0x34, 0x0c, 0xb6, 0x86, 0xb9, 0x55, 0xce, 0xa5, 0x79, 0x58, 0xee, 0x8a,
	0x79, 0x6f, 0xad, 0x70, 0x69, 0x04, 0x9e, 0xe1, 0x19, 0x6d, 0xff, 0x08, 0xd5, 0x4b, 0xaa, 0xd0,
	0x0f, 0x50, 0x5f, 0xd9, 0x67, 0xdf, 0x88, 0x58, 0x62, 0xd2, 0x80, 0x9a, 0x5e, 0xa0, 0xea, 0xbf,
	0x89, 0xd3, 0xfd, 0xbb, 0x0e, 0xc1, 0x3a, 0x02, 0xe8, 0x7b, 0x38, 0xd0, 0xfe, 0x64, 0x64, 0xe5,
	0xce, 0x47, 0x3b, 0x42, 0x53, 0x1a, 0xcb, 0xc3, 0x9c, 0x8c, 0x88, 0x0e, 0x8b, 0x27, 0xa4, 0xa1,
	0xbb, 0xfb, 0xd0, 0xeb, 0x42, 0x6a, 0xf6, 0x1b, 0x5d, 0xf9, 0x0b, 0x34, 0xf1, 0x5c, 0x5d, 0x53,
	0xae, 0x58, 0x86, 0x15, 0x25, 0xa5, 0x39, 0xbf, 0xd8, 0x75, 0xc2, 0x60, 0x93, 0xa4, 0x8d, 0xb6,
	0xa5, 0x82, 0x4e, 0x20, 0x28, 0xc4, 0x5c, 0x66, 0xf4, 0xed, 0xad, 0xea, 0x5b, 0xc2, 0x28, 0xdf,
	0x48, 0x8a, 0xb7, 0x7f, 0x52, 0xfe, 0x07, 0xab, 0x3e, 0x06, 0x4f, 0x5b, 0x95, 0x91, 0xd2, 0xa8,
	0xbb, 0x9e, 0x38, 0x3d, 0x6a, 0x2e, 0xd4, 0x88, 0xb4, 0x13, 0x6b, 0xa6, 0x13, 0xa8, 0xda, 0xbb,
	0xde, 0xf3, 0x81, 0xd4, 0xac, 0xf6, 0x18, 0x9a, 0x5b, 0xc3, 0x45, 0x43, 0x38, 0x5c, 0x3f, 0x9c,
	0xd6, 0xf3, 0xee, 0x5b, 0x7a, 0x3e, 0x6d, 0xae, 0x89, 0xda, 0xeb, 0x3f, 0xd5, 0x7c, 0xa7, 0xe5,
	0x26, 0xef, 0x02, 0x30, 0xa2, 0xe5, 0x5f, 0x32, 0x2a, 0x8d, 0x5d, 0x93, 0x63, 0xe8, 0x32, 0x61,
	0xe5, 0x72, 0x29, 0x6e, 0x96, 0xf7, 0x96, 0x9c, 0x04, 0xe9, 0x15, 0xce, 0x2e, 0xf4, 0x67, 0xf6,
	0xc2, 0xb9, 0xf2, 0xcc, 0xf7, 0xf6, 0xcb, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xd9, 0xce, 0xc7,
	0x9a, 0x6d, 0x08, 0x00, 0x00,
}
   07070100000122000041ED000003E800000064000000045E17A24700000000000000000000000000000000000000000000003700000000cilium-proxy-20200109/go/envoy/config/resource_monitor    07070100000123000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004200000000cilium-proxy-20200109/go/envoy/config/resource_monitor/fixed_heap 07070100000124000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004A00000000cilium-proxy-20200109/go/envoy/config/resource_monitor/fixed_heap/v2alpha 07070100000125000081A4000003E800000064000000015E17A24700000F90000000000000000000000000000000000000005B00000000cilium-proxy-20200109/go/envoy/config/resource_monitor/fixed_heap/v2alpha/fixed_heap.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/resource_monitor/fixed_heap/v2alpha/fixed_heap.proto

package envoy_config_resource_monitor_fixed_heap_v2alpha

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// The fixed heap resource monitor reports the Envoy process memory pressure, computed as a
// fraction of currently reserved heap memory divided by a statically configured maximum
// specified in the FixedHeapConfig.
type FixedHeapConfig struct {
	MaxHeapSizeBytes     uint64   `protobuf:"varint,1,opt,name=max_heap_size_bytes,json=maxHeapSizeBytes,proto3" json:"max_heap_size_bytes,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *FixedHeapConfig) Reset()         { *m = FixedHeapConfig{} }
func (m *FixedHeapConfig) String() string { return proto.CompactTextString(m) }
func (*FixedHeapConfig) ProtoMessage()    {}
func (*FixedHeapConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_141ee15b3c15e2df, []int{0}
}

func (m *FixedHeapConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FixedHeapConfig.Unmarshal(m, b)
}
func (m *FixedHeapConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FixedHeapConfig.Marshal(b, m, deterministic)
}
func (m *FixedHeapConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FixedHeapConfig.Merge(m, src)
}
func (m *FixedHeapConfig) XXX_Size() int {
	return xxx_messageInfo_FixedHeapConfig.Size(m)
}
func (m *FixedHeapConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_FixedHeapConfig.DiscardUnknown(m)
}

var xxx_messageInfo_FixedHeapConfig proto.InternalMessageInfo

func (m *FixedHeapConfig) GetMaxHeapSizeBytes() uint64 {
	if m != nil {
		return m.MaxHeapSizeBytes
	}
	return 0
}

func init() {
	proto.RegisterType((*FixedHeapConfig)(nil), "envoy.config.resource_monitor.fixed_heap.v2alpha.FixedHeapConfig")
}

func init() {
	proto.RegisterFile("envoy/config/resource_monitor/fixed_heap/v2alpha/fixed_heap.proto", fileDescriptor_141ee15b3c15e2df)
}

var fileDescriptor_141ee15b3c15e2df = []byte{
	// 209 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x72, 0x4c, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x2f, 0x4a, 0x2d, 0xce, 0x2f, 0x2d, 0x4a,
	0x4e, 0x8d, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xd2, 0x4f, 0xcb, 0xac, 0x48, 0x4d, 0x89,
	0xcf, 0x48, 0x4d, 0x2c, 0xd0, 0x2f, 0x33, 0x4a, 0xcc, 0x29, 0xc8, 0x48, 0x44, 0x12, 0xd2, 0x2b,
	0x28, 0xca, 0x2f, 0xc9, 0x17, 0x32, 0x00, 0x1b, 0xa1, 0x07, 0x31, 0x42, 0x0f, 0xdd, 0x08, 0x3d,
	0x24, 0xf5, 0x50, 0x23, 0xa4, 0xc4, 0xcb, 0x12, 0x73, 0x32, 0x53, 0x12, 0x4b, 0x52, 0xf5, 0x61,
	0x0c, 0x88, 0x51, 0x4a, 0x9e, 0x5c, 0xfc, 0x6e, 0x20, 0xe5, 0x1e, 0xa9, 0x89, 0x05, 0xce, 0x60,
	0xf3, 0x84, 0xcc, 0xb8, 0x84, 0x73, 0x13, 0x2b, 0xc0, 0xfa, 0xe3, 0x8b, 0x33, 0xab, 0x52, 0xe3,
	0x93, 0x2a, 0x4b, 0x52, 0x8b, 0x25, 0x18, 0x15, 0x18, 0x35, 0x58, 0x9c, 0xd8, 0x7f, 0x39, 0xb1,
	0x18, 0x31, 0x29, 0x30, 0x04, 0x09, 0xe4, 0x26, 0x56, 0x80, 0x34, 0x05, 0x67, 0x56, 0xa5, 0x3a,
	0x81, 0x14, 0x38, 0x05, 0x71, 0xd9, 0x65, 0xe6, 0xeb, 0x81, 0x9d, 0x56, 0x50, 0x94, 0x5f, 0x51,
	0xa9, 0x47, 0xaa, 0x2b, 0x9d, 0xf8, 0xe0, 0x4e, 0x09, 0x00, 0x39, 0x2e, 0x80, 0x31, 0x89, 0x0d,
	0xec, 0x4a, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2f, 0xf3, 0x0c, 0xc4, 0x35, 0x01, 0x00,
	0x00,
}
07070100000126000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000004900000000cilium-proxy-20200109/go/envoy/config/resource_monitor/injected_resource  07070100000127000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000005100000000cilium-proxy-20200109/go/envoy/config/resource_monitor/injected_resource/v2alpha  07070100000128000081A4000003E800000064000000015E17A2470000101A000000000000000000000000000000000000006900000000cilium-proxy-20200109/go/envoy/config/resource_monitor/injected_resource/v2alpha/injected_resource.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/resource_monitor/injected_resource/v2alpha/injected_resource.proto

package envoy_config_resource_monitor_injected_resource_v2alpha

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// The injected resource monitor allows injecting a synthetic resource pressure into Envoy
// via a text file, which must contain a floating-point number in the range [0..1] representing
// the resource pressure and be updated atomically by a symbolic link swap.
// This is intended primarily for integration tests to force Envoy into an overloaded state.
type InjectedResourceConfig struct {
	Filename             string   `protobuf:"bytes,1,opt,name=filename,proto3" json:"filename,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *InjectedResourceConfig) Reset()         { *m = InjectedResourceConfig{} }
func (m *InjectedResourceConfig) String() string { return proto.CompactTextString(m) }
func (*InjectedResourceConfig) ProtoMessage()    {}
func (*InjectedResourceConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_de2fb4e1cfb2f415, []int{0}
}

func (m *InjectedResourceConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_InjectedResourceConfig.Unmarshal(m, b)
}
func (m *InjectedResourceConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_InjectedResourceConfig.Marshal(b, m, deterministic)
}
func (m *InjectedResourceConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_InjectedResourceConfig.Merge(m, src)
}
func (m *InjectedResourceConfig) XXX_Size() int {
	return xxx_messageInfo_InjectedResourceConfig.Size(m)
}
func (m *InjectedResourceConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_InjectedResourceConfig.DiscardUnknown(m)
}

var xxx_messageInfo_InjectedResourceConfig proto.InternalMessageInfo

func (m *InjectedResourceConfig) GetFilename() string {
	if m != nil {
		return m.Filename
	}
	return ""
}

func init() {
	proto.RegisterType((*InjectedResourceConfig)(nil), "envoy.config.resource_monitor.injected_resource.v2alpha.InjectedResourceConfig")
}

func init() {
	proto.RegisterFile("envoy/config/resource_monitor/injected_resource/v2alpha/injected_resource.proto", fileDescriptor_de2fb4e1cfb2f415)
}

var fileDescriptor_de2fb4e1cfb2f415 = []byte{
	// 189 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xf2, 0x4f, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x2f, 0x4a, 0x2d, 0xce, 0x2f, 0x2d, 0x4a,
	0x4e, 0x8d, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xd2, 0xcf, 0xcc, 0xcb, 0x4a, 0x4d, 0x2e,
	0x49, 0x4d, 0x89, 0x87, 0xc9, 0xe8, 0x97, 0x19, 0x25, 0xe6, 0x14, 0x64, 0x24, 0x62, 0xca, 0xe8,
	0x15, 0x14, 0xe5, 0x97, 0xe4, 0x0b, 0x99, 0x83, 0x0d, 0xd4, 0x83, 0x18, 0xa8, 0x87, 0x6e, 0xa0,
	0x1e, 0xa6, 0x36, 0xa8, 0x81, 0x52, 0xe2, 0x65, 0x89, 0x39, 0x99, 0x29, 0x89, 0x25, 0xa9, 0xfa,
	0x30, 0x06, 0xc4, 0x44, 0x25, 0x5b, 0x2e, 0x31, 0x4f, 0xa8, 0xae, 0x20, 0xa8, 0x26, 0x67, 0xb0,
	0xe9, 0x42, 0xca, 0x5c, 0x1c, 0x69, 0x99, 0x39, 0xa9, 0x79, 0x89, 0xb9, 0xa9, 0x12, 0x8c, 0x0a,
	0x8c, 0x1a, 0x9c, 0x4e, 0xec, 0xbf, 0x9c, 0x58, 0x8a, 0x98, 0x14, 0x18, 0x83, 0xe0, 0x12, 0x4e,
	0x09, 0x5c, 0xae, 0x99, 0xf9, 0x7a, 0x60, 0x57, 0x15, 0x14, 0xe5, 0x57, 0x54, 0xea, 0x91, 0xe9,
	0x40, 0x27, 0x51, 0x74, 0x57, 0x04, 0x80, 0x9c, 0x17, 0xc0, 0x98, 0xc4, 0x06, 0x76, 0xa7, 0x31,
	0x20, 0x00, 0x00, 0xff, 0xff, 0x60, 0xb7, 0x27, 0xef, 0x4c, 0x01, 0x00, 0x00,
}
  07070100000129000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000002C00000000cilium-proxy-20200109/go/envoy/config/retry   0707010000012A000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004000000000cilium-proxy-20200109/go/envoy/config/retry/previous_priorities   0707010000012B000081A4000003E800000064000000015E17A24700001704000000000000000000000000000000000000006100000000cilium-proxy-20200109/go/envoy/config/retry/previous_priorities/previous_priorities_config.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/retry/previous_priorities/previous_priorities_config.proto

package envoy_config_retry_previous_priorities

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// A retry host selector that attempts to spread retries between priorities, even if certain
// priorities would not normally be attempted due to higher priorities being available.
//
// As priorities get excluded, load will be distributed amongst the remaining healthy priorities
// based on the relative health of the priorities, matching how load is distributed during regular
// host selection. For example, given priority healths of {100, 50, 50}, the original load will be
// {100, 0, 0} (since P0 has capacity to handle 100% of the traffic). If P0 is excluded, the load
// changes to {0, 50, 50}, because P1 is only able to handle 50% of the traffic, causing the
// remaining to spill over to P2.
//
// Each priority attempted will be excluded until there are no healthy priorities left, at which
// point the list of attempted priorities will be reset, essentially starting from the beginning.
// For example, given three priorities P0, P1, P2 with healthy % of 100, 0 and 50 respectively, the
// following sequence of priorities would be selected (assuming update_frequency = 1):
// Attempt 1: P0 (P0 is 100% healthy)
// Attempt 2: P2 (P0 already attempted, P2 only healthy priority)
// Attempt 3: P0 (no healthy priorities, reset)
// Attempt 4: P2
//
// In the case of all upstream hosts being unhealthy, no adjustments will be made to the original
// priority load, so behavior should be identical to not using this plugin.
//
// Using this PriorityFilter requires rebuilding the priority load, which runs in O(# of
// priorities), which might incur significant overhead for clusters with many priorities.
type PreviousPrioritiesConfig struct {
	// How often the priority load should be updated based on previously attempted priorities. Useful
	// to allow each priorities to receive more than one request before being excluded or to reduce
	// the number of times that the priority load has to be recomputed.
	//
	// For example, by setting this to 2, then the first two attempts (initial attempt and first
	// retry) will use the unmodified priority load. The third and fourth attempt will use priority
	// load which excludes the priorities routed to with the first two attempts, and the fifth and
	// sixth attempt will use the priority load excluding the priorities used for the first four
	// attempts.
	UpdateFrequency      int32    `protobuf:"varint,1,opt,name=update_frequency,json=updateFrequency,proto3" json:"update_frequency,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *PreviousPrioritiesConfig) Reset()         { *m = PreviousPrioritiesConfig{} }
func (m *PreviousPrioritiesConfig) String() string { return proto.CompactTextString(m) }
func (*PreviousPrioritiesConfig) ProtoMessage()    {}
func (*PreviousPrioritiesConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_763b66cb0fac7d2f, []int{0}
}

func (m *PreviousPrioritiesConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_PreviousPrioritiesConfig.Unmarshal(m, b)
}
func (m *PreviousPrioritiesConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_PreviousPrioritiesConfig.Marshal(b, m, deterministic)
}
func (m *PreviousPrioritiesConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_PreviousPrioritiesConfig.Merge(m, src)
}
func (m *PreviousPrioritiesConfig) XXX_Size() int {
	return xxx_messageInfo_PreviousPrioritiesConfig.Size(m)
}
func (m *PreviousPrioritiesConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_PreviousPrioritiesConfig.DiscardUnknown(m)
}

var xxx_messageInfo_PreviousPrioritiesConfig proto.InternalMessageInfo

func (m *PreviousPrioritiesConfig) GetUpdateFrequency() int32 {
	if m != nil {
		return m.UpdateFrequency
	}
	return 0
}

func init() {
	proto.RegisterType((*PreviousPrioritiesConfig)(nil), "envoy.config.retry.previous_priorities.PreviousPrioritiesConfig")
}

func init() {
	proto.RegisterFile("envoy/config/retry/previous_priorities/previous_priorities_config.proto", fileDescriptor_763b66cb0fac7d2f)
}

var fileDescriptor_763b66cb0fac7d2f = []byte{
	// 166 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x72, 0x4f, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x2f, 0x4a, 0x2d, 0x29, 0xaa, 0xd4, 0x2f,
	0x28, 0x4a, 0x2d, 0xcb, 0xcc, 0x2f, 0x2d, 0x8e, 0x2f, 0x28, 0xca, 0xcc, 0x2f, 0xca, 0x2c, 0xc9,
	0x4c, 0x2d, 0xc6, 0x26, 0x16, 0x0f, 0xd1, 0xa4, 0x57, 0x50, 0x94, 0x5f, 0x92, 0x2f, 0xa4, 0x06,
	0x36, 0x48, 0x0f, 0x2a, 0x06, 0x36, 0x48, 0x0f, 0x8b, 0x26, 0x25, 0x57, 0x2e, 0x89, 0x00, 0xa8,
	0x70, 0x00, 0x5c, 0xd4, 0x19, 0xac, 0x4b, 0x48, 0x93, 0x4b, 0xa0, 0xb4, 0x20, 0x25, 0xb1, 0x24,
	0x35, 0x3e, 0xad, 0x28, 0xb5, 0xb0, 0x34, 0x35, 0x2f, 0xb9, 0x52, 0x82, 0x51, 0x81, 0x51, 0x83,
	0x35, 0x88, 0x1f, 0x22, 0xee, 0x06, 0x13, 0x76, 0x0a, 0xe7, 0x32, 0xc9, 0xcc, 0xd7, 0x03, 0xdb,
	0x59, 0x50, 0x94, 0x5f, 0x51, 0xa9, 0x47, 0x9c, 0xf5, 0x4e, 0xb2, 0xb8, 0x2c, 0x0f, 0x00, 0xf9,
	0x22, 0x80, 0x31, 0x89, 0x0d, 0xec, 0x1d, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x90, 0x11,
	0xea, 0x22, 0x19, 0x01, 0x00, 0x00,
}
0707010000012C000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000002C00000000cilium-proxy-20200109/go/envoy/config/trace   0707010000012D000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000002F00000000cilium-proxy-20200109/go/envoy/config/trace/v2    0707010000012E000081A4000003E800000064000000015E17A2470000896E000000000000000000000000000000000000003B00000000cilium-proxy-20200109/go/envoy/config/trace/v2/trace.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/trace/v2/trace.proto

package envoy_config_trace_v2

import (
	fmt "fmt"
	v1 "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	_struct "github.com/golang/protobuf/ptypes/struct"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Available Zipkin collector endpoint versions.
type ZipkinConfig_CollectorEndpointVersion int32

const (
	// Zipkin API v1, JSON over HTTP.
	// [#comment: The default implementation of Zipkin client before this field is added was only v1
	// and the way user configure this was by not explicitly specifying the version. Consequently,
	// before this is added, the corresponding Zipkin collector expected to receive v1 payload.
	// Hence the motivation of adding HTTP_JSON_V1 as the default is to avoid a breaking change when
	// user upgrading Envoy with this change. Furthermore, we also immediately deprecate this field,
	// since in Zipkin realm this v1 version is considered to be not preferable anymore.]
	ZipkinConfig_HTTP_JSON_V1 ZipkinConfig_CollectorEndpointVersion = 0 // Deprecated: Do not use.
	// Zipkin API v2, JSON over HTTP.
	ZipkinConfig_HTTP_JSON ZipkinConfig_CollectorEndpointVersion = 1
	// Zipkin API v2, protobuf over HTTP.
	ZipkinConfig_HTTP_PROTO ZipkinConfig_CollectorEndpointVersion = 2
	// [#not-implemented-hide:]
	ZipkinConfig_GRPC ZipkinConfig_CollectorEndpointVersion = 3
)

var ZipkinConfig_CollectorEndpointVersion_name = map[int32]string{
	0: "HTTP_JSON_V1",
	1: "HTTP_JSON",
	2: "HTTP_PROTO",
	3: "GRPC",
}

var ZipkinConfig_CollectorEndpointVersion_value = map[string]int32{
	"HTTP_JSON_V1": 0,
	"HTTP_JSON":    1,
	"HTTP_PROTO":   2,
	"GRPC":         3,
}

func (x ZipkinConfig_CollectorEndpointVersion) String() string {
	return proto.EnumName(ZipkinConfig_CollectorEndpointVersion_name, int32(x))
}

func (ZipkinConfig_CollectorEndpointVersion) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_0785d24fc8ab55c7, []int{2, 0}
}

type OpenCensusConfig_TraceContext int32

const (
	// No-op default, no trace context is utilized.
	OpenCensusConfig_NONE OpenCensusConfig_TraceContext = 0
	// W3C Trace-Context format "traceparent:" header.
	OpenCensusConfig_TRACE_CONTEXT OpenCensusConfig_TraceContext = 1
	// Binary "grpc-trace-bin:" header.
	OpenCensusConfig_GRPC_TRACE_BIN OpenCensusConfig_TraceContext = 2
	// "X-Cloud-Trace-Context:" header.
	OpenCensusConfig_CLOUD_TRACE_CONTEXT OpenCensusConfig_TraceContext = 3
	// X-B3-* headers.
	OpenCensusConfig_B3 OpenCensusConfig_TraceContext = 4
)

var OpenCensusConfig_TraceContext_name = map[int32]string{
	0: "NONE",
	1: "TRACE_CONTEXT",
	2: "GRPC_TRACE_BIN",
	3: "CLOUD_TRACE_CONTEXT",
	4: "B3",
}

var OpenCensusConfig_TraceContext_value = map[string]int32{
	"NONE":                0,
	"TRACE_CONTEXT":       1,
	"GRPC_TRACE_BIN":      2,
	"CLOUD_TRACE_CONTEXT": 3,
	"B3":                  4,
}

func (x OpenCensusConfig_TraceContext) String() string {
	return proto.EnumName(OpenCensusConfig_TraceContext_name, int32(x))
}

func (OpenCensusConfig_TraceContext) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_0785d24fc8ab55c7, []int{5, 0}
}

// The tracing configuration specifies global
// settings for the HTTP tracer used by Envoy. The configuration is defined by
// the :ref:`Bootstrap <envoy_api_msg_config.bootstrap.v2.Bootstrap>` :ref:`tracing
// <envoy_api_field_config.bootstrap.v2.Bootstrap.tracing>` field. Envoy may support other tracers
// in the future, but right now the HTTP tracer is the only one supported.
type Tracing struct {
	// Provides configuration for the HTTP tracer.
	Http                 *Tracing_Http `protobuf:"bytes,1,opt,name=http,proto3" json:"http,omitempty"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

func (m *Tracing) Reset()         { *m = Tracing{} }
func (m *Tracing) String() string { return proto.CompactTextString(m) }
func (*Tracing) ProtoMessage()    {}
func (*Tracing) Descriptor() ([]byte, []int) {
	return fileDescriptor_0785d24fc8ab55c7, []int{0}
}

func (m *Tracing) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Tracing.Unmarshal(m, b)
}
func (m *Tracing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Tracing.Marshal(b, m, deterministic)
}
func (m *Tracing) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Tracing.Merge(m, src)
}
func (m *Tracing) XXX_Size() int {
	return xxx_messageInfo_Tracing.Size(m)
}
func (m *Tracing) XXX_DiscardUnknown() {
	xxx_messageInfo_Tracing.DiscardUnknown(m)
}

var xxx_messageInfo_Tracing proto.InternalMessageInfo

func (m *Tracing) GetHttp() *Tracing_Http {
	if m != nil {
		return m.Http
	}
	return nil
}

type Tracing_Http struct {
	// The name of the HTTP trace driver to instantiate. The name must match a
	// supported HTTP trace driver. Built-in trace drivers:
	//
	// - *envoy.lightstep*
	// - *envoy.zipkin*
	// - *envoy.dynamic.ot*
	// - *envoy.tracers.datadog*
	// - *envoy.tracers.opencensus*
	// - *envoy.tracers.xray*
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Trace driver specific configuration which depends on the driver being instantiated.
	// See the trace drivers for examples:
	//
	// - :ref:`LightstepConfig <envoy_api_msg_config.trace.v2.LightstepConfig>`
	// - :ref:`ZipkinConfig <envoy_api_msg_config.trace.v2.ZipkinConfig>`
	// - :ref:`DynamicOtConfig <envoy_api_msg_config.trace.v2.DynamicOtConfig>`
	// - :ref:`DatadogConfig <envoy_api_msg_config.trace.v2.DatadogConfig>`
	// - :ref:`OpenCensusConfig <envoy_api_msg_config.trace.v2.OpenCensusConfig>`
	// [#comment: TODO(marco) when XRay is implemented, uncomment the following; - :ref:`XRayConfig
	// <envoy_api_msg_config.trace.v2.XRayConfig>`]
	//
	// Types that are valid to be assigned to ConfigType:
	//	*Tracing_Http_Config
	//	*Tracing_Http_TypedConfig
	ConfigType           isTracing_Http_ConfigType `protobuf_oneof:"config_type"`
	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
	XXX_unrecognized     []byte                    `json:"-"`
	XXX_sizecache        int32                     `json:"-"`
}

func (m *Tracing_Http) Reset()         { *m = Tracing_Http{} }
func (m *Tracing_Http) String() string { return proto.CompactTextString(m) }
func (*Tracing_Http) ProtoMessage()    {}
func (*Tracing_Http) Descriptor() ([]byte, []int) {
	return fileDescriptor_0785d24fc8ab55c7, []int{0, 0}
}

func (m *Tracing_Http) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Tracing_Http.Unmarshal(m, b)
}
func (m *Tracing_Http) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Tracing_Http.Marshal(b, m, deterministic)
}
func (m *Tracing_Http) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Tracing_Http.Merge(m, src)
}
func (m *Tracing_Http) XXX_Size() int {
	return xxx_messageInfo_Tracing_Http.Size(m)
}
func (m *Tracing_Http) XXX_DiscardUnknown() {
	xxx_messageInfo_Tracing_Http.DiscardUnknown(m)
}

var xxx_messageInfo_Tracing_Http proto.InternalMessageInfo

func (m *Tracing_Http) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

type isTracing_Http_ConfigType interface {
	isTracing_Http_ConfigType()
}

type Tracing_Http_Config struct {
	Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"`
}

type Tracing_Http_TypedConfig struct {
	TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"`
}

func (*Tracing_Http_Config) isTracing_Http_ConfigType() {}

func (*Tracing_Http_TypedConfig) isTracing_Http_ConfigType() {}

func (m *Tracing_Http) GetConfigType() isTracing_Http_ConfigType {
	if m != nil {
		return m.ConfigType
	}
	return nil
}

// Deprecated: Do not use.
func (m *Tracing_Http) GetConfig() *_struct.Struct {
	if x, ok := m.GetConfigType().(*Tracing_Http_Config); ok {
		return x.Config
	}
	return nil
}

func (m *Tracing_Http) GetTypedConfig() *any.Any {
	if x, ok := m.GetConfigType().(*Tracing_Http_TypedConfig); ok {
		return x.TypedConfig
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Tracing_Http) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Tracing_Http_Config)(nil),
		(*Tracing_Http_TypedConfig)(nil),
	}
}

// Configuration for the LightStep tracer.
type LightstepConfig struct {
	// The cluster manager cluster that hosts the LightStep collectors.
	CollectorCluster string `protobuf:"bytes,1,opt,name=collector_cluster,json=collectorCluster,proto3" json:"collector_cluster,omitempty"`
	// File containing the access token to the `LightStep
	// <https://lightstep.com/>`_ API.
	AccessTokenFile      string   `protobuf:"bytes,2,opt,name=access_token_file,json=accessTokenFile,proto3" json:"access_token_file,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *LightstepConfig) Reset()         { *m = LightstepConfig{} }
func (m *LightstepConfig) String() string { return proto.CompactTextString(m) }
func (*LightstepConfig) ProtoMessage()    {}
func (*LightstepConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_0785d24fc8ab55c7, []int{1}
}

func (m *LightstepConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_LightstepConfig.Unmarshal(m, b)
}
func (m *LightstepConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_LightstepConfig.Marshal(b, m, deterministic)
}
func (m *LightstepConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_LightstepConfig.Merge(m, src)
}
func (m *LightstepConfig) XXX_Size() int {
	return xxx_messageInfo_LightstepConfig.Size(m)
}
func (m *LightstepConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_LightstepConfig.DiscardUnknown(m)
}

var xxx_messageInfo_LightstepConfig proto.InternalMessageInfo

func (m *LightstepConfig) GetCollectorCluster() string {
	if m != nil {
		return m.CollectorCluster
	}
	return ""
}

func (m *LightstepConfig) GetAccessTokenFile() string {
	if m != nil {
		return m.AccessTokenFile
	}
	return ""
}

// Configuration for the Zipkin tracer.
// [#next-free-field: 6]
type ZipkinConfig struct {
	// The cluster manager cluster that hosts the Zipkin collectors. Note that the
	// Zipkin cluster must be defined in the :ref:`Bootstrap static cluster
	// resources <envoy_api_field_config.bootstrap.v2.Bootstrap.StaticResources.clusters>`.
	CollectorCluster string `protobuf:"bytes,1,opt,name=collector_cluster,json=collectorCluster,proto3" json:"collector_cluster,omitempty"`
	// The API endpoint of the Zipkin service where the spans will be sent. When
	// using a standard Zipkin installation, the API endpoint is typically
	// /api/v1/spans, which is the default value.
	CollectorEndpoint string `protobuf:"bytes,2,opt,name=collector_endpoint,json=collectorEndpoint,proto3" json:"collector_endpoint,omitempty"`
	// Determines whether a 128bit trace id will be used when creating a new
	// trace instance. The default value is false, which will result in a 64 bit trace id being used.
	TraceId_128Bit bool `protobuf:"varint,3,opt,name=trace_id_128bit,json=traceId128bit,proto3" json:"trace_id_128bit,omitempty"`
	// Determines whether client and server spans will share the same span context.
	// The default value is true.
	SharedSpanContext *wrappers.BoolValue `protobuf:"bytes,4,opt,name=shared_span_context,json=sharedSpanContext,proto3" json:"shared_span_context,omitempty"`
	// Determines the selected collector endpoint version. By default, the ``HTTP_JSON_V1`` will be
	// used.
	CollectorEndpointVersion ZipkinConfig_CollectorEndpointVersion `protobuf:"varint,5,opt,name=collector_endpoint_version,json=collectorEndpointVersion,proto3,enum=envoy.config.trace.v2.ZipkinConfig_CollectorEndpointVersion" json:"collector_endpoint_version,omitempty"`
	XXX_NoUnkeyedLiteral     struct{}                              `json:"-"`
	XXX_unrecognized         []byte                                `json:"-"`
	XXX_sizecache            int32                                 `json:"-"`
}

func (m *ZipkinConfig) Reset()         { *m = ZipkinConfig{} }
func (m *ZipkinConfig) String() string { return proto.CompactTextString(m) }
func (*ZipkinConfig) ProtoMessage()    {}
func (*ZipkinConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_0785d24fc8ab55c7, []int{2}
}

func (m *ZipkinConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ZipkinConfig.Unmarshal(m, b)
}
func (m *ZipkinConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ZipkinConfig.Marshal(b, m, deterministic)
}
func (m *ZipkinConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ZipkinConfig.Merge(m, src)
}
func (m *ZipkinConfig) XXX_Size() int {
	return xxx_messageInfo_ZipkinConfig.Size(m)
}
func (m *ZipkinConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_ZipkinConfig.DiscardUnknown(m)
}

var xxx_messageInfo_ZipkinConfig proto.InternalMessageInfo

func (m *ZipkinConfig) GetCollectorCluster() string {
	if m != nil {
		return m.CollectorCluster
	}
	return ""
}

func (m *ZipkinConfig) GetCollectorEndpoint() string {
	if m != nil {
		return m.CollectorEndpoint
	}
	return ""
}

func (m *ZipkinConfig) GetTraceId_128Bit() bool {
	if m != nil {
		return m.TraceId_128Bit
	}
	return false
}

func (m *ZipkinConfig) GetSharedSpanContext() *wrappers.BoolValue {
	if m != nil {
		return m.SharedSpanContext
	}
	return nil
}

func (m *ZipkinConfig) GetCollectorEndpointVersion() ZipkinConfig_CollectorEndpointVersion {
	if m != nil {
		return m.CollectorEndpointVersion
	}
	return ZipkinConfig_HTTP_JSON_V1
}

// DynamicOtConfig is used to dynamically load a tracer from a shared library
// that implements the `OpenTracing dynamic loading API
// <https://github.com/opentracing/opentracing-cpp>`_.
type DynamicOtConfig struct {
	// Dynamic library implementing the `OpenTracing API
	// <https://github.com/opentracing/opentracing-cpp>`_.
	Library string `protobuf:"bytes,1,opt,name=library,proto3" json:"library,omitempty"`
	// The configuration to use when creating a tracer from the given dynamic
	// library.
	Config               *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *DynamicOtConfig) Reset()         { *m = DynamicOtConfig{} }
func (m *DynamicOtConfig) String() string { return proto.CompactTextString(m) }
func (*DynamicOtConfig) ProtoMessage()    {}
func (*DynamicOtConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_0785d24fc8ab55c7, []int{3}
}

func (m *DynamicOtConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DynamicOtConfig.Unmarshal(m, b)
}
func (m *DynamicOtConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DynamicOtConfig.Marshal(b, m, deterministic)
}
func (m *DynamicOtConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DynamicOtConfig.Merge(m, src)
}
func (m *DynamicOtConfig) XXX_Size() int {
	return xxx_messageInfo_DynamicOtConfig.Size(m)
}
func (m *DynamicOtConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_DynamicOtConfig.DiscardUnknown(m)
}

var xxx_messageInfo_DynamicOtConfig proto.InternalMessageInfo

func (m *DynamicOtConfig) GetLibrary() string {
	if m != nil {
		return m.Library
	}
	return ""
}

func (m *DynamicOtConfig) GetConfig() *_struct.Struct {
	if m != nil {
		return m.Config
	}
	return nil
}

// Configuration for the Datadog tracer.
type DatadogConfig struct {
	// The cluster to use for submitting traces to the Datadog agent.
	CollectorCluster string `protobuf:"bytes,1,opt,name=collector_cluster,json=collectorCluster,proto3" json:"collector_cluster,omitempty"`
	// The name used for the service when traces are generated by envoy.
	ServiceName          string   `protobuf:"bytes,2,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *DatadogConfig) Reset()         { *m = DatadogConfig{} }
func (m *DatadogConfig) String() string { return proto.CompactTextString(m) }
func (*DatadogConfig) ProtoMessage()    {}
func (*DatadogConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_0785d24fc8ab55c7, []int{4}
}

func (m *DatadogConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DatadogConfig.Unmarshal(m, b)
}
func (m *DatadogConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DatadogConfig.Marshal(b, m, deterministic)
}
func (m *DatadogConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DatadogConfig.Merge(m, src)
}
func (m *DatadogConfig) XXX_Size() int {
	return xxx_messageInfo_DatadogConfig.Size(m)
}
func (m *DatadogConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_DatadogConfig.DiscardUnknown(m)
}

var xxx_messageInfo_DatadogConfig proto.InternalMessageInfo

func (m *DatadogConfig) GetCollectorCluster() string {
	if m != nil {
		return m.CollectorCluster
	}
	return ""
}

func (m *DatadogConfig) GetServiceName() string {
	if m != nil {
		return m.ServiceName
	}
	return ""
}

// Configuration for the OpenCensus tracer.
// [#next-free-field: 13]
type OpenCensusConfig struct {
	// Configures tracing, e.g. the sampler, max number of annotations, etc.
	TraceConfig *v1.TraceConfig `protobuf:"bytes,1,opt,name=trace_config,json=traceConfig,proto3" json:"trace_config,omitempty"`
	// Enables the stdout exporter if set to true. This is intended for debugging
	// purposes.
	StdoutExporterEnabled bool `protobuf:"varint,2,opt,name=stdout_exporter_enabled,json=stdoutExporterEnabled,proto3" json:"stdout_exporter_enabled,omitempty"`
	// Enables the Stackdriver exporter if set to true. The project_id must also
	// be set.
	StackdriverExporterEnabled bool `protobuf:"varint,3,opt,name=stackdriver_exporter_enabled,json=stackdriverExporterEnabled,proto3" json:"stackdriver_exporter_enabled,omitempty"`
	// The Cloud project_id to use for Stackdriver tracing.
	StackdriverProjectId string `protobuf:"bytes,4,opt,name=stackdriver_project_id,json=stackdriverProjectId,proto3" json:"stackdriver_project_id,omitempty"`
	// (optional) By default, the Stackdriver exporter will connect to production
	// Stackdriver. If stackdriver_address is non-empty, it will instead connect
	// to this address, which is in the gRPC format:
	// https://github.com/grpc/grpc/blob/master/doc/naming.md
	StackdriverAddress string `protobuf:"bytes,10,opt,name=stackdriver_address,json=stackdriverAddress,proto3" json:"stackdriver_address,omitempty"`
	// Enables the Zipkin exporter if set to true. The url and service name must
	// also be set.
	ZipkinExporterEnabled bool `protobuf:"varint,5,opt,name=zipkin_exporter_enabled,json=zipkinExporterEnabled,proto3" json:"zipkin_exporter_enabled,omitempty"`
	// The URL to Zipkin, e.g. "http://127.0.0.1:9411/api/v2/spans"
	ZipkinUrl string `protobuf:"bytes,6,opt,name=zipkin_url,json=zipkinUrl,proto3" json:"zipkin_url,omitempty"`
	// Enables the OpenCensus Agent exporter if set to true. The address must also
	// be set.
	OcagentExporterEnabled bool `protobuf:"varint,11,opt,name=ocagent_exporter_enabled,json=ocagentExporterEnabled,proto3" json:"ocagent_exporter_enabled,omitempty"`
	// The address of the OpenCensus Agent, if its exporter is enabled, in gRPC
	// format: https://github.com/grpc/grpc/blob/master/doc/naming.md
	OcagentAddress string `protobuf:"bytes,12,opt,name=ocagent_address,json=ocagentAddress,proto3" json:"ocagent_address,omitempty"`
	// List of incoming trace context headers we will accept. First one found
	// wins.
	IncomingTraceContext []OpenCensusConfig_TraceContext `protobuf:"varint,8,rep,packed,name=incoming_trace_context,json=incomingTraceContext,proto3,enum=envoy.config.trace.v2.OpenCensusConfig_TraceContext" json:"incoming_trace_context,omitempty"`
	// List of outgoing trace context headers we will produce.
	OutgoingTraceContext []OpenCensusConfig_TraceContext `protobuf:"varint,9,rep,packed,name=outgoing_trace_context,json=outgoingTraceContext,proto3,enum=envoy.config.trace.v2.OpenCensusConfig_TraceContext" json:"outgoing_trace_context,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
	XXX_unrecognized     []byte                          `json:"-"`
	XXX_sizecache        int32                           `json:"-"`
}

func (m *OpenCensusConfig) Reset()         { *m = OpenCensusConfig{} }
func (m *OpenCensusConfig) String() string { return proto.CompactTextString(m) }
func (*OpenCensusConfig) ProtoMessage()    {}
func (*OpenCensusConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_0785d24fc8ab55c7, []int{5}
}

func (m *OpenCensusConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OpenCensusConfig.Unmarshal(m, b)
}
func (m *OpenCensusConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OpenCensusConfig.Marshal(b, m, deterministic)
}
func (m *OpenCensusConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OpenCensusConfig.Merge(m, src)
}
func (m *OpenCensusConfig) XXX_Size() int {
	return xxx_messageInfo_OpenCensusConfig.Size(m)
}
func (m *OpenCensusConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_OpenCensusConfig.DiscardUnknown(m)
}

var xxx_messageInfo_OpenCensusConfig proto.InternalMessageInfo

func (m *OpenCensusConfig) GetTraceConfig() *v1.TraceConfig {
	if m != nil {
		return m.TraceConfig
	}
	return nil
}

func (m *OpenCensusConfig) GetStdoutExporterEnabled() bool {
	if m != nil {
		return m.StdoutExporterEnabled
	}
	return false
}

func (m *OpenCensusConfig) GetStackdriverExporterEnabled() bool {
	if m != nil {
		return m.StackdriverExporterEnabled
	}
	return false
}

func (m *OpenCensusConfig) GetStackdriverProjectId() string {
	if m != nil {
		return m.StackdriverProjectId
	}
	return ""
}

func (m *OpenCensusConfig) GetStackdriverAddress() string {
	if m != nil {
		return m.StackdriverAddress
	}
	return ""
}

func (m *OpenCensusConfig) GetZipkinExporterEnabled() bool {
	if m != nil {
		return m.ZipkinExporterEnabled
	}
	return false
}

func (m *OpenCensusConfig) GetZipkinUrl() string {
	if m != nil {
		return m.ZipkinUrl
	}
	return ""
}

func (m *OpenCensusConfig) GetOcagentExporterEnabled() bool {
	if m != nil {
		return m.OcagentExporterEnabled
	}
	return false
}

func (m *OpenCensusConfig) GetOcagentAddress() string {
	if m != nil {
		return m.OcagentAddress
	}
	return ""
}

func (m *OpenCensusConfig) GetIncomingTraceContext() []OpenCensusConfig_TraceContext {
	if m != nil {
		return m.IncomingTraceContext
	}
	return nil
}

func (m *OpenCensusConfig) GetOutgoingTraceContext() []OpenCensusConfig_TraceContext {
	if m != nil {
		return m.OutgoingTraceContext
	}
	return nil
}

// [#not-implemented-hide:]
// Configuration for AWS X-Ray tracer.
type XRayConfig struct {
	// The endpoint of the X-Ray Daemon where the spans will be sent. Since by default daemon
	// listens to localhost:2000, so the default value is 127.0.0.1:2000.
	DaemonEndpoint string `protobuf:"bytes,1,opt,name=daemon_endpoint,json=daemonEndpoint,proto3" json:"daemon_endpoint,omitempty"`
	// The custom name to name a X-Ray segment. By default will use cluster name.
	SegmentName string `protobuf:"bytes,2,opt,name=segment_name,json=segmentName,proto3" json:"segment_name,omitempty"`
	// The location of custom sampling rule json file.
	SamplingRuleManifest *core.DataSource `protobuf:"bytes,3,opt,name=sampling_rule_manifest,json=samplingRuleManifest,proto3" json:"sampling_rule_manifest,omitempty"`
	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
	XXX_unrecognized     []byte           `json:"-"`
	XXX_sizecache        int32            `json:"-"`
}

func (m *XRayConfig) Reset()         { *m = XRayConfig{} }
func (m *XRayConfig) String() string { return proto.CompactTextString(m) }
func (*XRayConfig) ProtoMessage()    {}
func (*XRayConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_0785d24fc8ab55c7, []int{6}
}

func (m *XRayConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_XRayConfig.Unmarshal(m, b)
}
func (m *XRayConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_XRayConfig.Marshal(b, m, deterministic)
}
func (m *XRayConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_XRayConfig.Merge(m, src)
}
func (m *XRayConfig) XXX_Size() int {
	return xxx_messageInfo_XRayConfig.Size(m)
}
func (m *XRayConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_XRayConfig.DiscardUnknown(m)
}

var xxx_messageInfo_XRayConfig proto.InternalMessageInfo

func (m *XRayConfig) GetDaemonEndpoint() string {
	if m != nil {
		return m.DaemonEndpoint
	}
	return ""
}

func (m *XRayConfig) GetSegmentName() string {
	if m != nil {
		return m.SegmentName
	}
	return ""
}

func (m *XRayConfig) GetSamplingRuleManifest() *core.DataSource {
	if m != nil {
		return m.SamplingRuleManifest
	}
	return nil
}

// Configuration structure.
type TraceServiceConfig struct {
	// The upstream gRPC cluster that hosts the metrics service.
	GrpcService          *core.GrpcService `protobuf:"bytes,1,opt,name=grpc_service,json=grpcService,proto3" json:"grpc_service,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *TraceServiceConfig) Reset()         { *m = TraceServiceConfig{} }
func (m *TraceServiceConfig) String() string { return proto.CompactTextString(m) }
func (*TraceServiceConfig) ProtoMessage()    {}
func (*TraceServiceConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_0785d24fc8ab55c7, []int{7}
}

func (m *TraceServiceConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TraceServiceConfig.Unmarshal(m, b)
}
func (m *TraceServiceConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TraceServiceConfig.Marshal(b, m, deterministic)
}
func (m *TraceServiceConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TraceServiceConfig.Merge(m, src)
}
func (m *TraceServiceConfig) XXX_Size() int {
	return xxx_messageInfo_TraceServiceConfig.Size(m)
}
func (m *TraceServiceConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_TraceServiceConfig.DiscardUnknown(m)
}

var xxx_messageInfo_TraceServiceConfig proto.InternalMessageInfo

func (m *TraceServiceConfig) GetGrpcService() *core.GrpcService {
	if m != nil {
		return m.GrpcService
	}
	return nil
}

func init() {
	proto.RegisterEnum("envoy.config.trace.v2.ZipkinConfig_CollectorEndpointVersion", ZipkinConfig_CollectorEndpointVersion_name, ZipkinConfig_CollectorEndpointVersion_value)
	proto.RegisterEnum("envoy.config.trace.v2.OpenCensusConfig_TraceContext", OpenCensusConfig_TraceContext_name, OpenCensusConfig_TraceContext_value)
	proto.RegisterType((*Tracing)(nil), "envoy.config.trace.v2.Tracing")
	proto.RegisterType((*Tracing_Http)(nil), "envoy.config.trace.v2.Tracing.Http")
	proto.RegisterType((*LightstepConfig)(nil), "envoy.config.trace.v2.LightstepConfig")
	proto.RegisterType((*ZipkinConfig)(nil), "envoy.config.trace.v2.ZipkinConfig")
	proto.RegisterType((*DynamicOtConfig)(nil), "envoy.config.trace.v2.DynamicOtConfig")
	proto.RegisterType((*DatadogConfig)(nil), "envoy.config.trace.v2.DatadogConfig")
	proto.RegisterType((*OpenCensusConfig)(nil), "envoy.config.trace.v2.OpenCensusConfig")
	proto.RegisterType((*XRayConfig)(nil), "envoy.config.trace.v2.XRayConfig")
	proto.RegisterType((*TraceServiceConfig)(nil), "envoy.config.trace.v2.TraceServiceConfig")
}

func init() { proto.RegisterFile("envoy/config/trace/v2/trace.proto", fileDescriptor_0785d24fc8ab55c7) }

var fileDescriptor_0785d24fc8ab55c7 = []byte{
	// 1100 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x51, 0x6e, 0xdb, 0x46,
	0x13, 0x36, 0x65, 0xc5, 0x96, 0x47, 0xb2, 0x44, 0x6f, 0x1c, 0x5b, 0xbf, 0xfe, 0x24, 0xb0, 0x95,
	0x22, 0x35, 0x8a, 0x82, 0xaa, 0x65, 0x37, 0x4d, 0x81, 0x3e, 0xd4, 0x92, 0xd5, 0xd8, 0x6e, 0x2a,
	0x09, 0x94, 0x62, 0xa4, 0x7d, 0x61, 0x57, 0xe4, 0x9a, 0x66, 0x4c, 0x71, 0xd9, 0xe5, 0x4a, 0xb5,
	0x82, 0x9e, 0xa0, 0xe7, 0xe8, 0x19, 0x8a, 0xde, 0xa0, 0x67, 0xe9, 0x15, 0xf2, 0x54, 0x70, 0x77,
	0x69, 0x31, 0x94, 0x0d, 0x14, 0xf0, 0x1b, 0x77, 0xbe, 0xef, 0x9b, 0x9d, 0x99, 0x9d, 0x19, 0x09,
	0x76, 0x49, 0x30, 0xa5, 0xb3, 0x86, 0x4d, 0x83, 0x0b, 0xcf, 0x6d, 0x70, 0x86, 0x6d, 0xd2, 0x98,
	0x36, 0xe5, 0x87, 0x11, 0x32, 0xca, 0x29, 0x7a, 0x24, 0x28, 0x86, 0xa4, 0x18, 0x12, 0x99, 0x36,
	0x6b, 0x8f, 0xa5, 0x12, 0x87, 0x5e, 0x2c, 0xb0, 0x29, 0x23, 0x8d, 0x11, 0x8e, 0x94, 0xa8, 0xf6,
	0xc9, 0x22, 0xea, 0xb2, 0xd0, 0xb6, 0x22, 0xc2, 0xa6, 0x5e, 0xe2, 0xba, 0xf6, 0x3f, 0x97, 0x52,
	0xd7, 0x27, 0x0d, 0x71, 0x1a, 0x4d, 0x2e, 0x1a, 0x38, 0x98, 0x29, 0xe8, 0x71, 0x16, 0x8a, 0x38,
	0x9b, 0xd8, 0x5c, 0xa1, 0x4f, 0xb3, 0xe8, 0xaf, 0x0c, 0x87, 0x21, 0x61, 0x91, 0xc2, 0x3f, 0xa7,
	0x21, 0x09, 0x6c, 0x12, 0x44, 0x93, 0x48, 0x72, 0x92, 0xd4, 0xf6, 0xe5, 0x87, 0xa5, 0xb2, 0x91,
	0xec, 0xed, 0x29, 0xf6, 0x3d, 0x07, 0x73, 0xd2, 0x48, 0x3e, 0x24, 0x50, 0xff, 0x47, 0x83, 0xd5,
	0x21, 0xc3, 0xb6, 0x17, 0xb8, 0xe8, 0x2b, 0xc8, 0x5f, 0x72, 0x1e, 0x56, 0xb5, 0x1d, 0x6d, 0xaf,
	0xd8, 0x7c, 0x66, 0xdc, 0x5a, 0x15, 0x43, 0xb1, 0x8d, 0x13, 0xce, 0x43, 0x53, 0x08, 0x6a, 0x7f,
	0x68, 0x90, 0x8f, 0x8f, 0xe8, 0xff, 0x90, 0x0f, 0xf0, 0x98, 0x08, 0x0f, 0x6b, 0xad, 0xd5, 0x0f,
	0xad, 0x3c, 0xcb, 0xed, 0x68, 0xa6, 0x30, 0xa2, 0x2f, 0x61, 0x45, 0xfa, 0xaa, 0xe6, 0xc4, 0x05,
	0xdb, 0x86, 0x4c, 0xd1, 0x48, 0x52, 0x34, 0x06, 0xa2, 0x00, 0xad, 0x5c, 0x55, 0x3b, 0x59, 0x32,
	0x15, 0x19, 0x7d, 0x0d, 0x25, 0x3e, 0x0b, 0x89, 0xa3, 0x12, 0xaa, 0x2e, 0x0b, 0xf1, 0xe6, 0x82,
	0xf8, 0x28, 0x98, 0x9d, 0x2c, 0x99, 0x45, 0xc1, 0x6d, 0x0b, 0x6a, 0x6b, 0x1d, 0x8a, 0x52, 0x64,
	0xc5, 0xd6, 0xfa, 0x6f, 0x50, 0x79, 0xed, 0xb9, 0x97, 0x3c, 0xe2, 0x24, 0x94, 0x0c, 0x74, 0x08,
	0x1b, 0x36, 0xf5, 0x7d, 0x62, 0x73, 0xca, 0x2c, 0xdb, 0x9f, 0x44, 0x9c, 0xb0, 0x6c, 0xf4, 0xfa,
	0x0d, 0xa3, 0x2d, 0x09, 0xe8, 0x00, 0x36, 0xb0, 0x6d, 0x93, 0x28, 0xb2, 0x38, 0xbd, 0x22, 0x81,
	0x75, 0xe1, 0xf9, 0x44, 0x24, 0x95, 0x52, 0x55, 0x24, 0x63, 0x18, 0x13, 0xbe, 0xf3, 0x7c, 0x52,
	0xff, 0x7b, 0x19, 0x4a, 0x3f, 0x79, 0xe1, 0x95, 0x17, 0xdc, 0xeb, 0xee, 0x17, 0x80, 0xe6, 0x2a,
	0x12, 0x38, 0x21, 0xf5, 0x02, 0x9e, 0xbd, 0x7c, 0xee, 0xb8, 0xa3, 0x18, 0xe8, 0x39, 0x54, 0x64,
	0x5f, 0x78, 0x8e, 0xb5, 0xdf, 0x7c, 0x39, 0xf2, 0xb8, 0xa8, 0x64, 0xc1, 0x5c, 0x17, 0xe6, 0x53,
	0x47, 0x1a, 0xd1, 0x19, 0x3c, 0x8c, 0x2e, 0x31, 0x23, 0x8e, 0x15, 0x85, 0x38, 0x88, 0x8b, 0xce,
	0xc9, 0x35, 0xaf, 0xe6, 0x45, 0xd5, 0x6b, 0x0b, 0x55, 0x6f, 0x51, 0xea, 0x9f, 0x63, 0x7f, 0x42,
	0xcc, 0x0d, 0x29, 0x1b, 0x84, 0x38, 0x4e, 0x30, 0x16, 0xa1, 0xf7, 0x50, 0x5b, 0x8c, 0xd5, 0x9a,
	0x12, 0x16, 0x79, 0x34, 0xa8, 0x3e, 0xd8, 0xd1, 0xf6, 0xca, 0xcd, 0x6f, 0xee, 0x68, 0xb3, 0x74,
	0xa9, 0x8c, 0x76, 0x36, 0x9d, 0x73, 0xe9, 0xc3, 0xac, 0xda, 0x77, 0x20, 0xf5, 0x1f, 0xa1, 0x7a,
	0x97, 0x0a, 0x6d, 0x42, 0xe9, 0x64, 0x38, 0xec, 0x5b, 0x67, 0x83, 0x5e, 0xd7, 0x3a, 0xdf, 0xd7,
	0x97, 0x6a, 0xb9, 0x82, 0x86, 0xd6, 0x61, 0xed, 0xc6, 0xaa, 0x6b, 0xa8, 0x0c, 0x20, 0x8e, 0x7d,
	0xb3, 0x37, 0xec, 0xe9, 0x39, 0x54, 0x80, 0xfc, 0x2b, 0xb3, 0xdf, 0xd6, 0x97, 0xeb, 0x04, 0x2a,
	0xc7, 0xb3, 0x00, 0x8f, 0x3d, 0xbb, 0xc7, 0xd5, 0x5b, 0xee, 0xc2, 0xaa, 0xef, 0x8d, 0x18, 0x66,
	0xb3, 0xec, 0x0b, 0x26, 0x76, 0xd4, 0xf8, 0x8f, 0xed, 0x9f, 0x34, 0x7e, 0xfd, 0x17, 0x58, 0x3f,
	0xc6, 0x1c, 0x3b, 0xd4, 0xbd, 0x57, 0xc3, 0x7c, 0x06, 0x25, 0xb5, 0x92, 0x2c, 0x31, 0x9b, 0x99,
	0x56, 0x29, 0x2a, 0xb0, 0x8b, 0xc7, 0xa4, 0xfe, 0xd7, 0x0a, 0xe8, 0xbd, 0x90, 0x04, 0x6d, 0xb1,
	0x57, 0xd4, 0xb5, 0xa7, 0x50, 0x4a, 0x6f, 0x14, 0xb5, 0x1e, 0x9e, 0x1b, 0xf3, 0x05, 0x24, 0x53,
	0x48, 0xde, 0x6e, 0x5f, 0xac, 0x08, 0x22, 0xd5, 0x66, 0x91, 0xcf, 0x0f, 0xe8, 0x05, 0x6c, 0x47,
	0xdc, 0xa1, 0x13, 0x6e, 0x91, 0xeb, 0x90, 0x32, 0x4e, 0xe2, 0xb6, 0xc0, 0x23, 0x9f, 0x38, 0x22,
	0xac, 0x82, 0xf9, 0x48, 0xc2, 0x1d, 0x85, 0x76, 0x24, 0x88, 0xbe, 0x85, 0xc7, 0x11, 0xc7, 0xf6,
	0x95, 0xc3, 0xbc, 0x69, 0xac, 0xc9, 0x8a, 0x65, 0x27, 0xd7, 0x52, 0x9c, 0xac, 0x87, 0x43, 0xd8,
	0x4a, 0x7b, 0x08, 0x19, 0x7d, 0x47, 0x6c, 0x6e, 0x79, 0x8e, 0xe8, 0xec, 0x35, 0x73, 0x33, 0x85,
	0xf6, 0x25, 0x78, 0xea, 0xa0, 0x06, 0x3c, 0x4c, 0xab, 0xb0, 0xe3, 0x30, 0x12, 0x45, 0x55, 0x10,
	0x12, 0x94, 0x82, 0x8e, 0x24, 0x12, 0x27, 0xf8, 0x5e, 0x34, 0xee, 0x62, 0x8c, 0x0f, 0x64, 0x82,
	0x12, 0xce, 0x86, 0xf7, 0x04, 0x40, 0xe9, 0x26, 0xcc, 0xaf, 0xae, 0x08, 0xff, 0x6b, 0xd2, 0xf2,
	0x86, 0xf9, 0xe8, 0x25, 0x54, 0xa9, 0x8d, 0x5d, 0x12, 0xdc, 0x52, 0xb8, 0xa2, 0xf0, 0xbb, 0xa5,
	0xf0, 0xac, 0xe3, 0x4f, 0xa1, 0x92, 0x28, 0x93, 0xe8, 0x4b, 0xc2, 0x7b, 0x59, 0x99, 0x93, 0xc8,
	0xdf, 0xc1, 0x96, 0x17, 0xd8, 0x74, 0xec, 0x05, 0xae, 0x75, 0xf3, 0xdc, 0x62, 0xf4, 0x0b, 0x3b,
	0xcb, 0x7b, 0xe5, 0xe6, 0xe1, 0x1d, 0x73, 0x9a, 0x6d, 0x97, 0x9b, 0xc7, 0x8f, 0xb5, 0xe6, 0x66,
	0xe2, 0x33, 0x6d, 0x8d, 0xef, 0xa2, 0x13, 0xee, 0xd2, 0xc5, 0xbb, 0xd6, 0xee, 0x73, 0x57, 0xe2,
	0x33, 0x6d, 0xad, 0xff, 0x0c, 0xa5, 0x8f, 0xee, 0x2e, 0x40, 0xbe, 0xdb, 0xeb, 0x76, 0xf4, 0x25,
	0xb4, 0x01, 0xeb, 0x43, 0xf3, 0xa8, 0xdd, 0xb1, 0xda, 0xbd, 0xee, 0xb0, 0xf3, 0x76, 0xa8, 0x6b,
	0x08, 0x41, 0x39, 0x9e, 0x71, 0x4b, 0xda, 0x5b, 0xa7, 0x5d, 0x3d, 0x87, 0xb6, 0xe1, 0x61, 0xfb,
	0x75, 0xef, 0xcd, 0xb1, 0xf5, 0x31, 0x79, 0x19, 0xad, 0x40, 0xae, 0x75, 0xa0, 0xe7, 0xcf, 0xf2,
	0x85, 0x55, 0xbd, 0x50, 0xff, 0x53, 0x03, 0x78, 0x6b, 0xe2, 0x99, 0xea, 0xf4, 0x2f, 0xa0, 0xe2,
	0x60, 0x32, 0xa6, 0xc1, 0x7c, 0x47, 0x67, 0x26, 0xb5, 0x2c, 0xf1, 0x9b, 0x05, 0xbd, 0x1b, 0xcf,
	0xa9, 0x3b, 0x8e, 0x5f, 0x6a, 0x3e, 0xa7, 0xf1, 0x78, 0x0a, 0x5b, 0x3c, 0x9e, 0x68, 0x00, 0x5b,
	0x11, 0x1e, 0x87, 0x7e, 0x5c, 0x37, 0x36, 0xf1, 0x89, 0x35, 0xc6, 0x81, 0x77, 0x41, 0x22, 0xae,
	0x7e, 0x14, 0x9f, 0xa8, 0xba, 0xe1, 0xd0, 0x8b, 0xcb, 0x15, 0xff, 0x27, 0x31, 0xe2, 0x15, 0x32,
	0xa0, 0x13, 0x66, 0x13, 0x73, 0x33, 0x11, 0x9b, 0x13, 0x9f, 0xfc, 0xa0, 0xa4, 0x75, 0x0c, 0x48,
	0x14, 0x68, 0x20, 0xf7, 0x80, 0x8a, 0xff, 0x7b, 0x28, 0xa5, 0xff, 0xcd, 0xa8, 0xa1, 0x7f, 0x7a,
	0xcb, 0x05, 0xaf, 0x58, 0x68, 0x2b, 0x6d, 0xab, 0xf0, 0xa1, 0xf5, 0xe0, 0x77, 0x2d, 0xa7, 0x6b,
	0x66, 0xd1, 0x4d, 0x99, 0x0f, 0xe0, 0x99, 0x47, 0xa5, 0x34, 0x64, 0xf4, 0x7a, 0x76, 0xfb, 0xf3,
	0xb6, 0x40, 0xc4, 0xd1, 0x8f, 0x77, 0x49, 0x5f, 0x1b, 0xad, 0x88, 0xa5, 0x72, 0xf0, 0x6f, 0x00,
	0x00, 0x00, 0xff, 0xff, 0x09, 0x25, 0xeb, 0xa4, 0xc0, 0x09, 0x00, 0x00,
}
  0707010000012F000041ED000003E800000064000000045E17A24700000000000000000000000000000000000000000000003700000000cilium-proxy-20200109/go/envoy/config/transport_socket    07070100000130000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003C00000000cilium-proxy-20200109/go/envoy/config/transport_socket/alts   07070100000131000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004400000000cilium-proxy-20200109/go/envoy/config/transport_socket/alts/v2alpha   07070100000132000081A4000003E800000064000000015E17A247000010BF000000000000000000000000000000000000004F00000000cilium-proxy-20200109/go/envoy/config/transport_socket/alts/v2alpha/alts.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/transport_socket/alts/v2alpha/alts.proto

package envoy_config_transport_socket_alts_v2alpha

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Configuration for ALTS transport socket. This provides Google's ALTS protocol to Envoy.
// https://cloud.google.com/security/encryption-in-transit/application-layer-transport-security/
type Alts struct {
	// The location of a handshaker service, this is usually 169.254.169.254:8080
	// on GCE.
	HandshakerService string `protobuf:"bytes,1,opt,name=handshaker_service,json=handshakerService,proto3" json:"handshaker_service,omitempty"`
	// The acceptable service accounts from peer, peers not in the list will be rejected in the
	// handshake validation step. If empty, no validation will be performed.
	PeerServiceAccounts  []string `protobuf:"bytes,2,rep,name=peer_service_accounts,json=peerServiceAccounts,proto3" json:"peer_service_accounts,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Alts) Reset()         { *m = Alts{} }
func (m *Alts) String() string { return proto.CompactTextString(m) }
func (*Alts) ProtoMessage()    {}
func (*Alts) Descriptor() ([]byte, []int) {
	return fileDescriptor_6f3e17a21d207b38, []int{0}
}

func (m *Alts) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Alts.Unmarshal(m, b)
}
func (m *Alts) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Alts.Marshal(b, m, deterministic)
}
func (m *Alts) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Alts.Merge(m, src)
}
func (m *Alts) XXX_Size() int {
	return xxx_messageInfo_Alts.Size(m)
}
func (m *Alts) XXX_DiscardUnknown() {
	xxx_messageInfo_Alts.DiscardUnknown(m)
}

var xxx_messageInfo_Alts proto.InternalMessageInfo

func (m *Alts) GetHandshakerService() string {
	if m != nil {
		return m.HandshakerService
	}
	return ""
}

func (m *Alts) GetPeerServiceAccounts() []string {
	if m != nil {
		return m.PeerServiceAccounts
	}
	return nil
}

func init() {
	proto.RegisterType((*Alts)(nil), "envoy.config.transport_socket.alts.v2alpha.Alts")
}

func init() {
	proto.RegisterFile("envoy/config/transport_socket/alts/v2alpha/alts.proto", fileDescriptor_6f3e17a21d207b38)
}

var fileDescriptor_6f3e17a21d207b38 = []byte{
	// 220 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x8f, 0x41, 0x4b, 0x03, 0x31,
	0x10, 0x85, 0xd9, 0x5a, 0x94, 0xcd, 0xcd, 0x15, 0xb1, 0x78, 0x5a, 0x3c, 0x15, 0x0f, 0x09, 0x54,
	0x14, 0xaf, 0xcd, 0xc5, 0x6b, 0xa9, 0x3f, 0x60, 0x19, 0xd3, 0xe8, 0x86, 0x86, 0x4c, 0x98, 0x8c,
	0xc1, 0xfe, 0x75, 0x4f, 0xb2, 0xd9, 0x95, 0x05, 0x4f, 0xde, 0x12, 0xde, 0xf7, 0x0d, 0xef, 0x89,
	0x47, 0x1b, 0x32, 0x9e, 0x94, 0xc1, 0xf0, 0xee, 0x3e, 0x14, 0x13, 0x84, 0x14, 0x91, 0xb8, 0x4b,
	0x68, 0x8e, 0x96, 0x15, 0x78, 0x4e, 0x2a, 0x6f, 0xc0, 0xc7, 0x1e, 0xca, 0x47, 0x46, 0x42, 0xc6,
	0xe6, 0xbe, 0x68, 0x72, 0xd4, 0xe4, 0x5f, 0x4d, 0x16, 0x72, 0xd2, 0x6e, 0x6f, 0x32, 0x78, 0x77,
	0x00, 0xb6, 0xea, 0xf7, 0x31, 0x1e, 0xb9, 0x23, 0xb1, 0xdc, 0x7a, 0x4e, 0xcd, 0x93, 0x68, 0x7a,
	0x08, 0x87, 0xd4, 0xc3, 0xd1, 0x52, 0x97, 0x2c, 0x65, 0x67, 0xec, 0xaa, 0x6a, 0xab, 0x75, 0xad,
	0x2f, 0xbe, 0xf5, 0x92, 0x16, 0x6d, 0xb5, 0xbf, 0x9c, 0x91, 0xd7, 0x91, 0x68, 0x36, 0xe2, 0x3a,
	0xda, 0xd9, 0xe8, 0xc0, 0x18, 0xfc, 0x0c, 0x9c, 0x56, 0x8b, 0xf6, 0x6c, 0x5d, 0xef, 0xaf, 0x86,
	0x70, 0x62, 0xb7, 0x53, 0xa4, 0x5f, 0xc4, 0xb3, 0x43, 0x59, 0xda, 0x47, 0xc2, 0xaf, 0x93, 0xfc,
	0xff, 0x10, 0x5d, 0x0f, 0x6d, 0x77, 0x43, 0xf5, 0x5d, 0xf5, 0x76, 0x5e, 0x36, 0x3c, 0xfc, 0x04,
	0x00, 0x00, 0xff, 0xff, 0x59, 0x2b, 0x31, 0x20, 0x41, 0x01, 0x00, 0x00,
}
 07070100000133000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003B00000000cilium-proxy-20200109/go/envoy/config/transport_socket/tap    07070100000134000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000004300000000cilium-proxy-20200109/go/envoy/config/transport_socket/tap/v2alpha    07070100000135000081A4000003E800000064000000015E17A247000011E2000000000000000000000000000000000000004D00000000cilium-proxy-20200109/go/envoy/config/transport_socket/tap/v2alpha/tap.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/config/transport_socket/tap/v2alpha/tap.proto

package envoy_config_transport_socket_tap_v2alpha

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	v2alpha "github.com/cilium/proxy/go/envoy/config/common/tap/v2alpha"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Configuration for tap transport socket. This wraps another transport socket, providing the
// ability to interpose and record in plain text any traffic that is surfaced to Envoy.
type Tap struct {
	// Common configuration for the tap transport socket.
	CommonConfig *v2alpha.CommonExtensionConfig `protobuf:"bytes,1,opt,name=common_config,json=commonConfig,proto3" json:"common_config,omitempty"`
	// The underlying transport socket being wrapped.
	TransportSocket      *core.TransportSocket `protobuf:"bytes,2,opt,name=transport_socket,json=transportSocket,proto3" json:"transport_socket,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *Tap) Reset()         { *m = Tap{} }
func (m *Tap) String() string { return proto.CompactTextString(m) }
func (*Tap) ProtoMessage()    {}
func (*Tap) Descriptor() ([]byte, []int) {
	return fileDescriptor_07cb8c0b42756e40, []int{0}
}

func (m *Tap) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Tap.Unmarshal(m, b)
}
func (m *Tap) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Tap.Marshal(b, m, deterministic)
}
func (m *Tap) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Tap.Merge(m, src)
}
func (m *Tap) XXX_Size() int {
	return xxx_messageInfo_Tap.Size(m)
}
func (m *Tap) XXX_DiscardUnknown() {
	xxx_messageInfo_Tap.DiscardUnknown(m)
}

var xxx_messageInfo_Tap proto.InternalMessageInfo

func (m *Tap) GetCommonConfig() *v2alpha.CommonExtensionConfig {
	if m != nil {
		return m.CommonConfig
	}
	return nil
}

func (m *Tap) GetTransportSocket() *core.TransportSocket {
	if m != nil {
		return m.TransportSocket
	}
	return nil
}

func init() {
	proto.RegisterType((*Tap)(nil), "envoy.config.transport_socket.tap.v2alpha.Tap")
}

func init() {
	proto.RegisterFile("envoy/config/transport_socket/tap/v2alpha/tap.proto", fileDescriptor_07cb8c0b42756e40)
}

var fileDescriptor_07cb8c0b42756e40 = []byte{
	// 268 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0xc1, 0x4a, 0x03, 0x31,
	0x10, 0x86, 0x49, 0x45, 0x29, 0x51, 0xb1, 0xec, 0xc5, 0x52, 0x3c, 0x48, 0x4f, 0x0a, 0x32, 0x81,
	0x2d, 0xe8, 0x7d, 0x4b, 0xef, 0x45, 0x17, 0x3c, 0x96, 0xe9, 0x1a, 0x35, 0xd8, 0x66, 0x42, 0x36,
	0x84, 0xf6, 0x15, 0x7c, 0x2f, 0x5f, 0xca, 0x93, 0x6c, 0x66, 0x0b, 0xdd, 0x3d, 0x79, 0x1b, 0x66,
	0xfe, 0xff, 0xfb, 0x67, 0x46, 0xce, 0xb4, 0x8d, 0xb4, 0x57, 0x15, 0xd9, 0x77, 0xf3, 0xa1, 0x82,
	0x47, 0x5b, 0x3b, 0xf2, 0x61, 0x55, 0x53, 0xf5, 0xa5, 0x83, 0x0a, 0xe8, 0x54, 0xcc, 0x71, 0xe3,
	0x3e, 0xb1, 0xa9, 0xc1, 0x79, 0x0a, 0x94, 0xdd, 0x27, 0x13, 0xb0, 0x09, 0xfa, 0x26, 0x68, 0x84,
	0xad, 0x69, 0x72, 0xc3, 0x7c, 0x74, 0x46, 0xc5, 0x5c, 0x55, 0xe4, 0xb5, 0x5a, 0x63, 0xad, 0x19,
	0x34, 0x79, 0xe8, 0xa4, 0x57, 0xb4, 0xdd, 0x92, 0xed, 0x64, 0x72, 0xab, 0x55, 0x5f, 0x47, 0xdc,
	0x98, 0x37, 0x0c, 0x5a, 0x1d, 0x0a, 0x1e, 0x4c, 0x7f, 0x84, 0x3c, 0x29, 0xd1, 0x65, 0x5a, 0x5e,
	0xb2, 0x61, 0xc5, 0xc4, 0xb1, 0xb8, 0x15, 0x77, 0xe7, 0xf9, 0x23, 0x74, 0xf6, 0x6d, 0x99, 0x47,
	0x5b, 0xc2, 0x3c, 0xb5, 0x16, 0xbb, 0xa0, 0x6d, 0x6d, 0xc8, 0xce, 0x93, 0xb0, 0x18, 0xfe, 0x16,
	0xa7, 0xdf, 0x62, 0x30, 0x12, 0xcf, 0x17, 0xec, 0xe1, 0x7e, 0xf6, 0x2a, 0x47, 0xfd, 0x9b, 0xc7,
	0x83, 0x94, 0x34, 0x6d, 0x93, 0xd0, 0x19, 0x88, 0x39, 0x34, 0xe7, 0x42, 0x79, 0x90, 0xbe, 0x24,
	0xe5, 0x11, 0xf5, 0x2a, 0xf4, 0x46, 0x0b, 0xf9, 0x64, 0x88, 0x11, 0xce, 0xd3, 0x6e, 0x0f, 0xff,
	0xfe, 0x73, 0x31, 0x2c, 0xd1, 0x2d, 0x9b, 0x67, 0x2c, 0xc5, 0xfa, 0x2c, 0x7d, 0x65, 0xf6, 0x17,
	0x00, 0x00, 0xff, 0xff, 0x1d, 0xc8, 0x81, 0xf3, 0xdc, 0x01, 0x00, 0x00,
}
  07070100000136000041ED000003E800000064000000065E17A24700000000000000000000000000000000000000000000002400000000cilium-proxy-20200109/go/envoy/data   07070100000137000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000002E00000000cilium-proxy-20200109/go/envoy/data/accesslog 07070100000138000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003100000000cilium-proxy-20200109/go/envoy/data/accesslog/v2  07070100000139000081A4000003E800000064000000015E17A2470000FA90000000000000000000000000000000000000004100000000cilium-proxy-20200109/go/envoy/data/accesslog/v2/accesslog.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/data/accesslog/v2/accesslog.proto

package envoy_data_accesslog_v2

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// HTTP version
type HTTPAccessLogEntry_HTTPVersion int32

const (
	HTTPAccessLogEntry_PROTOCOL_UNSPECIFIED HTTPAccessLogEntry_HTTPVersion = 0
	HTTPAccessLogEntry_HTTP10               HTTPAccessLogEntry_HTTPVersion = 1
	HTTPAccessLogEntry_HTTP11               HTTPAccessLogEntry_HTTPVersion = 2
	HTTPAccessLogEntry_HTTP2                HTTPAccessLogEntry_HTTPVersion = 3
	HTTPAccessLogEntry_HTTP3                HTTPAccessLogEntry_HTTPVersion = 4
)

var HTTPAccessLogEntry_HTTPVersion_name = map[int32]string{
	0: "PROTOCOL_UNSPECIFIED",
	1: "HTTP10",
	2: "HTTP11",
	3: "HTTP2",
	4: "HTTP3",
}

var HTTPAccessLogEntry_HTTPVersion_value = map[string]int32{
	"PROTOCOL_UNSPECIFIED": 0,
	"HTTP10":               1,
	"HTTP11":               2,
	"HTTP2":                3,
	"HTTP3":                4,
}

func (x HTTPAccessLogEntry_HTTPVersion) String() string {
	return proto.EnumName(HTTPAccessLogEntry_HTTPVersion_name, int32(x))
}

func (HTTPAccessLogEntry_HTTPVersion) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_ca1a3c8f3c17c754, []int{1, 0}
}

// Reasons why the request was unauthorized
type ResponseFlags_Unauthorized_Reason int32

const (
	ResponseFlags_Unauthorized_REASON_UNSPECIFIED ResponseFlags_Unauthorized_Reason = 0
	// The request was denied by the external authorization service.
	ResponseFlags_Unauthorized_EXTERNAL_SERVICE ResponseFlags_Unauthorized_Reason = 1
)

var ResponseFlags_Unauthorized_Reason_name = map[int32]string{
	0: "REASON_UNSPECIFIED",
	1: "EXTERNAL_SERVICE",
}

var ResponseFlags_Unauthorized_Reason_value = map[string]int32{
	"REASON_UNSPECIFIED": 0,
	"EXTERNAL_SERVICE":   1,
}

func (x ResponseFlags_Unauthorized_Reason) String() string {
	return proto.EnumName(ResponseFlags_Unauthorized_Reason_name, int32(x))
}

func (ResponseFlags_Unauthorized_Reason) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_ca1a3c8f3c17c754, []int{4, 0, 0}
}

type TLSProperties_TLSVersion int32

const (
	TLSProperties_VERSION_UNSPECIFIED TLSProperties_TLSVersion = 0
	TLSProperties_TLSv1               TLSProperties_TLSVersion = 1
	TLSProperties_TLSv1_1             TLSProperties_TLSVersion = 2
	TLSProperties_TLSv1_2             TLSProperties_TLSVersion = 3
	TLSProperties_TLSv1_3             TLSProperties_TLSVersion = 4
)

var TLSProperties_TLSVersion_name = map[int32]string{
	0: "VERSION_UNSPECIFIED",
	1: "TLSv1",
	2: "TLSv1_1",
	3: "TLSv1_2",
	4: "TLSv1_3",
}

var TLSProperties_TLSVersion_value = map[string]int32{
	"VERSION_UNSPECIFIED": 0,
	"TLSv1":               1,
	"TLSv1_1":             2,
	"TLSv1_2":             3,
	"TLSv1_3":             4,
}

func (x TLSProperties_TLSVersion) String() string {
	return proto.EnumName(TLSProperties_TLSVersion_name, int32(x))
}

func (TLSProperties_TLSVersion) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_ca1a3c8f3c17c754, []int{5, 0}
}

type TCPAccessLogEntry struct {
	// Common properties shared by all Envoy access logs.
	CommonProperties *AccessLogCommon `protobuf:"bytes,1,opt,name=common_properties,json=commonProperties,proto3" json:"common_properties,omitempty"`
	// Properties of the TCP connection.
	ConnectionProperties *ConnectionProperties `protobuf:"bytes,2,opt,name=connection_properties,json=connectionProperties,proto3" json:"connection_properties,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *TCPAccessLogEntry) Reset()         { *m = TCPAccessLogEntry{} }
func (m *TCPAccessLogEntry) String() string { return proto.CompactTextString(m) }
func (*TCPAccessLogEntry) ProtoMessage()    {}
func (*TCPAccessLogEntry) Descriptor() ([]byte, []int) {
	return fileDescriptor_ca1a3c8f3c17c754, []int{0}
}

func (m *TCPAccessLogEntry) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TCPAccessLogEntry.Unmarshal(m, b)
}
func (m *TCPAccessLogEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TCPAccessLogEntry.Marshal(b, m, deterministic)
}
func (m *TCPAccessLogEntry) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TCPAccessLogEntry.Merge(m, src)
}
func (m *TCPAccessLogEntry) XXX_Size() int {
	return xxx_messageInfo_TCPAccessLogEntry.Size(m)
}
func (m *TCPAccessLogEntry) XXX_DiscardUnknown() {
	xxx_messageInfo_TCPAccessLogEntry.DiscardUnknown(m)
}

var xxx_messageInfo_TCPAccessLogEntry proto.InternalMessageInfo

func (m *TCPAccessLogEntry) GetCommonProperties() *AccessLogCommon {
	if m != nil {
		return m.CommonProperties
	}
	return nil
}

func (m *TCPAccessLogEntry) GetConnectionProperties() *ConnectionProperties {
	if m != nil {
		return m.ConnectionProperties
	}
	return nil
}

type HTTPAccessLogEntry struct {
	// Common properties shared by all Envoy access logs.
	CommonProperties *AccessLogCommon               `protobuf:"bytes,1,opt,name=common_properties,json=commonProperties,proto3" json:"common_properties,omitempty"`
	ProtocolVersion  HTTPAccessLogEntry_HTTPVersion `protobuf:"varint,2,opt,name=protocol_version,json=protocolVersion,proto3,enum=envoy.data.accesslog.v2.HTTPAccessLogEntry_HTTPVersion" json:"protocol_version,omitempty"`
	// Description of the incoming HTTP request.
	Request *HTTPRequestProperties `protobuf:"bytes,3,opt,name=request,proto3" json:"request,omitempty"`
	// Description of the outgoing HTTP response.
	Response             *HTTPResponseProperties `protobuf:"bytes,4,opt,name=response,proto3" json:"response,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
	XXX_unrecognized     []byte                  `json:"-"`
	XXX_sizecache        int32                   `json:"-"`
}

func (m *HTTPAccessLogEntry) Reset()         { *m = HTTPAccessLogEntry{} }
func (m *HTTPAccessLogEntry) String() string { return proto.CompactTextString(m) }
func (*HTTPAccessLogEntry) ProtoMessage()    {}
func (*HTTPAccessLogEntry) Descriptor() ([]byte, []int) {
	return fileDescriptor_ca1a3c8f3c17c754, []int{1}
}

func (m *HTTPAccessLogEntry) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HTTPAccessLogEntry.Unmarshal(m, b)
}
func (m *HTTPAccessLogEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HTTPAccessLogEntry.Marshal(b, m, deterministic)
}
func (m *HTTPAccessLogEntry) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HTTPAccessLogEntry.Merge(m, src)
}
func (m *HTTPAccessLogEntry) XXX_Size() int {
	return xxx_messageInfo_HTTPAccessLogEntry.Size(m)
}
func (m *HTTPAccessLogEntry) XXX_DiscardUnknown() {
	xxx_messageInfo_HTTPAccessLogEntry.DiscardUnknown(m)
}

var xxx_messageInfo_HTTPAccessLogEntry proto.InternalMessageInfo

func (m *HTTPAccessLogEntry) GetCommonProperties() *AccessLogCommon {
	if m != nil {
		return m.CommonProperties
	}
	return nil
}

func (m *HTTPAccessLogEntry) GetProtocolVersion() HTTPAccessLogEntry_HTTPVersion {
	if m != nil {
		return m.ProtocolVersion
	}
	return HTTPAccessLogEntry_PROTOCOL_UNSPECIFIED
}

func (m *HTTPAccessLogEntry) GetRequest() *HTTPRequestProperties {
	if m != nil {
		return m.Request
	}
	return nil
}

func (m *HTTPAccessLogEntry) GetResponse() *HTTPResponseProperties {
	if m != nil {
		return m.Response
	}
	return nil
}

// Defines fields for a connection
type ConnectionProperties struct {
	// Number of bytes received from downstream.
	ReceivedBytes uint64 `protobuf:"varint,1,opt,name=received_bytes,json=receivedBytes,proto3" json:"received_bytes,omitempty"`
	// Number of bytes sent to downstream.
	SentBytes            uint64   `protobuf:"varint,2,opt,name=sent_bytes,json=sentBytes,proto3" json:"sent_bytes,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ConnectionProperties) Reset()         { *m = ConnectionProperties{} }
func (m *ConnectionProperties) String() string { return proto.CompactTextString(m) }
func (*ConnectionProperties) ProtoMessage()    {}
func (*ConnectionProperties) Descriptor() ([]byte, []int) {
	return fileDescriptor_ca1a3c8f3c17c754, []int{2}
}

func (m *ConnectionProperties) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ConnectionProperties.Unmarshal(m, b)
}
func (m *ConnectionProperties) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ConnectionProperties.Marshal(b, m, deterministic)
}
func (m *ConnectionProperties) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ConnectionProperties.Merge(m, src)
}
func (m *ConnectionProperties) XXX_Size() int {
	return xxx_messageInfo_ConnectionProperties.Size(m)
}
func (m *ConnectionProperties) XXX_DiscardUnknown() {
	xxx_messageInfo_ConnectionProperties.DiscardUnknown(m)
}

var xxx_messageInfo_ConnectionProperties proto.InternalMessageInfo

func (m *ConnectionProperties) GetReceivedBytes() uint64 {
	if m != nil {
		return m.ReceivedBytes
	}
	return 0
}

func (m *ConnectionProperties) GetSentBytes() uint64 {
	if m != nil {
		return m.SentBytes
	}
	return 0
}

// Defines fields that are shared by all Envoy access logs.
// [#next-free-field: 21]
type AccessLogCommon struct {
	// [#not-implemented-hide:]
	// This field indicates the rate at which this log entry was sampled.
	// Valid range is (0.0, 1.0].
	SampleRate float64 `protobuf:"fixed64,1,opt,name=sample_rate,json=sampleRate,proto3" json:"sample_rate,omitempty"`
	// This field is the remote/origin address on which the request from the user was received.
	// Note: This may not be the physical peer. E.g, if the remote address is inferred from for
	// example the x-forwarder-for header, proxy protocol, etc.
	DownstreamRemoteAddress *core.Address `protobuf:"bytes,2,opt,name=downstream_remote_address,json=downstreamRemoteAddress,proto3" json:"downstream_remote_address,omitempty"`
	// This field is the local/destination address on which the request from the user was received.
	DownstreamLocalAddress *core.Address `protobuf:"bytes,3,opt,name=downstream_local_address,json=downstreamLocalAddress,proto3" json:"downstream_local_address,omitempty"`
	// If the connection is secure,S this field will contain TLS properties.
	TlsProperties *TLSProperties `protobuf:"bytes,4,opt,name=tls_properties,json=tlsProperties,proto3" json:"tls_properties,omitempty"`
	// The time that Envoy started servicing this request. This is effectively the time that the first
	// downstream byte is received.
	StartTime *timestamp.Timestamp `protobuf:"bytes,5,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
	// Interval between the first downstream byte received and the last
	// downstream byte received (i.e. time it takes to receive a request).
	TimeToLastRxByte *duration.Duration `protobuf:"bytes,6,opt,name=time_to_last_rx_byte,json=timeToLastRxByte,proto3" json:"time_to_last_rx_byte,omitempty"`
	// Interval between the first downstream byte received and the first upstream byte sent. There may
	// by considerable delta between *time_to_last_rx_byte* and this value due to filters.
	// Additionally, the same caveats apply as documented in *time_to_last_downstream_tx_byte* about
	// not accounting for kernel socket buffer time, etc.
	TimeToFirstUpstreamTxByte *duration.Duration `protobuf:"bytes,7,opt,name=time_to_first_upstream_tx_byte,json=timeToFirstUpstreamTxByte,proto3" json:"time_to_first_upstream_tx_byte,omitempty"`
	// Interval between the first downstream byte received and the last upstream byte sent. There may
	// by considerable delta between *time_to_last_rx_byte* and this value due to filters.
	// Additionally, the same caveats apply as documented in *time_to_last_downstream_tx_byte* about
	// not accounting for kernel socket buffer time, etc.
	TimeToLastUpstreamTxByte *duration.Duration `protobuf:"bytes,8,opt,name=time_to_last_upstream_tx_byte,json=timeToLastUpstreamTxByte,proto3" json:"time_to_last_upstream_tx_byte,omitempty"`
	// Interval between the first downstream byte received and the first upstream
	// byte received (i.e. time it takes to start receiving a response).
	TimeToFirstUpstreamRxByte *duration.Duration `protobuf:"bytes,9,opt,name=time_to_first_upstream_rx_byte,json=timeToFirstUpstreamRxByte,proto3" json:"time_to_first_upstream_rx_byte,omitempty"`
	// Interval between the first downstream byte received and the last upstream
	// byte received (i.e. time it takes to receive a complete response).
	TimeToLastUpstreamRxByte *duration.Duration `protobuf:"bytes,10,opt,name=time_to_last_upstream_rx_byte,json=timeToLastUpstreamRxByte,proto3" json:"time_to_last_upstream_rx_byte,omitempty"`
	// Interval between the first downstream byte received and the first downstream byte sent.
	// There may be a considerable delta between the *time_to_first_upstream_rx_byte* and this field
	// due to filters. Additionally, the same caveats apply as documented in
	// *time_to_last_downstream_tx_byte* about not accounting for kernel socket buffer time, etc.
	TimeToFirstDownstreamTxByte *duration.Duration `protobuf:"bytes,11,opt,name=time_to_first_downstream_tx_byte,json=timeToFirstDownstreamTxByte,proto3" json:"time_to_first_downstream_tx_byte,omitempty"`
	// Interval between the first downstream byte received and the last downstream byte sent.
	// Depending on protocol, buffering, windowing, filters, etc. there may be a considerable delta
	// between *time_to_last_upstream_rx_byte* and this field. Note also that this is an approximate
	// time. In the current implementation it does not include kernel socket buffer time. In the
	// current implementation it also does not include send window buffering inside the HTTP/2 codec.
	// In the future it is likely that work will be done to make this duration more accurate.
	TimeToLastDownstreamTxByte *duration.Duration `protobuf:"bytes,12,opt,name=time_to_last_downstream_tx_byte,json=timeToLastDownstreamTxByte,proto3" json:"time_to_last_downstream_tx_byte,omitempty"`
	// The upstream remote/destination address that handles this exchange. This does not include
	// retries.
	UpstreamRemoteAddress *core.Address `protobuf:"bytes,13,opt,name=upstream_remote_address,json=upstreamRemoteAddress,proto3" json:"upstream_remote_address,omitempty"`
	// The upstream local/origin address that handles this exchange. This does not include retries.
	UpstreamLocalAddress *core.Address `protobuf:"bytes,14,opt,name=upstream_local_address,json=upstreamLocalAddress,proto3" json:"upstream_local_address,omitempty"`
	// The upstream cluster that *upstream_remote_address* belongs to.
	UpstreamCluster string `protobuf:"bytes,15,opt,name=upstream_cluster,json=upstreamCluster,proto3" json:"upstream_cluster,omitempty"`
	// Flags indicating occurrences during request/response processing.
	ResponseFlags *ResponseFlags `protobuf:"bytes,16,opt,name=response_flags,json=responseFlags,proto3" json:"response_flags,omitempty"`
	// All metadata encountered during request processing, including endpoint
	// selection.
	//
	// This can be used to associate IDs attached to the various configurations
	// used to process this request with the access log entry. For example, a
	// route created from a higher level forwarding rule with some ID can place
	// that ID in this field and cross reference later. It can also be used to
	// determine if a canary endpoint was used or not.
	Metadata *core.Metadata `protobuf:"bytes,17,opt,name=metadata,proto3" json:"metadata,omitempty"`
	// If upstream connection failed due to transport socket (e.g. TLS handshake), provides the
	// failure reason from the transport socket. The format of this field depends on the configured
	// upstream transport socket. Common TLS failures are in
	// :ref:`TLS trouble shooting <arch_overview_ssl_trouble_shooting>`.
	UpstreamTransportFailureReason string `protobuf:"bytes,18,opt,name=upstream_transport_failure_reason,json=upstreamTransportFailureReason,proto3" json:"upstream_transport_failure_reason,omitempty"`
	// The name of the route
	RouteName string `protobuf:"bytes,19,opt,name=route_name,json=routeName,proto3" json:"route_name,omitempty"`
	// This field is the downstream direct remote address on which the request from the user was
	// received. Note: This is always the physical peer, even if the remote address is inferred from
	// for example the x-forwarder-for header, proxy protocol, etc.
	DownstreamDirectRemoteAddress *core.Address `protobuf:"bytes,20,opt,name=downstream_direct_remote_address,json=downstreamDirectRemoteAddress,proto3" json:"downstream_direct_remote_address,omitempty"`
	XXX_NoUnkeyedLiteral          struct{}      `json:"-"`
	XXX_unrecognized              []byte        `json:"-"`
	XXX_sizecache                 int32         `json:"-"`
}

func (m *AccessLogCommon) Reset()         { *m = AccessLogCommon{} }
func (m *AccessLogCommon) String() string { return proto.CompactTextString(m) }
func (*AccessLogCommon) ProtoMessage()    {}
func (*AccessLogCommon) Descriptor() ([]byte, []int) {
	return fileDescriptor_ca1a3c8f3c17c754, []int{3}
}

func (m *AccessLogCommon) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AccessLogCommon.Unmarshal(m, b)
}
func (m *AccessLogCommon) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AccessLogCommon.Marshal(b, m, deterministic)
}
func (m *AccessLogCommon) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AccessLogCommon.Merge(m, src)
}
func (m *AccessLogCommon) XXX_Size() int {
	return xxx_messageInfo_AccessLogCommon.Size(m)
}
func (m *AccessLogCommon) XXX_DiscardUnknown() {
	xxx_messageInfo_AccessLogCommon.DiscardUnknown(m)
}

var xxx_messageInfo_AccessLogCommon proto.InternalMessageInfo

func (m *AccessLogCommon) GetSampleRate() float64 {
	if m != nil {
		return m.SampleRate
	}
	return 0
}

func (m *AccessLogCommon) GetDownstreamRemoteAddress() *core.Address {
	if m != nil {
		return m.DownstreamRemoteAddress
	}
	return nil
}

func (m *AccessLogCommon) GetDownstreamLocalAddress() *core.Address {
	if m != nil {
		return m.DownstreamLocalAddress
	}
	return nil
}

func (m *AccessLogCommon) GetTlsProperties() *TLSProperties {
	if m != nil {
		return m.TlsProperties
	}
	return nil
}

func (m *AccessLogCommon) GetStartTime() *timestamp.Timestamp {
	if m != nil {
		return m.StartTime
	}
	return nil
}

func (m *AccessLogCommon) GetTimeToLastRxByte() *duration.Duration {
	if m != nil {
		return m.TimeToLastRxByte
	}
	return nil
}

func (m *AccessLogCommon) GetTimeToFirstUpstreamTxByte() *duration.Duration {
	if m != nil {
		return m.TimeToFirstUpstreamTxByte
	}
	return nil
}

func (m *AccessLogCommon) GetTimeToLastUpstreamTxByte() *duration.Duration {
	if m != nil {
		return m.TimeToLastUpstreamTxByte
	}
	return nil
}

func (m *AccessLogCommon) GetTimeToFirstUpstreamRxByte() *duration.Duration {
	if m != nil {
		return m.TimeToFirstUpstreamRxByte
	}
	return nil
}

func (m *AccessLogCommon) GetTimeToLastUpstreamRxByte() *duration.Duration {
	if m != nil {
		return m.TimeToLastUpstreamRxByte
	}
	return nil
}

func (m *AccessLogCommon) GetTimeToFirstDownstreamTxByte() *duration.Duration {
	if m != nil {
		return m.TimeToFirstDownstreamTxByte
	}
	return nil
}

func (m *AccessLogCommon) GetTimeToLastDownstreamTxByte() *duration.Duration {
	if m != nil {
		return m.TimeToLastDownstreamTxByte
	}
	return nil
}

func (m *AccessLogCommon) GetUpstreamRemoteAddress() *core.Address {
	if m != nil {
		return m.UpstreamRemoteAddress
	}
	return nil
}

func (m *AccessLogCommon) GetUpstreamLocalAddress() *core.Address {
	if m != nil {
		return m.UpstreamLocalAddress
	}
	return nil
}

func (m *AccessLogCommon) GetUpstreamCluster() string {
	if m != nil {
		return m.UpstreamCluster
	}
	return ""
}

func (m *AccessLogCommon) GetResponseFlags() *ResponseFlags {
	if m != nil {
		return m.ResponseFlags
	}
	return nil
}

func (m *AccessLogCommon) GetMetadata() *core.Metadata {
	if m != nil {
		return m.Metadata
	}
	return nil
}

func (m *AccessLogCommon) GetUpstreamTransportFailureReason() string {
	if m != nil {
		return m.UpstreamTransportFailureReason
	}
	return ""
}

func (m *AccessLogCommon) GetRouteName() string {
	if m != nil {
		return m.RouteName
	}
	return ""
}

func (m *AccessLogCommon) GetDownstreamDirectRemoteAddress() *core.Address {
	if m != nil {
		return m.DownstreamDirectRemoteAddress
	}
	return nil
}

// Flags indicating occurrences during request/response processing.
// [#next-free-field: 20]
type ResponseFlags struct {
	// Indicates local server healthcheck failed.
	FailedLocalHealthcheck bool `protobuf:"varint,1,opt,name=failed_local_healthcheck,json=failedLocalHealthcheck,proto3" json:"failed_local_healthcheck,omitempty"`
	// Indicates there was no healthy upstream.
	NoHealthyUpstream bool `protobuf:"varint,2,opt,name=no_healthy_upstream,json=noHealthyUpstream,proto3" json:"no_healthy_upstream,omitempty"`
	// Indicates an there was an upstream request timeout.
	UpstreamRequestTimeout bool `protobuf:"varint,3,opt,name=upstream_request_timeout,json=upstreamRequestTimeout,proto3" json:"upstream_request_timeout,omitempty"`
	// Indicates local codec level reset was sent on the stream.
	LocalReset bool `protobuf:"varint,4,opt,name=local_reset,json=localReset,proto3" json:"local_reset,omitempty"`
	// Indicates remote codec level reset was received on the stream.
	UpstreamRemoteReset bool `protobuf:"varint,5,opt,name=upstream_remote_reset,json=upstreamRemoteReset,proto3" json:"upstream_remote_reset,omitempty"`
	// Indicates there was a local reset by a connection pool due to an initial connection failure.
	UpstreamConnectionFailure bool `protobuf:"varint,6,opt,name=upstream_connection_failure,json=upstreamConnectionFailure,proto3" json:"upstream_connection_failure,omitempty"`
	// Indicates the stream was reset due to an upstream connection termination.
	UpstreamConnectionTermination bool `protobuf:"varint,7,opt,name=upstream_connection_termination,json=upstreamConnectionTermination,proto3" json:"upstream_connection_termination,omitempty"`
	// Indicates the stream was reset because of a resource overflow.
	UpstreamOverflow bool `protobuf:"varint,8,opt,name=upstream_overflow,json=upstreamOverflow,proto3" json:"upstream_overflow,omitempty"`
	// Indicates no route was found for the request.
	NoRouteFound bool `protobuf:"varint,9,opt,name=no_route_found,json=noRouteFound,proto3" json:"no_route_found,omitempty"`
	// Indicates that the request was delayed before proxying.
	DelayInjected bool `protobuf:"varint,10,opt,name=delay_injected,json=delayInjected,proto3" json:"delay_injected,omitempty"`
	// Indicates that the request was aborted with an injected error code.
	FaultInjected bool `protobuf:"varint,11,opt,name=fault_injected,json=faultInjected,proto3" json:"fault_injected,omitempty"`
	// Indicates that the request was rate-limited locally.
	RateLimited bool `protobuf:"varint,12,opt,name=rate_limited,json=rateLimited,proto3" json:"rate_limited,omitempty"`
	// Indicates if the request was deemed unauthorized and the reason for it.
	UnauthorizedDetails *ResponseFlags_Unauthorized `protobuf:"bytes,13,opt,name=unauthorized_details,json=unauthorizedDetails,proto3" json:"unauthorized_details,omitempty"`
	// Indicates that the request was rejected because there was an error in rate limit service.
	RateLimitServiceError bool `protobuf:"varint,14,opt,name=rate_limit_service_error,json=rateLimitServiceError,proto3" json:"rate_limit_service_error,omitempty"`
	// Indicates the stream was reset due to a downstream connection termination.
	DownstreamConnectionTermination bool `protobuf:"varint,15,opt,name=downstream_connection_termination,json=downstreamConnectionTermination,proto3" json:"downstream_connection_termination,omitempty"`
	// Indicates that the upstream retry limit was exceeded, resulting in a downstream error.
	UpstreamRetryLimitExceeded bool `protobuf:"varint,16,opt,name=upstream_retry_limit_exceeded,json=upstreamRetryLimitExceeded,proto3" json:"upstream_retry_limit_exceeded,omitempty"`
	// Indicates that the stream idle timeout was hit, resulting in a downstream 408.
	StreamIdleTimeout bool `protobuf:"varint,17,opt,name=stream_idle_timeout,json=streamIdleTimeout,proto3" json:"stream_idle_timeout,omitempty"`
	// Indicates that the request was rejected because an envoy request header failed strict
	// validation.
	InvalidEnvoyRequestHeaders bool `protobuf:"varint,18,opt,name=invalid_envoy_request_headers,json=invalidEnvoyRequestHeaders,proto3" json:"invalid_envoy_request_headers,omitempty"`
	// Indicates there was an HTTP protocol error on the downstream request.
	DownstreamProtocolError bool     `protobuf:"varint,19,opt,name=downstream_protocol_error,json=downstreamProtocolError,proto3" json:"downstream_protocol_error,omitempty"`
	XXX_NoUnkeyedLiteral    struct{} `json:"-"`
	XXX_unrecognized        []byte   `json:"-"`
	XXX_sizecache           int32    `json:"-"`
}

func (m *ResponseFlags) Reset()         { *m = ResponseFlags{} }
func (m *ResponseFlags) String() string { return proto.CompactTextString(m) }
func (*ResponseFlags) ProtoMessage()    {}
func (*ResponseFlags) Descriptor() ([]byte, []int) {
	return fileDescriptor_ca1a3c8f3c17c754, []int{4}
}

func (m *ResponseFlags) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ResponseFlags.Unmarshal(m, b)
}
func (m *ResponseFlags) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ResponseFlags.Marshal(b, m, deterministic)
}
func (m *ResponseFlags) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ResponseFlags.Merge(m, src)
}
func (m *ResponseFlags) XXX_Size() int {
	return xxx_messageInfo_ResponseFlags.Size(m)
}
func (m *ResponseFlags) XXX_DiscardUnknown() {
	xxx_messageInfo_ResponseFlags.DiscardUnknown(m)
}

var xxx_messageInfo_ResponseFlags proto.InternalMessageInfo

func (m *ResponseFlags) GetFailedLocalHealthcheck() bool {
	if m != nil {
		return m.FailedLocalHealthcheck
	}
	return false
}

func (m *ResponseFlags) GetNoHealthyUpstream() bool {
	if m != nil {
		return m.NoHealthyUpstream
	}
	return false
}

func (m *ResponseFlags) GetUpstreamRequestTimeout() bool {
	if m != nil {
		return m.UpstreamRequestTimeout
	}
	return false
}

func (m *ResponseFlags) GetLocalReset() bool {
	if m != nil {
		return m.LocalReset
	}
	return false
}

func (m *ResponseFlags) GetUpstreamRemoteReset() bool {
	if m != nil {
		return m.UpstreamRemoteReset
	}
	return false
}

func (m *ResponseFlags) GetUpstreamConnectionFailure() bool {
	if m != nil {
		return m.UpstreamConnectionFailure
	}
	return false
}

func (m *ResponseFlags) GetUpstreamConnectionTermination() bool {
	if m != nil {
		return m.UpstreamConnectionTermination
	}
	return false
}

func (m *ResponseFlags) GetUpstreamOverflow() bool {
	if m != nil {
		return m.UpstreamOverflow
	}
	return false
}

func (m *ResponseFlags) GetNoRouteFound() bool {
	if m != nil {
		return m.NoRouteFound
	}
	return false
}

func (m *ResponseFlags) GetDelayInjected() bool {
	if m != nil {
		return m.DelayInjected
	}
	return false
}

func (m *ResponseFlags) GetFaultInjected() bool {
	if m != nil {
		return m.FaultInjected
	}
	return false
}

func (m *ResponseFlags) GetRateLimited() bool {
	if m != nil {
		return m.RateLimited
	}
	return false
}

func (m *ResponseFlags) GetUnauthorizedDetails() *ResponseFlags_Unauthorized {
	if m != nil {
		return m.UnauthorizedDetails
	}
	return nil
}

func (m *ResponseFlags) GetRateLimitServiceError() bool {
	if m != nil {
		return m.RateLimitServiceError
	}
	return false
}

func (m *ResponseFlags) GetDownstreamConnectionTermination() bool {
	if m != nil {
		return m.DownstreamConnectionTermination
	}
	return false
}

func (m *ResponseFlags) GetUpstreamRetryLimitExceeded() bool {
	if m != nil {
		return m.UpstreamRetryLimitExceeded
	}
	return false
}

func (m *ResponseFlags) GetStreamIdleTimeout() bool {
	if m != nil {
		return m.StreamIdleTimeout
	}
	return false
}

func (m *ResponseFlags) GetInvalidEnvoyRequestHeaders() bool {
	if m != nil {
		return m.InvalidEnvoyRequestHeaders
	}
	return false
}

func (m *ResponseFlags) GetDownstreamProtocolError() bool {
	if m != nil {
		return m.DownstreamProtocolError
	}
	return false
}

type ResponseFlags_Unauthorized struct {
	Reason               ResponseFlags_Unauthorized_Reason `protobuf:"varint,1,opt,name=reason,proto3,enum=envoy.data.accesslog.v2.ResponseFlags_Unauthorized_Reason" json:"reason,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
	XXX_unrecognized     []byte                            `json:"-"`
	XXX_sizecache        int32                             `json:"-"`
}

func (m *ResponseFlags_Unauthorized) Reset()         { *m = ResponseFlags_Unauthorized{} }
func (m *ResponseFlags_Unauthorized) String() string { return proto.CompactTextString(m) }
func (*ResponseFlags_Unauthorized) ProtoMessage()    {}
func (*ResponseFlags_Unauthorized) Descriptor() ([]byte, []int) {
	return fileDescriptor_ca1a3c8f3c17c754, []int{4, 0}
}

func (m *ResponseFlags_Unauthorized) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ResponseFlags_Unauthorized.Unmarshal(m, b)
}
func (m *ResponseFlags_Unauthorized) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ResponseFlags_Unauthorized.Marshal(b, m, deterministic)
}
func (m *ResponseFlags_Unauthorized) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ResponseFlags_Unauthorized.Merge(m, src)
}
func (m *ResponseFlags_Unauthorized) XXX_Size() int {
	return xxx_messageInfo_ResponseFlags_Unauthorized.Size(m)
}
func (m *ResponseFlags_Unauthorized) XXX_DiscardUnknown() {
	xxx_messageInfo_ResponseFlags_Unauthorized.DiscardUnknown(m)
}

var xxx_messageInfo_ResponseFlags_Unauthorized proto.InternalMessageInfo

func (m *ResponseFlags_Unauthorized) GetReason() ResponseFlags_Unauthorized_Reason {
	if m != nil {
		return m.Reason
	}
	return ResponseFlags_Unauthorized_REASON_UNSPECIFIED
}

// Properties of a negotiated TLS connection.
// [#next-free-field: 7]
type TLSProperties struct {
	// Version of TLS that was negotiated.
	TlsVersion TLSProperties_TLSVersion `protobuf:"varint,1,opt,name=tls_version,json=tlsVersion,proto3,enum=envoy.data.accesslog.v2.TLSProperties_TLSVersion" json:"tls_version,omitempty"`
	// TLS cipher suite negotiated during handshake. The value is a
	// four-digit hex code defined by the IANA TLS Cipher Suite Registry
	// (e.g. ``009C`` for ``TLS_RSA_WITH_AES_128_GCM_SHA256``).
	//
	// Here it is expressed as an integer.
	TlsCipherSuite *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=tls_cipher_suite,json=tlsCipherSuite,proto3" json:"tls_cipher_suite,omitempty"`
	// SNI hostname from handshake.
	TlsSniHostname string `protobuf:"bytes,3,opt,name=tls_sni_hostname,json=tlsSniHostname,proto3" json:"tls_sni_hostname,omitempty"`
	// Properties of the local certificate used to negotiate TLS.
	LocalCertificateProperties *TLSProperties_CertificateProperties `protobuf:"bytes,4,opt,name=local_certificate_properties,json=localCertificateProperties,proto3" json:"local_certificate_properties,omitempty"`
	// Properties of the peer certificate used to negotiate TLS.
	PeerCertificateProperties *TLSProperties_CertificateProperties `protobuf:"bytes,5,opt,name=peer_certificate_properties,json=peerCertificateProperties,proto3" json:"peer_certificate_properties,omitempty"`
	// The TLS session ID.
	TlsSessionId         string   `protobuf:"bytes,6,opt,name=tls_session_id,json=tlsSessionId,proto3" json:"tls_session_id,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *TLSProperties) Reset()         { *m = TLSProperties{} }
func (m *TLSProperties) String() string { return proto.CompactTextString(m) }
func (*TLSProperties) ProtoMessage()    {}
func (*TLSProperties) Descriptor() ([]byte, []int) {
	return fileDescriptor_ca1a3c8f3c17c754, []int{5}
}

func (m *TLSProperties) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TLSProperties.Unmarshal(m, b)
}
func (m *TLSProperties) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TLSProperties.Marshal(b, m, deterministic)
}
func (m *TLSProperties) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TLSProperties.Merge(m, src)
}
func (m *TLSProperties) XXX_Size() int {
	return xxx_messageInfo_TLSProperties.Size(m)
}
func (m *TLSProperties) XXX_DiscardUnknown() {
	xxx_messageInfo_TLSProperties.DiscardUnknown(m)
}

var xxx_messageInfo_TLSProperties proto.InternalMessageInfo

func (m *TLSProperties) GetTlsVersion() TLSProperties_TLSVersion {
	if m != nil {
		return m.TlsVersion
	}
	return TLSProperties_VERSION_UNSPECIFIED
}

func (m *TLSProperties) GetTlsCipherSuite() *wrappers.UInt32Value {
	if m != nil {
		return m.TlsCipherSuite
	}
	return nil
}

func (m *TLSProperties) GetTlsSniHostname() string {
	if m != nil {
		return m.TlsSniHostname
	}
	return ""
}

func (m *TLSProperties) GetLocalCertificateProperties() *TLSProperties_CertificateProperties {
	if m != nil {
		return m.LocalCertificateProperties
	}
	return nil
}

func (m *TLSProperties) GetPeerCertificateProperties() *TLSProperties_CertificateProperties {
	if m != nil {
		return m.PeerCertificateProperties
	}
	return nil
}

func (m *TLSProperties) GetTlsSessionId() string {
	if m != nil {
		return m.TlsSessionId
	}
	return ""
}

type TLSProperties_CertificateProperties struct {
	// SANs present in the certificate.
	SubjectAltName []*TLSProperties_CertificateProperties_SubjectAltName `protobuf:"bytes,1,rep,name=subject_alt_name,json=subjectAltName,proto3" json:"subject_alt_name,omitempty"`
	// The subject field of the certificate.
	Subject              string   `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *TLSProperties_CertificateProperties) Reset()         { *m = TLSProperties_CertificateProperties{} }
func (m *TLSProperties_CertificateProperties) String() string { return proto.CompactTextString(m) }
func (*TLSProperties_CertificateProperties) ProtoMessage()    {}
func (*TLSProperties_CertificateProperties) Descriptor() ([]byte, []int) {
	return fileDescriptor_ca1a3c8f3c17c754, []int{5, 0}
}

func (m *TLSProperties_CertificateProperties) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TLSProperties_CertificateProperties.Unmarshal(m, b)
}
func (m *TLSProperties_CertificateProperties) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TLSProperties_CertificateProperties.Marshal(b, m, deterministic)
}
func (m *TLSProperties_CertificateProperties) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TLSProperties_CertificateProperties.Merge(m, src)
}
func (m *TLSProperties_CertificateProperties) XXX_Size() int {
	return xxx_messageInfo_TLSProperties_CertificateProperties.Size(m)
}
func (m *TLSProperties_CertificateProperties) XXX_DiscardUnknown() {
	xxx_messageInfo_TLSProperties_CertificateProperties.DiscardUnknown(m)
}

var xxx_messageInfo_TLSProperties_CertificateProperties proto.InternalMessageInfo

func (m *TLSProperties_CertificateProperties) GetSubjectAltName() []*TLSProperties_CertificateProperties_SubjectAltName {
	if m != nil {
		return m.SubjectAltName
	}
	return nil
}

func (m *TLSProperties_CertificateProperties) GetSubject() string {
	if m != nil {
		return m.Subject
	}
	return ""
}

type TLSProperties_CertificateProperties_SubjectAltName struct {
	// Types that are valid to be assigned to San:
	//	*TLSProperties_CertificateProperties_SubjectAltName_Uri
	//	*TLSProperties_CertificateProperties_SubjectAltName_Dns
	San                  isTLSProperties_CertificateProperties_SubjectAltName_San `protobuf_oneof:"san"`
	XXX_NoUnkeyedLiteral struct{}                                                 `json:"-"`
	XXX_unrecognized     []byte                                                   `json:"-"`
	XXX_sizecache        int32                                                    `json:"-"`
}

func (m *TLSProperties_CertificateProperties_SubjectAltName) Reset() {
	*m = TLSProperties_CertificateProperties_SubjectAltName{}
}
func (m *TLSProperties_CertificateProperties_SubjectAltName) String() string {
	return proto.CompactTextString(m)
}
func (*TLSProperties_CertificateProperties_SubjectAltName) ProtoMessage() {}
func (*TLSProperties_CertificateProperties_SubjectAltName) Descriptor() ([]byte, []int) {
	return fileDescriptor_ca1a3c8f3c17c754, []int{5, 0, 0}
}

func (m *TLSProperties_CertificateProperties_SubjectAltName) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TLSProperties_CertificateProperties_SubjectAltName.Unmarshal(m, b)
}
func (m *TLSProperties_CertificateProperties_SubjectAltName) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TLSProperties_CertificateProperties_SubjectAltName.Marshal(b, m, deterministic)
}
func (m *TLSProperties_CertificateProperties_SubjectAltName) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TLSProperties_CertificateProperties_SubjectAltName.Merge(m, src)
}
func (m *TLSProperties_CertificateProperties_SubjectAltName) XXX_Size() int {
	return xxx_messageInfo_TLSProperties_CertificateProperties_SubjectAltName.Size(m)
}
func (m *TLSProperties_CertificateProperties_SubjectAltName) XXX_DiscardUnknown() {
	xxx_messageInfo_TLSProperties_CertificateProperties_SubjectAltName.DiscardUnknown(m)
}

var xxx_messageInfo_TLSProperties_CertificateProperties_SubjectAltName proto.InternalMessageInfo

type isTLSProperties_CertificateProperties_SubjectAltName_San interface {
	isTLSProperties_CertificateProperties_SubjectAltName_San()
}

type TLSProperties_CertificateProperties_SubjectAltName_Uri struct {
	Uri string `protobuf:"bytes,1,opt,name=uri,proto3,oneof"`
}

type TLSProperties_CertificateProperties_SubjectAltName_Dns struct {
	Dns string `protobuf:"bytes,2,opt,name=dns,proto3,oneof"`
}

func (*TLSProperties_CertificateProperties_SubjectAltName_Uri) isTLSProperties_CertificateProperties_SubjectAltName_San() {
}

func (*TLSProperties_CertificateProperties_SubjectAltName_Dns) isTLSProperties_CertificateProperties_SubjectAltName_San() {
}

func (m *TLSProperties_CertificateProperties_SubjectAltName) GetSan() isTLSProperties_CertificateProperties_SubjectAltName_San {
	if m != nil {
		return m.San
	}
	return nil
}

func (m *TLSProperties_CertificateProperties_SubjectAltName) GetUri() string {
	if x, ok := m.GetSan().(*TLSProperties_CertificateProperties_SubjectAltName_Uri); ok {
		return x.Uri
	}
	return ""
}

func (m *TLSProperties_CertificateProperties_SubjectAltName) GetDns() string {
	if x, ok := m.GetSan().(*TLSProperties_CertificateProperties_SubjectAltName_Dns); ok {
		return x.Dns
	}
	return ""
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*TLSProperties_CertificateProperties_SubjectAltName) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*TLSProperties_CertificateProperties_SubjectAltName_Uri)(nil),
		(*TLSProperties_CertificateProperties_SubjectAltName_Dns)(nil),
	}
}

// [#next-free-field: 14]
type HTTPRequestProperties struct {
	// The request method (RFC 7231/2616).
	RequestMethod core.RequestMethod `protobuf:"varint,1,opt,name=request_method,json=requestMethod,proto3,enum=envoy.api.v2.core.RequestMethod" json:"request_method,omitempty"`
	// The scheme portion of the incoming request URI.
	Scheme string `protobuf:"bytes,2,opt,name=scheme,proto3" json:"scheme,omitempty"`
	// HTTP/2 ``:authority`` or HTTP/1.1 ``Host`` header value.
	Authority string `protobuf:"bytes,3,opt,name=authority,proto3" json:"authority,omitempty"`
	// The port of the incoming request URI
	// (unused currently, as port is composed onto authority).
	Port *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=port,proto3" json:"port,omitempty"`
	// The path portion from the incoming request URI.
	Path string `protobuf:"bytes,5,opt,name=path,proto3" json:"path,omitempty"`
	// Value of the ``User-Agent`` request header.
	UserAgent string `protobuf:"bytes,6,opt,name=user_agent,json=userAgent,proto3" json:"user_agent,omitempty"`
	// Value of the ``Referer`` request header.
	Referer string `protobuf:"bytes,7,opt,name=referer,proto3" json:"referer,omitempty"`
	// Value of the ``X-Forwarded-For`` request header.
	ForwardedFor string `protobuf:"bytes,8,opt,name=forwarded_for,json=forwardedFor,proto3" json:"forwarded_for,omitempty"`
	// Value of the ``X-Request-Id`` request header
	//
	// This header is used by Envoy to uniquely identify a request.
	// It will be generated for all external requests and internal requests that
	// do not already have a request ID.
	RequestId string `protobuf:"bytes,9,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
	// Value of the ``X-Envoy-Original-Path`` request header.
	OriginalPath string `protobuf:"bytes,10,opt,name=original_path,json=originalPath,proto3" json:"original_path,omitempty"`
	// Size of the HTTP request headers in bytes.
	//
	// This value is captured from the OSI layer 7 perspective, i.e. it does not
	// include overhead from framing or encoding at other networking layers.
	RequestHeadersBytes uint64 `protobuf:"varint,11,opt,name=request_headers_bytes,json=requestHeadersBytes,proto3" json:"request_headers_bytes,omitempty"`
	// Size of the HTTP request body in bytes.
	//
	// This value is captured from the OSI layer 7 perspective, i.e. it does not
	// include overhead from framing or encoding at other networking layers.
	RequestBodyBytes uint64 `protobuf:"varint,12,opt,name=request_body_bytes,json=requestBodyBytes,proto3" json:"request_body_bytes,omitempty"`
	// Map of additional headers that have been configured to be logged.
	RequestHeaders       map[string]string `protobuf:"bytes,13,rep,name=request_headers,json=requestHeaders,proto3" json:"request_headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *HTTPRequestProperties) Reset()         { *m = HTTPRequestProperties{} }
func (m *HTTPRequestProperties) String() string { return proto.CompactTextString(m) }
func (*HTTPRequestProperties) ProtoMessage()    {}
func (*HTTPRequestProperties) Descriptor() ([]byte, []int) {
	return fileDescriptor_ca1a3c8f3c17c754, []int{6}
}

func (m *HTTPRequestProperties) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HTTPRequestProperties.Unmarshal(m, b)
}
func (m *HTTPRequestProperties) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HTTPRequestProperties.Marshal(b, m, deterministic)
}
func (m *HTTPRequestProperties) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HTTPRequestProperties.Merge(m, src)
}
func (m *HTTPRequestProperties) XXX_Size() int {
	return xxx_messageInfo_HTTPRequestProperties.Size(m)
}
func (m *HTTPRequestProperties) XXX_DiscardUnknown() {
	xxx_messageInfo_HTTPRequestProperties.DiscardUnknown(m)
}

var xxx_messageInfo_HTTPRequestProperties proto.InternalMessageInfo

func (m *HTTPRequestProperties) GetRequestMethod() core.RequestMethod {
	if m != nil {
		return m.RequestMethod
	}
	return core.RequestMethod_METHOD_UNSPECIFIED
}

func (m *HTTPRequestProperties) GetScheme() string {
	if m != nil {
		return m.Scheme
	}
	return ""
}

func (m *HTTPRequestProperties) GetAuthority() string {
	if m != nil {
		return m.Authority
	}
	return ""
}

func (m *HTTPRequestProperties) GetPort() *wrappers.UInt32Value {
	if m != nil {
		return m.Port
	}
	return nil
}

func (m *HTTPRequestProperties) GetPath() string {
	if m != nil {
		return m.Path
	}
	return ""
}

func (m *HTTPRequestProperties) GetUserAgent() string {
	if m != nil {
		return m.UserAgent
	}
	return ""
}

func (m *HTTPRequestProperties) GetReferer() string {
	if m != nil {
		return m.Referer
	}
	return ""
}

func (m *HTTPRequestProperties) GetForwardedFor() string {
	if m != nil {
		return m.ForwardedFor
	}
	return ""
}

func (m *HTTPRequestProperties) GetRequestId() string {
	if m != nil {
		return m.RequestId
	}
	return ""
}

func (m *HTTPRequestProperties) GetOriginalPath() string {
	if m != nil {
		return m.OriginalPath
	}
	return ""
}

func (m *HTTPRequestProperties) GetRequestHeadersBytes() uint64 {
	if m != nil {
		return m.RequestHeadersBytes
	}
	return 0
}

func (m *HTTPRequestProperties) GetRequestBodyBytes() uint64 {
	if m != nil {
		return m.RequestBodyBytes
	}
	return 0
}

func (m *HTTPRequestProperties) GetRequestHeaders() map[string]string {
	if m != nil {
		return m.RequestHeaders
	}
	return nil
}

// [#next-free-field: 7]
type HTTPResponseProperties struct {
	// The HTTP response code returned by Envoy.
	ResponseCode *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=response_code,json=responseCode,proto3" json:"response_code,omitempty"`
	// Size of the HTTP response headers in bytes.
	//
	// This value is captured from the OSI layer 7 perspective, i.e. it does not
	// include overhead from framing or encoding at other networking layers.
	ResponseHeadersBytes uint64 `protobuf:"varint,2,opt,name=response_headers_bytes,json=responseHeadersBytes,proto3" json:"response_headers_bytes,omitempty"`
	// Size of the HTTP response body in bytes.
	//
	// This value is captured from the OSI layer 7 perspective, i.e. it does not
	// include overhead from framing or encoding at other networking layers.
	ResponseBodyBytes uint64 `protobuf:"varint,3,opt,name=response_body_bytes,json=responseBodyBytes,proto3" json:"response_body_bytes,omitempty"`
	// Map of additional headers configured to be logged.
	ResponseHeaders map[string]string `protobuf:"bytes,4,rep,name=response_headers,json=responseHeaders,proto3" json:"response_headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Map of trailers configured to be logged.
	ResponseTrailers map[string]string `protobuf:"bytes,5,rep,name=response_trailers,json=responseTrailers,proto3" json:"response_trailers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// The HTTP response code details.
	ResponseCodeDetails  string   `protobuf:"bytes,6,opt,name=response_code_details,json=responseCodeDetails,proto3" json:"response_code_details,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *HTTPResponseProperties) Reset()         { *m = HTTPResponseProperties{} }
func (m *HTTPResponseProperties) String() string { return proto.CompactTextString(m) }
func (*HTTPResponseProperties) ProtoMessage()    {}
func (*HTTPResponseProperties) Descriptor() ([]byte, []int) {
	return fileDescriptor_ca1a3c8f3c17c754, []int{7}
}

func (m *HTTPResponseProperties) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HTTPResponseProperties.Unmarshal(m, b)
}
func (m *HTTPResponseProperties) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HTTPResponseProperties.Marshal(b, m, deterministic)
}
func (m *HTTPResponseProperties) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HTTPResponseProperties.Merge(m, src)
}
func (m *HTTPResponseProperties) XXX_Size() int {
	return xxx_messageInfo_HTTPResponseProperties.Size(m)
}
func (m *HTTPResponseProperties) XXX_DiscardUnknown() {
	xxx_messageInfo_HTTPResponseProperties.DiscardUnknown(m)
}

var xxx_messageInfo_HTTPResponseProperties proto.InternalMessageInfo

func (m *HTTPResponseProperties) GetResponseCode() *wrappers.UInt32Value {
	if m != nil {
		return m.ResponseCode
	}
	return nil
}

func (m *HTTPResponseProperties) GetResponseHeadersBytes() uint64 {
	if m != nil {
		return m.ResponseHeadersBytes
	}
	return 0
}

func (m *HTTPResponseProperties) GetResponseBodyBytes() uint64 {
	if m != nil {
		return m.ResponseBodyBytes
	}
	return 0
}

func (m *HTTPResponseProperties) GetResponseHeaders() map[string]string {
	if m != nil {
		return m.ResponseHeaders
	}
	return nil
}

func (m *HTTPResponseProperties) GetResponseTrailers() map[string]string {
	if m != nil {
		return m.ResponseTrailers
	}
	return nil
}

func (m *HTTPResponseProperties) GetResponseCodeDetails() string {
	if m != nil {
		return m.ResponseCodeDetails
	}
	return ""
}

func init() {
	proto.RegisterEnum("envoy.data.accesslog.v2.HTTPAccessLogEntry_HTTPVersion", HTTPAccessLogEntry_HTTPVersion_name, HTTPAccessLogEntry_HTTPVersion_value)
	proto.RegisterEnum("envoy.data.accesslog.v2.ResponseFlags_Unauthorized_Reason", ResponseFlags_Unauthorized_Reason_name, ResponseFlags_Unauthorized_Reason_value)
	proto.RegisterEnum("envoy.data.accesslog.v2.TLSProperties_TLSVersion", TLSProperties_TLSVersion_name, TLSProperties_TLSVersion_value)
	proto.RegisterType((*TCPAccessLogEntry)(nil), "envoy.data.accesslog.v2.TCPAccessLogEntry")
	proto.RegisterType((*HTTPAccessLogEntry)(nil), "envoy.data.accesslog.v2.HTTPAccessLogEntry")
	proto.RegisterType((*ConnectionProperties)(nil), "envoy.data.accesslog.v2.ConnectionProperties")
	proto.RegisterType((*AccessLogCommon)(nil), "envoy.data.accesslog.v2.AccessLogCommon")
	proto.RegisterType((*ResponseFlags)(nil), "envoy.data.accesslog.v2.ResponseFlags")
	proto.RegisterType((*ResponseFlags_Unauthorized)(nil), "envoy.data.accesslog.v2.ResponseFlags.Unauthorized")
	proto.RegisterType((*TLSProperties)(nil), "envoy.data.accesslog.v2.TLSProperties")
	proto.RegisterType((*TLSProperties_CertificateProperties)(nil), "envoy.data.accesslog.v2.TLSProperties.CertificateProperties")
	proto.RegisterType((*TLSProperties_CertificateProperties_SubjectAltName)(nil), "envoy.data.accesslog.v2.TLSProperties.CertificateProperties.SubjectAltName")
	proto.RegisterType((*HTTPRequestProperties)(nil), "envoy.data.accesslog.v2.HTTPRequestProperties")
	proto.RegisterMapType((map[string]string)(nil), "envoy.data.accesslog.v2.HTTPRequestProperties.RequestHeadersEntry")
	proto.RegisterType((*HTTPResponseProperties)(nil), "envoy.data.accesslog.v2.HTTPResponseProperties")
	proto.RegisterMapType((map[string]string)(nil), "envoy.data.accesslog.v2.HTTPResponseProperties.ResponseHeadersEntry")
	proto.RegisterMapType((map[string]string)(nil), "envoy.data.accesslog.v2.HTTPResponseProperties.ResponseTrailersEntry")
}

func init() {
	proto.RegisterFile("envoy/data/accesslog/v2/accesslog.proto", fileDescriptor_ca1a3c8f3c17c754)
}

var fileDescriptor_ca1a3c8f3c17c754 = []byte{
	// 2114 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xdd, 0x72, 0x1b, 0x49,
	0x15, 0x8e, 0xe2, 0x9f, 0x48, 0x47, 0xb2, 0x2d, 0xb7, 0x64, 0x5b, 0x56, 0xe2, 0xb5, 0x23, 0x76,
	0x21, 0x14, 0x20, 0x6f, 0x1c, 0x8a, 0x64, 0x53, 0x14, 0x5b, 0x92, 0x2c, 0x97, 0xc5, 0x3a, 0x89,
	0x69, 0xc9, 0x86, 0xa2, 0xb6, 0x18, 0xda, 0x33, 0x2d, 0x6b, 0xc8, 0x68, 0x5a, 0xf4, 0xb4, 0x94,
	0x88, 0xa2, 0xb8, 0xe0, 0x31, 0xf6, 0x19, 0x78, 0x05, 0x78, 0x04, 0x8a, 0x77, 0xe0, 0x8a, 0x3b,
	0xae, 0xf7, 0x8a, 0xea, 0x9f, 0xf9, 0x93, 0xe5, 0x28, 0x09, 0x14, 0xba, 0x52, 0x9f, 0xfe, 0xce,
	0xd7, 0xa7, 0x4f, 0x9f, 0x73, 0xfa, 0xf4, 0xc0, 0xf7, 0xa8, 0x3f, 0x61, 0xd3, 0x43, 0x87, 0x08,
	0x72, 0x48, 0x6c, 0x9b, 0x06, 0x81, 0xc7, 0xae, 0x0f, 0x27, 0x47, 0xf1, 0xa0, 0x3e, 0xe2, 0x4c,
	0x30, 0xb4, 0xa3, 0x80, 0x75, 0x09, 0xac, 0xc7, 0x73, 0x93, 0xa3, 0xea, 0xbe, 0x66, 0x20, 0x23,
	0x57, 0xaa, 0xd9, 0x8c, 0xd3, 0x43, 0xe2, 0x38, 0x9c, 0x06, 0x81, 0xd6, 0xac, 0x3e, 0xb8, 0x09,
	0xb8, 0x22, 0x01, 0x35, 0xb3, 0x9f, 0x5c, 0x33, 0x76, 0xed, 0xd1, 0x43, 0x35, 0xba, 0x1a, 0xf7,
	0x0f, 0x9d, 0x31, 0x27, 0xc2, 0x65, 0xbe, 0x99, 0xdf, 0x9f, 0x9d, 0x17, 0xee, 0x90, 0x06, 0x82,
	0x0c, 0x47, 0xb7, 0x11, 0xbc, 0xe1, 0x64, 0x34, 0xa2, 0x3c, 0x5c, 0x7e, 0x67, 0x42, 0x3c, 0xd7,
	0x21, 0x82, 0x1e, 0x86, 0x7f, 0xf4, 0x44, 0xed, 0xef, 0x19, 0xd8, 0xec, 0xb5, 0xce, 0x1b, 0x6a,
	0x33, 0x67, 0xec, 0xba, 0xed, 0x0b, 0x3e, 0x45, 0x17, 0xb0, 0x69, 0xb3, 0xe1, 0x90, 0xf9, 0xd6,
	0x88, 0xb3, 0x11, 0xe5, 0xc2, 0xa5, 0x41, 0x25, 0x73, 0x90, 0x79, 0x94, 0x3f, 0x7a, 0x54, 0xbf,
	0xc5, 0x07, 0xf5, 0x88, 0xa3, 0xa5, 0x54, 0x71, 0x51, 0x53, 0x9c, 0x47, 0x0c, 0xe8, 0x0a, 0xb6,
	0x6c, 0xe6, 0xfb, 0xd4, 0x96, 0x5b, 0x4b, 0x52, 0xdf, 0x55, 0xd4, 0x3f, 0xba, 0x95, 0xba, 0x15,
	0x69, 0xc5, 0x6c, 0xb8, 0x6c, 0xcf, 0x91, 0xd6, 0xfe, 0xba, 0x04, 0xe8, 0xb4, 0xd7, 0xfb, 0xbf,
	0xed, 0xa8, 0xa8, 0xfc, 0x68, 0x33, 0xcf, 0x9a, 0x50, 0x1e, 0xb8, 0xcc, 0x57, 0x9b, 0x59, 0x3f,
	0x7a, 0x7a, 0x2b, 0xeb, 0x4d, 0xeb, 0x94, 0xe8, 0x52, 0xab, 0xe3, 0x8d, 0x90, 0xd0, 0x08, 0xd0,
	0x29, 0xdc, 0xe3, 0xf4, 0xf7, 0x63, 0x1a, 0x88, 0xca, 0x92, 0x32, 0xb8, 0xfe, 0x4e, 0x6a, 0xac,
	0xb1, 0x09, 0x47, 0x85, 0xea, 0xe8, 0x2b, 0xc8, 0x72, 0x1a, 0x8c, 0x98, 0x1f, 0xd0, 0xca, 0xb2,
	0xa2, 0x3a, 0x5c, 0x40, 0xa5, 0xc1, 0x09, 0xae, 0x88, 0xa0, 0x76, 0x01, 0xf9, 0x84, 0xd9, 0xa8,
	0x02, 0xe5, 0x73, 0xfc, 0xaa, 0xf7, 0xaa, 0xf5, 0xea, 0xcc, 0xba, 0x78, 0xd9, 0x3d, 0x6f, 0xb7,
	0x3a, 0x27, 0x9d, 0xf6, 0x71, 0xf1, 0x0e, 0x02, 0x58, 0x95, 0xc0, 0xc7, 0x9f, 0x17, 0x33, 0xd1,
	0xff, 0xc7, 0xc5, 0xbb, 0x28, 0x07, 0x2b, 0xf2, 0xff, 0x51, 0x71, 0x29, 0xfc, 0xfb, 0xa4, 0xb8,
	0x5c, 0xfb, 0x1a, 0xca, 0xf3, 0x4e, 0x1b, 0x7d, 0x06, 0xeb, 0x9c, 0xda, 0xd4, 0x9d, 0x50, 0xc7,
	0xba, 0x9a, 0x0a, 0x73, 0x7a, 0xcb, 0x78, 0x2d, 0x94, 0x36, 0xa5, 0x10, 0xed, 0x01, 0x04, 0xd4,
	0x17, 0x06, 0x72, 0x57, 0x41, 0x72, 0x52, 0xa2, 0xa6, 0x6b, 0x7f, 0x29, 0xc0, 0xc6, 0xcc, 0xa9,
	0xa2, 0x67, 0x90, 0x0f, 0xc8, 0x70, 0xe4, 0x51, 0x8b, 0x13, 0x41, 0x15, 0x6d, 0xa6, 0xb9, 0xf3,
	0x6d, 0xb3, 0x8c, 0xd0, 0xee, 0x1d, 0xf5, 0xfb, 0xf7, 0x97, 0x0f, 0xef, 0x98, 0x1f, 0x06, 0x8d,
	0xc5, 0x44, 0x50, 0x74, 0x09, 0xbb, 0x0e, 0x7b, 0xe3, 0x07, 0x82, 0x53, 0x32, 0xb4, 0x38, 0x1d,
	0x32, 0x41, 0x2d, 0x93, 0xf7, 0x26, 0xa6, 0xab, 0xc6, 0xc1, 0x64, 0xe4, 0x4a, 0xaf, 0xca, 0xc4,
	0xaf, 0x37, 0x34, 0x02, 0xef, 0xc4, 0xca, 0x58, 0xe9, 0x9a, 0x09, 0xd4, 0x83, 0x4a, 0x82, 0xd7,
	0x63, 0x36, 0xf1, 0x22, 0xda, 0xa5, 0x85, 0xb4, 0xdb, 0xb1, 0xee, 0x99, 0x54, 0x0d, 0x59, 0x5f,
	0xc0, 0xba, 0xf0, 0x82, 0x64, 0xfc, 0xeb, 0x18, 0xf8, 0xee, 0xad, 0x31, 0xd0, 0x3b, 0xeb, 0x26,
	0x8e, 0x7e, 0x4d, 0x78, 0x41, 0xe2, 0x40, 0xbe, 0x00, 0x08, 0x04, 0xe1, 0xc2, 0x92, 0xb5, 0xa8,
	0xb2, 0x62, 0xcc, 0xd2, 0x75, 0xa8, 0x1e, 0xd6, 0xa1, 0x7a, 0x2f, 0x2c, 0x54, 0x38, 0xa7, 0xd0,
	0x72, 0x8c, 0x3a, 0x50, 0x96, 0x4a, 0x96, 0x60, 0x96, 0x47, 0x02, 0x61, 0xf1, 0xb7, 0xea, 0xbc,
	0x2a, 0xab, 0x8a, 0x64, 0xf7, 0x06, 0xc9, 0xb1, 0xa9, 0x86, 0xb8, 0x28, 0xd5, 0x7a, 0xec, 0x8c,
	0x04, 0x02, 0xbf, 0x95, 0x27, 0x8a, 0xbe, 0x86, 0x4f, 0x42, 0xaa, 0xbe, 0xcb, 0x03, 0x61, 0x8d,
	0x47, 0xc6, 0x6d, 0xc2, 0x90, 0xde, 0x5b, 0x44, 0xba, 0xab, 0x49, 0x4f, 0xa4, 0xfa, 0x85, 0xd1,
	0xee, 0x69, 0xf6, 0x5f, 0xc3, 0x5e, 0xca, 0xd0, 0x1b, 0xe4, 0xd9, 0x45, 0xe4, 0x95, 0xd8, 0xe2,
	0x19, 0xee, 0xdb, 0x2d, 0x0f, 0xdd, 0x91, 0xfb, 0x18, 0xcb, 0xf1, 0x02, 0xcb, 0x43, 0x72, 0xf8,
	0x08, 0xcb, 0x0d, 0xf7, 0x6f, 0xe1, 0x20, 0x6d, 0x79, 0x22, 0x58, 0x43, 0xc7, 0xe4, 0x17, 0xd1,
	0xdf, 0x4f, 0xd8, 0x7e, 0x1c, 0xe9, 0x1b, 0xdf, 0xfc, 0x06, 0xf6, 0x53, 0xd6, 0xcf, 0x59, 0xa0,
	0xb0, 0x68, 0x81, 0x6a, 0x6c, 0xff, 0x0d, 0x7e, 0x0c, 0x3b, 0xb1, 0x43, 0xd2, 0x69, 0xbb, 0xb6,
	0x30, 0xbf, 0xb6, 0x42, 0xd5, 0x74, 0xd2, 0x9e, 0xc3, 0x76, 0xc4, 0x99, 0x4e, 0xd9, 0xf5, 0x85,
	0x94, 0xe5, 0x50, 0x33, 0x95, 0xb0, 0xdf, 0x87, 0x62, 0xc4, 0x68, 0x7b, 0xe3, 0x40, 0x50, 0x5e,
	0xd9, 0x38, 0xc8, 0x3c, 0xca, 0xe1, 0x8d, 0x50, 0xde, 0xd2, 0x62, 0x99, 0xdb, 0x61, 0x61, 0xb6,
	0xfa, 0x1e, 0xb9, 0x0e, 0x2a, 0xc5, 0x05, 0xb9, 0x1d, 0xd6, 0xf6, 0x13, 0x89, 0x96, 0x55, 0x34,
	0x31, 0x44, 0x4f, 0x21, 0x3b, 0xa4, 0x82, 0x48, 0xad, 0xca, 0xa6, 0x22, 0xba, 0x3f, 0xc7, 0xfa,
	0x17, 0x06, 0x82, 0x23, 0x30, 0xea, 0xc0, 0xc3, 0x38, 0x47, 0x38, 0xf1, 0x83, 0x11, 0xe3, 0xc2,
	0xea, 0x13, 0xd7, 0x1b, 0x73, 0x6a, 0x71, 0x4a, 0x02, 0xe6, 0x57, 0x90, 0xda, 0xc3, 0x27, 0x21,
	0xb0, 0x17, 0xe2, 0x4e, 0x34, 0x0c, 0x2b, 0x94, 0xac, 0xe4, 0x9c, 0x8d, 0x05, 0xb5, 0x7c, 0x32,
	0xa4, 0x95, 0x92, 0xd2, 0xc9, 0x29, 0xc9, 0x4b, 0x32, 0xa4, 0xc8, 0x86, 0x83, 0x44, 0x54, 0x38,
	0x2e, 0xa7, 0xb6, 0x98, 0x3d, 0xcb, 0xf2, 0x42, 0xc7, 0xef, 0xc5, 0x1c, 0xc7, 0x8a, 0x22, 0x75,
	0xa6, 0xb5, 0x7f, 0xe4, 0x60, 0x2d, 0xe5, 0x28, 0xf4, 0x0c, 0x2a, 0x72, 0x37, 0xd4, 0x31, 0x67,
	0x3c, 0xa0, 0xc4, 0x13, 0x03, 0x7b, 0x40, 0xed, 0xd7, 0xea, 0xe6, 0xc8, 0xe2, 0x6d, 0x3d, 0xaf,
	0x4e, 0xf2, 0x34, 0x9e, 0x45, 0x75, 0x28, 0xf9, 0xcc, 0xe0, 0xa7, 0x51, 0x3e, 0xaa, 0x6b, 0x22,
	0x8b, 0x37, 0x7d, 0xa6, 0xb1, 0xd3, 0x30, 0xd7, 0xe4, 0x4a, 0x89, 0x18, 0x55, 0x17, 0xb8, 0x2a,
	0xb5, 0x6c, 0xac, 0xfb, 0x80, 0x2c, 0xde, 0x8e, 0x03, 0x51, 0x4d, 0xf7, 0xf4, 0x2c, 0xda, 0x87,
	0xbc, 0x36, 0x8e, 0xd3, 0x80, 0x0a, 0x55, 0xe5, 0xb3, 0x18, 0x94, 0x08, 0x4b, 0x09, 0x3a, 0x82,
	0xad, 0xd9, 0xf0, 0xd7, 0xd0, 0x15, 0x05, 0x2d, 0xa5, 0x03, 0x5c, 0xeb, 0xfc, 0x0c, 0xee, 0xc7,
	0xc1, 0x18, 0x37, 0x71, 0xe6, 0x68, 0x55, 0xe9, 0xce, 0xe2, 0xdd, 0x28, 0x2e, 0x23, 0x84, 0x39,
	0x54, 0x74, 0x02, 0xfb, 0xf3, 0xf4, 0x05, 0xe5, 0x43, 0xd7, 0x57, 0x19, 0xab, 0x2a, 0x75, 0x16,
	0xef, 0xdd, 0xe4, 0xe8, 0xc5, 0x20, 0xf4, 0x03, 0xd8, 0x8c, 0x78, 0xd8, 0x84, 0xf2, 0xbe, 0xc7,
	0xde, 0xa8, 0x32, 0x9c, 0xc5, 0x51, 0xb6, 0xbc, 0x32, 0x72, 0xf4, 0x29, 0xac, 0xfb, 0xcc, 0xd2,
	0x61, 0xd4, 0x67, 0x63, 0xdf, 0x51, 0x35, 0x35, 0x8b, 0x0b, 0x3e, 0xc3, 0x52, 0x78, 0x22, 0x65,
	0xb2, 0xb5, 0x70, 0xa8, 0x47, 0xa6, 0x96, 0xeb, 0xff, 0x8e, 0xda, 0x82, 0x3a, 0xaa, 0x38, 0x66,
	0xf1, 0x9a, 0x92, 0x76, 0x8c, 0x50, 0xc2, 0xfa, 0x64, 0xec, 0x89, 0x18, 0x96, 0xd7, 0x30, 0x25,
	0x8d, 0x60, 0x0f, 0xa1, 0x20, 0xfb, 0x08, 0xcb, 0x73, 0x87, 0xae, 0x04, 0x15, 0x14, 0x28, 0x2f,
	0x65, 0x67, 0x5a, 0x84, 0xfa, 0x50, 0x1e, 0xfb, 0x64, 0x2c, 0x06, 0x8c, 0xbb, 0x7f, 0xa0, 0x8e,
	0xe5, 0x50, 0x41, 0x5c, 0x2f, 0xac, 0x3d, 0x4f, 0xde, 0x2f, 0x67, 0xeb, 0x17, 0x09, 0x0a, 0x5c,
	0x4a, 0x12, 0x1e, 0x6b, 0x3e, 0xf4, 0x14, 0x2a, 0xb1, 0x29, 0x56, 0x40, 0xf9, 0xc4, 0xb5, 0xa9,
	0x45, 0x39, 0x67, 0x5c, 0x15, 0xa5, 0x2c, 0xde, 0x8a, 0xcc, 0xea, 0xea, 0xd9, 0xb6, 0x9c, 0x44,
	0x3f, 0x87, 0x87, 0x89, 0xe4, 0xba, 0xe5, 0xb8, 0x36, 0x14, 0xc3, 0x7e, 0x0c, 0x9c, 0x7f, 0x60,
	0x0d, 0xd8, 0x4b, 0x04, 0x9b, 0xe0, 0x53, 0x63, 0x0e, 0x7d, 0x6b, 0x53, 0xea, 0x50, 0x47, 0x55,
	0xaa, 0x2c, 0xae, 0xc6, 0x41, 0x27, 0xf8, 0x54, 0x99, 0xd4, 0x36, 0x08, 0x99, 0x3a, 0x86, 0xc0,
	0x75, 0x3c, 0x1a, 0x65, 0xc1, 0xa6, 0x4e, 0x1d, 0x3d, 0xd5, 0x71, 0x3c, 0x1a, 0x26, 0x40, 0x03,
	0xf6, 0x5c, 0x5f, 0x3d, 0x74, 0x2c, 0xe5, 0xca, 0x28, 0x7f, 0x06, 0x94, 0x38, 0x94, 0x07, 0xaa,
	0x02, 0x65, 0x71, 0xd5, 0x80, 0xda, 0x12, 0x63, 0x72, 0xe8, 0x54, 0x23, 0xd0, 0xf3, 0x54, 0x6b,
	0x17, 0xf5, 0xf8, 0xda, 0x77, 0x25, 0xa5, 0x9e, 0x68, 0xdf, 0xce, 0xcd, 0xbc, 0xf2, 0x5e, 0xf5,
	0x9b, 0x0c, 0x14, 0x92, 0x87, 0x83, 0x30, 0xac, 0x9a, 0xd2, 0x97, 0x51, 0x6f, 0x83, 0xe7, 0x1f,
	0x71, 0xc2, 0x75, 0x5d, 0x16, 0xb1, 0x61, 0xaa, 0xfd, 0x04, 0x56, 0x4d, 0xa1, 0xdc, 0x06, 0x84,
	0xdb, 0x8d, 0xee, 0xab, 0x97, 0x33, 0x7d, 0x77, 0x19, 0x8a, 0xed, 0x5f, 0xf5, 0xda, 0xf8, 0x65,
	0xe3, 0xcc, 0xea, 0xb6, 0xf1, 0x65, 0xa7, 0xd5, 0x2e, 0x66, 0x6a, 0x7f, 0x5b, 0x85, 0xb5, 0x54,
	0x5f, 0x87, 0x30, 0xe4, 0x65, 0x5f, 0x18, 0x3e, 0x5f, 0xb4, 0x89, 0x8f, 0xdf, 0xaf, 0x29, 0x94,
	0xa3, 0xf0, 0xe1, 0x02, 0xc2, 0x0b, 0xc2, 0xd7, 0xc0, 0x09, 0x14, 0x25, 0xa7, 0xed, 0x8e, 0x06,
	0x94, 0x5b, 0xc1, 0xd8, 0x15, 0xd4, 0x34, 0xc4, 0x0f, 0x6e, 0xdc, 0xd8, 0x17, 0x1d, 0x5f, 0x3c,
	0x39, 0xba, 0x24, 0xde, 0x98, 0x62, 0xd9, 0xa1, 0xb6, 0x94, 0x52, 0x57, 0xea, 0xa0, 0x47, 0x9a,
	0x27, 0xf0, 0x5d, 0x6b, 0xc0, 0x02, 0xa1, 0xae, 0x82, 0x25, 0x75, 0x15, 0x48, 0x64, 0xd7, 0x77,
	0x4f, 0x8d, 0x14, 0xfd, 0x09, 0x1e, 0xe8, 0xa2, 0x67, 0x4b, 0xcb, 0xfa, 0xae, 0x2d, 0x03, 0xff,
	0x46, 0xaf, 0xfb, 0xd3, 0xf7, 0xdc, 0x56, 0x2b, 0x26, 0x49, 0x74, 0xc0, 0x55, 0xb5, 0xc2, 0xdc,
	0x39, 0xf4, 0x47, 0xb8, 0x3f, 0xa2, 0x94, 0xdf, 0xb6, 0xfc, 0xca, 0xff, 0x60, 0xf9, 0x5d, 0xb9,
	0xc0, 0xfc, 0xd5, 0x3f, 0xd5, 0xbd, 0x7d, 0x40, 0x03, 0xe9, 0x7e, 0xcb, 0x75, 0x54, 0x41, 0xce,
	0xe1, 0x82, 0xf4, 0x92, 0x16, 0x76, 0x9c, 0xea, 0xbf, 0x32, 0xb0, 0x35, 0x5f, 0x7f, 0x0c, 0xc5,
	0x60, 0x7c, 0x25, 0x2b, 0x98, 0x45, 0x3c, 0xa1, 0xaf, 0xdc, 0xcc, 0xc1, 0xd2, 0xa3, 0xfc, 0xd1,
	0x57, 0xff, 0x8d, 0xc9, 0xf5, 0xae, 0x26, 0x6d, 0x78, 0x42, 0x5e, 0xda, 0x78, 0x3d, 0x48, 0x8d,
	0x51, 0x05, 0xee, 0x19, 0x89, 0x8a, 0x8e, 0x1c, 0x0e, 0x87, 0xd5, 0x2f, 0x61, 0x3d, 0xad, 0x8b,
	0x10, 0x2c, 0x8d, 0xb9, 0xab, 0xc2, 0x33, 0x77, 0x7a, 0x07, 0xcb, 0x81, 0x94, 0x39, 0xbe, 0x7e,
	0x6a, 0x29, 0x99, 0xe3, 0x07, 0xcd, 0x15, 0x58, 0x0a, 0x88, 0x5f, 0xfb, 0x25, 0x40, 0x1c, 0x9b,
	0x68, 0x07, 0x4a, 0x97, 0x6d, 0xdc, 0xed, 0xdc, 0x48, 0x92, 0x1c, 0xac, 0xf4, 0xce, 0xba, 0x93,
	0xc7, 0xc5, 0x0c, 0xca, 0xc3, 0x3d, 0xf5, 0xd7, 0x92, 0x8f, 0xd3, 0x68, 0x20, 0x9f, 0xa7, 0xd1,
	0x40, 0x3e, 0x50, 0xbf, 0x59, 0x81, 0xad, 0xb9, 0xef, 0x6c, 0xf4, 0x0b, 0xd9, 0x84, 0xe9, 0x42,
	0x33, 0xa4, 0x62, 0xc0, 0x1c, 0x93, 0x4b, 0x07, 0x73, 0x1a, 0x10, 0xa3, 0xfd, 0x42, 0xe1, 0x9a,
	0xd9, 0x6f, 0x9b, 0x2b, 0x7f, 0xce, 0xdc, 0x2d, 0x66, 0x64, 0x23, 0x96, 0x98, 0x40, 0xdb, 0xb0,
	0x1a, 0xd8, 0x03, 0x3a, 0xa4, 0xc6, 0x3f, 0x66, 0x84, 0x1e, 0x40, 0xce, 0x94, 0x06, 0x31, 0x35,
	0x09, 0x11, 0x0b, 0xd0, 0xe7, 0xb0, 0x2c, 0xfb, 0x29, 0x13, 0xf3, 0xef, 0xce, 0x38, 0x85, 0x44,
	0x08, 0x96, 0x47, 0x44, 0x0c, 0x54, 0x98, 0xe6, 0xb0, 0xfa, 0x2f, 0x1b, 0xb0, 0x71, 0x40, 0xb9,
	0x45, 0xae, 0xa9, 0x2f, 0x4c, 0x3c, 0xe5, 0xa4, 0xa4, 0x21, 0x05, 0xf2, 0xec, 0x38, 0xed, 0x53,
	0x4e, 0xb9, 0xba, 0xb8, 0x73, 0x38, 0x1c, 0xa2, 0xef, 0xc0, 0x5a, 0x9f, 0xf1, 0x37, 0x84, 0x3b,
	0xd4, 0xb1, 0xfa, 0x8c, 0xab, 0xeb, 0x39, 0x87, 0x0b, 0x91, 0xf0, 0x84, 0x71, 0xd5, 0xde, 0x19,
	0x67, 0xb9, 0xfa, 0x5a, 0x96, 0xed, 0x9d, 0x96, 0x74, 0x1c, 0xc9, 0xc1, 0xb8, 0x7b, 0xed, 0xfa,
	0xc4, 0xb3, 0x94, 0x65, 0xa0, 0x39, 0x42, 0xe1, 0xb9, 0xb4, 0xf0, 0x08, 0xb6, 0x66, 0x2a, 0xbb,
	0x79, 0xf7, 0xe7, 0xd5, 0xbb, 0xbf, 0xc4, 0x53, 0x35, 0x5d, 0x7f, 0x20, 0xf8, 0x21, 0xa0, 0x50,
	0xe7, 0x8a, 0x39, 0x53, 0xa3, 0x50, 0x50, 0x0a, 0x45, 0x33, 0xd3, 0x64, 0xce, 0x54, 0xa3, 0x5f,
	0xc3, 0xc6, 0xec, 0xdd, 0xb1, 0xa6, 0xd2, 0xa2, 0xf9, 0x61, 0xdf, 0x60, 0xea, 0xe9, 0xeb, 0x45,
	0x7d, 0xf5, 0xc1, 0xeb, 0x69, 0xfb, 0xaa, 0x0d, 0x28, 0xcd, 0x81, 0xa1, 0x22, 0x2c, 0xbd, 0xa6,
	0x53, 0x1d, 0xf8, 0x58, 0xfe, 0x45, 0x65, 0x58, 0x99, 0xc8, 0xc3, 0x33, 0x41, 0xa1, 0x07, 0xcf,
	0xef, 0x3e, 0xcb, 0xd4, 0xfe, 0xb9, 0x0c, 0xdb, 0xf3, 0xbf, 0xdc, 0xa0, 0x06, 0x44, 0x4d, 0xbe,
	0x65, 0x33, 0x87, 0x9a, 0xaf, 0x5f, 0xef, 0x8e, 0x8e, 0x42, 0xa8, 0xd2, 0x62, 0x0e, 0x45, 0x3f,
	0x86, 0xed, 0x88, 0x22, 0xed, 0x70, 0xfd, 0xa1, 0xa5, 0x1c, 0xce, 0xa6, 0x3c, 0x5e, 0x87, 0x52,
	0xa4, 0x95, 0x70, 0xf9, 0x92, 0x52, 0xd9, 0x0c, 0xa7, 0x62, 0x9f, 0x33, 0x28, 0xce, 0xae, 0x52,
	0x59, 0x56, 0x4e, 0x3f, 0xfe, 0xc0, 0xaf, 0x55, 0xd1, 0x75, 0x9a, 0x72, 0xfb, 0xc6, 0x8c, 0x95,
	0x88, 0x43, 0x64, 0x85, 0x7c, 0xb4, 0xb8, 0x9e, 0x5c, 0x71, 0x45, 0xad, 0xd8, 0xfe, 0xd8, 0x15,
	0x7b, 0x86, 0x47, 0x2f, 0x19, 0x6d, 0x28, 0x14, 0xeb, 0xd0, 0x4d, 0x9c, 0x46, 0xd4, 0x03, 0xea,
	0x3c, 0x2b, 0x25, 0xfd, 0x6e, 0xda, 0xb9, 0x6a, 0x13, 0xca, 0xf3, 0x36, 0xf4, 0x21, 0x01, 0x52,
	0x6d, 0xc1, 0xd6, 0x5c, 0x13, 0x3f, 0x84, 0xa4, 0xf9, 0x05, 0x7c, 0xe6, 0x32, 0xed, 0x99, 0x11,
	0x67, 0x6f, 0xa7, 0xb7, 0x39, 0xa9, 0xb9, 0xde, 0x08, 0x47, 0xaa, 0x43, 0x3a, 0xcf, 0x5c, 0xad,
	0xaa, 0x30, 0x7b, 0xf2, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xba, 0x60, 0xc1, 0x96, 0x73, 0x17,
	0x00, 0x00,
}
0707010000013A000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000002C00000000cilium-proxy-20200109/go/envoy/data/cluster   0707010000013B000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003400000000cilium-proxy-20200109/go/envoy/data/cluster/v2alpha   0707010000013C000081A4000003E800000064000000015E17A247000057A9000000000000000000000000000000000000005200000000cilium-proxy-20200109/go/envoy/data/cluster/v2alpha/outlier_detection_event.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/data/cluster/v2alpha/outlier_detection_event.proto

package envoy_data_cluster_v2alpha

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Type of ejection that took place
type OutlierEjectionType int32

const (
	// In case upstream host returns certain number of consecutive 5xx.
	// If
	// :ref:`outlier_detection.split_external_local_origin_errors<envoy_api_field_cluster.OutlierDetection.split_external_local_origin_errors>`
	// is *false*, all type of errors are treated as HTTP 5xx errors.
	// See :ref:`Cluster outlier detection <arch_overview_outlier_detection>` documentation for
	// details.
	OutlierEjectionType_CONSECUTIVE_5XX OutlierEjectionType = 0
	// In case upstream host returns certain number of consecutive gateway errors
	OutlierEjectionType_CONSECUTIVE_GATEWAY_FAILURE OutlierEjectionType = 1
	// Runs over aggregated success rate statistics from every host in cluster
	// and selects hosts for which ratio of successful replies deviates from other hosts
	// in the cluster.
	// If
	// :ref:`outlier_detection.split_external_local_origin_errors<envoy_api_field_cluster.OutlierDetection.split_external_local_origin_errors>`
	// is *false*, all errors (externally and locally generated) are used to calculate success rate
	// statistics. See :ref:`Cluster outlier detection <arch_overview_outlier_detection>`
	// documentation for details.
	OutlierEjectionType_SUCCESS_RATE OutlierEjectionType = 2
	// Consecutive local origin failures: Connection failures, resets, timeouts, etc
	// This type of ejection happens only when
	// :ref:`outlier_detection.split_external_local_origin_errors<envoy_api_field_cluster.OutlierDetection.split_external_local_origin_errors>`
	// is set to *true*.
	// See :ref:`Cluster outlier detection <arch_overview_outlier_detection>` documentation for
	OutlierEjectionType_CONSECUTIVE_LOCAL_ORIGIN_FAILURE OutlierEjectionType = 3
	// Runs over aggregated success rate statistics for local origin failures
	// for all hosts in the cluster and selects hosts for which success rate deviates from other
	// hosts in the cluster. This type of ejection happens only when
	// :ref:`outlier_detection.split_external_local_origin_errors<envoy_api_field_cluster.OutlierDetection.split_external_local_origin_errors>`
	// is set to *true*.
	// See :ref:`Cluster outlier detection <arch_overview_outlier_detection>` documentation for
	OutlierEjectionType_SUCCESS_RATE_LOCAL_ORIGIN OutlierEjectionType = 4
	// Runs over aggregated success rate statistics from every host in cluster and selects hosts for
	// which ratio of failed replies is above configured value.
	OutlierEjectionType_FAILURE_PERCENTAGE OutlierEjectionType = 5
	// Runs over aggregated success rate statistics for local origin failures from every host in
	// cluster and selects hosts for which ratio of failed replies is above configured value.
	OutlierEjectionType_FAILURE_PERCENTAGE_LOCAL_ORIGIN OutlierEjectionType = 6
)

var OutlierEjectionType_name = map[int32]string{
	0: "CONSECUTIVE_5XX",
	1: "CONSECUTIVE_GATEWAY_FAILURE",
	2: "SUCCESS_RATE",
	3: "CONSECUTIVE_LOCAL_ORIGIN_FAILURE",
	4: "SUCCESS_RATE_LOCAL_ORIGIN",
	5: "FAILURE_PERCENTAGE",
	6: "FAILURE_PERCENTAGE_LOCAL_ORIGIN",
}

var OutlierEjectionType_value = map[string]int32{
	"CONSECUTIVE_5XX":                  0,
	"CONSECUTIVE_GATEWAY_FAILURE":      1,
	"SUCCESS_RATE":                     2,
	"CONSECUTIVE_LOCAL_ORIGIN_FAILURE": 3,
	"SUCCESS_RATE_LOCAL_ORIGIN":        4,
	"FAILURE_PERCENTAGE":               5,
	"FAILURE_PERCENTAGE_LOCAL_ORIGIN":  6,
}

func (x OutlierEjectionType) String() string {
	return proto.EnumName(OutlierEjectionType_name, int32(x))
}

func (OutlierEjectionType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_5e03c92c55863094, []int{0}
}

// Represents possible action applied to upstream host
type Action int32

const (
	// In case host was excluded from service
	Action_EJECT Action = 0
	// In case host was brought back into service
	Action_UNEJECT Action = 1
)

var Action_name = map[int32]string{
	0: "EJECT",
	1: "UNEJECT",
}

var Action_value = map[string]int32{
	"EJECT":   0,
	"UNEJECT": 1,
}

func (x Action) String() string {
	return proto.EnumName(Action_name, int32(x))
}

func (Action) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_5e03c92c55863094, []int{1}
}

// [#next-free-field: 12]
type OutlierDetectionEvent struct {
	// In case of eject represents type of ejection that took place.
	Type OutlierEjectionType `protobuf:"varint,1,opt,name=type,proto3,enum=envoy.data.cluster.v2alpha.OutlierEjectionType" json:"type,omitempty"`
	// Timestamp for event.
	Timestamp *timestamp.Timestamp `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
	// The time in seconds since the last action (either an ejection or unejection) took place.
	SecsSinceLastAction *wrappers.UInt64Value `protobuf:"bytes,3,opt,name=secs_since_last_action,json=secsSinceLastAction,proto3" json:"secs_since_last_action,omitempty"`
	// The :ref:`cluster <envoy_api_msg_Cluster>` that owns the ejected host.
	ClusterName string `protobuf:"bytes,4,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"`
	// The URL of the ejected host. E.g., ``tcp://1.2.3.4:80``.
	UpstreamUrl string `protobuf:"bytes,5,opt,name=upstream_url,json=upstreamUrl,proto3" json:"upstream_url,omitempty"`
	// The action that took place.
	Action Action `protobuf:"varint,6,opt,name=action,proto3,enum=envoy.data.cluster.v2alpha.Action" json:"action,omitempty"`
	// If ``action`` is ``eject``, specifies the number of times the host has been ejected (local to
	// that Envoy and gets reset if the host gets removed from the upstream cluster for any reason and
	// then re-added).
	NumEjections uint32 `protobuf:"varint,7,opt,name=num_ejections,json=numEjections,proto3" json:"num_ejections,omitempty"`
	// If ``action`` is ``eject``, specifies if the ejection was enforced. ``true`` means the host was
	// ejected. ``false`` means the event was logged but the host was not actually ejected.
	Enforced bool `protobuf:"varint,8,opt,name=enforced,proto3" json:"enforced,omitempty"`
	// Types that are valid to be assigned to Event:
	//	*OutlierDetectionEvent_EjectSuccessRateEvent
	//	*OutlierDetectionEvent_EjectConsecutiveEvent
	//	*OutlierDetectionEvent_EjectFailurePercentageEvent
	Event                isOutlierDetectionEvent_Event `protobuf_oneof:"event"`
	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
	XXX_unrecognized     []byte                        `json:"-"`
	XXX_sizecache        int32                         `json:"-"`
}

func (m *OutlierDetectionEvent) Reset()         { *m = OutlierDetectionEvent{} }
func (m *OutlierDetectionEvent) String() string { return proto.CompactTextString(m) }
func (*OutlierDetectionEvent) ProtoMessage()    {}
func (*OutlierDetectionEvent) Descriptor() ([]byte, []int) {
	return fileDescriptor_5e03c92c55863094, []int{0}
}

func (m *OutlierDetectionEvent) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OutlierDetectionEvent.Unmarshal(m, b)
}
func (m *OutlierDetectionEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OutlierDetectionEvent.Marshal(b, m, deterministic)
}
func (m *OutlierDetectionEvent) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OutlierDetectionEvent.Merge(m, src)
}
func (m *OutlierDetectionEvent) XXX_Size() int {
	return xxx_messageInfo_OutlierDetectionEvent.Size(m)
}
func (m *OutlierDetectionEvent) XXX_DiscardUnknown() {
	xxx_messageInfo_OutlierDetectionEvent.DiscardUnknown(m)
}

var xxx_messageInfo_OutlierDetectionEvent proto.InternalMessageInfo

func (m *OutlierDetectionEvent) GetType() OutlierEjectionType {
	if m != nil {
		return m.Type
	}
	return OutlierEjectionType_CONSECUTIVE_5XX
}

func (m *OutlierDetectionEvent) GetTimestamp() *timestamp.Timestamp {
	if m != nil {
		return m.Timestamp
	}
	return nil
}

func (m *OutlierDetectionEvent) GetSecsSinceLastAction() *wrappers.UInt64Value {
	if m != nil {
		return m.SecsSinceLastAction
	}
	return nil
}

func (m *OutlierDetectionEvent) GetClusterName() string {
	if m != nil {
		return m.ClusterName
	}
	return ""
}

func (m *OutlierDetectionEvent) GetUpstreamUrl() string {
	if m != nil {
		return m.UpstreamUrl
	}
	return ""
}

func (m *OutlierDetectionEvent) GetAction() Action {
	if m != nil {
		return m.Action
	}
	return Action_EJECT
}

func (m *OutlierDetectionEvent) GetNumEjections() uint32 {
	if m != nil {
		return m.NumEjections
	}
	return 0
}

func (m *OutlierDetectionEvent) GetEnforced() bool {
	if m != nil {
		return m.Enforced
	}
	return false
}

type isOutlierDetectionEvent_Event interface {
	isOutlierDetectionEvent_Event()
}

type OutlierDetectionEvent_EjectSuccessRateEvent struct {
	EjectSuccessRateEvent *OutlierEjectSuccessRate `protobuf:"bytes,9,opt,name=eject_success_rate_event,json=ejectSuccessRateEvent,proto3,oneof"`
}

type OutlierDetectionEvent_EjectConsecutiveEvent struct {
	EjectConsecutiveEvent *OutlierEjectConsecutive `protobuf:"bytes,10,opt,name=eject_consecutive_event,json=ejectConsecutiveEvent,proto3,oneof"`
}

type OutlierDetectionEvent_EjectFailurePercentageEvent struct {
	EjectFailurePercentageEvent *OutlierEjectFailurePercentage `protobuf:"bytes,11,opt,name=eject_failure_percentage_event,json=ejectFailurePercentageEvent,proto3,oneof"`
}

func (*OutlierDetectionEvent_EjectSuccessRateEvent) isOutlierDetectionEvent_Event() {}

func (*OutlierDetectionEvent_EjectConsecutiveEvent) isOutlierDetectionEvent_Event() {}

func (*OutlierDetectionEvent_EjectFailurePercentageEvent) isOutlierDetectionEvent_Event() {}

func (m *OutlierDetectionEvent) GetEvent() isOutlierDetectionEvent_Event {
	if m != nil {
		return m.Event
	}
	return nil
}

func (m *OutlierDetectionEvent) GetEjectSuccessRateEvent() *OutlierEjectSuccessRate {
	if x, ok := m.GetEvent().(*OutlierDetectionEvent_EjectSuccessRateEvent); ok {
		return x.EjectSuccessRateEvent
	}
	return nil
}

func (m *OutlierDetectionEvent) GetEjectConsecutiveEvent() *OutlierEjectConsecutive {
	if x, ok := m.GetEvent().(*OutlierDetectionEvent_EjectConsecutiveEvent); ok {
		return x.EjectConsecutiveEvent
	}
	return nil
}

func (m *OutlierDetectionEvent) GetEjectFailurePercentageEvent() *OutlierEjectFailurePercentage {
	if x, ok := m.GetEvent().(*OutlierDetectionEvent_EjectFailurePercentageEvent); ok {
		return x.EjectFailurePercentageEvent
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*OutlierDetectionEvent) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*OutlierDetectionEvent_EjectSuccessRateEvent)(nil),
		(*OutlierDetectionEvent_EjectConsecutiveEvent)(nil),
		(*OutlierDetectionEvent_EjectFailurePercentageEvent)(nil),
	}
}

type OutlierEjectSuccessRate struct {
	// Host’s success rate at the time of the ejection event on a 0-100 range.
	HostSuccessRate uint32 `protobuf:"varint,1,opt,name=host_success_rate,json=hostSuccessRate,proto3" json:"host_success_rate,omitempty"`
	// Average success rate of the hosts in the cluster at the time of the ejection event on a 0-100
	// range.
	ClusterAverageSuccessRate uint32 `protobuf:"varint,2,opt,name=cluster_average_success_rate,json=clusterAverageSuccessRate,proto3" json:"cluster_average_success_rate,omitempty"`
	// Success rate ejection threshold at the time of the ejection event.
	ClusterSuccessRateEjectionThreshold uint32   `protobuf:"varint,3,opt,name=cluster_success_rate_ejection_threshold,json=clusterSuccessRateEjectionThreshold,proto3" json:"cluster_success_rate_ejection_threshold,omitempty"`
	XXX_NoUnkeyedLiteral                struct{} `json:"-"`
	XXX_unrecognized                    []byte   `json:"-"`
	XXX_sizecache                       int32    `json:"-"`
}

func (m *OutlierEjectSuccessRate) Reset()         { *m = OutlierEjectSuccessRate{} }
func (m *OutlierEjectSuccessRate) String() string { return proto.CompactTextString(m) }
func (*OutlierEjectSuccessRate) ProtoMessage()    {}
func (*OutlierEjectSuccessRate) Descriptor() ([]byte, []int) {
	return fileDescriptor_5e03c92c55863094, []int{1}
}

func (m *OutlierEjectSuccessRate) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OutlierEjectSuccessRate.Unmarshal(m, b)
}
func (m *OutlierEjectSuccessRate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OutlierEjectSuccessRate.Marshal(b, m, deterministic)
}
func (m *OutlierEjectSuccessRate) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OutlierEjectSuccessRate.Merge(m, src)
}
func (m *OutlierEjectSuccessRate) XXX_Size() int {
	return xxx_messageInfo_OutlierEjectSuccessRate.Size(m)
}
func (m *OutlierEjectSuccessRate) XXX_DiscardUnknown() {
	xxx_messageInfo_OutlierEjectSuccessRate.DiscardUnknown(m)
}

var xxx_messageInfo_OutlierEjectSuccessRate proto.InternalMessageInfo

func (m *OutlierEjectSuccessRate) GetHostSuccessRate() uint32 {
	if m != nil {
		return m.HostSuccessRate
	}
	return 0
}

func (m *OutlierEjectSuccessRate) GetClusterAverageSuccessRate() uint32 {
	if m != nil {
		return m.ClusterAverageSuccessRate
	}
	return 0
}

func (m *OutlierEjectSuccessRate) GetClusterSuccessRateEjectionThreshold() uint32 {
	if m != nil {
		return m.ClusterSuccessRateEjectionThreshold
	}
	return 0
}

type OutlierEjectConsecutive struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *OutlierEjectConsecutive) Reset()         { *m = OutlierEjectConsecutive{} }
func (m *OutlierEjectConsecutive) String() string { return proto.CompactTextString(m) }
func (*OutlierEjectConsecutive) ProtoMessage()    {}
func (*OutlierEjectConsecutive) Descriptor() ([]byte, []int) {
	return fileDescriptor_5e03c92c55863094, []int{2}
}

func (m *OutlierEjectConsecutive) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OutlierEjectConsecutive.Unmarshal(m, b)
}
func (m *OutlierEjectConsecutive) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OutlierEjectConsecutive.Marshal(b, m, deterministic)
}
func (m *OutlierEjectConsecutive) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OutlierEjectConsecutive.Merge(m, src)
}
func (m *OutlierEjectConsecutive) XXX_Size() int {
	return xxx_messageInfo_OutlierEjectConsecutive.Size(m)
}
func (m *OutlierEjectConsecutive) XXX_DiscardUnknown() {
	xxx_messageInfo_OutlierEjectConsecutive.DiscardUnknown(m)
}

var xxx_messageInfo_OutlierEjectConsecutive proto.InternalMessageInfo

type OutlierEjectFailurePercentage struct {
	// Host's success rate at the time of the ejection event on a 0-100 range.
	HostSuccessRate      uint32   `protobuf:"varint,1,opt,name=host_success_rate,json=hostSuccessRate,proto3" json:"host_success_rate,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *OutlierEjectFailurePercentage) Reset()         { *m = OutlierEjectFailurePercentage{} }
func (m *OutlierEjectFailurePercentage) String() string { return proto.CompactTextString(m) }
func (*OutlierEjectFailurePercentage) ProtoMessage()    {}
func (*OutlierEjectFailurePercentage) Descriptor() ([]byte, []int) {
	return fileDescriptor_5e03c92c55863094, []int{3}
}

func (m *OutlierEjectFailurePercentage) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OutlierEjectFailurePercentage.Unmarshal(m, b)
}
func (m *OutlierEjectFailurePercentage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OutlierEjectFailurePercentage.Marshal(b, m, deterministic)
}
func (m *OutlierEjectFailurePercentage) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OutlierEjectFailurePercentage.Merge(m, src)
}
func (m *OutlierEjectFailurePercentage) XXX_Size() int {
	return xxx_messageInfo_OutlierEjectFailurePercentage.Size(m)
}
func (m *OutlierEjectFailurePercentage) XXX_DiscardUnknown() {
	xxx_messageInfo_OutlierEjectFailurePercentage.DiscardUnknown(m)
}

var xxx_messageInfo_OutlierEjectFailurePercentage proto.InternalMessageInfo

func (m *OutlierEjectFailurePercentage) GetHostSuccessRate() uint32 {
	if m != nil {
		return m.HostSuccessRate
	}
	return 0
}

func init() {
	proto.RegisterEnum("envoy.data.cluster.v2alpha.OutlierEjectionType", OutlierEjectionType_name, OutlierEjectionType_value)
	proto.RegisterEnum("envoy.data.cluster.v2alpha.Action", Action_name, Action_value)
	proto.RegisterType((*OutlierDetectionEvent)(nil), "envoy.data.cluster.v2alpha.OutlierDetectionEvent")
	proto.RegisterType((*OutlierEjectSuccessRate)(nil), "envoy.data.cluster.v2alpha.OutlierEjectSuccessRate")
	proto.RegisterType((*OutlierEjectConsecutive)(nil), "envoy.data.cluster.v2alpha.OutlierEjectConsecutive")
	proto.RegisterType((*OutlierEjectFailurePercentage)(nil), "envoy.data.cluster.v2alpha.OutlierEjectFailurePercentage")
}

func init() {
	proto.RegisterFile("envoy/data/cluster/v2alpha/outlier_detection_event.proto", fileDescriptor_5e03c92c55863094)
}

var fileDescriptor_5e03c92c55863094 = []byte{
	// 776 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xdd, 0x4e, 0xe3, 0x46,
	0x14, 0x66, 0x02, 0x09, 0x30, 0x40, 0x37, 0x1d, 0xb4, 0x8b, 0xc9, 0xfe, 0x10, 0x85, 0x4a, 0x8d,
	0xb8, 0x70, 0x24, 0x68, 0xab, 0xed, 0xa5, 0xed, 0xf5, 0x42, 0x2a, 0x1a, 0xa8, 0xe3, 0x6c, 0xb7,
	0x17, 0xd5, 0x68, 0xd6, 0x39, 0x80, 0x2b, 0xff, 0x69, 0x66, 0x9c, 0x36, 0x77, 0x55, 0x1f, 0xad,
	0x2f, 0xd2, 0xc7, 0x68, 0xb5, 0x57, 0x95, 0x67, 0xec, 0xac, 0xc3, 0xb2, 0x88, 0xf6, 0xce, 0x9e,
	0xf9, 0xfe, 0xe6, 0xcc, 0x99, 0x83, 0x5f, 0x42, 0x32, 0x4b, 0xe7, 0x83, 0x29, 0x93, 0x6c, 0x10,
	0x44, 0xb9, 0x90, 0xc0, 0x07, 0xb3, 0x63, 0x16, 0x65, 0x37, 0x6c, 0x90, 0xe6, 0x32, 0x0a, 0x81,
	0xd3, 0x29, 0x48, 0x08, 0x64, 0x98, 0x26, 0x14, 0x66, 0x90, 0x48, 0x33, 0xe3, 0xa9, 0x4c, 0x49,
	0x47, 0x31, 0xcd, 0x82, 0x69, 0x96, 0x4c, 0xb3, 0x64, 0x76, 0x0e, 0xae, 0xd3, 0xf4, 0x3a, 0x82,
	0x81, 0x42, 0xbe, 0xcb, 0xaf, 0x06, 0x32, 0x8c, 0x41, 0x48, 0x16, 0x67, 0x9a, 0xdc, 0x79, 0x71,
	0x1b, 0xf0, 0x2b, 0x67, 0x59, 0x06, 0x5c, 0x94, 0xfb, 0x7b, 0x33, 0x16, 0x85, 0x53, 0x26, 0x61,
	0x50, 0x7d, 0xe8, 0x8d, 0xde, 0x9f, 0x2d, 0xfc, 0xf8, 0x42, 0xe7, 0x7a, 0x55, 0xc5, 0x72, 0x8b,
	0x54, 0xe4, 0x7b, 0xbc, 0x26, 0xe7, 0x19, 0x18, 0xa8, 0x8b, 0xfa, 0x9f, 0x1d, 0x0f, 0xcc, 0x4f,
	0xc7, 0x33, 0x4b, 0x01, 0xf7, 0x17, 0xcd, 0xf7, 0xe7, 0x19, 0xd8, 0x1b, 0xef, 0xed, 0xe6, 0x1f,
	0xa8, 0xd1, 0x46, 0x9e, 0x92, 0x21, 0x2f, 0xf1, 0xe6, 0x22, 0xb4, 0xd1, 0xe8, 0xa2, 0xfe, 0xd6,
	0x71, 0xc7, 0xd4, 0xa9, 0xcd, 0x2a, 0xb5, 0xe9, 0x57, 0x08, 0xef, 0x03, 0x98, 0xfc, 0x80, 0x9f,
	0x08, 0x08, 0x04, 0x15, 0x61, 0x12, 0x00, 0x8d, 0x98, 0x90, 0x94, 0x29, 0x1f, 0x63, 0x55, 0xc9,
	0x3c, 0xfb, 0x48, 0x66, 0x32, 0x4c, 0xe4, 0x37, 0x5f, 0xbd, 0x61, 0x51, 0x0e, 0xde, 0x6e, 0xc1,
	0x1d, 0x17, 0xd4, 0x73, 0x26, 0xa4, 0xa5, 0x88, 0xe4, 0x08, 0x6f, 0x97, 0x67, 0xa0, 0x09, 0x8b,
	0xc1, 0x58, 0xeb, 0xa2, 0xfe, 0xa6, 0xbd, 0xfe, 0xde, 0x5e, 0xe3, 0x8d, 0x2e, 0xf2, 0xb6, 0xca,
	0xcd, 0x11, 0x8b, 0xa1, 0xc0, 0xe6, 0x99, 0x90, 0x1c, 0x58, 0x4c, 0x73, 0x1e, 0x19, 0xcd, 0x5b,
	0xd8, 0x6a, 0x73, 0xc2, 0x23, 0xf2, 0x0a, 0xb7, 0xca, 0x68, 0x2d, 0x55, 0xb5, 0xde, 0x7d, 0x55,
	0xd3, 0x59, 0x6a, 0x85, 0x2a, 0xb9, 0xe4, 0x10, 0xef, 0x24, 0x79, 0x4c, 0xa1, 0x2c, 0xa7, 0x30,
	0xd6, 0xbb, 0xa8, 0xbf, 0xe3, 0x6d, 0x27, 0x79, 0x5c, 0x95, 0x58, 0x90, 0x0e, 0xde, 0x80, 0xe4,
	0x2a, 0xe5, 0x01, 0x4c, 0x8d, 0x8d, 0x2e, 0xea, 0x6f, 0x78, 0x8b, 0x7f, 0x92, 0x60, 0x43, 0x91,
	0xa9, 0xc8, 0x83, 0x00, 0x84, 0xa0, 0x9c, 0x49, 0xd0, 0xcd, 0x66, 0x6c, 0xaa, 0x9a, 0x9d, 0x3c,
	0xf4, 0x3a, 0xc7, 0x5a, 0xc1, 0x63, 0x12, 0xce, 0x56, 0xbc, 0xc7, 0x70, 0x6b, 0x4d, 0xb7, 0x4a,
	0x8c, 0xf7, 0xb4, 0x5f, 0x90, 0x26, 0x02, 0x82, 0x5c, 0x86, 0xb3, 0xca, 0x0e, 0xff, 0x37, 0x3b,
	0xe7, 0x83, 0xc0, 0xc2, 0xae, 0xb6, 0xa6, 0xed, 0x7e, 0x47, 0xf8, 0x85, 0xf6, 0xbb, 0x62, 0x61,
	0x94, 0x73, 0xa0, 0x19, 0xf0, 0x00, 0x12, 0xc9, 0xae, 0x2b, 0xdb, 0x2d, 0x65, 0xfb, 0xed, 0x43,
	0x6d, 0x5f, 0x6b, 0x9d, 0xcb, 0x85, 0xcc, 0xd9, 0x8a, 0xf7, 0x14, 0xee, 0xdc, 0x51, 0x11, 0xec,
	0x6d, 0xdc, 0x54, 0x46, 0x64, 0xf5, 0x1f, 0x1b, 0xf5, 0xfe, 0x46, 0x78, 0xef, 0x13, 0x45, 0x23,
	0x27, 0xf8, 0xf3, 0x9b, 0x54, 0x2c, 0x5f, 0x85, 0x7a, 0x53, 0x3b, 0xaa, 0x87, 0x8e, 0x1a, 0xc6,
	0xd4, 0x7b, 0x54, 0x20, 0xea, 0xa4, 0x33, 0xfc, 0xac, 0xea, 0x4f, 0x36, 0x03, 0x5e, 0x9c, 0x6b,
	0x89, 0xdf, 0x58, 0xe6, 0xef, 0x97, 0x60, 0x4b, 0x63, 0xeb, 0x4a, 0x3f, 0xe3, 0x2f, 0x2b, 0xa5,
	0xe5, 0x66, 0x28, 0x1b, 0x89, 0xca, 0x1b, 0x0e, 0xe2, 0x26, 0x8d, 0xa6, 0xea, 0x35, 0xd5, 0x44,
	0x0f, 0x4b, 0x5e, 0xfd, 0xb6, 0xab, 0x07, 0x5e, 0x71, 0x7a, 0xfb, 0xcb, 0x07, 0xaf, 0x5d, 0x55,
	0xcf, 0xc7, 0xcf, 0xef, 0x2d, 0xf1, 0xff, 0xaa, 0xcc, 0xd1, 0x5f, 0x08, 0xef, 0xde, 0x31, 0x6e,
	0xc8, 0x2e, 0x7e, 0xe4, 0x5c, 0x8c, 0xc6, 0xae, 0x33, 0xf1, 0x87, 0x6f, 0x5c, 0xfa, 0xf5, 0xdb,
	0xb7, 0xed, 0x15, 0x72, 0x80, 0x9f, 0xd6, 0x17, 0x4f, 0x2d, 0xdf, 0xfd, 0xd1, 0xfa, 0x89, 0xbe,
	0xb6, 0x86, 0xe7, 0x13, 0xcf, 0x6d, 0x23, 0xd2, 0xc6, 0xdb, 0xe3, 0x89, 0xe3, 0xb8, 0xe3, 0x31,
	0xf5, 0x2c, 0xdf, 0x6d, 0x37, 0xc8, 0x17, 0xb8, 0x5b, 0xa7, 0x9c, 0x5f, 0x38, 0xd6, 0x39, 0xbd,
	0xf0, 0x86, 0xa7, 0xc3, 0xd1, 0x82, 0xb7, 0x4a, 0x9e, 0xe3, 0xfd, 0x3a, 0x6f, 0x09, 0xd6, 0x5e,
	0x23, 0x4f, 0x30, 0x29, 0xb1, 0xf4, 0xd2, 0xf5, 0x1c, 0x77, 0xe4, 0x5b, 0xa7, 0x6e, 0xbb, 0x49,
	0x0e, 0xf1, 0xc1, 0xc7, 0xeb, 0xcb, 0xe4, 0xd6, 0x51, 0x17, 0xb7, 0xca, 0x29, 0xb5, 0x89, 0x9b,
	0xee, 0x77, 0xae, 0xe3, 0xb7, 0x57, 0xc8, 0x16, 0x5e, 0x9f, 0x8c, 0xf4, 0x0f, 0xb2, 0xcf, 0x70,
	0x3f, 0x4c, 0x75, 0x6b, 0x67, 0x3c, 0xfd, 0x6d, 0x7e, 0x4f, 0x97, 0xdb, 0x9d, 0x3b, 0x87, 0xfb,
	0x65, 0x31, 0x29, 0x2f, 0xd1, 0xbb, 0x96, 0x1a, 0x99, 0x27, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff,
	0x8e, 0x33, 0x59, 0xf1, 0xb6, 0x06, 0x00, 0x00,
}
   0707010000013D000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000002900000000cilium-proxy-20200109/go/envoy/data/core  0707010000013E000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003100000000cilium-proxy-20200109/go/envoy/data/core/v2alpha  0707010000013F000081A4000003E800000064000000015E17A24700004ED0000000000000000000000000000000000000004A00000000cilium-proxy-20200109/go/envoy/data/core/v2alpha/health_check_event.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/data/core/v2alpha/health_check_event.proto

package envoy_data_core_v2alpha

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type HealthCheckFailureType int32

const (
	HealthCheckFailureType_ACTIVE  HealthCheckFailureType = 0
	HealthCheckFailureType_PASSIVE HealthCheckFailureType = 1
	HealthCheckFailureType_NETWORK HealthCheckFailureType = 2
)

var HealthCheckFailureType_name = map[int32]string{
	0: "ACTIVE",
	1: "PASSIVE",
	2: "NETWORK",
}

var HealthCheckFailureType_value = map[string]int32{
	"ACTIVE":  0,
	"PASSIVE": 1,
	"NETWORK": 2,
}

func (x HealthCheckFailureType) String() string {
	return proto.EnumName(HealthCheckFailureType_name, int32(x))
}

func (HealthCheckFailureType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_e866c90440508830, []int{0}
}

type HealthCheckerType int32

const (
	HealthCheckerType_HTTP  HealthCheckerType = 0
	HealthCheckerType_TCP   HealthCheckerType = 1
	HealthCheckerType_GRPC  HealthCheckerType = 2
	HealthCheckerType_REDIS HealthCheckerType = 3
)

var HealthCheckerType_name = map[int32]string{
	0: "HTTP",
	1: "TCP",
	2: "GRPC",
	3: "REDIS",
}

var HealthCheckerType_value = map[string]int32{
	"HTTP":  0,
	"TCP":   1,
	"GRPC":  2,
	"REDIS": 3,
}

func (x HealthCheckerType) String() string {
	return proto.EnumName(HealthCheckerType_name, int32(x))
}

func (HealthCheckerType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_e866c90440508830, []int{1}
}

// [#next-free-field: 10]
type HealthCheckEvent struct {
	HealthCheckerType HealthCheckerType `protobuf:"varint,1,opt,name=health_checker_type,json=healthCheckerType,proto3,enum=envoy.data.core.v2alpha.HealthCheckerType" json:"health_checker_type,omitempty"`
	Host              *core.Address     `protobuf:"bytes,2,opt,name=host,proto3" json:"host,omitempty"`
	ClusterName       string            `protobuf:"bytes,3,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"`
	// Types that are valid to be assigned to Event:
	//	*HealthCheckEvent_EjectUnhealthyEvent
	//	*HealthCheckEvent_AddHealthyEvent
	//	*HealthCheckEvent_HealthCheckFailureEvent
	//	*HealthCheckEvent_DegradedHealthyHost
	//	*HealthCheckEvent_NoLongerDegradedHost
	Event isHealthCheckEvent_Event `protobuf_oneof:"event"`
	// Timestamp for event.
	Timestamp            *timestamp.Timestamp `protobuf:"bytes,6,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *HealthCheckEvent) Reset()         { *m = HealthCheckEvent{} }
func (m *HealthCheckEvent) String() string { return proto.CompactTextString(m) }
func (*HealthCheckEvent) ProtoMessage()    {}
func (*HealthCheckEvent) Descriptor() ([]byte, []int) {
	return fileDescriptor_e866c90440508830, []int{0}
}

func (m *HealthCheckEvent) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HealthCheckEvent.Unmarshal(m, b)
}
func (m *HealthCheckEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HealthCheckEvent.Marshal(b, m, deterministic)
}
func (m *HealthCheckEvent) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HealthCheckEvent.Merge(m, src)
}
func (m *HealthCheckEvent) XXX_Size() int {
	return xxx_messageInfo_HealthCheckEvent.Size(m)
}
func (m *HealthCheckEvent) XXX_DiscardUnknown() {
	xxx_messageInfo_HealthCheckEvent.DiscardUnknown(m)
}

var xxx_messageInfo_HealthCheckEvent proto.InternalMessageInfo

func (m *HealthCheckEvent) GetHealthCheckerType() HealthCheckerType {
	if m != nil {
		return m.HealthCheckerType
	}
	return HealthCheckerType_HTTP
}

func (m *HealthCheckEvent) GetHost() *core.Address {
	if m != nil {
		return m.Host
	}
	return nil
}

func (m *HealthCheckEvent) GetClusterName() string {
	if m != nil {
		return m.ClusterName
	}
	return ""
}

type isHealthCheckEvent_Event interface {
	isHealthCheckEvent_Event()
}

type HealthCheckEvent_EjectUnhealthyEvent struct {
	EjectUnhealthyEvent *HealthCheckEjectUnhealthy `protobuf:"bytes,4,opt,name=eject_unhealthy_event,json=ejectUnhealthyEvent,proto3,oneof"`
}

type HealthCheckEvent_AddHealthyEvent struct {
	AddHealthyEvent *HealthCheckAddHealthy `protobuf:"bytes,5,opt,name=add_healthy_event,json=addHealthyEvent,proto3,oneof"`
}

type HealthCheckEvent_HealthCheckFailureEvent struct {
	HealthCheckFailureEvent *HealthCheckFailure `protobuf:"bytes,7,opt,name=health_check_failure_event,json=healthCheckFailureEvent,proto3,oneof"`
}

type HealthCheckEvent_DegradedHealthyHost struct {
	DegradedHealthyHost *DegradedHealthyHost `protobuf:"bytes,8,opt,name=degraded_healthy_host,json=degradedHealthyHost,proto3,oneof"`
}

type HealthCheckEvent_NoLongerDegradedHost struct {
	NoLongerDegradedHost *NoLongerDegradedHost `protobuf:"bytes,9,opt,name=no_longer_degraded_host,json=noLongerDegradedHost,proto3,oneof"`
}

func (*HealthCheckEvent_EjectUnhealthyEvent) isHealthCheckEvent_Event() {}

func (*HealthCheckEvent_AddHealthyEvent) isHealthCheckEvent_Event() {}

func (*HealthCheckEvent_HealthCheckFailureEvent) isHealthCheckEvent_Event() {}

func (*HealthCheckEvent_DegradedHealthyHost) isHealthCheckEvent_Event() {}

func (*HealthCheckEvent_NoLongerDegradedHost) isHealthCheckEvent_Event() {}

func (m *HealthCheckEvent) GetEvent() isHealthCheckEvent_Event {
	if m != nil {
		return m.Event
	}
	return nil
}

func (m *HealthCheckEvent) GetEjectUnhealthyEvent() *HealthCheckEjectUnhealthy {
	if x, ok := m.GetEvent().(*HealthCheckEvent_EjectUnhealthyEvent); ok {
		return x.EjectUnhealthyEvent
	}
	return nil
}

func (m *HealthCheckEvent) GetAddHealthyEvent() *HealthCheckAddHealthy {
	if x, ok := m.GetEvent().(*HealthCheckEvent_AddHealthyEvent); ok {
		return x.AddHealthyEvent
	}
	return nil
}

func (m *HealthCheckEvent) GetHealthCheckFailureEvent() *HealthCheckFailure {
	if x, ok := m.GetEvent().(*HealthCheckEvent_HealthCheckFailureEvent); ok {
		return x.HealthCheckFailureEvent
	}
	return nil
}

func (m *HealthCheckEvent) GetDegradedHealthyHost() *DegradedHealthyHost {
	if x, ok := m.GetEvent().(*HealthCheckEvent_DegradedHealthyHost); ok {
		return x.DegradedHealthyHost
	}
	return nil
}

func (m *HealthCheckEvent) GetNoLongerDegradedHost() *NoLongerDegradedHost {
	if x, ok := m.GetEvent().(*HealthCheckEvent_NoLongerDegradedHost); ok {
		return x.NoLongerDegradedHost
	}
	return nil
}

func (m *HealthCheckEvent) GetTimestamp() *timestamp.Timestamp {
	if m != nil {
		return m.Timestamp
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*HealthCheckEvent) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*HealthCheckEvent_EjectUnhealthyEvent)(nil),
		(*HealthCheckEvent_AddHealthyEvent)(nil),
		(*HealthCheckEvent_HealthCheckFailureEvent)(nil),
		(*HealthCheckEvent_DegradedHealthyHost)(nil),
		(*HealthCheckEvent_NoLongerDegradedHost)(nil),
	}
}

type HealthCheckEjectUnhealthy struct {
	// The type of failure that caused this ejection.
	FailureType          HealthCheckFailureType `protobuf:"varint,1,opt,name=failure_type,json=failureType,proto3,enum=envoy.data.core.v2alpha.HealthCheckFailureType" json:"failure_type,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *HealthCheckEjectUnhealthy) Reset()         { *m = HealthCheckEjectUnhealthy{} }
func (m *HealthCheckEjectUnhealthy) String() string { return proto.CompactTextString(m) }
func (*HealthCheckEjectUnhealthy) ProtoMessage()    {}
func (*HealthCheckEjectUnhealthy) Descriptor() ([]byte, []int) {
	return fileDescriptor_e866c90440508830, []int{1}
}

func (m *HealthCheckEjectUnhealthy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HealthCheckEjectUnhealthy.Unmarshal(m, b)
}
func (m *HealthCheckEjectUnhealthy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HealthCheckEjectUnhealthy.Marshal(b, m, deterministic)
}
func (m *HealthCheckEjectUnhealthy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HealthCheckEjectUnhealthy.Merge(m, src)
}
func (m *HealthCheckEjectUnhealthy) XXX_Size() int {
	return xxx_messageInfo_HealthCheckEjectUnhealthy.Size(m)
}
func (m *HealthCheckEjectUnhealthy) XXX_DiscardUnknown() {
	xxx_messageInfo_HealthCheckEjectUnhealthy.DiscardUnknown(m)
}

var xxx_messageInfo_HealthCheckEjectUnhealthy proto.InternalMessageInfo

func (m *HealthCheckEjectUnhealthy) GetFailureType() HealthCheckFailureType {
	if m != nil {
		return m.FailureType
	}
	return HealthCheckFailureType_ACTIVE
}

type HealthCheckAddHealthy struct {
	// Whether this addition is the result of the first ever health check on a host, in which case
	// the configured :ref:`healthy threshold <envoy_api_field_core.HealthCheck.healthy_threshold>`
	// is bypassed and the host is immediately added.
	FirstCheck           bool     `protobuf:"varint,1,opt,name=first_check,json=firstCheck,proto3" json:"first_check,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *HealthCheckAddHealthy) Reset()         { *m = HealthCheckAddHealthy{} }
func (m *HealthCheckAddHealthy) String() string { return proto.CompactTextString(m) }
func (*HealthCheckAddHealthy) ProtoMessage()    {}
func (*HealthCheckAddHealthy) Descriptor() ([]byte, []int) {
	return fileDescriptor_e866c90440508830, []int{2}
}

func (m *HealthCheckAddHealthy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HealthCheckAddHealthy.Unmarshal(m, b)
}
func (m *HealthCheckAddHealthy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HealthCheckAddHealthy.Marshal(b, m, deterministic)
}
func (m *HealthCheckAddHealthy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HealthCheckAddHealthy.Merge(m, src)
}
func (m *HealthCheckAddHealthy) XXX_Size() int {
	return xxx_messageInfo_HealthCheckAddHealthy.Size(m)
}
func (m *HealthCheckAddHealthy) XXX_DiscardUnknown() {
	xxx_messageInfo_HealthCheckAddHealthy.DiscardUnknown(m)
}

var xxx_messageInfo_HealthCheckAddHealthy proto.InternalMessageInfo

func (m *HealthCheckAddHealthy) GetFirstCheck() bool {
	if m != nil {
		return m.FirstCheck
	}
	return false
}

type HealthCheckFailure struct {
	// The type of failure that caused this event.
	FailureType HealthCheckFailureType `protobuf:"varint,1,opt,name=failure_type,json=failureType,proto3,enum=envoy.data.core.v2alpha.HealthCheckFailureType" json:"failure_type,omitempty"`
	// Whether this event is the result of the first ever health check on a host.
	FirstCheck           bool     `protobuf:"varint,2,opt,name=first_check,json=firstCheck,proto3" json:"first_check,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *HealthCheckFailure) Reset()         { *m = HealthCheckFailure{} }
func (m *HealthCheckFailure) String() string { return proto.CompactTextString(m) }
func (*HealthCheckFailure) ProtoMessage()    {}
func (*HealthCheckFailure) Descriptor() ([]byte, []int) {
	return fileDescriptor_e866c90440508830, []int{3}
}

func (m *HealthCheckFailure) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HealthCheckFailure.Unmarshal(m, b)
}
func (m *HealthCheckFailure) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HealthCheckFailure.Marshal(b, m, deterministic)
}
func (m *HealthCheckFailure) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HealthCheckFailure.Merge(m, src)
}
func (m *HealthCheckFailure) XXX_Size() int {
	return xxx_messageInfo_HealthCheckFailure.Size(m)
}
func (m *HealthCheckFailure) XXX_DiscardUnknown() {
	xxx_messageInfo_HealthCheckFailure.DiscardUnknown(m)
}

var xxx_messageInfo_HealthCheckFailure proto.InternalMessageInfo

func (m *HealthCheckFailure) GetFailureType() HealthCheckFailureType {
	if m != nil {
		return m.FailureType
	}
	return HealthCheckFailureType_ACTIVE
}

func (m *HealthCheckFailure) GetFirstCheck() bool {
	if m != nil {
		return m.FirstCheck
	}
	return false
}

type DegradedHealthyHost struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *DegradedHealthyHost) Reset()         { *m = DegradedHealthyHost{} }
func (m *DegradedHealthyHost) String() string { return proto.CompactTextString(m) }
func (*DegradedHealthyHost) ProtoMessage()    {}
func (*DegradedHealthyHost) Descriptor() ([]byte, []int) {
	return fileDescriptor_e866c90440508830, []int{4}
}

func (m *DegradedHealthyHost) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DegradedHealthyHost.Unmarshal(m, b)
}
func (m *DegradedHealthyHost) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DegradedHealthyHost.Marshal(b, m, deterministic)
}
func (m *DegradedHealthyHost) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DegradedHealthyHost.Merge(m, src)
}
func (m *DegradedHealthyHost) XXX_Size() int {
	return xxx_messageInfo_DegradedHealthyHost.Size(m)
}
func (m *DegradedHealthyHost) XXX_DiscardUnknown() {
	xxx_messageInfo_DegradedHealthyHost.DiscardUnknown(m)
}

var xxx_messageInfo_DegradedHealthyHost proto.InternalMessageInfo

type NoLongerDegradedHost struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *NoLongerDegradedHost) Reset()         { *m = NoLongerDegradedHost{} }
func (m *NoLongerDegradedHost) String() string { return proto.CompactTextString(m) }
func (*NoLongerDegradedHost) ProtoMessage()    {}
func (*NoLongerDegradedHost) Descriptor() ([]byte, []int) {
	return fileDescriptor_e866c90440508830, []int{5}
}

func (m *NoLongerDegradedHost) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_NoLongerDegradedHost.Unmarshal(m, b)
}
func (m *NoLongerDegradedHost) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_NoLongerDegradedHost.Marshal(b, m, deterministic)
}
func (m *NoLongerDegradedHost) XXX_Merge(src proto.Message) {
	xxx_messageInfo_NoLongerDegradedHost.Merge(m, src)
}
func (m *NoLongerDegradedHost) XXX_Size() int {
	return xxx_messageInfo_NoLongerDegradedHost.Size(m)
}
func (m *NoLongerDegradedHost) XXX_DiscardUnknown() {
	xxx_messageInfo_NoLongerDegradedHost.DiscardUnknown(m)
}

var xxx_messageInfo_NoLongerDegradedHost proto.InternalMessageInfo

func init() {
	proto.RegisterEnum("envoy.data.core.v2alpha.HealthCheckFailureType", HealthCheckFailureType_name, HealthCheckFailureType_value)
	proto.RegisterEnum("envoy.data.core.v2alpha.HealthCheckerType", HealthCheckerType_name, HealthCheckerType_value)
	proto.RegisterType((*HealthCheckEvent)(nil), "envoy.data.core.v2alpha.HealthCheckEvent")
	proto.RegisterType((*HealthCheckEjectUnhealthy)(nil), "envoy.data.core.v2alpha.HealthCheckEjectUnhealthy")
	proto.RegisterType((*HealthCheckAddHealthy)(nil), "envoy.data.core.v2alpha.HealthCheckAddHealthy")
	proto.RegisterType((*HealthCheckFailure)(nil), "envoy.data.core.v2alpha.HealthCheckFailure")
	proto.RegisterType((*DegradedHealthyHost)(nil), "envoy.data.core.v2alpha.DegradedHealthyHost")
	proto.RegisterType((*NoLongerDegradedHost)(nil), "envoy.data.core.v2alpha.NoLongerDegradedHost")
}

func init() {
	proto.RegisterFile("envoy/data/core/v2alpha/health_check_event.proto", fileDescriptor_e866c90440508830)
}

var fileDescriptor_e866c90440508830 = []byte{
	// 645 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x94, 0x4d, 0x6f, 0xda, 0x4c,
	0x10, 0xc7, 0x31, 0xef, 0x0c, 0xd1, 0xf3, 0x38, 0x9b, 0x10, 0x28, 0x97, 0x20, 0xa4, 0x4a, 0x11,
	0x6d, 0xed, 0x8a, 0x5e, 0x22, 0x55, 0xaa, 0x8a, 0x09, 0x2d, 0x51, 0xab, 0x14, 0x39, 0x6e, 0x7b,
	0x89, 0x64, 0x6d, 0xf0, 0x82, 0x9d, 0x1a, 0xaf, 0xb5, 0x5e, 0x50, 0xb9, 0xf6, 0x2b, 0xf4, 0xda,
	0x0f, 0x5a, 0xe5, 0x54, 0x79, 0xd7, 0x40, 0xc2, 0x8b, 0x44, 0x0f, 0xbd, 0x79, 0x67, 0xf7, 0x3f,
	0xbf, 0xff, 0xce, 0xce, 0x18, 0x5e, 0x92, 0x60, 0x46, 0xe7, 0xba, 0x83, 0x39, 0xd6, 0x87, 0x94,
	0x11, 0x7d, 0xd6, 0xc6, 0x7e, 0xe8, 0x62, 0xdd, 0x25, 0xd8, 0xe7, 0xae, 0x3d, 0x74, 0xc9, 0xf0,
	0x9b, 0x4d, 0x66, 0x24, 0xe0, 0x5a, 0xc8, 0x28, 0xa7, 0xa8, 0x2a, 0x14, 0x5a, 0xac, 0xd0, 0x62,
	0x85, 0x96, 0x28, 0xea, 0xa7, 0x32, 0x15, 0x0e, 0x3d, 0x7d, 0xd6, 0x96, 0xc9, 0xb0, 0xe3, 0x30,
	0x12, 0x45, 0x52, 0x59, 0x3f, 0x1d, 0x53, 0x3a, 0xf6, 0x89, 0x2e, 0x56, 0xb7, 0xd3, 0x91, 0xce,
	0xbd, 0x09, 0x89, 0x38, 0x9e, 0x84, 0xc9, 0x81, 0xea, 0x0c, 0xfb, 0x9e, 0x83, 0x39, 0xd1, 0x17,
	0x1f, 0x72, 0xa3, 0xf9, 0x2b, 0x0f, 0x6a, 0x5f, 0x18, 0xea, 0xc6, 0x7e, 0x7a, 0xb1, 0x1d, 0xe4,
	0xc0, 0xd1, 0x43, 0x93, 0x84, 0xd9, 0x7c, 0x1e, 0x92, 0x9a, 0xd2, 0x50, 0xce, 0xfe, 0x6b, 0xb7,
	0xb4, 0x1d, 0x36, 0xb5, 0x07, 0x79, 0x08, 0xb3, 0xe6, 0x21, 0x31, 0x8a, 0xf7, 0x46, 0xee, 0x87,
	0x92, 0x56, 0x15, 0xf3, 0xd0, 0x5d, 0xdf, 0x44, 0x1a, 0x64, 0x5d, 0x1a, 0xf1, 0x5a, 0xba, 0xa1,
	0x9c, 0x95, 0xdb, 0xf5, 0x24, 0x2d, 0x0e, 0x3d, 0x6d, 0xd6, 0x96, 0x89, 0x3b, 0xf2, 0x92, 0xa6,
	0x38, 0x87, 0x5a, 0x70, 0x30, 0xf4, 0xa7, 0x11, 0x27, 0xcc, 0x0e, 0xf0, 0x84, 0xd4, 0x32, 0x0d,
	0xe5, 0xac, 0x64, 0x14, 0xee, 0x8d, 0x2c, 0x4b, 0x37, 0x14, 0xb3, 0x9c, 0x6c, 0x5e, 0xe1, 0x09,
	0x41, 0x2e, 0x54, 0xc8, 0x1d, 0x19, 0x72, 0x7b, 0x1a, 0x48, 0xf0, 0x5c, 0x56, 0xba, 0x96, 0x15,
	0xb0, 0xf6, 0x3e, 0x77, 0xe8, 0xc5, 0x09, 0x3e, 0x2f, 0xf4, 0xfd, 0x94, 0x79, 0x44, 0x1e, 0x45,
	0x64, 0xad, 0x6e, 0xe0, 0x10, 0x3b, 0x8e, 0xfd, 0x98, 0x92, 0x13, 0x14, 0x6d, 0x1f, 0x4a, 0xc7,
	0x71, 0xfa, 0x4b, 0xc2, 0xff, 0x78, 0xb9, 0x92, 0xd9, 0xef, 0xa0, 0xfe, 0xa8, 0x5d, 0x46, 0xd8,
	0xf3, 0xa7, 0x8c, 0x24, 0x98, 0x82, 0xc0, 0x3c, 0xdb, 0x07, 0xf3, 0x4e, 0x0a, 0xfb, 0x29, 0xb3,
	0xea, 0x6e, 0x44, 0x25, 0xeb, 0x16, 0x2a, 0x0e, 0x19, 0x33, 0xec, 0x90, 0xd5, 0x75, 0xc4, 0x03,
	0x15, 0x05, 0xe6, 0xf9, 0x4e, 0xcc, 0x45, 0xa2, 0x5a, 0xdc, 0x83, 0x46, 0x3c, 0xae, 0x96, 0xb3,
	0x19, 0x46, 0x23, 0xa8, 0x06, 0xd4, 0xf6, 0x69, 0x30, 0x26, 0xcc, 0x5e, 0xd1, 0x62, 0x4a, 0x49,
	0x50, 0x5e, 0xec, 0xa4, 0x5c, 0xd1, 0x8f, 0x42, 0xb6, 0xa4, 0x49, 0xcc, 0x71, 0xb0, 0x25, 0x8e,
	0xce, 0xa1, 0xb4, 0x1c, 0x81, 0x5a, 0x3e, 0x69, 0x30, 0x39, 0x24, 0xda, 0x62, 0x48, 0x34, 0x6b,
	0x71, 0xc2, 0x5c, 0x1d, 0x36, 0x0e, 0x20, 0x27, 0x8a, 0x8b, 0x32, 0xbf, 0x0d, 0xa5, 0x39, 0x87,
	0x27, 0x3b, 0x3b, 0x02, 0xdd, 0xc0, 0xc1, 0xe2, 0x3d, 0x1e, 0xcc, 0x87, 0xfe, 0x17, 0xcf, 0xb1,
	0x36, 0x24, 0xe5, 0xd1, 0x2a, 0xdc, 0x3c, 0x87, 0xca, 0xd6, 0x36, 0x41, 0xa7, 0x50, 0x1e, 0x79,
	0x2c, 0xe2, 0xb2, 0x25, 0x04, 0xb5, 0x68, 0x82, 0x08, 0x89, 0xa3, 0xcd, 0x9f, 0x0a, 0xa0, 0x4d,
	0xd6, 0xbf, 0xb5, 0xbb, 0xee, 0x2a, 0xbd, 0xe1, 0xaa, 0x02, 0x47, 0x5b, 0x1a, 0xa5, 0x79, 0x02,
	0xc7, 0xdb, 0x5e, 0xb6, 0xf5, 0x06, 0x4e, 0xb6, 0x1b, 0x40, 0x00, 0xf9, 0x4e, 0xd7, 0xba, 0xfc,
	0xd2, 0x53, 0x53, 0xa8, 0x0c, 0x85, 0x41, 0xe7, 0xfa, 0x3a, 0x5e, 0x28, 0xf1, 0xe2, 0xaa, 0x67,
	0x7d, 0xfd, 0x64, 0x7e, 0x50, 0xd3, 0xad, 0xd7, 0x70, 0xb8, 0xf1, 0x3f, 0x42, 0x45, 0xc8, 0xf6,
	0x2d, 0x6b, 0xa0, 0xa6, 0x50, 0x01, 0x32, 0x56, 0x77, 0xa0, 0x2a, 0x71, 0xe8, 0xbd, 0x39, 0xe8,
	0xaa, 0x69, 0x54, 0x82, 0x9c, 0xd9, 0xbb, 0xb8, 0xbc, 0x56, 0x33, 0xc6, 0x5b, 0x78, 0xea, 0x51,
	0x59, 0x98, 0x90, 0xd1, 0xef, 0xf3, 0x5d, 0x35, 0x32, 0x2a, 0xeb, 0xff, 0xce, 0x41, 0xdc, 0x5c,
	0x03, 0xe5, 0x36, 0x2f, 0xba, 0xec, 0xd5, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfa, 0xc5, 0xaa,
	0x50, 0x06, 0x06, 0x00, 0x00,
}
07070100000140000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000002800000000cilium-proxy-20200109/go/envoy/data/tap   07070100000141000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003000000000cilium-proxy-20200109/go/envoy/data/tap/v2alpha   07070100000142000081A4000003E800000064000000015E17A247000012AA000000000000000000000000000000000000003D00000000cilium-proxy-20200109/go/envoy/data/tap/v2alpha/common.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/data/tap/v2alpha/common.proto

package envoy_data_tap_v2alpha

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Wrapper for tapped body data. This includes HTTP request/response body, transport socket received
// and transmitted data, etc.
type Body struct {
	// Types that are valid to be assigned to BodyType:
	//	*Body_AsBytes
	//	*Body_AsString
	BodyType isBody_BodyType `protobuf_oneof:"body_type"`
	// Specifies whether body data has been truncated to fit within the specified
	// :ref:`max_buffered_rx_bytes
	// <envoy_api_field_service.tap.v2alpha.OutputConfig.max_buffered_rx_bytes>` and
	// :ref:`max_buffered_tx_bytes
	// <envoy_api_field_service.tap.v2alpha.OutputConfig.max_buffered_tx_bytes>` settings.
	Truncated            bool     `protobuf:"varint,3,opt,name=truncated,proto3" json:"truncated,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Body) Reset()         { *m = Body{} }
func (m *Body) String() string { return proto.CompactTextString(m) }
func (*Body) ProtoMessage()    {}
func (*Body) Descriptor() ([]byte, []int) {
	return fileDescriptor_a560f1e2899ebe7a, []int{0}
}

func (m *Body) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Body.Unmarshal(m, b)
}
func (m *Body) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Body.Marshal(b, m, deterministic)
}
func (m *Body) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Body.Merge(m, src)
}
func (m *Body) XXX_Size() int {
	return xxx_messageInfo_Body.Size(m)
}
func (m *Body) XXX_DiscardUnknown() {
	xxx_messageInfo_Body.DiscardUnknown(m)
}

var xxx_messageInfo_Body proto.InternalMessageInfo

type isBody_BodyType interface {
	isBody_BodyType()
}

type Body_AsBytes struct {
	AsBytes []byte `protobuf:"bytes,1,opt,name=as_bytes,json=asBytes,proto3,oneof"`
}

type Body_AsString struct {
	AsString string `protobuf:"bytes,2,opt,name=as_string,json=asString,proto3,oneof"`
}

func (*Body_AsBytes) isBody_BodyType() {}

func (*Body_AsString) isBody_BodyType() {}

func (m *Body) GetBodyType() isBody_BodyType {
	if m != nil {
		return m.BodyType
	}
	return nil
}

func (m *Body) GetAsBytes() []byte {
	if x, ok := m.GetBodyType().(*Body_AsBytes); ok {
		return x.AsBytes
	}
	return nil
}

func (m *Body) GetAsString() string {
	if x, ok := m.GetBodyType().(*Body_AsString); ok {
		return x.AsString
	}
	return ""
}

func (m *Body) GetTruncated() bool {
	if m != nil {
		return m.Truncated
	}
	return false
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Body) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Body_AsBytes)(nil),
		(*Body_AsString)(nil),
	}
}

func init() {
	proto.RegisterType((*Body)(nil), "envoy.data.tap.v2alpha.Body")
}

func init() {
	proto.RegisterFile("envoy/data/tap/v2alpha/common.proto", fileDescriptor_a560f1e2899ebe7a)
}

var fileDescriptor_a560f1e2899ebe7a = []byte{
	// 201 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0xcf, 0xb1, 0x4a, 0xc5, 0x30,
	0x14, 0xc6, 0xf1, 0x1b, 0x15, 0x6d, 0x72, 0x9d, 0x32, 0x48, 0x41, 0x85, 0xa2, 0x0e, 0x9d, 0x12,
	0x50, 0x7c, 0x81, 0xb8, 0x74, 0x2c, 0xf5, 0x01, 0xca, 0x69, 0x13, 0xb4, 0x60, 0x73, 0x42, 0x72,
	0x2c, 0xe6, 0xed, 0xa5, 0x41, 0x70, 0xb9, 0xeb, 0xc7, 0x7f, 0xf8, 0x7d, 0xe2, 0xd1, 0xf9, 0x0d,
	0xb3, 0xb6, 0x40, 0xa0, 0x09, 0x82, 0xde, 0x9e, 0xe1, 0x2b, 0x7c, 0x82, 0x9e, 0x71, 0x5d, 0xd1,
	0xab, 0x10, 0x91, 0x50, 0xde, 0x94, 0x48, 0xed, 0x91, 0x22, 0x08, 0xea, 0x2f, 0x7a, 0x58, 0xc5,
	0x85, 0x41, 0x9b, 0xe5, 0xad, 0xa8, 0x20, 0x8d, 0x53, 0x26, 0x97, 0x6a, 0xd6, 0xb0, 0xf6, 0xba,
	0x3b, 0x0c, 0x57, 0x90, 0xcc, 0x3e, 0xc8, 0x7b, 0xc1, 0x21, 0x8d, 0x89, 0xe2, 0xe2, 0x3f, 0xea,
	0xb3, 0x86, 0xb5, 0xbc, 0x3b, 0x0c, 0x15, 0xa4, 0xf7, 0xb2, 0xc8, 0x3b, 0xc1, 0x29, 0x7e, 0xfb,
	0x19, 0xc8, 0xd9, 0xfa, 0xbc, 0x61, 0x6d, 0x35, 0xfc, 0x0f, 0xe6, 0x28, 0xf8, 0x84, 0x36, 0x8f,
	0x94, 0x83, 0x33, 0xaf, 0xe2, 0x69, 0x41, 0x55, 0x2c, 0x21, 0xe2, 0x4f, 0x56, 0xa7, 0x59, 0xe6,
	0xf8, 0x56, 0xf0, 0xfd, 0x6e, 0xef, 0xd9, 0x74, 0x59, 0x4e, 0xbc, 0xfc, 0x06, 0x00, 0x00, 0xff,
	0xff, 0xee, 0x15, 0x32, 0x80, 0xeb, 0x00, 0x00, 0x00,
}
  07070100000143000081A4000003E800000064000000015E17A24700003494000000000000000000000000000000000000003B00000000cilium-proxy-20200109/go/envoy/data/tap/v2alpha/http.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/data/tap/v2alpha/http.proto

package envoy_data_tap_v2alpha

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// A fully buffered HTTP trace message.
type HttpBufferedTrace struct {
	// Request message.
	Request *HttpBufferedTrace_Message `protobuf:"bytes,1,opt,name=request,proto3" json:"request,omitempty"`
	// Response message.
	Response             *HttpBufferedTrace_Message `protobuf:"bytes,2,opt,name=response,proto3" json:"response,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
	XXX_unrecognized     []byte                     `json:"-"`
	XXX_sizecache        int32                      `json:"-"`
}

func (m *HttpBufferedTrace) Reset()         { *m = HttpBufferedTrace{} }
func (m *HttpBufferedTrace) String() string { return proto.CompactTextString(m) }
func (*HttpBufferedTrace) ProtoMessage()    {}
func (*HttpBufferedTrace) Descriptor() ([]byte, []int) {
	return fileDescriptor_90d8a92b44eb7244, []int{0}
}

func (m *HttpBufferedTrace) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpBufferedTrace.Unmarshal(m, b)
}
func (m *HttpBufferedTrace) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpBufferedTrace.Marshal(b, m, deterministic)
}
func (m *HttpBufferedTrace) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpBufferedTrace.Merge(m, src)
}
func (m *HttpBufferedTrace) XXX_Size() int {
	return xxx_messageInfo_HttpBufferedTrace.Size(m)
}
func (m *HttpBufferedTrace) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpBufferedTrace.DiscardUnknown(m)
}

var xxx_messageInfo_HttpBufferedTrace proto.InternalMessageInfo

func (m *HttpBufferedTrace) GetRequest() *HttpBufferedTrace_Message {
	if m != nil {
		return m.Request
	}
	return nil
}

func (m *HttpBufferedTrace) GetResponse() *HttpBufferedTrace_Message {
	if m != nil {
		return m.Response
	}
	return nil
}

// HTTP message wrapper.
type HttpBufferedTrace_Message struct {
	// Message headers.
	Headers []*core.HeaderValue `protobuf:"bytes,1,rep,name=headers,proto3" json:"headers,omitempty"`
	// Message body.
	Body *Body `protobuf:"bytes,2,opt,name=body,proto3" json:"body,omitempty"`
	// Message trailers.
	Trailers             []*core.HeaderValue `protobuf:"bytes,3,rep,name=trailers,proto3" json:"trailers,omitempty"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *HttpBufferedTrace_Message) Reset()         { *m = HttpBufferedTrace_Message{} }
func (m *HttpBufferedTrace_Message) String() string { return proto.CompactTextString(m) }
func (*HttpBufferedTrace_Message) ProtoMessage()    {}
func (*HttpBufferedTrace_Message) Descriptor() ([]byte, []int) {
	return fileDescriptor_90d8a92b44eb7244, []int{0, 0}
}

func (m *HttpBufferedTrace_Message) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpBufferedTrace_Message.Unmarshal(m, b)
}
func (m *HttpBufferedTrace_Message) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpBufferedTrace_Message.Marshal(b, m, deterministic)
}
func (m *HttpBufferedTrace_Message) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpBufferedTrace_Message.Merge(m, src)
}
func (m *HttpBufferedTrace_Message) XXX_Size() int {
	return xxx_messageInfo_HttpBufferedTrace_Message.Size(m)
}
func (m *HttpBufferedTrace_Message) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpBufferedTrace_Message.DiscardUnknown(m)
}

var xxx_messageInfo_HttpBufferedTrace_Message proto.InternalMessageInfo

func (m *HttpBufferedTrace_Message) GetHeaders() []*core.HeaderValue {
	if m != nil {
		return m.Headers
	}
	return nil
}

func (m *HttpBufferedTrace_Message) GetBody() *Body {
	if m != nil {
		return m.Body
	}
	return nil
}

func (m *HttpBufferedTrace_Message) GetTrailers() []*core.HeaderValue {
	if m != nil {
		return m.Trailers
	}
	return nil
}

// A streamed HTTP trace segment. Multiple segments make up a full trace.
// [#next-free-field: 8]
type HttpStreamedTraceSegment struct {
	// Trace ID unique to the originating Envoy only. Trace IDs can repeat and should not be used
	// for long term stable uniqueness.
	TraceId uint64 `protobuf:"varint,1,opt,name=trace_id,json=traceId,proto3" json:"trace_id,omitempty"`
	// Types that are valid to be assigned to MessagePiece:
	//	*HttpStreamedTraceSegment_RequestHeaders
	//	*HttpStreamedTraceSegment_RequestBodyChunk
	//	*HttpStreamedTraceSegment_RequestTrailers
	//	*HttpStreamedTraceSegment_ResponseHeaders
	//	*HttpStreamedTraceSegment_ResponseBodyChunk
	//	*HttpStreamedTraceSegment_ResponseTrailers
	MessagePiece         isHttpStreamedTraceSegment_MessagePiece `protobuf_oneof:"message_piece"`
	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
	XXX_unrecognized     []byte                                  `json:"-"`
	XXX_sizecache        int32                                   `json:"-"`
}

func (m *HttpStreamedTraceSegment) Reset()         { *m = HttpStreamedTraceSegment{} }
func (m *HttpStreamedTraceSegment) String() string { return proto.CompactTextString(m) }
func (*HttpStreamedTraceSegment) ProtoMessage()    {}
func (*HttpStreamedTraceSegment) Descriptor() ([]byte, []int) {
	return fileDescriptor_90d8a92b44eb7244, []int{1}
}

func (m *HttpStreamedTraceSegment) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpStreamedTraceSegment.Unmarshal(m, b)
}
func (m *HttpStreamedTraceSegment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpStreamedTraceSegment.Marshal(b, m, deterministic)
}
func (m *HttpStreamedTraceSegment) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpStreamedTraceSegment.Merge(m, src)
}
func (m *HttpStreamedTraceSegment) XXX_Size() int {
	return xxx_messageInfo_HttpStreamedTraceSegment.Size(m)
}
func (m *HttpStreamedTraceSegment) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpStreamedTraceSegment.DiscardUnknown(m)
}

var xxx_messageInfo_HttpStreamedTraceSegment proto.InternalMessageInfo

func (m *HttpStreamedTraceSegment) GetTraceId() uint64 {
	if m != nil {
		return m.TraceId
	}
	return 0
}

type isHttpStreamedTraceSegment_MessagePiece interface {
	isHttpStreamedTraceSegment_MessagePiece()
}

type HttpStreamedTraceSegment_RequestHeaders struct {
	RequestHeaders *core.HeaderMap `protobuf:"bytes,2,opt,name=request_headers,json=requestHeaders,proto3,oneof"`
}

type HttpStreamedTraceSegment_RequestBodyChunk struct {
	RequestBodyChunk *Body `protobuf:"bytes,3,opt,name=request_body_chunk,json=requestBodyChunk,proto3,oneof"`
}

type HttpStreamedTraceSegment_RequestTrailers struct {
	RequestTrailers *core.HeaderMap `protobuf:"bytes,4,opt,name=request_trailers,json=requestTrailers,proto3,oneof"`
}

type HttpStreamedTraceSegment_ResponseHeaders struct {
	ResponseHeaders *core.HeaderMap `protobuf:"bytes,5,opt,name=response_headers,json=responseHeaders,proto3,oneof"`
}

type HttpStreamedTraceSegment_ResponseBodyChunk struct {
	ResponseBodyChunk *Body `protobuf:"bytes,6,opt,name=response_body_chunk,json=responseBodyChunk,proto3,oneof"`
}

type HttpStreamedTraceSegment_ResponseTrailers struct {
	ResponseTrailers *core.HeaderMap `protobuf:"bytes,7,opt,name=response_trailers,json=responseTrailers,proto3,oneof"`
}

func (*HttpStreamedTraceSegment_RequestHeaders) isHttpStreamedTraceSegment_MessagePiece() {}

func (*HttpStreamedTraceSegment_RequestBodyChunk) isHttpStreamedTraceSegment_MessagePiece() {}

func (*HttpStreamedTraceSegment_RequestTrailers) isHttpStreamedTraceSegment_MessagePiece() {}

func (*HttpStreamedTraceSegment_ResponseHeaders) isHttpStreamedTraceSegment_MessagePiece() {}

func (*HttpStreamedTraceSegment_ResponseBodyChunk) isHttpStreamedTraceSegment_MessagePiece() {}

func (*HttpStreamedTraceSegment_ResponseTrailers) isHttpStreamedTraceSegment_MessagePiece() {}

func (m *HttpStreamedTraceSegment) GetMessagePiece() isHttpStreamedTraceSegment_MessagePiece {
	if m != nil {
		return m.MessagePiece
	}
	return nil
}

func (m *HttpStreamedTraceSegment) GetRequestHeaders() *core.HeaderMap {
	if x, ok := m.GetMessagePiece().(*HttpStreamedTraceSegment_RequestHeaders); ok {
		return x.RequestHeaders
	}
	return nil
}

func (m *HttpStreamedTraceSegment) GetRequestBodyChunk() *Body {
	if x, ok := m.GetMessagePiece().(*HttpStreamedTraceSegment_RequestBodyChunk); ok {
		return x.RequestBodyChunk
	}
	return nil
}

func (m *HttpStreamedTraceSegment) GetRequestTrailers() *core.HeaderMap {
	if x, ok := m.GetMessagePiece().(*HttpStreamedTraceSegment_RequestTrailers); ok {
		return x.RequestTrailers
	}
	return nil
}

func (m *HttpStreamedTraceSegment) GetResponseHeaders() *core.HeaderMap {
	if x, ok := m.GetMessagePiece().(*HttpStreamedTraceSegment_ResponseHeaders); ok {
		return x.ResponseHeaders
	}
	return nil
}

func (m *HttpStreamedTraceSegment) GetResponseBodyChunk() *Body {
	if x, ok := m.GetMessagePiece().(*HttpStreamedTraceSegment_ResponseBodyChunk); ok {
		return x.ResponseBodyChunk
	}
	return nil
}

func (m *HttpStreamedTraceSegment) GetResponseTrailers() *core.HeaderMap {
	if x, ok := m.GetMessagePiece().(*HttpStreamedTraceSegment_ResponseTrailers); ok {
		return x.ResponseTrailers
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*HttpStreamedTraceSegment) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*HttpStreamedTraceSegment_RequestHeaders)(nil),
		(*HttpStreamedTraceSegment_RequestBodyChunk)(nil),
		(*HttpStreamedTraceSegment_RequestTrailers)(nil),
		(*HttpStreamedTraceSegment_ResponseHeaders)(nil),
		(*HttpStreamedTraceSegment_ResponseBodyChunk)(nil),
		(*HttpStreamedTraceSegment_ResponseTrailers)(nil),
	}
}

func init() {
	proto.RegisterType((*HttpBufferedTrace)(nil), "envoy.data.tap.v2alpha.HttpBufferedTrace")
	proto.RegisterType((*HttpBufferedTrace_Message)(nil), "envoy.data.tap.v2alpha.HttpBufferedTrace.Message")
	proto.RegisterType((*HttpStreamedTraceSegment)(nil), "envoy.data.tap.v2alpha.HttpStreamedTraceSegment")
}

func init() { proto.RegisterFile("envoy/data/tap/v2alpha/http.proto", fileDescriptor_90d8a92b44eb7244) }

var fileDescriptor_90d8a92b44eb7244 = []byte{
	// 446 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0xc1, 0x6e, 0xd4, 0x30,
	0x10, 0x86, 0x9b, 0xee, 0xd2, 0x94, 0xa9, 0xa0, 0xd4, 0x48, 0x28, 0xac, 0x2a, 0x54, 0x0a, 0x87,
	0x9e, 0x1c, 0x48, 0x2f, 0x88, 0x63, 0x38, 0x90, 0xaa, 0x2c, 0xaa, 0xd2, 0x8a, 0x6b, 0x34, 0x9b,
	0x4c, 0xbb, 0x11, 0x9b, 0xd8, 0x38, 0xde, 0x15, 0xfb, 0x16, 0xbc, 0x0a, 0xcf, 0xc4, 0x8b, 0x20,
	0x27, 0x76, 0x0a, 0x2a, 0x2b, 0xa2, 0x1e, 0x63, 0xfd, 0xff, 0x3f, 0xff, 0x37, 0xb1, 0xe1, 0x25,
	0xd5, 0x2b, 0xb1, 0x0e, 0x0b, 0xd4, 0x18, 0x6a, 0x94, 0xe1, 0x2a, 0xc2, 0x85, 0x9c, 0x63, 0x38,
	0xd7, 0x5a, 0x72, 0xa9, 0x84, 0x16, 0xec, 0x59, 0x2b, 0xe1, 0x46, 0xc2, 0x35, 0x4a, 0x6e, 0x25,
	0x93, 0xc3, 0xce, 0x8a, 0xb2, 0x0c, 0x57, 0x51, 0x98, 0x0b, 0x45, 0xe1, 0x0c, 0x1b, 0xea, 0x5c,
	0x93, 0x57, 0x1b, 0x82, 0x73, 0x51, 0x55, 0xa2, 0xee, 0x44, 0xc7, 0xbf, 0xb6, 0xe1, 0x20, 0xd1,
	0x5a, 0xc6, 0xcb, 0xeb, 0x6b, 0x52, 0x54, 0x5c, 0x29, 0xcc, 0x89, 0x9d, 0x83, 0xaf, 0xe8, 0xdb,
	0x92, 0x1a, 0x1d, 0x78, 0x47, 0xde, 0xc9, 0x5e, 0xf4, 0x96, 0xff, 0xbb, 0x02, 0xbf, 0xe3, 0xe5,
	0x53, 0x6a, 0x1a, 0xbc, 0xa1, 0xd4, 0x25, 0xb0, 0x29, 0xec, 0x2a, 0x6a, 0xa4, 0xa8, 0x1b, 0x0a,
	0xb6, 0xef, 0x9b, 0xd6, 0x47, 0x4c, 0x7e, 0x7a, 0xe0, 0xdb, 0x53, 0xf6, 0x0e, 0xfc, 0x39, 0x61,
	0x41, 0xaa, 0x09, 0xbc, 0xa3, 0xd1, 0xc9, 0x5e, 0xf4, 0xc2, 0x26, 0xa3, 0x2c, 0xf9, 0x2a, 0xe2,
	0x66, 0x25, 0x3c, 0x69, 0x15, 0x5f, 0x70, 0xb1, 0xa4, 0xd4, 0xc9, 0xd9, 0x1b, 0x18, 0xcf, 0x44,
	0xb1, 0xb6, 0x85, 0x0e, 0x37, 0x15, 0x8a, 0x45, 0xb1, 0x4e, 0x5b, 0x25, 0x7b, 0x0f, 0xbb, 0x5a,
	0x61, 0xb9, 0x30, 0xc3, 0x46, 0x83, 0x86, 0xf5, 0xfa, 0xe3, 0x1f, 0x63, 0x08, 0x0c, 0xdb, 0xa5,
	0x56, 0x84, 0x95, 0x65, 0xbb, 0xa4, 0x9b, 0x8a, 0x6a, 0xcd, 0x9e, 0xb7, 0xc1, 0x39, 0x65, 0x65,
	0xd1, 0x6e, 0x7b, 0x9c, 0xfa, 0xed, 0xf7, 0x59, 0xc1, 0x3e, 0xc2, 0xbe, 0xdd, 0x62, 0xe6, 0x38,
	0xff, 0x2e, 0x7c, 0x77, 0xf4, 0x14, 0x65, 0xb2, 0x95, 0x3e, 0xb6, 0xb6, 0xc4, 0xe2, 0x7e, 0x02,
	0xe6, 0x82, 0x0c, 0x4c, 0x96, 0xcf, 0x97, 0xf5, 0xd7, 0x60, 0xf4, 0x7f, 0xf8, 0x64, 0x2b, 0x7d,
	0x62, 0x9d, 0xe6, 0xf3, 0x83, 0xf1, 0xb1, 0x33, 0x70, 0x67, 0x59, 0xbf, 0x92, 0xf1, 0xa0, 0x5e,
	0x0e, 0xe7, 0xca, 0xda, 0xba, 0xa8, 0xee, 0xcf, 0xf6, 0x88, 0x0f, 0x86, 0x46, 0x75, 0x3e, 0xc7,
	0xf8, 0x19, 0x9e, 0xf6, 0x51, 0x7f, 0x40, 0xee, 0x0c, 0x82, 0x3c, 0x70, 0xd6, 0x5b, 0xca, 0x73,
	0xe8, 0x0f, 0x6f, 0x31, 0xfd, 0x41, 0xdd, 0x7a, 0x26, 0xc7, 0x19, 0xef, 0xc3, 0xa3, 0xaa, 0xbb,
	0xb4, 0x99, 0x2c, 0x29, 0xa7, 0xf8, 0x14, 0x5e, 0x97, 0xa2, 0x8b, 0x91, 0x4a, 0x7c, 0x5f, 0x6f,
	0xe8, 0x17, 0x3f, 0x34, 0xf7, 0xe6, 0xc2, 0xbc, 0xd5, 0x0b, 0x6f, 0xb6, 0xd3, 0x3e, 0xda, 0xd3,
	0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x93, 0xbf, 0xfa, 0x34, 0x04, 0x00, 0x00,
}
07070100000144000081A4000003E800000064000000015E17A24700004F25000000000000000000000000000000000000004000000000cilium-proxy-20200109/go/envoy/data/tap/v2alpha/transport.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/data/tap/v2alpha/transport.proto

package envoy_data_tap_v2alpha

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	proto "github.com/golang/protobuf/proto"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Connection properties.
type Connection struct {
	// Local address.
	LocalAddress *core.Address `protobuf:"bytes,2,opt,name=local_address,json=localAddress,proto3" json:"local_address,omitempty"`
	// Remote address.
	RemoteAddress        *core.Address `protobuf:"bytes,3,opt,name=remote_address,json=remoteAddress,proto3" json:"remote_address,omitempty"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

func (m *Connection) Reset()         { *m = Connection{} }
func (m *Connection) String() string { return proto.CompactTextString(m) }
func (*Connection) ProtoMessage()    {}
func (*Connection) Descriptor() ([]byte, []int) {
	return fileDescriptor_03a9cebdb27ee552, []int{0}
}

func (m *Connection) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Connection.Unmarshal(m, b)
}
func (m *Connection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Connection.Marshal(b, m, deterministic)
}
func (m *Connection) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Connection.Merge(m, src)
}
func (m *Connection) XXX_Size() int {
	return xxx_messageInfo_Connection.Size(m)
}
func (m *Connection) XXX_DiscardUnknown() {
	xxx_messageInfo_Connection.DiscardUnknown(m)
}

var xxx_messageInfo_Connection proto.InternalMessageInfo

func (m *Connection) GetLocalAddress() *core.Address {
	if m != nil {
		return m.LocalAddress
	}
	return nil
}

func (m *Connection) GetRemoteAddress() *core.Address {
	if m != nil {
		return m.RemoteAddress
	}
	return nil
}

// Event in a socket trace.
type SocketEvent struct {
	// Timestamp for event.
	Timestamp *timestamp.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
	// Read or write with content as bytes string.
	//
	// Types that are valid to be assigned to EventSelector:
	//	*SocketEvent_Read_
	//	*SocketEvent_Write_
	//	*SocketEvent_Closed_
	EventSelector        isSocketEvent_EventSelector `protobuf_oneof:"event_selector"`
	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
	XXX_unrecognized     []byte                      `json:"-"`
	XXX_sizecache        int32                       `json:"-"`
}

func (m *SocketEvent) Reset()         { *m = SocketEvent{} }
func (m *SocketEvent) String() string { return proto.CompactTextString(m) }
func (*SocketEvent) ProtoMessage()    {}
func (*SocketEvent) Descriptor() ([]byte, []int) {
	return fileDescriptor_03a9cebdb27ee552, []int{1}
}

func (m *SocketEvent) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SocketEvent.Unmarshal(m, b)
}
func (m *SocketEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SocketEvent.Marshal(b, m, deterministic)
}
func (m *SocketEvent) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SocketEvent.Merge(m, src)
}
func (m *SocketEvent) XXX_Size() int {
	return xxx_messageInfo_SocketEvent.Size(m)
}
func (m *SocketEvent) XXX_DiscardUnknown() {
	xxx_messageInfo_SocketEvent.DiscardUnknown(m)
}

var xxx_messageInfo_SocketEvent proto.InternalMessageInfo

func (m *SocketEvent) GetTimestamp() *timestamp.Timestamp {
	if m != nil {
		return m.Timestamp
	}
	return nil
}

type isSocketEvent_EventSelector interface {
	isSocketEvent_EventSelector()
}

type SocketEvent_Read_ struct {
	Read *SocketEvent_Read `protobuf:"bytes,2,opt,name=read,proto3,oneof"`
}

type SocketEvent_Write_ struct {
	Write *SocketEvent_Write `protobuf:"bytes,3,opt,name=write,proto3,oneof"`
}

type SocketEvent_Closed_ struct {
	Closed *SocketEvent_Closed `protobuf:"bytes,4,opt,name=closed,proto3,oneof"`
}

func (*SocketEvent_Read_) isSocketEvent_EventSelector() {}

func (*SocketEvent_Write_) isSocketEvent_EventSelector() {}

func (*SocketEvent_Closed_) isSocketEvent_EventSelector() {}

func (m *SocketEvent) GetEventSelector() isSocketEvent_EventSelector {
	if m != nil {
		return m.EventSelector
	}
	return nil
}

func (m *SocketEvent) GetRead() *SocketEvent_Read {
	if x, ok := m.GetEventSelector().(*SocketEvent_Read_); ok {
		return x.Read
	}
	return nil
}

func (m *SocketEvent) GetWrite() *SocketEvent_Write {
	if x, ok := m.GetEventSelector().(*SocketEvent_Write_); ok {
		return x.Write
	}
	return nil
}

func (m *SocketEvent) GetClosed() *SocketEvent_Closed {
	if x, ok := m.GetEventSelector().(*SocketEvent_Closed_); ok {
		return x.Closed
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*SocketEvent) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*SocketEvent_Read_)(nil),
		(*SocketEvent_Write_)(nil),
		(*SocketEvent_Closed_)(nil),
	}
}

// Data read by Envoy from the transport socket.
type SocketEvent_Read struct {
	// Binary data read.
	Data                 *Body    `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *SocketEvent_Read) Reset()         { *m = SocketEvent_Read{} }
func (m *SocketEvent_Read) String() string { return proto.CompactTextString(m) }
func (*SocketEvent_Read) ProtoMessage()    {}
func (*SocketEvent_Read) Descriptor() ([]byte, []int) {
	return fileDescriptor_03a9cebdb27ee552, []int{1, 0}
}

func (m *SocketEvent_Read) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SocketEvent_Read.Unmarshal(m, b)
}
func (m *SocketEvent_Read) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SocketEvent_Read.Marshal(b, m, deterministic)
}
func (m *SocketEvent_Read) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SocketEvent_Read.Merge(m, src)
}
func (m *SocketEvent_Read) XXX_Size() int {
	return xxx_messageInfo_SocketEvent_Read.Size(m)
}
func (m *SocketEvent_Read) XXX_DiscardUnknown() {
	xxx_messageInfo_SocketEvent_Read.DiscardUnknown(m)
}

var xxx_messageInfo_SocketEvent_Read proto.InternalMessageInfo

func (m *SocketEvent_Read) GetData() *Body {
	if m != nil {
		return m.Data
	}
	return nil
}

// Data written by Envoy to the transport socket.
type SocketEvent_Write struct {
	// Binary data written.
	Data *Body `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
	// Stream was half closed after this write.
	EndStream            bool     `protobuf:"varint,2,opt,name=end_stream,json=endStream,proto3" json:"end_stream,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *SocketEvent_Write) Reset()         { *m = SocketEvent_Write{} }
func (m *SocketEvent_Write) String() string { return proto.CompactTextString(m) }
func (*SocketEvent_Write) ProtoMessage()    {}
func (*SocketEvent_Write) Descriptor() ([]byte, []int) {
	return fileDescriptor_03a9cebdb27ee552, []int{1, 1}
}

func (m *SocketEvent_Write) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SocketEvent_Write.Unmarshal(m, b)
}
func (m *SocketEvent_Write) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SocketEvent_Write.Marshal(b, m, deterministic)
}
func (m *SocketEvent_Write) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SocketEvent_Write.Merge(m, src)
}
func (m *SocketEvent_Write) XXX_Size() int {
	return xxx_messageInfo_SocketEvent_Write.Size(m)
}
func (m *SocketEvent_Write) XXX_DiscardUnknown() {
	xxx_messageInfo_SocketEvent_Write.DiscardUnknown(m)
}

var xxx_messageInfo_SocketEvent_Write proto.InternalMessageInfo

func (m *SocketEvent_Write) GetData() *Body {
	if m != nil {
		return m.Data
	}
	return nil
}

func (m *SocketEvent_Write) GetEndStream() bool {
	if m != nil {
		return m.EndStream
	}
	return false
}

// The connection was closed.
type SocketEvent_Closed struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *SocketEvent_Closed) Reset()         { *m = SocketEvent_Closed{} }
func (m *SocketEvent_Closed) String() string { return proto.CompactTextString(m) }
func (*SocketEvent_Closed) ProtoMessage()    {}
func (*SocketEvent_Closed) Descriptor() ([]byte, []int) {
	return fileDescriptor_03a9cebdb27ee552, []int{1, 2}
}

func (m *SocketEvent_Closed) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SocketEvent_Closed.Unmarshal(m, b)
}
func (m *SocketEvent_Closed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SocketEvent_Closed.Marshal(b, m, deterministic)
}
func (m *SocketEvent_Closed) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SocketEvent_Closed.Merge(m, src)
}
func (m *SocketEvent_Closed) XXX_Size() int {
	return xxx_messageInfo_SocketEvent_Closed.Size(m)
}
func (m *SocketEvent_Closed) XXX_DiscardUnknown() {
	xxx_messageInfo_SocketEvent_Closed.DiscardUnknown(m)
}

var xxx_messageInfo_SocketEvent_Closed proto.InternalMessageInfo

// Sequence of read/write events that constitute a buffered trace on a socket.
// [#next-free-field: 6]
type SocketBufferedTrace struct {
	// Trace ID unique to the originating Envoy only. Trace IDs can repeat and should not be used
	// for long term stable uniqueness. Matches connection IDs used in Envoy logs.
	TraceId uint64 `protobuf:"varint,1,opt,name=trace_id,json=traceId,proto3" json:"trace_id,omitempty"`
	// Connection properties.
	Connection *Connection `protobuf:"bytes,2,opt,name=connection,proto3" json:"connection,omitempty"`
	// Sequence of observed events.
	Events []*SocketEvent `protobuf:"bytes,3,rep,name=events,proto3" json:"events,omitempty"`
	// Set to true if read events were truncated due to the :ref:`max_buffered_rx_bytes
	// <envoy_api_field_service.tap.v2alpha.OutputConfig.max_buffered_rx_bytes>` setting.
	ReadTruncated bool `protobuf:"varint,4,opt,name=read_truncated,json=readTruncated,proto3" json:"read_truncated,omitempty"`
	// Set to true if write events were truncated due to the :ref:`max_buffered_tx_bytes
	// <envoy_api_field_service.tap.v2alpha.OutputConfig.max_buffered_tx_bytes>` setting.
	WriteTruncated       bool     `protobuf:"varint,5,opt,name=write_truncated,json=writeTruncated,proto3" json:"write_truncated,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *SocketBufferedTrace) Reset()         { *m = SocketBufferedTrace{} }
func (m *SocketBufferedTrace) String() string { return proto.CompactTextString(m) }
func (*SocketBufferedTrace) ProtoMessage()    {}
func (*SocketBufferedTrace) Descriptor() ([]byte, []int) {
	return fileDescriptor_03a9cebdb27ee552, []int{2}
}

func (m *SocketBufferedTrace) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SocketBufferedTrace.Unmarshal(m, b)
}
func (m *SocketBufferedTrace) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SocketBufferedTrace.Marshal(b, m, deterministic)
}
func (m *SocketBufferedTrace) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SocketBufferedTrace.Merge(m, src)
}
func (m *SocketBufferedTrace) XXX_Size() int {
	return xxx_messageInfo_SocketBufferedTrace.Size(m)
}
func (m *SocketBufferedTrace) XXX_DiscardUnknown() {
	xxx_messageInfo_SocketBufferedTrace.DiscardUnknown(m)
}

var xxx_messageInfo_SocketBufferedTrace proto.InternalMessageInfo

func (m *SocketBufferedTrace) GetTraceId() uint64 {
	if m != nil {
		return m.TraceId
	}
	return 0
}

func (m *SocketBufferedTrace) GetConnection() *Connection {
	if m != nil {
		return m.Connection
	}
	return nil
}

func (m *SocketBufferedTrace) GetEvents() []*SocketEvent {
	if m != nil {
		return m.Events
	}
	return nil
}

func (m *SocketBufferedTrace) GetReadTruncated() bool {
	if m != nil {
		return m.ReadTruncated
	}
	return false
}

func (m *SocketBufferedTrace) GetWriteTruncated() bool {
	if m != nil {
		return m.WriteTruncated
	}
	return false
}

// A streamed socket trace segment. Multiple segments make up a full trace.
type SocketStreamedTraceSegment struct {
	// Trace ID unique to the originating Envoy only. Trace IDs can repeat and should not be used
	// for long term stable uniqueness. Matches connection IDs used in Envoy logs.
	TraceId uint64 `protobuf:"varint,1,opt,name=trace_id,json=traceId,proto3" json:"trace_id,omitempty"`
	// Types that are valid to be assigned to MessagePiece:
	//	*SocketStreamedTraceSegment_Connection
	//	*SocketStreamedTraceSegment_Event
	MessagePiece         isSocketStreamedTraceSegment_MessagePiece `protobuf_oneof:"message_piece"`
	XXX_NoUnkeyedLiteral struct{}                                  `json:"-"`
	XXX_unrecognized     []byte                                    `json:"-"`
	XXX_sizecache        int32                                     `json:"-"`
}

func (m *SocketStreamedTraceSegment) Reset()         { *m = SocketStreamedTraceSegment{} }
func (m *SocketStreamedTraceSegment) String() string { return proto.CompactTextString(m) }
func (*SocketStreamedTraceSegment) ProtoMessage()    {}
func (*SocketStreamedTraceSegment) Descriptor() ([]byte, []int) {
	return fileDescriptor_03a9cebdb27ee552, []int{3}
}

func (m *SocketStreamedTraceSegment) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SocketStreamedTraceSegment.Unmarshal(m, b)
}
func (m *SocketStreamedTraceSegment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SocketStreamedTraceSegment.Marshal(b, m, deterministic)
}
func (m *SocketStreamedTraceSegment) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SocketStreamedTraceSegment.Merge(m, src)
}
func (m *SocketStreamedTraceSegment) XXX_Size() int {
	return xxx_messageInfo_SocketStreamedTraceSegment.Size(m)
}
func (m *SocketStreamedTraceSegment) XXX_DiscardUnknown() {
	xxx_messageInfo_SocketStreamedTraceSegment.DiscardUnknown(m)
}

var xxx_messageInfo_SocketStreamedTraceSegment proto.InternalMessageInfo

func (m *SocketStreamedTraceSegment) GetTraceId() uint64 {
	if m != nil {
		return m.TraceId
	}
	return 0
}

type isSocketStreamedTraceSegment_MessagePiece interface {
	isSocketStreamedTraceSegment_MessagePiece()
}

type SocketStreamedTraceSegment_Connection struct {
	Connection *Connection `protobuf:"bytes,2,opt,name=connection,proto3,oneof"`
}

type SocketStreamedTraceSegment_Event struct {
	Event *SocketEvent `protobuf:"bytes,3,opt,name=event,proto3,oneof"`
}

func (*SocketStreamedTraceSegment_Connection) isSocketStreamedTraceSegment_MessagePiece() {}

func (*SocketStreamedTraceSegment_Event) isSocketStreamedTraceSegment_MessagePiece() {}

func (m *SocketStreamedTraceSegment) GetMessagePiece() isSocketStreamedTraceSegment_MessagePiece {
	if m != nil {
		return m.MessagePiece
	}
	return nil
}

func (m *SocketStreamedTraceSegment) GetConnection() *Connection {
	if x, ok := m.GetMessagePiece().(*SocketStreamedTraceSegment_Connection); ok {
		return x.Connection
	}
	return nil
}

func (m *SocketStreamedTraceSegment) GetEvent() *SocketEvent {
	if x, ok := m.GetMessagePiece().(*SocketStreamedTraceSegment_Event); ok {
		return x.Event
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*SocketStreamedTraceSegment) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*SocketStreamedTraceSegment_Connection)(nil),
		(*SocketStreamedTraceSegment_Event)(nil),
	}
}

func init() {
	proto.RegisterType((*Connection)(nil), "envoy.data.tap.v2alpha.Connection")
	proto.RegisterType((*SocketEvent)(nil), "envoy.data.tap.v2alpha.SocketEvent")
	proto.RegisterType((*SocketEvent_Read)(nil), "envoy.data.tap.v2alpha.SocketEvent.Read")
	proto.RegisterType((*SocketEvent_Write)(nil), "envoy.data.tap.v2alpha.SocketEvent.Write")
	proto.RegisterType((*SocketEvent_Closed)(nil), "envoy.data.tap.v2alpha.SocketEvent.Closed")
	proto.RegisterType((*SocketBufferedTrace)(nil), "envoy.data.tap.v2alpha.SocketBufferedTrace")
	proto.RegisterType((*SocketStreamedTraceSegment)(nil), "envoy.data.tap.v2alpha.SocketStreamedTraceSegment")
}

func init() {
	proto.RegisterFile("envoy/data/tap/v2alpha/transport.proto", fileDescriptor_03a9cebdb27ee552)
}

var fileDescriptor_03a9cebdb27ee552 = []byte{
	// 563 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x5d, 0x8f, 0xd2, 0x40,
	0x14, 0x85, 0xe5, 0x43, 0xf6, 0x22, 0xac, 0x19, 0x13, 0x83, 0x8d, 0x66, 0x0d, 0xeb, 0x07, 0xfa,
	0x30, 0x35, 0xf8, 0x42, 0x62, 0xa2, 0xa1, 0xbb, 0x26, 0xf8, 0xb6, 0x29, 0x24, 0xfa, 0xd6, 0xcc,
	0x76, 0x2e, 0xd8, 0xd8, 0x76, 0x9a, 0xe9, 0x80, 0xf2, 0xe8, 0x3f, 0xf0, 0x27, 0xf9, 0xee, 0x9f,
	0x32, 0xf3, 0x01, 0x4b, 0x8c, 0x28, 0xee, 0x1b, 0x33, 0x39, 0xe7, 0xdc, 0x73, 0xcf, 0x9c, 0x02,
	0x4f, 0x31, 0x5f, 0x89, 0xb5, 0xcf, 0x99, 0x62, 0xbe, 0x62, 0x85, 0xbf, 0x1a, 0xb2, 0xb4, 0xf8,
	0xc4, 0x7c, 0x25, 0x59, 0x5e, 0x16, 0x42, 0x2a, 0x5a, 0x48, 0xa1, 0x04, 0xb9, 0x67, 0x70, 0x54,
	0xe3, 0xa8, 0x62, 0x05, 0x75, 0x38, 0xef, 0xd4, 0xf2, 0x59, 0x91, 0xf8, 0xab, 0xa1, 0x1f, 0x0b,
	0x89, 0x3e, 0xe3, 0x5c, 0x62, 0x59, 0x5a, 0xa2, 0x77, 0xb6, 0x67, 0x40, 0x2c, 0xb2, 0x4c, 0xe4,
	0x0e, 0x74, 0xba, 0x10, 0x62, 0x91, 0xa2, 0x6f, 0x4e, 0x57, 0xcb, 0xb9, 0xaf, 0x92, 0x0c, 0x4b,
	0xc5, 0xb2, 0xc2, 0x02, 0xfa, 0xdf, 0xab, 0x00, 0xe7, 0x22, 0xcf, 0x31, 0x56, 0x89, 0xc8, 0xc9,
	0x5b, 0xe8, 0xa4, 0x22, 0x66, 0x69, 0xe4, 0x66, 0xf5, 0x8e, 0x1e, 0x55, 0x07, 0xed, 0xa1, 0x47,
	0xad, 0x4b, 0x56, 0x24, 0x74, 0x35, 0xa4, 0xda, 0x0d, 0x1d, 0x5b, 0x44, 0x78, 0xdb, 0x10, 0xdc,
	0x89, 0x8c, 0xa1, 0x2b, 0x31, 0x13, 0x0a, 0xb7, 0x0a, 0xb5, 0x7f, 0x2a, 0x74, 0x2c, 0xc3, 0x1d,
	0xfb, 0x3f, 0x6a, 0xd0, 0x9e, 0x8a, 0xf8, 0x33, 0xaa, 0x77, 0x2b, 0xcc, 0x15, 0x19, 0xc1, 0xf1,
	0xd6, 0x75, 0xaf, 0xea, 0xd4, 0xec, 0x5e, 0x74, 0xb3, 0x17, 0x9d, 0x6d, 0x10, 0xe1, 0x35, 0x98,
	0xbc, 0x81, 0xba, 0x44, 0xc6, 0xdd, 0x12, 0x03, 0xfa, 0xe7, 0xa8, 0xe9, 0xce, 0x30, 0x1a, 0x22,
	0xe3, 0x93, 0x4a, 0x68, 0x78, 0x64, 0x0c, 0x8d, 0x2f, 0x32, 0x51, 0xe8, 0x76, 0x78, 0x7e, 0x88,
	0xc0, 0x07, 0x4d, 0x98, 0x54, 0x42, 0xcb, 0x24, 0x17, 0xd0, 0x8c, 0x53, 0x51, 0x22, 0xef, 0xd5,
	0x8d, 0xc6, 0x8b, 0x43, 0x34, 0xce, 0x0d, 0x63, 0x52, 0x09, 0x1d, 0xd7, 0x1b, 0x41, 0x5d, 0x1b,
	0x23, 0x2f, 0xa1, 0xae, 0x89, 0x2e, 0x85, 0x07, 0xfb, 0xb4, 0x02, 0xc1, 0xd7, 0xa1, 0x41, 0x7a,
	0x1f, 0xa1, 0x61, 0x1c, 0xfd, 0x3f, 0x95, 0x3c, 0x04, 0xc0, 0x9c, 0x47, 0xa5, 0x92, 0xc8, 0x32,
	0x93, 0x61, 0x2b, 0x3c, 0xc6, 0x9c, 0x4f, 0xcd, 0x85, 0xd7, 0x82, 0xa6, 0xf5, 0x19, 0xdc, 0x81,
	0x2e, 0x6a, 0xdf, 0x51, 0x89, 0x29, 0xc6, 0x4a, 0xc8, 0xfe, 0xb7, 0x23, 0xb8, 0x6b, 0x17, 0x0a,
	0x96, 0xf3, 0x39, 0x4a, 0xe4, 0x33, 0xc9, 0x62, 0x24, 0xf7, 0xa1, 0xa5, 0xf4, 0x8f, 0x28, 0xe1,
	0xc6, 0x48, 0x3d, 0xbc, 0x65, 0xce, 0xef, 0x39, 0x09, 0x00, 0xe2, 0x6d, 0x0f, 0xdd, 0x8b, 0xf5,
	0xf7, 0xb9, 0xbc, 0x6e, 0x6c, 0xb8, 0xc3, 0x22, 0xaf, 0xa1, 0x69, 0x8c, 0xe8, 0xd2, 0xd5, 0x06,
	0xed, 0xe1, 0xd9, 0x01, 0x61, 0x87, 0x8e, 0x42, 0x9e, 0xe8, 0xe6, 0x32, 0x1e, 0x29, 0xb9, 0xcc,
	0x63, 0xa6, 0xdc, 0x8b, 0xb5, 0x74, 0x3b, 0x19, 0x9f, 0x6d, 0x2e, 0xc9, 0x33, 0x38, 0x31, 0x2f,
	0xbb, 0x83, 0x6b, 0x18, 0x5c, 0xd7, 0x5c, 0x6f, 0x81, 0xfd, 0x9f, 0x55, 0xf0, 0xec, 0x1c, 0x1b,
	0x98, 0xcb, 0x60, 0x8a, 0x8b, 0x4c, 0xb7, 0xfa, 0x2f, 0x51, 0x5c, 0xdc, 0x2c, 0x8a, 0x49, 0xe5,
	0xb7, 0x30, 0x1a, 0x66, 0x33, 0x57, 0xde, 0x43, 0xb2, 0xd0, 0xb5, 0x35, 0x9c, 0xe0, 0x04, 0x3a,
	0x19, 0x96, 0x25, 0x5b, 0x60, 0x54, 0x24, 0x18, 0x63, 0x30, 0x82, 0xc7, 0x89, 0xb0, 0x12, 0x85,
	0x14, 0x5f, 0xd7, 0x7b, 0xd4, 0x82, 0xee, 0x6c, 0xf3, 0xff, 0x76, 0xa9, 0x3f, 0xcd, 0xcb, 0xea,
	0x55, 0xd3, 0x7c, 0xa3, 0xaf, 0x7e, 0x05, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x0d, 0xac, 0x8e, 0x11,
	0x05, 0x00, 0x00,
}
   07070100000145000081A4000003E800000064000000015E17A24700001A63000000000000000000000000000000000000003E00000000cilium-proxy-20200109/go/envoy/data/tap/v2alpha/wrapper.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/data/tap/v2alpha/wrapper.proto

package envoy_data_tap_v2alpha

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Wrapper for all fully buffered and streamed tap traces that Envoy emits. This is required for
// sending traces over gRPC APIs or more easily persisting binary messages to files.
type TraceWrapper struct {
	// Types that are valid to be assigned to Trace:
	//	*TraceWrapper_HttpBufferedTrace
	//	*TraceWrapper_HttpStreamedTraceSegment
	//	*TraceWrapper_SocketBufferedTrace
	//	*TraceWrapper_SocketStreamedTraceSegment
	Trace                isTraceWrapper_Trace `protobuf_oneof:"trace"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *TraceWrapper) Reset()         { *m = TraceWrapper{} }
func (m *TraceWrapper) String() string { return proto.CompactTextString(m) }
func (*TraceWrapper) ProtoMessage()    {}
func (*TraceWrapper) Descriptor() ([]byte, []int) {
	return fileDescriptor_9f617738ad092e1c, []int{0}
}

func (m *TraceWrapper) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TraceWrapper.Unmarshal(m, b)
}
func (m *TraceWrapper) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TraceWrapper.Marshal(b, m, deterministic)
}
func (m *TraceWrapper) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TraceWrapper.Merge(m, src)
}
func (m *TraceWrapper) XXX_Size() int {
	return xxx_messageInfo_TraceWrapper.Size(m)
}
func (m *TraceWrapper) XXX_DiscardUnknown() {
	xxx_messageInfo_TraceWrapper.DiscardUnknown(m)
}

var xxx_messageInfo_TraceWrapper proto.InternalMessageInfo

type isTraceWrapper_Trace interface {
	isTraceWrapper_Trace()
}

type TraceWrapper_HttpBufferedTrace struct {
	HttpBufferedTrace *HttpBufferedTrace `protobuf:"bytes,1,opt,name=http_buffered_trace,json=httpBufferedTrace,proto3,oneof"`
}

type TraceWrapper_HttpStreamedTraceSegment struct {
	HttpStreamedTraceSegment *HttpStreamedTraceSegment `protobuf:"bytes,2,opt,name=http_streamed_trace_segment,json=httpStreamedTraceSegment,proto3,oneof"`
}

type TraceWrapper_SocketBufferedTrace struct {
	SocketBufferedTrace *SocketBufferedTrace `protobuf:"bytes,3,opt,name=socket_buffered_trace,json=socketBufferedTrace,proto3,oneof"`
}

type TraceWrapper_SocketStreamedTraceSegment struct {
	SocketStreamedTraceSegment *SocketStreamedTraceSegment `protobuf:"bytes,4,opt,name=socket_streamed_trace_segment,json=socketStreamedTraceSegment,proto3,oneof"`
}

func (*TraceWrapper_HttpBufferedTrace) isTraceWrapper_Trace() {}

func (*TraceWrapper_HttpStreamedTraceSegment) isTraceWrapper_Trace() {}

func (*TraceWrapper_SocketBufferedTrace) isTraceWrapper_Trace() {}

func (*TraceWrapper_SocketStreamedTraceSegment) isTraceWrapper_Trace() {}

func (m *TraceWrapper) GetTrace() isTraceWrapper_Trace {
	if m != nil {
		return m.Trace
	}
	return nil
}

func (m *TraceWrapper) GetHttpBufferedTrace() *HttpBufferedTrace {
	if x, ok := m.GetTrace().(*TraceWrapper_HttpBufferedTrace); ok {
		return x.HttpBufferedTrace
	}
	return nil
}

func (m *TraceWrapper) GetHttpStreamedTraceSegment() *HttpStreamedTraceSegment {
	if x, ok := m.GetTrace().(*TraceWrapper_HttpStreamedTraceSegment); ok {
		return x.HttpStreamedTraceSegment
	}
	return nil
}

func (m *TraceWrapper) GetSocketBufferedTrace() *SocketBufferedTrace {
	if x, ok := m.GetTrace().(*TraceWrapper_SocketBufferedTrace); ok {
		return x.SocketBufferedTrace
	}
	return nil
}

func (m *TraceWrapper) GetSocketStreamedTraceSegment() *SocketStreamedTraceSegment {
	if x, ok := m.GetTrace().(*TraceWrapper_SocketStreamedTraceSegment); ok {
		return x.SocketStreamedTraceSegment
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*TraceWrapper) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*TraceWrapper_HttpBufferedTrace)(nil),
		(*TraceWrapper_HttpStreamedTraceSegment)(nil),
		(*TraceWrapper_SocketBufferedTrace)(nil),
		(*TraceWrapper_SocketStreamedTraceSegment)(nil),
	}
}

func init() {
	proto.RegisterType((*TraceWrapper)(nil), "envoy.data.tap.v2alpha.TraceWrapper")
}

func init() {
	proto.RegisterFile("envoy/data/tap/v2alpha/wrapper.proto", fileDescriptor_9f617738ad092e1c)
}

var fileDescriptor_9f617738ad092e1c = []byte{
	// 301 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x4f, 0x4b, 0xc3, 0x30,
	0x18, 0xc6, 0x57, 0xab, 0x1e, 0x62, 0x2f, 0x66, 0xa8, 0xa5, 0x22, 0xa8, 0x0c, 0x51, 0x84, 0x54,
	0x2a, 0xf8, 0x01, 0x7a, 0xea, 0x71, 0xac, 0x82, 0x07, 0x0f, 0xe5, 0xdd, 0x9a, 0xd9, 0xe1, 0xd6,
	0xc4, 0xe4, 0xb5, 0x73, 0xdf, 0xd0, 0x8f, 0xe4, 0x51, 0x9a, 0x66, 0x97, 0x6a, 0x76, 0x2b, 0x79,
	0xfe, 0xfc, 0xf2, 0xd0, 0x90, 0x11, 0xaf, 0x1b, 0xb1, 0x89, 0x4b, 0x40, 0x88, 0x11, 0x64, 0xdc,
	0x24, 0xb0, 0x94, 0x15, 0xc4, 0x6b, 0x05, 0x52, 0x72, 0xc5, 0xa4, 0x12, 0x28, 0xe8, 0xa9, 0x71,
	0xb1, 0xd6, 0xc5, 0x10, 0x24, 0xb3, 0xae, 0xe8, 0xca, 0x91, 0xae, 0x10, 0x65, 0x17, 0x8d, 0x6e,
	0x1c, 0x16, 0x54, 0x50, 0x6b, 0x29, 0x14, 0x5a, 0xdf, 0x59, 0x03, 0xcb, 0x45, 0x09, 0xc8, 0xe3,
	0xed, 0x47, 0x27, 0x5c, 0x7f, 0xfb, 0x24, 0x78, 0x56, 0x30, 0xe3, 0x2f, 0xdd, 0x95, 0xe8, 0x2b,
	0x19, 0xb6, 0xfd, 0xc5, 0xf4, 0x73, 0x3e, 0xe7, 0x8a, 0x97, 0x05, 0xb6, 0x6a, 0xe8, 0x5d, 0x7a,
	0xb7, 0x47, 0xc9, 0x1d, 0xfb, 0xff, 0xaa, 0x2c, 0x43, 0x94, 0xa9, 0x4d, 0x98, 0xba, 0x6c, 0x30,
	0x39, 0xae, 0xfa, 0x87, 0xf4, 0x83, 0x9c, 0x9b, 0x72, 0x8d, 0x8a, 0xc3, 0x6a, 0x5b, 0x5e, 0x68,
	0xfe, 0xb6, 0xe2, 0x35, 0x86, 0x7b, 0x06, 0xf2, 0xb0, 0x0b, 0x92, 0xdb, 0xa4, 0xe9, 0xcb, 0xbb,
	0x5c, 0x36, 0x98, 0x84, 0x95, 0x43, 0xa3, 0x40, 0x4e, 0xb4, 0x98, 0xbd, 0x73, 0xec, 0x2f, 0xf2,
	0x0d, 0xec, 0xde, 0x05, 0xcb, 0x4d, 0xa8, 0xbf, 0x69, 0xa8, 0xff, 0x1e, 0xd3, 0x35, 0xb9, 0xb0,
	0x08, 0xc7, 0xae, 0x7d, 0x83, 0x4a, 0x76, 0xa3, 0x1c, 0xcb, 0x22, 0xed, 0x54, 0xd3, 0x80, 0x1c,
	0x18, 0x10, 0xf5, 0x7f, 0x52, 0x2f, 0x7d, 0x22, 0xa3, 0x85, 0xe8, 0x18, 0x52, 0x89, 0xaf, 0x8d,
	0x03, 0x97, 0x06, 0xf6, 0x57, 0x8f, 0xdb, 0x07, 0x30, 0xf6, 0xa6, 0x87, 0xe6, 0x25, 0x3c, 0xfe,
	0x06, 0x00, 0x00, 0xff, 0xff, 0x57, 0xcc, 0x30, 0xa3, 0xad, 0x02, 0x00, 0x00,
}
 07070100000146000041ED000003E800000064000000095E17A24700000000000000000000000000000000000000000000002700000000cilium-proxy-20200109/go/envoy/service    07070100000147000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003100000000cilium-proxy-20200109/go/envoy/service/accesslog  07070100000148000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003400000000cilium-proxy-20200109/go/envoy/service/accesslog/v2   07070100000149000081A4000003E800000064000000015E17A24700004FE2000000000000000000000000000000000000003E00000000cilium-proxy-20200109/go/envoy/service/accesslog/v2/als.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/service/accesslog/v2/als.proto

package envoy_service_accesslog_v2

import (
	context "context"
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	v2 "github.com/cilium/proxy/go/envoy/data/accesslog/v2"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Empty response for the StreamAccessLogs API. Will never be sent. See below.
type StreamAccessLogsResponse struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *StreamAccessLogsResponse) Reset()         { *m = StreamAccessLogsResponse{} }
func (m *StreamAccessLogsResponse) String() string { return proto.CompactTextString(m) }
func (*StreamAccessLogsResponse) ProtoMessage()    {}
func (*StreamAccessLogsResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_e4f3a3a69261b513, []int{0}
}

func (m *StreamAccessLogsResponse) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StreamAccessLogsResponse.Unmarshal(m, b)
}
func (m *StreamAccessLogsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StreamAccessLogsResponse.Marshal(b, m, deterministic)
}
func (m *StreamAccessLogsResponse) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StreamAccessLogsResponse.Merge(m, src)
}
func (m *StreamAccessLogsResponse) XXX_Size() int {
	return xxx_messageInfo_StreamAccessLogsResponse.Size(m)
}
func (m *StreamAccessLogsResponse) XXX_DiscardUnknown() {
	xxx_messageInfo_StreamAccessLogsResponse.DiscardUnknown(m)
}

var xxx_messageInfo_StreamAccessLogsResponse proto.InternalMessageInfo

// Stream message for the StreamAccessLogs API. Envoy will open a stream to the server and stream
// access logs without ever expecting a response.
type StreamAccessLogsMessage struct {
	// Identifier data that will only be sent in the first message on the stream. This is effectively
	// structured metadata and is a performance optimization.
	Identifier *StreamAccessLogsMessage_Identifier `protobuf:"bytes,1,opt,name=identifier,proto3" json:"identifier,omitempty"`
	// Batches of log entries of a single type. Generally speaking, a given stream should only
	// ever include one type of log entry.
	//
	// Types that are valid to be assigned to LogEntries:
	//	*StreamAccessLogsMessage_HttpLogs
	//	*StreamAccessLogsMessage_TcpLogs
	LogEntries           isStreamAccessLogsMessage_LogEntries `protobuf_oneof:"log_entries"`
	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
	XXX_unrecognized     []byte                               `json:"-"`
	XXX_sizecache        int32                                `json:"-"`
}

func (m *StreamAccessLogsMessage) Reset()         { *m = StreamAccessLogsMessage{} }
func (m *StreamAccessLogsMessage) String() string { return proto.CompactTextString(m) }
func (*StreamAccessLogsMessage) ProtoMessage()    {}
func (*StreamAccessLogsMessage) Descriptor() ([]byte, []int) {
	return fileDescriptor_e4f3a3a69261b513, []int{1}
}

func (m *StreamAccessLogsMessage) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StreamAccessLogsMessage.Unmarshal(m, b)
}
func (m *StreamAccessLogsMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StreamAccessLogsMessage.Marshal(b, m, deterministic)
}
func (m *StreamAccessLogsMessage) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StreamAccessLogsMessage.Merge(m, src)
}
func (m *StreamAccessLogsMessage) XXX_Size() int {
	return xxx_messageInfo_StreamAccessLogsMessage.Size(m)
}
func (m *StreamAccessLogsMessage) XXX_DiscardUnknown() {
	xxx_messageInfo_StreamAccessLogsMessage.DiscardUnknown(m)
}

var xxx_messageInfo_StreamAccessLogsMessage proto.InternalMessageInfo

func (m *StreamAccessLogsMessage) GetIdentifier() *StreamAccessLogsMessage_Identifier {
	if m != nil {
		return m.Identifier
	}
	return nil
}

type isStreamAccessLogsMessage_LogEntries interface {
	isStreamAccessLogsMessage_LogEntries()
}

type StreamAccessLogsMessage_HttpLogs struct {
	HttpLogs *StreamAccessLogsMessage_HTTPAccessLogEntries `protobuf:"bytes,2,opt,name=http_logs,json=httpLogs,proto3,oneof"`
}

type StreamAccessLogsMessage_TcpLogs struct {
	TcpLogs *StreamAccessLogsMessage_TCPAccessLogEntries `protobuf:"bytes,3,opt,name=tcp_logs,json=tcpLogs,proto3,oneof"`
}

func (*StreamAccessLogsMessage_HttpLogs) isStreamAccessLogsMessage_LogEntries() {}

func (*StreamAccessLogsMessage_TcpLogs) isStreamAccessLogsMessage_LogEntries() {}

func (m *StreamAccessLogsMessage) GetLogEntries() isStreamAccessLogsMessage_LogEntries {
	if m != nil {
		return m.LogEntries
	}
	return nil
}

func (m *StreamAccessLogsMessage) GetHttpLogs() *StreamAccessLogsMessage_HTTPAccessLogEntries {
	if x, ok := m.GetLogEntries().(*StreamAccessLogsMessage_HttpLogs); ok {
		return x.HttpLogs
	}
	return nil
}

func (m *StreamAccessLogsMessage) GetTcpLogs() *StreamAccessLogsMessage_TCPAccessLogEntries {
	if x, ok := m.GetLogEntries().(*StreamAccessLogsMessage_TcpLogs); ok {
		return x.TcpLogs
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*StreamAccessLogsMessage) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*StreamAccessLogsMessage_HttpLogs)(nil),
		(*StreamAccessLogsMessage_TcpLogs)(nil),
	}
}

type StreamAccessLogsMessage_Identifier struct {
	// The node sending the access log messages over the stream.
	Node *core.Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"`
	// The friendly name of the log configured in :ref:`CommonGrpcAccessLogConfig
	// <envoy_api_msg_config.accesslog.v2.CommonGrpcAccessLogConfig>`.
	LogName              string   `protobuf:"bytes,2,opt,name=log_name,json=logName,proto3" json:"log_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *StreamAccessLogsMessage_Identifier) Reset()         { *m = StreamAccessLogsMessage_Identifier{} }
func (m *StreamAccessLogsMessage_Identifier) String() string { return proto.CompactTextString(m) }
func (*StreamAccessLogsMessage_Identifier) ProtoMessage()    {}
func (*StreamAccessLogsMessage_Identifier) Descriptor() ([]byte, []int) {
	return fileDescriptor_e4f3a3a69261b513, []int{1, 0}
}

func (m *StreamAccessLogsMessage_Identifier) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StreamAccessLogsMessage_Identifier.Unmarshal(m, b)
}
func (m *StreamAccessLogsMessage_Identifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StreamAccessLogsMessage_Identifier.Marshal(b, m, deterministic)
}
func (m *StreamAccessLogsMessage_Identifier) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StreamAccessLogsMessage_Identifier.Merge(m, src)
}
func (m *StreamAccessLogsMessage_Identifier) XXX_Size() int {
	return xxx_messageInfo_StreamAccessLogsMessage_Identifier.Size(m)
}
func (m *StreamAccessLogsMessage_Identifier) XXX_DiscardUnknown() {
	xxx_messageInfo_StreamAccessLogsMessage_Identifier.DiscardUnknown(m)
}

var xxx_messageInfo_StreamAccessLogsMessage_Identifier proto.InternalMessageInfo

func (m *StreamAccessLogsMessage_Identifier) GetNode() *core.Node {
	if m != nil {
		return m.Node
	}
	return nil
}

func (m *StreamAccessLogsMessage_Identifier) GetLogName() string {
	if m != nil {
		return m.LogName
	}
	return ""
}

// Wrapper for batches of HTTP access log entries.
type StreamAccessLogsMessage_HTTPAccessLogEntries struct {
	LogEntry             []*v2.HTTPAccessLogEntry `protobuf:"bytes,1,rep,name=log_entry,json=logEntry,proto3" json:"log_entry,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
	XXX_unrecognized     []byte                   `json:"-"`
	XXX_sizecache        int32                    `json:"-"`
}

func (m *StreamAccessLogsMessage_HTTPAccessLogEntries) Reset() {
	*m = StreamAccessLogsMessage_HTTPAccessLogEntries{}
}
func (m *StreamAccessLogsMessage_HTTPAccessLogEntries) String() string {
	return proto.CompactTextString(m)
}
func (*StreamAccessLogsMessage_HTTPAccessLogEntries) ProtoMessage() {}
func (*StreamAccessLogsMessage_HTTPAccessLogEntries) Descriptor() ([]byte, []int) {
	return fileDescriptor_e4f3a3a69261b513, []int{1, 1}
}

func (m *StreamAccessLogsMessage_HTTPAccessLogEntries) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StreamAccessLogsMessage_HTTPAccessLogEntries.Unmarshal(m, b)
}
func (m *StreamAccessLogsMessage_HTTPAccessLogEntries) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StreamAccessLogsMessage_HTTPAccessLogEntries.Marshal(b, m, deterministic)
}
func (m *StreamAccessLogsMessage_HTTPAccessLogEntries) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StreamAccessLogsMessage_HTTPAccessLogEntries.Merge(m, src)
}
func (m *StreamAccessLogsMessage_HTTPAccessLogEntries) XXX_Size() int {
	return xxx_messageInfo_StreamAccessLogsMessage_HTTPAccessLogEntries.Size(m)
}
func (m *StreamAccessLogsMessage_HTTPAccessLogEntries) XXX_DiscardUnknown() {
	xxx_messageInfo_StreamAccessLogsMessage_HTTPAccessLogEntries.DiscardUnknown(m)
}

var xxx_messageInfo_StreamAccessLogsMessage_HTTPAccessLogEntries proto.InternalMessageInfo

func (m *StreamAccessLogsMessage_HTTPAccessLogEntries) GetLogEntry() []*v2.HTTPAccessLogEntry {
	if m != nil {
		return m.LogEntry
	}
	return nil
}

// Wrapper for batches of TCP access log entries.
type StreamAccessLogsMessage_TCPAccessLogEntries struct {
	LogEntry             []*v2.TCPAccessLogEntry `protobuf:"bytes,1,rep,name=log_entry,json=logEntry,proto3" json:"log_entry,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
	XXX_unrecognized     []byte                  `json:"-"`
	XXX_sizecache        int32                   `json:"-"`
}

func (m *StreamAccessLogsMessage_TCPAccessLogEntries) Reset() {
	*m = StreamAccessLogsMessage_TCPAccessLogEntries{}
}
func (m *StreamAccessLogsMessage_TCPAccessLogEntries) String() string {
	return proto.CompactTextString(m)
}
func (*StreamAccessLogsMessage_TCPAccessLogEntries) ProtoMessage() {}
func (*StreamAccessLogsMessage_TCPAccessLogEntries) Descriptor() ([]byte, []int) {
	return fileDescriptor_e4f3a3a69261b513, []int{1, 2}
}

func (m *StreamAccessLogsMessage_TCPAccessLogEntries) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StreamAccessLogsMessage_TCPAccessLogEntries.Unmarshal(m, b)
}
func (m *StreamAccessLogsMessage_TCPAccessLogEntries) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StreamAccessLogsMessage_TCPAccessLogEntries.Marshal(b, m, deterministic)
}
func (m *StreamAccessLogsMessage_TCPAccessLogEntries) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StreamAccessLogsMessage_TCPAccessLogEntries.Merge(m, src)
}
func (m *StreamAccessLogsMessage_TCPAccessLogEntries) XXX_Size() int {
	return xxx_messageInfo_StreamAccessLogsMessage_TCPAccessLogEntries.Size(m)
}
func (m *StreamAccessLogsMessage_TCPAccessLogEntries) XXX_DiscardUnknown() {
	xxx_messageInfo_StreamAccessLogsMessage_TCPAccessLogEntries.DiscardUnknown(m)
}

var xxx_messageInfo_StreamAccessLogsMessage_TCPAccessLogEntries proto.InternalMessageInfo

func (m *StreamAccessLogsMessage_TCPAccessLogEntries) GetLogEntry() []*v2.TCPAccessLogEntry {
	if m != nil {
		return m.LogEntry
	}
	return nil
}

func init() {
	proto.RegisterType((*StreamAccessLogsResponse)(nil), "envoy.service.accesslog.v2.StreamAccessLogsResponse")
	proto.RegisterType((*StreamAccessLogsMessage)(nil), "envoy.service.accesslog.v2.StreamAccessLogsMessage")
	proto.RegisterType((*StreamAccessLogsMessage_Identifier)(nil), "envoy.service.accesslog.v2.StreamAccessLogsMessage.Identifier")
	proto.RegisterType((*StreamAccessLogsMessage_HTTPAccessLogEntries)(nil), "envoy.service.accesslog.v2.StreamAccessLogsMessage.HTTPAccessLogEntries")
	proto.RegisterType((*StreamAccessLogsMessage_TCPAccessLogEntries)(nil), "envoy.service.accesslog.v2.StreamAccessLogsMessage.TCPAccessLogEntries")
}

func init() {
	proto.RegisterFile("envoy/service/accesslog/v2/als.proto", fileDescriptor_e4f3a3a69261b513)
}

var fileDescriptor_e4f3a3a69261b513 = []byte{
	// 460 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0xcf, 0x8b, 0xd3, 0x40,
	0x14, 0xc7, 0x77, 0xda, 0x5d, 0x9b, 0xbe, 0x5e, 0xca, 0x28, 0xb4, 0x04, 0x0f, 0xa5, 0x08, 0x16,
	0x85, 0x04, 0xb2, 0x7a, 0xf0, 0x22, 0x6c, 0x44, 0xac, 0xa0, 0x4b, 0xcd, 0xf6, 0xec, 0x32, 0x9b,
	0x3c, 0x67, 0x47, 0xd2, 0x4c, 0x98, 0x19, 0x82, 0x3d, 0x7a, 0x13, 0x8f, 0x1e, 0xbc, 0xf8, 0x8f,
	0xca, 0x9e, 0x64, 0x26, 0xd9, 0xa8, 0xfd, 0x21, 0xd8, 0x5b, 0x98, 0x79, 0xdf, 0xcf, 0x67, 0xde,
	0xbc, 0x0c, 0x3c, 0xc0, 0xa2, 0x92, 0xeb, 0x50, 0xa3, 0xaa, 0x44, 0x8a, 0x21, 0x4b, 0x53, 0xd4,
	0x3a, 0x97, 0x3c, 0xac, 0xa2, 0x90, 0xe5, 0x3a, 0x28, 0x95, 0x34, 0x92, 0xfa, 0xae, 0x2a, 0x68,
	0xaa, 0x82, 0xb6, 0x2a, 0xa8, 0x22, 0xff, 0x7e, 0x4d, 0x60, 0xa5, 0xb0, 0x99, 0x54, 0x2a, 0x0c,
	0xaf, 0x98, 0xc6, 0x3a, 0xe9, 0x3f, 0xac, 0x77, 0x33, 0x66, 0xd8, 0x06, 0xbc, 0x65, 0xd4, 0x85,
	0xa3, 0x8a, 0xe5, 0x22, 0x63, 0x06, 0xc3, 0xdb, 0x8f, 0x7a, 0x63, 0xea, 0xc3, 0xf8, 0xc2, 0x28,
	0x64, 0xab, 0x33, 0x97, 0x78, 0x23, 0xb9, 0x4e, 0x50, 0x97, 0xb2, 0xd0, 0x38, 0xfd, 0x71, 0x02,
	0xa3, 0xcd, 0xcd, 0xb7, 0xa8, 0x35, 0xe3, 0x48, 0xdf, 0x03, 0x88, 0x0c, 0x0b, 0x23, 0x3e, 0x08,
	0x54, 0x63, 0x32, 0x21, 0xb3, 0x41, 0xf4, 0x3c, 0xd8, 0xdf, 0x48, 0xb0, 0x07, 0x14, 0xbc, 0x6e,
	0x29, 0xc9, 0x1f, 0x44, 0xca, 0xa1, 0x7f, 0x6d, 0x4c, 0x79, 0x99, 0x4b, 0xae, 0xc7, 0x1d, 0x87,
	0x9f, 0x1f, 0x82, 0x9f, 0x2f, 0x97, 0x8b, 0x76, 0xf5, 0x65, 0x61, 0x94, 0x40, 0x3d, 0x3f, 0x4a,
	0x3c, 0x0b, 0xb7, 0x75, 0x34, 0x03, 0xcf, 0xa4, 0x8d, 0xa7, 0xeb, 0x3c, 0xaf, 0x0e, 0xf1, 0x2c,
	0x5f, 0xec, 0xd2, 0xf4, 0x4c, 0xea, 0x2c, 0x3e, 0x07, 0xf8, 0xdd, 0x28, 0x7d, 0x0a, 0xc7, 0x85,
	0xcc, 0xb0, 0xb9, 0xb6, 0x51, 0xe3, 0x63, 0xa5, 0xb0, 0x06, 0x3b, 0xe3, 0xe0, 0x5c, 0x66, 0x18,
	0x7b, 0x37, 0xf1, 0xc9, 0x57, 0xd2, 0x19, 0x92, 0xc4, 0x95, 0xd3, 0x29, 0x78, 0xb9, 0xe4, 0x97,
	0x05, 0x5b, 0xa1, 0xbb, 0x92, 0x7e, 0xdc, 0xbb, 0x89, 0x8f, 0x55, 0x67, 0x42, 0x92, 0x5e, 0x2e,
	0xf9, 0x39, 0x5b, 0xa1, 0xff, 0x11, 0xee, 0xed, 0x6a, 0x99, 0x26, 0xd0, 0xb7, 0x59, 0x2c, 0x8c,
	0x5a, 0x8f, 0xc9, 0xa4, 0x3b, 0x1b, 0x44, 0x8f, 0x1b, 0xaf, 0xfd, 0x7b, 0xfe, 0x6e, 0x72, 0x8b,
	0xb0, 0x76, 0x67, 0xf9, 0x46, 0x3a, 0x1e, 0x49, 0xec, 0x19, 0xdc, 0x9a, 0x7f, 0x0d, 0x77, 0x77,
	0xb4, 0x4d, 0xdf, 0x6d, 0xab, 0x1e, 0xed, 0x55, 0x6d, 0x02, 0x76, 0x9a, 0x62, 0x0a, 0x83, 0x5b,
	0xa4, 0x35, 0x74, 0x7f, 0xc6, 0x24, 0xfa, 0x4e, 0x60, 0xd8, 0x46, 0x2f, 0xea, 0x59, 0xd1, 0xcf,
	0x04, 0x86, 0x9b, 0x23, 0xa2, 0xa7, 0x07, 0x0c, 0xd4, 0x7f, 0xf2, 0x3f, 0xa1, 0xf6, 0xc9, 0x1c,
	0xcd, 0x48, 0xfc, 0x0c, 0x66, 0x42, 0xd6, 0xe9, 0x52, 0xc9, 0x4f, 0xeb, 0x7f, 0x80, 0x62, 0xef,
	0x2c, 0xd7, 0x0b, 0xfb, 0x10, 0x17, 0xe4, 0x0b, 0x21, 0x57, 0x77, 0xdc, 0xa3, 0x3c, 0xfd, 0x15,
	0x00, 0x00, 0xff, 0xff, 0xe9, 0x46, 0x5b, 0x72, 0x38, 0x04, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// AccessLogServiceClient is the client API for AccessLogService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type AccessLogServiceClient interface {
	// Envoy will connect and send StreamAccessLogsMessage messages forever. It does not expect any
	// response to be sent as nothing would be done in the case of failure. The server should
	// disconnect if it expects Envoy to reconnect. In the future we may decide to add a different
	// API for "critical" access logs in which Envoy will buffer access logs for some period of time
	// until it gets an ACK so it could then retry. This API is designed for high throughput with the
	// expectation that it might be lossy.
	StreamAccessLogs(ctx context.Context, opts ...grpc.CallOption) (AccessLogService_StreamAccessLogsClient, error)
}

type accessLogServiceClient struct {
	cc *grpc.ClientConn
}

func NewAccessLogServiceClient(cc *grpc.ClientConn) AccessLogServiceClient {
	return &accessLogServiceClient{cc}
}

func (c *accessLogServiceClient) StreamAccessLogs(ctx context.Context, opts ...grpc.CallOption) (AccessLogService_StreamAccessLogsClient, error) {
	stream, err := c.cc.NewStream(ctx, &_AccessLogService_serviceDesc.Streams[0], "/envoy.service.accesslog.v2.AccessLogService/StreamAccessLogs", opts...)
	if err != nil {
		return nil, err
	}
	x := &accessLogServiceStreamAccessLogsClient{stream}
	return x, nil
}

type AccessLogService_StreamAccessLogsClient interface {
	Send(*StreamAccessLogsMessage) error
	CloseAndRecv() (*StreamAccessLogsResponse, error)
	grpc.ClientStream
}

type accessLogServiceStreamAccessLogsClient struct {
	grpc.ClientStream
}

func (x *accessLogServiceStreamAccessLogsClient) Send(m *StreamAccessLogsMessage) error {
	return x.ClientStream.SendMsg(m)
}

func (x *accessLogServiceStreamAccessLogsClient) CloseAndRecv() (*StreamAccessLogsResponse, error) {
	if err := x.ClientStream.CloseSend(); err != nil {
		return nil, err
	}
	m := new(StreamAccessLogsResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

// AccessLogServiceServer is the server API for AccessLogService service.
type AccessLogServiceServer interface {
	// Envoy will connect and send StreamAccessLogsMessage messages forever. It does not expect any
	// response to be sent as nothing would be done in the case of failure. The server should
	// disconnect if it expects Envoy to reconnect. In the future we may decide to add a different
	// API for "critical" access logs in which Envoy will buffer access logs for some period of time
	// until it gets an ACK so it could then retry. This API is designed for high throughput with the
	// expectation that it might be lossy.
	StreamAccessLogs(AccessLogService_StreamAccessLogsServer) error
}

// UnimplementedAccessLogServiceServer can be embedded to have forward compatible implementations.
type UnimplementedAccessLogServiceServer struct {
}

func (*UnimplementedAccessLogServiceServer) StreamAccessLogs(srv AccessLogService_StreamAccessLogsServer) error {
	return status.Errorf(codes.Unimplemented, "method StreamAccessLogs not implemented")
}

func RegisterAccessLogServiceServer(s *grpc.Server, srv AccessLogServiceServer) {
	s.RegisterService(&_AccessLogService_serviceDesc, srv)
}

func _AccessLogService_StreamAccessLogs_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(AccessLogServiceServer).StreamAccessLogs(&accessLogServiceStreamAccessLogsServer{stream})
}

type AccessLogService_StreamAccessLogsServer interface {
	SendAndClose(*StreamAccessLogsResponse) error
	Recv() (*StreamAccessLogsMessage, error)
	grpc.ServerStream
}

type accessLogServiceStreamAccessLogsServer struct {
	grpc.ServerStream
}

func (x *accessLogServiceStreamAccessLogsServer) SendAndClose(m *StreamAccessLogsResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *accessLogServiceStreamAccessLogsServer) Recv() (*StreamAccessLogsMessage, error) {
	m := new(StreamAccessLogsMessage)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

var _AccessLogService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.service.accesslog.v2.AccessLogService",
	HandlerType: (*AccessLogServiceServer)(nil),
	Methods:     []grpc.MethodDesc{},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "StreamAccessLogs",
			Handler:       _AccessLogService_StreamAccessLogs_Handler,
			ClientStreams: true,
		},
	},
	Metadata: "envoy/service/accesslog/v2/als.proto",
}
  0707010000014A000041ED000003E800000064000000045E17A24700000000000000000000000000000000000000000000002C00000000cilium-proxy-20200109/go/envoy/service/auth   0707010000014B000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000002F00000000cilium-proxy-20200109/go/envoy/service/auth/v2    0707010000014C000081A4000003E800000064000000015E17A24700004EC1000000000000000000000000000000000000004700000000cilium-proxy-20200109/go/envoy/service/auth/v2/attribute_context.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/service/auth/v2/attribute_context.proto

package envoy_service_auth_v2

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	proto "github.com/golang/protobuf/proto"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// An attribute is a piece of metadata that describes an activity on a network.
// For example, the size of an HTTP request, or the status code of an HTTP response.
//
// Each attribute has a type and a name, which is logically defined as a proto message field
// of the `AttributeContext`. The `AttributeContext` is a collection of individual attributes
// supported by Envoy authorization system.
// [#comment: The following items are left out of this proto
// Request.Auth field for jwt tokens
// Request.Api for api management
// Origin peer that originated the request
// Caching Protocol
// request_context return values to inject back into the filter chain
// peer.claims -- from X.509 extensions
// Configuration
// - field mask to send
// - which return values from request_context are copied back
// - which return values are copied into request_headers]
// [#next-free-field: 12]
type AttributeContext struct {
	// The source of a network activity, such as starting a TCP connection.
	// In a multi hop network activity, the source represents the sender of the
	// last hop.
	Source *AttributeContext_Peer `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"`
	// The destination of a network activity, such as accepting a TCP connection.
	// In a multi hop network activity, the destination represents the receiver of
	// the last hop.
	Destination *AttributeContext_Peer `protobuf:"bytes,2,opt,name=destination,proto3" json:"destination,omitempty"`
	// Represents a network request, such as an HTTP request.
	Request *AttributeContext_Request `protobuf:"bytes,4,opt,name=request,proto3" json:"request,omitempty"`
	// This is analogous to http_request.headers, however these contents will not be sent to the
	// upstream server. Context_extensions provide an extension mechanism for sending additional
	// information to the auth server without modifying the proto definition. It maps to the
	// internal opaque context in the filter chain.
	ContextExtensions map[string]string `protobuf:"bytes,10,rep,name=context_extensions,json=contextExtensions,proto3" json:"context_extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Dynamic metadata associated with the request.
	MetadataContext      *core.Metadata `protobuf:"bytes,11,opt,name=metadata_context,json=metadataContext,proto3" json:"metadata_context,omitempty"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

func (m *AttributeContext) Reset()         { *m = AttributeContext{} }
func (m *AttributeContext) String() string { return proto.CompactTextString(m) }
func (*AttributeContext) ProtoMessage()    {}
func (*AttributeContext) Descriptor() ([]byte, []int) {
	return fileDescriptor_a6030c9468e3591b, []int{0}
}

func (m *AttributeContext) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AttributeContext.Unmarshal(m, b)
}
func (m *AttributeContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AttributeContext.Marshal(b, m, deterministic)
}
func (m *AttributeContext) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AttributeContext.Merge(m, src)
}
func (m *AttributeContext) XXX_Size() int {
	return xxx_messageInfo_AttributeContext.Size(m)
}
func (m *AttributeContext) XXX_DiscardUnknown() {
	xxx_messageInfo_AttributeContext.DiscardUnknown(m)
}

var xxx_messageInfo_AttributeContext proto.InternalMessageInfo

func (m *AttributeContext) GetSource() *AttributeContext_Peer {
	if m != nil {
		return m.Source
	}
	return nil
}

func (m *AttributeContext) GetDestination() *AttributeContext_Peer {
	if m != nil {
		return m.Destination
	}
	return nil
}

func (m *AttributeContext) GetRequest() *AttributeContext_Request {
	if m != nil {
		return m.Request
	}
	return nil
}

func (m *AttributeContext) GetContextExtensions() map[string]string {
	if m != nil {
		return m.ContextExtensions
	}
	return nil
}

func (m *AttributeContext) GetMetadataContext() *core.Metadata {
	if m != nil {
		return m.MetadataContext
	}
	return nil
}

// This message defines attributes for a node that handles a network request.
// The node can be either a service or an application that sends, forwards,
// or receives the request. Service peers should fill in the `service`,
// `principal`, and `labels` as appropriate.
type AttributeContext_Peer struct {
	// The address of the peer, this is typically the IP address.
	// It can also be UDS path, or others.
	Address *core.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
	// The canonical service name of the peer.
	// It should be set to :ref:`the HTTP x-envoy-downstream-service-cluster
	// <config_http_conn_man_headers_downstream-service-cluster>`
	// If a more trusted source of the service name is available through mTLS/secure naming, it
	// should be used.
	Service string `protobuf:"bytes,2,opt,name=service,proto3" json:"service,omitempty"`
	// The labels associated with the peer.
	// These could be pod labels for Kubernetes or tags for VMs.
	// The source of the labels could be an X.509 certificate or other configuration.
	Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// The authenticated identity of this peer.
	// For example, the identity associated with the workload such as a service account.
	// If an X.509 certificate is used to assert the identity this field should be sourced from
	// `URI Subject Alternative Names`, `DNS Subject Alternate Names` or `Subject` in that order.
	// The primary identity should be the principal. The principal format is issuer specific.
	//
	// Example:
	// *    SPIFFE format is `spiffe://trust-domain/path`
	// *    Google account format is `https://accounts.google.com/{userid}`
	Principal            string   `protobuf:"bytes,4,opt,name=principal,proto3" json:"principal,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *AttributeContext_Peer) Reset()         { *m = AttributeContext_Peer{} }
func (m *AttributeContext_Peer) String() string { return proto.CompactTextString(m) }
func (*AttributeContext_Peer) ProtoMessage()    {}
func (*AttributeContext_Peer) Descriptor() ([]byte, []int) {
	return fileDescriptor_a6030c9468e3591b, []int{0, 0}
}

func (m *AttributeContext_Peer) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AttributeContext_Peer.Unmarshal(m, b)
}
func (m *AttributeContext_Peer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AttributeContext_Peer.Marshal(b, m, deterministic)
}
func (m *AttributeContext_Peer) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AttributeContext_Peer.Merge(m, src)
}
func (m *AttributeContext_Peer) XXX_Size() int {
	return xxx_messageInfo_AttributeContext_Peer.Size(m)
}
func (m *AttributeContext_Peer) XXX_DiscardUnknown() {
	xxx_messageInfo_AttributeContext_Peer.DiscardUnknown(m)
}

var xxx_messageInfo_AttributeContext_Peer proto.InternalMessageInfo

func (m *AttributeContext_Peer) GetAddress() *core.Address {
	if m != nil {
		return m.Address
	}
	return nil
}

func (m *AttributeContext_Peer) GetService() string {
	if m != nil {
		return m.Service
	}
	return ""
}

func (m *AttributeContext_Peer) GetLabels() map[string]string {
	if m != nil {
		return m.Labels
	}
	return nil
}

func (m *AttributeContext_Peer) GetPrincipal() string {
	if m != nil {
		return m.Principal
	}
	return ""
}

// Represents a network request, such as an HTTP request.
type AttributeContext_Request struct {
	// The timestamp when the proxy receives the first byte of the request.
	Time *timestamp.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"`
	// Represents an HTTP request or an HTTP-like request.
	Http                 *AttributeContext_HttpRequest `protobuf:"bytes,2,opt,name=http,proto3" json:"http,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
	XXX_unrecognized     []byte                        `json:"-"`
	XXX_sizecache        int32                         `json:"-"`
}

func (m *AttributeContext_Request) Reset()         { *m = AttributeContext_Request{} }
func (m *AttributeContext_Request) String() string { return proto.CompactTextString(m) }
func (*AttributeContext_Request) ProtoMessage()    {}
func (*AttributeContext_Request) Descriptor() ([]byte, []int) {
	return fileDescriptor_a6030c9468e3591b, []int{0, 1}
}

func (m *AttributeContext_Request) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AttributeContext_Request.Unmarshal(m, b)
}
func (m *AttributeContext_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AttributeContext_Request.Marshal(b, m, deterministic)
}
func (m *AttributeContext_Request) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AttributeContext_Request.Merge(m, src)
}
func (m *AttributeContext_Request) XXX_Size() int {
	return xxx_messageInfo_AttributeContext_Request.Size(m)
}
func (m *AttributeContext_Request) XXX_DiscardUnknown() {
	xxx_messageInfo_AttributeContext_Request.DiscardUnknown(m)
}

var xxx_messageInfo_AttributeContext_Request proto.InternalMessageInfo

func (m *AttributeContext_Request) GetTime() *timestamp.Timestamp {
	if m != nil {
		return m.Time
	}
	return nil
}

func (m *AttributeContext_Request) GetHttp() *AttributeContext_HttpRequest {
	if m != nil {
		return m.Http
	}
	return nil
}

// This message defines attributes for an HTTP request.
// HTTP/1.x, HTTP/2, gRPC are all considered as HTTP requests.
// [#next-free-field: 12]
type AttributeContext_HttpRequest struct {
	// The unique ID for a request, which can be propagated to downstream
	// systems. The ID should have low probability of collision
	// within a single day for a specific service.
	// For HTTP requests, it should be X-Request-ID or equivalent.
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// The HTTP request method, such as `GET`, `POST`.
	Method string `protobuf:"bytes,2,opt,name=method,proto3" json:"method,omitempty"`
	// The HTTP request headers. If multiple headers share the same key, they
	// must be merged according to the HTTP spec. All header keys must be
	// lower-cased, because HTTP header keys are case-insensitive.
	Headers map[string]string `protobuf:"bytes,3,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// The request target, as it appears in the first line of the HTTP request. This includes
	// the URL path and query-string. No decoding is performed.
	Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"`
	// The HTTP request `Host` or 'Authority` header value.
	Host string `protobuf:"bytes,5,opt,name=host,proto3" json:"host,omitempty"`
	// The HTTP URL scheme, such as `http` and `https`.
	Scheme string `protobuf:"bytes,6,opt,name=scheme,proto3" json:"scheme,omitempty"`
	// This field is always empty, and exists for compatibility reasons. The HTTP URL query is
	// included in `path` field.
	Query string `protobuf:"bytes,7,opt,name=query,proto3" json:"query,omitempty"`
	// This field is always empty, and exists for compatibility reasons. The URL fragment is
	// not submitted as part of HTTP requests; it is unknowable.
	Fragment string `protobuf:"bytes,8,opt,name=fragment,proto3" json:"fragment,omitempty"`
	// The HTTP request size in bytes. If unknown, it must be -1.
	Size int64 `protobuf:"varint,9,opt,name=size,proto3" json:"size,omitempty"`
	// The network protocol used with the request, such as "HTTP/1.0", "HTTP/1.1", or "HTTP/2".
	//
	// See :repo:`headers.h:ProtocolStrings <source/common/http/headers.h>` for a list of all
	// possible values.
	Protocol string `protobuf:"bytes,10,opt,name=protocol,proto3" json:"protocol,omitempty"`
	// The HTTP request body.
	Body                 string   `protobuf:"bytes,11,opt,name=body,proto3" json:"body,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *AttributeContext_HttpRequest) Reset()         { *m = AttributeContext_HttpRequest{} }
func (m *AttributeContext_HttpRequest) String() string { return proto.CompactTextString(m) }
func (*AttributeContext_HttpRequest) ProtoMessage()    {}
func (*AttributeContext_HttpRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_a6030c9468e3591b, []int{0, 2}
}

func (m *AttributeContext_HttpRequest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AttributeContext_HttpRequest.Unmarshal(m, b)
}
func (m *AttributeContext_HttpRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AttributeContext_HttpRequest.Marshal(b, m, deterministic)
}
func (m *AttributeContext_HttpRequest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AttributeContext_HttpRequest.Merge(m, src)
}
func (m *AttributeContext_HttpRequest) XXX_Size() int {
	return xxx_messageInfo_AttributeContext_HttpRequest.Size(m)
}
func (m *AttributeContext_HttpRequest) XXX_DiscardUnknown() {
	xxx_messageInfo_AttributeContext_HttpRequest.DiscardUnknown(m)
}

var xxx_messageInfo_AttributeContext_HttpRequest proto.InternalMessageInfo

func (m *AttributeContext_HttpRequest) GetId() string {
	if m != nil {
		return m.Id
	}
	return ""
}

func (m *AttributeContext_HttpRequest) GetMethod() string {
	if m != nil {
		return m.Method
	}
	return ""
}

func (m *AttributeContext_HttpRequest) GetHeaders() map[string]string {
	if m != nil {
		return m.Headers
	}
	return nil
}

func (m *AttributeContext_HttpRequest) GetPath() string {
	if m != nil {
		return m.Path
	}
	return ""
}

func (m *AttributeContext_HttpRequest) GetHost() string {
	if m != nil {
		return m.Host
	}
	return ""
}

func (m *AttributeContext_HttpRequest) GetScheme() string {
	if m != nil {
		return m.Scheme
	}
	return ""
}

func (m *AttributeContext_HttpRequest) GetQuery() string {
	if m != nil {
		return m.Query
	}
	return ""
}

func (m *AttributeContext_HttpRequest) GetFragment() string {
	if m != nil {
		return m.Fragment
	}
	return ""
}

func (m *AttributeContext_HttpRequest) GetSize() int64 {
	if m != nil {
		return m.Size
	}
	return 0
}

func (m *AttributeContext_HttpRequest) GetProtocol() string {
	if m != nil {
		return m.Protocol
	}
	return ""
}

func (m *AttributeContext_HttpRequest) GetBody() string {
	if m != nil {
		return m.Body
	}
	return ""
}

func init() {
	proto.RegisterType((*AttributeContext)(nil), "envoy.service.auth.v2.AttributeContext")
	proto.RegisterMapType((map[string]string)(nil), "envoy.service.auth.v2.AttributeContext.ContextExtensionsEntry")
	proto.RegisterType((*AttributeContext_Peer)(nil), "envoy.service.auth.v2.AttributeContext.Peer")
	proto.RegisterMapType((map[string]string)(nil), "envoy.service.auth.v2.AttributeContext.Peer.LabelsEntry")
	proto.RegisterType((*AttributeContext_Request)(nil), "envoy.service.auth.v2.AttributeContext.Request")
	proto.RegisterType((*AttributeContext_HttpRequest)(nil), "envoy.service.auth.v2.AttributeContext.HttpRequest")
	proto.RegisterMapType((map[string]string)(nil), "envoy.service.auth.v2.AttributeContext.HttpRequest.HeadersEntry")
}

func init() {
	proto.RegisterFile("envoy/service/auth/v2/attribute_context.proto", fileDescriptor_a6030c9468e3591b)
}

var fileDescriptor_a6030c9468e3591b = []byte{
	// 625 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0xcf, 0x4f, 0xdb, 0x4a,
	0x10, 0x56, 0x7e, 0x90, 0xe0, 0xc9, 0xd3, 0x7b, 0xbc, 0xd5, 0x03, 0x59, 0x7e, 0x48, 0xa0, 0xf6,
	0xc2, 0xa1, 0x5d, 0x4b, 0xa1, 0x07, 0xca, 0x01, 0x15, 0x0a, 0x2d, 0x95, 0xda, 0x2a, 0xb2, 0x7a,
	0xea, 0x05, 0x6d, 0xec, 0x01, 0xaf, 0x1a, 0x7b, 0xcd, 0xee, 0x3a, 0x22, 0xbd, 0xb5, 0xfd, 0xc3,
	0x5b, 0xed, 0x2f, 0x1a, 0xd1, 0x1c, 0x80, 0x53, 0x66, 0xc6, 0xdf, 0x7c, 0x3b, 0xf3, 0x7d, 0x13,
	0x78, 0x8e, 0xf5, 0x5c, 0x2c, 0x52, 0x85, 0x72, 0xce, 0x73, 0x4c, 0x59, 0xab, 0xcb, 0x74, 0x3e,
	0x4e, 0x99, 0xd6, 0x92, 0x4f, 0x5b, 0x8d, 0x17, 0xb9, 0xa8, 0x35, 0xde, 0x68, 0xda, 0x48, 0xa1,
	0x05, 0xd9, 0xb4, 0x70, 0xea, 0xe1, 0xd4, 0xc0, 0xe9, 0x7c, 0x9c, 0xec, 0x38, 0x16, 0xd6, 0x70,
	0xd3, 0x9c, 0x0b, 0x89, 0x29, 0x2b, 0x0a, 0x89, 0x4a, 0xb9, 0xbe, 0x64, 0xfb, 0x4f, 0xc0, 0x94,
	0x29, 0xf4, 0x5f, 0x77, 0xae, 0x84, 0xb8, 0x9a, 0x61, 0x6a, 0xb3, 0x69, 0x7b, 0x99, 0x6a, 0x5e,
	0xa1, 0xd2, 0xac, 0x6a, 0x1c, 0xe0, 0xc9, 0xcf, 0x08, 0x36, 0x8e, 0xc3, 0x48, 0xaf, 0xdd, 0x44,
	0xe4, 0x14, 0x06, 0x4a, 0xb4, 0x32, 0xc7, 0xb8, 0xb3, 0xdb, 0xd9, 0x1b, 0x8d, 0x9f, 0xd1, 0x95,
	0xc3, 0xd1, 0xbb, 0x8d, 0x74, 0x82, 0x28, 0x33, 0xdf, 0x4b, 0x3e, 0xc2, 0xa8, 0x40, 0xa5, 0x79,
	0xcd, 0x34, 0x17, 0x75, 0xdc, 0x7d, 0x04, 0xd5, 0x32, 0x01, 0x79, 0x07, 0x43, 0x89, 0xd7, 0x2d,
	0x2a, 0x1d, 0xf7, 0x2d, 0x57, 0x7a, 0x5f, 0xae, 0xcc, 0xb5, 0x65, 0xa1, 0x9f, 0x54, 0x40, 0xbc,
	0xfa, 0x17, 0x78, 0xa3, 0xb1, 0x56, 0x5c, 0xd4, 0x2a, 0x86, 0xdd, 0xde, 0xde, 0x68, 0x7c, 0x74,
	0x5f, 0x56, 0xff, 0x7b, 0x76, 0x4b, 0x70, 0x56, 0x6b, 0xb9, 0xc8, 0xfe, 0xcd, 0xef, 0xd6, 0xc9,
	0x1b, 0xd8, 0xa8, 0x50, 0xb3, 0x82, 0x69, 0x16, 0x5c, 0x8f, 0x47, 0x76, 0x85, 0xff, 0xfd, 0x63,
	0xac, 0xe1, 0xe6, 0x0d, 0x63, 0x1f, 0xfd, 0xe0, 0xa1, 0xd9, 0x3f, 0xa1, 0xc9, 0xbf, 0x94, 0x7c,
	0xeb, 0x42, 0xdf, 0xe8, 0x42, 0x5e, 0xc0, 0xd0, 0x5f, 0x81, 0x77, 0x28, 0x59, 0xc1, 0x73, 0xec,
	0x10, 0x59, 0x80, 0x92, 0x18, 0x86, 0x7e, 0x29, 0x6b, 0x46, 0x94, 0x85, 0x94, 0x4c, 0x60, 0x30,
	0x63, 0x53, 0x9c, 0xa9, 0xb8, 0x67, 0x35, 0x38, 0x78, 0x88, 0x4b, 0xf4, 0xbd, 0x6d, 0x75, 0xdb,
	0x7b, 0x1e, 0xb2, 0x0d, 0x51, 0x23, 0x79, 0x9d, 0xf3, 0x86, 0xcd, 0xac, 0x5d, 0x51, 0xf6, 0xbb,
	0x90, 0xbc, 0x84, 0xd1, 0x52, 0x13, 0xd9, 0x80, 0xde, 0x17, 0x5c, 0xd8, 0x55, 0xa2, 0xcc, 0x84,
	0xe4, 0x3f, 0x58, 0x9b, 0xb3, 0x59, 0x1b, 0x06, 0x75, 0xc9, 0x61, 0xf7, 0xa0, 0x93, 0x7c, 0xef,
	0xc0, 0xd0, 0xfb, 0x49, 0x28, 0xf4, 0xcd, 0x3d, 0xdf, 0x6a, 0xe0, 0x8e, 0x9d, 0x86, 0x63, 0xa7,
	0x9f, 0xc2, 0xb1, 0x67, 0x16, 0x47, 0xde, 0x42, 0xbf, 0xd4, 0xba, 0xf1, 0xa7, 0xb8, 0x7f, 0xdf,
	0x25, 0xcf, 0xb5, 0x6e, 0xc2, 0x09, 0x59, 0x82, 0xe4, 0x47, 0x0f, 0x46, 0x4b, 0x55, 0xf2, 0x37,
	0x74, 0x79, 0xe1, 0xe7, 0xef, 0xf2, 0x82, 0x6c, 0xc1, 0xa0, 0x42, 0x5d, 0x8a, 0xc2, 0xcf, 0xef,
	0x33, 0xf2, 0x19, 0x86, 0x25, 0xb2, 0x02, 0x65, 0x10, 0xfa, 0xd5, 0x23, 0x66, 0xa0, 0xe7, 0x8e,
	0xc2, 0x09, 0x1e, 0x08, 0x09, 0x81, 0x7e, 0xc3, 0x74, 0xe9, 0xc5, 0xb6, 0xb1, 0xa9, 0x95, 0x42,
	0xe9, 0x78, 0xcd, 0xd5, 0x4c, 0x6c, 0x66, 0x53, 0x79, 0x89, 0x15, 0xc6, 0x03, 0x37, 0x9b, 0xcb,
	0x8c, 0xe4, 0xd7, 0x2d, 0xca, 0x45, 0x3c, 0x74, 0x92, 0xdb, 0x84, 0x24, 0xb0, 0x7e, 0x29, 0xd9,
	0x55, 0x85, 0xb5, 0x8e, 0xd7, 0xed, 0x87, 0xdb, 0xdc, 0xb0, 0x2b, 0xfe, 0x15, 0xe3, 0x68, 0xb7,
	0xb3, 0xd7, 0xcb, 0x6c, 0x6c, 0xf0, 0x56, 0xfe, 0x5c, 0xcc, 0x62, 0x70, 0xf8, 0x90, 0x1b, 0xfc,
	0x54, 0x14, 0x0b, 0x7b, 0xfa, 0x51, 0x66, 0xe3, 0xe4, 0x10, 0xfe, 0x5a, 0x5e, 0xe7, 0x41, 0xa7,
	0x70, 0x0a, 0x5b, 0xab, 0xff, 0x83, 0x0f, 0x61, 0x39, 0x39, 0x82, 0xa7, 0x5c, 0x38, 0x1b, 0x1a,
	0x29, 0x6e, 0x16, 0xab, 0x1d, 0x39, 0xd9, 0xbc, 0x6b, 0xc9, 0xc4, 0xac, 0x35, 0xe9, 0x4c, 0x07,
	0x76, 0xbf, 0xfd, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xb6, 0x0a, 0x10, 0x8d, 0xf0, 0x05, 0x00,
	0x00,
}
   0707010000014D000081A4000003E800000064000000015E17A24700003E9A000000000000000000000000000000000000004300000000cilium-proxy-20200109/go/envoy/service/auth/v2/external_auth.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/service/auth/v2/external_auth.proto

package envoy_service_auth_v2

import (
	context "context"
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_type "github.com/cilium/proxy/go/envoy/type"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	status "google.golang.org/genproto/googleapis/rpc/status"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status1 "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type CheckRequest struct {
	// The request attributes.
	Attributes           *AttributeContext `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *CheckRequest) Reset()         { *m = CheckRequest{} }
func (m *CheckRequest) String() string { return proto.CompactTextString(m) }
func (*CheckRequest) ProtoMessage()    {}
func (*CheckRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_5257cfee93a30acb, []int{0}
}

func (m *CheckRequest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_CheckRequest.Unmarshal(m, b)
}
func (m *CheckRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_CheckRequest.Marshal(b, m, deterministic)
}
func (m *CheckRequest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CheckRequest.Merge(m, src)
}
func (m *CheckRequest) XXX_Size() int {
	return xxx_messageInfo_CheckRequest.Size(m)
}
func (m *CheckRequest) XXX_DiscardUnknown() {
	xxx_messageInfo_CheckRequest.DiscardUnknown(m)
}

var xxx_messageInfo_CheckRequest proto.InternalMessageInfo

func (m *CheckRequest) GetAttributes() *AttributeContext {
	if m != nil {
		return m.Attributes
	}
	return nil
}

// HTTP attributes for a denied response.
type DeniedHttpResponse struct {
	// This field allows the authorization service to send a HTTP response status
	// code to the downstream client other than 403 (Forbidden).
	Status *_type.HttpStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
	// This field allows the authorization service to send HTTP response headers
	// to the downstream client.
	Headers []*core.HeaderValueOption `protobuf:"bytes,2,rep,name=headers,proto3" json:"headers,omitempty"`
	// This field allows the authorization service to send a response body data
	// to the downstream client.
	Body                 string   `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *DeniedHttpResponse) Reset()         { *m = DeniedHttpResponse{} }
func (m *DeniedHttpResponse) String() string { return proto.CompactTextString(m) }
func (*DeniedHttpResponse) ProtoMessage()    {}
func (*DeniedHttpResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_5257cfee93a30acb, []int{1}
}

func (m *DeniedHttpResponse) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DeniedHttpResponse.Unmarshal(m, b)
}
func (m *DeniedHttpResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DeniedHttpResponse.Marshal(b, m, deterministic)
}
func (m *DeniedHttpResponse) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DeniedHttpResponse.Merge(m, src)
}
func (m *DeniedHttpResponse) XXX_Size() int {
	return xxx_messageInfo_DeniedHttpResponse.Size(m)
}
func (m *DeniedHttpResponse) XXX_DiscardUnknown() {
	xxx_messageInfo_DeniedHttpResponse.DiscardUnknown(m)
}

var xxx_messageInfo_DeniedHttpResponse proto.InternalMessageInfo

func (m *DeniedHttpResponse) GetStatus() *_type.HttpStatus {
	if m != nil {
		return m.Status
	}
	return nil
}

func (m *DeniedHttpResponse) GetHeaders() []*core.HeaderValueOption {
	if m != nil {
		return m.Headers
	}
	return nil
}

func (m *DeniedHttpResponse) GetBody() string {
	if m != nil {
		return m.Body
	}
	return ""
}

// HTTP attributes for an ok response.
type OkHttpResponse struct {
	// HTTP entity headers in addition to the original request headers. This allows the authorization
	// service to append, to add or to override headers from the original request before
	// dispatching it to the upstream. By setting `append` field to `true` in the `HeaderValueOption`,
	// the filter will append the correspondent header value to the matched request header. Note that
	// by Leaving `append` as false, the filter will either add a new header, or override an existing
	// one if there is a match.
	Headers              []*core.HeaderValueOption `protobuf:"bytes,2,rep,name=headers,proto3" json:"headers,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
	XXX_unrecognized     []byte                    `json:"-"`
	XXX_sizecache        int32                     `json:"-"`
}

func (m *OkHttpResponse) Reset()         { *m = OkHttpResponse{} }
func (m *OkHttpResponse) String() string { return proto.CompactTextString(m) }
func (*OkHttpResponse) ProtoMessage()    {}
func (*OkHttpResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_5257cfee93a30acb, []int{2}
}

func (m *OkHttpResponse) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OkHttpResponse.Unmarshal(m, b)
}
func (m *OkHttpResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OkHttpResponse.Marshal(b, m, deterministic)
}
func (m *OkHttpResponse) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OkHttpResponse.Merge(m, src)
}
func (m *OkHttpResponse) XXX_Size() int {
	return xxx_messageInfo_OkHttpResponse.Size(m)
}
func (m *OkHttpResponse) XXX_DiscardUnknown() {
	xxx_messageInfo_OkHttpResponse.DiscardUnknown(m)
}

var xxx_messageInfo_OkHttpResponse proto.InternalMessageInfo

func (m *OkHttpResponse) GetHeaders() []*core.HeaderValueOption {
	if m != nil {
		return m.Headers
	}
	return nil
}

// Intended for gRPC and Network Authorization servers `only`.
type CheckResponse struct {
	// Status `OK` allows the request. Any other status indicates the request should be denied.
	Status *status.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
	// An message that contains HTTP response attributes. This message is
	// used when the authorization service needs to send custom responses to the
	// downstream client or, to modify/add request headers being dispatched to the upstream.
	//
	// Types that are valid to be assigned to HttpResponse:
	//	*CheckResponse_DeniedResponse
	//	*CheckResponse_OkResponse
	HttpResponse         isCheckResponse_HttpResponse `protobuf_oneof:"http_response"`
	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
	XXX_unrecognized     []byte                       `json:"-"`
	XXX_sizecache        int32                        `json:"-"`
}

func (m *CheckResponse) Reset()         { *m = CheckResponse{} }
func (m *CheckResponse) String() string { return proto.CompactTextString(m) }
func (*CheckResponse) ProtoMessage()    {}
func (*CheckResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_5257cfee93a30acb, []int{3}
}

func (m *CheckResponse) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_CheckResponse.Unmarshal(m, b)
}
func (m *CheckResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_CheckResponse.Marshal(b, m, deterministic)
}
func (m *CheckResponse) XXX_Merge(src proto.Message) {
	xxx_messageInfo_CheckResponse.Merge(m, src)
}
func (m *CheckResponse) XXX_Size() int {
	return xxx_messageInfo_CheckResponse.Size(m)
}
func (m *CheckResponse) XXX_DiscardUnknown() {
	xxx_messageInfo_CheckResponse.DiscardUnknown(m)
}

var xxx_messageInfo_CheckResponse proto.InternalMessageInfo

func (m *CheckResponse) GetStatus() *status.Status {
	if m != nil {
		return m.Status
	}
	return nil
}

type isCheckResponse_HttpResponse interface {
	isCheckResponse_HttpResponse()
}

type CheckResponse_DeniedResponse struct {
	DeniedResponse *DeniedHttpResponse `protobuf:"bytes,2,opt,name=denied_response,json=deniedResponse,proto3,oneof"`
}

type CheckResponse_OkResponse struct {
	OkResponse *OkHttpResponse `protobuf:"bytes,3,opt,name=ok_response,json=okResponse,proto3,oneof"`
}

func (*CheckResponse_DeniedResponse) isCheckResponse_HttpResponse() {}

func (*CheckResponse_OkResponse) isCheckResponse_HttpResponse() {}

func (m *CheckResponse) GetHttpResponse() isCheckResponse_HttpResponse {
	if m != nil {
		return m.HttpResponse
	}
	return nil
}

func (m *CheckResponse) GetDeniedResponse() *DeniedHttpResponse {
	if x, ok := m.GetHttpResponse().(*CheckResponse_DeniedResponse); ok {
		return x.DeniedResponse
	}
	return nil
}

func (m *CheckResponse) GetOkResponse() *OkHttpResponse {
	if x, ok := m.GetHttpResponse().(*CheckResponse_OkResponse); ok {
		return x.OkResponse
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*CheckResponse) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*CheckResponse_DeniedResponse)(nil),
		(*CheckResponse_OkResponse)(nil),
	}
}

func init() {
	proto.RegisterType((*CheckRequest)(nil), "envoy.service.auth.v2.CheckRequest")
	proto.RegisterType((*DeniedHttpResponse)(nil), "envoy.service.auth.v2.DeniedHttpResponse")
	proto.RegisterType((*OkHttpResponse)(nil), "envoy.service.auth.v2.OkHttpResponse")
	proto.RegisterType((*CheckResponse)(nil), "envoy.service.auth.v2.CheckResponse")
}

func init() {
	proto.RegisterFile("envoy/service/auth/v2/external_auth.proto", fileDescriptor_5257cfee93a30acb)
}

var fileDescriptor_5257cfee93a30acb = []byte{
	// 472 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x93, 0xcf, 0x6e, 0xd3, 0x40,
	0x10, 0xc6, 0xb3, 0x09, 0x2d, 0xb0, 0x21, 0x2d, 0xac, 0x04, 0x44, 0x11, 0x87, 0x28, 0x2d, 0x22,
	0x45, 0x62, 0x2d, 0x99, 0x0b, 0x17, 0x90, 0xea, 0x82, 0xf0, 0xad, 0x91, 0xa9, 0xe0, 0x18, 0x6d,
	0xec, 0x51, 0x6d, 0x25, 0xf2, 0x2e, 0xeb, 0xb1, 0x95, 0xf0, 0x04, 0x88, 0xc7, 0xe0, 0xf9, 0x78,
	0x02, 0x4e, 0x68, 0xff, 0x24, 0x34, 0x90, 0x70, 0xe1, 0xb6, 0xf2, 0x7c, 0xdf, 0x6f, 0xe7, 0x9b,
	0x1d, 0xd3, 0x33, 0x28, 0x1b, 0xb9, 0x0a, 0x2a, 0xd0, 0x4d, 0x91, 0x42, 0x20, 0x6a, 0xcc, 0x83,
	0x26, 0x0c, 0x60, 0x89, 0xa0, 0x4b, 0xb1, 0x98, 0x9a, 0x0f, 0x5c, 0x69, 0x89, 0x92, 0x3d, 0xb4,
	0x52, 0xee, 0xa5, 0xdc, 0x56, 0x9a, 0x70, 0xf0, 0xc4, 0x11, 0x84, 0x2a, 0x8c, 0x31, 0x95, 0x1a,
	0x82, 0x99, 0xa8, 0xc0, 0x99, 0x06, 0x2f, 0x76, 0xf3, 0x05, 0xa2, 0x2e, 0x66, 0x35, 0xc2, 0x34,
	0x95, 0x25, 0xc2, 0x12, 0xbd, 0xdc, 0xc3, 0x70, 0xa5, 0x20, 0xc8, 0x11, 0xd5, 0xb4, 0x42, 0x81,
	0x75, 0xe5, 0xab, 0x8f, 0xaf, 0xa5, 0xbc, 0x5e, 0x40, 0xa0, 0x55, 0x1a, 0x6c, 0x17, 0x1a, 0xb1,
	0x28, 0x32, 0x81, 0x10, 0xac, 0x0f, 0xae, 0x30, 0xfa, 0x44, 0xef, 0x5d, 0xe4, 0x90, 0xce, 0x13,
	0xf8, 0x5c, 0x43, 0x85, 0xec, 0x3d, 0xa5, 0x9b, 0xab, 0xab, 0x3e, 0x19, 0x92, 0x71, 0x37, 0x7c,
	0xc6, 0x77, 0x06, 0xe3, 0xe7, 0x6b, 0xe1, 0x85, 0x6b, 0x31, 0xb9, 0x61, 0x1d, 0x7d, 0x27, 0x94,
	0xbd, 0x85, 0xb2, 0x80, 0x2c, 0x46, 0x54, 0x09, 0x54, 0x4a, 0x96, 0x15, 0xb0, 0x57, 0xf4, 0xd0,
	0x35, 0xe6, 0xd9, 0x8f, 0x3c, 0xdb, 0x04, 0xe2, 0x46, 0xf9, 0xc1, 0x56, 0xa3, 0x3b, 0x3f, 0xa3,
	0x83, 0x6f, 0xa4, 0x7d, 0x9f, 0x24, 0x5e, 0xcf, 0xde, 0xd0, 0xdb, 0x39, 0x88, 0x0c, 0x74, 0xd5,
	0x6f, 0x0f, 0x3b, 0xe3, 0x6e, 0x78, 0xea, 0xad, 0x42, 0x15, 0xa6, 0x1b, 0x33, 0x58, 0x1e, 0x5b,
	0xc5, 0x47, 0xb1, 0xa8, 0xe1, 0x52, 0x61, 0x21, 0xcb, 0x64, 0x6d, 0x62, 0x8c, 0xde, 0x9a, 0xc9,
	0x6c, 0xd5, 0xef, 0x0c, 0xc9, 0xf8, 0x6e, 0x62, 0xcf, 0xa3, 0x09, 0x3d, 0xba, 0x9c, 0x6f, 0xf5,
	0xf7, 0x9f, 0xb7, 0x8c, 0x7e, 0x10, 0xda, 0xf3, 0x03, 0xf5, 0xc4, 0xe7, 0x7f, 0x24, 0x66, 0xdc,
	0x3d, 0x12, 0xd7, 0x2a, 0xe5, 0x2e, 0xed, 0x26, 0xe3, 0x15, 0x3d, 0xce, 0xec, 0xcc, 0xa6, 0xda,
	0xdb, 0xfb, 0x6d, 0x6b, 0x3a, 0xdb, 0xf3, 0x04, 0x7f, 0x4f, 0x38, 0x6e, 0x25, 0x47, 0x8e, 0xb1,
	0xe9, 0x20, 0xa6, 0x5d, 0x39, 0xff, 0x4d, 0xec, 0x58, 0xe2, 0xd3, 0x3d, 0xc4, 0xed, 0x79, 0xc4,
	0xad, 0x84, 0xca, 0x4d, 0x96, 0xe8, 0x98, 0xf6, 0xec, 0xd2, 0xad, 0x59, 0x21, 0xd0, 0xde, 0x79,
	0x8d, 0xb9, 0xd4, 0xc5, 0x17, 0x61, 0x06, 0xc1, 0xae, 0xe8, 0x81, 0x8d, 0xcf, 0x4e, 0xf6, 0xf0,
	0x6f, 0x6e, 0xdb, 0xe0, 0xf4, 0xdf, 0x22, 0x77, 0xc9, 0xa8, 0x15, 0xbd, 0xa6, 0x27, 0x85, 0x74,
	0x5a, 0xa5, 0xe5, 0x72, 0xb5, 0xdb, 0x16, 0x3d, 0x78, 0xe7, 0xff, 0x4a, 0xd3, 0xd3, 0xc4, 0xec,
	0xf7, 0x84, 0x7c, 0x25, 0x64, 0x76, 0x68, 0x77, 0xfd, 0xe5, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff,
	0xda, 0x8d, 0x0c, 0x43, 0xcc, 0x03, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// AuthorizationClient is the client API for Authorization service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type AuthorizationClient interface {
	// Performs authorization check based on the attributes associated with the
	// incoming request, and returns status `OK` or not `OK`.
	Check(ctx context.Context, in *CheckRequest, opts ...grpc.CallOption) (*CheckResponse, error)
}

type authorizationClient struct {
	cc *grpc.ClientConn
}

func NewAuthorizationClient(cc *grpc.ClientConn) AuthorizationClient {
	return &authorizationClient{cc}
}

func (c *authorizationClient) Check(ctx context.Context, in *CheckRequest, opts ...grpc.CallOption) (*CheckResponse, error) {
	out := new(CheckResponse)
	err := c.cc.Invoke(ctx, "/envoy.service.auth.v2.Authorization/Check", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// AuthorizationServer is the server API for Authorization service.
type AuthorizationServer interface {
	// Performs authorization check based on the attributes associated with the
	// incoming request, and returns status `OK` or not `OK`.
	Check(context.Context, *CheckRequest) (*CheckResponse, error)
}

// UnimplementedAuthorizationServer can be embedded to have forward compatible implementations.
type UnimplementedAuthorizationServer struct {
}

func (*UnimplementedAuthorizationServer) Check(ctx context.Context, req *CheckRequest) (*CheckResponse, error) {
	return nil, status1.Errorf(codes.Unimplemented, "method Check not implemented")
}

func RegisterAuthorizationServer(s *grpc.Server, srv AuthorizationServer) {
	s.RegisterService(&_Authorization_serviceDesc, srv)
}

func _Authorization_Check_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(CheckRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(AuthorizationServer).Check(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/envoy.service.auth.v2.Authorization/Check",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(AuthorizationServer).Check(ctx, req.(*CheckRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _Authorization_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.service.auth.v2.Authorization",
	HandlerType: (*AuthorizationServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "Check",
			Handler:    _Authorization_Check_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "envoy/service/auth/v2/external_auth.proto",
}
  0707010000014E000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003400000000cilium-proxy-20200109/go/envoy/service/auth/v2alpha   0707010000014F000081A4000003E800000064000000015E17A24700001454000000000000000000000000000000000000004800000000cilium-proxy-20200109/go/envoy/service/auth/v2alpha/external_auth.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/service/auth/v2alpha/external_auth.proto

package envoy_service_auth_v2alpha

import (
	context "context"
	fmt "fmt"
	v2 "github.com/cilium/proxy/go/envoy/service/auth/v2"
	proto "github.com/golang/protobuf/proto"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

func init() {
	proto.RegisterFile("envoy/service/auth/v2alpha/external_auth.proto", fileDescriptor_878c0ddb0c43de8d)
}

var fileDescriptor_878c0ddb0c43de8d = []byte{
	// 176 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0xce, 0xb1, 0x0e, 0x82, 0x30,
	0x10, 0x06, 0xe0, 0x30, 0xe8, 0xd0, 0xc4, 0x85, 0x91, 0x55, 0x07, 0x5d, 0xae, 0x09, 0x8e, 0x4e,
	0xc2, 0x0b, 0x10, 0x5e, 0xc0, 0x54, 0x72, 0x49, 0x1b, 0x49, 0xaf, 0xb6, 0x07, 0x01, 0x9f, 0xc0,
	0xc7, 0x36, 0x54, 0xc6, 0xea, 0x7a, 0xff, 0x97, 0xff, 0x7e, 0x01, 0x68, 0x47, 0x9a, 0x65, 0x40,
	0x3f, 0x9a, 0x0e, 0xa5, 0x1a, 0x58, 0xcb, 0xb1, 0x54, 0xbd, 0xd3, 0x4a, 0xe2, 0xc4, 0xe8, 0xad,
	0xea, 0x6f, 0xcb, 0x15, 0x9c, 0x27, 0xa6, 0xbc, 0x88, 0x1e, 0x56, 0x0f, 0x31, 0x59, 0x7d, 0x71,
	0x4a, 0x76, 0xa5, 0x6a, 0xca, 0x4e, 0xec, 0xae, 0x03, 0x6b, 0xf2, 0xe6, 0xa5, 0xd8, 0x90, 0xcd,
	0x5b, 0xb1, 0xa9, 0x35, 0x76, 0x8f, 0x7c, 0x0f, 0xc9, 0x0f, 0x10, 0xd3, 0x16, 0x9f, 0x03, 0x06,
	0x2e, 0x0e, 0xff, 0x51, 0x70, 0x64, 0x03, 0x56, 0x17, 0x71, 0x34, 0xf4, 0x95, 0xce, 0xd3, 0x34,
	0xc3, 0xef, 0xed, 0x95, 0xa8, 0xd1, 0x73, 0x68, 0x96, 0x71, 0x4d, 0xf6, 0xce, 0xb2, 0xfb, 0x36,
	0x0e, 0x3d, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xed, 0xe3, 0x41, 0xb2, 0x21, 0x01, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// AuthorizationClient is the client API for Authorization service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type AuthorizationClient interface {
	// Performs authorization check based on the attributes associated with the
	// incoming request, and returns status `OK` or not `OK`.
	Check(ctx context.Context, in *v2.CheckRequest, opts ...grpc.CallOption) (*v2.CheckResponse, error)
}

type authorizationClient struct {
	cc *grpc.ClientConn
}

func NewAuthorizationClient(cc *grpc.ClientConn) AuthorizationClient {
	return &authorizationClient{cc}
}

func (c *authorizationClient) Check(ctx context.Context, in *v2.CheckRequest, opts ...grpc.CallOption) (*v2.CheckResponse, error) {
	out := new(v2.CheckResponse)
	err := c.cc.Invoke(ctx, "/envoy.service.auth.v2alpha.Authorization/Check", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// AuthorizationServer is the server API for Authorization service.
type AuthorizationServer interface {
	// Performs authorization check based on the attributes associated with the
	// incoming request, and returns status `OK` or not `OK`.
	Check(context.Context, *v2.CheckRequest) (*v2.CheckResponse, error)
}

// UnimplementedAuthorizationServer can be embedded to have forward compatible implementations.
type UnimplementedAuthorizationServer struct {
}

func (*UnimplementedAuthorizationServer) Check(ctx context.Context, req *v2.CheckRequest) (*v2.CheckResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method Check not implemented")
}

func RegisterAuthorizationServer(s *grpc.Server, srv AuthorizationServer) {
	s.RegisterService(&_Authorization_serviceDesc, srv)
}

func _Authorization_Check_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(v2.CheckRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(AuthorizationServer).Check(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/envoy.service.auth.v2alpha.Authorization/Check",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(AuthorizationServer).Check(ctx, req.(*v2.CheckRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _Authorization_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.service.auth.v2alpha.Authorization",
	HandlerType: (*AuthorizationServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "Check",
			Handler:    _Authorization_Check_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "envoy/service/auth/v2alpha/external_auth.proto",
}
07070100000150000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003100000000cilium-proxy-20200109/go/envoy/service/discovery  07070100000151000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003400000000cilium-proxy-20200109/go/envoy/service/discovery/v2   07070100000152000081A4000003E800000064000000015E17A24700002A15000000000000000000000000000000000000003E00000000cilium-proxy-20200109/go/envoy/service/discovery/v2/ads.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/service/discovery/v2/ads.proto

package envoy_service_discovery_v2

import (
	context "context"
	fmt "fmt"
	v2 "github.com/cilium/proxy/go/envoy/api/v2"
	proto "github.com/golang/protobuf/proto"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#not-implemented-hide:] Not configuration. Workaround c++ protobuf issue with importing
// services: https://github.com/google/protobuf/issues/4221
type AdsDummy struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *AdsDummy) Reset()         { *m = AdsDummy{} }
func (m *AdsDummy) String() string { return proto.CompactTextString(m) }
func (*AdsDummy) ProtoMessage()    {}
func (*AdsDummy) Descriptor() ([]byte, []int) {
	return fileDescriptor_187fd5dcc2dab695, []int{0}
}

func (m *AdsDummy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AdsDummy.Unmarshal(m, b)
}
func (m *AdsDummy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AdsDummy.Marshal(b, m, deterministic)
}
func (m *AdsDummy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AdsDummy.Merge(m, src)
}
func (m *AdsDummy) XXX_Size() int {
	return xxx_messageInfo_AdsDummy.Size(m)
}
func (m *AdsDummy) XXX_DiscardUnknown() {
	xxx_messageInfo_AdsDummy.DiscardUnknown(m)
}

var xxx_messageInfo_AdsDummy proto.InternalMessageInfo

func init() {
	proto.RegisterType((*AdsDummy)(nil), "envoy.service.discovery.v2.AdsDummy")
}

func init() {
	proto.RegisterFile("envoy/service/discovery/v2/ads.proto", fileDescriptor_187fd5dcc2dab695)
}

var fileDescriptor_187fd5dcc2dab695 = []byte{
	// 232 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x41, 0x4e, 0xc3, 0x30,
	0x10, 0x45, 0xf1, 0x06, 0x21, 0x2f, 0xb3, 0x82, 0x08, 0x81, 0x54, 0xba, 0xe8, 0x6a, 0x82, 0xcc,
	0x8a, 0x65, 0xab, 0x1c, 0xa0, 0x6a, 0x4f, 0xe0, 0xc6, 0xa3, 0xc8, 0x82, 0x74, 0x8c, 0xc7, 0xb1,
	0xf0, 0x0d, 0xb8, 0x2c, 0x77, 0x40, 0x8e, 0xa1, 0x45, 0x40, 0x59, 0xcf, 0xfb, 0xff, 0x8f, 0x9e,
	0x9c, 0xe3, 0x3e, 0x52, 0x6a, 0x18, 0x7d, 0xb4, 0x1d, 0x36, 0xc6, 0x72, 0x47, 0x11, 0x7d, 0x6a,
	0xa2, 0x6a, 0xb4, 0x61, 0x70, 0x9e, 0x02, 0x55, 0xf5, 0x44, 0xc1, 0x27, 0x05, 0x07, 0x0a, 0xa2,
	0xaa, 0xaf, 0x4b, 0x83, 0x76, 0x36, 0x67, 0x8e, 0xa7, 0x29, 0x39, 0x93, 0xf2, 0x62, 0x69, 0xb8,
	0x1d, 0x87, 0x21, 0xa9, 0x77, 0x21, 0xeb, 0x65, 0xdf, 0x7b, 0xec, 0x75, 0x40, 0xd3, 0x7e, 0x91,
	0xdb, 0xd2, 0x5a, 0xed, 0xe4, 0xd5, 0x36, 0x78, 0xd4, 0xc3, 0x91, 0xd9, 0x20, 0xd3, 0xe8, 0x3b,
	0xe4, 0xea, 0x06, 0xca, 0x0b, 0xda, 0x59, 0x88, 0x0a, 0x0e, 0xe1, 0x0d, 0xbe, 0x8c, 0xc8, 0xa1,
	0xbe, 0x3d, 0x79, 0x67, 0x47, 0x7b, 0xc6, 0xd9, 0xd9, 0x42, 0xdc, 0x8b, 0xea, 0x49, 0x5e, 0xb6,
	0xf8, 0x1c, 0xf4, 0x5f, 0x13, 0x77, 0x3f, 0x2a, 0x32, 0xf7, 0x6b, 0x67, 0xfe, 0x3f, 0xf4, 0x7d,
	0x6c, 0xf5, 0x28, 0x17, 0x96, 0x0a, 0xef, 0x3c, 0xbd, 0x26, 0x38, 0x6d, 0x71, 0x95, 0x2d, 0xad,
	0xb3, 0xb1, 0xb5, 0x78, 0x13, 0x62, 0x77, 0x3e, 0xd9, 0x7b, 0xf8, 0x08, 0x00, 0x00, 0xff, 0xff,
	0xfd, 0x28, 0x46, 0x24, 0x9f, 0x01, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// AggregatedDiscoveryServiceClient is the client API for AggregatedDiscoveryService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type AggregatedDiscoveryServiceClient interface {
	// This is a gRPC-only API.
	StreamAggregatedResources(ctx context.Context, opts ...grpc.CallOption) (AggregatedDiscoveryService_StreamAggregatedResourcesClient, error)
	DeltaAggregatedResources(ctx context.Context, opts ...grpc.CallOption) (AggregatedDiscoveryService_DeltaAggregatedResourcesClient, error)
}

type aggregatedDiscoveryServiceClient struct {
	cc *grpc.ClientConn
}

func NewAggregatedDiscoveryServiceClient(cc *grpc.ClientConn) AggregatedDiscoveryServiceClient {
	return &aggregatedDiscoveryServiceClient{cc}
}

func (c *aggregatedDiscoveryServiceClient) StreamAggregatedResources(ctx context.Context, opts ...grpc.CallOption) (AggregatedDiscoveryService_StreamAggregatedResourcesClient, error) {
	stream, err := c.cc.NewStream(ctx, &_AggregatedDiscoveryService_serviceDesc.Streams[0], "/envoy.service.discovery.v2.AggregatedDiscoveryService/StreamAggregatedResources", opts...)
	if err != nil {
		return nil, err
	}
	x := &aggregatedDiscoveryServiceStreamAggregatedResourcesClient{stream}
	return x, nil
}

type AggregatedDiscoveryService_StreamAggregatedResourcesClient interface {
	Send(*v2.DiscoveryRequest) error
	Recv() (*v2.DiscoveryResponse, error)
	grpc.ClientStream
}

type aggregatedDiscoveryServiceStreamAggregatedResourcesClient struct {
	grpc.ClientStream
}

func (x *aggregatedDiscoveryServiceStreamAggregatedResourcesClient) Send(m *v2.DiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *aggregatedDiscoveryServiceStreamAggregatedResourcesClient) Recv() (*v2.DiscoveryResponse, error) {
	m := new(v2.DiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *aggregatedDiscoveryServiceClient) DeltaAggregatedResources(ctx context.Context, opts ...grpc.CallOption) (AggregatedDiscoveryService_DeltaAggregatedResourcesClient, error) {
	stream, err := c.cc.NewStream(ctx, &_AggregatedDiscoveryService_serviceDesc.Streams[1], "/envoy.service.discovery.v2.AggregatedDiscoveryService/DeltaAggregatedResources", opts...)
	if err != nil {
		return nil, err
	}
	x := &aggregatedDiscoveryServiceDeltaAggregatedResourcesClient{stream}
	return x, nil
}

type AggregatedDiscoveryService_DeltaAggregatedResourcesClient interface {
	Send(*v2.DeltaDiscoveryRequest) error
	Recv() (*v2.DeltaDiscoveryResponse, error)
	grpc.ClientStream
}

type aggregatedDiscoveryServiceDeltaAggregatedResourcesClient struct {
	grpc.ClientStream
}

func (x *aggregatedDiscoveryServiceDeltaAggregatedResourcesClient) Send(m *v2.DeltaDiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *aggregatedDiscoveryServiceDeltaAggregatedResourcesClient) Recv() (*v2.DeltaDiscoveryResponse, error) {
	m := new(v2.DeltaDiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

// AggregatedDiscoveryServiceServer is the server API for AggregatedDiscoveryService service.
type AggregatedDiscoveryServiceServer interface {
	// This is a gRPC-only API.
	StreamAggregatedResources(AggregatedDiscoveryService_StreamAggregatedResourcesServer) error
	DeltaAggregatedResources(AggregatedDiscoveryService_DeltaAggregatedResourcesServer) error
}

// UnimplementedAggregatedDiscoveryServiceServer can be embedded to have forward compatible implementations.
type UnimplementedAggregatedDiscoveryServiceServer struct {
}

func (*UnimplementedAggregatedDiscoveryServiceServer) StreamAggregatedResources(srv AggregatedDiscoveryService_StreamAggregatedResourcesServer) error {
	return status.Errorf(codes.Unimplemented, "method StreamAggregatedResources not implemented")
}
func (*UnimplementedAggregatedDiscoveryServiceServer) DeltaAggregatedResources(srv AggregatedDiscoveryService_DeltaAggregatedResourcesServer) error {
	return status.Errorf(codes.Unimplemented, "method DeltaAggregatedResources not implemented")
}

func RegisterAggregatedDiscoveryServiceServer(s *grpc.Server, srv AggregatedDiscoveryServiceServer) {
	s.RegisterService(&_AggregatedDiscoveryService_serviceDesc, srv)
}

func _AggregatedDiscoveryService_StreamAggregatedResources_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(AggregatedDiscoveryServiceServer).StreamAggregatedResources(&aggregatedDiscoveryServiceStreamAggregatedResourcesServer{stream})
}

type AggregatedDiscoveryService_StreamAggregatedResourcesServer interface {
	Send(*v2.DiscoveryResponse) error
	Recv() (*v2.DiscoveryRequest, error)
	grpc.ServerStream
}

type aggregatedDiscoveryServiceStreamAggregatedResourcesServer struct {
	grpc.ServerStream
}

func (x *aggregatedDiscoveryServiceStreamAggregatedResourcesServer) Send(m *v2.DiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *aggregatedDiscoveryServiceStreamAggregatedResourcesServer) Recv() (*v2.DiscoveryRequest, error) {
	m := new(v2.DiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _AggregatedDiscoveryService_DeltaAggregatedResources_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(AggregatedDiscoveryServiceServer).DeltaAggregatedResources(&aggregatedDiscoveryServiceDeltaAggregatedResourcesServer{stream})
}

type AggregatedDiscoveryService_DeltaAggregatedResourcesServer interface {
	Send(*v2.DeltaDiscoveryResponse) error
	Recv() (*v2.DeltaDiscoveryRequest, error)
	grpc.ServerStream
}

type aggregatedDiscoveryServiceDeltaAggregatedResourcesServer struct {
	grpc.ServerStream
}

func (x *aggregatedDiscoveryServiceDeltaAggregatedResourcesServer) Send(m *v2.DeltaDiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *aggregatedDiscoveryServiceDeltaAggregatedResourcesServer) Recv() (*v2.DeltaDiscoveryRequest, error) {
	m := new(v2.DeltaDiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

var _AggregatedDiscoveryService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.service.discovery.v2.AggregatedDiscoveryService",
	HandlerType: (*AggregatedDiscoveryServiceServer)(nil),
	Methods:     []grpc.MethodDesc{},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "StreamAggregatedResources",
			Handler:       _AggregatedDiscoveryService_StreamAggregatedResources_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
		{
			StreamName:    "DeltaAggregatedResources",
			Handler:       _AggregatedDiscoveryService_DeltaAggregatedResources_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
	},
	Metadata: "envoy/service/discovery/v2/ads.proto",
}
   07070100000153000081A4000003E800000064000000015E17A247000084F8000000000000000000000000000000000000003E00000000cilium-proxy-20200109/go/envoy/service/discovery/v2/hds.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/service/discovery/v2/hds.proto

package envoy_service_discovery_v2

import (
	context "context"
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	endpoint "github.com/cilium/proxy/go/envoy/api/v2/endpoint"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Different Envoy instances may have different capabilities (e.g. Redis)
// and/or have ports enabled for different protocols.
type Capability_Protocol int32

const (
	Capability_HTTP  Capability_Protocol = 0
	Capability_TCP   Capability_Protocol = 1
	Capability_REDIS Capability_Protocol = 2
)

var Capability_Protocol_name = map[int32]string{
	0: "HTTP",
	1: "TCP",
	2: "REDIS",
}

var Capability_Protocol_value = map[string]int32{
	"HTTP":  0,
	"TCP":   1,
	"REDIS": 2,
}

func (x Capability_Protocol) String() string {
	return proto.EnumName(Capability_Protocol_name, int32(x))
}

func (Capability_Protocol) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_773ad67555497672, []int{0, 0}
}

// Defines supported protocols etc, so the management server can assign proper
// endpoints to healthcheck.
type Capability struct {
	HealthCheckProtocols []Capability_Protocol `protobuf:"varint,1,rep,packed,name=health_check_protocols,json=healthCheckProtocols,proto3,enum=envoy.service.discovery.v2.Capability_Protocol" json:"health_check_protocols,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *Capability) Reset()         { *m = Capability{} }
func (m *Capability) String() string { return proto.CompactTextString(m) }
func (*Capability) ProtoMessage()    {}
func (*Capability) Descriptor() ([]byte, []int) {
	return fileDescriptor_773ad67555497672, []int{0}
}

func (m *Capability) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Capability.Unmarshal(m, b)
}
func (m *Capability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Capability.Marshal(b, m, deterministic)
}
func (m *Capability) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Capability.Merge(m, src)
}
func (m *Capability) XXX_Size() int {
	return xxx_messageInfo_Capability.Size(m)
}
func (m *Capability) XXX_DiscardUnknown() {
	xxx_messageInfo_Capability.DiscardUnknown(m)
}

var xxx_messageInfo_Capability proto.InternalMessageInfo

func (m *Capability) GetHealthCheckProtocols() []Capability_Protocol {
	if m != nil {
		return m.HealthCheckProtocols
	}
	return nil
}

type HealthCheckRequest struct {
	Node                 *core.Node  `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"`
	Capability           *Capability `protobuf:"bytes,2,opt,name=capability,proto3" json:"capability,omitempty"`
	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
	XXX_unrecognized     []byte      `json:"-"`
	XXX_sizecache        int32       `json:"-"`
}

func (m *HealthCheckRequest) Reset()         { *m = HealthCheckRequest{} }
func (m *HealthCheckRequest) String() string { return proto.CompactTextString(m) }
func (*HealthCheckRequest) ProtoMessage()    {}
func (*HealthCheckRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_773ad67555497672, []int{1}
}

func (m *HealthCheckRequest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HealthCheckRequest.Unmarshal(m, b)
}
func (m *HealthCheckRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HealthCheckRequest.Marshal(b, m, deterministic)
}
func (m *HealthCheckRequest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HealthCheckRequest.Merge(m, src)
}
func (m *HealthCheckRequest) XXX_Size() int {
	return xxx_messageInfo_HealthCheckRequest.Size(m)
}
func (m *HealthCheckRequest) XXX_DiscardUnknown() {
	xxx_messageInfo_HealthCheckRequest.DiscardUnknown(m)
}

var xxx_messageInfo_HealthCheckRequest proto.InternalMessageInfo

func (m *HealthCheckRequest) GetNode() *core.Node {
	if m != nil {
		return m.Node
	}
	return nil
}

func (m *HealthCheckRequest) GetCapability() *Capability {
	if m != nil {
		return m.Capability
	}
	return nil
}

type EndpointHealth struct {
	Endpoint             *endpoint.Endpoint `protobuf:"bytes,1,opt,name=endpoint,proto3" json:"endpoint,omitempty"`
	HealthStatus         core.HealthStatus  `protobuf:"varint,2,opt,name=health_status,json=healthStatus,proto3,enum=envoy.api.v2.core.HealthStatus" json:"health_status,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *EndpointHealth) Reset()         { *m = EndpointHealth{} }
func (m *EndpointHealth) String() string { return proto.CompactTextString(m) }
func (*EndpointHealth) ProtoMessage()    {}
func (*EndpointHealth) Descriptor() ([]byte, []int) {
	return fileDescriptor_773ad67555497672, []int{2}
}

func (m *EndpointHealth) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_EndpointHealth.Unmarshal(m, b)
}
func (m *EndpointHealth) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_EndpointHealth.Marshal(b, m, deterministic)
}
func (m *EndpointHealth) XXX_Merge(src proto.Message) {
	xxx_messageInfo_EndpointHealth.Merge(m, src)
}
func (m *EndpointHealth) XXX_Size() int {
	return xxx_messageInfo_EndpointHealth.Size(m)
}
func (m *EndpointHealth) XXX_DiscardUnknown() {
	xxx_messageInfo_EndpointHealth.DiscardUnknown(m)
}

var xxx_messageInfo_EndpointHealth proto.InternalMessageInfo

func (m *EndpointHealth) GetEndpoint() *endpoint.Endpoint {
	if m != nil {
		return m.Endpoint
	}
	return nil
}

func (m *EndpointHealth) GetHealthStatus() core.HealthStatus {
	if m != nil {
		return m.HealthStatus
	}
	return core.HealthStatus_UNKNOWN
}

type EndpointHealthResponse struct {
	EndpointsHealth      []*EndpointHealth `protobuf:"bytes,1,rep,name=endpoints_health,json=endpointsHealth,proto3" json:"endpoints_health,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *EndpointHealthResponse) Reset()         { *m = EndpointHealthResponse{} }
func (m *EndpointHealthResponse) String() string { return proto.CompactTextString(m) }
func (*EndpointHealthResponse) ProtoMessage()    {}
func (*EndpointHealthResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_773ad67555497672, []int{3}
}

func (m *EndpointHealthResponse) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_EndpointHealthResponse.Unmarshal(m, b)
}
func (m *EndpointHealthResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_EndpointHealthResponse.Marshal(b, m, deterministic)
}
func (m *EndpointHealthResponse) XXX_Merge(src proto.Message) {
	xxx_messageInfo_EndpointHealthResponse.Merge(m, src)
}
func (m *EndpointHealthResponse) XXX_Size() int {
	return xxx_messageInfo_EndpointHealthResponse.Size(m)
}
func (m *EndpointHealthResponse) XXX_DiscardUnknown() {
	xxx_messageInfo_EndpointHealthResponse.DiscardUnknown(m)
}

var xxx_messageInfo_EndpointHealthResponse proto.InternalMessageInfo

func (m *EndpointHealthResponse) GetEndpointsHealth() []*EndpointHealth {
	if m != nil {
		return m.EndpointsHealth
	}
	return nil
}

type HealthCheckRequestOrEndpointHealthResponse struct {
	// Types that are valid to be assigned to RequestType:
	//	*HealthCheckRequestOrEndpointHealthResponse_HealthCheckRequest
	//	*HealthCheckRequestOrEndpointHealthResponse_EndpointHealthResponse
	RequestType          isHealthCheckRequestOrEndpointHealthResponse_RequestType `protobuf_oneof:"request_type"`
	XXX_NoUnkeyedLiteral struct{}                                                 `json:"-"`
	XXX_unrecognized     []byte                                                   `json:"-"`
	XXX_sizecache        int32                                                    `json:"-"`
}

func (m *HealthCheckRequestOrEndpointHealthResponse) Reset() {
	*m = HealthCheckRequestOrEndpointHealthResponse{}
}
func (m *HealthCheckRequestOrEndpointHealthResponse) String() string {
	return proto.CompactTextString(m)
}
func (*HealthCheckRequestOrEndpointHealthResponse) ProtoMessage() {}
func (*HealthCheckRequestOrEndpointHealthResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_773ad67555497672, []int{4}
}

func (m *HealthCheckRequestOrEndpointHealthResponse) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HealthCheckRequestOrEndpointHealthResponse.Unmarshal(m, b)
}
func (m *HealthCheckRequestOrEndpointHealthResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HealthCheckRequestOrEndpointHealthResponse.Marshal(b, m, deterministic)
}
func (m *HealthCheckRequestOrEndpointHealthResponse) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HealthCheckRequestOrEndpointHealthResponse.Merge(m, src)
}
func (m *HealthCheckRequestOrEndpointHealthResponse) XXX_Size() int {
	return xxx_messageInfo_HealthCheckRequestOrEndpointHealthResponse.Size(m)
}
func (m *HealthCheckRequestOrEndpointHealthResponse) XXX_DiscardUnknown() {
	xxx_messageInfo_HealthCheckRequestOrEndpointHealthResponse.DiscardUnknown(m)
}

var xxx_messageInfo_HealthCheckRequestOrEndpointHealthResponse proto.InternalMessageInfo

type isHealthCheckRequestOrEndpointHealthResponse_RequestType interface {
	isHealthCheckRequestOrEndpointHealthResponse_RequestType()
}

type HealthCheckRequestOrEndpointHealthResponse_HealthCheckRequest struct {
	HealthCheckRequest *HealthCheckRequest `protobuf:"bytes,1,opt,name=health_check_request,json=healthCheckRequest,proto3,oneof"`
}

type HealthCheckRequestOrEndpointHealthResponse_EndpointHealthResponse struct {
	EndpointHealthResponse *EndpointHealthResponse `protobuf:"bytes,2,opt,name=endpoint_health_response,json=endpointHealthResponse,proto3,oneof"`
}

func (*HealthCheckRequestOrEndpointHealthResponse_HealthCheckRequest) isHealthCheckRequestOrEndpointHealthResponse_RequestType() {
}

func (*HealthCheckRequestOrEndpointHealthResponse_EndpointHealthResponse) isHealthCheckRequestOrEndpointHealthResponse_RequestType() {
}

func (m *HealthCheckRequestOrEndpointHealthResponse) GetRequestType() isHealthCheckRequestOrEndpointHealthResponse_RequestType {
	if m != nil {
		return m.RequestType
	}
	return nil
}

func (m *HealthCheckRequestOrEndpointHealthResponse) GetHealthCheckRequest() *HealthCheckRequest {
	if x, ok := m.GetRequestType().(*HealthCheckRequestOrEndpointHealthResponse_HealthCheckRequest); ok {
		return x.HealthCheckRequest
	}
	return nil
}

func (m *HealthCheckRequestOrEndpointHealthResponse) GetEndpointHealthResponse() *EndpointHealthResponse {
	if x, ok := m.GetRequestType().(*HealthCheckRequestOrEndpointHealthResponse_EndpointHealthResponse); ok {
		return x.EndpointHealthResponse
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*HealthCheckRequestOrEndpointHealthResponse) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*HealthCheckRequestOrEndpointHealthResponse_HealthCheckRequest)(nil),
		(*HealthCheckRequestOrEndpointHealthResponse_EndpointHealthResponse)(nil),
	}
}

type LocalityEndpoints struct {
	Locality             *core.Locality       `protobuf:"bytes,1,opt,name=locality,proto3" json:"locality,omitempty"`
	Endpoints            []*endpoint.Endpoint `protobuf:"bytes,2,rep,name=endpoints,proto3" json:"endpoints,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *LocalityEndpoints) Reset()         { *m = LocalityEndpoints{} }
func (m *LocalityEndpoints) String() string { return proto.CompactTextString(m) }
func (*LocalityEndpoints) ProtoMessage()    {}
func (*LocalityEndpoints) Descriptor() ([]byte, []int) {
	return fileDescriptor_773ad67555497672, []int{5}
}

func (m *LocalityEndpoints) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_LocalityEndpoints.Unmarshal(m, b)
}
func (m *LocalityEndpoints) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_LocalityEndpoints.Marshal(b, m, deterministic)
}
func (m *LocalityEndpoints) XXX_Merge(src proto.Message) {
	xxx_messageInfo_LocalityEndpoints.Merge(m, src)
}
func (m *LocalityEndpoints) XXX_Size() int {
	return xxx_messageInfo_LocalityEndpoints.Size(m)
}
func (m *LocalityEndpoints) XXX_DiscardUnknown() {
	xxx_messageInfo_LocalityEndpoints.DiscardUnknown(m)
}

var xxx_messageInfo_LocalityEndpoints proto.InternalMessageInfo

func (m *LocalityEndpoints) GetLocality() *core.Locality {
	if m != nil {
		return m.Locality
	}
	return nil
}

func (m *LocalityEndpoints) GetEndpoints() []*endpoint.Endpoint {
	if m != nil {
		return m.Endpoints
	}
	return nil
}

// The cluster name and locality is provided to Envoy for the endpoints that it
// health checks to support statistics reporting, logging and debugging by the
// Envoy instance (outside of HDS). For maximum usefulness, it should match the
// same cluster structure as that provided by EDS.
type ClusterHealthCheck struct {
	ClusterName          string               `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"`
	HealthChecks         []*core.HealthCheck  `protobuf:"bytes,2,rep,name=health_checks,json=healthChecks,proto3" json:"health_checks,omitempty"`
	LocalityEndpoints    []*LocalityEndpoints `protobuf:"bytes,3,rep,name=locality_endpoints,json=localityEndpoints,proto3" json:"locality_endpoints,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *ClusterHealthCheck) Reset()         { *m = ClusterHealthCheck{} }
func (m *ClusterHealthCheck) String() string { return proto.CompactTextString(m) }
func (*ClusterHealthCheck) ProtoMessage()    {}
func (*ClusterHealthCheck) Descriptor() ([]byte, []int) {
	return fileDescriptor_773ad67555497672, []int{6}
}

func (m *ClusterHealthCheck) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ClusterHealthCheck.Unmarshal(m, b)
}
func (m *ClusterHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ClusterHealthCheck.Marshal(b, m, deterministic)
}
func (m *ClusterHealthCheck) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ClusterHealthCheck.Merge(m, src)
}
func (m *ClusterHealthCheck) XXX_Size() int {
	return xxx_messageInfo_ClusterHealthCheck.Size(m)
}
func (m *ClusterHealthCheck) XXX_DiscardUnknown() {
	xxx_messageInfo_ClusterHealthCheck.DiscardUnknown(m)
}

var xxx_messageInfo_ClusterHealthCheck proto.InternalMessageInfo

func (m *ClusterHealthCheck) GetClusterName() string {
	if m != nil {
		return m.ClusterName
	}
	return ""
}

func (m *ClusterHealthCheck) GetHealthChecks() []*core.HealthCheck {
	if m != nil {
		return m.HealthChecks
	}
	return nil
}

func (m *ClusterHealthCheck) GetLocalityEndpoints() []*LocalityEndpoints {
	if m != nil {
		return m.LocalityEndpoints
	}
	return nil
}

type HealthCheckSpecifier struct {
	ClusterHealthChecks []*ClusterHealthCheck `protobuf:"bytes,1,rep,name=cluster_health_checks,json=clusterHealthChecks,proto3" json:"cluster_health_checks,omitempty"`
	// The default is 1 second.
	Interval             *duration.Duration `protobuf:"bytes,2,opt,name=interval,proto3" json:"interval,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *HealthCheckSpecifier) Reset()         { *m = HealthCheckSpecifier{} }
func (m *HealthCheckSpecifier) String() string { return proto.CompactTextString(m) }
func (*HealthCheckSpecifier) ProtoMessage()    {}
func (*HealthCheckSpecifier) Descriptor() ([]byte, []int) {
	return fileDescriptor_773ad67555497672, []int{7}
}

func (m *HealthCheckSpecifier) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HealthCheckSpecifier.Unmarshal(m, b)
}
func (m *HealthCheckSpecifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HealthCheckSpecifier.Marshal(b, m, deterministic)
}
func (m *HealthCheckSpecifier) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HealthCheckSpecifier.Merge(m, src)
}
func (m *HealthCheckSpecifier) XXX_Size() int {
	return xxx_messageInfo_HealthCheckSpecifier.Size(m)
}
func (m *HealthCheckSpecifier) XXX_DiscardUnknown() {
	xxx_messageInfo_HealthCheckSpecifier.DiscardUnknown(m)
}

var xxx_messageInfo_HealthCheckSpecifier proto.InternalMessageInfo

func (m *HealthCheckSpecifier) GetClusterHealthChecks() []*ClusterHealthCheck {
	if m != nil {
		return m.ClusterHealthChecks
	}
	return nil
}

func (m *HealthCheckSpecifier) GetInterval() *duration.Duration {
	if m != nil {
		return m.Interval
	}
	return nil
}

func init() {
	proto.RegisterEnum("envoy.service.discovery.v2.Capability_Protocol", Capability_Protocol_name, Capability_Protocol_value)
	proto.RegisterType((*Capability)(nil), "envoy.service.discovery.v2.Capability")
	proto.RegisterType((*HealthCheckRequest)(nil), "envoy.service.discovery.v2.HealthCheckRequest")
	proto.RegisterType((*EndpointHealth)(nil), "envoy.service.discovery.v2.EndpointHealth")
	proto.RegisterType((*EndpointHealthResponse)(nil), "envoy.service.discovery.v2.EndpointHealthResponse")
	proto.RegisterType((*HealthCheckRequestOrEndpointHealthResponse)(nil), "envoy.service.discovery.v2.HealthCheckRequestOrEndpointHealthResponse")
	proto.RegisterType((*LocalityEndpoints)(nil), "envoy.service.discovery.v2.LocalityEndpoints")
	proto.RegisterType((*ClusterHealthCheck)(nil), "envoy.service.discovery.v2.ClusterHealthCheck")
	proto.RegisterType((*HealthCheckSpecifier)(nil), "envoy.service.discovery.v2.HealthCheckSpecifier")
}

func init() {
	proto.RegisterFile("envoy/service/discovery/v2/hds.proto", fileDescriptor_773ad67555497672)
}

var fileDescriptor_773ad67555497672 = []byte{
	// 750 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x55, 0x51, 0x6f, 0x12, 0x4b,
	0x14, 0x66, 0x68, 0xef, 0xbd, 0xf4, 0x94, 0x8b, 0x74, 0xac, 0x88, 0xd8, 0xb4, 0x75, 0x53, 0x0d,
	0xa9, 0x71, 0x69, 0x30, 0xc6, 0x58, 0xe3, 0x4b, 0xa1, 0x0d, 0x26, 0xa6, 0x92, 0xa1, 0xbe, 0x99,
	0x90, 0x61, 0x99, 0x96, 0x8d, 0xdb, 0x9d, 0x75, 0x67, 0x20, 0xf2, 0xea, 0x93, 0xc6, 0x17, 0x93,
	0x3e, 0xfb, 0x23, 0x8c, 0x3f, 0xc5, 0x37, 0x9f, 0xfb, 0x43, 0x0c, 0x33, 0xb3, 0xcb, 0x52, 0x0a,
	0xb6, 0x6f, 0xbe, 0xb1, 0x67, 0xbe, 0xf3, 0x9d, 0xef, 0x9c, 0xef, 0xcc, 0x00, 0x5b, 0xcc, 0x1f,
	0xf0, 0x61, 0x45, 0xb0, 0x70, 0xe0, 0x3a, 0xac, 0xd2, 0x75, 0x85, 0xc3, 0x07, 0x2c, 0x1c, 0x56,
	0x06, 0xd5, 0x4a, 0xaf, 0x2b, 0xec, 0x20, 0xe4, 0x92, 0xe3, 0x92, 0x42, 0xd9, 0x06, 0x65, 0xc7,
	0x28, 0x7b, 0x50, 0x2d, 0xad, 0x69, 0x06, 0x1a, 0xb8, 0xa3, 0x1c, 0x87, 0x87, 0xac, 0xd2, 0xa1,
	0x82, 0xe9, 0xcc, 0xd2, 0xd6, 0xf4, 0x69, 0x8f, 0x51, 0x4f, 0xf6, 0xda, 0x4e, 0x8f, 0x39, 0xef,
	0x2e, 0x45, 0x31, 0xbf, 0x1b, 0x70, 0xd7, 0x97, 0xf1, 0x0f, 0x83, 0x5a, 0x3b, 0xe1, 0xfc, 0xc4,
	0x63, 0x0a, 0x46, 0x7d, 0x9f, 0x4b, 0x2a, 0x5d, 0xee, 0x1b, 0x8d, 0xa5, 0x75, 0x73, 0xaa, 0xbe,
	0x3a, 0xfd, 0xe3, 0x4a, 0xb7, 0x1f, 0x2a, 0x80, 0x3e, 0xb7, 0xbe, 0x21, 0x80, 0x1a, 0x0d, 0x68,
	0xc7, 0xf5, 0x5c, 0x39, 0xc4, 0x0c, 0x0a, 0x49, 0x21, 0x6d, 0x05, 0x72, 0xb8, 0x27, 0x8a, 0x68,
	0x73, 0xa1, 0x9c, 0xab, 0x56, 0xec, 0xd9, 0x3d, 0xdb, 0x63, 0x1e, 0xbb, 0x69, 0xf2, 0xc8, 0xaa,
	0xa6, 0xab, 0x8d, 0xd8, 0xa2, 0xa0, 0xb0, 0xca, 0x90, 0x89, 0x3e, 0x70, 0x06, 0x16, 0x1b, 0x47,
	0x47, 0xcd, 0x7c, 0x0a, 0xff, 0x07, 0x0b, 0x47, 0xb5, 0x66, 0x1e, 0xe1, 0x25, 0xf8, 0x87, 0xec,
	0xd7, 0x5f, 0xb6, 0xf2, 0x69, 0xeb, 0x33, 0x02, 0xdc, 0x18, 0x53, 0x10, 0xf6, 0xbe, 0xcf, 0x84,
	0xc4, 0x0f, 0x61, 0xd1, 0xe7, 0x5d, 0x56, 0x44, 0x9b, 0xa8, 0xbc, 0x5c, 0xbd, 0x6d, 0x54, 0xd1,
	0xc0, 0x1d, 0xe9, 0x18, 0xcd, 0xd3, 0x3e, 0xe4, 0x5d, 0x46, 0x14, 0x08, 0x1f, 0x00, 0x38, 0xb1,
	0xb4, 0x62, 0x5a, 0xa5, 0x3c, 0xb8, 0x5a, 0x23, 0x24, 0x91, 0x69, 0x9d, 0x21, 0xc8, 0xed, 0x9b,
	0xe1, 0x6b, 0x4d, 0xf8, 0x39, 0x64, 0x22, 0x3b, 0x8c, 0x96, 0x8d, 0x49, 0x2d, 0xb1, 0x59, 0x51,
	0x22, 0x89, 0x13, 0x70, 0x1d, 0xfe, 0x37, 0xc3, 0x16, 0x92, 0xca, 0xbe, 0x50, 0xd2, 0x72, 0x17,
	0x19, 0x54, 0x37, 0xba, 0x5c, 0x4b, 0xc1, 0x48, 0xb6, 0x97, 0xf8, 0xb2, 0x38, 0x14, 0x26, 0x45,
	0x11, 0x26, 0x02, 0xee, 0x0b, 0x86, 0xdf, 0x40, 0x3e, 0xaa, 0x25, 0xda, 0x3a, 0x47, 0xd9, 0xb8,
	0x5c, 0xdd, 0x9e, 0xd7, 0xfd, 0x05, 0xb6, 0x1b, 0x31, 0x87, 0x0e, 0x58, 0x5f, 0xd3, 0xb0, 0x3d,
	0x6d, 0xc9, 0xeb, 0x70, 0x86, 0x8a, 0x0e, 0xac, 0x4e, 0xac, 0x54, 0xa8, 0xf1, 0x66, 0x5c, 0xf6,
	0x3c, 0x25, 0xd3, 0x55, 0x1a, 0x29, 0x82, 0x7b, 0xd3, 0xeb, 0xe0, 0x43, 0x31, 0x52, 0x69, 0x1a,
	0x6d, 0x87, 0xa6, 0xbe, 0xf1, 0xbb, 0x7a, 0x8d, 0x8e, 0x4d, 0x66, 0x23, 0x45, 0x0a, 0xec, 0xd2,
	0x93, 0xbd, 0x1c, 0x64, 0x4d, 0x1b, 0x6d, 0x39, 0x0c, 0x98, 0xf5, 0x05, 0xc1, 0xca, 0x2b, 0xee,
	0xd0, 0xd1, 0x9a, 0x44, 0x64, 0x02, 0x3f, 0x85, 0x8c, 0x67, 0x82, 0xa6, 0xdb, 0xbb, 0x97, 0x58,
	0x1b, 0xe5, 0x91, 0x18, 0x8c, 0x5f, 0xc0, 0x52, 0x3c, 0xf4, 0x62, 0x5a, 0x39, 0xf6, 0xc7, 0xb5,
	0x1a, 0x67, 0x58, 0xbf, 0x10, 0xe0, 0x9a, 0xd7, 0x17, 0x92, 0x85, 0x89, 0x09, 0xe2, 0x7b, 0x90,
	0x75, 0x74, 0xb4, 0xed, 0xd3, 0x53, 0x7d, 0x77, 0x96, 0xc8, 0xb2, 0x89, 0x1d, 0xd2, 0x53, 0x86,
	0x6b, 0xf1, 0x46, 0x2a, 0xaf, 0xa2, 0xe2, 0xeb, 0x33, 0x37, 0x52, 0xbb, 0x90, 0x4d, 0x58, 0x22,
	0xf0, 0x5b, 0xc0, 0x51, 0x27, 0xed, 0x71, 0x1b, 0x0b, 0x8a, 0xe9, 0xd1, 0x3c, 0x1b, 0xa6, 0x26,
	0x48, 0x56, 0xbc, 0x8b, 0x21, 0xeb, 0x3b, 0x82, 0xd5, 0x44, 0xed, 0x56, 0xc0, 0x1c, 0xf7, 0xd8,
	0x65, 0x21, 0xee, 0xc0, 0xad, 0xa8, 0xbd, 0xc9, 0x1e, 0xf4, 0xca, 0xcf, 0x5d, 0xb4, 0xe9, 0x69,
	0x91, 0x9b, 0xce, 0x54, 0x4c, 0xe0, 0x27, 0x90, 0x71, 0x7d, 0xc9, 0xc2, 0x01, 0xf5, 0xcc, 0x5e,
	0xdd, 0xb1, 0xf5, 0x03, 0x6b, 0x47, 0x0f, 0xac, 0x5d, 0x37, 0x0f, 0x2c, 0x89, 0xa1, 0xd5, 0xf3,
	0x34, 0x14, 0x34, 0x4f, 0x3d, 0xaa, 0xda, 0xd2, 0x32, 0xf0, 0x19, 0x82, 0x95, 0x96, 0x0c, 0x19,
	0x3d, 0x4d, 0x5a, 0x75, 0x70, 0xbd, 0x5b, 0x31, 0xeb, 0xee, 0x95, 0x76, 0xae, 0xc8, 0x13, 0x4f,
	0xd1, 0x4a, 0x95, 0xd1, 0x0e, 0xc2, 0x3f, 0x10, 0xe4, 0x0f, 0x98, 0x74, 0x7a, 0x7f, 0x87, 0xa8,
	0xfb, 0x1f, 0x7f, 0x9e, 0x9f, 0xa5, 0x37, 0xac, 0xd2, 0xe8, 0x7f, 0x30, 0x86, 0xef, 0x26, 0x6d,
	0xde, 0x45, 0xdb, 0x7b, 0xcf, 0xa0, 0xec, 0x72, 0x4d, 0x1e, 0x84, 0xfc, 0xc3, 0x70, 0x4e, 0x9d,
	0xbd, 0x4c, 0xa3, 0x2b, 0xd4, 0x5f, 0x50, 0x13, 0x7d, 0x42, 0xa8, 0xf3, 0xaf, 0xb2, 0xef, 0xf1,
	0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xce, 0xc6, 0x73, 0x27, 0xf9, 0x07, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// HealthDiscoveryServiceClient is the client API for HealthDiscoveryService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type HealthDiscoveryServiceClient interface {
	// 1. Envoy starts up and if its can_healthcheck option in the static
	//    bootstrap config is enabled, sends HealthCheckRequest to the management
	//    server. It supplies its capabilities (which protocol it can health check
	//    with, what zone it resides in, etc.).
	// 2. In response to (1), the management server designates this Envoy as a
	//    healthchecker to health check a subset of all upstream hosts for a given
	//    cluster (for example upstream Host 1 and Host 2). It streams
	//    HealthCheckSpecifier messages with cluster related configuration for all
	//    clusters this Envoy is designated to health check. Subsequent
	//    HealthCheckSpecifier message will be sent on changes to:
	//    a. Endpoints to health checks
	//    b. Per cluster configuration change
	// 3. Envoy creates a health probe based on the HealthCheck config and sends
	//    it to endpoint(ip:port) of Host 1 and 2. Based on the HealthCheck
	//    configuration Envoy waits upon the arrival of the probe response and
	//    looks at the content of the response to decide whether the endpoint is
	//    healthy or not. If a response hasn't been received within the timeout
	//    interval, the endpoint health status is considered TIMEOUT.
	// 4. Envoy reports results back in an EndpointHealthResponse message.
	//    Envoy streams responses as often as the interval configured by the
	//    management server in HealthCheckSpecifier.
	// 5. The management Server collects health statuses for all endpoints in the
	//    cluster (for all clusters) and uses this information to construct
	//    EndpointDiscoveryResponse messages.
	// 6. Once Envoy has a list of upstream endpoints to send traffic to, it load
	//    balances traffic to them without additional health checking. It may
	//    use inline healthcheck (i.e. consider endpoint UNHEALTHY if connection
	//    failed to a particular endpoint to account for health status propagation
	//    delay between HDS and EDS).
	// By default, can_healthcheck is true. If can_healthcheck is false, Cluster
	// configuration may not contain HealthCheck message.
	// TODO(htuch): How is can_healthcheck communicated to CDS to ensure the above
	// invariant?
	// TODO(htuch): Add @amb67's diagram.
	StreamHealthCheck(ctx context.Context, opts ...grpc.CallOption) (HealthDiscoveryService_StreamHealthCheckClient, error)
	// TODO(htuch): Unlike the gRPC version, there is no stream-based binding of
	// request/response. Should we add an identifier to the HealthCheckSpecifier
	// to bind with the response?
	FetchHealthCheck(ctx context.Context, in *HealthCheckRequestOrEndpointHealthResponse, opts ...grpc.CallOption) (*HealthCheckSpecifier, error)
}

type healthDiscoveryServiceClient struct {
	cc *grpc.ClientConn
}

func NewHealthDiscoveryServiceClient(cc *grpc.ClientConn) HealthDiscoveryServiceClient {
	return &healthDiscoveryServiceClient{cc}
}

func (c *healthDiscoveryServiceClient) StreamHealthCheck(ctx context.Context, opts ...grpc.CallOption) (HealthDiscoveryService_StreamHealthCheckClient, error) {
	stream, err := c.cc.NewStream(ctx, &_HealthDiscoveryService_serviceDesc.Streams[0], "/envoy.service.discovery.v2.HealthDiscoveryService/StreamHealthCheck", opts...)
	if err != nil {
		return nil, err
	}
	x := &healthDiscoveryServiceStreamHealthCheckClient{stream}
	return x, nil
}

type HealthDiscoveryService_StreamHealthCheckClient interface {
	Send(*HealthCheckRequestOrEndpointHealthResponse) error
	Recv() (*HealthCheckSpecifier, error)
	grpc.ClientStream
}

type healthDiscoveryServiceStreamHealthCheckClient struct {
	grpc.ClientStream
}

func (x *healthDiscoveryServiceStreamHealthCheckClient) Send(m *HealthCheckRequestOrEndpointHealthResponse) error {
	return x.ClientStream.SendMsg(m)
}

func (x *healthDiscoveryServiceStreamHealthCheckClient) Recv() (*HealthCheckSpecifier, error) {
	m := new(HealthCheckSpecifier)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *healthDiscoveryServiceClient) FetchHealthCheck(ctx context.Context, in *HealthCheckRequestOrEndpointHealthResponse, opts ...grpc.CallOption) (*HealthCheckSpecifier, error) {
	out := new(HealthCheckSpecifier)
	err := c.cc.Invoke(ctx, "/envoy.service.discovery.v2.HealthDiscoveryService/FetchHealthCheck", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// HealthDiscoveryServiceServer is the server API for HealthDiscoveryService service.
type HealthDiscoveryServiceServer interface {
	// 1. Envoy starts up and if its can_healthcheck option in the static
	//    bootstrap config is enabled, sends HealthCheckRequest to the management
	//    server. It supplies its capabilities (which protocol it can health check
	//    with, what zone it resides in, etc.).
	// 2. In response to (1), the management server designates this Envoy as a
	//    healthchecker to health check a subset of all upstream hosts for a given
	//    cluster (for example upstream Host 1 and Host 2). It streams
	//    HealthCheckSpecifier messages with cluster related configuration for all
	//    clusters this Envoy is designated to health check. Subsequent
	//    HealthCheckSpecifier message will be sent on changes to:
	//    a. Endpoints to health checks
	//    b. Per cluster configuration change
	// 3. Envoy creates a health probe based on the HealthCheck config and sends
	//    it to endpoint(ip:port) of Host 1 and 2. Based on the HealthCheck
	//    configuration Envoy waits upon the arrival of the probe response and
	//    looks at the content of the response to decide whether the endpoint is
	//    healthy or not. If a response hasn't been received within the timeout
	//    interval, the endpoint health status is considered TIMEOUT.
	// 4. Envoy reports results back in an EndpointHealthResponse message.
	//    Envoy streams responses as often as the interval configured by the
	//    management server in HealthCheckSpecifier.
	// 5. The management Server collects health statuses for all endpoints in the
	//    cluster (for all clusters) and uses this information to construct
	//    EndpointDiscoveryResponse messages.
	// 6. Once Envoy has a list of upstream endpoints to send traffic to, it load
	//    balances traffic to them without additional health checking. It may
	//    use inline healthcheck (i.e. consider endpoint UNHEALTHY if connection
	//    failed to a particular endpoint to account for health status propagation
	//    delay between HDS and EDS).
	// By default, can_healthcheck is true. If can_healthcheck is false, Cluster
	// configuration may not contain HealthCheck message.
	// TODO(htuch): How is can_healthcheck communicated to CDS to ensure the above
	// invariant?
	// TODO(htuch): Add @amb67's diagram.
	StreamHealthCheck(HealthDiscoveryService_StreamHealthCheckServer) error
	// TODO(htuch): Unlike the gRPC version, there is no stream-based binding of
	// request/response. Should we add an identifier to the HealthCheckSpecifier
	// to bind with the response?
	FetchHealthCheck(context.Context, *HealthCheckRequestOrEndpointHealthResponse) (*HealthCheckSpecifier, error)
}

// UnimplementedHealthDiscoveryServiceServer can be embedded to have forward compatible implementations.
type UnimplementedHealthDiscoveryServiceServer struct {
}

func (*UnimplementedHealthDiscoveryServiceServer) StreamHealthCheck(srv HealthDiscoveryService_StreamHealthCheckServer) error {
	return status.Errorf(codes.Unimplemented, "method StreamHealthCheck not implemented")
}
func (*UnimplementedHealthDiscoveryServiceServer) FetchHealthCheck(ctx context.Context, req *HealthCheckRequestOrEndpointHealthResponse) (*HealthCheckSpecifier, error) {
	return nil, status.Errorf(codes.Unimplemented, "method FetchHealthCheck not implemented")
}

func RegisterHealthDiscoveryServiceServer(s *grpc.Server, srv HealthDiscoveryServiceServer) {
	s.RegisterService(&_HealthDiscoveryService_serviceDesc, srv)
}

func _HealthDiscoveryService_StreamHealthCheck_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(HealthDiscoveryServiceServer).StreamHealthCheck(&healthDiscoveryServiceStreamHealthCheckServer{stream})
}

type HealthDiscoveryService_StreamHealthCheckServer interface {
	Send(*HealthCheckSpecifier) error
	Recv() (*HealthCheckRequestOrEndpointHealthResponse, error)
	grpc.ServerStream
}

type healthDiscoveryServiceStreamHealthCheckServer struct {
	grpc.ServerStream
}

func (x *healthDiscoveryServiceStreamHealthCheckServer) Send(m *HealthCheckSpecifier) error {
	return x.ServerStream.SendMsg(m)
}

func (x *healthDiscoveryServiceStreamHealthCheckServer) Recv() (*HealthCheckRequestOrEndpointHealthResponse, error) {
	m := new(HealthCheckRequestOrEndpointHealthResponse)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _HealthDiscoveryService_FetchHealthCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(HealthCheckRequestOrEndpointHealthResponse)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(HealthDiscoveryServiceServer).FetchHealthCheck(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/envoy.service.discovery.v2.HealthDiscoveryService/FetchHealthCheck",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(HealthDiscoveryServiceServer).FetchHealthCheck(ctx, req.(*HealthCheckRequestOrEndpointHealthResponse))
	}
	return interceptor(ctx, in, info, handler)
}

var _HealthDiscoveryService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.service.discovery.v2.HealthDiscoveryService",
	HandlerType: (*HealthDiscoveryServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "FetchHealthCheck",
			Handler:    _HealthDiscoveryService_FetchHealthCheck_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "StreamHealthCheck",
			Handler:       _HealthDiscoveryService_StreamHealthCheck_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
	},
	Metadata: "envoy/service/discovery/v2/hds.proto",
}
07070100000154000081A4000003E800000064000000015E17A2470000372D000000000000000000000000000000000000003F00000000cilium-proxy-20200109/go/envoy/service/discovery/v2/rtds.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/service/discovery/v2/rtds.proto

package envoy_service_discovery_v2

import (
	context "context"
	fmt "fmt"
	v2 "github.com/cilium/proxy/go/envoy/api/v2"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	_struct "github.com/golang/protobuf/ptypes/struct"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#not-implemented-hide:] Not configuration. Workaround c++ protobuf issue with importing
// services: https://github.com/google/protobuf/issues/4221
type RtdsDummy struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RtdsDummy) Reset()         { *m = RtdsDummy{} }
func (m *RtdsDummy) String() string { return proto.CompactTextString(m) }
func (*RtdsDummy) ProtoMessage()    {}
func (*RtdsDummy) Descriptor() ([]byte, []int) {
	return fileDescriptor_60ef541a8dd8cfbb, []int{0}
}

func (m *RtdsDummy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RtdsDummy.Unmarshal(m, b)
}
func (m *RtdsDummy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RtdsDummy.Marshal(b, m, deterministic)
}
func (m *RtdsDummy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RtdsDummy.Merge(m, src)
}
func (m *RtdsDummy) XXX_Size() int {
	return xxx_messageInfo_RtdsDummy.Size(m)
}
func (m *RtdsDummy) XXX_DiscardUnknown() {
	xxx_messageInfo_RtdsDummy.DiscardUnknown(m)
}

var xxx_messageInfo_RtdsDummy proto.InternalMessageInfo

// RTDS resource type. This describes a layer in the runtime virtual filesystem.
type Runtime struct {
	// Runtime resource name. This makes the Runtime a self-describing xDS
	// resource.
	Name                 string          `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Layer                *_struct.Struct `protobuf:"bytes,2,opt,name=layer,proto3" json:"layer,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *Runtime) Reset()         { *m = Runtime{} }
func (m *Runtime) String() string { return proto.CompactTextString(m) }
func (*Runtime) ProtoMessage()    {}
func (*Runtime) Descriptor() ([]byte, []int) {
	return fileDescriptor_60ef541a8dd8cfbb, []int{1}
}

func (m *Runtime) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Runtime.Unmarshal(m, b)
}
func (m *Runtime) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Runtime.Marshal(b, m, deterministic)
}
func (m *Runtime) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Runtime.Merge(m, src)
}
func (m *Runtime) XXX_Size() int {
	return xxx_messageInfo_Runtime.Size(m)
}
func (m *Runtime) XXX_DiscardUnknown() {
	xxx_messageInfo_Runtime.DiscardUnknown(m)
}

var xxx_messageInfo_Runtime proto.InternalMessageInfo

func (m *Runtime) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Runtime) GetLayer() *_struct.Struct {
	if m != nil {
		return m.Layer
	}
	return nil
}

func init() {
	proto.RegisterType((*RtdsDummy)(nil), "envoy.service.discovery.v2.RtdsDummy")
	proto.RegisterType((*Runtime)(nil), "envoy.service.discovery.v2.Runtime")
}

func init() {
	proto.RegisterFile("envoy/service/discovery/v2/rtds.proto", fileDescriptor_60ef541a8dd8cfbb)
}

var fileDescriptor_60ef541a8dd8cfbb = []byte{
	// 356 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x52, 0xbf, 0x4e, 0xe3, 0x30,
	0x18, 0x3f, 0x47, 0xbd, 0xab, 0xea, 0xf6, 0x96, 0x48, 0xa7, 0x56, 0xb9, 0xea, 0x2e, 0x0a, 0x20,
	0x45, 0x48, 0x38, 0x28, 0x6c, 0x1d, 0xa3, 0x8a, 0xb9, 0x4a, 0x05, 0x2b, 0x72, 0x93, 0x8f, 0x62,
	0x29, 0x89, 0x53, 0xdb, 0x89, 0xc8, 0xca, 0xc4, 0xce, 0x33, 0xf1, 0x04, 0xbc, 0x02, 0x4f, 0xc1,
	0x84, 0x6a, 0x37, 0x45, 0x2d, 0x2a, 0x13, 0x9b, 0xed, 0xdf, 0x3f, 0x7f, 0xfe, 0x19, 0x9f, 0x40,
	0x51, 0xf3, 0x26, 0x90, 0x20, 0x6a, 0x96, 0x40, 0x90, 0x32, 0x99, 0xf0, 0x1a, 0x44, 0x13, 0xd4,
	0x61, 0x20, 0x54, 0x2a, 0x49, 0x29, 0xb8, 0xe2, 0xb6, 0xa3, 0x69, 0x64, 0x43, 0x23, 0x5b, 0x1a,
	0xa9, 0x43, 0x67, 0x6c, 0x2c, 0x68, 0xc9, 0xd6, 0xa2, 0x0f, 0x48, 0x2b, 0x9d, 0xf1, 0x92, 0xf3,
	0x65, 0x06, 0x1a, 0xa6, 0x45, 0xc1, 0x15, 0x55, 0x8c, 0x17, 0x72, 0x0f, 0xd5, 0xbb, 0x45, 0x75,
	0x1b, 0x48, 0x25, 0xaa, 0x44, 0x6d, 0xd0, 0x61, 0x4d, 0x33, 0x96, 0x52, 0x05, 0x41, 0xbb, 0x30,
	0x80, 0xd7, 0xc7, 0xbd, 0x58, 0xa5, 0x72, 0x5a, 0xe5, 0x79, 0xe3, 0x5d, 0xe1, 0x6e, 0x5c, 0x15,
	0x8a, 0xe5, 0x60, 0xff, 0xc5, 0x9d, 0x82, 0xe6, 0x30, 0x42, 0x2e, 0xf2, 0x7b, 0x51, 0xf7, 0x2d,
	0xea, 0x08, 0xcb, 0x45, 0xb1, 0x3e, 0xb4, 0xcf, 0xf0, 0xcf, 0x8c, 0x36, 0x20, 0x46, 0x96, 0x8b,
	0xfc, 0x7e, 0x38, 0x24, 0x26, 0x9b, 0xb4, 0xd9, 0x64, 0xae, 0xb3, 0x63, 0xc3, 0x0a, 0x9f, 0x2d,
	0x3c, 0xdc, 0xf8, 0x4e, 0xdb, 0x99, 0xe6, 0x66, 0x7e, 0xfb, 0x1a, 0xff, 0x9e, 0x2b, 0x01, 0x34,
	0x6f, 0x83, 0xff, 0x11, 0xf3, 0x40, 0xb4, 0x64, 0xa4, 0x0e, 0xc9, 0x56, 0x10, 0xc3, 0xaa, 0x02,
	0xa9, 0x9c, 0xff, 0x07, 0x71, 0x59, 0xf2, 0x42, 0x82, 0xf7, 0xc3, 0x47, 0xe7, 0xc8, 0xbe, 0xc1,
	0x83, 0x29, 0x64, 0x8a, 0xb6, 0xb6, 0x47, 0x7b, 0xb2, 0x35, 0xf6, 0xc9, 0xfb, 0xf8, 0x6b, 0xd2,
	0x4e, 0xc0, 0x0a, 0x0f, 0x2e, 0x41, 0x25, 0x77, 0xdf, 0x76, 0x6f, 0xf7, 0xe1, 0xe5, 0xf5, 0xc9,
	0x72, 0xbc, 0x3f, 0x3b, 0xdd, 0x4f, 0x84, 0xf1, 0x9f, 0xa0, 0xd3, 0x68, 0x82, 0x7d, 0xc6, 0x8d,
	0x4d, 0x29, 0xf8, 0x7d, 0x43, 0x0e, 0x7f, 0xa5, 0x48, 0xb7, 0x3a, 0x5b, 0xf7, 0x31, 0x43, 0x8f,
	0x08, 0x2d, 0x7e, 0xe9, 0x6e, 0x2e, 0xde, 0x03, 0x00, 0x00, 0xff, 0xff, 0x51, 0x02, 0x80, 0xf6,
	0xa6, 0x02, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// RuntimeDiscoveryServiceClient is the client API for RuntimeDiscoveryService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type RuntimeDiscoveryServiceClient interface {
	StreamRuntime(ctx context.Context, opts ...grpc.CallOption) (RuntimeDiscoveryService_StreamRuntimeClient, error)
	DeltaRuntime(ctx context.Context, opts ...grpc.CallOption) (RuntimeDiscoveryService_DeltaRuntimeClient, error)
	FetchRuntime(ctx context.Context, in *v2.DiscoveryRequest, opts ...grpc.CallOption) (*v2.DiscoveryResponse, error)
}

type runtimeDiscoveryServiceClient struct {
	cc *grpc.ClientConn
}

func NewRuntimeDiscoveryServiceClient(cc *grpc.ClientConn) RuntimeDiscoveryServiceClient {
	return &runtimeDiscoveryServiceClient{cc}
}

func (c *runtimeDiscoveryServiceClient) StreamRuntime(ctx context.Context, opts ...grpc.CallOption) (RuntimeDiscoveryService_StreamRuntimeClient, error) {
	stream, err := c.cc.NewStream(ctx, &_RuntimeDiscoveryService_serviceDesc.Streams[0], "/envoy.service.discovery.v2.RuntimeDiscoveryService/StreamRuntime", opts...)
	if err != nil {
		return nil, err
	}
	x := &runtimeDiscoveryServiceStreamRuntimeClient{stream}
	return x, nil
}

type RuntimeDiscoveryService_StreamRuntimeClient interface {
	Send(*v2.DiscoveryRequest) error
	Recv() (*v2.DiscoveryResponse, error)
	grpc.ClientStream
}

type runtimeDiscoveryServiceStreamRuntimeClient struct {
	grpc.ClientStream
}

func (x *runtimeDiscoveryServiceStreamRuntimeClient) Send(m *v2.DiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *runtimeDiscoveryServiceStreamRuntimeClient) Recv() (*v2.DiscoveryResponse, error) {
	m := new(v2.DiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *runtimeDiscoveryServiceClient) DeltaRuntime(ctx context.Context, opts ...grpc.CallOption) (RuntimeDiscoveryService_DeltaRuntimeClient, error) {
	stream, err := c.cc.NewStream(ctx, &_RuntimeDiscoveryService_serviceDesc.Streams[1], "/envoy.service.discovery.v2.RuntimeDiscoveryService/DeltaRuntime", opts...)
	if err != nil {
		return nil, err
	}
	x := &runtimeDiscoveryServiceDeltaRuntimeClient{stream}
	return x, nil
}

type RuntimeDiscoveryService_DeltaRuntimeClient interface {
	Send(*v2.DeltaDiscoveryRequest) error
	Recv() (*v2.DeltaDiscoveryResponse, error)
	grpc.ClientStream
}

type runtimeDiscoveryServiceDeltaRuntimeClient struct {
	grpc.ClientStream
}

func (x *runtimeDiscoveryServiceDeltaRuntimeClient) Send(m *v2.DeltaDiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *runtimeDiscoveryServiceDeltaRuntimeClient) Recv() (*v2.DeltaDiscoveryResponse, error) {
	m := new(v2.DeltaDiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *runtimeDiscoveryServiceClient) FetchRuntime(ctx context.Context, in *v2.DiscoveryRequest, opts ...grpc.CallOption) (*v2.DiscoveryResponse, error) {
	out := new(v2.DiscoveryResponse)
	err := c.cc.Invoke(ctx, "/envoy.service.discovery.v2.RuntimeDiscoveryService/FetchRuntime", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// RuntimeDiscoveryServiceServer is the server API for RuntimeDiscoveryService service.
type RuntimeDiscoveryServiceServer interface {
	StreamRuntime(RuntimeDiscoveryService_StreamRuntimeServer) error
	DeltaRuntime(RuntimeDiscoveryService_DeltaRuntimeServer) error
	FetchRuntime(context.Context, *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error)
}

// UnimplementedRuntimeDiscoveryServiceServer can be embedded to have forward compatible implementations.
type UnimplementedRuntimeDiscoveryServiceServer struct {
}

func (*UnimplementedRuntimeDiscoveryServiceServer) StreamRuntime(srv RuntimeDiscoveryService_StreamRuntimeServer) error {
	return status.Errorf(codes.Unimplemented, "method StreamRuntime not implemented")
}
func (*UnimplementedRuntimeDiscoveryServiceServer) DeltaRuntime(srv RuntimeDiscoveryService_DeltaRuntimeServer) error {
	return status.Errorf(codes.Unimplemented, "method DeltaRuntime not implemented")
}
func (*UnimplementedRuntimeDiscoveryServiceServer) FetchRuntime(ctx context.Context, req *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method FetchRuntime not implemented")
}

func RegisterRuntimeDiscoveryServiceServer(s *grpc.Server, srv RuntimeDiscoveryServiceServer) {
	s.RegisterService(&_RuntimeDiscoveryService_serviceDesc, srv)
}

func _RuntimeDiscoveryService_StreamRuntime_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(RuntimeDiscoveryServiceServer).StreamRuntime(&runtimeDiscoveryServiceStreamRuntimeServer{stream})
}

type RuntimeDiscoveryService_StreamRuntimeServer interface {
	Send(*v2.DiscoveryResponse) error
	Recv() (*v2.DiscoveryRequest, error)
	grpc.ServerStream
}

type runtimeDiscoveryServiceStreamRuntimeServer struct {
	grpc.ServerStream
}

func (x *runtimeDiscoveryServiceStreamRuntimeServer) Send(m *v2.DiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *runtimeDiscoveryServiceStreamRuntimeServer) Recv() (*v2.DiscoveryRequest, error) {
	m := new(v2.DiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _RuntimeDiscoveryService_DeltaRuntime_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(RuntimeDiscoveryServiceServer).DeltaRuntime(&runtimeDiscoveryServiceDeltaRuntimeServer{stream})
}

type RuntimeDiscoveryService_DeltaRuntimeServer interface {
	Send(*v2.DeltaDiscoveryResponse) error
	Recv() (*v2.DeltaDiscoveryRequest, error)
	grpc.ServerStream
}

type runtimeDiscoveryServiceDeltaRuntimeServer struct {
	grpc.ServerStream
}

func (x *runtimeDiscoveryServiceDeltaRuntimeServer) Send(m *v2.DeltaDiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *runtimeDiscoveryServiceDeltaRuntimeServer) Recv() (*v2.DeltaDiscoveryRequest, error) {
	m := new(v2.DeltaDiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _RuntimeDiscoveryService_FetchRuntime_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(v2.DiscoveryRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(RuntimeDiscoveryServiceServer).FetchRuntime(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/envoy.service.discovery.v2.RuntimeDiscoveryService/FetchRuntime",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(RuntimeDiscoveryServiceServer).FetchRuntime(ctx, req.(*v2.DiscoveryRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _RuntimeDiscoveryService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.service.discovery.v2.RuntimeDiscoveryService",
	HandlerType: (*RuntimeDiscoveryServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "FetchRuntime",
			Handler:    _RuntimeDiscoveryService_FetchRuntime_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "StreamRuntime",
			Handler:       _RuntimeDiscoveryService_StreamRuntime_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
		{
			StreamName:    "DeltaRuntime",
			Handler:       _RuntimeDiscoveryService_DeltaRuntime_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
	},
	Metadata: "envoy/service/discovery/v2/rtds.proto",
}
   07070100000155000081A4000003E800000064000000015E17A24700002E34000000000000000000000000000000000000003E00000000cilium-proxy-20200109/go/envoy/service/discovery/v2/sds.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/service/discovery/v2/sds.proto

package envoy_service_discovery_v2

import (
	context "context"
	fmt "fmt"
	v2 "github.com/cilium/proxy/go/envoy/api/v2"
	proto "github.com/golang/protobuf/proto"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#not-implemented-hide:] Not configuration. Workaround c++ protobuf issue with importing
// services: https://github.com/google/protobuf/issues/4221
type SdsDummy struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *SdsDummy) Reset()         { *m = SdsDummy{} }
func (m *SdsDummy) String() string { return proto.CompactTextString(m) }
func (*SdsDummy) ProtoMessage()    {}
func (*SdsDummy) Descriptor() ([]byte, []int) {
	return fileDescriptor_f2a4da2e99d9a3e6, []int{0}
}

func (m *SdsDummy) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_SdsDummy.Unmarshal(m, b)
}
func (m *SdsDummy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_SdsDummy.Marshal(b, m, deterministic)
}
func (m *SdsDummy) XXX_Merge(src proto.Message) {
	xxx_messageInfo_SdsDummy.Merge(m, src)
}
func (m *SdsDummy) XXX_Size() int {
	return xxx_messageInfo_SdsDummy.Size(m)
}
func (m *SdsDummy) XXX_DiscardUnknown() {
	xxx_messageInfo_SdsDummy.DiscardUnknown(m)
}

var xxx_messageInfo_SdsDummy proto.InternalMessageInfo

func init() {
	proto.RegisterType((*SdsDummy)(nil), "envoy.service.discovery.v2.SdsDummy")
}

func init() {
	proto.RegisterFile("envoy/service/discovery/v2/sds.proto", fileDescriptor_f2a4da2e99d9a3e6)
}

var fileDescriptor_f2a4da2e99d9a3e6 = []byte{
	// 276 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x91, 0xb1, 0x4e, 0xc3, 0x30,
	0x14, 0x45, 0x71, 0x07, 0x84, 0xac, 0xb2, 0x44, 0x82, 0x21, 0xaa, 0x00, 0x85, 0x0e, 0x15, 0x83,
	0x83, 0xc2, 0x44, 0xc7, 0x2a, 0x62, 0xae, 0x88, 0xc4, 0x8a, 0x4c, 0xf2, 0x54, 0x2c, 0x35, 0x79,
	0xae, 0x9f, 0x6b, 0x91, 0x95, 0x89, 0x9d, 0x5f, 0xe2, 0x0f, 0xf8, 0x05, 0x3e, 0x04, 0xc5, 0x6e,
	0x8b, 0x5a, 0xa9, 0x4c, 0x9d, 0xcf, 0xbd, 0xc7, 0xd6, 0xbb, 0x7c, 0x08, 0x8d, 0xc3, 0x36, 0x25,
	0x30, 0x4e, 0x95, 0x90, 0x56, 0x8a, 0x4a, 0x74, 0x60, 0xda, 0xd4, 0x65, 0x29, 0x55, 0x24, 0xb4,
	0x41, 0x8b, 0x51, 0xec, 0x53, 0x62, 0x95, 0x12, 0x9b, 0x94, 0x70, 0x59, 0x3c, 0x08, 0x06, 0xa9,
	0x55, 0xd7, 0xf9, 0x43, 0xbe, 0x19, 0x0f, 0x66, 0x88, 0xb3, 0x39, 0x78, 0x2c, 0x9b, 0x06, 0xad,
	0xb4, 0x0a, 0x9b, 0x95, 0x37, 0xe1, 0xfc, 0xa4, 0xa8, 0x28, 0x5f, 0xd6, 0x75, 0x9b, 0x7d, 0xf5,
	0xf8, 0x79, 0x01, 0xa5, 0x01, 0x9b, 0xaf, 0x1d, 0x45, 0x78, 0x2f, 0x7a, 0xe6, 0xfd, 0x1c, 0xe6,
	0x56, 0x06, 0x4c, 0xd1, 0xb5, 0x08, 0xff, 0x91, 0x5a, 0x09, 0x97, 0x09, 0xcf, 0x36, 0xa5, 0x47,
	0x58, 0x2c, 0x81, 0x6c, 0x3c, 0xfc, 0x3f, 0x44, 0x1a, 0x1b, 0x82, 0xe4, 0x68, 0xc4, 0x6e, 0x59,
	0xf4, 0xc4, 0x4f, 0x0b, 0x6b, 0x40, 0xd6, 0xeb, 0x17, 0x2e, 0x76, 0xca, 0xbb, 0xf2, 0xcb, 0xbd,
	0x7c, 0xcb, 0xbb, 0xe0, 0xfd, 0x07, 0xb0, 0xe5, 0xeb, 0xc1, 0xb4, 0x57, 0xef, 0xdf, 0x3f, 0x9f,
	0xbd, 0x38, 0x39, 0xdb, 0xba, 0xf5, 0x98, 0x82, 0x7f, 0xcc, 0x6e, 0x26, 0xf7, 0x7c, 0xa4, 0x30,
	0x68, 0xb4, 0xc1, 0xb7, 0x56, 0xec, 0x9f, 0x6e, 0xd2, 0x1d, 0x7f, 0xda, 0x0d, 0x31, 0x65, 0x1f,
	0x8c, 0xbd, 0x1c, 0xfb, 0x51, 0xee, 0x7e, 0x03, 0x00, 0x00, 0xff, 0xff, 0x24, 0xb9, 0x4e, 0x92,
	0x14, 0x02, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// SecretDiscoveryServiceClient is the client API for SecretDiscoveryService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type SecretDiscoveryServiceClient interface {
	DeltaSecrets(ctx context.Context, opts ...grpc.CallOption) (SecretDiscoveryService_DeltaSecretsClient, error)
	StreamSecrets(ctx context.Context, opts ...grpc.CallOption) (SecretDiscoveryService_StreamSecretsClient, error)
	FetchSecrets(ctx context.Context, in *v2.DiscoveryRequest, opts ...grpc.CallOption) (*v2.DiscoveryResponse, error)
}

type secretDiscoveryServiceClient struct {
	cc *grpc.ClientConn
}

func NewSecretDiscoveryServiceClient(cc *grpc.ClientConn) SecretDiscoveryServiceClient {
	return &secretDiscoveryServiceClient{cc}
}

func (c *secretDiscoveryServiceClient) DeltaSecrets(ctx context.Context, opts ...grpc.CallOption) (SecretDiscoveryService_DeltaSecretsClient, error) {
	stream, err := c.cc.NewStream(ctx, &_SecretDiscoveryService_serviceDesc.Streams[0], "/envoy.service.discovery.v2.SecretDiscoveryService/DeltaSecrets", opts...)
	if err != nil {
		return nil, err
	}
	x := &secretDiscoveryServiceDeltaSecretsClient{stream}
	return x, nil
}

type SecretDiscoveryService_DeltaSecretsClient interface {
	Send(*v2.DeltaDiscoveryRequest) error
	Recv() (*v2.DeltaDiscoveryResponse, error)
	grpc.ClientStream
}

type secretDiscoveryServiceDeltaSecretsClient struct {
	grpc.ClientStream
}

func (x *secretDiscoveryServiceDeltaSecretsClient) Send(m *v2.DeltaDiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *secretDiscoveryServiceDeltaSecretsClient) Recv() (*v2.DeltaDiscoveryResponse, error) {
	m := new(v2.DeltaDiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *secretDiscoveryServiceClient) StreamSecrets(ctx context.Context, opts ...grpc.CallOption) (SecretDiscoveryService_StreamSecretsClient, error) {
	stream, err := c.cc.NewStream(ctx, &_SecretDiscoveryService_serviceDesc.Streams[1], "/envoy.service.discovery.v2.SecretDiscoveryService/StreamSecrets", opts...)
	if err != nil {
		return nil, err
	}
	x := &secretDiscoveryServiceStreamSecretsClient{stream}
	return x, nil
}

type SecretDiscoveryService_StreamSecretsClient interface {
	Send(*v2.DiscoveryRequest) error
	Recv() (*v2.DiscoveryResponse, error)
	grpc.ClientStream
}

type secretDiscoveryServiceStreamSecretsClient struct {
	grpc.ClientStream
}

func (x *secretDiscoveryServiceStreamSecretsClient) Send(m *v2.DiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *secretDiscoveryServiceStreamSecretsClient) Recv() (*v2.DiscoveryResponse, error) {
	m := new(v2.DiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *secretDiscoveryServiceClient) FetchSecrets(ctx context.Context, in *v2.DiscoveryRequest, opts ...grpc.CallOption) (*v2.DiscoveryResponse, error) {
	out := new(v2.DiscoveryResponse)
	err := c.cc.Invoke(ctx, "/envoy.service.discovery.v2.SecretDiscoveryService/FetchSecrets", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// SecretDiscoveryServiceServer is the server API for SecretDiscoveryService service.
type SecretDiscoveryServiceServer interface {
	DeltaSecrets(SecretDiscoveryService_DeltaSecretsServer) error
	StreamSecrets(SecretDiscoveryService_StreamSecretsServer) error
	FetchSecrets(context.Context, *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error)
}

// UnimplementedSecretDiscoveryServiceServer can be embedded to have forward compatible implementations.
type UnimplementedSecretDiscoveryServiceServer struct {
}

func (*UnimplementedSecretDiscoveryServiceServer) DeltaSecrets(srv SecretDiscoveryService_DeltaSecretsServer) error {
	return status.Errorf(codes.Unimplemented, "method DeltaSecrets not implemented")
}
func (*UnimplementedSecretDiscoveryServiceServer) StreamSecrets(srv SecretDiscoveryService_StreamSecretsServer) error {
	return status.Errorf(codes.Unimplemented, "method StreamSecrets not implemented")
}
func (*UnimplementedSecretDiscoveryServiceServer) FetchSecrets(ctx context.Context, req *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method FetchSecrets not implemented")
}

func RegisterSecretDiscoveryServiceServer(s *grpc.Server, srv SecretDiscoveryServiceServer) {
	s.RegisterService(&_SecretDiscoveryService_serviceDesc, srv)
}

func _SecretDiscoveryService_DeltaSecrets_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(SecretDiscoveryServiceServer).DeltaSecrets(&secretDiscoveryServiceDeltaSecretsServer{stream})
}

type SecretDiscoveryService_DeltaSecretsServer interface {
	Send(*v2.DeltaDiscoveryResponse) error
	Recv() (*v2.DeltaDiscoveryRequest, error)
	grpc.ServerStream
}

type secretDiscoveryServiceDeltaSecretsServer struct {
	grpc.ServerStream
}

func (x *secretDiscoveryServiceDeltaSecretsServer) Send(m *v2.DeltaDiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *secretDiscoveryServiceDeltaSecretsServer) Recv() (*v2.DeltaDiscoveryRequest, error) {
	m := new(v2.DeltaDiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _SecretDiscoveryService_StreamSecrets_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(SecretDiscoveryServiceServer).StreamSecrets(&secretDiscoveryServiceStreamSecretsServer{stream})
}

type SecretDiscoveryService_StreamSecretsServer interface {
	Send(*v2.DiscoveryResponse) error
	Recv() (*v2.DiscoveryRequest, error)
	grpc.ServerStream
}

type secretDiscoveryServiceStreamSecretsServer struct {
	grpc.ServerStream
}

func (x *secretDiscoveryServiceStreamSecretsServer) Send(m *v2.DiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *secretDiscoveryServiceStreamSecretsServer) Recv() (*v2.DiscoveryRequest, error) {
	m := new(v2.DiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _SecretDiscoveryService_FetchSecrets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(v2.DiscoveryRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(SecretDiscoveryServiceServer).FetchSecrets(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/envoy.service.discovery.v2.SecretDiscoveryService/FetchSecrets",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(SecretDiscoveryServiceServer).FetchSecrets(ctx, req.(*v2.DiscoveryRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _SecretDiscoveryService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.service.discovery.v2.SecretDiscoveryService",
	HandlerType: (*SecretDiscoveryServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "FetchSecrets",
			Handler:    _SecretDiscoveryService_FetchSecrets_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "DeltaSecrets",
			Handler:       _SecretDiscoveryService_DeltaSecrets_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
		{
			StreamName:    "StreamSecrets",
			Handler:       _SecretDiscoveryService_StreamSecrets_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
	},
	Metadata: "envoy/service/discovery/v2/sds.proto",
}
07070100000156000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003200000000cilium-proxy-20200109/go/envoy/service/load_stats 07070100000157000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003500000000cilium-proxy-20200109/go/envoy/service/load_stats/v2  07070100000158000081A4000003E800000064000000015E17A24700003E81000000000000000000000000000000000000003F00000000cilium-proxy-20200109/go/envoy/service/load_stats/v2/lrs.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/service/load_stats/v2/lrs.proto

package envoy_service_load_stats_v2

import (
	context "context"
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	endpoint "github.com/cilium/proxy/go/envoy/api/v2/endpoint"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// A load report Envoy sends to the management server.
// [#not-implemented-hide:] Not configuration. TBD how to doc proto APIs.
type LoadStatsRequest struct {
	// Node identifier for Envoy instance.
	Node *core.Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"`
	// A list of load stats to report.
	ClusterStats         []*endpoint.ClusterStats `protobuf:"bytes,2,rep,name=cluster_stats,json=clusterStats,proto3" json:"cluster_stats,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
	XXX_unrecognized     []byte                   `json:"-"`
	XXX_sizecache        int32                    `json:"-"`
}

func (m *LoadStatsRequest) Reset()         { *m = LoadStatsRequest{} }
func (m *LoadStatsRequest) String() string { return proto.CompactTextString(m) }
func (*LoadStatsRequest) ProtoMessage()    {}
func (*LoadStatsRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_cd7332d279836518, []int{0}
}

func (m *LoadStatsRequest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_LoadStatsRequest.Unmarshal(m, b)
}
func (m *LoadStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_LoadStatsRequest.Marshal(b, m, deterministic)
}
func (m *LoadStatsRequest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_LoadStatsRequest.Merge(m, src)
}
func (m *LoadStatsRequest) XXX_Size() int {
	return xxx_messageInfo_LoadStatsRequest.Size(m)
}
func (m *LoadStatsRequest) XXX_DiscardUnknown() {
	xxx_messageInfo_LoadStatsRequest.DiscardUnknown(m)
}

var xxx_messageInfo_LoadStatsRequest proto.InternalMessageInfo

func (m *LoadStatsRequest) GetNode() *core.Node {
	if m != nil {
		return m.Node
	}
	return nil
}

func (m *LoadStatsRequest) GetClusterStats() []*endpoint.ClusterStats {
	if m != nil {
		return m.ClusterStats
	}
	return nil
}

// The management server sends envoy a LoadStatsResponse with all clusters it
// is interested in learning load stats about.
// [#not-implemented-hide:] Not configuration. TBD how to doc proto APIs.
type LoadStatsResponse struct {
	// Clusters to report stats for.
	Clusters []string `protobuf:"bytes,1,rep,name=clusters,proto3" json:"clusters,omitempty"`
	// The minimum interval of time to collect stats over. This is only a minimum for two reasons:
	// 1. There may be some delay from when the timer fires until stats sampling occurs.
	// 2. For clusters that were already feature in the previous *LoadStatsResponse*, any traffic
	//    that is observed in between the corresponding previous *LoadStatsRequest* and this
	//    *LoadStatsResponse* will also be accumulated and billed to the cluster. This avoids a period
	//    of inobservability that might otherwise exists between the messages. New clusters are not
	//    subject to this consideration.
	LoadReportingInterval *duration.Duration `protobuf:"bytes,2,opt,name=load_reporting_interval,json=loadReportingInterval,proto3" json:"load_reporting_interval,omitempty"`
	// Set to *true* if the management server supports endpoint granularity
	// report.
	ReportEndpointGranularity bool     `protobuf:"varint,3,opt,name=report_endpoint_granularity,json=reportEndpointGranularity,proto3" json:"report_endpoint_granularity,omitempty"`
	XXX_NoUnkeyedLiteral      struct{} `json:"-"`
	XXX_unrecognized          []byte   `json:"-"`
	XXX_sizecache             int32    `json:"-"`
}

func (m *LoadStatsResponse) Reset()         { *m = LoadStatsResponse{} }
func (m *LoadStatsResponse) String() string { return proto.CompactTextString(m) }
func (*LoadStatsResponse) ProtoMessage()    {}
func (*LoadStatsResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_cd7332d279836518, []int{1}
}

func (m *LoadStatsResponse) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_LoadStatsResponse.Unmarshal(m, b)
}
func (m *LoadStatsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_LoadStatsResponse.Marshal(b, m, deterministic)
}
func (m *LoadStatsResponse) XXX_Merge(src proto.Message) {
	xxx_messageInfo_LoadStatsResponse.Merge(m, src)
}
func (m *LoadStatsResponse) XXX_Size() int {
	return xxx_messageInfo_LoadStatsResponse.Size(m)
}
func (m *LoadStatsResponse) XXX_DiscardUnknown() {
	xxx_messageInfo_LoadStatsResponse.DiscardUnknown(m)
}

var xxx_messageInfo_LoadStatsResponse proto.InternalMessageInfo

func (m *LoadStatsResponse) GetClusters() []string {
	if m != nil {
		return m.Clusters
	}
	return nil
}

func (m *LoadStatsResponse) GetLoadReportingInterval() *duration.Duration {
	if m != nil {
		return m.LoadReportingInterval
	}
	return nil
}

func (m *LoadStatsResponse) GetReportEndpointGranularity() bool {
	if m != nil {
		return m.ReportEndpointGranularity
	}
	return false
}

func init() {
	proto.RegisterType((*LoadStatsRequest)(nil), "envoy.service.load_stats.v2.LoadStatsRequest")
	proto.RegisterType((*LoadStatsResponse)(nil), "envoy.service.load_stats.v2.LoadStatsResponse")
}

func init() {
	proto.RegisterFile("envoy/service/load_stats/v2/lrs.proto", fileDescriptor_cd7332d279836518)
}

var fileDescriptor_cd7332d279836518 = []byte{
	// 420 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xc1, 0x8e, 0xd3, 0x30,
	0x14, 0x45, 0x71, 0x0b, 0x28, 0x78, 0x40, 0x80, 0x05, 0x6a, 0xa6, 0x83, 0x50, 0x55, 0x40, 0x04,
	0x21, 0x6c, 0x14, 0x76, 0x2c, 0x58, 0x14, 0x10, 0x20, 0x55, 0x68, 0x48, 0x3f, 0xa0, 0x72, 0x93,
	0x47, 0x64, 0x29, 0xf8, 0x05, 0xdb, 0xb1, 0xe8, 0x1f, 0xc0, 0x86, 0x05, 0xdf, 0xc5, 0x17, 0xb1,
	0x42, 0x89, 0x93, 0x99, 0x0c, 0x8b, 0x8a, 0x5d, 0xac, 0x77, 0xee, 0xf3, 0xbd, 0x37, 0xa6, 0x8f,
	0x40, 0x7b, 0xdc, 0x0b, 0x0b, 0xc6, 0xab, 0x1c, 0x44, 0x85, 0xb2, 0xd8, 0x5a, 0x27, 0x9d, 0x15,
	0x3e, 0x15, 0x95, 0xb1, 0xbc, 0x36, 0xe8, 0x90, 0x9d, 0x74, 0x18, 0xef, 0x31, 0x7e, 0x8e, 0x71,
	0x9f, 0xce, 0xef, 0x85, 0x1d, 0xb2, 0x56, 0xad, 0x28, 0x47, 0x03, 0x62, 0x27, 0x2d, 0x04, 0xe9,
	0xfc, 0xf1, 0x85, 0x29, 0xe8, 0xa2, 0x46, 0xa5, 0x5d, 0xb8, 0xc9, 0x40, 0x8d, 0xc6, 0xf5, 0xe0,
	0xfd, 0x12, 0xb1, 0xac, 0x40, 0x74, 0xa7, 0x5d, 0xf3, 0x59, 0x14, 0x8d, 0x91, 0x4e, 0xa1, 0xee,
	0xe7, 0x33, 0x2f, 0x2b, 0x55, 0x48, 0x07, 0x62, 0xf8, 0x08, 0x83, 0xe5, 0x0f, 0x42, 0x6f, 0xad,
	0x51, 0x16, 0x9b, 0xd6, 0x50, 0x06, 0x5f, 0x1b, 0xb0, 0x8e, 0x3d, 0xa5, 0x97, 0x35, 0x16, 0x10,
	0x93, 0x05, 0x49, 0x8e, 0xd2, 0x19, 0x0f, 0x01, 0x64, 0xad, 0xb8, 0x4f, 0x79, 0xeb, 0x91, 0x7f,
	0xc4, 0x02, 0xb2, 0x0e, 0x62, 0xef, 0xe9, 0x8d, 0xbc, 0x6a, 0xac, 0x03, 0x13, 0x52, 0xc5, 0x93,
	0xc5, 0x34, 0x39, 0x4a, 0x1f, 0x5c, 0x54, 0x0d, 0xde, 0xf9, 0xeb, 0xc0, 0x86, 0xfb, 0xae, 0xe7,
	0xa3, 0xd3, 0xf2, 0x37, 0xa1, 0xb7, 0x47, 0x5e, 0x6c, 0x8d, 0xda, 0x02, 0x7b, 0x48, 0xa3, 0x9e,
	0xb2, 0x31, 0x59, 0x4c, 0x93, 0x6b, 0xab, 0xe8, 0xcf, 0xea, 0xca, 0x2f, 0x32, 0x89, 0x48, 0x76,
	0x36, 0x61, 0x9f, 0xe8, 0x6c, 0xd4, 0x8a, 0xd2, 0xe5, 0x56, 0x69, 0x07, 0xc6, 0xcb, 0x2a, 0x9e,
	0x74, 0x29, 0x8e, 0x79, 0xa8, 0x88, 0x0f, 0x15, 0xf1, 0x37, 0x7d, 0x45, 0xd9, 0xdd, 0x56, 0x99,
	0x0d, 0xc2, 0x0f, 0xbd, 0x8e, 0xbd, 0xa2, 0x27, 0x61, 0xdb, 0x76, 0x30, 0xbf, 0x2d, 0x8d, 0xd4,
	0x4d, 0x25, 0x8d, 0x72, 0xfb, 0x78, 0xba, 0x20, 0x49, 0x94, 0x1d, 0x07, 0xe4, 0x6d, 0x4f, 0xbc,
	0x3b, 0x07, 0xd2, 0x9f, 0x84, 0xde, 0x59, 0x8f, 0x37, 0x6f, 0xc2, 0x0b, 0x60, 0x9e, 0xde, 0xdc,
	0x38, 0x03, 0xf2, 0xcb, 0x59, 0x58, 0xf6, 0x8c, 0x1f, 0x78, 0x24, 0xfc, 0xdf, 0x1f, 0x34, 0xe7,
	0xff, 0x8b, 0x87, 0x0e, 0x97, 0x97, 0x12, 0xf2, 0x9c, 0xac, 0x5e, 0xd2, 0x27, 0x0a, 0x83, 0xb2,
	0x36, 0xf8, 0x6d, 0x7f, 0x68, 0xc9, 0x2a, 0x5a, 0x1b, 0x7b, 0xda, 0x56, 0x75, 0x4a, 0xbe, 0x13,
	0xb2, 0xbb, 0xda, 0xd5, 0xf6, 0xe2, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5b, 0x0e, 0xc0, 0x25,
	0xf4, 0x02, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// LoadReportingServiceClient is the client API for LoadReportingService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type LoadReportingServiceClient interface {
	// Advanced API to allow for multi-dimensional load balancing by remote
	// server. For receiving LB assignments, the steps are:
	// 1, The management server is configured with per cluster/zone/load metric
	//    capacity configuration. The capacity configuration definition is
	//    outside of the scope of this document.
	// 2. Envoy issues a standard {Stream,Fetch}Endpoints request for the clusters
	//    to balance.
	//
	// Independently, Envoy will initiate a StreamLoadStats bidi stream with a
	// management server:
	// 1. Once a connection establishes, the management server publishes a
	//    LoadStatsResponse for all clusters it is interested in learning load
	//    stats about.
	// 2. For each cluster, Envoy load balances incoming traffic to upstream hosts
	//    based on per-zone weights and/or per-instance weights (if specified)
	//    based on intra-zone LbPolicy. This information comes from the above
	//    {Stream,Fetch}Endpoints.
	// 3. When upstream hosts reply, they optionally add header <define header
	//    name> with ASCII representation of EndpointLoadMetricStats.
	// 4. Envoy aggregates load reports over the period of time given to it in
	//    LoadStatsResponse.load_reporting_interval. This includes aggregation
	//    stats Envoy maintains by itself (total_requests, rpc_errors etc.) as
	//    well as load metrics from upstream hosts.
	// 5. When the timer of load_reporting_interval expires, Envoy sends new
	//    LoadStatsRequest filled with load reports for each cluster.
	// 6. The management server uses the load reports from all reported Envoys
	//    from around the world, computes global assignment and prepares traffic
	//    assignment destined for each zone Envoys are located in. Goto 2.
	StreamLoadStats(ctx context.Context, opts ...grpc.CallOption) (LoadReportingService_StreamLoadStatsClient, error)
}

type loadReportingServiceClient struct {
	cc *grpc.ClientConn
}

func NewLoadReportingServiceClient(cc *grpc.ClientConn) LoadReportingServiceClient {
	return &loadReportingServiceClient{cc}
}

func (c *loadReportingServiceClient) StreamLoadStats(ctx context.Context, opts ...grpc.CallOption) (LoadReportingService_StreamLoadStatsClient, error) {
	stream, err := c.cc.NewStream(ctx, &_LoadReportingService_serviceDesc.Streams[0], "/envoy.service.load_stats.v2.LoadReportingService/StreamLoadStats", opts...)
	if err != nil {
		return nil, err
	}
	x := &loadReportingServiceStreamLoadStatsClient{stream}
	return x, nil
}

type LoadReportingService_StreamLoadStatsClient interface {
	Send(*LoadStatsRequest) error
	Recv() (*LoadStatsResponse, error)
	grpc.ClientStream
}

type loadReportingServiceStreamLoadStatsClient struct {
	grpc.ClientStream
}

func (x *loadReportingServiceStreamLoadStatsClient) Send(m *LoadStatsRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *loadReportingServiceStreamLoadStatsClient) Recv() (*LoadStatsResponse, error) {
	m := new(LoadStatsResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

// LoadReportingServiceServer is the server API for LoadReportingService service.
type LoadReportingServiceServer interface {
	// Advanced API to allow for multi-dimensional load balancing by remote
	// server. For receiving LB assignments, the steps are:
	// 1, The management server is configured with per cluster/zone/load metric
	//    capacity configuration. The capacity configuration definition is
	//    outside of the scope of this document.
	// 2. Envoy issues a standard {Stream,Fetch}Endpoints request for the clusters
	//    to balance.
	//
	// Independently, Envoy will initiate a StreamLoadStats bidi stream with a
	// management server:
	// 1. Once a connection establishes, the management server publishes a
	//    LoadStatsResponse for all clusters it is interested in learning load
	//    stats about.
	// 2. For each cluster, Envoy load balances incoming traffic to upstream hosts
	//    based on per-zone weights and/or per-instance weights (if specified)
	//    based on intra-zone LbPolicy. This information comes from the above
	//    {Stream,Fetch}Endpoints.
	// 3. When upstream hosts reply, they optionally add header <define header
	//    name> with ASCII representation of EndpointLoadMetricStats.
	// 4. Envoy aggregates load reports over the period of time given to it in
	//    LoadStatsResponse.load_reporting_interval. This includes aggregation
	//    stats Envoy maintains by itself (total_requests, rpc_errors etc.) as
	//    well as load metrics from upstream hosts.
	// 5. When the timer of load_reporting_interval expires, Envoy sends new
	//    LoadStatsRequest filled with load reports for each cluster.
	// 6. The management server uses the load reports from all reported Envoys
	//    from around the world, computes global assignment and prepares traffic
	//    assignment destined for each zone Envoys are located in. Goto 2.
	StreamLoadStats(LoadReportingService_StreamLoadStatsServer) error
}

// UnimplementedLoadReportingServiceServer can be embedded to have forward compatible implementations.
type UnimplementedLoadReportingServiceServer struct {
}

func (*UnimplementedLoadReportingServiceServer) StreamLoadStats(srv LoadReportingService_StreamLoadStatsServer) error {
	return status.Errorf(codes.Unimplemented, "method StreamLoadStats not implemented")
}

func RegisterLoadReportingServiceServer(s *grpc.Server, srv LoadReportingServiceServer) {
	s.RegisterService(&_LoadReportingService_serviceDesc, srv)
}

func _LoadReportingService_StreamLoadStats_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(LoadReportingServiceServer).StreamLoadStats(&loadReportingServiceStreamLoadStatsServer{stream})
}

type LoadReportingService_StreamLoadStatsServer interface {
	Send(*LoadStatsResponse) error
	Recv() (*LoadStatsRequest, error)
	grpc.ServerStream
}

type loadReportingServiceStreamLoadStatsServer struct {
	grpc.ServerStream
}

func (x *loadReportingServiceStreamLoadStatsServer) Send(m *LoadStatsResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *loadReportingServiceStreamLoadStatsServer) Recv() (*LoadStatsRequest, error) {
	m := new(LoadStatsRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

var _LoadReportingService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.service.load_stats.v2.LoadReportingService",
	HandlerType: (*LoadReportingServiceServer)(nil),
	Methods:     []grpc.MethodDesc{},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "StreamLoadStats",
			Handler:       _LoadReportingService_StreamLoadStats_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
	},
	Metadata: "envoy/service/load_stats/v2/lrs.proto",
}
   07070100000159000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000003100000000cilium-proxy-20200109/go/envoy/service/ratelimit  0707010000015A000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003400000000cilium-proxy-20200109/go/envoy/service/ratelimit/v2   0707010000015B000081A4000003E800000064000000015E17A2470000528E000000000000000000000000000000000000003E00000000cilium-proxy-20200109/go/envoy/service/ratelimit/v2/rls.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/service/ratelimit/v2/rls.proto

package envoy_service_ratelimit_v2

import (
	context "context"
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	ratelimit "github.com/cilium/proxy/go/envoy/api/v2/ratelimit"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type RateLimitResponse_Code int32

const (
	// The response code is not known.
	RateLimitResponse_UNKNOWN RateLimitResponse_Code = 0
	// The response code to notify that the number of requests are under limit.
	RateLimitResponse_OK RateLimitResponse_Code = 1
	// The response code to notify that the number of requests are over limit.
	RateLimitResponse_OVER_LIMIT RateLimitResponse_Code = 2
)

var RateLimitResponse_Code_name = map[int32]string{
	0: "UNKNOWN",
	1: "OK",
	2: "OVER_LIMIT",
}

var RateLimitResponse_Code_value = map[string]int32{
	"UNKNOWN":    0,
	"OK":         1,
	"OVER_LIMIT": 2,
}

func (x RateLimitResponse_Code) String() string {
	return proto.EnumName(RateLimitResponse_Code_name, int32(x))
}

func (RateLimitResponse_Code) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_1de95711edb19ee8, []int{1, 0}
}

type RateLimitResponse_RateLimit_Unit int32

const (
	// The time unit is not known.
	RateLimitResponse_RateLimit_UNKNOWN RateLimitResponse_RateLimit_Unit = 0
	// The time unit representing a second.
	RateLimitResponse_RateLimit_SECOND RateLimitResponse_RateLimit_Unit = 1
	// The time unit representing a minute.
	RateLimitResponse_RateLimit_MINUTE RateLimitResponse_RateLimit_Unit = 2
	// The time unit representing an hour.
	RateLimitResponse_RateLimit_HOUR RateLimitResponse_RateLimit_Unit = 3
	// The time unit representing a day.
	RateLimitResponse_RateLimit_DAY RateLimitResponse_RateLimit_Unit = 4
)

var RateLimitResponse_RateLimit_Unit_name = map[int32]string{
	0: "UNKNOWN",
	1: "SECOND",
	2: "MINUTE",
	3: "HOUR",
	4: "DAY",
}

var RateLimitResponse_RateLimit_Unit_value = map[string]int32{
	"UNKNOWN": 0,
	"SECOND":  1,
	"MINUTE":  2,
	"HOUR":    3,
	"DAY":     4,
}

func (x RateLimitResponse_RateLimit_Unit) String() string {
	return proto.EnumName(RateLimitResponse_RateLimit_Unit_name, int32(x))
}

func (RateLimitResponse_RateLimit_Unit) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_1de95711edb19ee8, []int{1, 0, 0}
}

// Main message for a rate limit request. The rate limit service is designed to be fully generic
// in the sense that it can operate on arbitrary hierarchical key/value pairs. The loaded
// configuration will parse the request and find the most specific limit to apply. In addition,
// a RateLimitRequest can contain multiple "descriptors" to limit on. When multiple descriptors
// are provided, the server will limit on *ALL* of them and return an OVER_LIMIT response if any
// of them are over limit. This enables more complex application level rate limiting scenarios
// if desired.
type RateLimitRequest struct {
	// All rate limit requests must specify a domain. This enables the configuration to be per
	// application without fear of overlap. E.g., "envoy".
	Domain string `protobuf:"bytes,1,opt,name=domain,proto3" json:"domain,omitempty"`
	// All rate limit requests must specify at least one RateLimitDescriptor. Each descriptor is
	// processed by the service (see below). If any of the descriptors are over limit, the entire
	// request is considered to be over limit.
	Descriptors []*ratelimit.RateLimitDescriptor `protobuf:"bytes,2,rep,name=descriptors,proto3" json:"descriptors,omitempty"`
	// Rate limit requests can optionally specify the number of hits a request adds to the matched
	// limit. If the value is not set in the message, a request increases the matched limit by 1.
	HitsAddend           uint32   `protobuf:"varint,3,opt,name=hits_addend,json=hitsAddend,proto3" json:"hits_addend,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RateLimitRequest) Reset()         { *m = RateLimitRequest{} }
func (m *RateLimitRequest) String() string { return proto.CompactTextString(m) }
func (*RateLimitRequest) ProtoMessage()    {}
func (*RateLimitRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_1de95711edb19ee8, []int{0}
}

func (m *RateLimitRequest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimitRequest.Unmarshal(m, b)
}
func (m *RateLimitRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimitRequest.Marshal(b, m, deterministic)
}
func (m *RateLimitRequest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimitRequest.Merge(m, src)
}
func (m *RateLimitRequest) XXX_Size() int {
	return xxx_messageInfo_RateLimitRequest.Size(m)
}
func (m *RateLimitRequest) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimitRequest.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimitRequest proto.InternalMessageInfo

func (m *RateLimitRequest) GetDomain() string {
	if m != nil {
		return m.Domain
	}
	return ""
}

func (m *RateLimitRequest) GetDescriptors() []*ratelimit.RateLimitDescriptor {
	if m != nil {
		return m.Descriptors
	}
	return nil
}

func (m *RateLimitRequest) GetHitsAddend() uint32 {
	if m != nil {
		return m.HitsAddend
	}
	return 0
}

// A response from a ShouldRateLimit call.
type RateLimitResponse struct {
	// The overall response code which takes into account all of the descriptors that were passed
	// in the RateLimitRequest message.
	OverallCode RateLimitResponse_Code `protobuf:"varint,1,opt,name=overall_code,json=overallCode,proto3,enum=envoy.service.ratelimit.v2.RateLimitResponse_Code" json:"overall_code,omitempty"`
	// A list of DescriptorStatus messages which matches the length of the descriptor list passed
	// in the RateLimitRequest. This can be used by the caller to determine which individual
	// descriptors failed and/or what the currently configured limits are for all of them.
	Statuses []*RateLimitResponse_DescriptorStatus `protobuf:"bytes,2,rep,name=statuses,proto3" json:"statuses,omitempty"`
	// A list of headers to add to the response
	// [#next-major-version: rename to response_headers_to_add]
	Headers []*core.HeaderValue `protobuf:"bytes,3,rep,name=headers,proto3" json:"headers,omitempty"`
	// A list of headers to add to the request when forwarded
	RequestHeadersToAdd  []*core.HeaderValue `protobuf:"bytes,4,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *RateLimitResponse) Reset()         { *m = RateLimitResponse{} }
func (m *RateLimitResponse) String() string { return proto.CompactTextString(m) }
func (*RateLimitResponse) ProtoMessage()    {}
func (*RateLimitResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_1de95711edb19ee8, []int{1}
}

func (m *RateLimitResponse) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimitResponse.Unmarshal(m, b)
}
func (m *RateLimitResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimitResponse.Marshal(b, m, deterministic)
}
func (m *RateLimitResponse) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimitResponse.Merge(m, src)
}
func (m *RateLimitResponse) XXX_Size() int {
	return xxx_messageInfo_RateLimitResponse.Size(m)
}
func (m *RateLimitResponse) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimitResponse.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimitResponse proto.InternalMessageInfo

func (m *RateLimitResponse) GetOverallCode() RateLimitResponse_Code {
	if m != nil {
		return m.OverallCode
	}
	return RateLimitResponse_UNKNOWN
}

func (m *RateLimitResponse) GetStatuses() []*RateLimitResponse_DescriptorStatus {
	if m != nil {
		return m.Statuses
	}
	return nil
}

func (m *RateLimitResponse) GetHeaders() []*core.HeaderValue {
	if m != nil {
		return m.Headers
	}
	return nil
}

func (m *RateLimitResponse) GetRequestHeadersToAdd() []*core.HeaderValue {
	if m != nil {
		return m.RequestHeadersToAdd
	}
	return nil
}

// Defines an actual rate limit in terms of requests per unit of time and the unit itself.
type RateLimitResponse_RateLimit struct {
	// The number of requests per unit of time.
	RequestsPerUnit uint32 `protobuf:"varint,1,opt,name=requests_per_unit,json=requestsPerUnit,proto3" json:"requests_per_unit,omitempty"`
	// The unit of time.
	Unit                 RateLimitResponse_RateLimit_Unit `protobuf:"varint,2,opt,name=unit,proto3,enum=envoy.service.ratelimit.v2.RateLimitResponse_RateLimit_Unit" json:"unit,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
	XXX_unrecognized     []byte                           `json:"-"`
	XXX_sizecache        int32                            `json:"-"`
}

func (m *RateLimitResponse_RateLimit) Reset()         { *m = RateLimitResponse_RateLimit{} }
func (m *RateLimitResponse_RateLimit) String() string { return proto.CompactTextString(m) }
func (*RateLimitResponse_RateLimit) ProtoMessage()    {}
func (*RateLimitResponse_RateLimit) Descriptor() ([]byte, []int) {
	return fileDescriptor_1de95711edb19ee8, []int{1, 0}
}

func (m *RateLimitResponse_RateLimit) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimitResponse_RateLimit.Unmarshal(m, b)
}
func (m *RateLimitResponse_RateLimit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimitResponse_RateLimit.Marshal(b, m, deterministic)
}
func (m *RateLimitResponse_RateLimit) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimitResponse_RateLimit.Merge(m, src)
}
func (m *RateLimitResponse_RateLimit) XXX_Size() int {
	return xxx_messageInfo_RateLimitResponse_RateLimit.Size(m)
}
func (m *RateLimitResponse_RateLimit) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimitResponse_RateLimit.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimitResponse_RateLimit proto.InternalMessageInfo

func (m *RateLimitResponse_RateLimit) GetRequestsPerUnit() uint32 {
	if m != nil {
		return m.RequestsPerUnit
	}
	return 0
}

func (m *RateLimitResponse_RateLimit) GetUnit() RateLimitResponse_RateLimit_Unit {
	if m != nil {
		return m.Unit
	}
	return RateLimitResponse_RateLimit_UNKNOWN
}

type RateLimitResponse_DescriptorStatus struct {
	// The response code for an individual descriptor.
	Code RateLimitResponse_Code `protobuf:"varint,1,opt,name=code,proto3,enum=envoy.service.ratelimit.v2.RateLimitResponse_Code" json:"code,omitempty"`
	// The current limit as configured by the server. Useful for debugging, etc.
	CurrentLimit *RateLimitResponse_RateLimit `protobuf:"bytes,2,opt,name=current_limit,json=currentLimit,proto3" json:"current_limit,omitempty"`
	// The limit remaining in the current time unit.
	LimitRemaining       uint32   `protobuf:"varint,3,opt,name=limit_remaining,json=limitRemaining,proto3" json:"limit_remaining,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RateLimitResponse_DescriptorStatus) Reset()         { *m = RateLimitResponse_DescriptorStatus{} }
func (m *RateLimitResponse_DescriptorStatus) String() string { return proto.CompactTextString(m) }
func (*RateLimitResponse_DescriptorStatus) ProtoMessage()    {}
func (*RateLimitResponse_DescriptorStatus) Descriptor() ([]byte, []int) {
	return fileDescriptor_1de95711edb19ee8, []int{1, 1}
}

func (m *RateLimitResponse_DescriptorStatus) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RateLimitResponse_DescriptorStatus.Unmarshal(m, b)
}
func (m *RateLimitResponse_DescriptorStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RateLimitResponse_DescriptorStatus.Marshal(b, m, deterministic)
}
func (m *RateLimitResponse_DescriptorStatus) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RateLimitResponse_DescriptorStatus.Merge(m, src)
}
func (m *RateLimitResponse_DescriptorStatus) XXX_Size() int {
	return xxx_messageInfo_RateLimitResponse_DescriptorStatus.Size(m)
}
func (m *RateLimitResponse_DescriptorStatus) XXX_DiscardUnknown() {
	xxx_messageInfo_RateLimitResponse_DescriptorStatus.DiscardUnknown(m)
}

var xxx_messageInfo_RateLimitResponse_DescriptorStatus proto.InternalMessageInfo

func (m *RateLimitResponse_DescriptorStatus) GetCode() RateLimitResponse_Code {
	if m != nil {
		return m.Code
	}
	return RateLimitResponse_UNKNOWN
}

func (m *RateLimitResponse_DescriptorStatus) GetCurrentLimit() *RateLimitResponse_RateLimit {
	if m != nil {
		return m.CurrentLimit
	}
	return nil
}

func (m *RateLimitResponse_DescriptorStatus) GetLimitRemaining() uint32 {
	if m != nil {
		return m.LimitRemaining
	}
	return 0
}

func init() {
	proto.RegisterEnum("envoy.service.ratelimit.v2.RateLimitResponse_Code", RateLimitResponse_Code_name, RateLimitResponse_Code_value)
	proto.RegisterEnum("envoy.service.ratelimit.v2.RateLimitResponse_RateLimit_Unit", RateLimitResponse_RateLimit_Unit_name, RateLimitResponse_RateLimit_Unit_value)
	proto.RegisterType((*RateLimitRequest)(nil), "envoy.service.ratelimit.v2.RateLimitRequest")
	proto.RegisterType((*RateLimitResponse)(nil), "envoy.service.ratelimit.v2.RateLimitResponse")
	proto.RegisterType((*RateLimitResponse_RateLimit)(nil), "envoy.service.ratelimit.v2.RateLimitResponse.RateLimit")
	proto.RegisterType((*RateLimitResponse_DescriptorStatus)(nil), "envoy.service.ratelimit.v2.RateLimitResponse.DescriptorStatus")
}

func init() {
	proto.RegisterFile("envoy/service/ratelimit/v2/rls.proto", fileDescriptor_1de95711edb19ee8)
}

var fileDescriptor_1de95711edb19ee8 = []byte{
	// 607 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0xed, 0x6a, 0x13, 0x4f,
	0x14, 0xc6, 0xbb, 0xc9, 0x92, 0xb6, 0x27, 0x7d, 0xd9, 0xce, 0x1f, 0xfa, 0x0f, 0x41, 0xb4, 0x04,
	0xd1, 0x60, 0x75, 0x03, 0xeb, 0x07, 0x15, 0xa4, 0xd0, 0x37, 0x69, 0x69, 0x9b, 0x84, 0x49, 0x53,
	0x51, 0x84, 0x65, 0x9a, 0x39, 0xd8, 0x81, 0xed, 0xce, 0x3a, 0x33, 0x59, 0xec, 0x77, 0x3f, 0x78,
	0x0d, 0x5e, 0x86, 0x77, 0xe1, 0x65, 0x78, 0x27, 0xb2, 0xb3, 0x9b, 0x4d, 0xaa, 0x28, 0xad, 0x7e,
	0xdb, 0x3d, 0xf3, 0x3c, 0x3f, 0xce, 0x79, 0xe6, 0x05, 0xee, 0x63, 0x9c, 0xca, 0xab, 0x8e, 0x46,
	0x95, 0x8a, 0x11, 0x76, 0x14, 0x33, 0x18, 0x89, 0x4b, 0x61, 0x3a, 0x69, 0xd0, 0x51, 0x91, 0xf6,
	0x13, 0x25, 0x8d, 0x24, 0x4d, 0xab, 0xf2, 0x0b, 0x95, 0x5f, 0xaa, 0xfc, 0x34, 0x68, 0xde, 0xc9,
	0x09, 0x2c, 0x11, 0x99, 0x67, 0x24, 0x15, 0x76, 0xce, 0x99, 0xc6, 0xdc, 0xd9, 0x7c, 0x70, 0x6d,
	0x75, 0x8a, 0x9f, 0x22, 0x72, 0xdd, 0xff, 0x29, 0x8b, 0x04, 0x67, 0x06, 0x3b, 0x93, 0x8f, 0x7c,
	0xa1, 0xf5, 0xc5, 0x01, 0x8f, 0x32, 0x83, 0xc7, 0x99, 0x98, 0xe2, 0x87, 0x31, 0x6a, 0x43, 0xd6,
	0xa1, 0xc6, 0xe5, 0x25, 0x13, 0x71, 0xc3, 0xd9, 0x70, 0xda, 0x8b, 0xb4, 0xf8, 0x23, 0x27, 0x50,
	0xe7, 0xa8, 0x47, 0x4a, 0x24, 0x46, 0x2a, 0xdd, 0xa8, 0x6c, 0x54, 0xdb, 0xf5, 0x60, 0xd3, 0xcf,
	0xbb, 0x67, 0x89, 0xf0, 0xd3, 0x60, 0xa6, 0xf9, 0x12, 0xbb, 0x57, 0x7a, 0xe8, 0xac, 0x9f, 0xdc,
	0x83, 0xfa, 0x85, 0x30, 0x3a, 0x64, 0x9c, 0x63, 0xcc, 0x1b, 0xd5, 0x0d, 0xa7, 0xbd, 0x4c, 0x21,
	0x2b, 0x6d, 0xdb, 0x4a, 0xeb, 0x6b, 0x0d, 0xd6, 0x66, 0x9a, 0xd3, 0x89, 0x8c, 0x35, 0x92, 0x21,
	0x2c, 0xc9, 0x14, 0x15, 0x8b, 0xa2, 0x70, 0x24, 0x39, 0xda, 0x1e, 0x57, 0x82, 0xc0, 0xff, 0x7d,
	0x88, 0xfe, 0x2f, 0x10, 0x7f, 0x57, 0x72, 0xa4, 0xf5, 0x82, 0x93, 0xfd, 0x90, 0xb7, 0xb0, 0xa0,
	0x0d, 0x33, 0x63, 0x8d, 0x93, 0xc9, 0xb6, 0x6e, 0x87, 0x9c, 0x8e, 0x39, 0xb0, 0x1c, 0x5a, 0xf2,
	0xc8, 0x73, 0x98, 0xbf, 0x40, 0xc6, 0x51, 0xe9, 0x46, 0xd5, 0xa2, 0xef, 0x5e, 0x0f, 0x2d, 0xdb,
	0x56, 0xff, 0xc0, 0x2a, 0xce, 0x58, 0x34, 0x46, 0x3a, 0x91, 0x93, 0x01, 0xac, 0xab, 0x7c, 0x57,
	0xc2, 0xa2, 0x14, 0x1a, 0x99, 0x25, 0xd6, 0x70, 0x6f, 0x04, 0xfa, 0xaf, 0x70, 0xe7, 0x35, 0x7d,
	0x2a, 0xb7, 0x39, 0x6f, 0x7e, 0x73, 0x60, 0xb1, 0xec, 0x9f, 0x3c, 0x82, 0xb5, 0x42, 0xa4, 0xc3,
	0x04, 0x55, 0x38, 0x8e, 0x85, 0xb1, 0xa1, 0x2e, 0xd3, 0xd5, 0xc9, 0x42, 0x1f, 0xd5, 0x30, 0x16,
	0x86, 0xf4, 0xc1, 0xb5, 0xcb, 0x15, 0x9b, 0xf9, 0xcb, 0xdb, 0x05, 0x54, 0x56, 0xfc, 0x8c, 0x45,
	0x2d, 0xa9, 0xb5, 0x05, 0xae, 0x25, 0xd7, 0x61, 0x7e, 0xd8, 0x3d, 0xea, 0xf6, 0x5e, 0x77, 0xbd,
	0x39, 0x02, 0x50, 0x1b, 0xec, 0xef, 0xf6, 0xba, 0x7b, 0x9e, 0x93, 0x7d, 0x9f, 0x1c, 0x76, 0x87,
	0xa7, 0xfb, 0x5e, 0x85, 0x2c, 0x80, 0x7b, 0xd0, 0x1b, 0x52, 0xaf, 0x4a, 0xe6, 0xa1, 0xba, 0xb7,
	0xfd, 0xc6, 0x73, 0x9b, 0xdf, 0x1d, 0xf0, 0x7e, 0x4e, 0x9e, 0xbc, 0x02, 0xf7, 0x1f, 0x8f, 0x86,
	0xf5, 0x93, 0x77, 0xb0, 0x3c, 0x1a, 0x2b, 0x85, 0xb1, 0x09, 0xad, 0xc1, 0xce, 0x5d, 0x0f, 0x9e,
	0xfd, 0xe5, 0xdc, 0x74, 0xa9, 0xa0, 0xe5, 0xc1, 0x3f, 0x84, 0x55, 0xeb, 0x0a, 0x15, 0x66, 0xd7,
	0x4b, 0xc4, 0xef, 0x8b, 0x3b, 0xb0, 0x12, 0xe5, 0xfe, 0xa2, 0xda, 0xda, 0x04, 0xd7, 0x1e, 0xd1,
	0x6b, 0x19, 0xd5, 0xa0, 0xd2, 0x3b, 0xf2, 0x1c, 0xb2, 0x02, 0xd0, 0x3b, 0xdb, 0xa7, 0xe1, 0xf1,
	0xe1, 0xc9, 0xe1, 0xa9, 0x57, 0x09, 0x3e, 0xcd, 0xde, 0xe8, 0x41, 0xde, 0x21, 0x49, 0x60, 0x75,
	0x70, 0x21, 0xc7, 0x11, 0x9f, 0x6e, 0xfb, 0xe3, 0x1b, 0x0e, 0x61, 0x0f, 0x40, 0xf3, 0xc9, 0xad,
	0x46, 0x6e, 0xcd, 0xed, 0xbc, 0x80, 0xb6, 0x90, 0xb9, 0x29, 0x51, 0xf2, 0xe3, 0xd5, 0x1f, 0xfc,
	0x3b, 0x0b, 0x34, 0xd2, 0xfd, 0xec, 0x39, 0xea, 0x3b, 0x9f, 0x1d, 0xe7, 0xbc, 0x66, 0x9f, 0xa6,
	0xa7, 0x3f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xed, 0x5f, 0x85, 0xc7, 0x3d, 0x05, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// RateLimitServiceClient is the client API for RateLimitService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type RateLimitServiceClient interface {
	// Determine whether rate limiting should take place.
	ShouldRateLimit(ctx context.Context, in *RateLimitRequest, opts ...grpc.CallOption) (*RateLimitResponse, error)
}

type rateLimitServiceClient struct {
	cc *grpc.ClientConn
}

func NewRateLimitServiceClient(cc *grpc.ClientConn) RateLimitServiceClient {
	return &rateLimitServiceClient{cc}
}

func (c *rateLimitServiceClient) ShouldRateLimit(ctx context.Context, in *RateLimitRequest, opts ...grpc.CallOption) (*RateLimitResponse, error) {
	out := new(RateLimitResponse)
	err := c.cc.Invoke(ctx, "/envoy.service.ratelimit.v2.RateLimitService/ShouldRateLimit", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// RateLimitServiceServer is the server API for RateLimitService service.
type RateLimitServiceServer interface {
	// Determine whether rate limiting should take place.
	ShouldRateLimit(context.Context, *RateLimitRequest) (*RateLimitResponse, error)
}

// UnimplementedRateLimitServiceServer can be embedded to have forward compatible implementations.
type UnimplementedRateLimitServiceServer struct {
}

func (*UnimplementedRateLimitServiceServer) ShouldRateLimit(ctx context.Context, req *RateLimitRequest) (*RateLimitResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method ShouldRateLimit not implemented")
}

func RegisterRateLimitServiceServer(s *grpc.Server, srv RateLimitServiceServer) {
	s.RegisterService(&_RateLimitService_serviceDesc, srv)
}

func _RateLimitService_ShouldRateLimit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(RateLimitRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(RateLimitServiceServer).ShouldRateLimit(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/envoy.service.ratelimit.v2.RateLimitService/ShouldRateLimit",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(RateLimitServiceServer).ShouldRateLimit(ctx, req.(*RateLimitRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _RateLimitService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.service.ratelimit.v2.RateLimitService",
	HandlerType: (*RateLimitServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "ShouldRateLimit",
			Handler:    _RateLimitService_ShouldRateLimit_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "envoy/service/ratelimit/v2/rls.proto",
}
  0707010000015C000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000002B00000000cilium-proxy-20200109/go/envoy/service/tap    0707010000015D000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003300000000cilium-proxy-20200109/go/envoy/service/tap/v2alpha    0707010000015E000081A4000003E800000064000000015E17A2470000825C000000000000000000000000000000000000004000000000cilium-proxy-20200109/go/envoy/service/tap/v2alpha/common.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/service/tap/v2alpha/common.proto

package envoy_service_tap_v2alpha

import (
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	route "github.com/cilium/proxy/go/envoy/api/v2/route"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Output format. All output is in the form of one or more :ref:`TraceWrapper
// <envoy_api_msg_data.tap.v2alpha.TraceWrapper>` messages. This enumeration indicates
// how those messages are written. Note that not all sinks support all output formats. See
// individual sink documentation for more information.
type OutputSink_Format int32

const (
	// Each message will be written as JSON. Any :ref:`body <envoy_api_msg_data.tap.v2alpha.Body>`
	// data will be present in the :ref:`as_bytes
	// <envoy_api_field_data.tap.v2alpha.Body.as_bytes>` field. This means that body data will be
	// base64 encoded as per the `proto3 JSON mappings
	// <https://developers.google.com/protocol-buffers/docs/proto3#json>`_.
	OutputSink_JSON_BODY_AS_BYTES OutputSink_Format = 0
	// Each message will be written as JSON. Any :ref:`body <envoy_api_msg_data.tap.v2alpha.Body>`
	// data will be present in the :ref:`as_string
	// <envoy_api_field_data.tap.v2alpha.Body.as_string>` field. This means that body data will be
	// string encoded as per the `proto3 JSON mappings
	// <https://developers.google.com/protocol-buffers/docs/proto3#json>`_. This format type is
	// useful when it is known that that body is human readable (e.g., JSON over HTTP) and the
	// user wishes to view it directly without being forced to base64 decode the body.
	OutputSink_JSON_BODY_AS_STRING OutputSink_Format = 1
	// Binary proto format. Note that binary proto is not self-delimiting. If a sink writes
	// multiple binary messages without any length information the data stream will not be
	// useful. However, for certain sinks that are self-delimiting (e.g., one message per file)
	// this output format makes consumption simpler.
	OutputSink_PROTO_BINARY OutputSink_Format = 2
	// Messages are written as a sequence tuples, where each tuple is the message length encoded
	// as a `protobuf 32-bit varint
	// <https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.io.coded_stream>`_
	// followed by the binary message. The messages can be read back using the language specific
	// protobuf coded stream implementation to obtain the message length and the message.
	OutputSink_PROTO_BINARY_LENGTH_DELIMITED OutputSink_Format = 3
	// Text proto format.
	OutputSink_PROTO_TEXT OutputSink_Format = 4
)

var OutputSink_Format_name = map[int32]string{
	0: "JSON_BODY_AS_BYTES",
	1: "JSON_BODY_AS_STRING",
	2: "PROTO_BINARY",
	3: "PROTO_BINARY_LENGTH_DELIMITED",
	4: "PROTO_TEXT",
}

var OutputSink_Format_value = map[string]int32{
	"JSON_BODY_AS_BYTES":            0,
	"JSON_BODY_AS_STRING":           1,
	"PROTO_BINARY":                  2,
	"PROTO_BINARY_LENGTH_DELIMITED": 3,
	"PROTO_TEXT":                    4,
}

func (x OutputSink_Format) String() string {
	return proto.EnumName(OutputSink_Format_name, int32(x))
}

func (OutputSink_Format) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_4f6a60461d532a14, []int{4, 0}
}

// Tap configuration.
type TapConfig struct {
	// The match configuration. If the configuration matches the data source being tapped, a tap will
	// occur, with the result written to the configured output.
	MatchConfig *MatchPredicate `protobuf:"bytes,1,opt,name=match_config,json=matchConfig,proto3" json:"match_config,omitempty"`
	// The tap output configuration. If a match configuration matches a data source being tapped,
	// a tap will occur and the data will be written to the configured output.
	OutputConfig *OutputConfig `protobuf:"bytes,2,opt,name=output_config,json=outputConfig,proto3" json:"output_config,omitempty"`
	// [#not-implemented-hide:] Specify if Tap matching is enabled. The % of requests\connections for
	// which the tap matching is enabled. When not enabled, the request\connection will not be
	// recorded.
	//
	// .. note::
	//
	//   This field defaults to 100/:ref:`HUNDRED
	//   <envoy_api_enum_type.FractionalPercent.DenominatorType>`.
	TapEnabled           *core.RuntimeFractionalPercent `protobuf:"bytes,3,opt,name=tap_enabled,json=tapEnabled,proto3" json:"tap_enabled,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	XXX_sizecache        int32                          `json:"-"`
}

func (m *TapConfig) Reset()         { *m = TapConfig{} }
func (m *TapConfig) String() string { return proto.CompactTextString(m) }
func (*TapConfig) ProtoMessage()    {}
func (*TapConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_4f6a60461d532a14, []int{0}
}

func (m *TapConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TapConfig.Unmarshal(m, b)
}
func (m *TapConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TapConfig.Marshal(b, m, deterministic)
}
func (m *TapConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TapConfig.Merge(m, src)
}
func (m *TapConfig) XXX_Size() int {
	return xxx_messageInfo_TapConfig.Size(m)
}
func (m *TapConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_TapConfig.DiscardUnknown(m)
}

var xxx_messageInfo_TapConfig proto.InternalMessageInfo

func (m *TapConfig) GetMatchConfig() *MatchPredicate {
	if m != nil {
		return m.MatchConfig
	}
	return nil
}

func (m *TapConfig) GetOutputConfig() *OutputConfig {
	if m != nil {
		return m.OutputConfig
	}
	return nil
}

func (m *TapConfig) GetTapEnabled() *core.RuntimeFractionalPercent {
	if m != nil {
		return m.TapEnabled
	}
	return nil
}

// Tap match configuration. This is a recursive structure which allows complex nested match
// configurations to be built using various logical operators.
// [#next-free-field: 9]
type MatchPredicate struct {
	// Types that are valid to be assigned to Rule:
	//	*MatchPredicate_OrMatch
	//	*MatchPredicate_AndMatch
	//	*MatchPredicate_NotMatch
	//	*MatchPredicate_AnyMatch
	//	*MatchPredicate_HttpRequestHeadersMatch
	//	*MatchPredicate_HttpRequestTrailersMatch
	//	*MatchPredicate_HttpResponseHeadersMatch
	//	*MatchPredicate_HttpResponseTrailersMatch
	Rule                 isMatchPredicate_Rule `protobuf_oneof:"rule"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *MatchPredicate) Reset()         { *m = MatchPredicate{} }
func (m *MatchPredicate) String() string { return proto.CompactTextString(m) }
func (*MatchPredicate) ProtoMessage()    {}
func (*MatchPredicate) Descriptor() ([]byte, []int) {
	return fileDescriptor_4f6a60461d532a14, []int{1}
}

func (m *MatchPredicate) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MatchPredicate.Unmarshal(m, b)
}
func (m *MatchPredicate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MatchPredicate.Marshal(b, m, deterministic)
}
func (m *MatchPredicate) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MatchPredicate.Merge(m, src)
}
func (m *MatchPredicate) XXX_Size() int {
	return xxx_messageInfo_MatchPredicate.Size(m)
}
func (m *MatchPredicate) XXX_DiscardUnknown() {
	xxx_messageInfo_MatchPredicate.DiscardUnknown(m)
}

var xxx_messageInfo_MatchPredicate proto.InternalMessageInfo

type isMatchPredicate_Rule interface {
	isMatchPredicate_Rule()
}

type MatchPredicate_OrMatch struct {
	OrMatch *MatchPredicate_MatchSet `protobuf:"bytes,1,opt,name=or_match,json=orMatch,proto3,oneof"`
}

type MatchPredicate_AndMatch struct {
	AndMatch *MatchPredicate_MatchSet `protobuf:"bytes,2,opt,name=and_match,json=andMatch,proto3,oneof"`
}

type MatchPredicate_NotMatch struct {
	NotMatch *MatchPredicate `protobuf:"bytes,3,opt,name=not_match,json=notMatch,proto3,oneof"`
}

type MatchPredicate_AnyMatch struct {
	AnyMatch bool `protobuf:"varint,4,opt,name=any_match,json=anyMatch,proto3,oneof"`
}

type MatchPredicate_HttpRequestHeadersMatch struct {
	HttpRequestHeadersMatch *HttpHeadersMatch `protobuf:"bytes,5,opt,name=http_request_headers_match,json=httpRequestHeadersMatch,proto3,oneof"`
}

type MatchPredicate_HttpRequestTrailersMatch struct {
	HttpRequestTrailersMatch *HttpHeadersMatch `protobuf:"bytes,6,opt,name=http_request_trailers_match,json=httpRequestTrailersMatch,proto3,oneof"`
}

type MatchPredicate_HttpResponseHeadersMatch struct {
	HttpResponseHeadersMatch *HttpHeadersMatch `protobuf:"bytes,7,opt,name=http_response_headers_match,json=httpResponseHeadersMatch,proto3,oneof"`
}

type MatchPredicate_HttpResponseTrailersMatch struct {
	HttpResponseTrailersMatch *HttpHeadersMatch `protobuf:"bytes,8,opt,name=http_response_trailers_match,json=httpResponseTrailersMatch,proto3,oneof"`
}

func (*MatchPredicate_OrMatch) isMatchPredicate_Rule() {}

func (*MatchPredicate_AndMatch) isMatchPredicate_Rule() {}

func (*MatchPredicate_NotMatch) isMatchPredicate_Rule() {}

func (*MatchPredicate_AnyMatch) isMatchPredicate_Rule() {}

func (*MatchPredicate_HttpRequestHeadersMatch) isMatchPredicate_Rule() {}

func (*MatchPredicate_HttpRequestTrailersMatch) isMatchPredicate_Rule() {}

func (*MatchPredicate_HttpResponseHeadersMatch) isMatchPredicate_Rule() {}

func (*MatchPredicate_HttpResponseTrailersMatch) isMatchPredicate_Rule() {}

func (m *MatchPredicate) GetRule() isMatchPredicate_Rule {
	if m != nil {
		return m.Rule
	}
	return nil
}

func (m *MatchPredicate) GetOrMatch() *MatchPredicate_MatchSet {
	if x, ok := m.GetRule().(*MatchPredicate_OrMatch); ok {
		return x.OrMatch
	}
	return nil
}

func (m *MatchPredicate) GetAndMatch() *MatchPredicate_MatchSet {
	if x, ok := m.GetRule().(*MatchPredicate_AndMatch); ok {
		return x.AndMatch
	}
	return nil
}

func (m *MatchPredicate) GetNotMatch() *MatchPredicate {
	if x, ok := m.GetRule().(*MatchPredicate_NotMatch); ok {
		return x.NotMatch
	}
	return nil
}

func (m *MatchPredicate) GetAnyMatch() bool {
	if x, ok := m.GetRule().(*MatchPredicate_AnyMatch); ok {
		return x.AnyMatch
	}
	return false
}

func (m *MatchPredicate) GetHttpRequestHeadersMatch() *HttpHeadersMatch {
	if x, ok := m.GetRule().(*MatchPredicate_HttpRequestHeadersMatch); ok {
		return x.HttpRequestHeadersMatch
	}
	return nil
}

func (m *MatchPredicate) GetHttpRequestTrailersMatch() *HttpHeadersMatch {
	if x, ok := m.GetRule().(*MatchPredicate_HttpRequestTrailersMatch); ok {
		return x.HttpRequestTrailersMatch
	}
	return nil
}

func (m *MatchPredicate) GetHttpResponseHeadersMatch() *HttpHeadersMatch {
	if x, ok := m.GetRule().(*MatchPredicate_HttpResponseHeadersMatch); ok {
		return x.HttpResponseHeadersMatch
	}
	return nil
}

func (m *MatchPredicate) GetHttpResponseTrailersMatch() *HttpHeadersMatch {
	if x, ok := m.GetRule().(*MatchPredicate_HttpResponseTrailersMatch); ok {
		return x.HttpResponseTrailersMatch
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*MatchPredicate) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*MatchPredicate_OrMatch)(nil),
		(*MatchPredicate_AndMatch)(nil),
		(*MatchPredicate_NotMatch)(nil),
		(*MatchPredicate_AnyMatch)(nil),
		(*MatchPredicate_HttpRequestHeadersMatch)(nil),
		(*MatchPredicate_HttpRequestTrailersMatch)(nil),
		(*MatchPredicate_HttpResponseHeadersMatch)(nil),
		(*MatchPredicate_HttpResponseTrailersMatch)(nil),
	}
}

// A set of match configurations used for logical operations.
type MatchPredicate_MatchSet struct {
	// The list of rules that make up the set.
	Rules                []*MatchPredicate `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *MatchPredicate_MatchSet) Reset()         { *m = MatchPredicate_MatchSet{} }
func (m *MatchPredicate_MatchSet) String() string { return proto.CompactTextString(m) }
func (*MatchPredicate_MatchSet) ProtoMessage()    {}
func (*MatchPredicate_MatchSet) Descriptor() ([]byte, []int) {
	return fileDescriptor_4f6a60461d532a14, []int{1, 0}
}

func (m *MatchPredicate_MatchSet) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MatchPredicate_MatchSet.Unmarshal(m, b)
}
func (m *MatchPredicate_MatchSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MatchPredicate_MatchSet.Marshal(b, m, deterministic)
}
func (m *MatchPredicate_MatchSet) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MatchPredicate_MatchSet.Merge(m, src)
}
func (m *MatchPredicate_MatchSet) XXX_Size() int {
	return xxx_messageInfo_MatchPredicate_MatchSet.Size(m)
}
func (m *MatchPredicate_MatchSet) XXX_DiscardUnknown() {
	xxx_messageInfo_MatchPredicate_MatchSet.DiscardUnknown(m)
}

var xxx_messageInfo_MatchPredicate_MatchSet proto.InternalMessageInfo

func (m *MatchPredicate_MatchSet) GetRules() []*MatchPredicate {
	if m != nil {
		return m.Rules
	}
	return nil
}

// HTTP headers match configuration.
type HttpHeadersMatch struct {
	// HTTP headers to match.
	Headers              []*route.HeaderMatcher `protobuf:"bytes,1,rep,name=headers,proto3" json:"headers,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *HttpHeadersMatch) Reset()         { *m = HttpHeadersMatch{} }
func (m *HttpHeadersMatch) String() string { return proto.CompactTextString(m) }
func (*HttpHeadersMatch) ProtoMessage()    {}
func (*HttpHeadersMatch) Descriptor() ([]byte, []int) {
	return fileDescriptor_4f6a60461d532a14, []int{2}
}

func (m *HttpHeadersMatch) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpHeadersMatch.Unmarshal(m, b)
}
func (m *HttpHeadersMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpHeadersMatch.Marshal(b, m, deterministic)
}
func (m *HttpHeadersMatch) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpHeadersMatch.Merge(m, src)
}
func (m *HttpHeadersMatch) XXX_Size() int {
	return xxx_messageInfo_HttpHeadersMatch.Size(m)
}
func (m *HttpHeadersMatch) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpHeadersMatch.DiscardUnknown(m)
}

var xxx_messageInfo_HttpHeadersMatch proto.InternalMessageInfo

func (m *HttpHeadersMatch) GetHeaders() []*route.HeaderMatcher {
	if m != nil {
		return m.Headers
	}
	return nil
}

// Tap output configuration.
type OutputConfig struct {
	// Output sinks for tap data. Currently a single sink is allowed in the list. Once multiple
	// sink types are supported this constraint will be relaxed.
	Sinks []*OutputSink `protobuf:"bytes,1,rep,name=sinks,proto3" json:"sinks,omitempty"`
	// For buffered tapping, the maximum amount of received body that will be buffered prior to
	// truncation. If truncation occurs, the :ref:`truncated
	// <envoy_api_field_data.tap.v2alpha.Body.truncated>` field will be set. If not specified, the
	// default is 1KiB.
	MaxBufferedRxBytes *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=max_buffered_rx_bytes,json=maxBufferedRxBytes,proto3" json:"max_buffered_rx_bytes,omitempty"`
	// For buffered tapping, the maximum amount of transmitted body that will be buffered prior to
	// truncation. If truncation occurs, the :ref:`truncated
	// <envoy_api_field_data.tap.v2alpha.Body.truncated>` field will be set. If not specified, the
	// default is 1KiB.
	MaxBufferedTxBytes *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=max_buffered_tx_bytes,json=maxBufferedTxBytes,proto3" json:"max_buffered_tx_bytes,omitempty"`
	// Indicates whether taps produce a single buffered message per tap, or multiple streamed
	// messages per tap in the emitted :ref:`TraceWrapper
	// <envoy_api_msg_data.tap.v2alpha.TraceWrapper>` messages. Note that streamed tapping does not
	// mean that no buffering takes place. Buffering may be required if data is processed before a
	// match can be determined. See the HTTP tap filter :ref:`streaming
	// <config_http_filters_tap_streaming>` documentation for more information.
	Streaming            bool     `protobuf:"varint,4,opt,name=streaming,proto3" json:"streaming,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *OutputConfig) Reset()         { *m = OutputConfig{} }
func (m *OutputConfig) String() string { return proto.CompactTextString(m) }
func (*OutputConfig) ProtoMessage()    {}
func (*OutputConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_4f6a60461d532a14, []int{3}
}

func (m *OutputConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OutputConfig.Unmarshal(m, b)
}
func (m *OutputConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OutputConfig.Marshal(b, m, deterministic)
}
func (m *OutputConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OutputConfig.Merge(m, src)
}
func (m *OutputConfig) XXX_Size() int {
	return xxx_messageInfo_OutputConfig.Size(m)
}
func (m *OutputConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_OutputConfig.DiscardUnknown(m)
}

var xxx_messageInfo_OutputConfig proto.InternalMessageInfo

func (m *OutputConfig) GetSinks() []*OutputSink {
	if m != nil {
		return m.Sinks
	}
	return nil
}

func (m *OutputConfig) GetMaxBufferedRxBytes() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxBufferedRxBytes
	}
	return nil
}

func (m *OutputConfig) GetMaxBufferedTxBytes() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxBufferedTxBytes
	}
	return nil
}

func (m *OutputConfig) GetStreaming() bool {
	if m != nil {
		return m.Streaming
	}
	return false
}

// Tap output sink configuration.
type OutputSink struct {
	// Sink output format.
	Format OutputSink_Format `protobuf:"varint,1,opt,name=format,proto3,enum=envoy.service.tap.v2alpha.OutputSink_Format" json:"format,omitempty"`
	// Types that are valid to be assigned to OutputSinkType:
	//	*OutputSink_StreamingAdmin
	//	*OutputSink_FilePerTap
	//	*OutputSink_StreamingGrpc
	OutputSinkType       isOutputSink_OutputSinkType `protobuf_oneof:"output_sink_type"`
	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
	XXX_unrecognized     []byte                      `json:"-"`
	XXX_sizecache        int32                       `json:"-"`
}

func (m *OutputSink) Reset()         { *m = OutputSink{} }
func (m *OutputSink) String() string { return proto.CompactTextString(m) }
func (*OutputSink) ProtoMessage()    {}
func (*OutputSink) Descriptor() ([]byte, []int) {
	return fileDescriptor_4f6a60461d532a14, []int{4}
}

func (m *OutputSink) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OutputSink.Unmarshal(m, b)
}
func (m *OutputSink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OutputSink.Marshal(b, m, deterministic)
}
func (m *OutputSink) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OutputSink.Merge(m, src)
}
func (m *OutputSink) XXX_Size() int {
	return xxx_messageInfo_OutputSink.Size(m)
}
func (m *OutputSink) XXX_DiscardUnknown() {
	xxx_messageInfo_OutputSink.DiscardUnknown(m)
}

var xxx_messageInfo_OutputSink proto.InternalMessageInfo

func (m *OutputSink) GetFormat() OutputSink_Format {
	if m != nil {
		return m.Format
	}
	return OutputSink_JSON_BODY_AS_BYTES
}

type isOutputSink_OutputSinkType interface {
	isOutputSink_OutputSinkType()
}

type OutputSink_StreamingAdmin struct {
	StreamingAdmin *StreamingAdminSink `protobuf:"bytes,2,opt,name=streaming_admin,json=streamingAdmin,proto3,oneof"`
}

type OutputSink_FilePerTap struct {
	FilePerTap *FilePerTapSink `protobuf:"bytes,3,opt,name=file_per_tap,json=filePerTap,proto3,oneof"`
}

type OutputSink_StreamingGrpc struct {
	StreamingGrpc *StreamingGrpcSink `protobuf:"bytes,4,opt,name=streaming_grpc,json=streamingGrpc,proto3,oneof"`
}

func (*OutputSink_StreamingAdmin) isOutputSink_OutputSinkType() {}

func (*OutputSink_FilePerTap) isOutputSink_OutputSinkType() {}

func (*OutputSink_StreamingGrpc) isOutputSink_OutputSinkType() {}

func (m *OutputSink) GetOutputSinkType() isOutputSink_OutputSinkType {
	if m != nil {
		return m.OutputSinkType
	}
	return nil
}

func (m *OutputSink) GetStreamingAdmin() *StreamingAdminSink {
	if x, ok := m.GetOutputSinkType().(*OutputSink_StreamingAdmin); ok {
		return x.StreamingAdmin
	}
	return nil
}

func (m *OutputSink) GetFilePerTap() *FilePerTapSink {
	if x, ok := m.GetOutputSinkType().(*OutputSink_FilePerTap); ok {
		return x.FilePerTap
	}
	return nil
}

func (m *OutputSink) GetStreamingGrpc() *StreamingGrpcSink {
	if x, ok := m.GetOutputSinkType().(*OutputSink_StreamingGrpc); ok {
		return x.StreamingGrpc
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*OutputSink) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*OutputSink_StreamingAdmin)(nil),
		(*OutputSink_FilePerTap)(nil),
		(*OutputSink_StreamingGrpc)(nil),
	}
}

// Streaming admin sink configuration.
type StreamingAdminSink struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *StreamingAdminSink) Reset()         { *m = StreamingAdminSink{} }
func (m *StreamingAdminSink) String() string { return proto.CompactTextString(m) }
func (*StreamingAdminSink) ProtoMessage()    {}
func (*StreamingAdminSink) Descriptor() ([]byte, []int) {
	return fileDescriptor_4f6a60461d532a14, []int{5}
}

func (m *StreamingAdminSink) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StreamingAdminSink.Unmarshal(m, b)
}
func (m *StreamingAdminSink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StreamingAdminSink.Marshal(b, m, deterministic)
}
func (m *StreamingAdminSink) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StreamingAdminSink.Merge(m, src)
}
func (m *StreamingAdminSink) XXX_Size() int {
	return xxx_messageInfo_StreamingAdminSink.Size(m)
}
func (m *StreamingAdminSink) XXX_DiscardUnknown() {
	xxx_messageInfo_StreamingAdminSink.DiscardUnknown(m)
}

var xxx_messageInfo_StreamingAdminSink proto.InternalMessageInfo

// The file per tap sink outputs a discrete file for every tapped stream.
type FilePerTapSink struct {
	// Path prefix. The output file will be of the form <path_prefix>_<id>.pb, where <id> is an
	// identifier distinguishing the recorded trace for stream instances (the Envoy
	// connection ID, HTTP stream ID, etc.).
	PathPrefix           string   `protobuf:"bytes,1,opt,name=path_prefix,json=pathPrefix,proto3" json:"path_prefix,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *FilePerTapSink) Reset()         { *m = FilePerTapSink{} }
func (m *FilePerTapSink) String() string { return proto.CompactTextString(m) }
func (*FilePerTapSink) ProtoMessage()    {}
func (*FilePerTapSink) Descriptor() ([]byte, []int) {
	return fileDescriptor_4f6a60461d532a14, []int{6}
}

func (m *FilePerTapSink) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FilePerTapSink.Unmarshal(m, b)
}
func (m *FilePerTapSink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FilePerTapSink.Marshal(b, m, deterministic)
}
func (m *FilePerTapSink) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FilePerTapSink.Merge(m, src)
}
func (m *FilePerTapSink) XXX_Size() int {
	return xxx_messageInfo_FilePerTapSink.Size(m)
}
func (m *FilePerTapSink) XXX_DiscardUnknown() {
	xxx_messageInfo_FilePerTapSink.DiscardUnknown(m)
}

var xxx_messageInfo_FilePerTapSink proto.InternalMessageInfo

func (m *FilePerTapSink) GetPathPrefix() string {
	if m != nil {
		return m.PathPrefix
	}
	return ""
}

// [#not-implemented-hide:] Streaming gRPC sink configuration sends the taps to an external gRPC
// server.
type StreamingGrpcSink struct {
	// Opaque identifier, that will be sent back to the streaming grpc server.
	TapId string `protobuf:"bytes,1,opt,name=tap_id,json=tapId,proto3" json:"tap_id,omitempty"`
	// The gRPC server that hosts the Tap Sink Service.
	GrpcService          *core.GrpcService `protobuf:"bytes,2,opt,name=grpc_service,json=grpcService,proto3" json:"grpc_service,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *StreamingGrpcSink) Reset()         { *m = StreamingGrpcSink{} }
func (m *StreamingGrpcSink) String() string { return proto.CompactTextString(m) }
func (*StreamingGrpcSink) ProtoMessage()    {}
func (*StreamingGrpcSink) Descriptor() ([]byte, []int) {
	return fileDescriptor_4f6a60461d532a14, []int{7}
}

func (m *StreamingGrpcSink) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StreamingGrpcSink.Unmarshal(m, b)
}
func (m *StreamingGrpcSink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StreamingGrpcSink.Marshal(b, m, deterministic)
}
func (m *StreamingGrpcSink) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StreamingGrpcSink.Merge(m, src)
}
func (m *StreamingGrpcSink) XXX_Size() int {
	return xxx_messageInfo_StreamingGrpcSink.Size(m)
}
func (m *StreamingGrpcSink) XXX_DiscardUnknown() {
	xxx_messageInfo_StreamingGrpcSink.DiscardUnknown(m)
}

var xxx_messageInfo_StreamingGrpcSink proto.InternalMessageInfo

func (m *StreamingGrpcSink) GetTapId() string {
	if m != nil {
		return m.TapId
	}
	return ""
}

func (m *StreamingGrpcSink) GetGrpcService() *core.GrpcService {
	if m != nil {
		return m.GrpcService
	}
	return nil
}

func init() {
	proto.RegisterEnum("envoy.service.tap.v2alpha.OutputSink_Format", OutputSink_Format_name, OutputSink_Format_value)
	proto.RegisterType((*TapConfig)(nil), "envoy.service.tap.v2alpha.TapConfig")
	proto.RegisterType((*MatchPredicate)(nil), "envoy.service.tap.v2alpha.MatchPredicate")
	proto.RegisterType((*MatchPredicate_MatchSet)(nil), "envoy.service.tap.v2alpha.MatchPredicate.MatchSet")
	proto.RegisterType((*HttpHeadersMatch)(nil), "envoy.service.tap.v2alpha.HttpHeadersMatch")
	proto.RegisterType((*OutputConfig)(nil), "envoy.service.tap.v2alpha.OutputConfig")
	proto.RegisterType((*OutputSink)(nil), "envoy.service.tap.v2alpha.OutputSink")
	proto.RegisterType((*StreamingAdminSink)(nil), "envoy.service.tap.v2alpha.StreamingAdminSink")
	proto.RegisterType((*FilePerTapSink)(nil), "envoy.service.tap.v2alpha.FilePerTapSink")
	proto.RegisterType((*StreamingGrpcSink)(nil), "envoy.service.tap.v2alpha.StreamingGrpcSink")
}

func init() {
	proto.RegisterFile("envoy/service/tap/v2alpha/common.proto", fileDescriptor_4f6a60461d532a14)
}

var fileDescriptor_4f6a60461d532a14 = []byte{
	// 992 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x96, 0x41, 0x73, 0x1b, 0x35,
	0x14, 0xc7, 0xb3, 0x76, 0xe2, 0x38, 0xcf, 0x6e, 0x30, 0x82, 0x92, 0x34, 0x84, 0x4e, 0xea, 0x81,
	0x36, 0x0c, 0xb0, 0x9e, 0x71, 0x2f, 0x0c, 0x9c, 0xb2, 0x8d, 0x13, 0x1b, 0x92, 0xd8, 0xac, 0x37,
	0x9d, 0xe6, 0xa4, 0x91, 0x6d, 0xd9, 0xde, 0x76, 0xbd, 0x12, 0x5a, 0xd9, 0xb5, 0x2f, 0x1c, 0xb8,
	0xc1, 0xb1, 0x17, 0xbe, 0x0f, 0xdf, 0x89, 0x19, 0x26, 0x27, 0x66, 0x25, 0x6d, 0xb2, 0x9b, 0xb4,
	0x21, 0x69, 0x2f, 0x1e, 0xeb, 0xe9, 0xfd, 0x7f, 0x4f, 0xef, 0x49, 0x7a, 0x5a, 0x78, 0x4c, 0xc3,
	0x19, 0x5b, 0xd4, 0x22, 0x2a, 0x66, 0x7e, 0x9f, 0xd6, 0x24, 0xe1, 0xb5, 0x59, 0x9d, 0x04, 0x7c,
	0x4c, 0x6a, 0x7d, 0x36, 0x99, 0xb0, 0xd0, 0xe6, 0x82, 0x49, 0x86, 0x1e, 0x28, 0x3f, 0xdb, 0xf8,
	0xd9, 0x92, 0x70, 0xdb, 0xf8, 0x6d, 0x6d, 0x6b, 0x04, 0xe1, 0x7e, 0x6d, 0x56, 0xaf, 0xf5, 0x99,
	0xa0, 0xb5, 0x1e, 0x89, 0xa8, 0x16, 0x6e, 0x7d, 0x79, 0x7d, 0x76, 0x24, 0x78, 0x1f, 0x27, 0x24,
	0xed, 0xf5, 0x30, 0xe3, 0x25, 0xd8, 0x54, 0x52, 0xfd, 0x9b, 0xcc, 0x8f, 0x18, 0x1b, 0x05, 0xb4,
	0xa6, 0x46, 0xbd, 0xe9, 0xb0, 0xf6, 0x5a, 0x10, 0xce, 0xa9, 0x88, 0xcc, 0xfc, 0xc6, 0x8c, 0x04,
	0xfe, 0x80, 0x48, 0x5a, 0x4b, 0xfe, 0xe8, 0x89, 0xea, 0x1f, 0x39, 0x58, 0xf3, 0x08, 0x7f, 0xc6,
	0xc2, 0xa1, 0x3f, 0x42, 0xcf, 0xa1, 0x3c, 0x21, 0xb2, 0x3f, 0xc6, 0x7d, 0x35, 0xde, 0xb4, 0x76,
	0xac, 0xdd, 0x52, 0xfd, 0x6b, 0xfb, 0x9d, 0xc9, 0xd9, 0xc7, 0xb1, 0x7b, 0x47, 0xd0, 0x81, 0xdf,
	0x27, 0x92, 0x3a, 0xc5, 0x73, 0x67, 0xe5, 0x4f, 0x2b, 0x57, 0xb1, 0xdc, 0x92, 0x02, 0x5d, 0x70,
	0xef, 0xb1, 0xa9, 0xe4, 0x53, 0x99, 0x80, 0x73, 0x0a, 0xfc, 0xe4, 0x06, 0x70, 0x5b, 0xf9, 0x6b,
	0x7d, 0x0a, 0x5b, 0x66, 0x29, 0x3b, 0x3a, 0x82, 0x92, 0x24, 0x1c, 0xd3, 0x90, 0xf4, 0x02, 0x3a,
	0xd8, 0xcc, 0x2b, 0xea, 0x37, 0x86, 0x4a, 0xb8, 0x6f, 0xcf, 0xea, 0x76, 0x5c, 0x52, 0xdb, 0x9d,
	0x86, 0xd2, 0x9f, 0xd0, 0x03, 0x41, 0xfa, 0xd2, 0x67, 0x21, 0x09, 0x3a, 0x54, 0xf4, 0x69, 0x28,
	0x5d, 0x90, 0x84, 0x37, 0xb4, 0xbc, 0xfa, 0x77, 0x01, 0xd6, 0xb3, 0xf9, 0xa0, 0x36, 0x14, 0x99,
	0xc0, 0x2a, 0x15, 0x53, 0x8c, 0xfa, 0xad, 0x8b, 0xa1, 0x87, 0x5d, 0x2a, 0x9b, 0x4b, 0xee, 0x2a,
	0x13, 0x6a, 0x84, 0x7e, 0x81, 0x35, 0x12, 0x0e, 0x0c, 0x31, 0xf7, 0x01, 0xc4, 0x22, 0x09, 0x07,
	0x1a, 0xd9, 0x84, 0xb5, 0x90, 0x49, 0x83, 0xcc, 0xdf, 0x71, 0xc7, 0x62, 0x52, 0xc8, 0xa4, 0x26,
	0x3d, 0x8e, 0x17, 0xb7, 0x30, 0xa4, 0xe5, 0x1d, 0x6b, 0xb7, 0xe8, 0xac, 0x9e, 0x3b, 0xcb, 0x2f,
	0x73, 0x45, 0x4b, 0x47, 0x5c, 0x68, 0xbf, 0x97, 0xb0, 0x35, 0x96, 0x92, 0x63, 0x41, 0x7f, 0x9d,
	0xd2, 0x48, 0xe2, 0x31, 0x25, 0x03, 0x2a, 0x22, 0x23, 0x5c, 0xc9, 0xec, 0xc2, 0xdb, 0x96, 0xd0,
	0x94, 0x92, 0x37, 0xb5, 0x46, 0x01, 0x9b, 0x4b, 0xee, 0x46, 0x0c, 0x74, 0x35, 0x2f, 0x3d, 0x85,
	0x02, 0xf8, 0x3c, 0x13, 0x4b, 0x0a, 0xe2, 0x07, 0x97, 0xc1, 0x0a, 0xef, 0x13, 0x6c, 0x33, 0x15,
	0xcc, 0x33, 0xbc, 0xab, 0xd1, 0x22, 0xce, 0xc2, 0x88, 0x5e, 0x49, 0x6d, 0xf5, 0x03, 0xa2, 0x69,
	0x60, 0x26, 0xb7, 0x10, 0xb6, 0xb3, 0xd1, 0xae, 0x24, 0x57, 0x7c, 0x9f, 0x70, 0x0f, 0xd2, 0xe1,
	0x32, 0xd9, 0x6d, 0x9d, 0x42, 0x31, 0x39, 0x41, 0xa8, 0x05, 0x2b, 0x62, 0x1a, 0xd0, 0x68, 0xd3,
	0xda, 0xc9, 0xdf, 0xfd, 0x8e, 0xbf, 0xb1, 0x72, 0xc5, 0x9c, 0xab, 0x09, 0x4e, 0x09, 0x96, 0xe3,
	0x3f, 0x28, 0xff, 0xaf, 0x63, 0x55, 0xdb, 0x50, 0xb9, 0xba, 0x28, 0xf4, 0x23, 0xac, 0x9a, 0x3a,
	0x9a, 0x68, 0x8f, 0xb2, 0x57, 0x54, 0x77, 0x32, 0x2d, 0x51, 0x0a, 0x2a, 0xdc, 0x44, 0x51, 0xfd,
	0x2b, 0x07, 0xe5, 0x74, 0x33, 0x40, 0x87, 0xb0, 0x12, 0xf9, 0xe1, 0xab, 0x84, 0xf5, 0xd5, 0xff,
	0x36, 0x91, 0xae, 0x1f, 0xbe, 0x72, 0xe0, 0xdc, 0x59, 0x7d, 0x63, 0x2d, 0x17, 0xad, 0x8a, 0xe5,
	0x6a, 0x3d, 0x6a, 0xc3, 0xfd, 0x09, 0x99, 0xe3, 0xde, 0x74, 0x38, 0xa4, 0x82, 0x0e, 0xb0, 0x98,
	0xe3, 0xde, 0x42, 0xd2, 0xc8, 0xdc, 0xcb, 0x6d, 0x5b, 0x37, 0x55, 0x3b, 0x69, 0xaa, 0xf6, 0x69,
	0x2b, 0x94, 0x4f, 0xeb, 0xcf, 0x49, 0x30, 0xa5, 0x2e, 0x9a, 0x90, 0xb9, 0x63, 0x94, 0xee, 0xdc,
	0x89, 0x75, 0xd7, 0x80, 0x32, 0x01, 0xe6, 0xef, 0x08, 0xf4, 0x0c, 0x70, 0x1b, 0xd6, 0x22, 0x29,
	0x28, 0x99, 0xf8, 0xe1, 0x48, 0x5f, 0x48, 0xf7, 0xd2, 0x50, 0xfd, 0x27, 0x0f, 0x70, 0x99, 0x21,
	0x3a, 0x81, 0xc2, 0x90, 0x89, 0x09, 0x91, 0xaa, 0x53, 0xad, 0xd7, 0xbf, 0xbd, 0x55, 0x61, 0xec,
	0x03, 0xa5, 0x51, 0xbb, 0xfa, 0xbb, 0x6a, 0xb1, 0x86, 0x82, 0x5e, 0xc0, 0x47, 0x17, 0xb1, 0x30,
	0x19, 0x4c, 0xfc, 0xd0, 0x14, 0xe6, 0xbb, 0x1b, 0xc0, 0xdd, 0x44, 0xb1, 0x17, 0x0b, 0xe2, 0x00,
	0xcd, 0x25, 0x77, 0x3d, 0xca, 0x58, 0xd1, 0x31, 0x94, 0x87, 0x7e, 0x40, 0x31, 0xa7, 0x02, 0x4b,
	0xc2, 0x6f, 0xd1, 0xb4, 0x0e, 0xfc, 0x80, 0x76, 0xa8, 0xf0, 0x08, 0x37, 0x48, 0x18, 0x5e, 0x58,
	0xd0, 0x29, 0x5c, 0x06, 0xc0, 0xf1, 0xe3, 0xa9, 0x4a, 0x55, 0xba, 0xb1, 0x00, 0x17, 0xeb, 0x3c,
	0x14, 0xbc, 0x6f, 0x98, 0xf7, 0xa2, 0xb4, 0xb1, 0xfa, 0x1b, 0x14, 0x74, 0x6d, 0xd0, 0x67, 0x80,
	0x7e, 0xea, 0xb6, 0x4f, 0xb0, 0xd3, 0xde, 0x3f, 0xc3, 0x7b, 0x5d, 0xec, 0x9c, 0x79, 0x8d, 0x6e,
	0x65, 0x09, 0x6d, 0xc0, 0x27, 0x19, 0x7b, 0xd7, 0x73, 0x5b, 0x27, 0x87, 0x15, 0x0b, 0x55, 0xa0,
	0xdc, 0x71, 0xdb, 0x5e, 0x1b, 0x3b, 0xad, 0x93, 0x3d, 0xf7, 0xac, 0x92, 0x43, 0x8f, 0xe0, 0x8b,
	0xb4, 0x05, 0x1f, 0x35, 0x4e, 0x0e, 0xbd, 0x26, 0xde, 0x6f, 0x1c, 0xb5, 0x8e, 0x5b, 0x5e, 0x63,
	0xbf, 0x92, 0x47, 0xeb, 0x00, 0xda, 0xc5, 0x6b, 0xbc, 0xf0, 0x2a, 0xcb, 0xce, 0x06, 0x54, 0xcc,
	0xa3, 0x19, 0x1f, 0x57, 0x2c, 0x17, 0xdc, 0x5c, 0xb1, 0x4f, 0x01, 0x5d, 0x2f, 0x73, 0xf5, 0x07,
	0x58, 0xcf, 0x56, 0x09, 0xed, 0x42, 0x89, 0x13, 0x39, 0xc6, 0x5c, 0xd0, 0xa1, 0x3f, 0x57, 0xa7,
	0x62, 0x4d, 0x35, 0x74, 0x91, 0xdb, 0xb1, 0x5c, 0x88, 0xe7, 0x3a, 0x6a, 0xaa, 0xfa, 0x1a, 0x3e,
	0xbe, 0x56, 0x10, 0x74, 0x1f, 0x0a, 0xf1, 0xe3, 0xea, 0x0f, 0xb4, 0xd2, 0x5d, 0x91, 0x84, 0xb7,
	0x06, 0xe8, 0x67, 0x28, 0xa7, 0x3f, 0x50, 0xcc, 0x99, 0x78, 0xf8, 0x96, 0x47, 0x57, 0x91, 0xb4,
	0x57, 0xfa, 0xc3, 0x60, 0x94, 0x32, 0x7f, 0x0f, 0x4f, 0x7c, 0xa6, 0xa5, 0x5c, 0xb0, 0xf9, 0xe2,
	0xdd, 0x3b, 0xe6, 0x94, 0x9e, 0xa9, 0xef, 0xad, 0x4e, 0x7c, 0x77, 0x3a, 0x56, 0xaf, 0xa0, 0x2e,
	0xd1, 0xd3, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x5c, 0xbc, 0x40, 0xb8, 0xa1, 0x09, 0x00, 0x00,
}
0707010000015F000081A4000003E800000064000000015E17A24700003334000000000000000000000000000000000000003D00000000cilium-proxy-20200109/go/envoy/service/tap/v2alpha/tap.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/service/tap/v2alpha/tap.proto

package envoy_service_tap_v2alpha

import (
	context "context"
	fmt "fmt"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	v2alpha "github.com/cilium/proxy/go/envoy/data/tap/v2alpha"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#not-implemented-hide:] Stream message for the Tap API. Envoy will open a stream to the server
// and stream taps without ever expecting a response.
type StreamTapsRequest struct {
	// Identifier data effectively is a structured metadata. As a performance optimization this will
	// only be sent in the first message on the stream.
	Identifier *StreamTapsRequest_Identifier `protobuf:"bytes,1,opt,name=identifier,proto3" json:"identifier,omitempty"`
	// The trace id. this can be used to merge together a streaming trace. Note that the trace_id
	// is not guaranteed to be spatially or temporally unique.
	TraceId uint64 `protobuf:"varint,2,opt,name=trace_id,json=traceId,proto3" json:"trace_id,omitempty"`
	// The trace data.
	Trace                *v2alpha.TraceWrapper `protobuf:"bytes,3,opt,name=trace,proto3" json:"trace,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *StreamTapsRequest) Reset()         { *m = StreamTapsRequest{} }
func (m *StreamTapsRequest) String() string { return proto.CompactTextString(m) }
func (*StreamTapsRequest) ProtoMessage()    {}
func (*StreamTapsRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_e1e8ad5aa2b63d8d, []int{0}
}

func (m *StreamTapsRequest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StreamTapsRequest.Unmarshal(m, b)
}
func (m *StreamTapsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StreamTapsRequest.Marshal(b, m, deterministic)
}
func (m *StreamTapsRequest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StreamTapsRequest.Merge(m, src)
}
func (m *StreamTapsRequest) XXX_Size() int {
	return xxx_messageInfo_StreamTapsRequest.Size(m)
}
func (m *StreamTapsRequest) XXX_DiscardUnknown() {
	xxx_messageInfo_StreamTapsRequest.DiscardUnknown(m)
}

var xxx_messageInfo_StreamTapsRequest proto.InternalMessageInfo

func (m *StreamTapsRequest) GetIdentifier() *StreamTapsRequest_Identifier {
	if m != nil {
		return m.Identifier
	}
	return nil
}

func (m *StreamTapsRequest) GetTraceId() uint64 {
	if m != nil {
		return m.TraceId
	}
	return 0
}

func (m *StreamTapsRequest) GetTrace() *v2alpha.TraceWrapper {
	if m != nil {
		return m.Trace
	}
	return nil
}

type StreamTapsRequest_Identifier struct {
	// The node sending taps over the stream.
	Node *core.Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"`
	// The opaque identifier that was set in the :ref:`output config
	// <envoy_api_field_service.tap.v2alpha.StreamingGrpcSink.tap_id>`.
	TapId                string   `protobuf:"bytes,2,opt,name=tap_id,json=tapId,proto3" json:"tap_id,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *StreamTapsRequest_Identifier) Reset()         { *m = StreamTapsRequest_Identifier{} }
func (m *StreamTapsRequest_Identifier) String() string { return proto.CompactTextString(m) }
func (*StreamTapsRequest_Identifier) ProtoMessage()    {}
func (*StreamTapsRequest_Identifier) Descriptor() ([]byte, []int) {
	return fileDescriptor_e1e8ad5aa2b63d8d, []int{0, 0}
}

func (m *StreamTapsRequest_Identifier) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StreamTapsRequest_Identifier.Unmarshal(m, b)
}
func (m *StreamTapsRequest_Identifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StreamTapsRequest_Identifier.Marshal(b, m, deterministic)
}
func (m *StreamTapsRequest_Identifier) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StreamTapsRequest_Identifier.Merge(m, src)
}
func (m *StreamTapsRequest_Identifier) XXX_Size() int {
	return xxx_messageInfo_StreamTapsRequest_Identifier.Size(m)
}
func (m *StreamTapsRequest_Identifier) XXX_DiscardUnknown() {
	xxx_messageInfo_StreamTapsRequest_Identifier.DiscardUnknown(m)
}

var xxx_messageInfo_StreamTapsRequest_Identifier proto.InternalMessageInfo

func (m *StreamTapsRequest_Identifier) GetNode() *core.Node {
	if m != nil {
		return m.Node
	}
	return nil
}

func (m *StreamTapsRequest_Identifier) GetTapId() string {
	if m != nil {
		return m.TapId
	}
	return ""
}

// [#not-implemented-hide:]
type StreamTapsResponse struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *StreamTapsResponse) Reset()         { *m = StreamTapsResponse{} }
func (m *StreamTapsResponse) String() string { return proto.CompactTextString(m) }
func (*StreamTapsResponse) ProtoMessage()    {}
func (*StreamTapsResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_e1e8ad5aa2b63d8d, []int{1}
}

func (m *StreamTapsResponse) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StreamTapsResponse.Unmarshal(m, b)
}
func (m *StreamTapsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StreamTapsResponse.Marshal(b, m, deterministic)
}
func (m *StreamTapsResponse) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StreamTapsResponse.Merge(m, src)
}
func (m *StreamTapsResponse) XXX_Size() int {
	return xxx_messageInfo_StreamTapsResponse.Size(m)
}
func (m *StreamTapsResponse) XXX_DiscardUnknown() {
	xxx_messageInfo_StreamTapsResponse.DiscardUnknown(m)
}

var xxx_messageInfo_StreamTapsResponse proto.InternalMessageInfo

func init() {
	proto.RegisterType((*StreamTapsRequest)(nil), "envoy.service.tap.v2alpha.StreamTapsRequest")
	proto.RegisterType((*StreamTapsRequest_Identifier)(nil), "envoy.service.tap.v2alpha.StreamTapsRequest.Identifier")
	proto.RegisterType((*StreamTapsResponse)(nil), "envoy.service.tap.v2alpha.StreamTapsResponse")
}

func init() {
	proto.RegisterFile("envoy/service/tap/v2alpha/tap.proto", fileDescriptor_e1e8ad5aa2b63d8d)
}

var fileDescriptor_e1e8ad5aa2b63d8d = []byte{
	// 363 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x91, 0xc1, 0x4b, 0x23, 0x31,
	0x14, 0xc6, 0x37, 0xdd, 0xb6, 0xdb, 0xcd, 0xc2, 0xb2, 0x1b, 0x94, 0xb6, 0x83, 0x87, 0x52, 0x0b,
	0xf6, 0xa0, 0x19, 0x18, 0x11, 0xc5, 0xe3, 0xdc, 0x7a, 0x91, 0x32, 0x1d, 0x28, 0x78, 0x91, 0xd7,
	0xe6, 0x89, 0xc1, 0x76, 0x12, 0x33, 0x71, 0xb4, 0x27, 0xaf, 0xe2, 0x3f, 0xe1, 0xff, 0xe9, 0x49,
	0x66, 0x32, 0xb5, 0x2d, 0x52, 0xd0, 0xdb, 0x0b, 0xef, 0xf7, 0x7d, 0xdf, 0x7b, 0x2f, 0x74, 0x1f,
	0x93, 0x4c, 0x2d, 0xfc, 0x14, 0x4d, 0x26, 0xa7, 0xe8, 0x5b, 0xd0, 0x7e, 0x16, 0xc0, 0x4c, 0xdf,
	0x40, 0x5e, 0x73, 0x6d, 0x94, 0x55, 0xac, 0x5d, 0x40, 0xbc, 0x84, 0x78, 0xde, 0x28, 0x21, 0x6f,
	0xcf, 0xe9, 0x41, 0x4b, 0x3f, 0x0b, 0xfc, 0xa9, 0x32, 0xe8, 0x4f, 0x20, 0x45, 0x27, 0xf4, 0x7a,
	0xae, 0x2b, 0xc0, 0xc2, 0x86, 0xf5, 0x83, 0x01, 0xad, 0xd1, 0x94, 0x54, 0x33, 0x83, 0x99, 0x14,
	0x60, 0xd1, 0x5f, 0x16, 0xae, 0xd1, 0x7d, 0xad, 0xd0, 0xff, 0x23, 0x6b, 0x10, 0xe6, 0x31, 0xe8,
	0x34, 0xc2, 0xbb, 0x7b, 0x4c, 0x2d, 0x1b, 0x53, 0x2a, 0x05, 0x26, 0x56, 0x5e, 0x4b, 0x34, 0x2d,
	0xd2, 0x21, 0xfd, 0x3f, 0xc1, 0x29, 0xdf, 0x3a, 0x22, 0xff, 0xe4, 0xc0, 0x07, 0x1f, 0xf2, 0x68,
	0xcd, 0x8a, 0xb5, 0x69, 0xc3, 0x1a, 0x98, 0xe2, 0x95, 0x14, 0xad, 0x4a, 0x87, 0xf4, 0xab, 0xd1,
	0xaf, 0xe2, 0x3d, 0x10, 0xec, 0x9c, 0xd6, 0x8a, 0xb2, 0xf5, 0xb3, 0x88, 0xeb, 0x95, 0x71, 0xf9,
	0x62, 0x1b, 0x59, 0x71, 0x0e, 0x8d, 0xdd, 0x76, 0x91, 0x93, 0x78, 0x97, 0x94, 0xae, 0x02, 0xd9,
	0x09, 0xad, 0x26, 0x4a, 0x60, 0x39, 0x77, 0xb3, 0x34, 0x02, 0x2d, 0x79, 0x16, 0xf0, 0xfc, 0x7e,
	0xfc, 0x42, 0x09, 0x0c, 0x1b, 0x6f, 0x61, 0xed, 0x85, 0x54, 0xfe, 0x91, 0xa8, 0xc0, 0xd9, 0x2e,
	0xad, 0x5b, 0xd0, 0xcb, 0xc9, 0x7e, 0x47, 0x35, 0x0b, 0x7a, 0x20, 0xba, 0x3b, 0x94, 0xad, 0xaf,
	0x97, 0x6a, 0x95, 0xa4, 0x18, 0x3c, 0xd1, 0xbf, 0x31, 0xe8, 0x91, 0x4c, 0x6e, 0x47, 0xee, 0x1e,
	0x6c, 0x4e, 0xe9, 0x8a, 0x63, 0x87, 0xdf, 0xb9, 0x96, 0x77, 0xf4, 0x45, 0xda, 0x85, 0x77, 0x7f,
	0xf4, 0x49, 0x78, 0x46, 0x0f, 0xa4, 0x72, 0x32, 0x6d, 0xd4, 0xe3, 0x62, 0xbb, 0x43, 0xd8, 0x88,
	0x41, 0x0f, 0xf3, 0xdf, 0x1e, 0x92, 0x67, 0x42, 0x26, 0xf5, 0xe2, 0xe7, 0x8f, 0xdf, 0x03, 0x00,
	0x00, 0xff, 0xff, 0xdc, 0x82, 0xbf, 0x46, 0x98, 0x02, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// TapSinkServiceClient is the client API for TapSinkService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type TapSinkServiceClient interface {
	// Envoy will connect and send StreamTapsRequest messages forever. It does not expect any
	// response to be sent as nothing would be done in the case of failure. The server should
	// disconnect if it expects Envoy to reconnect.
	StreamTaps(ctx context.Context, opts ...grpc.CallOption) (TapSinkService_StreamTapsClient, error)
}

type tapSinkServiceClient struct {
	cc *grpc.ClientConn
}

func NewTapSinkServiceClient(cc *grpc.ClientConn) TapSinkServiceClient {
	return &tapSinkServiceClient{cc}
}

func (c *tapSinkServiceClient) StreamTaps(ctx context.Context, opts ...grpc.CallOption) (TapSinkService_StreamTapsClient, error) {
	stream, err := c.cc.NewStream(ctx, &_TapSinkService_serviceDesc.Streams[0], "/envoy.service.tap.v2alpha.TapSinkService/StreamTaps", opts...)
	if err != nil {
		return nil, err
	}
	x := &tapSinkServiceStreamTapsClient{stream}
	return x, nil
}

type TapSinkService_StreamTapsClient interface {
	Send(*StreamTapsRequest) error
	CloseAndRecv() (*StreamTapsResponse, error)
	grpc.ClientStream
}

type tapSinkServiceStreamTapsClient struct {
	grpc.ClientStream
}

func (x *tapSinkServiceStreamTapsClient) Send(m *StreamTapsRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *tapSinkServiceStreamTapsClient) CloseAndRecv() (*StreamTapsResponse, error) {
	if err := x.ClientStream.CloseSend(); err != nil {
		return nil, err
	}
	m := new(StreamTapsResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

// TapSinkServiceServer is the server API for TapSinkService service.
type TapSinkServiceServer interface {
	// Envoy will connect and send StreamTapsRequest messages forever. It does not expect any
	// response to be sent as nothing would be done in the case of failure. The server should
	// disconnect if it expects Envoy to reconnect.
	StreamTaps(TapSinkService_StreamTapsServer) error
}

// UnimplementedTapSinkServiceServer can be embedded to have forward compatible implementations.
type UnimplementedTapSinkServiceServer struct {
}

func (*UnimplementedTapSinkServiceServer) StreamTaps(srv TapSinkService_StreamTapsServer) error {
	return status.Errorf(codes.Unimplemented, "method StreamTaps not implemented")
}

func RegisterTapSinkServiceServer(s *grpc.Server, srv TapSinkServiceServer) {
	s.RegisterService(&_TapSinkService_serviceDesc, srv)
}

func _TapSinkService_StreamTaps_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(TapSinkServiceServer).StreamTaps(&tapSinkServiceStreamTapsServer{stream})
}

type TapSinkService_StreamTapsServer interface {
	SendAndClose(*StreamTapsResponse) error
	Recv() (*StreamTapsRequest, error)
	grpc.ServerStream
}

type tapSinkServiceStreamTapsServer struct {
	grpc.ServerStream
}

func (x *tapSinkServiceStreamTapsServer) SendAndClose(m *StreamTapsResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *tapSinkServiceStreamTapsServer) Recv() (*StreamTapsRequest, error) {
	m := new(StreamTapsRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

var _TapSinkService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.service.tap.v2alpha.TapSinkService",
	HandlerType: (*TapSinkServiceServer)(nil),
	Methods:     []grpc.MethodDesc{},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "StreamTaps",
			Handler:       _TapSinkService_StreamTaps_Handler,
			ClientStreams: true,
		},
	},
	Metadata: "envoy/service/tap/v2alpha/tap.proto",
}
07070100000160000081A4000003E800000064000000015E17A24700003243000000000000000000000000000000000000003F00000000cilium-proxy-20200109/go/envoy/service/tap/v2alpha/tapds.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/service/tap/v2alpha/tapds.proto

package envoy_service_tap_v2alpha

import (
	context "context"
	fmt "fmt"
	v2 "github.com/cilium/proxy/go/envoy/api/v2"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// [#not-implemented-hide:] A tap resource is essentially a tap configuration with a name
// The filter TapDS config references this name.
type TapResource struct {
	// The name of the tap configuration.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Tap config to apply
	Config               *TapConfig `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"`
	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
	XXX_unrecognized     []byte     `json:"-"`
	XXX_sizecache        int32      `json:"-"`
}

func (m *TapResource) Reset()         { *m = TapResource{} }
func (m *TapResource) String() string { return proto.CompactTextString(m) }
func (*TapResource) ProtoMessage()    {}
func (*TapResource) Descriptor() ([]byte, []int) {
	return fileDescriptor_4eef591ebf2a5317, []int{0}
}

func (m *TapResource) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TapResource.Unmarshal(m, b)
}
func (m *TapResource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TapResource.Marshal(b, m, deterministic)
}
func (m *TapResource) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TapResource.Merge(m, src)
}
func (m *TapResource) XXX_Size() int {
	return xxx_messageInfo_TapResource.Size(m)
}
func (m *TapResource) XXX_DiscardUnknown() {
	xxx_messageInfo_TapResource.DiscardUnknown(m)
}

var xxx_messageInfo_TapResource proto.InternalMessageInfo

func (m *TapResource) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *TapResource) GetConfig() *TapConfig {
	if m != nil {
		return m.Config
	}
	return nil
}

func init() {
	proto.RegisterType((*TapResource)(nil), "envoy.service.tap.v2alpha.TapResource")
}

func init() {
	proto.RegisterFile("envoy/service/tap/v2alpha/tapds.proto", fileDescriptor_4eef591ebf2a5317)
}

var fileDescriptor_4eef591ebf2a5317 = []byte{
	// 364 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x92, 0xbf, 0x6e, 0xe2, 0x40,
	0x10, 0xc6, 0x6f, 0x2d, 0xc4, 0xe9, 0x96, 0x82, 0x93, 0xaf, 0x38, 0xf0, 0x21, 0x0e, 0x71, 0xdc,
	0x1d, 0xba, 0x62, 0x7d, 0x72, 0x3a, 0x94, 0xca, 0x41, 0xa9, 0x91, 0x71, 0x93, 0x2a, 0x1a, 0xcc,
	0x06, 0x56, 0xb2, 0x77, 0x36, 0xde, 0xc5, 0x82, 0x36, 0x55, 0xfa, 0xbc, 0x57, 0x9a, 0xbc, 0x42,
	0x9e, 0x22, 0x55, 0xe4, 0x3f, 0xa0, 0x90, 0xc8, 0xa9, 0xd2, 0x8d, 0x3c, 0xdf, 0xf7, 0x1b, 0xcf,
	0x7e, 0x43, 0x7f, 0x73, 0x99, 0xe1, 0xce, 0xd5, 0x3c, 0xcd, 0x44, 0xc4, 0x5d, 0x03, 0xca, 0xcd,
	0x3c, 0x88, 0xd5, 0x1a, 0xf2, 0x7a, 0xa9, 0x99, 0x4a, 0xd1, 0xa0, 0xdd, 0x2d, 0x64, 0xac, 0x92,
	0x31, 0x03, 0x8a, 0x55, 0x32, 0xa7, 0x57, 0x12, 0x40, 0x09, 0x37, 0xf3, 0xdc, 0xa5, 0xd0, 0x11,
	0x66, 0x3c, 0xdd, 0x95, 0x46, 0xe7, 0x4f, 0x3d, 0x3f, 0xc2, 0x24, 0x41, 0x59, 0xe9, 0x7a, 0x2b,
	0xc4, 0x55, 0xcc, 0x0b, 0x0c, 0x48, 0x89, 0x06, 0x8c, 0x40, 0x59, 0x8d, 0x77, 0xbe, 0x67, 0x10,
	0x8b, 0x25, 0x18, 0xee, 0xee, 0x8b, 0xb2, 0x31, 0x5c, 0xd3, 0x56, 0x08, 0x2a, 0xe0, 0x1a, 0x37,
	0x69, 0xc4, 0xed, 0x1f, 0xb4, 0x21, 0x21, 0xe1, 0x1d, 0x32, 0x20, 0xe3, 0x2f, 0xfe, 0xe7, 0x27,
	0xbf, 0x91, 0x5a, 0x03, 0x12, 0x14, 0x1f, 0xed, 0x53, 0xda, 0x8c, 0x50, 0x5e, 0x89, 0x55, 0xc7,
	0x1a, 0x90, 0x71, 0xcb, 0x1b, 0xb1, 0xda, 0xa5, 0x58, 0x08, 0xea, 0xac, 0xd0, 0x06, 0x95, 0xc7,
	0xbb, 0xb7, 0xe8, 0xb7, 0x10, 0xd4, 0x74, 0xbf, 0xdf, 0xbc, 0x74, 0xd9, 0x17, 0xf4, 0xeb, 0xdc,
	0xa4, 0x1c, 0x92, 0x83, 0x45, 0xdb, 0xfd, 0x8a, 0x0c, 0x4a, 0xb0, 0xcc, 0x63, 0x07, 0x4f, 0xc0,
	0xaf, 0x37, 0x5c, 0x1b, 0xe7, 0x67, 0x6d, 0x5f, 0x2b, 0x94, 0x9a, 0x0f, 0x3f, 0x8d, 0xc9, 0x7f,
	0x62, 0x2f, 0x68, 0x7b, 0xca, 0x63, 0x03, 0x2f, 0xc8, 0xbf, 0x5e, 0x39, 0xf3, 0xf6, 0x1b, 0xfc,
	0xe8, 0x7d, 0xd1, 0xd1, 0x8c, 0x2d, 0x6d, 0x9f, 0x73, 0x13, 0xad, 0x3f, 0xf2, 0xef, 0x47, 0x37,
	0x0f, 0x8f, 0x77, 0x56, 0x7f, 0xd8, 0x3d, 0x3a, 0x88, 0x89, 0x01, 0x75, 0x59, 0x3e, 0xa6, 0x9e,
	0x90, 0x7f, 0xfe, 0x84, 0xfe, 0x15, 0x58, 0xa2, 0x54, 0x8a, 0xdb, 0x5d, 0x7d, 0x1a, 0x3e, 0x0d,
	0xf3, 0x53, 0x9c, 0xe5, 0x89, 0xcf, 0xc8, 0x2d, 0x21, 0x8b, 0x66, 0x91, 0xfe, 0xc9, 0x73, 0x00,
	0x00, 0x00, 0xff, 0xff, 0xca, 0x3c, 0xff, 0x65, 0xbe, 0x02, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// TapDiscoveryServiceClient is the client API for TapDiscoveryService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type TapDiscoveryServiceClient interface {
	StreamTapConfigs(ctx context.Context, opts ...grpc.CallOption) (TapDiscoveryService_StreamTapConfigsClient, error)
	DeltaTapConfigs(ctx context.Context, opts ...grpc.CallOption) (TapDiscoveryService_DeltaTapConfigsClient, error)
	FetchTapConfigs(ctx context.Context, in *v2.DiscoveryRequest, opts ...grpc.CallOption) (*v2.DiscoveryResponse, error)
}

type tapDiscoveryServiceClient struct {
	cc *grpc.ClientConn
}

func NewTapDiscoveryServiceClient(cc *grpc.ClientConn) TapDiscoveryServiceClient {
	return &tapDiscoveryServiceClient{cc}
}

func (c *tapDiscoveryServiceClient) StreamTapConfigs(ctx context.Context, opts ...grpc.CallOption) (TapDiscoveryService_StreamTapConfigsClient, error) {
	stream, err := c.cc.NewStream(ctx, &_TapDiscoveryService_serviceDesc.Streams[0], "/envoy.service.tap.v2alpha.TapDiscoveryService/StreamTapConfigs", opts...)
	if err != nil {
		return nil, err
	}
	x := &tapDiscoveryServiceStreamTapConfigsClient{stream}
	return x, nil
}

type TapDiscoveryService_StreamTapConfigsClient interface {
	Send(*v2.DiscoveryRequest) error
	Recv() (*v2.DiscoveryResponse, error)
	grpc.ClientStream
}

type tapDiscoveryServiceStreamTapConfigsClient struct {
	grpc.ClientStream
}

func (x *tapDiscoveryServiceStreamTapConfigsClient) Send(m *v2.DiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *tapDiscoveryServiceStreamTapConfigsClient) Recv() (*v2.DiscoveryResponse, error) {
	m := new(v2.DiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *tapDiscoveryServiceClient) DeltaTapConfigs(ctx context.Context, opts ...grpc.CallOption) (TapDiscoveryService_DeltaTapConfigsClient, error) {
	stream, err := c.cc.NewStream(ctx, &_TapDiscoveryService_serviceDesc.Streams[1], "/envoy.service.tap.v2alpha.TapDiscoveryService/DeltaTapConfigs", opts...)
	if err != nil {
		return nil, err
	}
	x := &tapDiscoveryServiceDeltaTapConfigsClient{stream}
	return x, nil
}

type TapDiscoveryService_DeltaTapConfigsClient interface {
	Send(*v2.DeltaDiscoveryRequest) error
	Recv() (*v2.DeltaDiscoveryResponse, error)
	grpc.ClientStream
}

type tapDiscoveryServiceDeltaTapConfigsClient struct {
	grpc.ClientStream
}

func (x *tapDiscoveryServiceDeltaTapConfigsClient) Send(m *v2.DeltaDiscoveryRequest) error {
	return x.ClientStream.SendMsg(m)
}

func (x *tapDiscoveryServiceDeltaTapConfigsClient) Recv() (*v2.DeltaDiscoveryResponse, error) {
	m := new(v2.DeltaDiscoveryResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *tapDiscoveryServiceClient) FetchTapConfigs(ctx context.Context, in *v2.DiscoveryRequest, opts ...grpc.CallOption) (*v2.DiscoveryResponse, error) {
	out := new(v2.DiscoveryResponse)
	err := c.cc.Invoke(ctx, "/envoy.service.tap.v2alpha.TapDiscoveryService/FetchTapConfigs", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// TapDiscoveryServiceServer is the server API for TapDiscoveryService service.
type TapDiscoveryServiceServer interface {
	StreamTapConfigs(TapDiscoveryService_StreamTapConfigsServer) error
	DeltaTapConfigs(TapDiscoveryService_DeltaTapConfigsServer) error
	FetchTapConfigs(context.Context, *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error)
}

// UnimplementedTapDiscoveryServiceServer can be embedded to have forward compatible implementations.
type UnimplementedTapDiscoveryServiceServer struct {
}

func (*UnimplementedTapDiscoveryServiceServer) StreamTapConfigs(srv TapDiscoveryService_StreamTapConfigsServer) error {
	return status.Errorf(codes.Unimplemented, "method StreamTapConfigs not implemented")
}
func (*UnimplementedTapDiscoveryServiceServer) DeltaTapConfigs(srv TapDiscoveryService_DeltaTapConfigsServer) error {
	return status.Errorf(codes.Unimplemented, "method DeltaTapConfigs not implemented")
}
func (*UnimplementedTapDiscoveryServiceServer) FetchTapConfigs(ctx context.Context, req *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method FetchTapConfigs not implemented")
}

func RegisterTapDiscoveryServiceServer(s *grpc.Server, srv TapDiscoveryServiceServer) {
	s.RegisterService(&_TapDiscoveryService_serviceDesc, srv)
}

func _TapDiscoveryService_StreamTapConfigs_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(TapDiscoveryServiceServer).StreamTapConfigs(&tapDiscoveryServiceStreamTapConfigsServer{stream})
}

type TapDiscoveryService_StreamTapConfigsServer interface {
	Send(*v2.DiscoveryResponse) error
	Recv() (*v2.DiscoveryRequest, error)
	grpc.ServerStream
}

type tapDiscoveryServiceStreamTapConfigsServer struct {
	grpc.ServerStream
}

func (x *tapDiscoveryServiceStreamTapConfigsServer) Send(m *v2.DiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *tapDiscoveryServiceStreamTapConfigsServer) Recv() (*v2.DiscoveryRequest, error) {
	m := new(v2.DiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _TapDiscoveryService_DeltaTapConfigs_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(TapDiscoveryServiceServer).DeltaTapConfigs(&tapDiscoveryServiceDeltaTapConfigsServer{stream})
}

type TapDiscoveryService_DeltaTapConfigsServer interface {
	Send(*v2.DeltaDiscoveryResponse) error
	Recv() (*v2.DeltaDiscoveryRequest, error)
	grpc.ServerStream
}

type tapDiscoveryServiceDeltaTapConfigsServer struct {
	grpc.ServerStream
}

func (x *tapDiscoveryServiceDeltaTapConfigsServer) Send(m *v2.DeltaDiscoveryResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *tapDiscoveryServiceDeltaTapConfigsServer) Recv() (*v2.DeltaDiscoveryRequest, error) {
	m := new(v2.DeltaDiscoveryRequest)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _TapDiscoveryService_FetchTapConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(v2.DiscoveryRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(TapDiscoveryServiceServer).FetchTapConfigs(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/envoy.service.tap.v2alpha.TapDiscoveryService/FetchTapConfigs",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(TapDiscoveryServiceServer).FetchTapConfigs(ctx, req.(*v2.DiscoveryRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _TapDiscoveryService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.service.tap.v2alpha.TapDiscoveryService",
	HandlerType: (*TapDiscoveryServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "FetchTapConfigs",
			Handler:    _TapDiscoveryService_FetchTapConfigs_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "StreamTapConfigs",
			Handler:       _TapDiscoveryService_StreamTapConfigs_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
		{
			StreamName:    "DeltaTapConfigs",
			Handler:       _TapDiscoveryService_DeltaTapConfigs_Handler,
			ServerStreams: true,
			ClientStreams: true,
		},
	},
	Metadata: "envoy/service/tap/v2alpha/tapds.proto",
}
 07070100000161000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000002D00000000cilium-proxy-20200109/go/envoy/service/trace  07070100000162000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000003000000000cilium-proxy-20200109/go/envoy/service/trace/v2   07070100000163000081A4000003E800000064000000015E17A24700002F7F000000000000000000000000000000000000004400000000cilium-proxy-20200109/go/envoy/service/trace/v2/trace_service.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/service/trace/v2/trace_service.proto

package envoy_service_trace_v2

import (
	context "context"
	fmt "fmt"
	v1 "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1"
	core "github.com/cilium/proxy/go/envoy/api/v2/core"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type StreamTracesResponse struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *StreamTracesResponse) Reset()         { *m = StreamTracesResponse{} }
func (m *StreamTracesResponse) String() string { return proto.CompactTextString(m) }
func (*StreamTracesResponse) ProtoMessage()    {}
func (*StreamTracesResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_6feca8f22ae39b94, []int{0}
}

func (m *StreamTracesResponse) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StreamTracesResponse.Unmarshal(m, b)
}
func (m *StreamTracesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StreamTracesResponse.Marshal(b, m, deterministic)
}
func (m *StreamTracesResponse) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StreamTracesResponse.Merge(m, src)
}
func (m *StreamTracesResponse) XXX_Size() int {
	return xxx_messageInfo_StreamTracesResponse.Size(m)
}
func (m *StreamTracesResponse) XXX_DiscardUnknown() {
	xxx_messageInfo_StreamTracesResponse.DiscardUnknown(m)
}

var xxx_messageInfo_StreamTracesResponse proto.InternalMessageInfo

type StreamTracesMessage struct {
	// Identifier data effectively is a structured metadata.
	// As a performance optimization this will only be sent in the first message
	// on the stream.
	Identifier *StreamTracesMessage_Identifier `protobuf:"bytes,1,opt,name=identifier,proto3" json:"identifier,omitempty"`
	// A list of Span entries
	Spans                []*v1.Span `protobuf:"bytes,2,rep,name=spans,proto3" json:"spans,omitempty"`
	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
	XXX_unrecognized     []byte     `json:"-"`
	XXX_sizecache        int32      `json:"-"`
}

func (m *StreamTracesMessage) Reset()         { *m = StreamTracesMessage{} }
func (m *StreamTracesMessage) String() string { return proto.CompactTextString(m) }
func (*StreamTracesMessage) ProtoMessage()    {}
func (*StreamTracesMessage) Descriptor() ([]byte, []int) {
	return fileDescriptor_6feca8f22ae39b94, []int{1}
}

func (m *StreamTracesMessage) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StreamTracesMessage.Unmarshal(m, b)
}
func (m *StreamTracesMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StreamTracesMessage.Marshal(b, m, deterministic)
}
func (m *StreamTracesMessage) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StreamTracesMessage.Merge(m, src)
}
func (m *StreamTracesMessage) XXX_Size() int {
	return xxx_messageInfo_StreamTracesMessage.Size(m)
}
func (m *StreamTracesMessage) XXX_DiscardUnknown() {
	xxx_messageInfo_StreamTracesMessage.DiscardUnknown(m)
}

var xxx_messageInfo_StreamTracesMessage proto.InternalMessageInfo

func (m *StreamTracesMessage) GetIdentifier() *StreamTracesMessage_Identifier {
	if m != nil {
		return m.Identifier
	}
	return nil
}

func (m *StreamTracesMessage) GetSpans() []*v1.Span {
	if m != nil {
		return m.Spans
	}
	return nil
}

type StreamTracesMessage_Identifier struct {
	// The node sending the access log messages over the stream.
	Node                 *core.Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"`
	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
	XXX_unrecognized     []byte     `json:"-"`
	XXX_sizecache        int32      `json:"-"`
}

func (m *StreamTracesMessage_Identifier) Reset()         { *m = StreamTracesMessage_Identifier{} }
func (m *StreamTracesMessage_Identifier) String() string { return proto.CompactTextString(m) }
func (*StreamTracesMessage_Identifier) ProtoMessage()    {}
func (*StreamTracesMessage_Identifier) Descriptor() ([]byte, []int) {
	return fileDescriptor_6feca8f22ae39b94, []int{1, 0}
}

func (m *StreamTracesMessage_Identifier) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StreamTracesMessage_Identifier.Unmarshal(m, b)
}
func (m *StreamTracesMessage_Identifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StreamTracesMessage_Identifier.Marshal(b, m, deterministic)
}
func (m *StreamTracesMessage_Identifier) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StreamTracesMessage_Identifier.Merge(m, src)
}
func (m *StreamTracesMessage_Identifier) XXX_Size() int {
	return xxx_messageInfo_StreamTracesMessage_Identifier.Size(m)
}
func (m *StreamTracesMessage_Identifier) XXX_DiscardUnknown() {
	xxx_messageInfo_StreamTracesMessage_Identifier.DiscardUnknown(m)
}

var xxx_messageInfo_StreamTracesMessage_Identifier proto.InternalMessageInfo

func (m *StreamTracesMessage_Identifier) GetNode() *core.Node {
	if m != nil {
		return m.Node
	}
	return nil
}

func init() {
	proto.RegisterType((*StreamTracesResponse)(nil), "envoy.service.trace.v2.StreamTracesResponse")
	proto.RegisterType((*StreamTracesMessage)(nil), "envoy.service.trace.v2.StreamTracesMessage")
	proto.RegisterType((*StreamTracesMessage_Identifier)(nil), "envoy.service.trace.v2.StreamTracesMessage.Identifier")
}

func init() {
	proto.RegisterFile("envoy/service/trace/v2/trace_service.proto", fileDescriptor_6feca8f22ae39b94)
}

var fileDescriptor_6feca8f22ae39b94 = []byte{
	// 343 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x90, 0x41, 0x4b, 0xeb, 0x40,
	0x14, 0x85, 0xdf, 0xf4, 0xbd, 0x3e, 0x64, 0xda, 0x85, 0x46, 0x69, 0x4b, 0x28, 0x58, 0x8a, 0x42,
	0x51, 0x99, 0xd0, 0x88, 0x2e, 0x5d, 0xc4, 0x55, 0x17, 0x4a, 0x49, 0xc5, 0xad, 0x4c, 0x93, 0x6b,
	0x19, 0x68, 0xe7, 0x0e, 0x99, 0x31, 0xd8, 0x85, 0x7b, 0xf1, 0x9f, 0xfa, 0x17, 0x5c, 0x49, 0x66,
	0x92, 0x9a, 0x45, 0x05, 0xdd, 0x5d, 0xee, 0x3d, 0xe7, 0xf0, 0xdd, 0x43, 0x4f, 0x40, 0xe6, 0xb8,
	0x0e, 0x34, 0x64, 0xb9, 0x48, 0x20, 0x30, 0x19, 0x4f, 0x20, 0xc8, 0x43, 0x37, 0x3c, 0x94, 0x6b,
	0xa6, 0x32, 0x34, 0xe8, 0x75, 0xac, 0x96, 0x55, 0x4b, 0x2b, 0x61, 0x79, 0xe8, 0xf7, 0x5d, 0x06,
	0x57, 0xa2, 0x70, 0x26, 0x98, 0x41, 0x30, 0xe7, 0xba, 0x74, 0xf9, 0xfd, 0x05, 0xe2, 0x62, 0x09,
	0xf6, 0xcc, 0xa5, 0x44, 0xc3, 0x8d, 0x40, 0xa9, 0xcb, 0xeb, 0x31, 0x2a, 0x90, 0x09, 0x48, 0xfd,
	0xa4, 0x03, 0xbb, 0xa9, 0x10, 0xc6, 0x6e, 0x28, 0x65, 0xdd, 0x9c, 0x2f, 0x45, 0xca, 0x0d, 0x04,
	0xd5, 0xe0, 0x0e, 0xc3, 0x0e, 0x3d, 0x98, 0x99, 0x0c, 0xf8, 0xea, 0xae, 0x50, 0xeb, 0x18, 0xb4,
	0x42, 0xa9, 0x61, 0xf8, 0x4e, 0xe8, 0x7e, 0xfd, 0x70, 0x03, 0x5a, 0xf3, 0x05, 0x78, 0xf7, 0x94,
	0x8a, 0x14, 0xa4, 0x11, 0x8f, 0x02, 0xb2, 0x1e, 0x19, 0x90, 0x51, 0x2b, 0xbc, 0x64, 0xdb, 0x1f,
	0x63, 0x5b, 0x02, 0xd8, 0x64, 0xe3, 0x8e, 0x6b, 0x49, 0xde, 0x05, 0x6d, 0x6a, 0xc5, 0xa5, 0xee,
	0x35, 0x06, 0x7f, 0x47, 0xad, 0xf0, 0x90, 0x7d, 0xfd, 0xe5, 0x48, 0xab, 0xd4, 0x31, 0x9b, 0x29,
	0x2e, 0x63, 0xa7, 0xf6, 0xaf, 0x29, 0x9d, 0xd4, 0x43, 0xfe, 0x49, 0x4c, 0xa1, 0xc4, 0xea, 0x96,
	0x58, 0x5c, 0x89, 0x02, 0xa6, 0xe8, 0x95, 0xdd, 0x62, 0x0a, 0xd1, 0xce, 0x47, 0xd4, 0x7c, 0x23,
	0x8d, 0x5d, 0x12, 0x5b, 0x79, 0xf8, 0x42, 0xdb, 0x96, 0x71, 0xe6, 0xf8, 0xbd, 0x15, 0x6d, 0xd7,
	0xc9, 0xbd, 0xd3, 0x5f, 0xfc, 0xe7, 0x9f, 0xfd, 0x44, 0xbc, 0xa9, 0xf9, 0xcf, 0x88, 0x44, 0x57,
	0xf4, 0x48, 0xa0, 0x73, 0xa9, 0x0c, 0x9f, 0xd7, 0xdf, 0x04, 0x44, 0x7b, 0x75, 0xc8, 0x69, 0xd1,
	0xc9, 0x94, 0xbc, 0x12, 0x32, 0xff, 0x6f, 0xfb, 0x39, 0xff, 0x0c, 0x00, 0x00, 0xff, 0xff, 0x96,
	0x9b, 0x8b, 0xc0, 0x8b, 0x02, 0x00, 0x00,
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// TraceServiceClient is the client API for TraceService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type TraceServiceClient interface {
	// Envoy will connect and send StreamTracesMessage messages forever. It does
	// not expect any response to be sent as nothing would be done in the case
	// of failure.
	StreamTraces(ctx context.Context, opts ...grpc.CallOption) (TraceService_StreamTracesClient, error)
}

type traceServiceClient struct {
	cc *grpc.ClientConn
}

func NewTraceServiceClient(cc *grpc.ClientConn) TraceServiceClient {
	return &traceServiceClient{cc}
}

func (c *traceServiceClient) StreamTraces(ctx context.Context, opts ...grpc.CallOption) (TraceService_StreamTracesClient, error) {
	stream, err := c.cc.NewStream(ctx, &_TraceService_serviceDesc.Streams[0], "/envoy.service.trace.v2.TraceService/StreamTraces", opts...)
	if err != nil {
		return nil, err
	}
	x := &traceServiceStreamTracesClient{stream}
	return x, nil
}

type TraceService_StreamTracesClient interface {
	Send(*StreamTracesMessage) error
	CloseAndRecv() (*StreamTracesResponse, error)
	grpc.ClientStream
}

type traceServiceStreamTracesClient struct {
	grpc.ClientStream
}

func (x *traceServiceStreamTracesClient) Send(m *StreamTracesMessage) error {
	return x.ClientStream.SendMsg(m)
}

func (x *traceServiceStreamTracesClient) CloseAndRecv() (*StreamTracesResponse, error) {
	if err := x.ClientStream.CloseSend(); err != nil {
		return nil, err
	}
	m := new(StreamTracesResponse)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

// TraceServiceServer is the server API for TraceService service.
type TraceServiceServer interface {
	// Envoy will connect and send StreamTracesMessage messages forever. It does
	// not expect any response to be sent as nothing would be done in the case
	// of failure.
	StreamTraces(TraceService_StreamTracesServer) error
}

// UnimplementedTraceServiceServer can be embedded to have forward compatible implementations.
type UnimplementedTraceServiceServer struct {
}

func (*UnimplementedTraceServiceServer) StreamTraces(srv TraceService_StreamTracesServer) error {
	return status.Errorf(codes.Unimplemented, "method StreamTraces not implemented")
}

func RegisterTraceServiceServer(s *grpc.Server, srv TraceServiceServer) {
	s.RegisterService(&_TraceService_serviceDesc, srv)
}

func _TraceService_StreamTraces_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(TraceServiceServer).StreamTraces(&traceServiceStreamTracesServer{stream})
}

type TraceService_StreamTracesServer interface {
	SendAndClose(*StreamTracesResponse) error
	Recv() (*StreamTracesMessage, error)
	grpc.ServerStream
}

type traceServiceStreamTracesServer struct {
	grpc.ServerStream
}

func (x *traceServiceStreamTracesServer) SendAndClose(m *StreamTracesResponse) error {
	return x.ServerStream.SendMsg(m)
}

func (x *traceServiceStreamTracesServer) Recv() (*StreamTracesMessage, error) {
	m := new(StreamTracesMessage)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

var _TraceService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "envoy.service.trace.v2.TraceService",
	HandlerType: (*TraceServiceServer)(nil),
	Methods:     []grpc.MethodDesc{},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "StreamTraces",
			Handler:       _TraceService_StreamTraces_Handler,
			ClientStreams: true,
		},
	},
	Metadata: "envoy/service/trace/v2/trace_service.proto",
}
 07070100000164000041ED000003E800000064000000035E17A24700000000000000000000000000000000000000000000002400000000cilium-proxy-20200109/go/envoy/type   07070100000165000081A4000003E800000064000000015E17A247000009C2000000000000000000000000000000000000002F00000000cilium-proxy-20200109/go/envoy/type/http.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/type/http.proto

package envoy_type

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type CodecClientType int32

const (
	CodecClientType_HTTP1 CodecClientType = 0
	CodecClientType_HTTP2 CodecClientType = 1
	// [#not-implemented-hide:] QUIC implementation is not production ready yet. Use this enum with
	// caution to prevent accidental execution of QUIC code. I.e. `!= HTTP2` is no longer sufficient
	// to distinguish HTTP1 and HTTP2 traffic.
	CodecClientType_HTTP3 CodecClientType = 2
)

var CodecClientType_name = map[int32]string{
	0: "HTTP1",
	1: "HTTP2",
	2: "HTTP3",
}

var CodecClientType_value = map[string]int32{
	"HTTP1": 0,
	"HTTP2": 1,
	"HTTP3": 2,
}

func (x CodecClientType) String() string {
	return proto.EnumName(CodecClientType_name, int32(x))
}

func (CodecClientType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_e223f71709aae71c, []int{0}
}

func init() {
	proto.RegisterEnum("envoy.type.CodecClientType", CodecClientType_name, CodecClientType_value)
}

func init() { proto.RegisterFile("envoy/type/http.proto", fileDescriptor_e223f71709aae71c) }

var fileDescriptor_e223f71709aae71c = []byte{
	// 127 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4d, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0xcf, 0x28, 0x29, 0x29, 0xd0, 0x2b, 0x28, 0xca, 0x2f,
	0xc9, 0x17, 0xe2, 0x02, 0x0b, 0xeb, 0x81, 0x84, 0xb5, 0x8c, 0xb8, 0xf8, 0x9d, 0xf3, 0x53, 0x52,
	0x93, 0x9d, 0x73, 0x32, 0x53, 0xf3, 0x4a, 0x42, 0x2a, 0x0b, 0x52, 0x85, 0x38, 0xb9, 0x58, 0x3d,
	0x42, 0x42, 0x02, 0x0c, 0x05, 0x18, 0x60, 0x4c, 0x23, 0x01, 0x46, 0x18, 0xd3, 0x58, 0x80, 0xc9,
	0x49, 0x9d, 0x4b, 0x22, 0x33, 0x5f, 0x0f, 0x6c, 0x48, 0x41, 0x51, 0x7e, 0x45, 0xa5, 0x1e, 0xc2,
	0x3c, 0x27, 0x4e, 0x8f, 0x92, 0x92, 0x82, 0x00, 0x90, 0x35, 0x01, 0x8c, 0x49, 0x6c, 0x60, 0xfb,
	0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x98, 0xe4, 0xdd, 0xe7, 0x88, 0x00, 0x00, 0x00,
}
  07070100000166000081A4000003E800000064000000015E17A24700003C1E000000000000000000000000000000000000003600000000cilium-proxy-20200109/go/envoy/type/http_status.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/type/http_status.proto

package envoy_type

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// HTTP response codes supported in Envoy.
// For more details: https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
type StatusCode int32

const (
	// Empty - This code not part of the HTTP status code specification, but it is needed for proto
	// `enum` type.
	StatusCode_Empty                         StatusCode = 0
	StatusCode_Continue                      StatusCode = 100
	StatusCode_OK                            StatusCode = 200
	StatusCode_Created                       StatusCode = 201
	StatusCode_Accepted                      StatusCode = 202
	StatusCode_NonAuthoritativeInformation   StatusCode = 203
	StatusCode_NoContent                     StatusCode = 204
	StatusCode_ResetContent                  StatusCode = 205
	StatusCode_PartialContent                StatusCode = 206
	StatusCode_MultiStatus                   StatusCode = 207
	StatusCode_AlreadyReported               StatusCode = 208
	StatusCode_IMUsed                        StatusCode = 226
	StatusCode_MultipleChoices               StatusCode = 300
	StatusCode_MovedPermanently              StatusCode = 301
	StatusCode_Found                         StatusCode = 302
	StatusCode_SeeOther                      StatusCode = 303
	StatusCode_NotModified                   StatusCode = 304
	StatusCode_UseProxy                      StatusCode = 305
	StatusCode_TemporaryRedirect             StatusCode = 307
	StatusCode_PermanentRedirect             StatusCode = 308
	StatusCode_BadRequest                    StatusCode = 400
	StatusCode_Unauthorized                  StatusCode = 401
	StatusCode_PaymentRequired               StatusCode = 402
	StatusCode_Forbidden                     StatusCode = 403
	StatusCode_NotFound                      StatusCode = 404
	StatusCode_MethodNotAllowed              StatusCode = 405
	StatusCode_NotAcceptable                 StatusCode = 406
	StatusCode_ProxyAuthenticationRequired   StatusCode = 407
	StatusCode_RequestTimeout                StatusCode = 408
	StatusCode_Conflict                      StatusCode = 409
	StatusCode_Gone                          StatusCode = 410
	StatusCode_LengthRequired                StatusCode = 411
	StatusCode_PreconditionFailed            StatusCode = 412
	StatusCode_PayloadTooLarge               StatusCode = 413
	StatusCode_URITooLong                    StatusCode = 414
	StatusCode_UnsupportedMediaType          StatusCode = 415
	StatusCode_RangeNotSatisfiable           StatusCode = 416
	StatusCode_ExpectationFailed             StatusCode = 417
	StatusCode_MisdirectedRequest            StatusCode = 421
	StatusCode_UnprocessableEntity           StatusCode = 422
	StatusCode_Locked                        StatusCode = 423
	StatusCode_FailedDependency              StatusCode = 424
	StatusCode_UpgradeRequired               StatusCode = 426
	StatusCode_PreconditionRequired          StatusCode = 428
	StatusCode_TooManyRequests               StatusCode = 429
	StatusCode_RequestHeaderFieldsTooLarge   StatusCode = 431
	StatusCode_InternalServerError           StatusCode = 500
	StatusCode_NotImplemented                StatusCode = 501
	StatusCode_BadGateway                    StatusCode = 502
	StatusCode_ServiceUnavailable            StatusCode = 503
	StatusCode_GatewayTimeout                StatusCode = 504
	StatusCode_HTTPVersionNotSupported       StatusCode = 505
	StatusCode_VariantAlsoNegotiates         StatusCode = 506
	StatusCode_InsufficientStorage           StatusCode = 507
	StatusCode_LoopDetected                  StatusCode = 508
	StatusCode_NotExtended                   StatusCode = 510
	StatusCode_NetworkAuthenticationRequired StatusCode = 511
)

var StatusCode_name = map[int32]string{
	0:   "Empty",
	100: "Continue",
	200: "OK",
	201: "Created",
	202: "Accepted",
	203: "NonAuthoritativeInformation",
	204: "NoContent",
	205: "ResetContent",
	206: "PartialContent",
	207: "MultiStatus",
	208: "AlreadyReported",
	226: "IMUsed",
	300: "MultipleChoices",
	301: "MovedPermanently",
	302: "Found",
	303: "SeeOther",
	304: "NotModified",
	305: "UseProxy",
	307: "TemporaryRedirect",
	308: "PermanentRedirect",
	400: "BadRequest",
	401: "Unauthorized",
	402: "PaymentRequired",
	403: "Forbidden",
	404: "NotFound",
	405: "MethodNotAllowed",
	406: "NotAcceptable",
	407: "ProxyAuthenticationRequired",
	408: "RequestTimeout",
	409: "Conflict",
	410: "Gone",
	411: "LengthRequired",
	412: "PreconditionFailed",
	413: "PayloadTooLarge",
	414: "URITooLong",
	415: "UnsupportedMediaType",
	416: "RangeNotSatisfiable",
	417: "ExpectationFailed",
	421: "MisdirectedRequest",
	422: "UnprocessableEntity",
	423: "Locked",
	424: "FailedDependency",
	426: "UpgradeRequired",
	428: "PreconditionRequired",
	429: "TooManyRequests",
	431: "RequestHeaderFieldsTooLarge",
	500: "InternalServerError",
	501: "NotImplemented",
	502: "BadGateway",
	503: "ServiceUnavailable",
	504: "GatewayTimeout",
	505: "HTTPVersionNotSupported",
	506: "VariantAlsoNegotiates",
	507: "InsufficientStorage",
	508: "LoopDetected",
	510: "NotExtended",
	511: "NetworkAuthenticationRequired",
}

var StatusCode_value = map[string]int32{
	"Empty":                         0,
	"Continue":                      100,
	"OK":                            200,
	"Created":                       201,
	"Accepted":                      202,
	"NonAuthoritativeInformation":   203,
	"NoContent":                     204,
	"ResetContent":                  205,
	"PartialContent":                206,
	"MultiStatus":                   207,
	"AlreadyReported":               208,
	"IMUsed":                        226,
	"MultipleChoices":               300,
	"MovedPermanently":              301,
	"Found":                         302,
	"SeeOther":                      303,
	"NotModified":                   304,
	"UseProxy":                      305,
	"TemporaryRedirect":             307,
	"PermanentRedirect":             308,
	"BadRequest":                    400,
	"Unauthorized":                  401,
	"PaymentRequired":               402,
	"Forbidden":                     403,
	"NotFound":                      404,
	"MethodNotAllowed":              405,
	"NotAcceptable":                 406,
	"ProxyAuthenticationRequired":   407,
	"RequestTimeout":                408,
	"Conflict":                      409,
	"Gone":                          410,
	"LengthRequired":                411,
	"PreconditionFailed":            412,
	"PayloadTooLarge":               413,
	"URITooLong":                    414,
	"UnsupportedMediaType":          415,
	"RangeNotSatisfiable":           416,
	"ExpectationFailed":             417,
	"MisdirectedRequest":            421,
	"UnprocessableEntity":           422,
	"Locked":                        423,
	"FailedDependency":              424,
	"UpgradeRequired":               426,
	"PreconditionRequired":          428,
	"TooManyRequests":               429,
	"RequestHeaderFieldsTooLarge":   431,
	"InternalServerError":           500,
	"NotImplemented":                501,
	"BadGateway":                    502,
	"ServiceUnavailable":            503,
	"GatewayTimeout":                504,
	"HTTPVersionNotSupported":       505,
	"VariantAlsoNegotiates":         506,
	"InsufficientStorage":           507,
	"LoopDetected":                  508,
	"NotExtended":                   510,
	"NetworkAuthenticationRequired": 511,
}

func (x StatusCode) String() string {
	return proto.EnumName(StatusCode_name, int32(x))
}

func (StatusCode) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_7544d7adacd3389b, []int{0}
}

// HTTP status.
type HttpStatus struct {
	// Supplies HTTP response code.
	Code                 StatusCode `protobuf:"varint,1,opt,name=code,proto3,enum=envoy.type.StatusCode" json:"code,omitempty"`
	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
	XXX_unrecognized     []byte     `json:"-"`
	XXX_sizecache        int32      `json:"-"`
}

func (m *HttpStatus) Reset()         { *m = HttpStatus{} }
func (m *HttpStatus) String() string { return proto.CompactTextString(m) }
func (*HttpStatus) ProtoMessage()    {}
func (*HttpStatus) Descriptor() ([]byte, []int) {
	return fileDescriptor_7544d7adacd3389b, []int{0}
}

func (m *HttpStatus) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HttpStatus.Unmarshal(m, b)
}
func (m *HttpStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HttpStatus.Marshal(b, m, deterministic)
}
func (m *HttpStatus) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HttpStatus.Merge(m, src)
}
func (m *HttpStatus) XXX_Size() int {
	return xxx_messageInfo_HttpStatus.Size(m)
}
func (m *HttpStatus) XXX_DiscardUnknown() {
	xxx_messageInfo_HttpStatus.DiscardUnknown(m)
}

var xxx_messageInfo_HttpStatus proto.InternalMessageInfo

func (m *HttpStatus) GetCode() StatusCode {
	if m != nil {
		return m.Code
	}
	return StatusCode_Empty
}

func init() {
	proto.RegisterEnum("envoy.type.StatusCode", StatusCode_name, StatusCode_value)
	proto.RegisterType((*HttpStatus)(nil), "envoy.type.HttpStatus")
}

func init() { proto.RegisterFile("envoy/type/http_status.proto", fileDescriptor_7544d7adacd3389b) }

var fileDescriptor_7544d7adacd3389b = []byte{
	// 910 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x54, 0x49, 0x6f, 0x5c, 0x45,
	0x10, 0xce, 0x9b, 0x4e, 0xe2, 0xb8, 0xe3, 0xd8, 0x95, 0xce, 0x62, 0x13, 0x82, 0x64, 0xe5, 0x84,
	0x90, 0xb0, 0x25, 0x90, 0xb8, 0x7b, 0x8d, 0x2d, 0x3c, 0x93, 0xd1, 0x2c, 0xb9, 0xa2, 0xf6, 0xeb,
	0x9a, 0x99, 0x56, 0xde, 0x74, 0xbd, 0xf4, 0xab, 0x19, 0xfb, 0x71, 0xe4, 0x17, 0xb0, 0xef, 0xeb,
	0x81, 0x45, 0x28, 0x21, 0x20, 0xe0, 0x3f, 0xb0, 0xc3, 0x6f, 0xe0, 0x37, 0xb0, 0x06, 0x04, 0xa8,
	0x7b, 0x16, 0xfb, 0xc2, 0x6d, 0x5e, 0x75, 0x2d, 0xdf, 0x52, 0x53, 0xf2, 0x2a, 0xba, 0x21, 0x95,
	0xab, 0x5c, 0xe6, 0xb8, 0xda, 0x63, 0xce, 0x9f, 0x2a, 0x58, 0xf3, 0xa0, 0x58, 0xc9, 0x3d, 0x31,
	0x29, 0x19, 0x5f, 0x57, 0xc2, 0xeb, 0x95, 0xc5, 0xa1, 0xce, 0xac, 0xd1, 0x8c, 0xab, 0x93, 0x1f,
	0xa3, 0xa4, 0x6b, 0x9b, 0x52, 0xee, 0x30, 0xe7, 0xcd, 0x58, 0xa8, 0x9e, 0x90, 0x27, 0x53, 0x32,
	0xb8, 0x94, 0x2c, 0x27, 0x0f, 0xcf, 0x3f, 0x76, 0x79, 0xe5, 0xa8, 0xc3, 0xca, 0x28, 0x63, 0x83,
	0x0c, 0xae, 0xcb, 0xfb, 0xeb, 0x33, 0xcf, 0x24, 0x27, 0x21, 0x59, 0x3e, 0xd1, 0x88, 0xf9, 0x8f,
	0x7c, 0x39, 0x2b, 0xe5, 0x51, 0x82, 0x9a, 0x95, 0xa7, 0xb6, 0xfa, 0x39, 0x97, 0x70, 0x42, 0xcd,
	0xc9, 0x33, 0x1b, 0xe4, 0xd8, 0xba, 0x01, 0x82, 0x51, 0x33, 0xb2, 0x72, 0xe3, 0x49, 0xf8, 0x2a,
	0x51, 0x73, 0x72, 0x66, 0xc3, 0xa3, 0x66, 0x34, 0xf0, 0x75, 0xa2, 0xce, 0xc9, 0x33, 0x6b, 0x69,
	0x8a, 0x79, 0xf8, 0xfc, 0x26, 0x51, 0xcb, 0xf2, 0xc1, 0x1a, 0xb9, 0xb5, 0x01, 0xf7, 0xc8, 0x5b,
	0xd6, 0x6c, 0x87, 0xb8, 0xeb, 0x3a, 0xe4, 0xfb, 0x9a, 0x2d, 0x39, 0xf8, 0x36, 0x51, 0xf3, 0x72,
	0xb6, 0x46, 0xa1, 0x2f, 0x3a, 0x86, 0xef, 0x12, 0x75, 0x5e, 0xce, 0x35, 0xb0, 0x40, 0x9e, 0x84,
	0xbe, 0x4f, 0xd4, 0x05, 0x39, 0x5f, 0xd7, 0x9e, 0xad, 0xce, 0x26, 0xc1, 0x1f, 0x12, 0x05, 0xf2,
	0x6c, 0x75, 0x90, 0xb1, 0x1d, 0x61, 0x85, 0x1f, 0x13, 0x75, 0x51, 0x2e, 0xac, 0x65, 0x1e, 0xb5,
	0x29, 0x1b, 0x98, 0x93, 0x0f, 0x08, 0x7e, 0x4a, 0xd4, 0x59, 0x79, 0x7a, 0xb7, 0xda, 0x2e, 0xd0,
	0xc0, 0xcf, 0x31, 0x25, 0x16, 0xe5, 0x19, 0x6e, 0xf4, 0xc8, 0xa6, 0x58, 0xc0, 0x9d, 0x8a, 0xba,
	0x24, 0xa1, 0x4a, 0x43, 0x34, 0x75, 0xf4, 0x7d, 0xed, 0xd0, 0x71, 0x56, 0xc2, 0xdd, 0x8a, 0x92,
	0xf2, 0xd4, 0x36, 0x0d, 0x9c, 0x81, 0x4f, 0x2a, 0x81, 0x56, 0x13, 0xf1, 0x06, 0xf7, 0xd0, 0xc3,
	0xbd, 0x4a, 0x18, 0x5e, 0x23, 0xae, 0x92, 0xb1, 0x1d, 0x8b, 0x06, 0x3e, 0x8d, 0x09, 0xed, 0x02,
	0xeb, 0x9e, 0x0e, 0x4b, 0xf8, 0xac, 0xa2, 0x2e, 0xcb, 0xf3, 0x2d, 0xec, 0xe7, 0xe4, 0xb5, 0x2f,
	0x1b, 0x68, 0xac, 0xc7, 0x94, 0xe1, 0xf3, 0x18, 0x9f, 0x4e, 0x99, 0xc6, 0xbf, 0xa8, 0xa8, 0x05,
	0x29, 0xd7, 0xb5, 0x69, 0xe0, 0xed, 0x01, 0x16, 0x0c, 0xcf, 0x8a, 0x20, 0x43, 0xdb, 0xe9, 0x91,
	0x6e, 0x4f, 0xa3, 0x81, 0xe7, 0x44, 0x00, 0x5f, 0xd7, 0x65, 0x3f, 0x56, 0xde, 0x1e, 0x58, 0x8f,
	0x06, 0x9e, 0x17, 0x41, 0xbf, 0x6d, 0xf2, 0xfb, 0xd6, 0x18, 0x74, 0xf0, 0x82, 0x08, 0x40, 0x6a,
	0xc4, 0x23, 0xe0, 0x2f, 0x8a, 0xc8, 0x0d, 0xb9, 0x47, 0xa6, 0x46, 0xbc, 0x96, 0x65, 0x74, 0x80,
	0x06, 0x5e, 0x12, 0x4a, 0xc9, 0x73, 0x21, 0x10, 0x9d, 0xd2, 0xfb, 0x19, 0xc2, 0xcb, 0x22, 0x78,
	0x15, 0xf1, 0x07, 0xb7, 0xd0, 0xb1, 0x4d, 0xa3, 0x47, 0xd3, 0x59, 0xaf, 0x88, 0x60, 0xc4, 0x18,
	0x62, 0xcb, 0xf6, 0x91, 0x06, 0x0c, 0xaf, 0xc6, 0x81, 0x1b, 0xe4, 0x3a, 0x99, 0x4d, 0x19, 0x5e,
	0x13, 0x6a, 0x56, 0x9e, 0xbc, 0x4e, 0x0e, 0xe1, 0xf5, 0x98, 0xbe, 0x87, 0xae, 0xcb, 0xbd, 0x69,
	0x8f, 0x37, 0x84, 0x5a, 0x94, 0xaa, 0xee, 0x31, 0x25, 0x67, 0x6c, 0x68, 0xbf, 0xad, 0x6d, 0x86,
	0x06, 0xde, 0x9c, 0xd0, 0xcb, 0x48, 0x9b, 0x16, 0xd1, 0x9e, 0xf6, 0x5d, 0x84, 0xb7, 0x44, 0x10,
	0xa6, 0xdd, 0xd8, 0x0d, 0x11, 0x72, 0x5d, 0x78, 0x5b, 0xa8, 0x07, 0xe4, 0xc5, 0xb6, 0x2b, 0x06,
	0xf9, 0xc8, 0xe1, 0x2a, 0x1a, 0xab, 0x5b, 0x65, 0x8e, 0xf0, 0x8e, 0x50, 0x4b, 0xf2, 0x42, 0x43,
	0xbb, 0x2e, 0xd6, 0x88, 0x9b, 0x9a, 0x6d, 0xd1, 0xb1, 0x91, 0xda, 0xbb, 0x22, 0xc8, 0xbe, 0x75,
	0x98, 0x63, 0xca, 0xfa, 0xd8, 0xcc, 0xf7, 0x22, 0x98, 0xaa, 0x2d, 0x46, 0x36, 0xe0, 0x54, 0xfe,
	0xf7, 0x63, 0xab, 0xb6, 0xcb, 0x3d, 0xa5, 0x58, 0x14, 0xa1, 0xc9, 0x96, 0x63, 0xcb, 0x25, 0x7c,
	0x20, 0xc2, 0x3e, 0xed, 0x51, 0x7a, 0x0b, 0x0d, 0x7c, 0x18, 0xd5, 0x1d, 0x35, 0xdb, 0xc4, 0x1c,
	0x9d, 0x41, 0x97, 0x96, 0xf0, 0x51, 0xa4, 0xd2, 0xce, 0xbb, 0x5e, 0x1b, 0x9c, 0x32, 0xff, 0x38,
	0x22, 0x3f, 0xce, 0x7c, 0xfa, 0x74, 0x27, 0x16, 0xb4, 0x88, 0xaa, 0xda, 0x95, 0x63, 0x0c, 0x05,
	0xdc, 0x8d, 0x86, 0x8c, 0x3f, 0x77, 0x50, 0x1b, 0xf4, 0xdb, 0x16, 0x33, 0x53, 0x4c, 0xd5, 0xb9,
	0x17, 0x61, 0xee, 0x3a, 0x46, 0xef, 0x74, 0xd6, 0x44, 0x3f, 0x44, 0xbf, 0xe5, 0x3d, 0x79, 0xf8,
	0x25, 0x6a, 0x5f, 0x23, 0xde, 0xed, 0xe7, 0x19, 0x86, 0x8d, 0x41, 0x03, 0xbf, 0x8a, 0xf1, 0x96,
	0x5d, 0xd7, 0x8c, 0x07, 0xba, 0x84, 0xdf, 0x22, 0xff, 0x50, 0x67, 0x53, 0x6c, 0x3b, 0x3d, 0xd4,
	0x36, 0x8b, 0x82, 0xfd, 0x1e, 0xcb, 0xc7, 0x69, 0x13, 0xa7, 0xff, 0x10, 0xea, 0xaa, 0x5c, 0xdc,
	0x69, 0xb5, 0xea, 0x37, 0xd1, 0x17, 0x96, 0x5c, 0x50, 0x79, 0x62, 0x03, 0xfc, 0x29, 0xd4, 0x15,
	0x79, 0xe9, 0xa6, 0xf6, 0x56, 0x3b, 0x5e, 0xcb, 0x0a, 0xaa, 0x61, 0x97, 0xd8, 0x6a, 0xc6, 0x02,
	0xee, 0x8f, 0x71, 0x16, 0x83, 0x4e, 0xc7, 0xa6, 0x16, 0x1d, 0x37, 0x99, 0xbc, 0xee, 0x22, 0xfc,
	0x15, 0xf7, 0x7c, 0x8f, 0x28, 0xdf, 0x44, 0x8e, 0x16, 0xc0, 0xdf, 0x62, 0xfc, 0xe7, 0xda, 0x3a,
	0xe4, 0xa0, 0xa8, 0x81, 0x7f, 0x84, 0xba, 0x26, 0x1f, 0xaa, 0x21, 0x1f, 0x90, 0xbf, 0xf5, 0x3f,
	0xbb, 0xf9, 0xaf, 0x58, 0x7f, 0x54, 0x2e, 0x59, 0x1a, 0x5d, 0xb9, 0x3c, 0x6c, 0xf1, 0xb1, 0x83,
	0xb7, 0xbe, 0x70, 0x74, 0x17, 0xeb, 0xe1, 0x54, 0xd6, 0x93, 0xfd, 0xd3, 0xf1, 0x66, 0x3e, 0xfe,
	0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3c, 0x64, 0xbc, 0x69, 0x78, 0x05, 0x00, 0x00,
}
  07070100000167000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000002C00000000cilium-proxy-20200109/go/envoy/type/matcher   07070100000168000081A4000003E800000064000000015E17A24700002397000000000000000000000000000000000000003B00000000cilium-proxy-20200109/go/envoy/type/matcher/metadata.pb.go    // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/type/matcher/metadata.proto

package envoy_type_matcher

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// MetadataMatcher provides a general interface to check if a given value is matched in
// :ref:`Metadata <envoy_api_msg_core.Metadata>`. It uses `filter` and `path` to retrieve the value
// from the Metadata and then check if it's matched to the specified value.
//
// For example, for the following Metadata:
//
// .. code-block:: yaml
//
//    filter_metadata:
//      envoy.filters.http.rbac:
//        fields:
//          a:
//            struct_value:
//              fields:
//                b:
//                  struct_value:
//                    fields:
//                      c:
//                        string_value: pro
//                t:
//                  list_value:
//                    values:
//                      - string_value: m
//                      - string_value: n
//
// The following MetadataMatcher is matched as the path [a, b, c] will retrieve a string value "pro"
// from the Metadata which is matched to the specified prefix match.
//
// .. code-block:: yaml
//
//    filter: envoy.filters.http.rbac
//    path:
//    - key: a
//    - key: b
//    - key: c
//    value:
//      string_match:
//        prefix: pr
//
// The following MetadataMatcher is matched as the code will match one of the string values in the
// list at the path [a, t].
//
// .. code-block:: yaml
//
//    filter: envoy.filters.http.rbac
//    path:
//    - key: a
//    - key: t
//    value:
//      list_match:
//        one_of:
//          string_match:
//            exact: m
//
// An example use of MetadataMatcher is specifying additional metadata in envoy.filters.http.rbac to
// enforce access control based on dynamic metadata in a request. See :ref:`Permission
// <envoy_api_msg_config.rbac.v2.Permission>` and :ref:`Principal
// <envoy_api_msg_config.rbac.v2.Principal>`.
type MetadataMatcher struct {
	// The filter name to retrieve the Struct from the Metadata.
	Filter string `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"`
	// The path to retrieve the Value from the Struct.
	Path []*MetadataMatcher_PathSegment `protobuf:"bytes,2,rep,name=path,proto3" json:"path,omitempty"`
	// The MetadataMatcher is matched if the value retrieved by path is matched to this value.
	Value                *ValueMatcher `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

func (m *MetadataMatcher) Reset()         { *m = MetadataMatcher{} }
func (m *MetadataMatcher) String() string { return proto.CompactTextString(m) }
func (*MetadataMatcher) ProtoMessage()    {}
func (*MetadataMatcher) Descriptor() ([]byte, []int) {
	return fileDescriptor_865eaf6a1e9e266d, []int{0}
}

func (m *MetadataMatcher) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MetadataMatcher.Unmarshal(m, b)
}
func (m *MetadataMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MetadataMatcher.Marshal(b, m, deterministic)
}
func (m *MetadataMatcher) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MetadataMatcher.Merge(m, src)
}
func (m *MetadataMatcher) XXX_Size() int {
	return xxx_messageInfo_MetadataMatcher.Size(m)
}
func (m *MetadataMatcher) XXX_DiscardUnknown() {
	xxx_messageInfo_MetadataMatcher.DiscardUnknown(m)
}

var xxx_messageInfo_MetadataMatcher proto.InternalMessageInfo

func (m *MetadataMatcher) GetFilter() string {
	if m != nil {
		return m.Filter
	}
	return ""
}

func (m *MetadataMatcher) GetPath() []*MetadataMatcher_PathSegment {
	if m != nil {
		return m.Path
	}
	return nil
}

func (m *MetadataMatcher) GetValue() *ValueMatcher {
	if m != nil {
		return m.Value
	}
	return nil
}

// Specifies the segment in a path to retrieve value from Metadata.
// Note: Currently it's not supported to retrieve a value from a list in Metadata. This means that
// if the segment key refers to a list, it has to be the last segment in a path.
type MetadataMatcher_PathSegment struct {
	// Types that are valid to be assigned to Segment:
	//	*MetadataMatcher_PathSegment_Key
	Segment              isMetadataMatcher_PathSegment_Segment `protobuf_oneof:"segment"`
	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
	XXX_unrecognized     []byte                                `json:"-"`
	XXX_sizecache        int32                                 `json:"-"`
}

func (m *MetadataMatcher_PathSegment) Reset()         { *m = MetadataMatcher_PathSegment{} }
func (m *MetadataMatcher_PathSegment) String() string { return proto.CompactTextString(m) }
func (*MetadataMatcher_PathSegment) ProtoMessage()    {}
func (*MetadataMatcher_PathSegment) Descriptor() ([]byte, []int) {
	return fileDescriptor_865eaf6a1e9e266d, []int{0, 0}
}

func (m *MetadataMatcher_PathSegment) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MetadataMatcher_PathSegment.Unmarshal(m, b)
}
func (m *MetadataMatcher_PathSegment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MetadataMatcher_PathSegment.Marshal(b, m, deterministic)
}
func (m *MetadataMatcher_PathSegment) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MetadataMatcher_PathSegment.Merge(m, src)
}
func (m *MetadataMatcher_PathSegment) XXX_Size() int {
	return xxx_messageInfo_MetadataMatcher_PathSegment.Size(m)
}
func (m *MetadataMatcher_PathSegment) XXX_DiscardUnknown() {
	xxx_messageInfo_MetadataMatcher_PathSegment.DiscardUnknown(m)
}

var xxx_messageInfo_MetadataMatcher_PathSegment proto.InternalMessageInfo

type isMetadataMatcher_PathSegment_Segment interface {
	isMetadataMatcher_PathSegment_Segment()
}

type MetadataMatcher_PathSegment_Key struct {
	Key string `protobuf:"bytes,1,opt,name=key,proto3,oneof"`
}

func (*MetadataMatcher_PathSegment_Key) isMetadataMatcher_PathSegment_Segment() {}

func (m *MetadataMatcher_PathSegment) GetSegment() isMetadataMatcher_PathSegment_Segment {
	if m != nil {
		return m.Segment
	}
	return nil
}

func (m *MetadataMatcher_PathSegment) GetKey() string {
	if x, ok := m.GetSegment().(*MetadataMatcher_PathSegment_Key); ok {
		return x.Key
	}
	return ""
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*MetadataMatcher_PathSegment) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*MetadataMatcher_PathSegment_Key)(nil),
	}
}

func init() {
	proto.RegisterType((*MetadataMatcher)(nil), "envoy.type.matcher.MetadataMatcher")
	proto.RegisterType((*MetadataMatcher_PathSegment)(nil), "envoy.type.matcher.MetadataMatcher.PathSegment")
}

func init() { proto.RegisterFile("envoy/type/matcher/metadata.proto", fileDescriptor_865eaf6a1e9e266d) }

var fileDescriptor_865eaf6a1e9e266d = []byte{
	// 272 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0x3f, 0x4f, 0x84, 0x40,
	0x10, 0xc5, 0x1d, 0xb8, 0x7f, 0x2e, 0xf1, 0x4f, 0xb6, 0x91, 0x60, 0xa2, 0xab, 0x15, 0xd5, 0x92,
	0xdc, 0x75, 0x56, 0x66, 0x2b, 0x1b, 0x12, 0x82, 0x89, 0xfd, 0xea, 0x8d, 0x42, 0x84, 0x83, 0xe0,
	0x48, 0xe4, 0x2b, 0x58, 0xfa, 0x69, 0xcd, 0x35, 0x1a, 0xd8, 0xbd, 0xc4, 0x9c, 0x74, 0x9b, 0xd9,
	0xf7, 0x7e, 0xef, 0xcd, 0xb0, 0x2b, 0xdc, 0xb4, 0x55, 0x17, 0x51, 0x57, 0x63, 0x54, 0x6a, 0x7a,
	0xca, 0xb0, 0x89, 0x4a, 0x24, 0xbd, 0xd6, 0xa4, 0x65, 0xdd, 0x54, 0x54, 0x71, 0x3e, 0x48, 0x64,
	0x2f, 0x91, 0x56, 0x12, 0x5c, 0x8c, 0xd8, 0x5a, 0x5d, 0xbc, 0xa3, 0xf1, 0x04, 0x67, 0xad, 0x2e,
	0xf2, 0xb5, 0x26, 0x8c, 0x76, 0x0f, 0xf3, 0x71, 0xfd, 0x03, 0xec, 0x24, 0xb6, 0xfc, 0xd8, 0x18,
	0xf9, 0x25, 0x9b, 0x3d, 0xe7, 0x05, 0x61, 0xe3, 0x83, 0x80, 0xf0, 0x50, 0xcd, 0xb7, 0x6a, 0xd2,
	0x38, 0x02, 0x52, 0x3b, 0xe6, 0x31, 0x9b, 0xd4, 0x9a, 0x32, 0xdf, 0x11, 0x6e, 0xe8, 0x2d, 0x23,
	0xf9, 0xbf, 0x90, 0xdc, 0x63, 0xca, 0x44, 0x53, 0x76, 0x8f, 0x2f, 0x25, 0x6e, 0x48, 0x2d, 0xb6,
	0x6a, 0xfa, 0x05, 0xce, 0x02, 0xd2, 0x01, 0xc3, 0x6f, 0xd9, 0x74, 0xe8, 0xea, 0xbb, 0x02, 0x42,
	0x6f, 0x29, 0xc6, 0x78, 0x0f, 0xbd, 0xc0, 0xc2, 0x06, 0xc0, 0x27, 0x38, 0xa7, 0x90, 0x1a, 0x63,
	0x70, 0xc3, 0xbc, 0x3f, 0x01, 0xfc, 0x9c, 0xb9, 0xaf, 0xd8, 0xed, 0xb5, 0xbf, 0x3b, 0x48, 0xfb,
	0xa9, 0x3a, 0x66, 0xf3, 0x37, 0xab, 0x73, 0xbf, 0x15, 0xa8, 0x15, 0x13, 0x79, 0x65, 0x22, 0xeb,
	0xa6, 0xfa, 0xe8, 0x46, 0xd2, 0xd5, 0xd1, 0x6e, 0x9d, 0xa4, 0x3f, 0x5a, 0x02, 0x8f, 0xb3, 0xe1,
	0x7a, 0xab, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x54, 0x42, 0x4b, 0x24, 0xaf, 0x01, 0x00, 0x00,
}
 07070100000169000081A4000003E800000064000000015E17A2470000125F000000000000000000000000000000000000003900000000cilium-proxy-20200109/go/envoy/type/matcher/number.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/type/matcher/number.proto

package envoy_type_matcher

import (
	fmt "fmt"
	_type "github.com/cilium/proxy/go/envoy/type"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Specifies the way to match a double value.
type DoubleMatcher struct {
	// Types that are valid to be assigned to MatchPattern:
	//	*DoubleMatcher_Range
	//	*DoubleMatcher_Exact
	MatchPattern         isDoubleMatcher_MatchPattern `protobuf_oneof:"match_pattern"`
	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
	XXX_unrecognized     []byte                       `json:"-"`
	XXX_sizecache        int32                        `json:"-"`
}

func (m *DoubleMatcher) Reset()         { *m = DoubleMatcher{} }
func (m *DoubleMatcher) String() string { return proto.CompactTextString(m) }
func (*DoubleMatcher) ProtoMessage()    {}
func (*DoubleMatcher) Descriptor() ([]byte, []int) {
	return fileDescriptor_58ad3770a33c5fc2, []int{0}
}

func (m *DoubleMatcher) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DoubleMatcher.Unmarshal(m, b)
}
func (m *DoubleMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DoubleMatcher.Marshal(b, m, deterministic)
}
func (m *DoubleMatcher) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DoubleMatcher.Merge(m, src)
}
func (m *DoubleMatcher) XXX_Size() int {
	return xxx_messageInfo_DoubleMatcher.Size(m)
}
func (m *DoubleMatcher) XXX_DiscardUnknown() {
	xxx_messageInfo_DoubleMatcher.DiscardUnknown(m)
}

var xxx_messageInfo_DoubleMatcher proto.InternalMessageInfo

type isDoubleMatcher_MatchPattern interface {
	isDoubleMatcher_MatchPattern()
}

type DoubleMatcher_Range struct {
	Range *_type.DoubleRange `protobuf:"bytes,1,opt,name=range,proto3,oneof"`
}

type DoubleMatcher_Exact struct {
	Exact float64 `protobuf:"fixed64,2,opt,name=exact,proto3,oneof"`
}

func (*DoubleMatcher_Range) isDoubleMatcher_MatchPattern() {}

func (*DoubleMatcher_Exact) isDoubleMatcher_MatchPattern() {}

func (m *DoubleMatcher) GetMatchPattern() isDoubleMatcher_MatchPattern {
	if m != nil {
		return m.MatchPattern
	}
	return nil
}

func (m *DoubleMatcher) GetRange() *_type.DoubleRange {
	if x, ok := m.GetMatchPattern().(*DoubleMatcher_Range); ok {
		return x.Range
	}
	return nil
}

func (m *DoubleMatcher) GetExact() float64 {
	if x, ok := m.GetMatchPattern().(*DoubleMatcher_Exact); ok {
		return x.Exact
	}
	return 0
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*DoubleMatcher) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*DoubleMatcher_Range)(nil),
		(*DoubleMatcher_Exact)(nil),
	}
}

func init() {
	proto.RegisterType((*DoubleMatcher)(nil), "envoy.type.matcher.DoubleMatcher")
}

func init() { proto.RegisterFile("envoy/type/matcher/number.proto", fileDescriptor_58ad3770a33c5fc2) }

var fileDescriptor_58ad3770a33c5fc2 = []byte{
	// 203 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0xcf, 0x4d, 0x2c, 0x49, 0xce, 0x48, 0x2d, 0xd2, 0xcf,
	0x2b, 0xcd, 0x4d, 0x4a, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x02, 0x2b, 0xd0,
	0x03, 0x29, 0xd0, 0x83, 0x2a, 0x90, 0x12, 0x43, 0xd2, 0x54, 0x94, 0x98, 0x97, 0x9e, 0x0a, 0x51,
	0x2b, 0x25, 0x5e, 0x96, 0x98, 0x93, 0x99, 0x92, 0x58, 0x92, 0xaa, 0x0f, 0x63, 0x40, 0x24, 0x94,
	0xf2, 0xb8, 0x78, 0x5d, 0xf2, 0x4b, 0x93, 0x72, 0x52, 0x7d, 0x21, 0x26, 0x08, 0xe9, 0x73, 0xb1,
	0x82, 0x35, 0x4a, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x1b, 0x89, 0xeb, 0x21, 0xd9, 0x02, 0x51, 0x19,
	0x04, 0x92, 0xf6, 0x60, 0x08, 0x82, 0xa8, 0x13, 0x12, 0xe3, 0x62, 0x4d, 0xad, 0x48, 0x4c, 0x2e,
	0x91, 0x60, 0x52, 0x60, 0xd4, 0x60, 0x04, 0x89, 0x83, 0xb9, 0x4e, 0x22, 0x5c, 0xbc, 0x60, 0x57,
	0xc5, 0x17, 0x24, 0x96, 0x94, 0xa4, 0x16, 0xe5, 0x09, 0x31, 0xff, 0x70, 0x62, 0x74, 0x32, 0xe4,
	0x52, 0xc8, 0xcc, 0x87, 0x98, 0x59, 0x50, 0x94, 0x5f, 0x51, 0xa9, 0x87, 0xe9, 0x09, 0x27, 0x6e,
	0x3f, 0xb0, 0x37, 0x03, 0x40, 0x0e, 0x0c, 0x60, 0x4c, 0x62, 0x03, 0xbb, 0xd4, 0x18, 0x10, 0x00,
	0x00, 0xff, 0xff, 0x62, 0x05, 0x29, 0x3f, 0x11, 0x01, 0x00, 0x00,
}
 0707010000016A000081A4000003E800000064000000015E17A24700001CCF000000000000000000000000000000000000003800000000cilium-proxy-20200109/go/envoy/type/matcher/regex.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/type/matcher/regex.proto

package envoy_type_matcher

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// A regex matcher designed for safety when used with untrusted input.
type RegexMatcher struct {
	// Types that are valid to be assigned to EngineType:
	//	*RegexMatcher_GoogleRe2
	EngineType isRegexMatcher_EngineType `protobuf_oneof:"engine_type"`
	// The regex match string. The string must be supported by the configured engine.
	Regex                string   `protobuf:"bytes,2,opt,name=regex,proto3" json:"regex,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RegexMatcher) Reset()         { *m = RegexMatcher{} }
func (m *RegexMatcher) String() string { return proto.CompactTextString(m) }
func (*RegexMatcher) ProtoMessage()    {}
func (*RegexMatcher) Descriptor() ([]byte, []int) {
	return fileDescriptor_0ba289439e2572f3, []int{0}
}

func (m *RegexMatcher) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RegexMatcher.Unmarshal(m, b)
}
func (m *RegexMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RegexMatcher.Marshal(b, m, deterministic)
}
func (m *RegexMatcher) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RegexMatcher.Merge(m, src)
}
func (m *RegexMatcher) XXX_Size() int {
	return xxx_messageInfo_RegexMatcher.Size(m)
}
func (m *RegexMatcher) XXX_DiscardUnknown() {
	xxx_messageInfo_RegexMatcher.DiscardUnknown(m)
}

var xxx_messageInfo_RegexMatcher proto.InternalMessageInfo

type isRegexMatcher_EngineType interface {
	isRegexMatcher_EngineType()
}

type RegexMatcher_GoogleRe2 struct {
	GoogleRe2 *RegexMatcher_GoogleRE2 `protobuf:"bytes,1,opt,name=google_re2,json=googleRe2,proto3,oneof"`
}

func (*RegexMatcher_GoogleRe2) isRegexMatcher_EngineType() {}

func (m *RegexMatcher) GetEngineType() isRegexMatcher_EngineType {
	if m != nil {
		return m.EngineType
	}
	return nil
}

func (m *RegexMatcher) GetGoogleRe2() *RegexMatcher_GoogleRE2 {
	if x, ok := m.GetEngineType().(*RegexMatcher_GoogleRe2); ok {
		return x.GoogleRe2
	}
	return nil
}

func (m *RegexMatcher) GetRegex() string {
	if m != nil {
		return m.Regex
	}
	return ""
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*RegexMatcher) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*RegexMatcher_GoogleRe2)(nil),
	}
}

// Google's `RE2 <https://github.com/google/re2>`_ regex engine. The regex string must adhere to
// the documented `syntax <https://github.com/google/re2/wiki/Syntax>`_. The engine is designed
// to complete execution in linear time as well as limit the amount of memory used.
type RegexMatcher_GoogleRE2 struct {
	// This field controls the RE2 "program size" which is a rough estimate of how complex a
	// compiled regex is to evaluate. A regex that has a program size greater than the configured
	// value will fail to compile. In this case, the configured max program size can be increased
	// or the regex can be simplified. If not specified, the default is 100.
	MaxProgramSize       *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=max_program_size,json=maxProgramSize,proto3" json:"max_program_size,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *RegexMatcher_GoogleRE2) Reset()         { *m = RegexMatcher_GoogleRE2{} }
func (m *RegexMatcher_GoogleRE2) String() string { return proto.CompactTextString(m) }
func (*RegexMatcher_GoogleRE2) ProtoMessage()    {}
func (*RegexMatcher_GoogleRE2) Descriptor() ([]byte, []int) {
	return fileDescriptor_0ba289439e2572f3, []int{0, 0}
}

func (m *RegexMatcher_GoogleRE2) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RegexMatcher_GoogleRE2.Unmarshal(m, b)
}
func (m *RegexMatcher_GoogleRE2) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RegexMatcher_GoogleRE2.Marshal(b, m, deterministic)
}
func (m *RegexMatcher_GoogleRE2) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RegexMatcher_GoogleRE2.Merge(m, src)
}
func (m *RegexMatcher_GoogleRE2) XXX_Size() int {
	return xxx_messageInfo_RegexMatcher_GoogleRE2.Size(m)
}
func (m *RegexMatcher_GoogleRE2) XXX_DiscardUnknown() {
	xxx_messageInfo_RegexMatcher_GoogleRE2.DiscardUnknown(m)
}

var xxx_messageInfo_RegexMatcher_GoogleRE2 proto.InternalMessageInfo

func (m *RegexMatcher_GoogleRE2) GetMaxProgramSize() *wrappers.UInt32Value {
	if m != nil {
		return m.MaxProgramSize
	}
	return nil
}

func init() {
	proto.RegisterType((*RegexMatcher)(nil), "envoy.type.matcher.RegexMatcher")
	proto.RegisterType((*RegexMatcher_GoogleRE2)(nil), "envoy.type.matcher.RegexMatcher.GoogleRE2")
}

func init() { proto.RegisterFile("envoy/type/matcher/regex.proto", fileDescriptor_0ba289439e2572f3) }

var fileDescriptor_0ba289439e2572f3 = []byte{
	// 288 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x8f, 0x4f, 0x4b, 0xc3, 0x30,
	0x18, 0xc6, 0x4d, 0x75, 0x6a, 0x33, 0x91, 0x91, 0x8b, 0xa3, 0xe8, 0x28, 0x9e, 0x86, 0x87, 0x44,
	0xba, 0x6f, 0x10, 0xf0, 0xdf, 0x41, 0x28, 0x19, 0xf3, 0x5a, 0x32, 0x7d, 0xad, 0x85, 0xb6, 0x09,
	0x59, 0x36, 0xdb, 0x7d, 0x04, 0xbf, 0xab, 0x77, 0xd9, 0x49, 0x9a, 0x6c, 0x22, 0xe8, 0xad, 0xf4,
	0xc9, 0xf3, 0x7b, 0xde, 0x1f, 0x1e, 0x41, 0xbd, 0x52, 0x2d, 0xb3, 0xad, 0x06, 0x56, 0x49, 0xfb,
	0xfc, 0x06, 0x86, 0x19, 0xc8, 0xa1, 0xa1, 0xda, 0x28, 0xab, 0x08, 0x71, 0x39, 0xed, 0x72, 0xba,
	0xcd, 0xa3, 0x51, 0xae, 0x54, 0x5e, 0x02, 0x73, 0x2f, 0xe6, 0xcb, 0x57, 0xf6, 0x6e, 0xa4, 0xd6,
	0x60, 0x16, 0xbe, 0x13, 0x9d, 0xad, 0x64, 0x59, 0xbc, 0x48, 0x0b, 0x6c, 0xf7, 0xe1, 0x83, 0xcb,
	0x4f, 0x84, 0x4f, 0x44, 0x07, 0x7f, 0xf4, 0x24, 0x32, 0xc3, 0xd8, 0xb3, 0x32, 0x03, 0xc9, 0x10,
	0xc5, 0x68, 0xdc, 0x4f, 0xae, 0xe8, 0xdf, 0x49, 0xfa, 0xbb, 0x45, 0xef, 0x5c, 0x45, 0xdc, 0x24,
	0xfc, 0x78, 0xc3, 0x7b, 0x1f, 0x28, 0x18, 0xa0, 0xfb, 0x3d, 0x11, 0x7a, 0x92, 0x80, 0x84, 0x5c,
	0xe0, 0x9e, 0x73, 0x18, 0x06, 0x31, 0x1a, 0x87, 0xfc, 0x68, 0xc3, 0x0f, 0x4c, 0x10, 0x23, 0xe1,
	0xff, 0x46, 0x53, 0x1c, 0xfe, 0x20, 0xc8, 0x2d, 0x1e, 0x54, 0xb2, 0xc9, 0xb4, 0x51, 0xb9, 0x91,
	0x55, 0xb6, 0x28, 0xd6, 0xb0, 0x3d, 0xe4, 0x9c, 0x7a, 0x22, 0xdd, 0x79, 0xd2, 0xd9, 0x43, 0x6d,
	0x27, 0xc9, 0x93, 0x2c, 0x97, 0x20, 0x4e, 0x2b, 0xd9, 0xa4, 0xbe, 0x34, 0x2d, 0xd6, 0xc0, 0x09,
	0xee, 0x43, 0x9d, 0x17, 0x35, 0x64, 0xdd, 0xe1, 0x64, 0xff, 0x8b, 0x23, 0x7e, 0x8d, 0xe3, 0x42,
	0x79, 0x1d, 0x6d, 0x54, 0xd3, 0xfe, 0x63, 0xc6, 0xb1, 0x53, 0x4b, 0xbb, 0x89, 0x14, 0xcd, 0x0f,
	0xdd, 0xd6, 0xe4, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x94, 0xab, 0x1e, 0x0d, 0x97, 0x01, 0x00, 0x00,
}
 0707010000016B000081A4000003E800000064000000015E17A24700001F35000000000000000000000000000000000000003900000000cilium-proxy-20200109/go/envoy/type/matcher/string.pb.go  // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/type/matcher/string.proto

package envoy_type_matcher

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Specifies the way to match a string.
// [#next-free-field: 6]
type StringMatcher struct {
	// Types that are valid to be assigned to MatchPattern:
	//	*StringMatcher_Exact
	//	*StringMatcher_Prefix
	//	*StringMatcher_Suffix
	//	*StringMatcher_Regex
	//	*StringMatcher_SafeRegex
	MatchPattern         isStringMatcher_MatchPattern `protobuf_oneof:"match_pattern"`
	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
	XXX_unrecognized     []byte                       `json:"-"`
	XXX_sizecache        int32                        `json:"-"`
}

func (m *StringMatcher) Reset()         { *m = StringMatcher{} }
func (m *StringMatcher) String() string { return proto.CompactTextString(m) }
func (*StringMatcher) ProtoMessage()    {}
func (*StringMatcher) Descriptor() ([]byte, []int) {
	return fileDescriptor_1dc62c75a0f154e3, []int{0}
}

func (m *StringMatcher) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_StringMatcher.Unmarshal(m, b)
}
func (m *StringMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_StringMatcher.Marshal(b, m, deterministic)
}
func (m *StringMatcher) XXX_Merge(src proto.Message) {
	xxx_messageInfo_StringMatcher.Merge(m, src)
}
func (m *StringMatcher) XXX_Size() int {
	return xxx_messageInfo_StringMatcher.Size(m)
}
func (m *StringMatcher) XXX_DiscardUnknown() {
	xxx_messageInfo_StringMatcher.DiscardUnknown(m)
}

var xxx_messageInfo_StringMatcher proto.InternalMessageInfo

type isStringMatcher_MatchPattern interface {
	isStringMatcher_MatchPattern()
}

type StringMatcher_Exact struct {
	Exact string `protobuf:"bytes,1,opt,name=exact,proto3,oneof"`
}

type StringMatcher_Prefix struct {
	Prefix string `protobuf:"bytes,2,opt,name=prefix,proto3,oneof"`
}

type StringMatcher_Suffix struct {
	Suffix string `protobuf:"bytes,3,opt,name=suffix,proto3,oneof"`
}

type StringMatcher_Regex struct {
	Regex string `protobuf:"bytes,4,opt,name=regex,proto3,oneof"`
}

type StringMatcher_SafeRegex struct {
	SafeRegex *RegexMatcher `protobuf:"bytes,5,opt,name=safe_regex,json=safeRegex,proto3,oneof"`
}

func (*StringMatcher_Exact) isStringMatcher_MatchPattern() {}

func (*StringMatcher_Prefix) isStringMatcher_MatchPattern() {}

func (*StringMatcher_Suffix) isStringMatcher_MatchPattern() {}

func (*StringMatcher_Regex) isStringMatcher_MatchPattern() {}

func (*StringMatcher_SafeRegex) isStringMatcher_MatchPattern() {}

func (m *StringMatcher) GetMatchPattern() isStringMatcher_MatchPattern {
	if m != nil {
		return m.MatchPattern
	}
	return nil
}

func (m *StringMatcher) GetExact() string {
	if x, ok := m.GetMatchPattern().(*StringMatcher_Exact); ok {
		return x.Exact
	}
	return ""
}

func (m *StringMatcher) GetPrefix() string {
	if x, ok := m.GetMatchPattern().(*StringMatcher_Prefix); ok {
		return x.Prefix
	}
	return ""
}

func (m *StringMatcher) GetSuffix() string {
	if x, ok := m.GetMatchPattern().(*StringMatcher_Suffix); ok {
		return x.Suffix
	}
	return ""
}

// Deprecated: Do not use.
func (m *StringMatcher) GetRegex() string {
	if x, ok := m.GetMatchPattern().(*StringMatcher_Regex); ok {
		return x.Regex
	}
	return ""
}

func (m *StringMatcher) GetSafeRegex() *RegexMatcher {
	if x, ok := m.GetMatchPattern().(*StringMatcher_SafeRegex); ok {
		return x.SafeRegex
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*StringMatcher) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*StringMatcher_Exact)(nil),
		(*StringMatcher_Prefix)(nil),
		(*StringMatcher_Suffix)(nil),
		(*StringMatcher_Regex)(nil),
		(*StringMatcher_SafeRegex)(nil),
	}
}

// Specifies a list of ways to match a string.
type ListStringMatcher struct {
	Patterns             []*StringMatcher `protobuf:"bytes,1,rep,name=patterns,proto3" json:"patterns,omitempty"`
	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
	XXX_unrecognized     []byte           `json:"-"`
	XXX_sizecache        int32            `json:"-"`
}

func (m *ListStringMatcher) Reset()         { *m = ListStringMatcher{} }
func (m *ListStringMatcher) String() string { return proto.CompactTextString(m) }
func (*ListStringMatcher) ProtoMessage()    {}
func (*ListStringMatcher) Descriptor() ([]byte, []int) {
	return fileDescriptor_1dc62c75a0f154e3, []int{1}
}

func (m *ListStringMatcher) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ListStringMatcher.Unmarshal(m, b)
}
func (m *ListStringMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ListStringMatcher.Marshal(b, m, deterministic)
}
func (m *ListStringMatcher) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ListStringMatcher.Merge(m, src)
}
func (m *ListStringMatcher) XXX_Size() int {
	return xxx_messageInfo_ListStringMatcher.Size(m)
}
func (m *ListStringMatcher) XXX_DiscardUnknown() {
	xxx_messageInfo_ListStringMatcher.DiscardUnknown(m)
}

var xxx_messageInfo_ListStringMatcher proto.InternalMessageInfo

func (m *ListStringMatcher) GetPatterns() []*StringMatcher {
	if m != nil {
		return m.Patterns
	}
	return nil
}

func init() {
	proto.RegisterType((*StringMatcher)(nil), "envoy.type.matcher.StringMatcher")
	proto.RegisterType((*ListStringMatcher)(nil), "envoy.type.matcher.ListStringMatcher")
}

func init() { proto.RegisterFile("envoy/type/matcher/string.proto", fileDescriptor_1dc62c75a0f154e3) }

var fileDescriptor_1dc62c75a0f154e3 = []byte{
	// 308 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x91, 0x31, 0x4b, 0xc3, 0x40,
	0x14, 0xc7, 0xfb, 0x92, 0xa6, 0xa6, 0xaf, 0x14, 0xf4, 0x10, 0x0d, 0x1d, 0xf4, 0xda, 0x29, 0x53,
	0x82, 0xf5, 0x1b, 0xdc, 0x62, 0x41, 0x85, 0x12, 0x57, 0xa1, 0x9c, 0xf5, 0x5a, 0x03, 0x9a, 0x84,
	0xcb, 0x59, 0x92, 0xcd, 0xd9, 0xd1, 0xcf, 0xea, 0x20, 0x99, 0xe4, 0xee, 0xa2, 0x50, 0x9a, 0x2d,
	0xe1, 0xff, 0xfb, 0xfd, 0xef, 0x3d, 0x1e, 0x5e, 0x8a, 0x6c, 0x97, 0xd7, 0xb1, 0xaa, 0x0b, 0x11,
	0xbf, 0x71, 0xb5, 0x7e, 0x11, 0x32, 0x2e, 0x95, 0x4c, 0xb3, 0x6d, 0x54, 0xc8, 0x5c, 0xe5, 0x84,
	0x18, 0x20, 0xd2, 0x40, 0xd4, 0x02, 0x93, 0x8b, 0x0e, 0x49, 0x8a, 0xad, 0xa8, 0xac, 0x33, 0x39,
	0xdf, 0xf1, 0xd7, 0xf4, 0x99, 0x2b, 0x11, 0xff, 0x7d, 0xd8, 0x60, 0xf6, 0x0d, 0x38, 0x7e, 0x30,
	0xed, 0xf7, 0x56, 0x23, 0x67, 0xe8, 0x89, 0x8a, 0xaf, 0x55, 0x00, 0x14, 0xc2, 0xe1, 0xa2, 0x97,
	0xd8, 0x5f, 0x32, 0xc5, 0x41, 0x21, 0xc5, 0x26, 0xad, 0x02, 0x47, 0x07, 0xec, 0xa8, 0x61, 0x7d,
	0xe9, 0x50, 0x58, 0xf4, 0x92, 0x36, 0xd0, 0x48, 0xf9, 0xbe, 0xd1, 0x88, 0x7b, 0x80, 0xd8, 0x80,
	0xcc, 0xd0, 0x33, 0x73, 0x05, 0x7d, 0x43, 0x60, 0xc3, 0x3c, 0xe9, 0x86, 0x1f, 0x7e, 0xa0, 0x21,
	0x1b, 0x91, 0x5b, 0xc4, 0x92, 0x6f, 0xc4, 0xca, 0x82, 0x1e, 0x85, 0x70, 0x34, 0xa7, 0xd1, 0xe1,
	0xd6, 0x51, 0xa2, 0x81, 0x76, 0x6e, 0xe6, 0x37, 0xcc, 0xfb, 0x04, 0xe7, 0x58, 0x17, 0x0d, 0xb5,
	0x6f, 0x52, 0x76, 0x8a, 0x63, 0x83, 0xaf, 0x0a, 0xae, 0x94, 0x90, 0x19, 0x71, 0x7f, 0x18, 0xcc,
	0x1e, 0xf1, 0xe4, 0x2e, 0x2d, 0xd5, 0xfe, 0xe6, 0x37, 0xe8, 0xb7, 0x50, 0x19, 0x00, 0x75, 0xc3,
	0xd1, 0x7c, 0xda, 0xf5, 0xea, 0x9e, 0x64, 0x9e, 0xfd, 0x02, 0xc7, 0x87, 0xe4, 0x5f, 0x66, 0x57,
	0x48, 0xd3, 0xdc, 0xaa, 0x85, 0xcc, 0xab, 0xba, 0xa3, 0x85, 0x8d, 0x6c, 0xcd, 0x52, 0x5f, 0x61,
	0x09, 0x4f, 0x03, 0x73, 0x8e, 0xeb, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x92, 0x4a, 0x0e,
	0xfe, 0x01, 0x00, 0x00,
}
   0707010000016C000081A4000003E800000064000000015E17A24700002AA2000000000000000000000000000000000000003800000000cilium-proxy-20200109/go/envoy/type/matcher/value.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/type/matcher/value.proto

package envoy_type_matcher

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Specifies the way to match a ProtobufWkt::Value. Primitive values and ListValue are supported.
// StructValue is not supported and is always not matched.
// [#next-free-field: 7]
type ValueMatcher struct {
	// Specifies how to match a value.
	//
	// Types that are valid to be assigned to MatchPattern:
	//	*ValueMatcher_NullMatch_
	//	*ValueMatcher_DoubleMatch
	//	*ValueMatcher_StringMatch
	//	*ValueMatcher_BoolMatch
	//	*ValueMatcher_PresentMatch
	//	*ValueMatcher_ListMatch
	MatchPattern         isValueMatcher_MatchPattern `protobuf_oneof:"match_pattern"`
	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
	XXX_unrecognized     []byte                      `json:"-"`
	XXX_sizecache        int32                       `json:"-"`
}

func (m *ValueMatcher) Reset()         { *m = ValueMatcher{} }
func (m *ValueMatcher) String() string { return proto.CompactTextString(m) }
func (*ValueMatcher) ProtoMessage()    {}
func (*ValueMatcher) Descriptor() ([]byte, []int) {
	return fileDescriptor_145b36501d266253, []int{0}
}

func (m *ValueMatcher) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ValueMatcher.Unmarshal(m, b)
}
func (m *ValueMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ValueMatcher.Marshal(b, m, deterministic)
}
func (m *ValueMatcher) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ValueMatcher.Merge(m, src)
}
func (m *ValueMatcher) XXX_Size() int {
	return xxx_messageInfo_ValueMatcher.Size(m)
}
func (m *ValueMatcher) XXX_DiscardUnknown() {
	xxx_messageInfo_ValueMatcher.DiscardUnknown(m)
}

var xxx_messageInfo_ValueMatcher proto.InternalMessageInfo

type isValueMatcher_MatchPattern interface {
	isValueMatcher_MatchPattern()
}

type ValueMatcher_NullMatch_ struct {
	NullMatch *ValueMatcher_NullMatch `protobuf:"bytes,1,opt,name=null_match,json=nullMatch,proto3,oneof"`
}

type ValueMatcher_DoubleMatch struct {
	DoubleMatch *DoubleMatcher `protobuf:"bytes,2,opt,name=double_match,json=doubleMatch,proto3,oneof"`
}

type ValueMatcher_StringMatch struct {
	StringMatch *StringMatcher `protobuf:"bytes,3,opt,name=string_match,json=stringMatch,proto3,oneof"`
}

type ValueMatcher_BoolMatch struct {
	BoolMatch bool `protobuf:"varint,4,opt,name=bool_match,json=boolMatch,proto3,oneof"`
}

type ValueMatcher_PresentMatch struct {
	PresentMatch bool `protobuf:"varint,5,opt,name=present_match,json=presentMatch,proto3,oneof"`
}

type ValueMatcher_ListMatch struct {
	ListMatch *ListMatcher `protobuf:"bytes,6,opt,name=list_match,json=listMatch,proto3,oneof"`
}

func (*ValueMatcher_NullMatch_) isValueMatcher_MatchPattern() {}

func (*ValueMatcher_DoubleMatch) isValueMatcher_MatchPattern() {}

func (*ValueMatcher_StringMatch) isValueMatcher_MatchPattern() {}

func (*ValueMatcher_BoolMatch) isValueMatcher_MatchPattern() {}

func (*ValueMatcher_PresentMatch) isValueMatcher_MatchPattern() {}

func (*ValueMatcher_ListMatch) isValueMatcher_MatchPattern() {}

func (m *ValueMatcher) GetMatchPattern() isValueMatcher_MatchPattern {
	if m != nil {
		return m.MatchPattern
	}
	return nil
}

func (m *ValueMatcher) GetNullMatch() *ValueMatcher_NullMatch {
	if x, ok := m.GetMatchPattern().(*ValueMatcher_NullMatch_); ok {
		return x.NullMatch
	}
	return nil
}

func (m *ValueMatcher) GetDoubleMatch() *DoubleMatcher {
	if x, ok := m.GetMatchPattern().(*ValueMatcher_DoubleMatch); ok {
		return x.DoubleMatch
	}
	return nil
}

func (m *ValueMatcher) GetStringMatch() *StringMatcher {
	if x, ok := m.GetMatchPattern().(*ValueMatcher_StringMatch); ok {
		return x.StringMatch
	}
	return nil
}

func (m *ValueMatcher) GetBoolMatch() bool {
	if x, ok := m.GetMatchPattern().(*ValueMatcher_BoolMatch); ok {
		return x.BoolMatch
	}
	return false
}

func (m *ValueMatcher) GetPresentMatch() bool {
	if x, ok := m.GetMatchPattern().(*ValueMatcher_PresentMatch); ok {
		return x.PresentMatch
	}
	return false
}

func (m *ValueMatcher) GetListMatch() *ListMatcher {
	if x, ok := m.GetMatchPattern().(*ValueMatcher_ListMatch); ok {
		return x.ListMatch
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ValueMatcher) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*ValueMatcher_NullMatch_)(nil),
		(*ValueMatcher_DoubleMatch)(nil),
		(*ValueMatcher_StringMatch)(nil),
		(*ValueMatcher_BoolMatch)(nil),
		(*ValueMatcher_PresentMatch)(nil),
		(*ValueMatcher_ListMatch)(nil),
	}
}

// NullMatch is an empty message to specify a null value.
type ValueMatcher_NullMatch struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ValueMatcher_NullMatch) Reset()         { *m = ValueMatcher_NullMatch{} }
func (m *ValueMatcher_NullMatch) String() string { return proto.CompactTextString(m) }
func (*ValueMatcher_NullMatch) ProtoMessage()    {}
func (*ValueMatcher_NullMatch) Descriptor() ([]byte, []int) {
	return fileDescriptor_145b36501d266253, []int{0, 0}
}

func (m *ValueMatcher_NullMatch) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ValueMatcher_NullMatch.Unmarshal(m, b)
}
func (m *ValueMatcher_NullMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ValueMatcher_NullMatch.Marshal(b, m, deterministic)
}
func (m *ValueMatcher_NullMatch) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ValueMatcher_NullMatch.Merge(m, src)
}
func (m *ValueMatcher_NullMatch) XXX_Size() int {
	return xxx_messageInfo_ValueMatcher_NullMatch.Size(m)
}
func (m *ValueMatcher_NullMatch) XXX_DiscardUnknown() {
	xxx_messageInfo_ValueMatcher_NullMatch.DiscardUnknown(m)
}

var xxx_messageInfo_ValueMatcher_NullMatch proto.InternalMessageInfo

// Specifies the way to match a list value.
type ListMatcher struct {
	// Types that are valid to be assigned to MatchPattern:
	//	*ListMatcher_OneOf
	MatchPattern         isListMatcher_MatchPattern `protobuf_oneof:"match_pattern"`
	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
	XXX_unrecognized     []byte                     `json:"-"`
	XXX_sizecache        int32                      `json:"-"`
}

func (m *ListMatcher) Reset()         { *m = ListMatcher{} }
func (m *ListMatcher) String() string { return proto.CompactTextString(m) }
func (*ListMatcher) ProtoMessage()    {}
func (*ListMatcher) Descriptor() ([]byte, []int) {
	return fileDescriptor_145b36501d266253, []int{1}
}

func (m *ListMatcher) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ListMatcher.Unmarshal(m, b)
}
func (m *ListMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ListMatcher.Marshal(b, m, deterministic)
}
func (m *ListMatcher) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ListMatcher.Merge(m, src)
}
func (m *ListMatcher) XXX_Size() int {
	return xxx_messageInfo_ListMatcher.Size(m)
}
func (m *ListMatcher) XXX_DiscardUnknown() {
	xxx_messageInfo_ListMatcher.DiscardUnknown(m)
}

var xxx_messageInfo_ListMatcher proto.InternalMessageInfo

type isListMatcher_MatchPattern interface {
	isListMatcher_MatchPattern()
}

type ListMatcher_OneOf struct {
	OneOf *ValueMatcher `protobuf:"bytes,1,opt,name=one_of,json=oneOf,proto3,oneof"`
}

func (*ListMatcher_OneOf) isListMatcher_MatchPattern() {}

func (m *ListMatcher) GetMatchPattern() isListMatcher_MatchPattern {
	if m != nil {
		return m.MatchPattern
	}
	return nil
}

func (m *ListMatcher) GetOneOf() *ValueMatcher {
	if x, ok := m.GetMatchPattern().(*ListMatcher_OneOf); ok {
		return x.OneOf
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ListMatcher) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*ListMatcher_OneOf)(nil),
	}
}

func init() {
	proto.RegisterType((*ValueMatcher)(nil), "envoy.type.matcher.ValueMatcher")
	proto.RegisterType((*ValueMatcher_NullMatch)(nil), "envoy.type.matcher.ValueMatcher.NullMatch")
	proto.RegisterType((*ListMatcher)(nil), "envoy.type.matcher.ListMatcher")
}

func init() { proto.RegisterFile("envoy/type/matcher/value.proto", fileDescriptor_145b36501d266253) }

var fileDescriptor_145b36501d266253 = []byte{
	// 340 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xcf, 0x4b, 0xc3, 0x30,
	0x14, 0xc7, 0x57, 0xe7, 0x86, 0x7b, 0xdd, 0x2e, 0x41, 0x50, 0x76, 0x70, 0x75, 0x20, 0x0c, 0x0f,
	0xa9, 0xe8, 0xc9, 0x9b, 0x14, 0x91, 0x81, 0xbf, 0xc6, 0x04, 0x8f, 0x8e, 0xd6, 0xbd, 0x69, 0x21,
	0x4b, 0x4a, 0x9a, 0x0e, 0xf7, 0x9f, 0xf8, 0xa7, 0x7a, 0x94, 0xfc, 0xa8, 0x1b, 0x18, 0xf1, 0x96,
	0xbc, 0xf7, 0xf9, 0x7e, 0xfa, 0xd2, 0x04, 0x8e, 0x90, 0xaf, 0xc4, 0x3a, 0x56, 0xeb, 0x02, 0xe3,
	0x65, 0xaa, 0x5e, 0xdf, 0x51, 0xc6, 0xab, 0x94, 0x55, 0x48, 0x0b, 0x29, 0x94, 0x20, 0xc4, 0xf4,
	0xa9, 0xee, 0x53, 0xd7, 0xef, 0x0f, 0x3c, 0x19, 0x5e, 0x2d, 0x33, 0x94, 0x36, 0xe4, 0x05, 0x4a,
	0x25, 0x73, 0xfe, 0xe6, 0x80, 0x83, 0x55, 0xca, 0xf2, 0x79, 0xaa, 0x30, 0xae, 0x17, 0xb6, 0x31,
	0xfc, 0x6c, 0x42, 0xf7, 0x59, 0x7f, 0xfe, 0xde, 0xc6, 0xc8, 0x2d, 0x00, 0xaf, 0x18, 0x9b, 0x19,
	0xcd, 0x61, 0x10, 0x05, 0xa3, 0xf0, 0xfc, 0x94, 0xfe, 0x1e, 0x8a, 0x6e, 0xa7, 0xe8, 0x43, 0xc5,
	0x98, 0x59, 0x8f, 0x1b, 0xd3, 0x0e, 0xaf, 0x37, 0xe4, 0x06, 0xba, 0x73, 0x51, 0x65, 0x0c, 0x9d,
	0x6e, 0xc7, 0xe8, 0x8e, 0x7d, 0xba, 0x6b, 0xc3, 0x39, 0xdf, 0xb8, 0x31, 0x0d, 0xe7, 0x9b, 0x82,
	0xf6, 0xd8, 0xe3, 0x38, 0x4f, 0xf3, 0x6f, 0xcf, 0x93, 0xe1, 0xb6, 0x3c, 0xe5, 0xa6, 0x40, 0x06,
	0x00, 0x99, 0x10, 0xf5, 0xe1, 0x76, 0xa3, 0x60, 0xb4, 0xa7, 0x07, 0xd6, 0x35, 0x0b, 0x9c, 0x40,
	0xaf, 0x90, 0x58, 0x22, 0x57, 0x8e, 0x69, 0x39, 0xa6, 0xeb, 0xca, 0x16, 0xbb, 0x02, 0x60, 0x79,
	0x59, 0x33, 0x6d, 0x33, 0xcd, 0xc0, 0x37, 0xcd, 0x5d, 0x5e, 0xaa, 0xcd, 0x2c, 0x1d, 0x56, 0x6f,
	0xfb, 0x21, 0x74, 0x7e, 0xfe, 0x59, 0xb2, 0x0f, 0x3d, 0x13, 0x98, 0x15, 0xa9, 0x52, 0x28, 0x39,
	0x69, 0x7e, 0x25, 0xc1, 0xf0, 0x05, 0xc2, 0xad, 0x38, 0xb9, 0x84, 0xb6, 0xe0, 0x38, 0x13, 0x0b,
	0x77, 0x29, 0xd1, 0x7f, 0x97, 0x32, 0x6e, 0x4c, 0x5b, 0x82, 0xe3, 0xe3, 0xc2, 0xef, 0x4f, 0xce,
	0x20, 0xca, 0x85, 0x95, 0x14, 0x52, 0x7c, 0xac, 0x3d, 0xbe, 0x04, 0x8c, 0x70, 0xa2, 0x9f, 0xca,
	0x24, 0xc8, 0xda, 0xe6, 0xcd, 0x5c, 0x7c, 0x07, 0x00, 0x00, 0xff, 0xff, 0xec, 0x38, 0x3f, 0x72,
	0xc4, 0x02, 0x00, 0x00,
}
  0707010000016D000081A4000003E800000064000000015E17A24700001CA3000000000000000000000000000000000000003200000000cilium-proxy-20200109/go/envoy/type/percent.pb.go // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/type/percent.proto

package envoy_type

import (
	fmt "fmt"
	_ "github.com/envoyproxy/protoc-gen-validate/validate"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Fraction percentages support several fixed denominator values.
type FractionalPercent_DenominatorType int32

const (
	// 100.
	//
	// **Example**: 1/100 = 1%.
	FractionalPercent_HUNDRED FractionalPercent_DenominatorType = 0
	// 10,000.
	//
	// **Example**: 1/10000 = 0.01%.
	FractionalPercent_TEN_THOUSAND FractionalPercent_DenominatorType = 1
	// 1,000,000.
	//
	// **Example**: 1/1000000 = 0.0001%.
	FractionalPercent_MILLION FractionalPercent_DenominatorType = 2
)

var FractionalPercent_DenominatorType_name = map[int32]string{
	0: "HUNDRED",
	1: "TEN_THOUSAND",
	2: "MILLION",
}

var FractionalPercent_DenominatorType_value = map[string]int32{
	"HUNDRED":      0,
	"TEN_THOUSAND": 1,
	"MILLION":      2,
}

func (x FractionalPercent_DenominatorType) String() string {
	return proto.EnumName(FractionalPercent_DenominatorType_name, int32(x))
}

func (FractionalPercent_DenominatorType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_89401f90eb07307e, []int{1, 0}
}

// Identifies a percentage, in the range [0.0, 100.0].
type Percent struct {
	Value                float64  `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Percent) Reset()         { *m = Percent{} }
func (m *Percent) String() string { return proto.CompactTextString(m) }
func (*Percent) ProtoMessage()    {}
func (*Percent) Descriptor() ([]byte, []int) {
	return fileDescriptor_89401f90eb07307e, []int{0}
}

func (m *Percent) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Percent.Unmarshal(m, b)
}
func (m *Percent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Percent.Marshal(b, m, deterministic)
}
func (m *Percent) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Percent.Merge(m, src)
}
func (m *Percent) XXX_Size() int {
	return xxx_messageInfo_Percent.Size(m)
}
func (m *Percent) XXX_DiscardUnknown() {
	xxx_messageInfo_Percent.DiscardUnknown(m)
}

var xxx_messageInfo_Percent proto.InternalMessageInfo

func (m *Percent) GetValue() float64 {
	if m != nil {
		return m.Value
	}
	return 0
}

// A fractional percentage is used in cases in which for performance reasons performing floating
// point to integer conversions during randomness calculations is undesirable. The message includes
// both a numerator and denominator that together determine the final fractional value.
//
// * **Example**: 1/100 = 1%.
// * **Example**: 3/10000 = 0.03%.
type FractionalPercent struct {
	// Specifies the numerator. Defaults to 0.
	Numerator uint32 `protobuf:"varint,1,opt,name=numerator,proto3" json:"numerator,omitempty"`
	// Specifies the denominator. If the denominator specified is less than the numerator, the final
	// fractional percentage is capped at 1 (100%).
	Denominator          FractionalPercent_DenominatorType `protobuf:"varint,2,opt,name=denominator,proto3,enum=envoy.type.FractionalPercent_DenominatorType" json:"denominator,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                          `json:"-"`
	XXX_unrecognized     []byte                            `json:"-"`
	XXX_sizecache        int32                             `json:"-"`
}

func (m *FractionalPercent) Reset()         { *m = FractionalPercent{} }
func (m *FractionalPercent) String() string { return proto.CompactTextString(m) }
func (*FractionalPercent) ProtoMessage()    {}
func (*FractionalPercent) Descriptor() ([]byte, []int) {
	return fileDescriptor_89401f90eb07307e, []int{1}
}

func (m *FractionalPercent) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_FractionalPercent.Unmarshal(m, b)
}
func (m *FractionalPercent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_FractionalPercent.Marshal(b, m, deterministic)
}
func (m *FractionalPercent) XXX_Merge(src proto.Message) {
	xxx_messageInfo_FractionalPercent.Merge(m, src)
}
func (m *FractionalPercent) XXX_Size() int {
	return xxx_messageInfo_FractionalPercent.Size(m)
}
func (m *FractionalPercent) XXX_DiscardUnknown() {
	xxx_messageInfo_FractionalPercent.DiscardUnknown(m)
}

var xxx_messageInfo_FractionalPercent proto.InternalMessageInfo

func (m *FractionalPercent) GetNumerator() uint32 {
	if m != nil {
		return m.Numerator
	}
	return 0
}

func (m *FractionalPercent) GetDenominator() FractionalPercent_DenominatorType {
	if m != nil {
		return m.Denominator
	}
	return FractionalPercent_HUNDRED
}

func init() {
	proto.RegisterEnum("envoy.type.FractionalPercent_DenominatorType", FractionalPercent_DenominatorType_name, FractionalPercent_DenominatorType_value)
	proto.RegisterType((*Percent)(nil), "envoy.type.Percent")
	proto.RegisterType((*FractionalPercent)(nil), "envoy.type.FractionalPercent")
}

func init() { proto.RegisterFile("envoy/type/percent.proto", fileDescriptor_89401f90eb07307e) }

var fileDescriptor_89401f90eb07307e = []byte{
	// 274 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x48, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0x2f, 0x48, 0x2d, 0x4a, 0x4e, 0xcd, 0x2b, 0xd1, 0x2b,
	0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x02, 0xcb, 0xe8, 0x81, 0x64, 0xa4, 0xc4, 0xcb, 0x12, 0x73,
	0x32, 0x53, 0x12, 0x4b, 0x52, 0xf5, 0x61, 0x0c, 0x88, 0x22, 0x25, 0x0b, 0x2e, 0xf6, 0x00, 0x88,
	0x2e, 0x21, 0x5d, 0x2e, 0xd6, 0xb2, 0xc4, 0x9c, 0xd2, 0x54, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x46,
	0x27, 0xf1, 0x5f, 0x4e, 0x22, 0x42, 0x42, 0x92, 0x0c, 0x60, 0x10, 0xe9, 0xa0, 0xc9, 0x00, 0x05,
	0x41, 0x10, 0x55, 0x4a, 0xa7, 0x19, 0xb9, 0x04, 0xdd, 0x8a, 0x12, 0x93, 0x4b, 0x32, 0xf3, 0xf3,
	0x12, 0x73, 0x60, 0x86, 0xc8, 0x70, 0x71, 0xe6, 0x95, 0xe6, 0xa6, 0x16, 0x25, 0x96, 0xe4, 0x17,
	0x81, 0x0d, 0xe2, 0x0d, 0x42, 0x08, 0x08, 0x45, 0x72, 0x71, 0xa7, 0xa4, 0xe6, 0xe5, 0xe7, 0x66,
	0xe6, 0x81, 0xe5, 0x99, 0x14, 0x18, 0x35, 0xf8, 0x8c, 0x74, 0xf5, 0x10, 0x0e, 0xd5, 0xc3, 0x30,
	0x51, 0xcf, 0x05, 0xa1, 0x21, 0xa4, 0xb2, 0x20, 0xd5, 0x89, 0xe3, 0x97, 0x13, 0x6b, 0x13, 0x23,
	0x93, 0x00, 0x63, 0x10, 0xb2, 0x59, 0x4a, 0xb6, 0x5c, 0xfc, 0x68, 0x2a, 0x85, 0xb8, 0xb9, 0xd8,
	0x3d, 0x42, 0xfd, 0x5c, 0x82, 0x5c, 0x5d, 0x04, 0x18, 0x84, 0x04, 0xb8, 0x78, 0x42, 0x5c, 0xfd,
	0xe2, 0x43, 0x3c, 0xfc, 0x43, 0x83, 0x1d, 0xfd, 0x5c, 0x04, 0x18, 0x41, 0xd2, 0xbe, 0x9e, 0x3e,
	0x3e, 0x9e, 0xfe, 0x7e, 0x02, 0x4c, 0x4e, 0x5a, 0x5c, 0x12, 0x99, 0xf9, 0x10, 0x87, 0x14, 0x14,
	0xe5, 0x57, 0x54, 0x22, 0xb9, 0xc9, 0x89, 0x07, 0xea, 0x94, 0x00, 0x50, 0x88, 0x05, 0x30, 0x26,
	0xb1, 0x81, 0x83, 0xce, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xca, 0xbe, 0xff, 0x0b, 0x7b, 0x01,
	0x00, 0x00,
}
 0707010000016E000081A4000003E800000064000000015E17A2470000135F000000000000000000000000000000000000003000000000cilium-proxy-20200109/go/envoy/type/range.pb.go   // Code generated by protoc-gen-go. DO NOT EDIT.
// source: envoy/type/range.proto

package envoy_type

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Specifies the int64 start and end of the range using half-open interval semantics [start,
// end).
type Int64Range struct {
	// start of the range (inclusive)
	Start int64 `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"`
	// end of the range (exclusive)
	End                  int64    `protobuf:"varint,2,opt,name=end,proto3" json:"end,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Int64Range) Reset()         { *m = Int64Range{} }
func (m *Int64Range) String() string { return proto.CompactTextString(m) }
func (*Int64Range) ProtoMessage()    {}
func (*Int64Range) Descriptor() ([]byte, []int) {
	return fileDescriptor_6d5354588716e6e7, []int{0}
}

func (m *Int64Range) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Int64Range.Unmarshal(m, b)
}
func (m *Int64Range) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Int64Range.Marshal(b, m, deterministic)
}
func (m *Int64Range) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Int64Range.Merge(m, src)
}
func (m *Int64Range) XXX_Size() int {
	return xxx_messageInfo_Int64Range.Size(m)
}
func (m *Int64Range) XXX_DiscardUnknown() {
	xxx_messageInfo_Int64Range.DiscardUnknown(m)
}

var xxx_messageInfo_Int64Range proto.InternalMessageInfo

func (m *Int64Range) GetStart() int64 {
	if m != nil {
		return m.Start
	}
	return 0
}

func (m *Int64Range) GetEnd() int64 {
	if m != nil {
		return m.End
	}
	return 0
}

// Specifies the double start and end of the range using half-open interval semantics [start,
// end).
type DoubleRange struct {
	// start of the range (inclusive)
	Start float64 `protobuf:"fixed64,1,opt,name=start,proto3" json:"start,omitempty"`
	// end of the range (exclusive)
	End                  float64  `protobuf:"fixed64,2,opt,name=end,proto3" json:"end,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *DoubleRange) Reset()         { *m = DoubleRange{} }
func (m *DoubleRange) String() string { return proto.CompactTextString(m) }
func (*DoubleRange) ProtoMessage()    {}
func (*DoubleRange) Descriptor() ([]byte, []int) {
	return fileDescriptor_6d5354588716e6e7, []int{1}
}

func (m *DoubleRange) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DoubleRange.Unmarshal(m, b)
}
func (m *DoubleRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DoubleRange.Marshal(b, m, deterministic)
}
func (m *DoubleRange) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DoubleRange.Merge(m, src)
}
func (m *DoubleRange) XXX_Size() int {
	return xxx_messageInfo_DoubleRange.Size(m)
}
func (m *DoubleRange) XXX_DiscardUnknown() {
	xxx_messageInfo_DoubleRange.DiscardUnknown(m)
}

var xxx_messageInfo_DoubleRange proto.InternalMessageInfo

func (m *DoubleRange) GetStart() float64 {
	if m != nil {
		return m.Start
	}
	return 0
}

func (m *DoubleRange) GetEnd() float64 {
	if m != nil {
		return m.End
	}
	return 0
}

func init() {
	proto.RegisterType((*Int64Range)(nil), "envoy.type.Int64Range")
	proto.RegisterType((*DoubleRange)(nil), "envoy.type.DoubleRange")
}

func init() { proto.RegisterFile("envoy/type/range.proto", fileDescriptor_6d5354588716e6e7) }

var fileDescriptor_6d5354588716e6e7 = []byte{
	// 148 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4b, 0xcd, 0x2b, 0xcb,
	0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0x2f, 0x4a, 0xcc, 0x4b, 0x4f, 0xd5, 0x2b, 0x28, 0xca,
	0x2f, 0xc9, 0x17, 0xe2, 0x02, 0x8b, 0xeb, 0x81, 0xc4, 0x95, 0x4c, 0xb8, 0xb8, 0x3c, 0xf3, 0x4a,
	0xcc, 0x4c, 0x82, 0x40, 0xf2, 0x42, 0x22, 0x5c, 0xac, 0xc5, 0x25, 0x89, 0x45, 0x25, 0x12, 0x8c,
	0x0a, 0x8c, 0x1a, 0xcc, 0x41, 0x10, 0x8e, 0x90, 0x00, 0x17, 0x73, 0x6a, 0x5e, 0x8a, 0x04, 0x13,
	0x58, 0x0c, 0xc4, 0x54, 0x32, 0xe5, 0xe2, 0x76, 0xc9, 0x2f, 0x4d, 0xca, 0x49, 0xc5, 0xa2, 0x8d,
	0x11, 0x8b, 0x36, 0x46, 0xb0, 0x36, 0x27, 0x0d, 0x2e, 0x89, 0xcc, 0x7c, 0x3d, 0xb0, 0xed, 0x05,
	0x45, 0xf9, 0x15, 0x95, 0x7a, 0x08, 0x87, 0x38, 0x71, 0x81, 0x8d, 0x0a, 0x00, 0x39, 0x30, 0x80,
	0x31, 0x89, 0x0d, 0xec, 0x52, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x87, 0x0e, 0xec, 0x64,
	0xc3, 0x00, 0x00, 0x00,
}
 0707010000016F000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000001C00000000cilium-proxy-20200109/linux   07070100000170000081A4000003E800000064000000015E17A2470001A3AF000000000000000000000000000000000000002200000000cilium-proxy-20200109/linux/bpf.h /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/* Copyright (c) 2011-2014 PLUMgrid, http://plumgrid.com
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of version 2 of the GNU General Public
 * License as published by the Free Software Foundation.
 */
#ifndef __LINUX_BPF_H__
#define __LINUX_BPF_H__

#include "linux/type_mapper.h"
#include "linux/bpf_common.h"

/* Extended instruction set based on top of classic BPF */

/* instruction classes */
#define BPF_ALU64	0x07	/* alu mode in double word width */

/* ld/ldx fields */
#define BPF_DW		0x18	/* double word (64-bit) */
#define BPF_XADD	0xc0	/* exclusive add */

/* alu/jmp fields */
#define BPF_MOV		0xb0	/* mov reg to reg */
#define BPF_ARSH	0xc0	/* sign extending arithmetic shift right */

/* change endianness of a register */
#define BPF_END		0xd0	/* flags for endianness conversion: */
#define BPF_TO_LE	0x00	/* convert to little-endian */
#define BPF_TO_BE	0x08	/* convert to big-endian */
#define BPF_FROM_LE	BPF_TO_LE
#define BPF_FROM_BE	BPF_TO_BE

/* jmp encodings */
#define BPF_JNE		0x50	/* jump != */
#define BPF_JLT		0xa0	/* LT is unsigned, '<' */
#define BPF_JLE		0xb0	/* LE is unsigned, '<=' */
#define BPF_JSGT	0x60	/* SGT is signed '>', GT in x86 */
#define BPF_JSGE	0x70	/* SGE is signed '>=', GE in x86 */
#define BPF_JSLT	0xc0	/* SLT is signed, '<' */
#define BPF_JSLE	0xd0	/* SLE is signed, '<=' */
#define BPF_CALL	0x80	/* function call */
#define BPF_EXIT	0x90	/* function return */

/* Register numbers */
enum {
	BPF_REG_0 = 0,
	BPF_REG_1,
	BPF_REG_2,
	BPF_REG_3,
	BPF_REG_4,
	BPF_REG_5,
	BPF_REG_6,
	BPF_REG_7,
	BPF_REG_8,
	BPF_REG_9,
	BPF_REG_10,
	__MAX_BPF_REG,
};

/* BPF has 10 general purpose 64-bit registers and stack frame. */
#define MAX_BPF_REG	__MAX_BPF_REG

struct bpf_insn {
	__u8	code;		/* opcode */
	__u8	dst_reg:4;	/* dest register */
	__u8	src_reg:4;	/* source register */
	__s16	off;		/* signed offset */
	__s32	imm;		/* signed immediate constant */
};

/* Key of an a BPF_MAP_TYPE_LPM_TRIE entry */
struct bpf_lpm_trie_key {
	__u32	prefixlen;	/* up to 32 for AF_INET, 128 for AF_INET6 */
	__u8	data[0];	/* Arbitrary size */
};

struct bpf_cgroup_storage_key {
	__u64	cgroup_inode_id;	/* cgroup inode id */
	__u32	attach_type;		/* program attach type */
};

/* BPF syscall commands, see bpf(2) man-page for details. */
enum bpf_cmd {
	BPF_MAP_CREATE,
	BPF_MAP_LOOKUP_ELEM,
	BPF_MAP_UPDATE_ELEM,
	BPF_MAP_DELETE_ELEM,
	BPF_MAP_GET_NEXT_KEY,
	BPF_PROG_LOAD,
	BPF_OBJ_PIN,
	BPF_OBJ_GET,
	BPF_PROG_ATTACH,
	BPF_PROG_DETACH,
	BPF_PROG_TEST_RUN,
	BPF_PROG_GET_NEXT_ID,
	BPF_MAP_GET_NEXT_ID,
	BPF_PROG_GET_FD_BY_ID,
	BPF_MAP_GET_FD_BY_ID,
	BPF_OBJ_GET_INFO_BY_FD,
	BPF_PROG_QUERY,
	BPF_RAW_TRACEPOINT_OPEN,
	BPF_BTF_LOAD,
	BPF_BTF_GET_FD_BY_ID,
	BPF_TASK_FD_QUERY,
};

enum bpf_map_type {
	BPF_MAP_TYPE_UNSPEC,
	BPF_MAP_TYPE_HASH,
	BPF_MAP_TYPE_ARRAY,
	BPF_MAP_TYPE_PROG_ARRAY,
	BPF_MAP_TYPE_PERF_EVENT_ARRAY,
	BPF_MAP_TYPE_PERCPU_HASH,
	BPF_MAP_TYPE_PERCPU_ARRAY,
	BPF_MAP_TYPE_STACK_TRACE,
	BPF_MAP_TYPE_CGROUP_ARRAY,
	BPF_MAP_TYPE_LRU_HASH,
	BPF_MAP_TYPE_LRU_PERCPU_HASH,
	BPF_MAP_TYPE_LPM_TRIE,
	BPF_MAP_TYPE_ARRAY_OF_MAPS,
	BPF_MAP_TYPE_HASH_OF_MAPS,
	BPF_MAP_TYPE_DEVMAP,
	BPF_MAP_TYPE_SOCKMAP,
	BPF_MAP_TYPE_CPUMAP,
	BPF_MAP_TYPE_XSKMAP,
	BPF_MAP_TYPE_SOCKHASH,
	BPF_MAP_TYPE_CGROUP_STORAGE,
	BPF_MAP_TYPE_REUSEPORT_SOCKARRAY,
};

enum bpf_prog_type {
	BPF_PROG_TYPE_UNSPEC,
	BPF_PROG_TYPE_SOCKET_FILTER,
	BPF_PROG_TYPE_KPROBE,
	BPF_PROG_TYPE_SCHED_CLS,
	BPF_PROG_TYPE_SCHED_ACT,
	BPF_PROG_TYPE_TRACEPOINT,
	BPF_PROG_TYPE_XDP,
	BPF_PROG_TYPE_PERF_EVENT,
	BPF_PROG_TYPE_CGROUP_SKB,
	BPF_PROG_TYPE_CGROUP_SOCK,
	BPF_PROG_TYPE_LWT_IN,
	BPF_PROG_TYPE_LWT_OUT,
	BPF_PROG_TYPE_LWT_XMIT,
	BPF_PROG_TYPE_SOCK_OPS,
	BPF_PROG_TYPE_SK_SKB,
	BPF_PROG_TYPE_CGROUP_DEVICE,
	BPF_PROG_TYPE_SK_MSG,
	BPF_PROG_TYPE_RAW_TRACEPOINT,
	BPF_PROG_TYPE_CGROUP_SOCK_ADDR,
	BPF_PROG_TYPE_LWT_SEG6LOCAL,
	BPF_PROG_TYPE_LIRC_MODE2,
	BPF_PROG_TYPE_SK_REUSEPORT,
};

enum bpf_attach_type {
	BPF_CGROUP_INET_INGRESS,
	BPF_CGROUP_INET_EGRESS,
	BPF_CGROUP_INET_SOCK_CREATE,
	BPF_CGROUP_SOCK_OPS,
	BPF_SK_SKB_STREAM_PARSER,
	BPF_SK_SKB_STREAM_VERDICT,
	BPF_CGROUP_DEVICE,
	BPF_SK_MSG_VERDICT,
	BPF_CGROUP_INET4_BIND,
	BPF_CGROUP_INET6_BIND,
	BPF_CGROUP_INET4_CONNECT,
	BPF_CGROUP_INET6_CONNECT,
	BPF_CGROUP_INET4_POST_BIND,
	BPF_CGROUP_INET6_POST_BIND,
	BPF_CGROUP_UDP4_SENDMSG,
	BPF_CGROUP_UDP6_SENDMSG,
	BPF_LIRC_MODE2,
	__MAX_BPF_ATTACH_TYPE
};

#define MAX_BPF_ATTACH_TYPE __MAX_BPF_ATTACH_TYPE

/* cgroup-bpf attach flags used in BPF_PROG_ATTACH command
 *
 * NONE(default): No further bpf programs allowed in the subtree.
 *
 * BPF_F_ALLOW_OVERRIDE: If a sub-cgroup installs some bpf program,
 * the program in this cgroup yields to sub-cgroup program.
 *
 * BPF_F_ALLOW_MULTI: If a sub-cgroup installs some bpf program,
 * that cgroup program gets run in addition to the program in this cgroup.
 *
 * Only one program is allowed to be attached to a cgroup with
 * NONE or BPF_F_ALLOW_OVERRIDE flag.
 * Attaching another program on top of NONE or BPF_F_ALLOW_OVERRIDE will
 * release old program and attach the new one. Attach flags has to match.
 *
 * Multiple programs are allowed to be attached to a cgroup with
 * BPF_F_ALLOW_MULTI flag. They are executed in FIFO order
 * (those that were attached first, run first)
 * The programs of sub-cgroup are executed first, then programs of
 * this cgroup and then programs of parent cgroup.
 * When children program makes decision (like picking TCP CA or sock bind)
 * parent program has a chance to override it.
 *
 * A cgroup with MULTI or OVERRIDE flag allows any attach flags in sub-cgroups.
 * A cgroup with NONE doesn't allow any programs in sub-cgroups.
 * Ex1:
 * cgrp1 (MULTI progs A, B) ->
 *    cgrp2 (OVERRIDE prog C) ->
 *      cgrp3 (MULTI prog D) ->
 *        cgrp4 (OVERRIDE prog E) ->
 *          cgrp5 (NONE prog F)
 * the event in cgrp5 triggers execution of F,D,A,B in that order.
 * if prog F is detached, the execution is E,D,A,B
 * if prog F and D are detached, the execution is E,A,B
 * if prog F, E and D are detached, the execution is C,A,B
 *
 * All eligible programs are executed regardless of return code from
 * earlier programs.
 */
#define BPF_F_ALLOW_OVERRIDE	(1U << 0)
#define BPF_F_ALLOW_MULTI	(1U << 1)

/* If BPF_F_STRICT_ALIGNMENT is used in BPF_PROG_LOAD command, the
 * verifier will perform strict alignment checking as if the kernel
 * has been built with CONFIG_EFFICIENT_UNALIGNED_ACCESS not set,
 * and NET_IP_ALIGN defined to 2.
 */
#define BPF_F_STRICT_ALIGNMENT	(1U << 0)

/* when bpf_ldimm64->src_reg == BPF_PSEUDO_MAP_FD, bpf_ldimm64->imm == fd */
#define BPF_PSEUDO_MAP_FD	1

/* when bpf_call->src_reg == BPF_PSEUDO_CALL, bpf_call->imm == pc-relative
 * offset to another bpf function
 */
#define BPF_PSEUDO_CALL		1

/* flags for BPF_MAP_UPDATE_ELEM command */
#define BPF_ANY		0 /* create new element or update existing */
#define BPF_NOEXIST	1 /* create new element if it didn't exist */
#define BPF_EXIST	2 /* update existing element */

/* flags for BPF_MAP_CREATE command */
#define BPF_F_NO_PREALLOC	(1U << 0)
/* Instead of having one common LRU list in the
 * BPF_MAP_TYPE_LRU_[PERCPU_]HASH map, use a percpu LRU list
 * which can scale and perform better.
 * Note, the LRU nodes (including free nodes) cannot be moved
 * across different LRU lists.
 */
#define BPF_F_NO_COMMON_LRU	(1U << 1)
/* Specify numa node during map creation */
#define BPF_F_NUMA_NODE		(1U << 2)

/* flags for BPF_PROG_QUERY */
#define BPF_F_QUERY_EFFECTIVE	(1U << 0)

#define BPF_OBJ_NAME_LEN 16U

/* Flags for accessing BPF object */
#define BPF_F_RDONLY		(1U << 3)
#define BPF_F_WRONLY		(1U << 4)

/* Flag for stack_map, store build_id+offset instead of pointer */
#define BPF_F_STACK_BUILD_ID	(1U << 5)

enum bpf_stack_build_id_status {
	/* user space need an empty entry to identify end of a trace */
	BPF_STACK_BUILD_ID_EMPTY = 0,
	/* with valid build_id and offset */
	BPF_STACK_BUILD_ID_VALID = 1,
	/* couldn't get build_id, fallback to ip */
	BPF_STACK_BUILD_ID_IP = 2,
};

#define BPF_BUILD_ID_SIZE 20
struct bpf_stack_build_id {
	__s32		status;
	unsigned char	build_id[BPF_BUILD_ID_SIZE];
	union {
		__u64	offset;
		__u64	ip;
	};
};

union bpf_attr {
	struct { /* anonymous struct used by BPF_MAP_CREATE command */
		__u32	map_type;	/* one of enum bpf_map_type */
		__u32	key_size;	/* size of key in bytes */
		__u32	value_size;	/* size of value in bytes */
		__u32	max_entries;	/* max number of entries in a map */
		__u32	map_flags;	/* BPF_MAP_CREATE related
					 * flags defined above.
					 */
		__u32	inner_map_fd;	/* fd pointing to the inner map */
		__u32	numa_node;	/* numa node (effective only if
					 * BPF_F_NUMA_NODE is set).
					 */
		char	map_name[BPF_OBJ_NAME_LEN];
		__u32	map_ifindex;	/* ifindex of netdev to create on */
		__u32	btf_fd;		/* fd pointing to a BTF type data */
		__u32	btf_key_type_id;	/* BTF type_id of the key */
		__u32	btf_value_type_id;	/* BTF type_id of the value */
	};

	struct { /* anonymous struct used by BPF_MAP_*_ELEM commands */
		__u32		map_fd;
		__aligned_u64	key;
		union {
			__aligned_u64 value;
			__aligned_u64 next_key;
		};
		__u64		flags;
	};

	struct { /* anonymous struct used by BPF_PROG_LOAD command */
		__u32		prog_type;	/* one of enum bpf_prog_type */
		__u32		insn_cnt;
		__aligned_u64	insns;
		__aligned_u64	license;
		__u32		log_level;	/* verbosity level of verifier */
		__u32		log_size;	/* size of user buffer */
		__aligned_u64	log_buf;	/* user supplied buffer */
		__u32		kern_version;	/* checked when prog_type=kprobe */
		__u32		prog_flags;
		char		prog_name[BPF_OBJ_NAME_LEN];
		__u32		prog_ifindex;	/* ifindex of netdev to prep for */
		/* For some prog types expected attach type must be known at
		 * load time to verify attach type specific parts of prog
		 * (context accesses, allowed helpers, etc).
		 */
		__u32		expected_attach_type;
	};

	struct { /* anonymous struct used by BPF_OBJ_* commands */
		__aligned_u64	pathname;
		__u32		bpf_fd;
		__u32		file_flags;
	};

	struct { /* anonymous struct used by BPF_PROG_ATTACH/DETACH commands */
		__u32		target_fd;	/* container object to attach to */
		__u32		attach_bpf_fd;	/* eBPF program to attach */
		__u32		attach_type;
		__u32		attach_flags;
	};

	struct { /* anonymous struct used by BPF_PROG_TEST_RUN command */
		__u32		prog_fd;
		__u32		retval;
		__u32		data_size_in;
		__u32		data_size_out;
		__aligned_u64	data_in;
		__aligned_u64	data_out;
		__u32		repeat;
		__u32		duration;
	} test;

	struct { /* anonymous struct used by BPF_*_GET_*_ID */
		union {
			__u32		start_id;
			__u32		prog_id;
			__u32		map_id;
			__u32		btf_id;
		};
		__u32		next_id;
		__u32		open_flags;
	};

	struct { /* anonymous struct used by BPF_OBJ_GET_INFO_BY_FD */
		__u32		bpf_fd;
		__u32		info_len;
		__aligned_u64	info;
	} info;

	struct { /* anonymous struct used by BPF_PROG_QUERY command */
		__u32		target_fd;	/* container object to query */
		__u32		attach_type;
		__u32		query_flags;
		__u32		attach_flags;
		__aligned_u64	prog_ids;
		__u32		prog_cnt;
	} query;

	struct {
		__u64 name;
		__u32 prog_fd;
	} raw_tracepoint;

	struct { /* anonymous struct for BPF_BTF_LOAD */
		__aligned_u64	btf;
		__aligned_u64	btf_log_buf;
		__u32		btf_size;
		__u32		btf_log_size;
		__u32		btf_log_level;
	};

	struct {
		__u32		pid;		/* input: pid */
		__u32		fd;		/* input: fd */
		__u32		flags;		/* input: flags */
		__u32		buf_len;	/* input/output: buf len */
		__aligned_u64	buf;		/* input/output:
						 *   tp_name for tracepoint
						 *   symbol for kprobe
						 *   filename for uprobe
						 */
		__u32		prog_id;	/* output: prod_id */
		__u32		fd_type;	/* output: BPF_FD_TYPE_* */
		__u64		probe_offset;	/* output: probe_offset */
		__u64		probe_addr;	/* output: probe_addr */
	} task_fd_query;
} __attribute__((aligned(8)));

/* The description below is an attempt at providing documentation to eBPF
 * developers about the multiple available eBPF helper functions. It can be
 * parsed and used to produce a manual page. The workflow is the following,
 * and requires the rst2man utility:
 *
 *     $ ./scripts/bpf_helpers_doc.py \
 *             --filename include/uapi/linux/bpf.h > /tmp/bpf-helpers.rst
 *     $ rst2man /tmp/bpf-helpers.rst > /tmp/bpf-helpers.7
 *     $ man /tmp/bpf-helpers.7
 *
 * Note that in order to produce this external documentation, some RST
 * formatting is used in the descriptions to get "bold" and "italics" in
 * manual pages. Also note that the few trailing white spaces are
 * intentional, removing them would break paragraphs for rst2man.
 *
 * Start of BPF helper function descriptions:
 *
 * void *bpf_map_lookup_elem(struct bpf_map *map, const void *key)
 * 	Description
 * 		Perform a lookup in *map* for an entry associated to *key*.
 * 	Return
 * 		Map value associated to *key*, or **NULL** if no entry was
 * 		found.
 *
 * int bpf_map_update_elem(struct bpf_map *map, const void *key, const void *value, u64 flags)
 * 	Description
 * 		Add or update the value of the entry associated to *key* in
 * 		*map* with *value*. *flags* is one of:
 *
 * 		**BPF_NOEXIST**
 * 			The entry for *key* must not exist in the map.
 * 		**BPF_EXIST**
 * 			The entry for *key* must already exist in the map.
 * 		**BPF_ANY**
 * 			No condition on the existence of the entry for *key*.
 *
 * 		Flag value **BPF_NOEXIST** cannot be used for maps of types
 * 		**BPF_MAP_TYPE_ARRAY** or **BPF_MAP_TYPE_PERCPU_ARRAY**  (all
 * 		elements always exist), the helper would return an error.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_map_delete_elem(struct bpf_map *map, const void *key)
 * 	Description
 * 		Delete entry with *key* from *map*.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_probe_read(void *dst, u32 size, const void *src)
 * 	Description
 * 		For tracing programs, safely attempt to read *size* bytes from
 * 		address *src* and store the data in *dst*.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * u64 bpf_ktime_get_ns(void)
 * 	Description
 * 		Return the time elapsed since system boot, in nanoseconds.
 * 	Return
 * 		Current *ktime*.
 *
 * int bpf_trace_printk(const char *fmt, u32 fmt_size, ...)
 * 	Description
 * 		This helper is a "printk()-like" facility for debugging. It
 * 		prints a message defined by format *fmt* (of size *fmt_size*)
 * 		to file *\/sys/kernel/debug/tracing/trace* from DebugFS, if
 * 		available. It can take up to three additional **u64**
 * 		arguments (as an eBPF helpers, the total number of arguments is
 * 		limited to five).
 *
 * 		Each time the helper is called, it appends a line to the trace.
 * 		The format of the trace is customizable, and the exact output
 * 		one will get depends on the options set in
 * 		*\/sys/kernel/debug/tracing/trace_options* (see also the
 * 		*README* file under the same directory). However, it usually
 * 		defaults to something like:
 *
 * 		::
 *
 * 			telnet-470   [001] .N.. 419421.045894: 0x00000001: <formatted msg>
 *
 * 		In the above:
 *
 * 			* ``telnet`` is the name of the current task.
 * 			* ``470`` is the PID of the current task.
 * 			* ``001`` is the CPU number on which the task is
 * 			  running.
 * 			* In ``.N..``, each character refers to a set of
 * 			  options (whether irqs are enabled, scheduling
 * 			  options, whether hard/softirqs are running, level of
 * 			  preempt_disabled respectively). **N** means that
 * 			  **TIF_NEED_RESCHED** and **PREEMPT_NEED_RESCHED**
 * 			  are set.
 * 			* ``419421.045894`` is a timestamp.
 * 			* ``0x00000001`` is a fake value used by BPF for the
 * 			  instruction pointer register.
 * 			* ``<formatted msg>`` is the message formatted with
 * 			  *fmt*.
 *
 * 		The conversion specifiers supported by *fmt* are similar, but
 * 		more limited than for printk(). They are **%d**, **%i**,
 * 		**%u**, **%x**, **%ld**, **%li**, **%lu**, **%lx**, **%lld**,
 * 		**%lli**, **%llu**, **%llx**, **%p**, **%s**. No modifier (size
 * 		of field, padding with zeroes, etc.) is available, and the
 * 		helper will return **-EINVAL** (but print nothing) if it
 * 		encounters an unknown specifier.
 *
 * 		Also, note that **bpf_trace_printk**\ () is slow, and should
 * 		only be used for debugging purposes. For this reason, a notice
 * 		bloc (spanning several lines) is printed to kernel logs and
 * 		states that the helper should not be used "for production use"
 * 		the first time this helper is used (or more precisely, when
 * 		**trace_printk**\ () buffers are allocated). For passing values
 * 		to user space, perf events should be preferred.
 * 	Return
 * 		The number of bytes written to the buffer, or a negative error
 * 		in case of failure.
 *
 * u32 bpf_get_prandom_u32(void)
 * 	Description
 * 		Get a pseudo-random number.
 *
 * 		From a security point of view, this helper uses its own
 * 		pseudo-random internal state, and cannot be used to infer the
 * 		seed of other random functions in the kernel. However, it is
 * 		essential to note that the generator used by the helper is not
 * 		cryptographically secure.
 * 	Return
 * 		A random 32-bit unsigned value.
 *
 * u32 bpf_get_smp_processor_id(void)
 * 	Description
 * 		Get the SMP (symmetric multiprocessing) processor id. Note that
 * 		all programs run with preemption disabled, which means that the
 * 		SMP processor id is stable during all the execution of the
 * 		program.
 * 	Return
 * 		The SMP id of the processor running the program.
 *
 * int bpf_skb_store_bytes(struct sk_buff *skb, u32 offset, const void *from, u32 len, u64 flags)
 * 	Description
 * 		Store *len* bytes from address *from* into the packet
 * 		associated to *skb*, at *offset*. *flags* are a combination of
 * 		**BPF_F_RECOMPUTE_CSUM** (automatically recompute the
 * 		checksum for the packet after storing the bytes) and
 * 		**BPF_F_INVALIDATE_HASH** (set *skb*\ **->hash**, *skb*\
 * 		**->swhash** and *skb*\ **->l4hash** to 0).
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_l3_csum_replace(struct sk_buff *skb, u32 offset, u64 from, u64 to, u64 size)
 * 	Description
 * 		Recompute the layer 3 (e.g. IP) checksum for the packet
 * 		associated to *skb*. Computation is incremental, so the helper
 * 		must know the former value of the header field that was
 * 		modified (*from*), the new value of this field (*to*), and the
 * 		number of bytes (2 or 4) for this field, stored in *size*.
 * 		Alternatively, it is possible to store the difference between
 * 		the previous and the new values of the header field in *to*, by
 * 		setting *from* and *size* to 0. For both methods, *offset*
 * 		indicates the location of the IP checksum within the packet.
 *
 * 		This helper works in combination with **bpf_csum_diff**\ (),
 * 		which does not update the checksum in-place, but offers more
 * 		flexibility and can handle sizes larger than 2 or 4 for the
 * 		checksum to update.
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_l4_csum_replace(struct sk_buff *skb, u32 offset, u64 from, u64 to, u64 flags)
 * 	Description
 * 		Recompute the layer 4 (e.g. TCP, UDP or ICMP) checksum for the
 * 		packet associated to *skb*. Computation is incremental, so the
 * 		helper must know the former value of the header field that was
 * 		modified (*from*), the new value of this field (*to*), and the
 * 		number of bytes (2 or 4) for this field, stored on the lowest
 * 		four bits of *flags*. Alternatively, it is possible to store
 * 		the difference between the previous and the new values of the
 * 		header field in *to*, by setting *from* and the four lowest
 * 		bits of *flags* to 0. For both methods, *offset* indicates the
 * 		location of the IP checksum within the packet. In addition to
 * 		the size of the field, *flags* can be added (bitwise OR) actual
 * 		flags. With **BPF_F_MARK_MANGLED_0**, a null checksum is left
 * 		untouched (unless **BPF_F_MARK_ENFORCE** is added as well), and
 * 		for updates resulting in a null checksum the value is set to
 * 		**CSUM_MANGLED_0** instead. Flag **BPF_F_PSEUDO_HDR** indicates
 * 		the checksum is to be computed against a pseudo-header.
 *
 * 		This helper works in combination with **bpf_csum_diff**\ (),
 * 		which does not update the checksum in-place, but offers more
 * 		flexibility and can handle sizes larger than 2 or 4 for the
 * 		checksum to update.
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_tail_call(void *ctx, struct bpf_map *prog_array_map, u32 index)
 * 	Description
 * 		This special helper is used to trigger a "tail call", or in
 * 		other words, to jump into another eBPF program. The same stack
 * 		frame is used (but values on stack and in registers for the
 * 		caller are not accessible to the callee). This mechanism allows
 * 		for program chaining, either for raising the maximum number of
 * 		available eBPF instructions, or to execute given programs in
 * 		conditional blocks. For security reasons, there is an upper
 * 		limit to the number of successive tail calls that can be
 * 		performed.
 *
 * 		Upon call of this helper, the program attempts to jump into a
 * 		program referenced at index *index* in *prog_array_map*, a
 * 		special map of type **BPF_MAP_TYPE_PROG_ARRAY**, and passes
 * 		*ctx*, a pointer to the context.
 *
 * 		If the call succeeds, the kernel immediately runs the first
 * 		instruction of the new program. This is not a function call,
 * 		and it never returns to the previous program. If the call
 * 		fails, then the helper has no effect, and the caller continues
 * 		to run its subsequent instructions. A call can fail if the
 * 		destination program for the jump does not exist (i.e. *index*
 * 		is superior to the number of entries in *prog_array_map*), or
 * 		if the maximum number of tail calls has been reached for this
 * 		chain of programs. This limit is defined in the kernel by the
 * 		macro **MAX_TAIL_CALL_CNT** (not accessible to user space),
 * 		which is currently set to 32.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_clone_redirect(struct sk_buff *skb, u32 ifindex, u64 flags)
 * 	Description
 * 		Clone and redirect the packet associated to *skb* to another
 * 		net device of index *ifindex*. Both ingress and egress
 * 		interfaces can be used for redirection. The **BPF_F_INGRESS**
 * 		value in *flags* is used to make the distinction (ingress path
 * 		is selected if the flag is present, egress path otherwise).
 * 		This is the only flag supported for now.
 *
 * 		In comparison with **bpf_redirect**\ () helper,
 * 		**bpf_clone_redirect**\ () has the associated cost of
 * 		duplicating the packet buffer, but this can be executed out of
 * 		the eBPF program. Conversely, **bpf_redirect**\ () is more
 * 		efficient, but it is handled through an action code where the
 * 		redirection happens only after the eBPF program has returned.
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * u64 bpf_get_current_pid_tgid(void)
 * 	Return
 * 		A 64-bit integer containing the current tgid and pid, and
 * 		created as such:
 * 		*current_task*\ **->tgid << 32 \|**
 * 		*current_task*\ **->pid**.
 *
 * u64 bpf_get_current_uid_gid(void)
 * 	Return
 * 		A 64-bit integer containing the current GID and UID, and
 * 		created as such: *current_gid* **<< 32 \|** *current_uid*.
 *
 * int bpf_get_current_comm(char *buf, u32 size_of_buf)
 * 	Description
 * 		Copy the **comm** attribute of the current task into *buf* of
 * 		*size_of_buf*. The **comm** attribute contains the name of
 * 		the executable (excluding the path) for the current task. The
 * 		*size_of_buf* must be strictly positive. On success, the
 * 		helper makes sure that the *buf* is NUL-terminated. On failure,
 * 		it is filled with zeroes.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * u32 bpf_get_cgroup_classid(struct sk_buff *skb)
 * 	Description
 * 		Retrieve the classid for the current task, i.e. for the net_cls
 * 		cgroup to which *skb* belongs.
 *
 * 		This helper can be used on TC egress path, but not on ingress.
 *
 * 		The net_cls cgroup provides an interface to tag network packets
 * 		based on a user-provided identifier for all traffic coming from
 * 		the tasks belonging to the related cgroup. See also the related
 * 		kernel documentation, available from the Linux sources in file
 * 		*Documentation/cgroup-v1/net_cls.txt*.
 *
 * 		The Linux kernel has two versions for cgroups: there are
 * 		cgroups v1 and cgroups v2. Both are available to users, who can
 * 		use a mixture of them, but note that the net_cls cgroup is for
 * 		cgroup v1 only. This makes it incompatible with BPF programs
 * 		run on cgroups, which is a cgroup-v2-only feature (a socket can
 * 		only hold data for one version of cgroups at a time).
 *
 * 		This helper is only available is the kernel was compiled with
 * 		the **CONFIG_CGROUP_NET_CLASSID** configuration option set to
 * 		"**y**" or to "**m**".
 * 	Return
 * 		The classid, or 0 for the default unconfigured classid.
 *
 * int bpf_skb_vlan_push(struct sk_buff *skb, __be16 vlan_proto, u16 vlan_tci)
 * 	Description
 * 		Push a *vlan_tci* (VLAN tag control information) of protocol
 * 		*vlan_proto* to the packet associated to *skb*, then update
 * 		the checksum. Note that if *vlan_proto* is different from
 * 		**ETH_P_8021Q** and **ETH_P_8021AD**, it is considered to
 * 		be **ETH_P_8021Q**.
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_skb_vlan_pop(struct sk_buff *skb)
 * 	Description
 * 		Pop a VLAN header from the packet associated to *skb*.
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_skb_get_tunnel_key(struct sk_buff *skb, struct bpf_tunnel_key *key, u32 size, u64 flags)
 * 	Description
 * 		Get tunnel metadata. This helper takes a pointer *key* to an
 * 		empty **struct bpf_tunnel_key** of **size**, that will be
 * 		filled with tunnel metadata for the packet associated to *skb*.
 * 		The *flags* can be set to **BPF_F_TUNINFO_IPV6**, which
 * 		indicates that the tunnel is based on IPv6 protocol instead of
 * 		IPv4.
 *
 * 		The **struct bpf_tunnel_key** is an object that generalizes the
 * 		principal parameters used by various tunneling protocols into a
 * 		single struct. This way, it can be used to easily make a
 * 		decision based on the contents of the encapsulation header,
 * 		"summarized" in this struct. In particular, it holds the IP
 * 		address of the remote end (IPv4 or IPv6, depending on the case)
 * 		in *key*\ **->remote_ipv4** or *key*\ **->remote_ipv6**. Also,
 * 		this struct exposes the *key*\ **->tunnel_id**, which is
 * 		generally mapped to a VNI (Virtual Network Identifier), making
 * 		it programmable together with the **bpf_skb_set_tunnel_key**\
 * 		() helper.
 *
 * 		Let's imagine that the following code is part of a program
 * 		attached to the TC ingress interface, on one end of a GRE
 * 		tunnel, and is supposed to filter out all messages coming from
 * 		remote ends with IPv4 address other than 10.0.0.1:
 *
 * 		::
 *
 * 			int ret;
 * 			struct bpf_tunnel_key key = {};
 * 			
 * 			ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key), 0);
 * 			if (ret < 0)
 * 				return TC_ACT_SHOT;	// drop packet
 * 			
 * 			if (key.remote_ipv4 != 0x0a000001)
 * 				return TC_ACT_SHOT;	// drop packet
 * 			
 * 			return TC_ACT_OK;		// accept packet
 *
 * 		This interface can also be used with all encapsulation devices
 * 		that can operate in "collect metadata" mode: instead of having
 * 		one network device per specific configuration, the "collect
 * 		metadata" mode only requires a single device where the
 * 		configuration can be extracted from this helper.
 *
 * 		This can be used together with various tunnels such as VXLan,
 * 		Geneve, GRE or IP in IP (IPIP).
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_skb_set_tunnel_key(struct sk_buff *skb, struct bpf_tunnel_key *key, u32 size, u64 flags)
 * 	Description
 * 		Populate tunnel metadata for packet associated to *skb.* The
 * 		tunnel metadata is set to the contents of *key*, of *size*. The
 * 		*flags* can be set to a combination of the following values:
 *
 * 		**BPF_F_TUNINFO_IPV6**
 * 			Indicate that the tunnel is based on IPv6 protocol
 * 			instead of IPv4.
 * 		**BPF_F_ZERO_CSUM_TX**
 * 			For IPv4 packets, add a flag to tunnel metadata
 * 			indicating that checksum computation should be skipped
 * 			and checksum set to zeroes.
 * 		**BPF_F_DONT_FRAGMENT**
 * 			Add a flag to tunnel metadata indicating that the
 * 			packet should not be fragmented.
 * 		**BPF_F_SEQ_NUMBER**
 * 			Add a flag to tunnel metadata indicating that a
 * 			sequence number should be added to tunnel header before
 * 			sending the packet. This flag was added for GRE
 * 			encapsulation, but might be used with other protocols
 * 			as well in the future.
 *
 * 		Here is a typical usage on the transmit path:
 *
 * 		::
 *
 * 			struct bpf_tunnel_key key;
 * 			     populate key ...
 * 			bpf_skb_set_tunnel_key(skb, &key, sizeof(key), 0);
 * 			bpf_clone_redirect(skb, vxlan_dev_ifindex, 0);
 *
 * 		See also the description of the **bpf_skb_get_tunnel_key**\ ()
 * 		helper for additional information.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * u64 bpf_perf_event_read(struct bpf_map *map, u64 flags)
 * 	Description
 * 		Read the value of a perf event counter. This helper relies on a
 * 		*map* of type **BPF_MAP_TYPE_PERF_EVENT_ARRAY**. The nature of
 * 		the perf event counter is selected when *map* is updated with
 * 		perf event file descriptors. The *map* is an array whose size
 * 		is the number of available CPUs, and each cell contains a value
 * 		relative to one CPU. The value to retrieve is indicated by
 * 		*flags*, that contains the index of the CPU to look up, masked
 * 		with **BPF_F_INDEX_MASK**. Alternatively, *flags* can be set to
 * 		**BPF_F_CURRENT_CPU** to indicate that the value for the
 * 		current CPU should be retrieved.
 *
 * 		Note that before Linux 4.13, only hardware perf event can be
 * 		retrieved.
 *
 * 		Also, be aware that the newer helper
 * 		**bpf_perf_event_read_value**\ () is recommended over
 * 		**bpf_perf_event_read**\ () in general. The latter has some ABI
 * 		quirks where error and counter value are used as a return code
 * 		(which is wrong to do since ranges may overlap). This issue is
 * 		fixed with **bpf_perf_event_read_value**\ (), which at the same
 * 		time provides more features over the **bpf_perf_event_read**\
 * 		() interface. Please refer to the description of
 * 		**bpf_perf_event_read_value**\ () for details.
 * 	Return
 * 		The value of the perf event counter read from the map, or a
 * 		negative error code in case of failure.
 *
 * int bpf_redirect(u32 ifindex, u64 flags)
 * 	Description
 * 		Redirect the packet to another net device of index *ifindex*.
 * 		This helper is somewhat similar to **bpf_clone_redirect**\
 * 		(), except that the packet is not cloned, which provides
 * 		increased performance.
 *
 * 		Except for XDP, both ingress and egress interfaces can be used
 * 		for redirection. The **BPF_F_INGRESS** value in *flags* is used
 * 		to make the distinction (ingress path is selected if the flag
 * 		is present, egress path otherwise). Currently, XDP only
 * 		supports redirection to the egress interface, and accepts no
 * 		flag at all.
 *
 * 		The same effect can be attained with the more generic
 * 		**bpf_redirect_map**\ (), which requires specific maps to be
 * 		used but offers better performance.
 * 	Return
 * 		For XDP, the helper returns **XDP_REDIRECT** on success or
 * 		**XDP_ABORTED** on error. For other program types, the values
 * 		are **TC_ACT_REDIRECT** on success or **TC_ACT_SHOT** on
 * 		error.
 *
 * u32 bpf_get_route_realm(struct sk_buff *skb)
 * 	Description
 * 		Retrieve the realm or the route, that is to say the
 * 		**tclassid** field of the destination for the *skb*. The
 * 		indentifier retrieved is a user-provided tag, similar to the
 * 		one used with the net_cls cgroup (see description for
 * 		**bpf_get_cgroup_classid**\ () helper), but here this tag is
 * 		held by a route (a destination entry), not by a task.
 *
 * 		Retrieving this identifier works with the clsact TC egress hook
 * 		(see also **tc-bpf(8)**), or alternatively on conventional
 * 		classful egress qdiscs, but not on TC ingress path. In case of
 * 		clsact TC egress hook, this has the advantage that, internally,
 * 		the destination entry has not been dropped yet in the transmit
 * 		path. Therefore, the destination entry does not need to be
 * 		artificially held via **netif_keep_dst**\ () for a classful
 * 		qdisc until the *skb* is freed.
 *
 * 		This helper is available only if the kernel was compiled with
 * 		**CONFIG_IP_ROUTE_CLASSID** configuration option.
 * 	Return
 * 		The realm of the route for the packet associated to *skb*, or 0
 * 		if none was found.
 *
 * int bpf_perf_event_output(struct pt_reg *ctx, struct bpf_map *map, u64 flags, void *data, u64 size)
 * 	Description
 * 		Write raw *data* blob into a special BPF perf event held by
 * 		*map* of type **BPF_MAP_TYPE_PERF_EVENT_ARRAY**. This perf
 * 		event must have the following attributes: **PERF_SAMPLE_RAW**
 * 		as **sample_type**, **PERF_TYPE_SOFTWARE** as **type**, and
 * 		**PERF_COUNT_SW_BPF_OUTPUT** as **config**.
 *
 * 		The *flags* are used to indicate the index in *map* for which
 * 		the value must be put, masked with **BPF_F_INDEX_MASK**.
 * 		Alternatively, *flags* can be set to **BPF_F_CURRENT_CPU**
 * 		to indicate that the index of the current CPU core should be
 * 		used.
 *
 * 		The value to write, of *size*, is passed through eBPF stack and
 * 		pointed by *data*.
 *
 * 		The context of the program *ctx* needs also be passed to the
 * 		helper.
 *
 * 		On user space, a program willing to read the values needs to
 * 		call **perf_event_open**\ () on the perf event (either for
 * 		one or for all CPUs) and to store the file descriptor into the
 * 		*map*. This must be done before the eBPF program can send data
 * 		into it. An example is available in file
 * 		*samples/bpf/trace_output_user.c* in the Linux kernel source
 * 		tree (the eBPF program counterpart is in
 * 		*samples/bpf/trace_output_kern.c*).
 *
 * 		**bpf_perf_event_output**\ () achieves better performance
 * 		than **bpf_trace_printk**\ () for sharing data with user
 * 		space, and is much better suitable for streaming data from eBPF
 * 		programs.
 *
 * 		Note that this helper is not restricted to tracing use cases
 * 		and can be used with programs attached to TC or XDP as well,
 * 		where it allows for passing data to user space listeners. Data
 * 		can be:
 *
 * 		* Only custom structs,
 * 		* Only the packet payload, or
 * 		* A combination of both.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_skb_load_bytes(const struct sk_buff *skb, u32 offset, void *to, u32 len)
 * 	Description
 * 		This helper was provided as an easy way to load data from a
 * 		packet. It can be used to load *len* bytes from *offset* from
 * 		the packet associated to *skb*, into the buffer pointed by
 * 		*to*.
 *
 * 		Since Linux 4.7, usage of this helper has mostly been replaced
 * 		by "direct packet access", enabling packet data to be
 * 		manipulated with *skb*\ **->data** and *skb*\ **->data_end**
 * 		pointing respectively to the first byte of packet data and to
 * 		the byte after the last byte of packet data. However, it
 * 		remains useful if one wishes to read large quantities of data
 * 		at once from a packet into the eBPF stack.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_get_stackid(struct pt_reg *ctx, struct bpf_map *map, u64 flags)
 * 	Description
 * 		Walk a user or a kernel stack and return its id. To achieve
 * 		this, the helper needs *ctx*, which is a pointer to the context
 * 		on which the tracing program is executed, and a pointer to a
 * 		*map* of type **BPF_MAP_TYPE_STACK_TRACE**.
 *
 * 		The last argument, *flags*, holds the number of stack frames to
 * 		skip (from 0 to 255), masked with
 * 		**BPF_F_SKIP_FIELD_MASK**. The next bits can be used to set
 * 		a combination of the following flags:
 *
 * 		**BPF_F_USER_STACK**
 * 			Collect a user space stack instead of a kernel stack.
 * 		**BPF_F_FAST_STACK_CMP**
 * 			Compare stacks by hash only.
 * 		**BPF_F_REUSE_STACKID**
 * 			If two different stacks hash into the same *stackid*,
 * 			discard the old one.
 *
 * 		The stack id retrieved is a 32 bit long integer handle which
 * 		can be further combined with other data (including other stack
 * 		ids) and used as a key into maps. This can be useful for
 * 		generating a variety of graphs (such as flame graphs or off-cpu
 * 		graphs).
 *
 * 		For walking a stack, this helper is an improvement over
 * 		**bpf_probe_read**\ (), which can be used with unrolled loops
 * 		but is not efficient and consumes a lot of eBPF instructions.
 * 		Instead, **bpf_get_stackid**\ () can collect up to
 * 		**PERF_MAX_STACK_DEPTH** both kernel and user frames. Note that
 * 		this limit can be controlled with the **sysctl** program, and
 * 		that it should be manually increased in order to profile long
 * 		user stacks (such as stacks for Java programs). To do so, use:
 *
 * 		::
 *
 * 			# sysctl kernel.perf_event_max_stack=<new value>
 * 	Return
 * 		The positive or null stack id on success, or a negative error
 * 		in case of failure.
 *
 * s64 bpf_csum_diff(__be32 *from, u32 from_size, __be32 *to, u32 to_size, __wsum seed)
 * 	Description
 * 		Compute a checksum difference, from the raw buffer pointed by
 * 		*from*, of length *from_size* (that must be a multiple of 4),
 * 		towards the raw buffer pointed by *to*, of size *to_size*
 * 		(same remark). An optional *seed* can be added to the value
 * 		(this can be cascaded, the seed may come from a previous call
 * 		to the helper).
 *
 * 		This is flexible enough to be used in several ways:
 *
 * 		* With *from_size* == 0, *to_size* > 0 and *seed* set to
 * 		  checksum, it can be used when pushing new data.
 * 		* With *from_size* > 0, *to_size* == 0 and *seed* set to
 * 		  checksum, it can be used when removing data from a packet.
 * 		* With *from_size* > 0, *to_size* > 0 and *seed* set to 0, it
 * 		  can be used to compute a diff. Note that *from_size* and
 * 		  *to_size* do not need to be equal.
 *
 * 		This helper can be used in combination with
 * 		**bpf_l3_csum_replace**\ () and **bpf_l4_csum_replace**\ (), to
 * 		which one can feed in the difference computed with
 * 		**bpf_csum_diff**\ ().
 * 	Return
 * 		The checksum result, or a negative error code in case of
 * 		failure.
 *
 * int bpf_skb_get_tunnel_opt(struct sk_buff *skb, u8 *opt, u32 size)
 * 	Description
 * 		Retrieve tunnel options metadata for the packet associated to
 * 		*skb*, and store the raw tunnel option data to the buffer *opt*
 * 		of *size*.
 *
 * 		This helper can be used with encapsulation devices that can
 * 		operate in "collect metadata" mode (please refer to the related
 * 		note in the description of **bpf_skb_get_tunnel_key**\ () for
 * 		more details). A particular example where this can be used is
 * 		in combination with the Geneve encapsulation protocol, where it
 * 		allows for pushing (with **bpf_skb_get_tunnel_opt**\ () helper)
 * 		and retrieving arbitrary TLVs (Type-Length-Value headers) from
 * 		the eBPF program. This allows for full customization of these
 * 		headers.
 * 	Return
 * 		The size of the option data retrieved.
 *
 * int bpf_skb_set_tunnel_opt(struct sk_buff *skb, u8 *opt, u32 size)
 * 	Description
 * 		Set tunnel options metadata for the packet associated to *skb*
 * 		to the option data contained in the raw buffer *opt* of *size*.
 *
 * 		See also the description of the **bpf_skb_get_tunnel_opt**\ ()
 * 		helper for additional information.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_skb_change_proto(struct sk_buff *skb, __be16 proto, u64 flags)
 * 	Description
 * 		Change the protocol of the *skb* to *proto*. Currently
 * 		supported are transition from IPv4 to IPv6, and from IPv6 to
 * 		IPv4. The helper takes care of the groundwork for the
 * 		transition, including resizing the socket buffer. The eBPF
 * 		program is expected to fill the new headers, if any, via
 * 		**skb_store_bytes**\ () and to recompute the checksums with
 * 		**bpf_l3_csum_replace**\ () and **bpf_l4_csum_replace**\
 * 		(). The main case for this helper is to perform NAT64
 * 		operations out of an eBPF program.
 *
 * 		Internally, the GSO type is marked as dodgy so that headers are
 * 		checked and segments are recalculated by the GSO/GRO engine.
 * 		The size for GSO target is adapted as well.
 *
 * 		All values for *flags* are reserved for future usage, and must
 * 		be left at zero.
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_skb_change_type(struct sk_buff *skb, u32 type)
 * 	Description
 * 		Change the packet type for the packet associated to *skb*. This
 * 		comes down to setting *skb*\ **->pkt_type** to *type*, except
 * 		the eBPF program does not have a write access to *skb*\
 * 		**->pkt_type** beside this helper. Using a helper here allows
 * 		for graceful handling of errors.
 *
 * 		The major use case is to change incoming *skb*s to
 * 		**PACKET_HOST** in a programmatic way instead of having to
 * 		recirculate via **redirect**\ (..., **BPF_F_INGRESS**), for
 * 		example.
 *
 * 		Note that *type* only allows certain values. At this time, they
 * 		are:
 *
 * 		**PACKET_HOST**
 * 			Packet is for us.
 * 		**PACKET_BROADCAST**
 * 			Send packet to all.
 * 		**PACKET_MULTICAST**
 * 			Send packet to group.
 * 		**PACKET_OTHERHOST**
 * 			Send packet to someone else.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_skb_under_cgroup(struct sk_buff *skb, struct bpf_map *map, u32 index)
 * 	Description
 * 		Check whether *skb* is a descendant of the cgroup2 held by
 * 		*map* of type **BPF_MAP_TYPE_CGROUP_ARRAY**, at *index*.
 * 	Return
 * 		The return value depends on the result of the test, and can be:
 *
 * 		* 0, if the *skb* failed the cgroup2 descendant test.
 * 		* 1, if the *skb* succeeded the cgroup2 descendant test.
 * 		* A negative error code, if an error occurred.
 *
 * u32 bpf_get_hash_recalc(struct sk_buff *skb)
 * 	Description
 * 		Retrieve the hash of the packet, *skb*\ **->hash**. If it is
 * 		not set, in particular if the hash was cleared due to mangling,
 * 		recompute this hash. Later accesses to the hash can be done
 * 		directly with *skb*\ **->hash**.
 *
 * 		Calling **bpf_set_hash_invalid**\ (), changing a packet
 * 		prototype with **bpf_skb_change_proto**\ (), or calling
 * 		**bpf_skb_store_bytes**\ () with the
 * 		**BPF_F_INVALIDATE_HASH** are actions susceptible to clear
 * 		the hash and to trigger a new computation for the next call to
 * 		**bpf_get_hash_recalc**\ ().
 * 	Return
 * 		The 32-bit hash.
 *
 * u64 bpf_get_current_task(void)
 * 	Return
 * 		A pointer to the current task struct.
 *
 * int bpf_probe_write_user(void *dst, const void *src, u32 len)
 * 	Description
 * 		Attempt in a safe way to write *len* bytes from the buffer
 * 		*src* to *dst* in memory. It only works for threads that are in
 * 		user context, and *dst* must be a valid user space address.
 *
 * 		This helper should not be used to implement any kind of
 * 		security mechanism because of TOC-TOU attacks, but rather to
 * 		debug, divert, and manipulate execution of semi-cooperative
 * 		processes.
 *
 * 		Keep in mind that this feature is meant for experiments, and it
 * 		has a risk of crashing the system and running programs.
 * 		Therefore, when an eBPF program using this helper is attached,
 * 		a warning including PID and process name is printed to kernel
 * 		logs.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_current_task_under_cgroup(struct bpf_map *map, u32 index)
 * 	Description
 * 		Check whether the probe is being run is the context of a given
 * 		subset of the cgroup2 hierarchy. The cgroup2 to test is held by
 * 		*map* of type **BPF_MAP_TYPE_CGROUP_ARRAY**, at *index*.
 * 	Return
 * 		The return value depends on the result of the test, and can be:
 *
 * 		* 0, if the *skb* task belongs to the cgroup2.
 * 		* 1, if the *skb* task does not belong to the cgroup2.
 * 		* A negative error code, if an error occurred.
 *
 * int bpf_skb_change_tail(struct sk_buff *skb, u32 len, u64 flags)
 * 	Description
 * 		Resize (trim or grow) the packet associated to *skb* to the
 * 		new *len*. The *flags* are reserved for future usage, and must
 * 		be left at zero.
 *
 * 		The basic idea is that the helper performs the needed work to
 * 		change the size of the packet, then the eBPF program rewrites
 * 		the rest via helpers like **bpf_skb_store_bytes**\ (),
 * 		**bpf_l3_csum_replace**\ (), **bpf_l3_csum_replace**\ ()
 * 		and others. This helper is a slow path utility intended for
 * 		replies with control messages. And because it is targeted for
 * 		slow path, the helper itself can afford to be slow: it
 * 		implicitly linearizes, unclones and drops offloads from the
 * 		*skb*.
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_skb_pull_data(struct sk_buff *skb, u32 len)
 * 	Description
 * 		Pull in non-linear data in case the *skb* is non-linear and not
 * 		all of *len* are part of the linear section. Make *len* bytes
 * 		from *skb* readable and writable. If a zero value is passed for
 * 		*len*, then the whole length of the *skb* is pulled.
 *
 * 		This helper is only needed for reading and writing with direct
 * 		packet access.
 *
 * 		For direct packet access, testing that offsets to access
 * 		are within packet boundaries (test on *skb*\ **->data_end**) is
 * 		susceptible to fail if offsets are invalid, or if the requested
 * 		data is in non-linear parts of the *skb*. On failure the
 * 		program can just bail out, or in the case of a non-linear
 * 		buffer, use a helper to make the data available. The
 * 		**bpf_skb_load_bytes**\ () helper is a first solution to access
 * 		the data. Another one consists in using **bpf_skb_pull_data**
 * 		to pull in once the non-linear parts, then retesting and
 * 		eventually access the data.
 *
 * 		At the same time, this also makes sure the *skb* is uncloned,
 * 		which is a necessary condition for direct write. As this needs
 * 		to be an invariant for the write part only, the verifier
 * 		detects writes and adds a prologue that is calling
 * 		**bpf_skb_pull_data()** to effectively unclone the *skb* from
 * 		the very beginning in case it is indeed cloned.
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * s64 bpf_csum_update(struct sk_buff *skb, __wsum csum)
 * 	Description
 * 		Add the checksum *csum* into *skb*\ **->csum** in case the
 * 		driver has supplied a checksum for the entire packet into that
 * 		field. Return an error otherwise. This helper is intended to be
 * 		used in combination with **bpf_csum_diff**\ (), in particular
 * 		when the checksum needs to be updated after data has been
 * 		written into the packet through direct packet access.
 * 	Return
 * 		The checksum on success, or a negative error code in case of
 * 		failure.
 *
 * void bpf_set_hash_invalid(struct sk_buff *skb)
 * 	Description
 * 		Invalidate the current *skb*\ **->hash**. It can be used after
 * 		mangling on headers through direct packet access, in order to
 * 		indicate that the hash is outdated and to trigger a
 * 		recalculation the next time the kernel tries to access this
 * 		hash or when the **bpf_get_hash_recalc**\ () helper is called.
 *
 * int bpf_get_numa_node_id(void)
 * 	Description
 * 		Return the id of the current NUMA node. The primary use case
 * 		for this helper is the selection of sockets for the local NUMA
 * 		node, when the program is attached to sockets using the
 * 		**SO_ATTACH_REUSEPORT_EBPF** option (see also **socket(7)**),
 * 		but the helper is also available to other eBPF program types,
 * 		similarly to **bpf_get_smp_processor_id**\ ().
 * 	Return
 * 		The id of current NUMA node.
 *
 * int bpf_skb_change_head(struct sk_buff *skb, u32 len, u64 flags)
 * 	Description
 * 		Grows headroom of packet associated to *skb* and adjusts the
 * 		offset of the MAC header accordingly, adding *len* bytes of
 * 		space. It automatically extends and reallocates memory as
 * 		required.
 *
 * 		This helper can be used on a layer 3 *skb* to push a MAC header
 * 		for redirection into a layer 2 device.
 *
 * 		All values for *flags* are reserved for future usage, and must
 * 		be left at zero.
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_xdp_adjust_head(struct xdp_buff *xdp_md, int delta)
 * 	Description
 * 		Adjust (move) *xdp_md*\ **->data** by *delta* bytes. Note that
 * 		it is possible to use a negative value for *delta*. This helper
 * 		can be used to prepare the packet for pushing or popping
 * 		headers.
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_probe_read_str(void *dst, int size, const void *unsafe_ptr)
 * 	Description
 * 		Copy a NUL terminated string from an unsafe address
 * 		*unsafe_ptr* to *dst*. The *size* should include the
 * 		terminating NUL byte. In case the string length is smaller than
 * 		*size*, the target is not padded with further NUL bytes. If the
 * 		string length is larger than *size*, just *size*-1 bytes are
 * 		copied and the last byte is set to NUL.
 *
 * 		On success, the length of the copied string is returned. This
 * 		makes this helper useful in tracing programs for reading
 * 		strings, and more importantly to get its length at runtime. See
 * 		the following snippet:
 *
 * 		::
 *
 * 			SEC("kprobe/sys_open")
 * 			void bpf_sys_open(struct pt_regs *ctx)
 * 			{
 * 			        char buf[PATHLEN]; // PATHLEN is defined to 256
 * 			        int res = bpf_probe_read_str(buf, sizeof(buf),
 * 				                             ctx->di);
 *
 * 				// Consume buf, for example push it to
 * 				// userspace via bpf_perf_event_output(); we
 * 				// can use res (the string length) as event
 * 				// size, after checking its boundaries.
 * 			}
 *
 * 		In comparison, using **bpf_probe_read()** helper here instead
 * 		to read the string would require to estimate the length at
 * 		compile time, and would often result in copying more memory
 * 		than necessary.
 *
 * 		Another useful use case is when parsing individual process
 * 		arguments or individual environment variables navigating
 * 		*current*\ **->mm->arg_start** and *current*\
 * 		**->mm->env_start**: using this helper and the return value,
 * 		one can quickly iterate at the right offset of the memory area.
 * 	Return
 * 		On success, the strictly positive length of the string,
 * 		including the trailing NUL character. On error, a negative
 * 		value.
 *
 * u64 bpf_get_socket_cookie(struct sk_buff *skb)
 * 	Description
 * 		If the **struct sk_buff** pointed by *skb* has a known socket,
 * 		retrieve the cookie (generated by the kernel) of this socket.
 * 		If no cookie has been set yet, generate a new cookie. Once
 * 		generated, the socket cookie remains stable for the life of the
 * 		socket. This helper can be useful for monitoring per socket
 * 		networking traffic statistics as it provides a unique socket
 * 		identifier per namespace.
 * 	Return
 * 		A 8-byte long non-decreasing number on success, or 0 if the
 * 		socket field is missing inside *skb*.
 *
 * u64 bpf_get_socket_cookie(struct bpf_sock_addr *ctx)
 * 	Description
 * 		Equivalent to bpf_get_socket_cookie() helper that accepts
 * 		*skb*, but gets socket from **struct bpf_sock_addr** contex.
 * 	Return
 * 		A 8-byte long non-decreasing number.
 *
 * u64 bpf_get_socket_cookie(struct bpf_sock_ops *ctx)
 * 	Description
 * 		Equivalent to bpf_get_socket_cookie() helper that accepts
 * 		*skb*, but gets socket from **struct bpf_sock_ops** contex.
 * 	Return
 * 		A 8-byte long non-decreasing number.
 *
 * u32 bpf_get_socket_uid(struct sk_buff *skb)
 * 	Return
 * 		The owner UID of the socket associated to *skb*. If the socket
 * 		is **NULL**, or if it is not a full socket (i.e. if it is a
 * 		time-wait or a request socket instead), **overflowuid** value
 * 		is returned (note that **overflowuid** might also be the actual
 * 		UID value for the socket).
 *
 * u32 bpf_set_hash(struct sk_buff *skb, u32 hash)
 * 	Description
 * 		Set the full hash for *skb* (set the field *skb*\ **->hash**)
 * 		to value *hash*.
 * 	Return
 * 		0
 *
 * int bpf_setsockopt(struct bpf_sock_ops *bpf_socket, int level, int optname, char *optval, int optlen)
 * 	Description
 * 		Emulate a call to **setsockopt()** on the socket associated to
 * 		*bpf_socket*, which must be a full socket. The *level* at
 * 		which the option resides and the name *optname* of the option
 * 		must be specified, see **setsockopt(2)** for more information.
 * 		The option value of length *optlen* is pointed by *optval*.
 *
 * 		This helper actually implements a subset of **setsockopt()**.
 * 		It supports the following *level*\ s:
 *
 * 		* **SOL_SOCKET**, which supports the following *optname*\ s:
 * 		  **SO_RCVBUF**, **SO_SNDBUF**, **SO_MAX_PACING_RATE**,
 * 		  **SO_PRIORITY**, **SO_RCVLOWAT**, **SO_MARK**.
 * 		* **IPPROTO_TCP**, which supports the following *optname*\ s:
 * 		  **TCP_CONGESTION**, **TCP_BPF_IW**,
 * 		  **TCP_BPF_SNDCWND_CLAMP**.
 * 		* **IPPROTO_IP**, which supports *optname* **IP_TOS**.
 * 		* **IPPROTO_IPV6**, which supports *optname* **IPV6_TCLASS**.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_skb_adjust_room(struct sk_buff *skb, u32 len_diff, u32 mode, u64 flags)
 * 	Description
 * 		Grow or shrink the room for data in the packet associated to
 * 		*skb* by *len_diff*, and according to the selected *mode*.
 *
 * 		There is a single supported mode at this time:
 *
 * 		* **BPF_ADJ_ROOM_NET**: Adjust room at the network layer
 * 		  (room space is added or removed below the layer 3 header).
 *
 * 		All values for *flags* are reserved for future usage, and must
 * 		be left at zero.
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_redirect_map(struct bpf_map *map, u32 key, u64 flags)
 * 	Description
 * 		Redirect the packet to the endpoint referenced by *map* at
 * 		index *key*. Depending on its type, this *map* can contain
 * 		references to net devices (for forwarding packets through other
 * 		ports), or to CPUs (for redirecting XDP frames to another CPU;
 * 		but this is only implemented for native XDP (with driver
 * 		support) as of this writing).
 *
 * 		All values for *flags* are reserved for future usage, and must
 * 		be left at zero.
 *
 * 		When used to redirect packets to net devices, this helper
 * 		provides a high performance increase over **bpf_redirect**\ ().
 * 		This is due to various implementation details of the underlying
 * 		mechanisms, one of which is the fact that **bpf_redirect_map**\
 * 		() tries to send packet as a "bulk" to the device.
 * 	Return
 * 		**XDP_REDIRECT** on success, or **XDP_ABORTED** on error.
 *
 * int bpf_sk_redirect_map(struct bpf_map *map, u32 key, u64 flags)
 * 	Description
 * 		Redirect the packet to the socket referenced by *map* (of type
 * 		**BPF_MAP_TYPE_SOCKMAP**) at index *key*. Both ingress and
 * 		egress interfaces can be used for redirection. The
 * 		**BPF_F_INGRESS** value in *flags* is used to make the
 * 		distinction (ingress path is selected if the flag is present,
 * 		egress path otherwise). This is the only flag supported for now.
 * 	Return
 * 		**SK_PASS** on success, or **SK_DROP** on error.
 *
 * int bpf_sock_map_update(struct bpf_sock_ops *skops, struct bpf_map *map, void *key, u64 flags)
 * 	Description
 * 		Add an entry to, or update a *map* referencing sockets. The
 * 		*skops* is used as a new value for the entry associated to
 * 		*key*. *flags* is one of:
 *
 * 		**BPF_NOEXIST**
 * 			The entry for *key* must not exist in the map.
 * 		**BPF_EXIST**
 * 			The entry for *key* must already exist in the map.
 * 		**BPF_ANY**
 * 			No condition on the existence of the entry for *key*.
 *
 * 		If the *map* has eBPF programs (parser and verdict), those will
 * 		be inherited by the socket being added. If the socket is
 * 		already attached to eBPF programs, this results in an error.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_xdp_adjust_meta(struct xdp_buff *xdp_md, int delta)
 * 	Description
 * 		Adjust the address pointed by *xdp_md*\ **->data_meta** by
 * 		*delta* (which can be positive or negative). Note that this
 * 		operation modifies the address stored in *xdp_md*\ **->data**,
 * 		so the latter must be loaded only after the helper has been
 * 		called.
 *
 * 		The use of *xdp_md*\ **->data_meta** is optional and programs
 * 		are not required to use it. The rationale is that when the
 * 		packet is processed with XDP (e.g. as DoS filter), it is
 * 		possible to push further meta data along with it before passing
 * 		to the stack, and to give the guarantee that an ingress eBPF
 * 		program attached as a TC classifier on the same device can pick
 * 		this up for further post-processing. Since TC works with socket
 * 		buffers, it remains possible to set from XDP the **mark** or
 * 		**priority** pointers, or other pointers for the socket buffer.
 * 		Having this scratch space generic and programmable allows for
 * 		more flexibility as the user is free to store whatever meta
 * 		data they need.
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_perf_event_read_value(struct bpf_map *map, u64 flags, struct bpf_perf_event_value *buf, u32 buf_size)
 * 	Description
 * 		Read the value of a perf event counter, and store it into *buf*
 * 		of size *buf_size*. This helper relies on a *map* of type
 * 		**BPF_MAP_TYPE_PERF_EVENT_ARRAY**. The nature of the perf event
 * 		counter is selected when *map* is updated with perf event file
 * 		descriptors. The *map* is an array whose size is the number of
 * 		available CPUs, and each cell contains a value relative to one
 * 		CPU. The value to retrieve is indicated by *flags*, that
 * 		contains the index of the CPU to look up, masked with
 * 		**BPF_F_INDEX_MASK**. Alternatively, *flags* can be set to
 * 		**BPF_F_CURRENT_CPU** to indicate that the value for the
 * 		current CPU should be retrieved.
 *
 * 		This helper behaves in a way close to
 * 		**bpf_perf_event_read**\ () helper, save that instead of
 * 		just returning the value observed, it fills the *buf*
 * 		structure. This allows for additional data to be retrieved: in
 * 		particular, the enabled and running times (in *buf*\
 * 		**->enabled** and *buf*\ **->running**, respectively) are
 * 		copied. In general, **bpf_perf_event_read_value**\ () is
 * 		recommended over **bpf_perf_event_read**\ (), which has some
 * 		ABI issues and provides fewer functionalities.
 *
 * 		These values are interesting, because hardware PMU (Performance
 * 		Monitoring Unit) counters are limited resources. When there are
 * 		more PMU based perf events opened than available counters,
 * 		kernel will multiplex these events so each event gets certain
 * 		percentage (but not all) of the PMU time. In case that
 * 		multiplexing happens, the number of samples or counter value
 * 		will not reflect the case compared to when no multiplexing
 * 		occurs. This makes comparison between different runs difficult.
 * 		Typically, the counter value should be normalized before
 * 		comparing to other experiments. The usual normalization is done
 * 		as follows.
 *
 * 		::
 *
 * 			normalized_counter = counter * t_enabled / t_running
 *
 * 		Where t_enabled is the time enabled for event and t_running is
 * 		the time running for event since last normalization. The
 * 		enabled and running times are accumulated since the perf event
 * 		open. To achieve scaling factor between two invocations of an
 * 		eBPF program, users can can use CPU id as the key (which is
 * 		typical for perf array usage model) to remember the previous
 * 		value and do the calculation inside the eBPF program.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_perf_prog_read_value(struct bpf_perf_event_data *ctx, struct bpf_perf_event_value *buf, u32 buf_size)
 * 	Description
 * 		For en eBPF program attached to a perf event, retrieve the
 * 		value of the event counter associated to *ctx* and store it in
 * 		the structure pointed by *buf* and of size *buf_size*. Enabled
 * 		and running times are also stored in the structure (see
 * 		description of helper **bpf_perf_event_read_value**\ () for
 * 		more details).
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_getsockopt(struct bpf_sock_ops *bpf_socket, int level, int optname, char *optval, int optlen)
 * 	Description
 * 		Emulate a call to **getsockopt()** on the socket associated to
 * 		*bpf_socket*, which must be a full socket. The *level* at
 * 		which the option resides and the name *optname* of the option
 * 		must be specified, see **getsockopt(2)** for more information.
 * 		The retrieved value is stored in the structure pointed by
 * 		*opval* and of length *optlen*.
 *
 * 		This helper actually implements a subset of **getsockopt()**.
 * 		It supports the following *level*\ s:
 *
 * 		* **IPPROTO_TCP**, which supports *optname*
 * 		  **TCP_CONGESTION**.
 * 		* **IPPROTO_IP**, which supports *optname* **IP_TOS**.
 * 		* **IPPROTO_IPV6**, which supports *optname* **IPV6_TCLASS**.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_override_return(struct pt_reg *regs, u64 rc)
 * 	Description
 * 		Used for error injection, this helper uses kprobes to override
 * 		the return value of the probed function, and to set it to *rc*.
 * 		The first argument is the context *regs* on which the kprobe
 * 		works.
 *
 * 		This helper works by setting setting the PC (program counter)
 * 		to an override function which is run in place of the original
 * 		probed function. This means the probed function is not run at
 * 		all. The replacement function just returns with the required
 * 		value.
 *
 * 		This helper has security implications, and thus is subject to
 * 		restrictions. It is only available if the kernel was compiled
 * 		with the **CONFIG_BPF_KPROBE_OVERRIDE** configuration
 * 		option, and in this case it only works on functions tagged with
 * 		**ALLOW_ERROR_INJECTION** in the kernel code.
 *
 * 		Also, the helper is only available for the architectures having
 * 		the CONFIG_FUNCTION_ERROR_INJECTION option. As of this writing,
 * 		x86 architecture is the only one to support this feature.
 * 	Return
 * 		0
 *
 * int bpf_sock_ops_cb_flags_set(struct bpf_sock_ops *bpf_sock, int argval)
 * 	Description
 * 		Attempt to set the value of the **bpf_sock_ops_cb_flags** field
 * 		for the full TCP socket associated to *bpf_sock_ops* to
 * 		*argval*.
 *
 * 		The primary use of this field is to determine if there should
 * 		be calls to eBPF programs of type
 * 		**BPF_PROG_TYPE_SOCK_OPS** at various points in the TCP
 * 		code. A program of the same type can change its value, per
 * 		connection and as necessary, when the connection is
 * 		established. This field is directly accessible for reading, but
 * 		this helper must be used for updates in order to return an
 * 		error if an eBPF program tries to set a callback that is not
 * 		supported in the current kernel.
 *
 * 		The supported callback values that *argval* can combine are:
 *
 * 		* **BPF_SOCK_OPS_RTO_CB_FLAG** (retransmission time out)
 * 		* **BPF_SOCK_OPS_RETRANS_CB_FLAG** (retransmission)
 * 		* **BPF_SOCK_OPS_STATE_CB_FLAG** (TCP state change)
 *
 * 		Here are some examples of where one could call such eBPF
 * 		program:
 *
 * 		* When RTO fires.
 * 		* When a packet is retransmitted.
 * 		* When the connection terminates.
 * 		* When a packet is sent.
 * 		* When a packet is received.
 * 	Return
 * 		Code **-EINVAL** if the socket is not a full TCP socket;
 * 		otherwise, a positive number containing the bits that could not
 * 		be set is returned (which comes down to 0 if all bits were set
 * 		as required).
 *
 * int bpf_msg_redirect_map(struct sk_msg_buff *msg, struct bpf_map *map, u32 key, u64 flags)
 * 	Description
 * 		This helper is used in programs implementing policies at the
 * 		socket level. If the message *msg* is allowed to pass (i.e. if
 * 		the verdict eBPF program returns **SK_PASS**), redirect it to
 * 		the socket referenced by *map* (of type
 * 		**BPF_MAP_TYPE_SOCKMAP**) at index *key*. Both ingress and
 * 		egress interfaces can be used for redirection. The
 * 		**BPF_F_INGRESS** value in *flags* is used to make the
 * 		distinction (ingress path is selected if the flag is present,
 * 		egress path otherwise). This is the only flag supported for now.
 * 	Return
 * 		**SK_PASS** on success, or **SK_DROP** on error.
 *
 * int bpf_msg_apply_bytes(struct sk_msg_buff *msg, u32 bytes)
 * 	Description
 * 		For socket policies, apply the verdict of the eBPF program to
 * 		the next *bytes* (number of bytes) of message *msg*.
 *
 * 		For example, this helper can be used in the following cases:
 *
 * 		* A single **sendmsg**\ () or **sendfile**\ () system call
 * 		  contains multiple logical messages that the eBPF program is
 * 		  supposed to read and for which it should apply a verdict.
 * 		* An eBPF program only cares to read the first *bytes* of a
 * 		  *msg*. If the message has a large payload, then setting up
 * 		  and calling the eBPF program repeatedly for all bytes, even
 * 		  though the verdict is already known, would create unnecessary
 * 		  overhead.
 *
 * 		When called from within an eBPF program, the helper sets a
 * 		counter internal to the BPF infrastructure, that is used to
 * 		apply the last verdict to the next *bytes*. If *bytes* is
 * 		smaller than the current data being processed from a
 * 		**sendmsg**\ () or **sendfile**\ () system call, the first
 * 		*bytes* will be sent and the eBPF program will be re-run with
 * 		the pointer for start of data pointing to byte number *bytes*
 * 		**+ 1**. If *bytes* is larger than the current data being
 * 		processed, then the eBPF verdict will be applied to multiple
 * 		**sendmsg**\ () or **sendfile**\ () calls until *bytes* are
 * 		consumed.
 *
 * 		Note that if a socket closes with the internal counter holding
 * 		a non-zero value, this is not a problem because data is not
 * 		being buffered for *bytes* and is sent as it is received.
 * 	Return
 * 		0
 *
 * int bpf_msg_cork_bytes(struct sk_msg_buff *msg, u32 bytes)
 * 	Description
 * 		For socket policies, prevent the execution of the verdict eBPF
 * 		program for message *msg* until *bytes* (byte number) have been
 * 		accumulated.
 *
 * 		This can be used when one needs a specific number of bytes
 * 		before a verdict can be assigned, even if the data spans
 * 		multiple **sendmsg**\ () or **sendfile**\ () calls. The extreme
 * 		case would be a user calling **sendmsg**\ () repeatedly with
 * 		1-byte long message segments. Obviously, this is bad for
 * 		performance, but it is still valid. If the eBPF program needs
 * 		*bytes* bytes to validate a header, this helper can be used to
 * 		prevent the eBPF program to be called again until *bytes* have
 * 		been accumulated.
 * 	Return
 * 		0
 *
 * int bpf_msg_pull_data(struct sk_msg_buff *msg, u32 start, u32 end, u64 flags)
 * 	Description
 * 		For socket policies, pull in non-linear data from user space
 * 		for *msg* and set pointers *msg*\ **->data** and *msg*\
 * 		**->data_end** to *start* and *end* bytes offsets into *msg*,
 * 		respectively.
 *
 * 		If a program of type **BPF_PROG_TYPE_SK_MSG** is run on a
 * 		*msg* it can only parse data that the (**data**, **data_end**)
 * 		pointers have already consumed. For **sendmsg**\ () hooks this
 * 		is likely the first scatterlist element. But for calls relying
 * 		on the **sendpage** handler (e.g. **sendfile**\ ()) this will
 * 		be the range (**0**, **0**) because the data is shared with
 * 		user space and by default the objective is to avoid allowing
 * 		user space to modify data while (or after) eBPF verdict is
 * 		being decided. This helper can be used to pull in data and to
 * 		set the start and end pointer to given values. Data will be
 * 		copied if necessary (i.e. if data was not linear and if start
 * 		and end pointers do not point to the same chunk).
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 *
 * 		All values for *flags* are reserved for future usage, and must
 * 		be left at zero.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_bind(struct bpf_sock_addr *ctx, struct sockaddr *addr, int addr_len)
 * 	Description
 * 		Bind the socket associated to *ctx* to the address pointed by
 * 		*addr*, of length *addr_len*. This allows for making outgoing
 * 		connection from the desired IP address, which can be useful for
 * 		example when all processes inside a cgroup should use one
 * 		single IP address on a host that has multiple IP configured.
 *
 * 		This helper works for IPv4 and IPv6, TCP and UDP sockets. The
 * 		domain (*addr*\ **->sa_family**) must be **AF_INET** (or
 * 		**AF_INET6**). Looking for a free port to bind to can be
 * 		expensive, therefore binding to port is not permitted by the
 * 		helper: *addr*\ **->sin_port** (or **sin6_port**, respectively)
 * 		must be set to zero.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_xdp_adjust_tail(struct xdp_buff *xdp_md, int delta)
 * 	Description
 * 		Adjust (move) *xdp_md*\ **->data_end** by *delta* bytes. It is
 * 		only possible to shrink the packet as of this writing,
 * 		therefore *delta* must be a negative integer.
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_skb_get_xfrm_state(struct sk_buff *skb, u32 index, struct bpf_xfrm_state *xfrm_state, u32 size, u64 flags)
 * 	Description
 * 		Retrieve the XFRM state (IP transform framework, see also
 * 		**ip-xfrm(8)**) at *index* in XFRM "security path" for *skb*.
 *
 * 		The retrieved value is stored in the **struct bpf_xfrm_state**
 * 		pointed by *xfrm_state* and of length *size*.
 *
 * 		All values for *flags* are reserved for future usage, and must
 * 		be left at zero.
 *
 * 		This helper is available only if the kernel was compiled with
 * 		**CONFIG_XFRM** configuration option.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_get_stack(struct pt_regs *regs, void *buf, u32 size, u64 flags)
 * 	Description
 * 		Return a user or a kernel stack in bpf program provided buffer.
 * 		To achieve this, the helper needs *ctx*, which is a pointer
 * 		to the context on which the tracing program is executed.
 * 		To store the stacktrace, the bpf program provides *buf* with
 * 		a nonnegative *size*.
 *
 * 		The last argument, *flags*, holds the number of stack frames to
 * 		skip (from 0 to 255), masked with
 * 		**BPF_F_SKIP_FIELD_MASK**. The next bits can be used to set
 * 		the following flags:
 *
 * 		**BPF_F_USER_STACK**
 * 			Collect a user space stack instead of a kernel stack.
 * 		**BPF_F_USER_BUILD_ID**
 * 			Collect buildid+offset instead of ips for user stack,
 * 			only valid if **BPF_F_USER_STACK** is also specified.
 *
 * 		**bpf_get_stack**\ () can collect up to
 * 		**PERF_MAX_STACK_DEPTH** both kernel and user frames, subject
 * 		to sufficient large buffer size. Note that
 * 		this limit can be controlled with the **sysctl** program, and
 * 		that it should be manually increased in order to profile long
 * 		user stacks (such as stacks for Java programs). To do so, use:
 *
 * 		::
 *
 * 			# sysctl kernel.perf_event_max_stack=<new value>
 * 	Return
 * 		A non-negative value equal to or less than *size* on success,
 * 		or a negative error in case of failure.
 *
 * int bpf_skb_load_bytes_relative(const struct sk_buff *skb, u32 offset, void *to, u32 len, u32 start_header)
 * 	Description
 * 		This helper is similar to **bpf_skb_load_bytes**\ () in that
 * 		it provides an easy way to load *len* bytes from *offset*
 * 		from the packet associated to *skb*, into the buffer pointed
 * 		by *to*. The difference to **bpf_skb_load_bytes**\ () is that
 * 		a fifth argument *start_header* exists in order to select a
 * 		base offset to start from. *start_header* can be one of:
 *
 * 		**BPF_HDR_START_MAC**
 * 			Base offset to load data from is *skb*'s mac header.
 * 		**BPF_HDR_START_NET**
 * 			Base offset to load data from is *skb*'s network header.
 *
 * 		In general, "direct packet access" is the preferred method to
 * 		access packet data, however, this helper is in particular useful
 * 		in socket filters where *skb*\ **->data** does not always point
 * 		to the start of the mac header and where "direct packet access"
 * 		is not available.
 * 	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_fib_lookup(void *ctx, struct bpf_fib_lookup *params, int plen, u32 flags)
 *	Description
 *		Do FIB lookup in kernel tables using parameters in *params*.
 *		If lookup is successful and result shows packet is to be
 *		forwarded, the neighbor tables are searched for the nexthop.
 *		If successful (ie., FIB lookup shows forwarding and nexthop
 *		is resolved), the nexthop address is returned in ipv4_dst
 *		or ipv6_dst based on family, smac is set to mac address of
 *		egress device, dmac is set to nexthop mac address, rt_metric
 *		is set to metric from route (IPv4/IPv6 only), and ifindex
 *		is set to the device index of the nexthop from the FIB lookup.
 *
 *             *plen* argument is the size of the passed in struct.
 *             *flags* argument can be a combination of one or more of the
 *             following values:
 *
 *		**BPF_FIB_LOOKUP_DIRECT**
 *			Do a direct table lookup vs full lookup using FIB
 *			rules.
 *		**BPF_FIB_LOOKUP_OUTPUT**
 *			Perform lookup from an egress perspective (default is
 *			ingress).
 *
 *             *ctx* is either **struct xdp_md** for XDP programs or
 *             **struct sk_buff** tc cls_act programs.
 *     Return
 *		* < 0 if any input argument is invalid
 *		*   0 on success (packet is forwarded, nexthop neighbor exists)
 *		* > 0 one of **BPF_FIB_LKUP_RET_** codes explaining why the
 *		  packet is not forwarded or needs assist from full stack
 *
 * int bpf_sock_hash_update(struct bpf_sock_ops_kern *skops, struct bpf_map *map, void *key, u64 flags)
 *	Description
 *		Add an entry to, or update a sockhash *map* referencing sockets.
 *		The *skops* is used as a new value for the entry associated to
 *		*key*. *flags* is one of:
 *
 *		**BPF_NOEXIST**
 *			The entry for *key* must not exist in the map.
 *		**BPF_EXIST**
 *			The entry for *key* must already exist in the map.
 *		**BPF_ANY**
 *			No condition on the existence of the entry for *key*.
 *
 *		If the *map* has eBPF programs (parser and verdict), those will
 *		be inherited by the socket being added. If the socket is
 *		already attached to eBPF programs, this results in an error.
 *	Return
 *		0 on success, or a negative error in case of failure.
 *
 * int bpf_msg_redirect_hash(struct sk_msg_buff *msg, struct bpf_map *map, void *key, u64 flags)
 *	Description
 *		This helper is used in programs implementing policies at the
 *		socket level. If the message *msg* is allowed to pass (i.e. if
 *		the verdict eBPF program returns **SK_PASS**), redirect it to
 *		the socket referenced by *map* (of type
 *		**BPF_MAP_TYPE_SOCKHASH**) using hash *key*. Both ingress and
 *		egress interfaces can be used for redirection. The
 *		**BPF_F_INGRESS** value in *flags* is used to make the
 *		distinction (ingress path is selected if the flag is present,
 *		egress path otherwise). This is the only flag supported for now.
 *	Return
 *		**SK_PASS** on success, or **SK_DROP** on error.
 *
 * int bpf_sk_redirect_hash(struct sk_buff *skb, struct bpf_map *map, void *key, u64 flags)
 *	Description
 *		This helper is used in programs implementing policies at the
 *		skb socket level. If the sk_buff *skb* is allowed to pass (i.e.
 *		if the verdeict eBPF program returns **SK_PASS**), redirect it
 *		to the socket referenced by *map* (of type
 *		**BPF_MAP_TYPE_SOCKHASH**) using hash *key*. Both ingress and
 *		egress interfaces can be used for redirection. The
 *		**BPF_F_INGRESS** value in *flags* is used to make the
 *		distinction (ingress path is selected if the flag is present,
 *		egress otherwise). This is the only flag supported for now.
 *	Return
 *		**SK_PASS** on success, or **SK_DROP** on error.
 *
 * int bpf_lwt_push_encap(struct sk_buff *skb, u32 type, void *hdr, u32 len)
 *	Description
 *		Encapsulate the packet associated to *skb* within a Layer 3
 *		protocol header. This header is provided in the buffer at
 *		address *hdr*, with *len* its size in bytes. *type* indicates
 *		the protocol of the header and can be one of:
 *
 *		**BPF_LWT_ENCAP_SEG6**
 *			IPv6 encapsulation with Segment Routing Header
 *			(**struct ipv6_sr_hdr**). *hdr* only contains the SRH,
 *			the IPv6 header is computed by the kernel.
 *		**BPF_LWT_ENCAP_SEG6_INLINE**
 *			Only works if *skb* contains an IPv6 packet. Insert a
 *			Segment Routing Header (**struct ipv6_sr_hdr**) inside
 *			the IPv6 header.
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 *	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_lwt_seg6_store_bytes(struct sk_buff *skb, u32 offset, const void *from, u32 len)
 *	Description
 *		Store *len* bytes from address *from* into the packet
 *		associated to *skb*, at *offset*. Only the flags, tag and TLVs
 *		inside the outermost IPv6 Segment Routing Header can be
 *		modified through this helper.
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 *	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_lwt_seg6_adjust_srh(struct sk_buff *skb, u32 offset, s32 delta)
 *	Description
 *		Adjust the size allocated to TLVs in the outermost IPv6
 *		Segment Routing Header contained in the packet associated to
 *		*skb*, at position *offset* by *delta* bytes. Only offsets
 *		after the segments are accepted. *delta* can be as well
 *		positive (growing) as negative (shrinking).
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 *	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_lwt_seg6_action(struct sk_buff *skb, u32 action, void *param, u32 param_len)
 *	Description
 *		Apply an IPv6 Segment Routing action of type *action* to the
 *		packet associated to *skb*. Each action takes a parameter
 *		contained at address *param*, and of length *param_len* bytes.
 *		*action* can be one of:
 *
 *		**SEG6_LOCAL_ACTION_END_X**
 *			End.X action: Endpoint with Layer-3 cross-connect.
 *			Type of *param*: **struct in6_addr**.
 *		**SEG6_LOCAL_ACTION_END_T**
 *			End.T action: Endpoint with specific IPv6 table lookup.
 *			Type of *param*: **int**.
 *		**SEG6_LOCAL_ACTION_END_B6**
 *			End.B6 action: Endpoint bound to an SRv6 policy.
 *			Type of param: **struct ipv6_sr_hdr**.
 *		**SEG6_LOCAL_ACTION_END_B6_ENCAP**
 *			End.B6.Encap action: Endpoint bound to an SRv6
 *			encapsulation policy.
 *			Type of param: **struct ipv6_sr_hdr**.
 *
 * 		A call to this helper is susceptible to change the underlaying
 * 		packet buffer. Therefore, at load time, all checks on pointers
 * 		previously done by the verifier are invalidated and must be
 * 		performed again, if the helper is used in combination with
 * 		direct packet access.
 *	Return
 * 		0 on success, or a negative error in case of failure.
 *
 * int bpf_rc_keydown(void *ctx, u32 protocol, u64 scancode, u32 toggle)
 *	Description
 *		This helper is used in programs implementing IR decoding, to
 *		report a successfully decoded key press with *scancode*,
 *		*toggle* value in the given *protocol*. The scancode will be
 *		translated to a keycode using the rc keymap, and reported as
 *		an input key down event. After a period a key up event is
 *		generated. This period can be extended by calling either
 *		**bpf_rc_keydown** () again with the same values, or calling
 *		**bpf_rc_repeat** ().
 *
 *		Some protocols include a toggle bit, in case the button	was
 *		released and pressed again between consecutive scancodes.
 *
 *		The *ctx* should point to the lirc sample as passed into
 *		the program.
 *
 *		The *protocol* is the decoded protocol number (see
 *		**enum rc_proto** for some predefined values).
 *
 *		This helper is only available is the kernel was compiled with
 *		the **CONFIG_BPF_LIRC_MODE2** configuration option set to
 *		"**y**".
 *	Return
 *		0
 *
 * int bpf_rc_repeat(void *ctx)
 *	Description
 *		This helper is used in programs implementing IR decoding, to
 *		report a successfully decoded repeat key message. This delays
 *		the generation of a key up event for previously generated
 *		key down event.
 *
 *		Some IR protocols like NEC have a special IR message for
 *		repeating last button, for when a button is held down.
 *
 *		The *ctx* should point to the lirc sample as passed into
 *		the program.
 *
 *		This helper is only available is the kernel was compiled with
 *		the **CONFIG_BPF_LIRC_MODE2** configuration option set to
 *		"**y**".
 *	Return
 *		0
 *
 * uint64_t bpf_skb_cgroup_id(struct sk_buff *skb)
 * 	Description
 * 		Return the cgroup v2 id of the socket associated with the *skb*.
 * 		This is roughly similar to the **bpf_get_cgroup_classid**\ ()
 * 		helper for cgroup v1 by providing a tag resp. identifier that
 * 		can be matched on or used for map lookups e.g. to implement
 * 		policy. The cgroup v2 id of a given path in the hierarchy is
 * 		exposed in user space through the f_handle API in order to get
 * 		to the same 64-bit id.
 *
 * 		This helper can be used on TC egress path, but not on ingress,
 * 		and is available only if the kernel was compiled with the
 * 		**CONFIG_SOCK_CGROUP_DATA** configuration option.
 * 	Return
 * 		The id is returned or 0 in case the id could not be retrieved.
 *
 * u64 bpf_skb_ancestor_cgroup_id(struct sk_buff *skb, int ancestor_level)
 *	Description
 *		Return id of cgroup v2 that is ancestor of cgroup associated
 *		with the *skb* at the *ancestor_level*.  The root cgroup is at
 *		*ancestor_level* zero and each step down the hierarchy
 *		increments the level. If *ancestor_level* == level of cgroup
 *		associated with *skb*, then return value will be same as that
 *		of **bpf_skb_cgroup_id**\ ().
 *
 *		The helper is useful to implement policies based on cgroups
 *		that are upper in hierarchy than immediate cgroup associated
 *		with *skb*.
 *
 *		The format of returned id and helper limitations are same as in
 *		**bpf_skb_cgroup_id**\ ().
 *	Return
 *		The id is returned or 0 in case the id could not be retrieved.
 *
 * u64 bpf_get_current_cgroup_id(void)
 * 	Return
 * 		A 64-bit integer containing the current cgroup id based
 * 		on the cgroup within which the current task is running.
 *
 * void* get_local_storage(void *map, u64 flags)
 *	Description
 *		Get the pointer to the local storage area.
 *		The type and the size of the local storage is defined
 *		by the *map* argument.
 *		The *flags* meaning is specific for each map type,
 *		and has to be 0 for cgroup local storage.
 *
 *		Depending on the bpf program type, a local storage area
 *		can be shared between multiple instances of the bpf program,
 *		running simultaneously.
 *
 *		A user should care about the synchronization by himself.
 *		For example, by using the BPF_STX_XADD instruction to alter
 *		the shared data.
 *	Return
 *		Pointer to the local storage area.
 *
 * int bpf_sk_select_reuseport(struct sk_reuseport_md *reuse, struct bpf_map *map, void *key, u64 flags)
 *	Description
 *		Select a SO_REUSEPORT sk from a	BPF_MAP_TYPE_REUSEPORT_ARRAY map
 *		It checks the selected sk is matching the incoming
 *		request in the skb.
 *	Return
 *		0 on success, or a negative error in case of failure.
 */
#define __BPF_FUNC_MAPPER(FN)		\
	FN(unspec),			\
	FN(map_lookup_elem),		\
	FN(map_update_elem),		\
	FN(map_delete_elem),		\
	FN(probe_read),			\
	FN(ktime_get_ns),		\
	FN(trace_printk),		\
	FN(get_prandom_u32),		\
	FN(get_smp_processor_id),	\
	FN(skb_store_bytes),		\
	FN(l3_csum_replace),		\
	FN(l4_csum_replace),		\
	FN(tail_call),			\
	FN(clone_redirect),		\
	FN(get_current_pid_tgid),	\
	FN(get_current_uid_gid),	\
	FN(get_current_comm),		\
	FN(get_cgroup_classid),		\
	FN(skb_vlan_push),		\
	FN(skb_vlan_pop),		\
	FN(skb_get_tunnel_key),		\
	FN(skb_set_tunnel_key),		\
	FN(perf_event_read),		\
	FN(redirect),			\
	FN(get_route_realm),		\
	FN(perf_event_output),		\
	FN(skb_load_bytes),		\
	FN(get_stackid),		\
	FN(csum_diff),			\
	FN(skb_get_tunnel_opt),		\
	FN(skb_set_tunnel_opt),		\
	FN(skb_change_proto),		\
	FN(skb_change_type),		\
	FN(skb_under_cgroup),		\
	FN(get_hash_recalc),		\
	FN(get_current_task),		\
	FN(probe_write_user),		\
	FN(current_task_under_cgroup),	\
	FN(skb_change_tail),		\
	FN(skb_pull_data),		\
	FN(csum_update),		\
	FN(set_hash_invalid),		\
	FN(get_numa_node_id),		\
	FN(skb_change_head),		\
	FN(xdp_adjust_head),		\
	FN(probe_read_str),		\
	FN(get_socket_cookie),		\
	FN(get_socket_uid),		\
	FN(set_hash),			\
	FN(setsockopt),			\
	FN(skb_adjust_room),		\
	FN(redirect_map),		\
	FN(sk_redirect_map),		\
	FN(sock_map_update),		\
	FN(xdp_adjust_meta),		\
	FN(perf_event_read_value),	\
	FN(perf_prog_read_value),	\
	FN(getsockopt),			\
	FN(override_return),		\
	FN(sock_ops_cb_flags_set),	\
	FN(msg_redirect_map),		\
	FN(msg_apply_bytes),		\
	FN(msg_cork_bytes),		\
	FN(msg_pull_data),		\
	FN(bind),			\
	FN(xdp_adjust_tail),		\
	FN(skb_get_xfrm_state),		\
	FN(get_stack),			\
	FN(skb_load_bytes_relative),	\
	FN(fib_lookup),			\
	FN(sock_hash_update),		\
	FN(msg_redirect_hash),		\
	FN(sk_redirect_hash),		\
	FN(lwt_push_encap),		\
	FN(lwt_seg6_store_bytes),	\
	FN(lwt_seg6_adjust_srh),	\
	FN(lwt_seg6_action),		\
	FN(rc_repeat),			\
	FN(rc_keydown),			\
	FN(skb_cgroup_id),		\
	FN(get_current_cgroup_id),	\
	FN(get_local_storage),		\
	FN(sk_select_reuseport),	\
	FN(skb_ancestor_cgroup_id),

/* integer value in 'imm' field of BPF_CALL instruction selects which helper
 * function eBPF program intends to call
 */
#define __BPF_ENUM_FN(x) BPF_FUNC_ ## x
enum bpf_func_id {
	__BPF_FUNC_MAPPER(__BPF_ENUM_FN)
	__BPF_FUNC_MAX_ID,
};
#undef __BPF_ENUM_FN

/* All flags used by eBPF helper functions, placed here. */

/* BPF_FUNC_skb_store_bytes flags. */
#define BPF_F_RECOMPUTE_CSUM		(1ULL << 0)
#define BPF_F_INVALIDATE_HASH		(1ULL << 1)

/* BPF_FUNC_l3_csum_replace and BPF_FUNC_l4_csum_replace flags.
 * First 4 bits are for passing the header field size.
 */
#define BPF_F_HDR_FIELD_MASK		0xfULL

/* BPF_FUNC_l4_csum_replace flags. */
#define BPF_F_PSEUDO_HDR		(1ULL << 4)
#define BPF_F_MARK_MANGLED_0		(1ULL << 5)
#define BPF_F_MARK_ENFORCE		(1ULL << 6)

/* BPF_FUNC_clone_redirect and BPF_FUNC_redirect flags. */
#define BPF_F_INGRESS			(1ULL << 0)

/* BPF_FUNC_skb_set_tunnel_key and BPF_FUNC_skb_get_tunnel_key flags. */
#define BPF_F_TUNINFO_IPV6		(1ULL << 0)

/* flags for both BPF_FUNC_get_stackid and BPF_FUNC_get_stack. */
#define BPF_F_SKIP_FIELD_MASK		0xffULL
#define BPF_F_USER_STACK		(1ULL << 8)
/* flags used by BPF_FUNC_get_stackid only. */
#define BPF_F_FAST_STACK_CMP		(1ULL << 9)
#define BPF_F_REUSE_STACKID		(1ULL << 10)
/* flags used by BPF_FUNC_get_stack only. */
#define BPF_F_USER_BUILD_ID		(1ULL << 11)

/* BPF_FUNC_skb_set_tunnel_key flags. */
#define BPF_F_ZERO_CSUM_TX		(1ULL << 1)
#define BPF_F_DONT_FRAGMENT		(1ULL << 2)
#define BPF_F_SEQ_NUMBER		(1ULL << 3)

/* BPF_FUNC_perf_event_output, BPF_FUNC_perf_event_read and
 * BPF_FUNC_perf_event_read_value flags.
 */
#define BPF_F_INDEX_MASK		0xffffffffULL
#define BPF_F_CURRENT_CPU		BPF_F_INDEX_MASK
/* BPF_FUNC_perf_event_output for sk_buff input context. */
#define BPF_F_CTXLEN_MASK		(0xfffffULL << 32)

/* Mode for BPF_FUNC_skb_adjust_room helper. */
enum bpf_adj_room_mode {
	BPF_ADJ_ROOM_NET,
};

/* Mode for BPF_FUNC_skb_load_bytes_relative helper. */
enum bpf_hdr_start_off {
	BPF_HDR_START_MAC,
	BPF_HDR_START_NET,
};

/* Encapsulation type for BPF_FUNC_lwt_push_encap helper. */
enum bpf_lwt_encap_mode {
	BPF_LWT_ENCAP_SEG6,
	BPF_LWT_ENCAP_SEG6_INLINE
};

/* user accessible mirror of in-kernel sk_buff.
 * new fields can only be added to the end of this structure
 */
struct __sk_buff {
	__u32 len;
	__u32 pkt_type;
	__u32 mark;
	__u32 queue_mapping;
	__u32 protocol;
	__u32 vlan_present;
	__u32 vlan_tci;
	__u32 vlan_proto;
	__u32 priority;
	__u32 ingress_ifindex;
	__u32 ifindex;
	__u32 tc_index;
	__u32 cb[5];
	__u32 hash;
	__u32 tc_classid;
	__u32 data;
	__u32 data_end;
	__u32 napi_id;

	/* Accessed by BPF_PROG_TYPE_sk_skb types from here to ... */
	__u32 family;
	__u32 remote_ip4;	/* Stored in network byte order */
	__u32 local_ip4;	/* Stored in network byte order */
	__u32 remote_ip6[4];	/* Stored in network byte order */
	__u32 local_ip6[4];	/* Stored in network byte order */
	__u32 remote_port;	/* Stored in network byte order */
	__u32 local_port;	/* stored in host byte order */
	/* ... here. */

	__u32 data_meta;
};

struct bpf_tunnel_key {
	__u32 tunnel_id;
	union {
		__u32 remote_ipv4;
		__u32 remote_ipv6[4];
	};
	__u8 tunnel_tos;
	__u8 tunnel_ttl;
	__u16 tunnel_ext;	/* Padding, future use. */
	__u32 tunnel_label;
};

/* user accessible mirror of in-kernel xfrm_state.
 * new fields can only be added to the end of this structure
 */
struct bpf_xfrm_state {
	__u32 reqid;
	__u32 spi;	/* Stored in network byte order */
	__u16 family;
	__u16 ext;	/* Padding, future use. */
	union {
		__u32 remote_ipv4;	/* Stored in network byte order */
		__u32 remote_ipv6[4];	/* Stored in network byte order */
	};
};

/* Generic BPF return codes which all BPF program types may support.
 * The values are binary compatible with their TC_ACT_* counter-part to
 * provide backwards compatibility with existing SCHED_CLS and SCHED_ACT
 * programs.
 *
 * XDP is handled seprately, see XDP_*.
 */
enum bpf_ret_code {
	BPF_OK = 0,
	/* 1 reserved */
	BPF_DROP = 2,
	/* 3-6 reserved */
	BPF_REDIRECT = 7,
	/* >127 are reserved for prog type specific return codes */
};

struct bpf_sock {
	__u32 bound_dev_if;
	__u32 family;
	__u32 type;
	__u32 protocol;
	__u32 mark;
	__u32 priority;
	__u32 src_ip4;		/* Allows 1,2,4-byte read.
				 * Stored in network byte order.
				 */
	__u32 src_ip6[4];	/* Allows 1,2,4-byte read.
				 * Stored in network byte order.
				 */
	__u32 src_port;		/* Allows 4-byte read.
				 * Stored in host byte order
				 */
};

#define XDP_PACKET_HEADROOM 256

/* User return codes for XDP prog type.
 * A valid XDP program must return one of these defined values. All other
 * return codes are reserved for future use. Unknown return codes will
 * result in packet drops and a warning via bpf_warn_invalid_xdp_action().
 */
enum xdp_action {
	XDP_ABORTED = 0,
	XDP_DROP,
	XDP_PASS,
	XDP_TX,
	XDP_REDIRECT,
};

/* user accessible metadata for XDP packet hook
 * new fields must be added to the end of this structure
 */
struct xdp_md {
	__u32 data;
	__u32 data_end;
	__u32 data_meta;
	/* Below access go through struct xdp_rxq_info */
	__u32 ingress_ifindex; /* rxq->dev->ifindex */
	__u32 rx_queue_index;  /* rxq->queue_index  */
};

enum sk_action {
	SK_DROP = 0,
	SK_PASS,
};

/* user accessible metadata for SK_MSG packet hook, new fields must
 * be added to the end of this structure
 */
struct sk_msg_md {
	void *data;
	void *data_end;

	__u32 family;
	__u32 remote_ip4;	/* Stored in network byte order */
	__u32 local_ip4;	/* Stored in network byte order */
	__u32 remote_ip6[4];	/* Stored in network byte order */
	__u32 local_ip6[4];	/* Stored in network byte order */
	__u32 remote_port;	/* Stored in network byte order */
	__u32 local_port;	/* stored in host byte order */
};

struct sk_reuseport_md {
	/*
	 * Start of directly accessible data. It begins from
	 * the tcp/udp header.
	 */
	void *data;
	void *data_end;		/* End of directly accessible data */
	/*
	 * Total length of packet (starting from the tcp/udp header).
	 * Note that the directly accessible bytes (data_end - data)
	 * could be less than this "len".  Those bytes could be
	 * indirectly read by a helper "bpf_skb_load_bytes()".
	 */
	__u32 len;
	/*
	 * Eth protocol in the mac header (network byte order). e.g.
	 * ETH_P_IP(0x0800) and ETH_P_IPV6(0x86DD)
	 */
	__u32 eth_protocol;
	__u32 ip_protocol;	/* IP protocol. e.g. IPPROTO_TCP, IPPROTO_UDP */
	__u32 bind_inany;	/* Is sock bound to an INANY address? */
	__u32 hash;		/* A hash of the packet 4 tuples */
};

#define BPF_TAG_SIZE	8

struct bpf_prog_info {
	__u32 type;
	__u32 id;
	__u8  tag[BPF_TAG_SIZE];
	__u32 jited_prog_len;
	__u32 xlated_prog_len;
	__aligned_u64 jited_prog_insns;
	__aligned_u64 xlated_prog_insns;
	__u64 load_time;	/* ns since boottime */
	__u32 created_by_uid;
	__u32 nr_map_ids;
	__aligned_u64 map_ids;
	char name[BPF_OBJ_NAME_LEN];
	__u32 ifindex;
	__u32 gpl_compatible:1;
	__u64 netns_dev;
	__u64 netns_ino;
	__u32 nr_jited_ksyms;
	__u32 nr_jited_func_lens;
	__aligned_u64 jited_ksyms;
	__aligned_u64 jited_func_lens;
} __attribute__((aligned(8)));

struct bpf_map_info {
	__u32 type;
	__u32 id;
	__u32 key_size;
	__u32 value_size;
	__u32 max_entries;
	__u32 map_flags;
	char  name[BPF_OBJ_NAME_LEN];
	__u32 ifindex;
	__u32 :32;
	__u64 netns_dev;
	__u64 netns_ino;
	__u32 btf_id;
	__u32 btf_key_type_id;
	__u32 btf_value_type_id;
} __attribute__((aligned(8)));

struct bpf_btf_info {
	__aligned_u64 btf;
	__u32 btf_size;
	__u32 id;
} __attribute__((aligned(8)));

/* User bpf_sock_addr struct to access socket fields and sockaddr struct passed
 * by user and intended to be used by socket (e.g. to bind to, depends on
 * attach attach type).
 */
struct bpf_sock_addr {
	__u32 user_family;	/* Allows 4-byte read, but no write. */
	__u32 user_ip4;		/* Allows 1,2,4-byte read and 4-byte write.
				 * Stored in network byte order.
				 */
	__u32 user_ip6[4];	/* Allows 1,2,4-byte read an 4-byte write.
				 * Stored in network byte order.
				 */
	__u32 user_port;	/* Allows 4-byte read and write.
				 * Stored in network byte order
				 */
	__u32 family;		/* Allows 4-byte read, but no write */
	__u32 type;		/* Allows 4-byte read, but no write */
	__u32 protocol;		/* Allows 4-byte read, but no write */
	__u32 msg_src_ip4;	/* Allows 1,2,4-byte read an 4-byte write.
				 * Stored in network byte order.
				 */
	__u32 msg_src_ip6[4];	/* Allows 1,2,4-byte read an 4-byte write.
				 * Stored in network byte order.
				 */
};

/* User bpf_sock_ops struct to access socket values and specify request ops
 * and their replies.
 * Some of this fields are in network (bigendian) byte order and may need
 * to be converted before use (bpf_ntohl() defined in samples/bpf/bpf_endian.h).
 * New fields can only be added at the end of this structure
 */
struct bpf_sock_ops {
	__u32 op;
	union {
		__u32 args[4];		/* Optionally passed to bpf program */
		__u32 reply;		/* Returned by bpf program	    */
		__u32 replylong[4];	/* Optionally returned by bpf prog  */
	};
	__u32 family;
	__u32 remote_ip4;	/* Stored in network byte order */
	__u32 local_ip4;	/* Stored in network byte order */
	__u32 remote_ip6[4];	/* Stored in network byte order */
	__u32 local_ip6[4];	/* Stored in network byte order */
	__u32 remote_port;	/* Stored in network byte order */
	__u32 local_port;	/* stored in host byte order */
	__u32 is_fullsock;	/* Some TCP fields are only valid if
				 * there is a full socket. If not, the
				 * fields read as zero.
				 */
	__u32 snd_cwnd;
	__u32 srtt_us;		/* Averaged RTT << 3 in usecs */
	__u32 bpf_sock_ops_cb_flags; /* flags defined in uapi/linux/tcp.h */
	__u32 state;
	__u32 rtt_min;
	__u32 snd_ssthresh;
	__u32 rcv_nxt;
	__u32 snd_nxt;
	__u32 snd_una;
	__u32 mss_cache;
	__u32 ecn_flags;
	__u32 rate_delivered;
	__u32 rate_interval_us;
	__u32 packets_out;
	__u32 retrans_out;
	__u32 total_retrans;
	__u32 segs_in;
	__u32 data_segs_in;
	__u32 segs_out;
	__u32 data_segs_out;
	__u32 lost_out;
	__u32 sacked_out;
	__u32 sk_txhash;
	__u64 bytes_received;
	__u64 bytes_acked;
};

/* Definitions for bpf_sock_ops_cb_flags */
#define BPF_SOCK_OPS_RTO_CB_FLAG	(1<<0)
#define BPF_SOCK_OPS_RETRANS_CB_FLAG	(1<<1)
#define BPF_SOCK_OPS_STATE_CB_FLAG	(1<<2)
#define BPF_SOCK_OPS_ALL_CB_FLAGS       0x7		/* Mask of all currently
							 * supported cb flags
							 */

/* List of known BPF sock_ops operators.
 * New entries can only be added at the end
 */
enum {
	BPF_SOCK_OPS_VOID,
	BPF_SOCK_OPS_TIMEOUT_INIT,	/* Should return SYN-RTO value to use or
					 * -1 if default value should be used
					 */
	BPF_SOCK_OPS_RWND_INIT,		/* Should return initial advertized
					 * window (in packets) or -1 if default
					 * value should be used
					 */
	BPF_SOCK_OPS_TCP_CONNECT_CB,	/* Calls BPF program right before an
					 * active connection is initialized
					 */
	BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB,	/* Calls BPF program when an
						 * active connection is
						 * established
						 */
	BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB,	/* Calls BPF program when a
						 * passive connection is
						 * established
						 */
	BPF_SOCK_OPS_NEEDS_ECN,		/* If connection's congestion control
					 * needs ECN
					 */
	BPF_SOCK_OPS_BASE_RTT,		/* Get base RTT. The correct value is
					 * based on the path and may be
					 * dependent on the congestion control
					 * algorithm. In general it indicates
					 * a congestion threshold. RTTs above
					 * this indicate congestion
					 */
	BPF_SOCK_OPS_RTO_CB,		/* Called when an RTO has triggered.
					 * Arg1: value of icsk_retransmits
					 * Arg2: value of icsk_rto
					 * Arg3: whether RTO has expired
					 */
	BPF_SOCK_OPS_RETRANS_CB,	/* Called when skb is retransmitted.
					 * Arg1: sequence number of 1st byte
					 * Arg2: # segments
					 * Arg3: return value of
					 *       tcp_transmit_skb (0 => success)
					 */
	BPF_SOCK_OPS_STATE_CB,		/* Called when TCP changes state.
					 * Arg1: old_state
					 * Arg2: new_state
					 */
	BPF_SOCK_OPS_TCP_LISTEN_CB,	/* Called on listen(2), right after
					 * socket transition to LISTEN state.
					 */
};

/* List of TCP states. There is a build check in net/ipv4/tcp.c to detect
 * changes between the TCP and BPF versions. Ideally this should never happen.
 * If it does, we need to add code to convert them before calling
 * the BPF sock_ops function.
 */
enum {
	BPF_TCP_ESTABLISHED = 1,
	BPF_TCP_SYN_SENT,
	BPF_TCP_SYN_RECV,
	BPF_TCP_FIN_WAIT1,
	BPF_TCP_FIN_WAIT2,
	BPF_TCP_TIME_WAIT,
	BPF_TCP_CLOSE,
	BPF_TCP_CLOSE_WAIT,
	BPF_TCP_LAST_ACK,
	BPF_TCP_LISTEN,
	BPF_TCP_CLOSING,	/* Now a valid state */
	BPF_TCP_NEW_SYN_RECV,

	BPF_TCP_MAX_STATES	/* Leave at the end! */
};

#define TCP_BPF_IW		1001	/* Set TCP initial congestion window */
#define TCP_BPF_SNDCWND_CLAMP	1002	/* Set sndcwnd_clamp */

struct bpf_perf_event_value {
	__u64 counter;
	__u64 enabled;
	__u64 running;
};

#define BPF_DEVCG_ACC_MKNOD	(1ULL << 0)
#define BPF_DEVCG_ACC_READ	(1ULL << 1)
#define BPF_DEVCG_ACC_WRITE	(1ULL << 2)

#define BPF_DEVCG_DEV_BLOCK	(1ULL << 0)
#define BPF_DEVCG_DEV_CHAR	(1ULL << 1)

struct bpf_cgroup_dev_ctx {
	/* access_type encoded as (BPF_DEVCG_ACC_* << 16) | BPF_DEVCG_DEV_* */
	__u32 access_type;
	__u32 major;
	__u32 minor;
};

struct bpf_raw_tracepoint_args {
	__u64 args[0];
};

/* DIRECT:  Skip the FIB rules and go to FIB table associated with device
 * OUTPUT:  Do lookup from egress perspective; default is ingress
 */
#define BPF_FIB_LOOKUP_DIRECT  BIT(0)
#define BPF_FIB_LOOKUP_OUTPUT  BIT(1)

enum {
	BPF_FIB_LKUP_RET_SUCCESS,      /* lookup successful */
	BPF_FIB_LKUP_RET_BLACKHOLE,    /* dest is blackholed; can be dropped */
	BPF_FIB_LKUP_RET_UNREACHABLE,  /* dest is unreachable; can be dropped */
	BPF_FIB_LKUP_RET_PROHIBIT,     /* dest not allowed; can be dropped */
	BPF_FIB_LKUP_RET_NOT_FWDED,    /* packet is not forwarded */
	BPF_FIB_LKUP_RET_FWD_DISABLED, /* fwding is not enabled on ingress */
	BPF_FIB_LKUP_RET_UNSUPP_LWT,   /* fwd requires encapsulation */
	BPF_FIB_LKUP_RET_NO_NEIGH,     /* no neighbor entry for nh */
	BPF_FIB_LKUP_RET_FRAG_NEEDED,  /* fragmentation required to fwd */
};

struct bpf_fib_lookup {
	/* input:  network family for lookup (AF_INET, AF_INET6)
	 * output: network family of egress nexthop
	 */
	__u8	family;

	/* set if lookup is to consider L4 data - e.g., FIB rules */
	__u8	l4_protocol;
	__be16	sport;
	__be16	dport;

	/* total length of packet from network header - used for MTU check */
	__u16	tot_len;

	/* input: L3 device index for lookup
	 * output: device index from FIB lookup
	 */
	__u32	ifindex;

	union {
		/* inputs to lookup */
		__u8	tos;		/* AF_INET  */
		__be32	flowinfo;	/* AF_INET6, flow_label + priority */

		/* output: metric of fib result (IPv4/IPv6 only) */
		__u32	rt_metric;
	};

	union {
		__be32		ipv4_src;
		__u32		ipv6_src[4];  /* in6_addr; network order */
	};

	/* input to bpf_fib_lookup, ipv{4,6}_dst is destination address in
	 * network header. output: bpf_fib_lookup sets to gateway address
	 * if FIB lookup returns gateway route
	 */
	union {
		__be32		ipv4_dst;
		__u32		ipv6_dst[4];  /* in6_addr; network order */
	};

	/* output */
	__be16	h_vlan_proto;
	__be16	h_vlan_TCI;
	__u8	smac[6];     /* ETH_ALEN */
	__u8	dmac[6];     /* ETH_ALEN */
};

enum bpf_task_fd_type {
	BPF_FD_TYPE_RAW_TRACEPOINT,	/* tp name */
	BPF_FD_TYPE_TRACEPOINT,		/* tp name */
	BPF_FD_TYPE_KPROBE,		/* (symbol + offset) or addr */
	BPF_FD_TYPE_KRETPROBE,		/* (symbol + offset) or addr */
	BPF_FD_TYPE_UPROBE,		/* filename + offset */
	BPF_FD_TYPE_URETPROBE,		/* filename + offset */
};

#endif /* __LINUX_BPF_H__ */
 07070100000171000081A4000003E800000064000000015E17A247000004CE000000000000000000000000000000000000002900000000cilium-proxy-20200109/linux/bpf_common.h  #ifndef __LINUX_BPF_COMMON_H__
#define __LINUX_BPF_COMMON_H__

/* Instruction classes */
#define BPF_CLASS(code) ((code) & 0x07)
#define		BPF_LD		0x00
#define		BPF_LDX		0x01
#define		BPF_ST		0x02
#define		BPF_STX		0x03
#define		BPF_ALU		0x04
#define		BPF_JMP		0x05
#define		BPF_RET		0x06
#define		BPF_MISC        0x07

/* ld/ldx fields */
#define BPF_SIZE(code)  ((code) & 0x18)
#define		BPF_W		0x00
#define		BPF_H		0x08
#define		BPF_B		0x10
#define BPF_MODE(code)  ((code) & 0xe0)
#define		BPF_IMM		0x00
#define		BPF_ABS		0x20
#define		BPF_IND		0x40
#define		BPF_MEM		0x60
#define		BPF_LEN		0x80
#define		BPF_MSH		0xa0

/* alu/jmp fields */
#define BPF_OP(code)    ((code) & 0xf0)
#define		BPF_ADD		0x00
#define		BPF_SUB		0x10
#define		BPF_MUL		0x20
#define		BPF_DIV		0x30
#define		BPF_OR		0x40
#define		BPF_AND		0x50
#define		BPF_LSH		0x60
#define		BPF_RSH		0x70
#define		BPF_NEG		0x80
#define		BPF_MOD		0x90
#define		BPF_XOR		0xa0

#define		BPF_JA		0x00
#define		BPF_JEQ		0x10
#define		BPF_JGT		0x20
#define		BPF_JGE		0x30
#define		BPF_JSET        0x40
#define BPF_SRC(code)   ((code) & 0x08)
#define		BPF_K		0x00
#define		BPF_X		0x08

#ifndef BPF_MAXINSNS
#define BPF_MAXINSNS 4096
#endif

#endif /* __LINUX_BPF_COMMON_H__ */
  07070100000172000081A4000003E800000064000000015E17A247000001FF000000000000000000000000000000000000002A00000000cilium-proxy-20200109/linux/type_mapper.h #ifndef __LINUX_TYPE_MAPPER_H__
#define __LINUX_TYPE_MAPPER_H__

#include <stdint.h>

#define __u64 uint64_t
#define __u32 uint32_t
#define __u16 uint16_t
#define __u8 uint8_t

#define __s64 int64_t
#define __s32 int32_t
#define __s16 int16_t
#define __s8 int8_t

#if !defined(__aligned_u64)
#define __aligned_u64 uint64_t
#endif

#define __be64 uint64_t
#define __be32 uint32_t
#define __be16 uint16_t

#define __le64 uint64_t
#define __le32 uint32_t
#define __le16 uint16_t

#define __sum16 uint16_t

#endif

 07070100000173000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000001E00000000cilium-proxy-20200109/patches 07070100000174000081A4000003E800000064000000015E17A24700000000000000000000000000000000000000000000002400000000cilium-proxy-20200109/patches/BUILD   07070100000175000081A4000003E800000064000000015E17A247000008AE000000000000000000000000000000000000003400000000cilium-proxy-20200109/patches/sni_support_fix.patch   diff --git a/source/common/upstream/original_dst_cluster.cc b/source/common/upstream/original_dst_cluster.cc
index 41fb681f7..f73b9b066 100644
--- a/source/common/upstream/original_dst_cluster.cc
+++ b/source/common/upstream/original_dst_cluster.cc
@@ -62,7 +62,7 @@ HostConstSharedPtr Cluster::LoadBalancer::chooseHost(LoadBalancerContext* contex
 
         // Create an override transport socket options that automatically provides both SNI as well
         // as SAN verification for the new host if the cluster has been configured with TLS.
-        if (parent_->has_tls_context_) {
+        if (parent_->implements_secure_transport_) {
           absl::string_view sni;
 
           // First check if have requested server name in the downstream connection
@@ -171,7 +171,10 @@ Cluster::Cluster(const envoy::api::v2::Cluster& config, Runtime::Loader& runtime
       use_http_header_(info_->lbOriginalDstConfig()
                            ? info_->lbOriginalDstConfig().value().use_http_header()
                            : false),
-      has_tls_context_(config.has_tls_context()), host_map_(std::make_shared<HostMap>()) {
+      implements_secure_transport_(info_->transportSocketMatcher()
+                                       .resolve(envoy::api::v2::core::Metadata())
+                                       .factory_.implementsSecureTransport()),
+      host_map_(std::make_shared<HostMap>()) {
   // TODO(dio): Remove hosts check once the hosts field is removed.
   if (config.has_load_assignment() || !config.hosts().empty()) {
     throw EnvoyException("ORIGINAL_DST clusters must have no load assignment or hosts configured");
diff --git a/source/common/upstream/original_dst_cluster.h b/source/common/upstream/original_dst_cluster.h
index c6f31650b..e6177a0c3 100644
--- a/source/common/upstream/original_dst_cluster.h
+++ b/source/common/upstream/original_dst_cluster.h
@@ -135,7 +135,7 @@ private:
   const std::chrono::milliseconds cleanup_interval_ms_;
   Event::TimerPtr cleanup_timer_;
   const bool use_http_header_;
-  const bool has_tls_context_;
+  const bool implements_secure_transport_;
 
   absl::Mutex host_map_lock_;
   HostMapConstSharedPtr host_map_ ABSL_GUARDED_BY(host_map_lock_);
  07070100000176000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000001F00000000cilium-proxy-20200109/proxylib    07070100000177000081A4000003E800000064000000015E17A247000010A9000000000000000000000000000000000000002B00000000cilium-proxy-20200109/proxylib/libcilium.h    /* Code generated by cmd/cgo; DO NOT EDIT. */

/* package github.com/cilium/cilium/proxylib */


#line 1 "cgo-builtin-prolog"

#include <stddef.h> /* for ptrdiff_t below */

#ifndef GO_CGO_EXPORT_PROLOGUE_H
#define GO_CGO_EXPORT_PROLOGUE_H

typedef struct { const char *p; ptrdiff_t n; } _GoString_;

#endif

/* Start of preamble from import "C" comments.  */


#line 17 "proxylib.go"

#include "proxylib/types.h"

#line 1 "cgo-generated-wrapper"


/* End of preamble from import "C" comments.  */


/* Start of boilerplate cgo prologue.  */
#line 1 "cgo-gcc-export-header-prolog"

#ifndef GO_CGO_PROLOGUE_H
#define GO_CGO_PROLOGUE_H

typedef signed char GoInt8;
typedef unsigned char GoUint8;
typedef short GoInt16;
typedef unsigned short GoUint16;
typedef int GoInt32;
typedef unsigned int GoUint32;
typedef long long GoInt64;
typedef unsigned long long GoUint64;
typedef GoInt64 GoInt;
typedef GoUint64 GoUint;
typedef __SIZE_TYPE__ GoUintptr;
typedef float GoFloat32;
typedef double GoFloat64;
typedef float _Complex GoComplex64;
typedef double _Complex GoComplex128;

/*
  static assertion to make sure the file is being used on architecture
  at least with matching size of GoInt.
*/
typedef char _check_for_64_bit_pointer_matching_GoInt[sizeof(void*)==64/8 ? 1:-1];

typedef _GoString_ GoString;
typedef void *GoMap;
typedef void *GoChan;
typedef struct { void *t; void *v; } GoInterface;
typedef struct { void *data; GoInt len; GoInt cap; } GoSlice;

#endif

/* End of boilerplate cgo prologue.  */

#ifdef __cplusplus
extern "C" {
#endif


// OnNewConnection is used to register a new connection of protocol 'proto'.
// Note that the 'origBuf' and replyBuf' type '*[]byte' corresponds to 'InjectBuf' type, but due to
// cgo export restrictions we can't use the go type in the prototype.

extern FilterResult OnNewConnection(GoUint64 p0, GoString p1, GoUint64 p2, GoUint8 p3, GoUint32 p4, GoUint32 p5, GoString p6, GoString p7, GoString p8, GoSlice* p9, GoSlice* p10);

// Each connection is assumed to be called from a single thread, so accessing connection metadata
// does not need protection.
//
// OnData gets all the unparsed data the datapath has received so far. The data is provided to the parser
// associated with the connection, and the parser is expected to find if the data frame contains enough data
// to make a PASS/DROP decision for the whole data frame. Note that the whole data frame need not be received,
// if the decision including the length of the data frame in bytes can be determined based on the beginning of
// the data frame only (e.g., headers including the length of the data frame). The parser returns a decision
// with the number of bytes on which the decision applies. If more data is available, then the parser will be
// called again with the remaining data. Parser needs to return MORE if a decision can't be made with
// the available data, including the minimum number of additional bytes that is needed before the parser is
// called again.
//
// The parser can also inject at arbitrary points in the data stream. This is indecated by an INJECT operation
// with the number of bytes to be injected. The actual bytes to be injected are provided via an Inject()
// callback prior to returning the INJECT operation. The Inject() callback operates on a limited size buffer
// provided by the datapath, and multiple INJECT operations may be needed to inject large amounts of data.
// Since we get the data on one direction at a time, any frames to be injected in the reverse direction
// are placed in the reverse direction buffer, from where the datapath injects the data before calling
// us again for the reverse direction input.
//

extern FilterResult OnData(GoUint64 p0, GoUint8 p1, GoUint8 p2, GoSlice* p3, GoSlice* p4);

// Make this more general connection event callback

extern void Close(GoUint64 p0);

// OpenModule is called before any other APIs.
// Called concurrently by different filter instances.
// Returns a library instance ID that must be passed to all other API calls.
// Calls with the same parameters will return the same instance.
// Zero return value indicates an error.

extern GoUint64 OpenModule(GoSlice p0, GoUint8 p1);

extern void CloseModule(GoUint64 p0);

#ifdef __cplusplus
}
#endif
   07070100000178000081A4000003E800000064000000015E17A2470000072E000000000000000000000000000000000000002700000000cilium-proxy-20200109/proxylib/types.h    /*
 * Copyright 2018 Authors of Cilium
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef PROXYLIB_TYPES_H
#define PROXYLIB_TYPES_H

#include <stdint.h>

typedef enum {
  FILTEROP_MORE,   // Need more data
  FILTEROP_PASS,   // Pass N bytes
  FILTEROP_DROP,   // Drop N bytes
  FILTEROP_INJECT, // Inject N>0 bytes
  FILTEROP_ERROR,  // Protocol parsing error
} FilterOpType;

typedef enum {
  FILTEROP_ERROR_INVALID_OP_LENGTH = 1,   // Parser returned invalid operation length
  FILTEROP_ERROR_INVALID_FRAME_TYPE,
  FILTEROP_ERROR_INVALID_FRAME_LENGTH,
} FilterOpError;

typedef struct {
  uint64_t op;      // FilterOpType
  int64_t  n_bytes; // >0
} FilterOp;

typedef enum {
  FILTER_OK,                 // Operation was successful
  FILTER_POLICY_DROP,        // Connection needs to be dropped due to (L3/L4) policy
  FILTER_PARSER_ERROR,       // Connection needs to be dropped due to parser error
  FILTER_UNKNOWN_PARSER,     // Connection needs to be dropped due to unknown parser
  FILTER_UNKNOWN_CONNECTION, // Connection needs to be dropped due to it being unknown
  FILTER_INVALID_ADDRESS,    // Destination address in invalid format
  FILTER_INVALID_INSTANCE,   // Destination address in invalid format
  FILTER_UNKNOWN_ERROR,      // Error type could not be cast to an error code
} FilterResult;

#endif
  07070100000179000041ED000003E800000064000000025E17A24700000000000000000000000000000000000000000000001C00000000cilium-proxy-20200109/tools   0707010000017A000081ED000003E800000064000000015E17A247000003BA000000000000000000000000000000000000003200000000cilium-proxy-20200109/tools/check_repositories.sh #!/bin/bash

set -eu

# Check whether any git repositories are defined.
# Git repository definition contains `commit` and `remote` fields.
if grep -nr "commit =\|remote =" WORKSPACE; then
  echo "Using git repositories is not allowed."
  echo "To ensure that all dependencies can be stored offline in distdir, only HTTP repositories are allowed."
  exit 1
fi

# Check whether number of defined `url =` and `sha256 =` kwargs in repository
# definitions is equal.
urls_count=$(git grep -E "url =" -- WORKSPACE | wc -l)
sha256sums_count=$(git grep -E "sha256 =" -- WORKSPACE | wc -l)

if [[ $urls_count != $sha256sums_count ]]; then
  echo "Found more defined repository URLs than SHA256 sums, which means that there are some repositories without sums."
  echo "Dependencies without SHA256 sums cannot be stored in distdir."
  echo "Please ensure that every repository has a SHA256 sum."
  echo "Repositories are defined in the WORKSPACE file."
  exit 1
fi
  0707010000017B000081ED000003E800000064000000015E17A24700000657000000000000000000000000000000000000003100000000cilium-proxy-20200109/tools/get_workspace_status  #!/bin/bash

# This file was imported from https://github.com/bazelbuild/bazel at d6fec93.

# This script will be run bazel when building process starts to
# generate key-value information that represents the status of the
# workspace. The output should be like
#
# KEY1 VALUE1
# KEY2 VALUE2
#
# If the script exits with non-zero code, it's considered as a failure
# and the output will be discarded.

# For Envoy in particular, we want to force binaries to relink when the Git
# SHA changes (https://github.com/envoyproxy/envoy/issues/2551). This can be
# done by prefixing keys with "STABLE_". To avoid breaking compatibility with
# other status scripts, this one still echos the non-stable ("volatile") names.

# The code below presents an implementation that works for git repository
git_rev=$(git rev-parse HEAD)
if [[ $? != 0 ]];
then
    # If this SOURCE_VERSION file exists then it must have been placed here by a
    # distribution doing a non-git, source build.
    # Distributions would be expected to echo the commit/tag as BUILD_SCM_REVISION
    if [ -f SOURCE_VERSION ]
    then
        echo "BUILD_SCM_REVISION $(cat SOURCE_VERSION)"
        echo "STABLE_BUILD_SCM_REVISION $(cat SOURCE_VERSION)"
        echo "BUILD_SCM_STATUS Distribution"
        exit 0
    fi
    exit 1
fi
echo "BUILD_SCM_REVISION ${git_rev}"
echo "STABLE_BUILD_SCM_REVISION ${git_rev}"

# Check whether there are any uncommitted changes
git diff-index --quiet HEAD --
if [[ $? == 0 ]];
then
    tree_status="Clean"
else
    tree_status="Modified"
fi
echo "BUILD_SCM_STATUS ${tree_status}"
echo "STABLE_BUILD_SCM_STATUS ${tree_status}"
 0707010000017C000081ED000003E800000064000000015E17A24700000280000000000000000000000000000000000000002D00000000cilium-proxy-20200109/tools/install_bazel.sh  #!/usr/bin/env bash

BAZEL_VERSION=$1

echo "Checking if Bazel ${BAZEL_VERSION} needs to be installed..."
if [[ $(command -v bazel) && "$(bazel version | grep 'label' | cut -d ' ' -f 3)" =~ ${BAZEL_VERSION} ]]; then
  echo "Bazel ${BAZEL_VERSION} already installed, skipping fetch."
else
  wget -nv https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VERSION}/bazel-${BAZEL_VERSION}-installer-linux-x86_64.sh
  chmod +x bazel-${BAZEL_VERSION}-installer-linux-x86_64.sh
  sudo -E ./bazel-${BAZEL_VERSION}-installer-linux-x86_64.sh
  sudo -E mv /usr/local/bin/bazel /usr/bin
  rm bazel-${BAZEL_VERSION}-installer-linux-x86_64.sh
fi
07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!                                                                                    5653 blocks
